<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>IRhetoric - Convergence in the Simulacrum. A Blog by Karsten Januszewski</title>
    <description>About Software Design and Development</description>
    <link>http://rhizohm.net/irhetoric/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 2.0.0.36</generator>
    <language>en-us</language>
    <blogChannel:blogRoll>http://rhizohm.net/irhetoric/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Karsten Januszewski</dc:creator>
    <dc:title>IRhetoric - Convergence in the Simulacrum. A Blog by Karsten Januszewski</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/irhetoric" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="irhetoric" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Getting Twitter Avatar Via C# With 1.1 API</title>
      <description>&lt;p&gt;If you know someone's Twitter handle and would like to display their twitter avatar on your website, here's some code to get the URL of their avatar.&amp;#160; First, you'll need to register at &lt;a href="http://dev.twitter.com/"&gt;http://dev.twitter.com&lt;/a&gt; and acquire a ConsumerKey, ConsumerSecret, Token and TokenSecret -- now that Twitter supports application only authentication, there isn't any handshaking involved; you just need to craft up the right OAuthCredentials for a ProtectedResource, which the Hammock library does for you. Love that library: you can get it here: &lt;a href="https://github.com/danielcrenna/hammock"&gt;https://github.com/danielcrenna/hammock&lt;/a&gt; or grab it as a NuGet package: &lt;a href="http://nuget.org/packages/Hammock"&gt;http://nuget.org/packages/Hammock&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here’s the code; nothing too fancy:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Hammock;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Hammock.Authentication.OAuth;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Hammock.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Newtonsoft.Json.Linq;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ExternalServices
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TwitterAvatarLookup : ITwitterAvatarLookup
    {
        &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ConsumerKey = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
        &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ConsumerSecret = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
        &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Token = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;
        &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TokenSecret = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetTwitterAvatarUrl(&lt;span class="kwrd"&gt;string&lt;/span&gt; twitterHandle)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; avatarUrl = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            var request = &lt;span class="kwrd"&gt;new&lt;/span&gt; RestRequest
            {
                Credentials = &lt;span class="kwrd"&gt;new&lt;/span&gt; OAuthCredentials
                {
                    Type = OAuthType.ProtectedResource,
                    SignatureMethod = OAuthSignatureMethod.HmacSha1,
                    ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
                    ConsumerKey = ConsumerKey,
                    ConsumerSecret = ConsumerSecret,
                    Token = Token,
                    TokenSecret = TokenSecret,
                }
            };
            request.Path =
                &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(
                    &lt;span class="str"&gt;&amp;quot;https://api.twitter.com/1.1/users/lookup.json?screen_name={0}&amp;amp;include_entities=0&amp;amp;include_rts=0&amp;quot;&lt;/span&gt;,
                    twitterHandle);

            request.Method = WebMethod.Get;
            RestClient client = &lt;span class="kwrd"&gt;new&lt;/span&gt; RestClient();
            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                RestResponse response = client.Request(request);
                JArray jArray = JArray.Parse(response.Content);
                avatarUrl = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)jArray[0][&lt;span class="str"&gt;&amp;quot;profile_image_url_https&amp;quot;&lt;/span&gt;];

            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;default.png&amp;quot;&lt;/span&gt;;
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; avatarUrl;
        }

    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;If you know more than one handle whose avatar you need to get, the API supports passing multiple user handles; see &lt;a title="https://dev.twitter.com/docs/api/1.1/get/users/lookup" href="https://dev.twitter.com/docs/api/1.1/get/users/lookup"&gt;https://dev.twitter.com/docs/api/1.1/get/users/lookup&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2013/05/01/Getting-Twitter-Avatar-Via-C-With-11-API.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2013/05/01/Getting-Twitter-Avatar-Via-C-With-11-API.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=26b21e58-4d7f-45a0-a6f4-a76b1e8f9a46</guid>
      <pubDate>Wed, 01 May 2013 09:23:26 -0900</pubDate>
      <category>Twitter</category>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=26b21e58-4d7f-45a0-a6f4-a76b1e8f9a46</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=26b21e58-4d7f-45a0-a6f4-a76b1e8f9a46</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2013/05/01/Getting-Twitter-Avatar-Via-C-With-11-API.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=26b21e58-4d7f-45a0-a6f4-a76b1e8f9a46</wfw:commentRss>
    </item>
    <item>
      <title>Saving a PDFSharp PDF File To Azure Blob Storage</title>
      <description>&lt;p&gt;Love the &lt;a href="http://www.pdfsharp.com/PDFsharp/"&gt;PDFSharp&lt;/a&gt; library. Here’s how I went about saving a PDF generated with that library to Azure blob storage:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; unicode = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
&lt;span class="kwrd"&gt;const&lt;/span&gt; PdfFontEmbedding embedding = PdfFontEmbedding.Always;
PdfDocumentRenderer pdfRenderer = &lt;span class="kwrd"&gt;new&lt;/span&gt; PdfDocumentRenderer(unicode, embedding);
pdfRenderer.Document = document;
pdfRenderer.RenderDocument();
MemoryStream memStream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream();
pdfRenderer.PdfDocument.Save(memStream,&lt;span class="kwrd"&gt;false&lt;/span&gt;);

