<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Joe Mayo</title>
        <link>http://geekswithblogs.net/WinAZ/Default.aspx</link>
        <description>Cloud and Glue</description>
        <language>en-US</language>
        <copyright>Joe Mayo</copyright>
        <managingEditor>jmayo@mayosoftware.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Joe Mayo</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/WinAZ/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Windows 8 for Developers Online Camp</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/05/20/windows-8-for-developers-online-camp.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/05/20/windows-8-for-developers-online-camp.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/05/20/windows-8-for-developers-online-camp.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;On May 21st, Ziff Davis is hosting an eSeminar, &lt;a href="http://www.eseminarslive.com/c/a/application-development/MSFT-052113/" target="_blank"&gt;Windows 8 for Developers Online Camp&lt;/a&gt;. Speakers include Greg Levenhagen, &lt;a href="https://twitter.com/GregLevenhagen" target="_blank"&gt;@GregLevenhagen&lt;/a&gt;, and myself. Here’s the agenda:&lt;/p&gt;  &lt;p&gt;- Building a Windows 8 App in 15 minutes or less.    &lt;br /&gt;- Where is Microsoft headed, how it differs from others (Apple/Google), and why it makes sense.     &lt;br /&gt;- Win8 Development versus Android, iOS, and Pre-Win8 Dev   &lt;br /&gt;- What’s Different in Building for Windows 8?     &lt;br /&gt;- Understanding the potential to Make Money With Windows 8     &lt;br /&gt;- What it takes to submit an app (It’s not that hard)     &lt;br /&gt;- What help is available? (There is some very good, free help and tools available)     &lt;br /&gt;- Next Steps / Getting Started&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152965.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/05/20/windows-8-for-developers-online-camp.aspx</guid>
            <pubDate>Mon, 20 May 2013 23:01:52 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/05/20/windows-8-for-developers-online-camp.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152965.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152965.aspx</trackback:ping>
        </item>
        <item>
            <title>Webinar: Async Programming in C#</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/05/07/webinar-async-programming-in-c.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/05/07/webinar-async-programming-in-c.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/05/07/webinar-async-programming-in-c.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tomorrow, I’m doing a live webinar with &lt;a href="http://www.learnnowonline.com/" target="_blank"&gt;Learn Now&lt;/a&gt; on Async Programming in C#. More details here: &lt;a href="http://bit.ly/17JT792"&gt;http://bit.ly/17JT792&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152887.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/05/07/webinar-async-programming-in-c.aspx</guid>
            <pubDate>Tue, 07 May 2013 16:40:52 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/05/07/webinar-async-programming-in-c.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152887.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152887.aspx</trackback:ping>
        </item>
        <item>
            <title>Global Windows Azure Bootcamp&amp;ndash;4/27/2013</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/04/23/global-windows-azure-bootcampndash4272013.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/04/23/global-windows-azure-bootcampndash4272013.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/04/23/global-windows-azure-bootcampndash4272013.aspx&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;&lt;a href="https://gwb.blob.core.windows.net/winaz/Windows-Live-Writer/Global-Windows-Azure-Bootcamp4272013_AFEC/clip_image001%5B4%5D.png"&gt;&lt;img title="clip_image001[4]" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="clip_image001[4]" src="https://gwb.blob.core.windows.net/winaz/Windows-Live-Writer/Global-Windows-Azure-Bootcamp4272013_AFEC/clip_image001%5B4%5D_thumb.png" width="244" height="166" /&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;Denver Windows Azure Bootcamp&lt;/h3&gt;  &lt;p&gt;On &lt;strong&gt;April 27th, 2013&lt;/strong&gt;, join us at a Windows Azure Bootcamp in Denver, just one of the 95+ locations hosting this massive event. This free &lt;strong&gt;one day deep dive class&lt;/strong&gt; will get you up to speed on developing for Windows Azure. The class includes a trainer with deep real world experience with Windows Azure, as well as a series of labs so you can practice what you just learned.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Register for the event today &lt;/b&gt;at&lt;b&gt; &lt;/b&gt;&lt;a href="https://gwabdenver.eventday.com"&gt;https://gwabdenver.eventday.com&lt;/a&gt;. There are only 100 seats available so act fast!&lt;/p&gt;  &lt;p&gt;This &lt;b&gt;free&lt;/b&gt; training event will be&lt;b&gt; &lt;/b&gt;hosted at &lt;b&gt;Microsoft - Denver Tech Center - 7595 Technology Way Suite 400&lt;/b&gt;. Want more&lt;b&gt; &lt;/b&gt;information? Check out &lt;a href="http://globalwindowsazure.azurewebsites.net"&gt;http://globalwindowsazure.azurewebsites.net&lt;/a&gt;    &lt;br /&gt;and follow hashtag #&lt;a href="https://twitter.com/search?q=GlobalWindowsAzure"&gt;GlobalWindowsAzure&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Not enough reasons to sign up? How about awesome door prizes:   &lt;/p&gt;&lt;table cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;JetBrains&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ONE (1) winner at each event gets a license of one of their products. The winner may choose from ReSharper, dotTrace, dotCover, PhpStorm, PyCharm, IntelliJ IDEA, AppCode, WebStorm.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;PluralSight&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ONE (1) winner at each event will get a 1 Year Annual Subscription.             &lt;br /&gt;- ALL Attendees will get a 7 Day training pass via a unique code.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;Telerik&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ONE (1) winner at each event will get a DevCraft Complete (all their products).&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;Cerebrata&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ALL Attendees will get a license to the new Azure Management Studio product. There will be an email address they can use to request it.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;Blue Syntax&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ONE (1) winner at each event can win a Cloud Backup Advanced Edition license.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;MyGet&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ONE (1) winner at each event can win a 1 year Starter Subscription             &lt;br /&gt;- ALL Attendees will get a 1 month starter subscription redeemable via an online sign up form.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;Cloud Berry&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- FIVE (5) winners at each event can win a Cloud Berry Explorer License             &lt;br /&gt;- FIVE (5) winners at each event can win a Cloud Berry Drive License&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;AzureWatch&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ALL Attendees will get a free 30 day unlimited license, redeemable via a unique code.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;Inner Workings&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ALL Attendees will get 90 days Free Training, redeemable online.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="113"&gt;           &lt;p&gt;Zudio&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="535"&gt;           &lt;p&gt;- ALL Attendees will get a 3 month free trial redeemable via a unique code.             &lt;br /&gt;- ALL Organizers will get a 1 year subscription.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;   &lt;p&gt;&lt;b&gt;Bonus &lt;/b&gt;points to take part in an experiment to set a &lt;b&gt;record for the largest "Shared Workload"&lt;/b&gt; run by a community in a public Cloud. The general idea is to launch a ready-to-go Windows Azure deployment package in every event location around the world. The workload is a video rendering farm which will render videos from a set of depth frame images - a very CPU intensive workload that takes a lot of time to process. Progress will be measured by country and location and each participant will be able to follow this progress.&lt;/p&gt;  &lt;p&gt;You know you want in. &lt;a href="https://gwabdenver.eventday.com/"&gt;Register&lt;/a&gt; today!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152770.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/04/23/global-windows-azure-bootcampndash4272013.aspx</guid>
            <pubDate>Tue, 23 Apr 2013 18:32:36 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/04/23/global-windows-azure-bootcampndash4272013.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152770.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152770.aspx</trackback:ping>
        </item>
        <item>
            <title>Twitter API v1.0 Deprecation and Blackout Schedule</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/04/16/twitter-api-v1.0-deprecation-and-blackout-schedule.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/04/16/twitter-api-v1.0-deprecation-and-blackout-schedule.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/04/16/twitter-api-v1.0-deprecation-and-blackout-schedule.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Twitter has officially announced &lt;a href="https://dev.twitter.com/blog/api-v1-retirement-final-dates" target="_blank"&gt;API v1 Retirement: Final Dates&lt;/a&gt;. The final date will be May 7th 2013. So, if you still have code running on Twitter API v1.0, you’ll need to upgrade to Twitter API v1.1. &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt; has supported Twitter API v1.1 for  months and you can download it from codeplex.com or &lt;a href="http://nuget.org/packages/linqtotwitter" target="_blank"&gt;NuGet&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;To help people understand the impact, Twitter will be having a blackout period starting at 4:00pm PDT today. This is an opportunity to verify that all of your endpoints have been re-written to use Twitter API v1.1. If you’re using the latest version of LINQ to Twitter, you shouldn’t have a problem. This will mostly affect folks who have written their own plumbing code or are working with an older library that only supports v1.0.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152706.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/04/16/twitter-api-v1.0-deprecation-and-blackout-schedule.aspx</guid>
            <pubDate>Tue, 16 Apr 2013 19:55:14 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/04/16/twitter-api-v1.0-deprecation-and-blackout-schedule.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152706.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152706.aspx</trackback:ping>
        </item>
        <item>
            <title>Released LINQ to Twitter v2.1.05</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/04/08/released-linq-to-twitter-v2.1.05.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/04/08/released-linq-to-twitter-v2.1.05.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/04/08/released-linq-to-twitter-v2.1.05.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Today, I released &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt; v2.1.05, which is available via NuGet or the LINQ to Twitter &lt;a href="http://bit.ly/Z3Aslz" target="_blank"&gt;Download&lt;/a&gt; page. &lt;/p&gt;  &lt;p&gt;This was a critical release because Twitter changed their OAuth handling logic, as explained in the discussion, “&lt;a href="http://bit.ly/10K77MD" target="_blank"&gt;oauth/access_token Stopped working today&lt;/a&gt;” on their developer site. In particular, this change requires all access_token endpoint calls to include the oauth_verifier for out-of-band, OOB, authorization. What this means is that any applications using PIN authorization with LINQ to Twitter will break or are already broken.&lt;/p&gt;  &lt;p&gt;Impact-wise, I wasn’t seeing a problem with Console applications, but it did break Windows Phone apps. What this tells me is that the change isn’t fully implemented across the entire Twitter API, yet. However, if you’re using PIN authorization on any application type, you’ll want to upgrade to LINQ to Twitter v2.1.05 or later because this change is likely to eventually affect everyone using PIN authorization.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152646.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/04/08/released-linq-to-twitter-v2.1.05.aspx</guid>
            <pubDate>Mon, 08 Apr 2013 15:36:04 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/04/08/released-linq-to-twitter-v2.1.05.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152646.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152646.aspx</trackback:ping>
        </item>
        <item>
            <title>Truth, Equality, and the Meaning of Null</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/03/28/truth-equality-and-the-meaning-of-null.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/03/28/truth-equality-and-the-meaning-of-null.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/03/28/truth-equality-and-the-meaning-of-null.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;There’s been some discussion recently about whether it’s proper for a language to support null values or not. My guess is that the people having these discussions are a whole lot smarter than myself, so it’s probably best to defer to their judgment on any matters that might conflict with whatever I have to say. That said, there might be semantic differences in what is being referred to when discussing null. Perhaps one discussion regards the logical operation or state of code, whereas my perspective in this post is on data.&lt;/p&gt;  &lt;p&gt;There was a time when I was fascinated by subjects such as truth, equality, and the meaning of null. Especially when thinking about data, null is an interesting subject. In a relational context, null means the absence of a value. When writing code, the meaning of null is determined by your domain. You typically won’t have a specific requirement, use case, or story that tells you how to work with a null value when first writing the code and your logic is often inferred. It’s often when a bug appears in your code that a formal requirement might be specified, but I say “might” loosely because handling of null is a technical requirement and the bug would probably be stated as the functional requirement to satisfy. This is why null values are often so aggravating because they bubble up later in the application lifecycle where they’re more painful to deal with. This seemingly mundane topic of existence appears to be more important than one may think.&lt;/p&gt;  &lt;p&gt;Today I encountered a null in the wild and all the related discussion compelled me to investigate. I was adding a new field to the &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt; Status entity named &lt;em&gt;FavoriteCount&lt;/em&gt;. This relates to the Twitter &lt;a href="https://dev.twitter.com/docs/platform-objects/tweets" target="_blank"&gt;Tweets&lt;/a&gt; &lt;em&gt;favorite_count&lt;/em&gt; field. What caught my eye is the definition of favorite_count identifies the field as Nullable. I know what Nullable means in relational and .NET parlance, but Twitter is a different world. So, I went to the Twitter developer’s site and asked, &lt;a href="https://dev.twitter.com/discussions/16272" target="_blank"&gt;“What is the Meaning of null favorite_count?”&lt;/a&gt;. I’ll quote an important part of @episod’s answer:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The state of null is usually reached because it was not possible at the time of servicing the request to provide a value in that field -- an underlying system could have taken too long to respond, or a null value got cached at some other point in time when that happened.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;One could say that this is the same thing as the “absence of a value” definition I mentioned earlier, but there’s an important nuance here in the context of the data source and nature of the application. The “absence of a value” comes from a relational ACID transaction perspective where you have what you’re going to get. However, Twitter is a massively scalable system that uses a NoSQL data source. From the answer and the scalable NoSQL perspective, the true value of favorite_count may not be null at the point in time that you’re looking at it, but you don’t know for sure. I believe the proper term for this phenomenon is Eventual Consistency. There’s some hair splitting that can be done here, but I’m speaking in general terms.&lt;/p&gt;  &lt;p&gt;In my initial question about the favorite_count field, I wondered whether it was safe to assume that a null value meant 0. Making a blanket assumption like that could certainly cause some trouble and it would be unwise for me to make that assumption on behalf of the developers using LINQ to Twitter. e.g. What if an application would rather monitor a tweet for N minutes to see what the real favorite_count was after it initially appeared as null? There are variations of this theme, but it’s a situation where I would want to expose functionality that was meaningful and allowed the developer to know the true state of an entity.&lt;/p&gt;  &lt;p&gt;To understand what null is and put it into context is an important endeavor, especially in keeping customers from hating you and reducing project lifecycle costs. However, you still need language support unless you regress to kludges of earlier platforms. In the first version of .NET you could encounter code that either treated a value as a string or used some other mechanism, such as an alternate value to represent null values. I can’t count the number of different representations of DateTime value system I encountered in those days and the headaches of accepting defaults of different databases with null values. Of course, ADO.NET has the DBNull type and there were 3rd party libraries that special types that allowed you to represent nullable value types.  .NET 2.0 introduced the Nullable&amp;lt;T&amp;gt; type and added special language support to C#, where you could add a Nullable suffix, such as DateTime?. These days, it’s easy to represent null data in a consistent way with both .NET Framework and language support.&lt;/p&gt;  &lt;p&gt;Null data is a reality. Old databases often have null values. These old databases also have applications with logic that relies on the null data. The cost/benefit of a re-write can result in leaving things as is. There are also current scenarios where null makes sense, such as when having Created and Modified fields on a record where it doesn’t make sense to provide a value for Modified because the record hasn’t changed since it’s initial value. One could argue that Modified should have the Created time and application logic would detect this fact or perhaps another design would be more appropriate, but the fact is that you’ll find people with differing opinions on what the data design should be in any given situation and sometimes the argument for null will win. I’m not one to fall on my sword for a null value when it’s possible to write code to deal with it. Another perspective, as mentioned earlier is the NoSQL world with eventually consistent data. Regardless of what arguments you have on that, the reality is that you will be working with APIs, public data, and situations where the need for scalability results in null data making sense or being the best choice to meet requirements.&lt;/p&gt;  &lt;p&gt;So, I’m not trying to say that someone else’s opinion of null is wrong. However, it seems like there are nuances to consider before declaring that “Null is Evil!” Our industry is plagued with never-ending battles of who’s platform or language is best and the true answer can sometimes be found in-between. While &lt;a href="http://news.yahoo.com/nothing-physicists-debate-132817357.html" target="_blank"&gt;Scientists debate What is Nothing&lt;/a&gt;, VB developers can relate and C# developers can say that’s equivalent to null. Or is nothing really something to care about?&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152542.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/03/28/truth-equality-and-the-meaning-of-null.aspx</guid>
            <pubDate>Thu, 28 Mar 2013 23:04:49 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/03/28/truth-equality-and-the-meaning-of-null.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152542.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152542.aspx</trackback:ping>
        </item>
        <item>
            <title>IOException on WebRequest.Create in .NET 4.5</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/03/27/ioexception-on-webrequest.create-in-.net-4.5.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/03/27/ioexception-on-webrequest.create-in-.net-4.5.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/03/27/ioexception-on-webrequest.create-in-.net-4.5.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I was testing .NET 4.5 compatibility in &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt; when I encountered an IOException with the message: “The specified registry key does not exist.” This occurred during a call to System.Net.WebRequest.Create().&lt;/p&gt;  &lt;p&gt;This is something that happened after a Windows update, &lt;a href="http://support.microsoft.com/kb/2745030" target="_blank"&gt;kb2745030&lt;/a&gt;. Since this is a security issue, you’ll want to read Microsoft’s article and make your own determination on what to do. Someone has already reported the issue on Connect with a work-around similar to the Microsoft Kb article, &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/773666/webrequest-create-eats-an-ioexception-on-the-first-call#details" target="_blank"&gt;WebRequest.Create eats an IOException on the first call&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152539.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/03/27/ioexception-on-webrequest.create-in-.net-4.5.aspx</guid>
            <pubDate>Thu, 28 Mar 2013 03:59:54 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/03/27/ioexception-on-webrequest.create-in-.net-4.5.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152539.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152539.aspx</trackback:ping>
        </item>
        <item>
            <title>Exception Handling for LINQ to Twitter Streams</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/03/23/exception-handling-for-linq-to-twitter-streams.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/03/23/exception-handling-for-linq-to-twitter-streams.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/03/23/exception-handling-for-linq-to-twitter-streams.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Tonight, I checked-in changes to streaming in &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt;. The primary refactoring was to remove the automatic error handling that had been in place since the beginning of stream support in LINQ to Twitter.&lt;/p&gt;  &lt;p&gt;The primary problem with my previous approach is that a 3rd party library should not be performing exception handling on behalf of a developer. Originally, I thought it would be a great feature to do what I could to reduce the pain associated with HTTP exceptions that occur when communicating with Twitter. The basic functionality I’m referring to is the need to catch exceptions and retry with a back-off strategy that’s consistent with Twitter’s guidance for &lt;a href="https://dev.twitter.com/docs/streaming-apis/connecting" target="_blank"&gt;Connecting with a streaming endpoint&lt;/a&gt;. However, the issue is that the developer doesn’t really see what is happening unless they watch the log messages that LINQ to Twitter produces or perform their own debugging. The previous design reduces a developer’s ability to help themselves. Moving forward, anyone who needs to use streams should design their own approach, following Twitter’s guidelines.&lt;/p&gt;  &lt;p&gt;If you are a current user of LINQ to Twitter’s streaming support, you’ll need to implement error handling if you upgrade to the next release, which will be v2.1.05. If you would like to get started early, the new source code is available for download. &lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152499.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/03/23/exception-handling-for-linq-to-twitter-streams.aspx</guid>
            <pubDate>Sun, 24 Mar 2013 05:47:38 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/03/23/exception-handling-for-linq-to-twitter-streams.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152499.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152499.aspx</trackback:ping>
        </item>
        <item>
            <title>Released LINQ to Twitter v2.1.04</title>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/03/15/released-linq-to-twitter-v2.1.04.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/03/15/released-linq-to-twitter-v2.1.04.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/03/15/released-linq-to-twitter-v2.1.04.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Today, I released the latest version of &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt;, v2.1.04. Many of the modifications include new parameters for commands and queries, or new Entity properties. A few items were deprecated, so look for Obsolete warnings and minor changes to overloads. i.e. Since Twitter automatically wraps all links with t.co URLs, the WrapLinks parameter is deprecated.&lt;/p&gt;  &lt;p&gt;Some notable changes occurred in the areas of authentication where there was a bug fix to WinRtAuthorizer, basic streams use OAuth, and I added a new ApplicationOnlyAuthorizer:&lt;/p&gt;  &lt;p&gt;WinRtAuthorizer Bug Fix – There was a race condition with the async implementation of AuthorizeAsync on the WinRtAuthorizer. This is now fixed and, if you’re using WinRtAuthorizer, you’ll want to upgrade to upgrade your version of LINQ to Twitter if you’re using v2.1.03 or earlier.&lt;/p&gt;  &lt;p&gt;OAuth in Basic Streams – User streams and Site streams already use OAuth, but the Basic streams such as Filter, Sample, and Firehose were originally implemented with username/password authentication. Twitter API v1.1 requires OAuth on all streams, so I removed the capability to perform username/password authentication and implemented OAuth. Since Twitter API v1.0 will be deprecated within weeks, you’ll  want to upgrade to ensure your streams keep working.&lt;/p&gt;  &lt;p&gt;ApplicationOnlyAuthorizer – This is a new authorizer in LINQ to Twitter. On Mar 11, Twitter announced &lt;a href="http://bit.ly/ZFbg1A" target="_blank"&gt;Application-only authentication&lt;/a&gt;. Within hours, I had implemented and checked it into LINQ to Twitter. This authorizer, as it’s name implies, is intended for non-user scenarios. A user is someone who logs on, tweets, or performs some other action on their own behalf. However, an application can run in stand-alone mode on the server as a scheduled job, service, or worker-role, which would be a good choice for application-only authorization.&lt;/p&gt;  &lt;p&gt;Finally, I want to give a shout-out to a few people who contributed code to this release: &lt;a href="http://www.codeplex.com/site/users/view/grennis" target="_blank"&gt;Greg Ennis&lt;/a&gt; and &lt;a href="http://www.codeplex.com/site/users/view/adesugbaa" target="_blank"&gt;Ayo Adesugba&lt;/a&gt;. They both submitted pull requests. There were also people who submitted new issues that either describe a problem in detail with a recommended solution or provided the code to fix a problem, in the &lt;a href="http://linqtotwitter.codeplex.com/workitem/list/basic" target="_blank"&gt;Issues&lt;/a&gt; area of the LINQ to Twitter site on codeplex.com.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Downloads:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://bit.ly/Yw0lX6" target="_blank"&gt;LINQ to Twitter v2.1.04 via CodePlex.com&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://bit.ly/WkdEhO" target="_blank"&gt;LINQ to Twitter v2.1.04 via NuGet&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/152422.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/03/15/released-linq-to-twitter-v2.1.04.aspx</guid>
            <pubDate>Fri, 15 Mar 2013 14:40:16 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/03/15/released-linq-to-twitter-v2.1.04.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/152422.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/152422.aspx</trackback:ping>
        </item>
        <item>
            <title>WinRtAuthorizer&amp;ndash;A Better Way to do OAuth with LINQ to Twitter in Windows 8</title>
            <category>Twitter</category>
            <category>LINQ</category>
            <category>LINQ to Twitter</category>
            <category>Windows 8</category>
            <link>http://geekswithblogs.net/WinAZ/archive/2013/01/19/winrtauthorizerndasha-better-way-to-do-oauth-with-linq-to-twitter.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/WinAZ/archive/2013/01/19/winrtauthorizerndasha-better-way-to-do-oauth-with-linq-to-twitter.aspx'&gt;http://geekswithblogs.net/WinAZ/archive/2013/01/19/winrtauthorizerndasha-better-way-to-do-oauth-with-linq-to-twitter.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Last July, I blogged about how to do OAuth in Windows 8 with &lt;a href="http://linqtotwitter.codeplex.com/" target="_blank"&gt;LINQ to Twitter&lt;/a&gt;: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://geekswithblogs.net/WinAZ/archive/2012/07/02/using-linq-to-twitter-oauth-with-windows-8.aspx" href="http://geekswithblogs.net/WinAZ/archive/2012/07/02/using-linq-to-twitter-oauth-with-windows-8.aspx"&gt;http://geekswithblogs.net/WinAZ/archive/2012/07/02/using-linq-to-twitter-oauth-with-windows-8.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A the time, that worked well, but was still not an optimal solution. It required setting up a page to handle a WebBrowser control, navigating to that page, authorizing, and then asked the user to copy a PIN into a text box to complete the dance. You still have to do that with desktop and Windows Phone apps, but not with Windows 8 apps anymore.&lt;/p&gt;  &lt;p&gt;LINQ to Twitter now has a new authorizer, called &lt;em&gt;WinRtAuthorizer&lt;/em&gt;. It’s based on the WebAuthenticationBroker and allows a seamless integration of the OAuth workflow with your app. You don’t need PIN numbers anymore. This post shows how to use &lt;em&gt;WinRtAuthorizer&lt;/em&gt; to perform OAuth authentication with LINQ to Twitter. There are essentially two steps: instantiate &lt;em&gt;WinRtAuthorizer&lt;/em&gt; and Authorize.&lt;/p&gt;  &lt;h4&gt;Instantiating WinRtAuthorizer&lt;/h4&gt;  &lt;p&gt;&lt;em&gt;WinRtAuthorizer&lt;/em&gt; is much like other authorizers with LINQ to Twitter. The main difference is that I’ve included various credential stores for managing credentials. Here’s an example that instantiates a new &lt;em&gt;WinRtAuthorizer&lt;/em&gt; that stores credentials on your local machine.&lt;/p&gt;  &lt;pre class="brush: csharp"&gt;            var auth = new WinRtAuthorizer
            {
                Credentials = new LocalDataCredentials
                {
                    ConsumerKey = "",
                    ConsumerSecret = ""
                },
                UseCompression = true,
                Callback = new Uri("http://linqtotwitter.codeplex.com/")
            };&lt;/pre&gt;