var client = &lt;span class="kwrd"&gt;new&lt;/span&gt; CloudBlobClient(&lt;span class="kwrd"&gt;new&lt;/span&gt; Uri(&lt;span class="str"&gt;&amp;quot;http://*.blob.core.windows.net&amp;quot;&lt;/span&gt;, UriKind.Absolute),
&lt;span class="kwrd"&gt;new&lt;/span&gt; StorageCredentialsAccountAndKey(&lt;span class="str"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;,
&lt;span class="str"&gt;&amp;quot;...&amp;quot;&lt;/span&gt;));

var container = client.GetContainerReference(&lt;span class="str"&gt;&amp;quot;temp&amp;quot;&lt;/span&gt;);
memStream.Seek(0, SeekOrigin.Begin);
&lt;span class="kwrd"&gt;string&lt;/span&gt; filename = DateTime.Now.ToString().GetHashCode().ToString(&lt;span class="str"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;) + &lt;span class="str"&gt;&amp;quot;.pdf&amp;quot;&lt;/span&gt;;
var pdf = container.GetBlobReference(filename);
pdf.Properties.ContentType = &lt;span class="str"&gt;&amp;quot;application/pdf&amp;quot;&lt;/span&gt;;
pdf.UploadFromStream(memStream, &lt;span class="kwrd"&gt;new&lt;/span&gt; BlobRequestOptions { Timeout = TimeSpan.FromMinutes(10) });
memStream.Close();&lt;/pre&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;br /&gt;The crux of the code is the line where pass false to the &lt;strong&gt;Save&lt;/strong&gt; method of &lt;strong&gt;PdfDocument&lt;/strong&gt;, which keeps the memory stream open. And, then, before giving that stream to the Azure SDK method, you need to rewind the stream to the beginning. Other than that, all pretty boilerplate.&lt;/p&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2013/03/01/Saving-a-PDFSharp-PDF-File-To-Azure-Blob-Storage.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2013/03/01/Saving-a-PDFSharp-PDF-File-To-Azure-Blob-Storage.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=5d1137ab-358c-4c82-a2da-e2834e313094</guid>
      <pubDate>Fri, 01 Mar 2013 14:29:39 -0900</pubDate>
      <category>Azure</category>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=5d1137ab-358c-4c82-a2da-e2834e313094</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=5d1137ab-358c-4c82-a2da-e2834e313094</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2013/03/01/Saving-a-PDFSharp-PDF-File-To-Azure-Blob-Storage.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=5d1137ab-358c-4c82-a2da-e2834e313094</wfw:commentRss>
    </item>
    <item>
      <title>Capture ClickOnce File Downloads With Event Tracking In Google Analytics</title>
      <description>&lt;p&gt;This flummoxed me for a bit, so I figured I post it. If you wire the event up to an &lt;strong&gt;onClick&lt;/strong&gt; handler as the docs suggest:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="app.application"&lt;/span&gt; &lt;span class="attr"&gt;onClick&lt;/span&gt;&lt;span class="kwrd"&gt;="_gaq.push(['_trackEvent', 'ClickOnce', 
'Download']);"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Play&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;Your event will never fire. The trick is to add the &lt;strong&gt;target&lt;/strong&gt; attribute and set it to _blank which opens a new tab in the browser and immediately closes it:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="app.application"&lt;/span&gt; &lt;strong&gt;&lt;span class="attr"&gt;target&lt;/span&gt;&lt;span class="kwrd"&gt;="_blank"&lt;/span&gt;&lt;/strong&gt; &lt;span class="attr"&gt;onClick&lt;/span&gt;&lt;span class="kwrd"&gt;="_gaq.push(['_trackEvent', 'ClickOnce',&lt;br&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;'Download']);"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Play&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2013/03/01/Capture-ClickOnce-File-Downloads-With-Event-Tracking-In-Google-Analytics.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2013/03/01/Capture-ClickOnce-File-Downloads-With-Event-Tracking-In-Google-Analytics.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=0e95073e-a7f0-4b7f-84a6-80ba6e443c8a</guid>
      <pubDate>Fri, 01 Mar 2013 14:10:23 -0900</pubDate>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=0e95073e-a7f0-4b7f-84a6-80ba6e443c8a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=0e95073e-a7f0-4b7f-84a6-80ba6e443c8a</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2013/03/01/Capture-ClickOnce-File-Downloads-With-Event-Tracking-In-Google-Analytics.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=0e95073e-a7f0-4b7f-84a6-80ba6e443c8a</wfw:commentRss>
    </item>
    <item>
      <title>Windows Azure Table Storage Emulator UpdateObject Error</title>
      <description>&lt;p&gt;Was getting this:&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; &lt;span class="attr"&gt;standalone&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;error&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;InvalidInput&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;code&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt; &lt;span class="attr"&gt;xml:lang&lt;/span&gt;&lt;span class="kwrd"&gt;="en-US"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;One of the request inputs is not valid.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;message&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;error&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --&gt;&lt;/p&gt;
&lt;p&gt;When calling UpdateObject from the Azure SDK when using the table storage emulator. Turns out the emulator doesn&amp;rsquo;t exactly emulate as per MSDN documentation: &lt;a title="http://msdn.microsoft.com/en-us/library/gg433135.aspx" href="http://msdn.microsoft.com/en-us/library/gg433135.aspx"&gt;http://msdn.microsoft.com/en-us/library/gg433135.aspx&lt;/a&gt; &amp;ldquo;The storage emulator does not support Insert-Or-Replace Entity or Insert-Or-Merge Entity, known as upsert features.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;So, to work around, I changed the code to delete then reinsert.&lt;/span&gt;&amp;nbsp; Or not. Turned out I had lots of concurrancy problems with doing a delete/insert which were resolved with the more transactional upsert.&amp;nbsp;&lt;/p&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2013/01/21/Windows-Azure-Table-Storage-Emulator-UpdateObject-Error.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2013/01/21/Windows-Azure-Table-Storage-Emulator-UpdateObject-Error.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=b61399e1-d80f-42a8-8aba-901e963a8fe1</guid>
      <pubDate>Mon, 21 Jan 2013 12:53:00 -0900</pubDate>
      <category>Windows Azure</category>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=b61399e1-d80f-42a8-8aba-901e963a8fe1</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=b61399e1-d80f-42a8-8aba-901e963a8fe1</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2013/01/21/Windows-Azure-Table-Storage-Emulator-UpdateObject-Error.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=b61399e1-d80f-42a8-8aba-901e963a8fe1</wfw:commentRss>
    </item>
    <item>
      <title>Sorting ListBlobs By LastModifiedUtc</title>
      <description>&lt;p&gt;I had a list of JSON objects stored as individual blobs in Azure blob storage. I needed to get them out of blob storage sorted by last modified time and then reconstitute them as an array of JSON objects. Hit a few curiosities in writing this code, which someone else may benefit from. Without further ado, here’s the code:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;            CloudBlobDirectory dir = eventContainer.GetDirectoryReference(&lt;span class="str"&gt;&amp;quot;http://---&amp;quot;&lt;/span&gt;);
            SortedDictionary&amp;lt;DateTime, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; dictionary = &lt;span class="kwrd"&gt;new&lt;/span&gt; SortedDictionary&amp;lt;DateTime, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (CloudBlob blob &lt;span class="kwrd"&gt;in&lt;/span&gt; dir.ListBlobs())
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (blob.Name == &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;{0}/$$$.$$$&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;live&amp;quot;&lt;/span&gt;)) &lt;span class="kwrd"&gt;continue&lt;/span&gt;;
                dictionary.Add(blob.Properties.LastModifiedUtc, blob.DownloadText());
            }
            StringBuilder json = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
            json.Append(&lt;span class="str"&gt;&amp;quot;Callback([&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; dictionary.Values)
            {
                json.Append(s);
                json.Append(&lt;span class="str"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;);
            }
            json.Remove(json.Length - 1, 1);
            json.Append(&lt;span class="str"&gt;&amp;quot;])&amp;quot;&lt;/span&gt;);
            CloudBlob liveJson = dir.GetBlobReference(&lt;span class="str"&gt;&amp;quot;live.json&amp;quot;&lt;/span&gt;);
            liveJson.Properties.CacheControl = cacheControl;
            liveJson.UploadText(json.ToString());&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Okay, so what is going on here?&lt;/p&gt;

&lt;p&gt;I start out with a nifty SortedDictionary, which will sort my items by the key of the dictionary as I add them. &lt;/p&gt;

&lt;p&gt;I then call ListBlobs(). There’s this peculiar oddity with Blob Storage when you use CloudXplorer where this ghost file name $$$.$$$ gets created, which is why I have to check the name of the file. I then throw the string and the date into the dictionary.&lt;/p&gt;

&lt;p&gt;Once that finishes, I iterate the dictionary, adding the callback and syntax for making a json array. Get rid of the final comma and then throw the whole deal back into blob storage. Hoorah!&lt;/p&gt;

&lt;p&gt;At first, I was actually deserializing the strings into objects using JSON.Net and then I realized there was no reason to do that when all I needed to do was manipulate strings.&lt;/p&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2012/12/03/Sorting-ListBlobs-By-LastModifiedUtc.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2012/12/03/Sorting-ListBlobs-By-LastModifiedUtc.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=4fd0bf9d-4f6f-4ea2-b248-1ffb20d650d1</guid>
      <pubDate>Mon, 03 Dec 2012 09:46:07 -0900</pubDate>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=4fd0bf9d-4f6f-4ea2-b248-1ffb20d650d1</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=4fd0bf9d-4f6f-4ea2-b248-1ffb20d650d1</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2012/12/03/Sorting-ListBlobs-By-LastModifiedUtc.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=4fd0bf9d-4f6f-4ea2-b248-1ffb20d650d1</wfw:commentRss>
    </item>
    <item>
      <title>Converting New Twitter Search Result To Old Format in C# Using JSON.NET</title>
      <description>&lt;p&gt;Been playing with the new Twitter API, version 1.1, and want to preserve a bunch of code, so I wrote a routine to convert the new format to the old format. Maybe it’ll save someone time. (Note that I didn’t convert the metadata because I didn’t need it.)&lt;/p&gt; &lt;p&gt;Here’s the code which uses JSON.NET:&lt;/p&gt;&lt;pre class="csharpcode"&gt;            JObject newapiresults = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            newapiresults = JObject.Parse(response.Content);
            JArray tweets = &lt;span class="kwrd"&gt;new&lt;/span&gt; JArray();
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (JObject status &lt;span class="kwrd"&gt;in&lt;/span&gt; tweets)
            {
                JObject oldStatus = &lt;span class="kwrd"&gt;new&lt;/span&gt; JObject();
                oldStatus[&lt;span class="str"&gt;"created_at"&lt;/span&gt;] = status[&lt;span class="str"&gt;"created_at"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"from_user"&lt;/span&gt;] = status[&lt;span class="str"&gt;"user"&lt;/span&gt;][&lt;span class="str"&gt;"screen_name"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"from_user_id"&lt;/span&gt;] = status[&lt;span class="str"&gt;"user"&lt;/span&gt;][&lt;span class="str"&gt;"id"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"from_user_id_str"&lt;/span&gt;] = status[&lt;span class="str"&gt;"user"&lt;/span&gt;][&lt;span class="str"&gt;"id_str"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"from_user_id_name"&lt;/span&gt;] = status[&lt;span class="str"&gt;"user"&lt;/span&gt;][&lt;span class="str"&gt;"name"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"geo"&lt;/span&gt;] = status[&lt;span class="str"&gt;"geo"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"id"&lt;/span&gt;] = status[&lt;span class="str"&gt;"id"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"id_str"&lt;/span&gt;] = status[&lt;span class="str"&gt;"id_str"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"iso_language_code"&lt;/span&gt;] = status[&lt;span class="str"&gt;"metadata"&lt;/span&gt;][&lt;span class="str"&gt;"iso_language_code"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"metadata"&lt;/span&gt;] = status[&lt;span class="str"&gt;"metadata"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"profile_image_url"&lt;/span&gt;] = status[&lt;span class="str"&gt;"user"&lt;/span&gt;][&lt;span class="str"&gt;"profile_image_url"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"profile_image_url_https"&lt;/span&gt;] = status[&lt;span class="str"&gt;"user"&lt;/span&gt;][&lt;span class="str"&gt;"profile_image_url_https"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"source"&lt;/span&gt;] = status[&lt;span class="str"&gt;"source"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"text"&lt;/span&gt;] = status[&lt;span class="str"&gt;"text"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"to_user"&lt;/span&gt;] = status[&lt;span class="str"&gt;"in_reply_to_screen_name"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"to_user_id"&lt;/span&gt;] = status[&lt;span class="str"&gt;"in_reply_to_user_id"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"to_user_id_str"&lt;/span&gt;] = status[&lt;span class="str"&gt;"in_reply_to_user_id_str"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"to_user_name"&lt;/span&gt;] = status[&lt;span class="str"&gt;"in_reply_to_screen_name"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"in_reply_to_status_id"&lt;/span&gt;] = status[&lt;span class="str"&gt;"in_reply_to_status_id"&lt;/span&gt;];
                oldStatus[&lt;span class="str"&gt;"in_reply_to_status_id_str"&lt;/span&gt;] = status[&lt;span class="str"&gt;"in_reply_to_status_id_str"&lt;/span&gt;];
                results.Add(oldStatus);


            }
            JObject result = &lt;span class="kwrd"&gt;new&lt;/span&gt; JObject();
            result[&lt;span class="str"&gt;"results"&lt;/span&gt;] = results;
            &lt;span class="rem"&gt;//do something with the string&lt;/span&gt;
            UploadText(result.ToString());