&lt;p&gt;The code above instantiates a &lt;em&gt;WinRtAuthorizer&lt;/em&gt;, using object initialization syntax. I’ll discuss the &lt;em&gt;Credentials&lt;/em&gt; property in a moment, but want to quickly point out that setting &lt;em&gt;UseCompression&lt;/em&gt; to &lt;em&gt;true&lt;/em&gt; will cause the underlying HTTP request to be sent to Twitter with GZip compression. The underlying authentication code expects a &lt;em&gt;Callback&lt;/em&gt; Uri, which isn’t used in this case, but is still required. You can use the callback address that you specified as the Web callback when setting up your application and received credentials at the Twitter developer’s site. &lt;/p&gt;

&lt;p&gt;This particular example uses &lt;em&gt;LocalDataCredentials&lt;/em&gt; to store credentials in local data. &lt;em&gt;LocalDataCredentials&lt;/em&gt; is just one way to store your credentials and you can create your own custom class to save credentials by implementing &lt;em&gt;IOAuthCredentials&lt;/em&gt;, a LINQ to Twitter type, yourself. In particular, I’ve created the following hierarchy of &lt;em&gt;IOAuthCredentials&lt;/em&gt; types to support Windows 8:&lt;/p&gt;

&lt;pre&gt;IOAuthCredentials
    WinRtCredentials
        LocalDataCredentials
        RoamingDataCredentials
        TemporaryDataCredentials&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;WinRtCredentials&lt;/em&gt; is a base class that supports a set of credential types unique to Windows 8. &lt;em&gt;LocalDataCredentials&lt;/em&gt; stores credentials on the local machine, meaning that they persist for the authenticating user, but only on the machine where the authentication took place. &lt;em&gt;RoamingDataCredentials&lt;/em&gt; uses the Windows 8 roaming data feature that persists credentials in the cloud, allowing the user to authenticate only one time and be authenticated on any other machine without needing to re-authenticate. &lt;em&gt;TemporaryDataCredentials&lt;/em&gt; exist for at least the lifetime of the current session, but aren’t guaranteed to be available after that.&lt;/p&gt;


&lt;h4&gt;Authorizing&lt;/h4&gt;

&lt;p&gt;On the surface, performing the authorization part is dirt simple, but there are nuances that you might be curious about or eventually encounter in practice. The following code checks to see if the user is already authorized and, if not, performs the authorization:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;            if (auth == null || !auth.IsAuthorized)
            {
                await auth.AuthorizeAsync();
            }&lt;/pre&gt;

&lt;p&gt;The first part of the code above checks the &lt;em&gt;IsAuthorized&lt;/em&gt; property. Sometimes, this is a little confusing because the purpose of this is to verify whether the user’s authorization credentials are loaded into the &lt;em&gt;IOAuthCredentials&lt;/em&gt; type instance of the authorizer. The four credentials are the &lt;em&gt;ConsumerKey&lt;/em&gt; and &lt;em&gt;ConsumerSecret&lt;/em&gt; that Twitter gives you as part of your application, and the &lt;em&gt;OAuthToken&lt;/em&gt; and &lt;em&gt;AccessToken&lt;/em&gt; that the Twitter API gives your code after the authentication process. If all four credential tokens are loaded, &lt;em&gt;IsAuthorized&lt;/em&gt; returns &lt;em&gt;true&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;IsAuthorized&lt;/em&gt; does *not* do is check with Twitter to verify if the credentials are valid. There’s an API call, &lt;a href="http://linqtotwitter.codeplex.com/wikipage?title=Verifying%20Credentials&amp;amp;referringTitle=Managing%20Accounts" target="_blank"&gt;VerifyCredentials&lt;/a&gt;, that’s specifically for that purpose. I could have embedded the VerifyCredentials call into the &lt;em&gt;IsAuthorized&lt;/em&gt;, but there are a couple problems with that – it would have used more bandwidth and consumed rate limit – all without your knowledge. The current design gives you more flexibility. &lt;/p&gt;