&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;For what it is worth, here’s the old JSON and then the new JSON – wow the new JSON is a lot more verbose!&lt;/p&gt;&lt;pre class="csharpcode"&gt;{ &lt;span class="str"&gt;"completed_in"&lt;/span&gt; : 0.029000000000000001,
  &lt;span class="str"&gt;"max_id"&lt;/span&gt; : 265608574640738304,
  &lt;span class="str"&gt;"max_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265608574640738304"&lt;/span&gt;,
  &lt;span class="str"&gt;"next_page"&lt;/span&gt; : &lt;span class="str"&gt;"?page=2&amp;amp;max_id=265608574640738304&amp;amp;q=%40twitterapi%20-via"&lt;/span&gt;,
  &lt;span class="str"&gt;"page"&lt;/span&gt; : 1,
  &lt;span class="str"&gt;"query"&lt;/span&gt; : &lt;span class="str"&gt;"%40twitterapi+-via"&lt;/span&gt;,
  &lt;span class="str"&gt;"refresh_url"&lt;/span&gt; : &lt;span class="str"&gt;"?since_id=265608574640738304&amp;amp;q=%40twitterapi%20-via"&lt;/span&gt;,
  &lt;span class="str"&gt;"results"&lt;/span&gt; : [ { &lt;span class="str"&gt;"created_at"&lt;/span&gt; : &lt;span class="str"&gt;"Tue, 06 Nov 2012 00:16:33 +0000"&lt;/span&gt;,
        &lt;span class="str"&gt;"from_user"&lt;/span&gt; : &lt;span class="str"&gt;"morgules"&lt;/span&gt;,
        &lt;span class="str"&gt;"from_user_id"&lt;/span&gt; : 636921780,
        &lt;span class="str"&gt;"from_user_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"636921780"&lt;/span&gt;,
        &lt;span class="str"&gt;"from_user_name"&lt;/span&gt; : &lt;span class="str"&gt;"Дмитрий Моргулес"&lt;/span&gt;,
        &lt;span class="str"&gt;"geo"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"id"&lt;/span&gt; : 265608574640738304,
        &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265608574640738304"&lt;/span&gt;,
        &lt;span class="str"&gt;"iso_language_code"&lt;/span&gt; : &lt;span class="str"&gt;"ru"&lt;/span&gt;,
        &lt;span class="str"&gt;"metadata"&lt;/span&gt; : { &lt;span class="str"&gt;"result_type"&lt;/span&gt; : &lt;span class="str"&gt;"recent"&lt;/span&gt; },
        &lt;span class="str"&gt;"profile_image_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://a0.twimg.com/profile_images/2647733681/0daea79d4d5858a39bb1801d64b20e14_normal.jpeg"&lt;/span&gt;,
        &lt;span class="str"&gt;"profile_image_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_images/2647733681/0daea79d4d5858a39bb1801d64b20e14_normal.jpeg"&lt;/span&gt;,
        &lt;span class="str"&gt;"source"&lt;/span&gt; : &lt;span class="str"&gt;"&amp;lt;a href="&lt;/span&gt;http:&lt;span class="rem"&gt;//twitter.com/tweetbutton"&amp;gt;Tweet Button&amp;lt;/a&amp;gt;",&lt;/span&gt;
        &lt;span class="str"&gt;"text"&lt;/span&gt; : &lt;span class="str"&gt;"Руслан Нурисламов: безрукий барабанщик из Златоуста | Общество | Слово http://t.co/ziOSiA78 с помощью @twitterapi"&lt;/span&gt;,
        &lt;span class="str"&gt;"to_user"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"to_user_id"&lt;/span&gt; : 0,
        &lt;span class="str"&gt;"to_user_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"0"&lt;/span&gt;,
        &lt;span class="str"&gt;"to_user_name"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;
      },
      { &lt;span class="str"&gt;"created_at"&lt;/span&gt; : &lt;span class="str"&gt;"Tue, 06 Nov 2012 00:13:12 +0000"&lt;/span&gt;,
        &lt;span class="str"&gt;"from_user"&lt;/span&gt; : &lt;span class="str"&gt;"oxkarlomejor"&lt;/span&gt;,
        &lt;span class="str"&gt;"from_user_id"&lt;/span&gt; : 221827509,
        &lt;span class="str"&gt;"from_user_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"221827509"&lt;/span&gt;,
        &lt;span class="str"&gt;"from_user_name"&lt;/span&gt; : &lt;span class="str"&gt;"oscar  david "&lt;/span&gt;,
        &lt;span class="str"&gt;"geo"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"id"&lt;/span&gt; : 265607731417870336,
        &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265607731417870336"&lt;/span&gt;,
        &lt;span class="str"&gt;"iso_language_code"&lt;/span&gt; : &lt;span class="str"&gt;"es"&lt;/span&gt;,
        &lt;span class="str"&gt;"metadata"&lt;/span&gt; : { &lt;span class="str"&gt;"result_type"&lt;/span&gt; : &lt;span class="str"&gt;"recent"&lt;/span&gt; },
        &lt;span class="str"&gt;"profile_image_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://a0.twimg.com/profile_images/1602975094/Imagen_010_normal.jpg"&lt;/span&gt;,
        &lt;span class="str"&gt;"profile_image_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_images/1602975094/Imagen_010_normal.jpg"&lt;/span&gt;,
        &lt;span class="str"&gt;"source"&lt;/span&gt; : &lt;span class="str"&gt;"&amp;lt;a href="&lt;/span&gt;http:&lt;span class="rem"&gt;//twitter.com/"&amp;gt;web&amp;lt;/a&amp;gt;",&lt;/span&gt;
        &lt;span class="str"&gt;"text"&lt;/span&gt; : &lt;span class="str"&gt;"@twitterapi quiero ser Famoso"&lt;/span&gt;,
        &lt;span class="str"&gt;"to_user"&lt;/span&gt; : &lt;span class="str"&gt;"twitterapi"&lt;/span&gt;,
        &lt;span class="str"&gt;"to_user_id"&lt;/span&gt; : 6253282,
        &lt;span class="str"&gt;"to_user_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"6253282"&lt;/span&gt;,
        &lt;span class="str"&gt;"to_user_name"&lt;/span&gt; : &lt;span class="str"&gt;"Twitter API"&lt;/span&gt;
      }]}&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;And here’s the new JSON:&lt;/pre&gt;&lt;pre class="csharpcode"&gt;{ &lt;span class="str"&gt;"search_metadata"&lt;/span&gt; : { &lt;span class="str"&gt;"completed_in"&lt;/span&gt; : 0.089999999999999997,
      &lt;span class="str"&gt;"count"&lt;/span&gt; : 100,
      &lt;span class="str"&gt;"max_id"&lt;/span&gt; : 265255057749053440,
      &lt;span class="str"&gt;"max_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265255057749053440"&lt;/span&gt;,
      &lt;span class="str"&gt;"next_results"&lt;/span&gt; : &lt;span class="str"&gt;"?max_id=265212014639603711&amp;amp;q=nekocase&amp;amp;count=100&amp;amp;include_entities=1"&lt;/span&gt;,
      &lt;span class="str"&gt;"query"&lt;/span&gt; : &lt;span class="str"&gt;"nekocase"&lt;/span&gt;,
      &lt;span class="str"&gt;"refresh_url"&lt;/span&gt; : &lt;span class="str"&gt;"?since_id=265255057749053440&amp;amp;q=nekocase&amp;amp;include_entities=1"&lt;/span&gt;,
      &lt;span class="str"&gt;"since_id"&lt;/span&gt; : 0,
      &lt;span class="str"&gt;"since_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"0"&lt;/span&gt;
    },
  &lt;span class="str"&gt;"statuses"&lt;/span&gt; : [ { &lt;span class="str"&gt;"contributors"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"coordinates"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"created_at"&lt;/span&gt; : &lt;span class="str"&gt;"Mon Nov 05 00:51:49 +0000 2012"&lt;/span&gt;,
        &lt;span class="str"&gt;"entities"&lt;/span&gt; : { &lt;span class="str"&gt;"hashtags"&lt;/span&gt; : [  ],
            &lt;span class="str"&gt;"media"&lt;/span&gt; : [ { &lt;span class="str"&gt;"display_url"&lt;/span&gt; : &lt;span class="str"&gt;"pic.twitter.com/PEzikMU5"&lt;/span&gt;,
                  &lt;span class="str"&gt;"expanded_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://twitter.com/jtspicer/status/265255057749053440/photo/1"&lt;/span&gt;,
                  &lt;span class="str"&gt;"id"&lt;/span&gt; : 265255057753247745,
                  &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265255057753247745"&lt;/span&gt;,
                  &lt;span class="str"&gt;"indices"&lt;/span&gt; : [ 115,
                      135
                    ],
                  &lt;span class="str"&gt;"media_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://p.twimg.com/A65gEdRCEAEf0xo.jpg"&lt;/span&gt;,
                  &lt;span class="str"&gt;"media_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://p.twimg.com/A65gEdRCEAEf0xo.jpg"&lt;/span&gt;,
                  &lt;span class="str"&gt;"sizes"&lt;/span&gt; : { &lt;span class="str"&gt;"large"&lt;/span&gt; : { &lt;span class="str"&gt;"h"&lt;/span&gt; : 766,
                          &lt;span class="str"&gt;"resize"&lt;/span&gt; : &lt;span class="str"&gt;"fit"&lt;/span&gt;,
                          &lt;span class="str"&gt;"w"&lt;/span&gt; : 1024
                        },
                      &lt;span class="str"&gt;"medium"&lt;/span&gt; : { &lt;span class="str"&gt;"h"&lt;/span&gt; : 449,
                          &lt;span class="str"&gt;"resize"&lt;/span&gt; : &lt;span class="str"&gt;"fit"&lt;/span&gt;,
                          &lt;span class="str"&gt;"w"&lt;/span&gt; : 600
                        },
                      &lt;span class="str"&gt;"small"&lt;/span&gt; : { &lt;span class="str"&gt;"h"&lt;/span&gt; : 254,
                          &lt;span class="str"&gt;"resize"&lt;/span&gt; : &lt;span class="str"&gt;"fit"&lt;/span&gt;,
                          &lt;span class="str"&gt;"w"&lt;/span&gt; : 340
                        },
                      &lt;span class="str"&gt;"thumb"&lt;/span&gt; : { &lt;span class="str"&gt;"h"&lt;/span&gt; : 150,
                          &lt;span class="str"&gt;"resize"&lt;/span&gt; : &lt;span class="str"&gt;"crop"&lt;/span&gt;,
                          &lt;span class="str"&gt;"w"&lt;/span&gt; : 150
                        }
                    },
                  &lt;span class="str"&gt;"type"&lt;/span&gt; : &lt;span class="str"&gt;"photo"&lt;/span&gt;,
                  &lt;span class="str"&gt;"url"&lt;/span&gt; : &lt;span class="str"&gt;"http://t.co/PEzikMU5"&lt;/span&gt;
                } ],
            &lt;span class="str"&gt;"urls"&lt;/span&gt; : [  ],
            &lt;span class="str"&gt;"user_mentions"&lt;/span&gt; : [ { &lt;span class="str"&gt;"id"&lt;/span&gt; : 126406217,
                  &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"126406217"&lt;/span&gt;,
                  &lt;span class="str"&gt;"indices"&lt;/span&gt; : [ 20,
                      29
                    ],
                  &lt;span class="str"&gt;"name"&lt;/span&gt; : &lt;span class="str"&gt;"Neko Case"&lt;/span&gt;,
                  &lt;span class="str"&gt;"screen_name"&lt;/span&gt; : &lt;span class="str"&gt;"NekoCase"&lt;/span&gt;
                } ]
          },
        &lt;span class="str"&gt;"favorited"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"geo"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"id"&lt;/span&gt; : 265255057749053440,
        &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265255057749053440"&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_screen_name"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_status_id"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_status_id_str"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_user_id"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_user_id_str"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"metadata"&lt;/span&gt; : { &lt;span class="str"&gt;"iso_language_code"&lt;/span&gt; : &lt;span class="str"&gt;"en"&lt;/span&gt;,
            &lt;span class="str"&gt;"result_type"&lt;/span&gt; : &lt;span class="str"&gt;"recent"&lt;/span&gt;
          },
        &lt;span class="str"&gt;"place"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"possibly_sensitive"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"retweet_count"&lt;/span&gt; : 0,
        &lt;span class="str"&gt;"retweeted"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"source"&lt;/span&gt; : &lt;span class="str"&gt;"&amp;lt;a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\"&amp;gt;Twitter for iPhone&amp;lt;/a&amp;gt;"&lt;/span&gt;,
        &lt;span class="str"&gt;"text"&lt;/span&gt; : &lt;span class="str"&gt;"The best way to get @NekoCase to RT you is to tweet a context-free photo of an adorable animal. Here goes nothing! http://t.co/PEzikMU5"&lt;/span&gt;,
        &lt;span class="str"&gt;"truncated"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"user"&lt;/span&gt; : { &lt;span class="str"&gt;"contributors_enabled"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"created_at"&lt;/span&gt; : &lt;span class="str"&gt;"Mon Feb 23 19:57:21 +0000 2009"&lt;/span&gt;,
            &lt;span class="str"&gt;"default_profile"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"default_profile_image"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"description"&lt;/span&gt; : &lt;span class="str"&gt;"Writer of things. Lover of music. Appreciator of film. Unabashed know-it-all. Street walkin' cheetah with a heart full of napalm. And so on. Views=mine."&lt;/span&gt;,
            &lt;span class="str"&gt;"entities"&lt;/span&gt; : { &lt;span class="str"&gt;"description"&lt;/span&gt; : { &lt;span class="str"&gt;"urls"&lt;/span&gt; : [  ] } },
            &lt;span class="str"&gt;"favourites_count"&lt;/span&gt; : 768,
            &lt;span class="str"&gt;"follow_request_sent"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"followers_count"&lt;/span&gt; : 360,
            &lt;span class="str"&gt;"following"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"friends_count"&lt;/span&gt; : 336,
            &lt;span class="str"&gt;"geo_enabled"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"id"&lt;/span&gt; : 21686478,
            &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"21686478"&lt;/span&gt;,
            &lt;span class="str"&gt;"is_translator"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"lang"&lt;/span&gt; : &lt;span class="str"&gt;"en"&lt;/span&gt;,
            &lt;span class="str"&gt;"listed_count"&lt;/span&gt; : 8,
            &lt;span class="str"&gt;"location"&lt;/span&gt; : &lt;span class="str"&gt;"Columbus, Ohio (Short North)"&lt;/span&gt;,
            &lt;span class="str"&gt;"name"&lt;/span&gt; : &lt;span class="str"&gt;"Justin Spicer"&lt;/span&gt;,
            &lt;span class="str"&gt;"notifications"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_color"&lt;/span&gt; : &lt;span class="str"&gt;"D3D9DB"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_image_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://a0.twimg.com/profile_background_images/243592391/x3ce2eb796060291bf2a9d40db53a85f.jpg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_image_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_background_images/243592391/x3ce2eb796060291bf2a9d40db53a85f.jpg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_tile"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_banner_url"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_banners/21686478/1351622268"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_image_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://a0.twimg.com/profile_images/2785722127/42dbe3599093209c9abab988e56f2cdf_normal.jpeg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_image_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_images/2785722127/42dbe3599093209c9abab988e56f2cdf_normal.jpeg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_link_color"&lt;/span&gt; : &lt;span class="str"&gt;"DB6995"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_sidebar_border_color"&lt;/span&gt; : &lt;span class="str"&gt;"5AC3E9"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_sidebar_fill_color"&lt;/span&gt; : &lt;span class="str"&gt;"2D1E29"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_text_color"&lt;/span&gt; : &lt;span class="str"&gt;"A177AB"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_use_background_image"&lt;/span&gt; : &lt;span class="kwrd"&gt;true&lt;/span&gt;,
            &lt;span class="str"&gt;"protected"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"screen_name"&lt;/span&gt; : &lt;span class="str"&gt;"jtspicer"&lt;/span&gt;,
            &lt;span class="str"&gt;"show_all_inline_media"&lt;/span&gt; : &lt;span class="kwrd"&gt;true&lt;/span&gt;,
            &lt;span class="str"&gt;"statuses_count"&lt;/span&gt; : 11964,
            &lt;span class="str"&gt;"time_zone"&lt;/span&gt; : &lt;span class="str"&gt;"Eastern Time (US &amp;amp; Canada)"&lt;/span&gt;,
            &lt;span class="str"&gt;"url"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"utc_offset"&lt;/span&gt; : -18000,
            &lt;span class="str"&gt;"verified"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;
          }
      },
      { &lt;span class="str"&gt;"contributors"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"coordinates"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"created_at"&lt;/span&gt; : &lt;span class="str"&gt;"Mon Nov 05 00:42:28 +0000 2012"&lt;/span&gt;,
        &lt;span class="str"&gt;"entities"&lt;/span&gt; : { &lt;span class="str"&gt;"hashtags"&lt;/span&gt; : [  ],
            &lt;span class="str"&gt;"urls"&lt;/span&gt; : [  ],
            &lt;span class="str"&gt;"user_mentions"&lt;/span&gt; : [ { &lt;span class="str"&gt;"id"&lt;/span&gt; : 126406217,
                  &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"126406217"&lt;/span&gt;,
                  &lt;span class="str"&gt;"indices"&lt;/span&gt; : [ 0,
                      9
                    ],
                  &lt;span class="str"&gt;"name"&lt;/span&gt; : &lt;span class="str"&gt;"Neko Case"&lt;/span&gt;,
                  &lt;span class="str"&gt;"screen_name"&lt;/span&gt; : &lt;span class="str"&gt;"NekoCase"&lt;/span&gt;
                },
                { &lt;span class="str"&gt;"id"&lt;/span&gt; : 134073162,
                  &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"134073162"&lt;/span&gt;,
                  &lt;span class="str"&gt;"indices"&lt;/span&gt; : [ 10,
                      21
                    ],
                  &lt;span class="str"&gt;"name"&lt;/span&gt; : &lt;span class="str"&gt;"brigid "&lt;/span&gt;,
                  &lt;span class="str"&gt;"screen_name"&lt;/span&gt; : &lt;span class="str"&gt;"MBbyBrigid"&lt;/span&gt;
                }
              ]
          },
        &lt;span class="str"&gt;"favorited"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"geo"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"id"&lt;/span&gt; : 265252709555376128,
        &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265252709555376128"&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_screen_name"&lt;/span&gt; : &lt;span class="str"&gt;"NekoCase"&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_status_id"&lt;/span&gt; : 265237602242818049,
        &lt;span class="str"&gt;"in_reply_to_status_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"265237602242818049"&lt;/span&gt;,
        &lt;span class="str"&gt;"in_reply_to_user_id"&lt;/span&gt; : 126406217,
        &lt;span class="str"&gt;"in_reply_to_user_id_str"&lt;/span&gt; : &lt;span class="str"&gt;"126406217"&lt;/span&gt;,
        &lt;span class="str"&gt;"metadata"&lt;/span&gt; : { &lt;span class="str"&gt;"iso_language_code"&lt;/span&gt; : &lt;span class="str"&gt;"en"&lt;/span&gt;,
            &lt;span class="str"&gt;"result_type"&lt;/span&gt; : &lt;span class="str"&gt;"recent"&lt;/span&gt;
          },
        &lt;span class="str"&gt;"place"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
        &lt;span class="str"&gt;"retweet_count"&lt;/span&gt; : 0,
        &lt;span class="str"&gt;"retweeted"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"source"&lt;/span&gt; : &lt;span class="str"&gt;"&amp;lt;a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\"&amp;gt;Twitter for iPhone&amp;lt;/a&amp;gt;"&lt;/span&gt;,
        &lt;span class="str"&gt;"text"&lt;/span&gt; : &lt;span class="str"&gt;"@NekoCase @mbbybrigid thank you so much for sharing the fundraiser!"&lt;/span&gt;,
        &lt;span class="str"&gt;"truncated"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        &lt;span class="str"&gt;"user"&lt;/span&gt; : { &lt;span class="str"&gt;"contributors_enabled"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"created_at"&lt;/span&gt; : &lt;span class="str"&gt;"Thu Dec 16 20:06:39 +0000 2010"&lt;/span&gt;,
            &lt;span class="str"&gt;"default_profile"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"default_profile_image"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"description"&lt;/span&gt; : &lt;span class="str"&gt;"The owner/crafter/dreamer behind Cambridge's first stitch lounge and craft studio. Avid gardener. Opinionated stitcher. And I want you to make something..."&lt;/span&gt;,
            &lt;span class="str"&gt;"entities"&lt;/span&gt; : { &lt;span class="str"&gt;"description"&lt;/span&gt; : { &lt;span class="str"&gt;"urls"&lt;/span&gt; : [  ] },
                &lt;span class="str"&gt;"url"&lt;/span&gt; : { &lt;span class="str"&gt;"urls"&lt;/span&gt; : [ { &lt;span class="str"&gt;"expanded_url"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
                          &lt;span class="str"&gt;"indices"&lt;/span&gt; : [ 0,
                              27
                            ],
                          &lt;span class="str"&gt;"url"&lt;/span&gt; : &lt;span class="str"&gt;"http://gatherhereonline.com"&lt;/span&gt;
                        } ] }
              },
            &lt;span class="str"&gt;"favourites_count"&lt;/span&gt; : 520,
            &lt;span class="str"&gt;"follow_request_sent"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"followers_count"&lt;/span&gt; : 1024,
            &lt;span class="str"&gt;"following"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"friends_count"&lt;/span&gt; : 437,
            &lt;span class="str"&gt;"geo_enabled"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"id"&lt;/span&gt; : 227419407,
            &lt;span class="str"&gt;"id_str"&lt;/span&gt; : &lt;span class="str"&gt;"227419407"&lt;/span&gt;,
            &lt;span class="str"&gt;"is_translator"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"lang"&lt;/span&gt; : &lt;span class="str"&gt;"en"&lt;/span&gt;,
            &lt;span class="str"&gt;"listed_count"&lt;/span&gt; : 47,
            &lt;span class="str"&gt;"location"&lt;/span&gt; : &lt;span class="str"&gt;"Cambridge, MA"&lt;/span&gt;,
            &lt;span class="str"&gt;"name"&lt;/span&gt; : &lt;span class="str"&gt;"virginia b. johnson"&lt;/span&gt;,
            &lt;span class="str"&gt;"notifications"&lt;/span&gt; : &lt;span class="kwrd"&gt;null&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_color"&lt;/span&gt; : &lt;span class="str"&gt;"C0DEED"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_image_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://a0.twimg.com/profile_background_images/293836111/spools_of_thread.jpg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_image_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_background_images/293836111/spools_of_thread.jpg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_background_tile"&lt;/span&gt; : &lt;span class="kwrd"&gt;true&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_image_url"&lt;/span&gt; : &lt;span class="str"&gt;"http://a0.twimg.com/profile_images/1192172838/etsy_gather_here_avatar_normal.jpg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_image_url_https"&lt;/span&gt; : &lt;span class="str"&gt;"https://si0.twimg.com/profile_images/1192172838/etsy_gather_here_avatar_normal.jpg"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_link_color"&lt;/span&gt; : &lt;span class="str"&gt;"0084B4"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_sidebar_border_color"&lt;/span&gt; : &lt;span class="str"&gt;"C0DEED"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_sidebar_fill_color"&lt;/span&gt; : &lt;span class="str"&gt;"DDEEF6"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_text_color"&lt;/span&gt; : &lt;span class="str"&gt;"333333"&lt;/span&gt;,
            &lt;span class="str"&gt;"profile_use_background_image"&lt;/span&gt; : &lt;span class="kwrd"&gt;true&lt;/span&gt;,
            &lt;span class="str"&gt;"protected"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"screen_name"&lt;/span&gt; : &lt;span class="str"&gt;"gather_here"&lt;/span&gt;,
            &lt;span class="str"&gt;"show_all_inline_media"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;,
            &lt;span class="str"&gt;"statuses_count"&lt;/span&gt; : 7655,
            &lt;span class="str"&gt;"time_zone"&lt;/span&gt; : &lt;span class="str"&gt;"Central Time (US &amp;amp; Canada)"&lt;/span&gt;,
            &lt;span class="str"&gt;"url"&lt;/span&gt; : &lt;span class="str"&gt;"http://gatherhereonline.com"&lt;/span&gt;,
            &lt;span class="str"&gt;"utc_offset"&lt;/span&gt; : -21600,
            &lt;span class="str"&gt;"verified"&lt;/span&gt; : &lt;span class="kwrd"&gt;false&lt;/span&gt;
          }
      }]}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2012/11/05/Converting-New-Twitter-Search-Result-To-Old-Format-in-C-Using-JSONNET.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2012/11/05/Converting-New-Twitter-Search-Result-To-Old-Format-in-C-Using-JSONNET.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=53e1d525-2232-420e-9227-734ad3bd2879</guid>
      <pubDate>Mon, 05 Nov 2012 14:57:00 -0900</pubDate>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=53e1d525-2232-420e-9227-734ad3bd2879</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=53e1d525-2232-420e-9227-734ad3bd2879</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2012/11/05/Converting-New-Twitter-Search-Result-To-Old-Format-in-C-Using-JSONNET.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=53e1d525-2232-420e-9227-734ad3bd2879</wfw:commentRss>
    </item>
    <item>
      <title>Getting Twitter Avatar Via C#</title>
      <description>&lt;div&gt;[See &lt;a title="http://rhizohm.net/irhetoric/post/2013/05/01/Getting-Twitter-Avatar-Via-C-With-11-API.aspx" href="http://rhizohm.net/irhetoric/post/2013/05/01/Getting-Twitter-Avatar-Via-C-With-11-API.aspx"&gt;http://rhizohm.net/irhetoric/post/2013/05/01/Getting-Twitter-Avatar-Via-C-With-11-API.aspx&lt;/a&gt; for how to do this with the Twitter 1.1 API]&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;Until Twitter deprecates their version 1 api, getting an avatar from Twitter anonymously serverside with C# is a snap. A little goofy since it returns a 302 so you have to set &lt;strong&gt;AllowAutoRedirect &lt;/strong&gt;to false and then look in the Header location to get the URI:&lt;/div&gt;  &lt;div&gt;   &lt;pre class="brush: c-sharp;"&gt;private string GetTwitterAvatarUrl(string twitterHandle)
        {
            string avatarUrl = string.Empty;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format(&amp;quot;https://api.twitter.com/1/users/profile_image?screen_name={0}&amp;quot;, twitterHandle));
            request.AllowAutoRedirect = false;
            request.Method = &amp;quot;GET&amp;quot;;
            try
            {
                WebResponse response = request.GetResponse();
                if (response.Headers[&amp;quot;Location&amp;quot;] != null)
                    avatarUrl = response.Headers[&amp;quot;Location&amp;quot;];
            }
            catch (WebException) {}
            
            return avatarUrl;
        }&lt;/pre&gt;
&lt;/div&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2012/10/05/Getting-Twitter-Avatar-Via-C.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2012/10/05/Getting-Twitter-Avatar-Via-C.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=f38a27ff-3a6e-4781-b571-6329d3929264</guid>
      <pubDate>Fri, 05 Oct 2012 10:42:00 -0900</pubDate>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=f38a27ff-3a6e-4781-b571-6329d3929264</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=f38a27ff-3a6e-4781-b571-6329d3929264</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2012/10/05/Getting-Twitter-Avatar-Via-C.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=f38a27ff-3a6e-4781-b571-6329d3929264</wfw:commentRss>
    </item>
    <item>
      <title>WordPress Audio Player Now Falls Back To HTML5</title>
      <description>&lt;p&gt;I realized people on iOS and other devices that don’t support Flash couldn’t use the embedded Flash player for listening to audio when using the &lt;a href="http://wpaudioplayer.com/"&gt;WordPress Audio Player&lt;/a&gt; plugin.&amp;#160; I wanted to customize it so that sites would fall back to HTML5 if Flash wasn’t present. I found a post in the WordPress forums of someone who did this &lt;a href="http://wordpress.org/support/topic/audio-player-2041-with-html5-fallback"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;However, his script didn’t work as it was for two reasons. First, he was Base64 encoding the url to the mp3 — not sure why. So I remmed out that code. Second, he was replacing the parent element with the &amp;lt;audio&amp;gt; tag, which was blowing away the entire post!&amp;#160; By replacing the element witht the id of the audio tag itself, walla!&amp;#160; Everything works!&lt;/p&gt;  &lt;p&gt;You can download the modified file &lt;a href="http://flotzam.com/scripts/audio-player-html5.js"&gt;here&lt;/a&gt; and minify if you’d like.&lt;/p&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2012/08/15/WordPress-Audio-Player-Now-Falls-Back-To-HTML5.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2012/08/15/WordPress-Audio-Player-Now-Falls-Back-To-HTML5.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=4dc5e7d7-6420-4563-93f7-c0b3893463a6</guid>
      <pubDate>Wed, 15 Aug 2012 09:17:41 -0900</pubDate>
      <category>html5</category>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=4dc5e7d7-6420-4563-93f7-c0b3893463a6</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=4dc5e7d7-6420-4563-93f7-c0b3893463a6</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2012/08/15/WordPress-Audio-Player-Now-Falls-Back-To-HTML5.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=4dc5e7d7-6420-4563-93f7-c0b3893463a6</wfw:commentRss>
    </item>
    <item>
      <title>Skinless jPlayer Implementation</title>
      <description>&lt;p&gt;I recently implemented a skinless audio player using &lt;a href="http://jplayer.org/"&gt;jPlayer&lt;/a&gt; that plays m4a files that it retrieves from the &lt;a href="http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html"&gt;iTunes Search API&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I am using jPlayer 2.1.0 and the main gotchas I hit were problems with not having the latest version of Flash on target computers.&amp;#160; jPlayer requires Flash 10 or higher for fallback, which it seems to do for m4a files in Firefox.&lt;/p&gt;  &lt;p&gt;Anyway, here’s the code if you are interested. Here’s where I instantiate the jPlayer. The only parameters I pass are the &lt;strong&gt;supplied &lt;/strong&gt;parameter. I got away with the defaults for everything else.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;$(&lt;span class="str"&gt;&amp;quot;#jplayer&amp;quot;&lt;/span&gt;).jPlayer({
ready: &lt;span class="kwrd"&gt;function&lt;/span&gt;() {
$(&lt;span class="str"&gt;&amp;quot;#jp_container .track-default&amp;quot;&lt;/span&gt;).click();
},
supplied: &lt;span class="str"&gt;&amp;quot;m4a, m4v&amp;quot;&lt;/span&gt;
});&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;Then, here’s how I wire up the click handler, toggling between the play and pause icons:&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; current;
 $(&lt;span class="str"&gt;&amp;quot;.play&amp;quot;&lt;/span&gt;).click(&lt;span class="kwrd"&gt;function&lt;/span&gt;(e) {
 $(&lt;span class="str"&gt;&amp;quot;#jplayer&amp;quot;&lt;/span&gt;).jPlayer(&lt;span class="str"&gt;&amp;quot;setMedia&amp;quot;&lt;/span&gt;, {
 m4a: $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).attr(&lt;span class="str"&gt;&amp;quot;href&amp;quot;&lt;/span&gt;)
 });

 &lt;span class="kwrd"&gt;if&lt;/span&gt; (current == &lt;span class="kwrd"&gt;this&lt;/span&gt;) {
 $(current).empty();
 $(current).append(&lt;span class="str"&gt;&amp;quot;&amp;lt;img style='vertical-align:middle;' &lt;br /&gt;   border='0' src='/images/ic_menu_play.png'/&amp;gt;&amp;quot;&lt;/span&gt;);
 $(&lt;span class="str"&gt;&amp;quot;#jplayer&amp;quot;&lt;/span&gt;).jPlayer(&lt;span class="str"&gt;&amp;quot;pause&amp;quot;&lt;/span&gt;);
 current = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
 &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;

 }
 $(&lt;span class="str"&gt;&amp;quot;#jplayer&amp;quot;&lt;/span&gt;).jPlayer(&lt;span class="str"&gt;&amp;quot;play&amp;quot;&lt;/span&gt;);

 &lt;span class="kwrd"&gt;if&lt;/span&gt; (current != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
 $(current).empty();
 $(current).append(&lt;span class="str"&gt;&amp;quot;&amp;lt;img style='vertical-align:middle;' &lt;br /&gt;   border='0' src='/images/ic_menu_play.png'/&amp;gt;&amp;quot;&lt;/span&gt;);
 }
 $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).empty();
 $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).append(&lt;span class="str"&gt;&amp;quot;&amp;lt;img style='vertical-align:middle;' &lt;br /&gt;   border='0' src='/images/ic_menu_pause.png'/&amp;gt;&amp;quot;&lt;/span&gt;);
 current = &lt;span class="kwrd"&gt;this&lt;/span&gt;;
 &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
 });&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;Works great!&lt;/pre&gt;

&lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:47079c1b-c106-49d1-9616-5b39bc5a2c40" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Jplayer" rel="tag"&gt;Jplayer&lt;/a&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2012/08/15/Skinless-jPlayer-Implementation.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2012/08/15/Skinless-jPlayer-Implementation.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=a08ce6c8-294e-446d-ae07-48f318d58380</guid>
      <pubDate>Wed, 15 Aug 2012 09:13:01 -0900</pubDate>
      <category>html5</category>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=a08ce6c8-294e-446d-ae07-48f318d58380</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=a08ce6c8-294e-446d-ae07-48f318d58380</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2012/08/15/Skinless-jPlayer-Implementation.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=a08ce6c8-294e-446d-ae07-48f318d58380</wfw:commentRss>
    </item>
    <item>
      <title>Having jPlayer dynamically switch between m4a and mp3</title>
      <description>&lt;p&gt;According to the docs of jPlayer &lt;a href="http://www.jplayer.org/latest/developer-guide/#jPlayer-essential-formats"&gt;http://www.jplayer.org/latest/developer-guide/#jPlayer-essential-formats&lt;/a&gt;, you are only supposed to use either mp3 or m4a.&amp;nbsp; But in my case, I’m not sure which gets passed to the player from the database. So, I had to handle that in the script. Here’s what it looks like:&lt;/p&gt;&lt;pre class="csharpcode"&gt;$(&lt;span class="str"&gt;"#jplayer"&lt;/span&gt;).jPlayer({
 ready: &lt;span class="kwrd"&gt;function&lt;/span&gt;() {
 $(&lt;span class="str"&gt;"#jp_container .track-default"&lt;/span&gt;).click();
 },

 supplied: &lt;span class="str"&gt;"m4a, mp3, mv4"&lt;/span&gt;
 });