&lt;p&gt;This design also recognizes the fact that once Twitter gives you credentials for a user, those credentials don’t normally change. However, one scenario where the OAuth process can fail is if the user removes your application from their list of authorized applications via their Twitter settings page. If that happens, you’ll encounter an exception with an HTTP message of 401 Unauthorized the next time the user tries to use your application. In that case, you should delete existing credentials and make the user authorize your application again, using the process explained in this post.&lt;/p&gt;

&lt;p&gt;This gives you the choice of either calling VerifyCredentials yourself or writing code to handle the exception, but LINQ to Twitter doesn’t take that design decision away from you.&lt;/p&gt;

&lt;p&gt;If the user isn’t authorized, await the call to &lt;em&gt;AuthorizeAsync&lt;/em&gt;. Through the magic of WebAuthenticationBroker, WinRtAuthorizer takes care of opening and closing the brower control and the user doesn’t need to copy a PIN number anymore. All you need to do is use the authorizer.&lt;/p&gt;

&lt;h4&gt;Using the new &lt;em&gt;WinRtAuthorizer&lt;/em&gt; Instance&lt;/h4&gt;

&lt;p&gt;That’s all there is to it. Once you have a &lt;em&gt;WinRtAuthorizer&lt;/em&gt; instance, just use LINQ to Twitter as normal. Here’s a quick example:&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;            var twitterCtx = new TwitterContext(auth);

            var searchResponse =
                (from search in twitterCtx.Search
                 where search.Type == SearchType.Search &amp;amp;&amp;amp;
                       search.Query == SearchTextBox.Text
                 select search)
                .SingleOrDefault();

            string message = 
                string.Format(
                    "Search returned {0} statuses", 
                    searchResponse.Statuses.Count);

            await new MessageDialog(message, "Search Complete").ShowAsync();&lt;/pre&gt;

&lt;p&gt;This is a normal LINQ to Twitter search. The only thing you need to do is instantiate &lt;em&gt;TwitterContext&lt;/em&gt; with the new &lt;em&gt;WinRtAuthorizer&lt;/em&gt; instance.&lt;/p&gt;

&lt;p&gt;Summary&lt;/p&gt;

&lt;p&gt;&lt;em&gt;WinRtAuthorizer&lt;/em&gt; is the preferred way to perform OAuth with LINQ to Twitter. You do this by creating an instance of &lt;em&gt;WinRtAuthorizer&lt;/em&gt;, selecting the credential store you want, and then awaiting a call to &lt;em&gt;AuthorizeAsync&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/#!/JoeMayo" target="_blank"&gt;@JoeMayo&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/WinAZ/aggbug/151881.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Joe Mayo</dc:creator>
            <guid>http://geekswithblogs.net/WinAZ/archive/2013/01/19/winrtauthorizerndasha-better-way-to-do-oauth-with-linq-to-twitter.aspx</guid>
            <pubDate>Sat, 19 Jan 2013 21:07:09 GMT</pubDate>
            <comments>http://geekswithblogs.net/WinAZ/archive/2013/01/19/winrtauthorizerndasha-better-way-to-do-oauth-with-linq-to-twitter.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/WinAZ/comments/commentRss/151881.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/WinAZ/services/trackbacks/151881.aspx</trackback:ping>
        </item>
    </channel>
</rss>