&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;p&gt;When I wire up the handlers, I check the file extension before passing the URL to the setMedia method, like this:&lt;/p&gt;&lt;pre class="csharpcode"&gt;$(&lt;span class="str"&gt;".play"&lt;/span&gt;).click(&lt;span class="kwrd"&gt;function&lt;/span&gt;(e) {
 &lt;span class="kwrd"&gt;var&lt;/span&gt; filename = $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).attr(&lt;span class="str"&gt;"href"&lt;/span&gt;);
 &lt;span class="kwrd"&gt;var&lt;/span&gt; ext = filename.split(&lt;span class="str"&gt;'.'&lt;/span&gt;).pop();&lt;/pre&gt;
&lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26d970bb-5bfb-4a42-9a2e-c67e4cc9a62b" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/jPlayer" rel="tag"&gt;jPlayer&lt;/a&gt;&lt;/div&gt;&lt;pre class="csharpcode"&gt;
 &lt;span class="kwrd"&gt;if&lt;/span&gt; (ext == &lt;span class="str"&gt;"m4a"&lt;/span&gt;) {
 $(&lt;span class="str"&gt;"#jplayer"&lt;/span&gt;).jPlayer(&lt;span class="str"&gt;"setMedia"&lt;/span&gt;, {
 m4a: $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).attr(&lt;span class="str"&gt;"href"&lt;/span&gt;)
 });
 }
 &lt;span class="kwrd"&gt;else&lt;/span&gt; {
 $(&lt;span class="str"&gt;"#jplayer"&lt;/span&gt;).jPlayer(&lt;span class="str"&gt;"setMedia"&lt;/span&gt;, {
 mp3: $(&lt;span class="kwrd"&gt;this&lt;/span&gt;).attr(&lt;span class="str"&gt;"href"&lt;/span&gt;)
 });

 }
&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;
&lt;p&gt;A little hacky, but it works!&lt;/p&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;</description>
      <link>http://rhizohm.net/irhetoric/post/2012/08/15/Having-jPlayer-dynamically-switch-between-m4a-and-mp3.aspx</link>
      <comments>http://rhizohm.net/irhetoric/post/2012/08/15/Having-jPlayer-dynamically-switch-between-m4a-and-mp3.aspx#comment</comments>
      <guid>http://rhizohm.net/irhetoric/post.aspx?id=42a6b53b-9a98-4b02-ac4e-207d8771f534</guid>
      <pubDate>Wed, 15 Aug 2012 09:07:52 -0900</pubDate>
      <category>html5</category>
      <dc:publisher>rhizohm</dc:publisher>
      <pingback:server>http://rhizohm.net/irhetoric/pingback.axd</pingback:server>
      <pingback:target>http://rhizohm.net/irhetoric/post.aspx?id=42a6b53b-9a98-4b02-ac4e-207d8771f534</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://rhizohm.net/irhetoric/trackback.axd?id=42a6b53b-9a98-4b02-ac4e-207d8771f534</trackback:ping>
      <wfw:comment>http://rhizohm.net/irhetoric/post/2012/08/15/Having-jPlayer-dynamically-switch-between-m4a-and-mp3.aspx#comment</wfw:comment>
      <wfw:commentRss>http://rhizohm.net/irhetoric/syndication.axd?post=42a6b53b-9a98-4b02-ac4e-207d8771f534</wfw:commentRss>
    </item>
  </channel>
</rss>
