<rss version="2.0">
  <channel>
    <title>Fresh Logic Studios</title>
    <link>http://blogs.freshlogicstudios.com/</link>
    <copyright>Copyright Fresh Logic Studios</copyright>
    <generator>Fresh Logic Studios Blogs</generator>
    <description>Fresh Logic Studios Blogs</description>
    <item>
      <title>Consuming the Google Analytics API with .NET</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=fc73a272-c361-4ed9-b9f0-1716e96701d7</link>
      <description><![CDATA[<P>The <A href="http://code.google.com/apis/analytics/docs/gdata/gdataDeveloperGuide.html">Google Analytics API</A> gives you read-only access to the data kept in a Google Analytics profile. Essentially every piece of information that can be displayed in the Google Analytics web interface is accessible through the API in the form of GData feeds.</P>
<P>If you want to consume the Google Analytics API from .NET you essentially have two options. You can use the <A href="http://code.google.com/p/google-gdata/">GData .NET Client library</A> (which doesn't yet officially list Google Analytics as a supported service, but if you <A href="http://code.google.com/p/google-gdata/source/browse/#svn/trunk/clients/cs/src/analytics">browse the source</A> you'll find it). Or you can roll up your sleeves and issue the HTTP GETs and POSTs yourself.</P>
<P>If you're doing the later you might find that this little bit of C# we created could save you some time.</P>
<P><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.Collections.Specialized;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.IO;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.Linq;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.Net;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.ServiceModel.Syndication;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.Text;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.Web;<BR></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> System.Xml;</P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
<P>namespace</FONT></FONT><FONT size=2> GoogleAnalytics<BR>{<BR>   </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>public</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>static</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>class</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>Client<BR>   </FONT></FONT><FONT size=2>{<BR>      </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>public</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>static</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> GetAuthorizationToken(</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> email, </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> password)<BR>      {<BR>         </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> (</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> webClient = </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>WebClient</FONT></FONT><FONT size=2>())<BR>         {<BR>            </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> nameValueCollection = </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>NameValueCollection</FONT></FONT><FONT size=2>();<BR>            nameValueCollection.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"Email"</FONT></FONT><FONT size=2>, email);<BR>            nameValueCollection.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"Passwd"</FONT></FONT><FONT size=2>, password);<BR>            nameValueCollection.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"service"</FONT></FONT><FONT size=2>, </FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"analytics"</FONT></FONT><FONT size=2>);</FONT></P>
<P><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            var</FONT></FONT><FONT size=2> response = webClient.UploadValues(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"https://www.google.com/accounts/ClientLogin"</FONT></FONT><FONT size=2>, nameValueCollection);<BR>            </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> values = </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>Encoding</FONT></FONT><FONT size=2>.Default.GetString(response).Split(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>'\n'</FONT></FONT><FONT size=2>);</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            return</FONT></FONT><FONT size=2> values.First(value => value.StartsWith(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"Auth="</FONT></FONT><FONT size=2>)).Replace(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"Auth="</FONT></FONT><FONT size=2>, </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.Empty);<BR>         }<BR>      }</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>      public</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>static</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>SyndicationFeed</FONT></FONT><FONT size=2> GetAccountFeed(</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> authorizationToken)<BR>      {<BR>         </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> (</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> webClient = </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>WebClient</FONT></FONT><FONT size=2>())<BR>         {<BR>            webClient.Headers.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"GData-Version"</FONT></FONT><FONT size=2>, </FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"2"</FONT></FONT><FONT size=2>);<BR>            webClient.Headers.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"Authorization"</FONT></FONT><FONT size=2>, </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.Format(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"GoogleLogin Auth={0}"</FONT></FONT><FONT size=2>, authorizationToken));</FONT></P>
<P><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            var</FONT></FONT><FONT size=2> response = webClient.DownloadString(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"https://www.google.com/analytics/feeds/accounts/default"</FONT></FONT><FONT size=2>);</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            return</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>SyndicationFeed</FONT></FONT><FONT size=2>.Load(</FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>XmlReader</FONT></FONT><FONT size=2>.Create(</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>StringReader</FONT></FONT><FONT size=2>(response)));<BR>         }<BR>      }</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>      public</FONT></FONT><FONT size=2> </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>static</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>SyndicationFeed</FONT></FONT><FONT size=2> GetDataFeed(</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> authorizationToken, </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> profileId, </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>DateTime</FONT></FONT><FONT size=2> startDate, </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>DateTime</FONT></FONT><FONT size=2> endDate, </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> metrics, </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> dimensions, </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>string</FONT></FONT><FONT size=2> sort, </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>int</FONT></FONT><FONT size=2>? maxResults)<BR>      {<BR>         </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> (</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> webClient = </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>WebClient</FONT></FONT><FONT size=2>())<BR>         {<BR>            </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> query = </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>HttpUtility</FONT></FONT><FONT size=2>.ParseQueryString(</FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.Empty);<BR>            query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"ids"</FONT></FONT><FONT size=2>, profileId);<BR>            query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"start-date"</FONT></FONT><FONT size=2>, startDate.ToString(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"yyyy-MM-dd"</FONT></FONT><FONT size=2>));<BR>            query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"end-date"</FONT></FONT><FONT size=2>, endDate.ToString(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"yyyy-MM-dd"</FONT></FONT><FONT size=2>));<BR>            query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"metrics"</FONT></FONT><FONT size=2>, metrics);</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            if</FONT></FONT><FONT size=2> (!</FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.IsNullOrEmpty(dimensions))<BR>            {<BR>               query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"dimensions"</FONT></FONT><FONT size=2>, dimensions);<BR>            }</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            if</FONT></FONT><FONT size=2> (!</FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.IsNullOrEmpty(sort))<BR>            {<BR>               query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"sort"</FONT></FONT><FONT size=2>, sort);<BR>            }<BR><BR>            </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>if</FONT></FONT><FONT size=2> (maxResults.HasValue)<BR>            {<BR>               query.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"max-results"</FONT></FONT><FONT size=2>, maxResults.Value.ToString());<BR>            }</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            var</FONT></FONT><FONT size=2> uri = </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>UriBuilder</FONT></FONT><FONT size=2>("</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2><A href="https://www.google.com/analytics/feeds/data">https://www.google.com/analytics/feeds/data</A>"</FONT></FONT><FONT size=2>);<BR>            uri.Query = query.ToString();</P>
<P>            webClient.Headers.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"GData-Version"</FONT></FONT><FONT size=2>, </FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"2"</FONT></FONT><FONT size=2>);<BR>            webClient.Headers.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"Authorization"</FONT></FONT><FONT size=2>, </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.Format(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"GoogleLogin Auth={0}"</FONT></FONT><FONT size=2>, authorizationToken));</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            var</FONT></FONT><FONT size=2> response = webClient.DownloadString(uri.Uri.AbsoluteUri);</P>
<P></FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>            return</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>SyndicationFeed</FONT></FONT><FONT size=2>.Load(</FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>XmlReader</FONT></FONT><FONT size=2>.Create(</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>StringReader</FONT></FONT><FONT size=2>(response)));<BR>         }<BR>      }<BR>   }<BR>}</P></FONT>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=fc73a272-c361-4ed9-b9f0-1716e96701d7</comments>
      <pubDate>Tue, 29 Dec 2009 21:07:26 GMT</pubDate>
    </item>
    <item>
      <title>Think Globally, Tweet Locally</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=e02c7edb-b161-45ba-8478-354e3c6b07dd</link>
      <description><![CDATA[<P>Twitter recently launched their <A href="http://blog.twitter.com/2009/11/think-globally-tweet-locally.html">Geotagging API</A>&nbsp;which allows third party Twitter apps to publish the location from where a tweet was posted.</P>
<P>We've had the&nbsp;ability&nbsp;to <A href="/Posts/View.aspx?Id=ed4de101-9fa4-4208-993c-39f7812eb7c6">view a stream of tweets on Atlas</A>&nbsp;for a while now. Tweets that match a search query (or the public timeline) are placed on the map based on what the Twitter user specified as their location in their Twitter profile.</P>
<P>The addition of geotagging to the Twitter API provides Atlas with the <STRONG>exact location</STRONG> from where a tweet was made. Now, if Atlas sees a tweet with a geotag we'll use it instead of the user's location specified in their Twitter profile.</P>
<P>As the <A href="http://twitter.zendesk.com/forums/26810/entries/78525">Twitter Geotagging FAQ</A> points out, "Geotaggging is disabled by default for everyone. You can enable it from the Settings&gt;&gt;Account tab".</P>
<P><IMG src="http://twitter.zendesk.com/attachments/token/dykvkoysf1wprhd/?name=geo2-1.png" width=570 height=252></P>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=e02c7edb-b161-45ba-8478-354e3c6b07dd</comments>
      <pubDate>Sun, 29 Nov 2009 01:04:29 GMT</pubDate>
    </item>
    <item>
      <title>Use Google's Closure Compiler In 5 Lines Of C#</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=17cabf0e-1885-4c26-a9d1-6ce7f8ad6817</link>
      <description><![CDATA[<P><EM>The <A href="http://code.google.com/closure/compiler/">Google Closure Compiler</A> is a tool for making JavaScript download and run faster. It is a true compiler for JavaScript. Instead of compiling from a source language to machine code, it compiles from JavaScript to better JavaScript. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left.</EM></P>
<P>The best part of the Closure Compiler is its REST API. Here's 5 lines of C# that will optimize your JavaScript:</P><FONT color=#0000ff size=2><FONT color=#0000ff size=2><FONT color=#0000ff size=2><FONT color=#0000ff size=2>
<P>string</FONT></FONT><FONT size=2><FONT color=#000000> js = "alert('Hello World');";</FONT></P></FONT></FONT></FONT>
<P><FONT color=#0000ff size=2><FONT color=#0000ff size=2>using</FONT></FONT><FONT size=2> (</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> webClient = </FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>new</FONT></FONT><FONT size=2> </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>WebClient</FONT></FONT><FONT size=2>())<BR></FONT><FONT size=2>{<BR>&nbsp;&nbsp;&nbsp;webClient.Headers.Add(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"content-type"</FONT></FONT><FONT size=2>, </FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"application/x-www-form-urlencoded"</FONT></FONT><FONT size=2>);<BR>&nbsp;&nbsp;&nbsp;</FONT><FONT color=#0000ff size=2><FONT color=#0000ff size=2>var</FONT></FONT><FONT size=2> postData = </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>String</FONT></FONT><FONT size=2>.Format(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"js_code={0}&amp;output_info=compiled_code"</FONT></FONT><FONT size=2>, </FONT><FONT color=#2b91af size=2><FONT color=#2b91af size=2>HttpUtility</FONT></FONT><FONT size=2>.UrlEncode(js));<BR>&nbsp;&nbsp;&nbsp;</FONT><FONT size=2>js = webClient.UploadString(</FONT><FONT color=#a31515 size=2><FONT color=#a31515 size=2>"http://closure-compiler.appspot.com/compile"</FONT></FONT><FONT size=2>, postData);<BR>}</P></FONT>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=17cabf0e-1885-4c26-a9d1-6ce7f8ad6817</comments>
      <pubDate>Tue, 10 Nov 2009 17:10:18 GMT</pubDate>
    </item>
    <item>
      <title>JsFramework Now Optimized With Google Closure Compiler</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=14cca76b-47b8-436e-ac6c-3c771ed460ad</link>
      <description><![CDATA[<P>We switched <A href="http://jsframework.com">JsFramework's</A> JavaScript optimization from&nbsp;<A href="http://developer.yahoo.com/yui/compressor/">Yahoo's YUI Compressor</A> to <A href="http://code.google.com/closure/compiler/">Google's Closure Compiler</A>.</P>
<P>The Closure Compiler&nbsp;does a slightly better&nbsp;job optimizing our JavaScript&nbsp;than the YUI Compressor,&nbsp;saving about&nbsp;1.4 KB. However, the real win is&nbsp;the Closure Compiler's REST API which we were able to get up and running in about&nbsp;four lines of C# code. The big advantage&nbsp;with the REST API is&nbsp;there's no JAR file to maintain/deploy and Google can keep the Closure Compiler&nbsp;API up to date as changes are made.</P>
<P><A href="http://jsframework.com/tests/jsunit/testRunner.html?testPage=/Tests/Default.html">JsFramework unit tests</A> are still passing after making the switch to Closure Compiler.</P>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=14cca76b-47b8-436e-ac6c-3c771ed460ad</comments>
      <pubDate>Mon, 09 Nov 2009 23:06:18 GMT</pubDate>
    </item>
    <item>
      <title>Map Your Kanye West Tweets</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=ed4de101-9fa4-4208-993c-39f7812eb7c6</link>
      <description><![CDATA[<P>From the <A href="http://search.twitter.com/about">Twitter Search FAQ</A>, "There is an undeniable need to search, filter, and otherwise interact with the volumes of news and information being transmitted to Twitter every second. Twitter Search helps you filter all the real-time information coursing through our service."</P>
<P>We've recently&nbsp;upgraded our <A href="http://atlas.freshlogicstudios.com/?twitter">Twitter feature in Atlas</A> to include search. Click the Twitter icon in Atlas (you'll find it under the "experimental" tab) and we'll begin by displaying tweets from the public timeline. Enter your own search term OR select a currently trending topic from the dropdown and&nbsp;Atlas will&nbsp;begin streaming&nbsp;search results as they happen.</P>
<P><IMG style="WIDTH: 545px; HEIGHT: 374px" src="http://folders.freshlogicstudios.com/Download.ashx?Id=bb7fe769-f9cb-4ec4-9a14-54e473ad7833" width=570 height=451></P>
<P>Dr. Andrew Hudson-Smith of Digital Urban <A href="http://digitalurban.blogspot.com/2007/04/twitter-live-maps-with-georss-and-atlas.html">offers a word of advice</A>, "Warning you could spend hours just watching this Twitter visualization using Atlas."</P>
<P>Pro tip: You can create your own Twitter search map URL using <A href="http://atlas.freshlogicstudios.com/?twitter=@woot OR woot.com">http://atlas.freshlogicstudios.com/?twitter={searchTerm}</A></P>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=ed4de101-9fa4-4208-993c-39f7812eb7c6</comments>
      <pubDate>Tue, 15 Sep 2009 11:08:19 GMT</pubDate>
    </item>
    <item>
      <title>About This Location</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=88987cde-d5ed-403c-9dbe-cc9536c846df</link>
      <description><![CDATA[<P>In <A href="http://atlas.freshlogicstudios.com">Atlas</A>, if you right click any spot on the map (or click on any pushpin) you're greeted with a handy little menu. The last option in this menu we've named "about this location".</P>
<P><IMG src="http://folders.freshlogicstudios.com/Download.ashx?Id=68b4e55e-1291-42e4-ac53-4804f137abae"></P>
<P>When you select "about this location" Atlas is going to do three things for you. First,&nbsp;it's going to show the latitude and longitude coordinates&nbsp;for the spot you've clicked. Next, it's going to display&nbsp;the readable street address for the spot you've clicked&nbsp;using a process called <A href="http://en.wikipedia.org/wiki/Reverse_geocoding">reverse geocoding</A>. We've had this for a while now.</P>
<P>This next part is new.&nbsp;Atlas&nbsp;will now&nbsp;query Wikipedia for relevant articles near the spot you've clicked. If&nbsp;Atlas is&nbsp;able to locate a relevant article, it will display a short summary and provide a link to the full article on Wikipedia.</P>
<P><IMG src="http://folders.freshlogicstudios.com/Download.ashx?Id=9eab4054-fcc8-474e-a590-503031c56921"></P>
<P>We've talked about <A href="/Posts/View.aspx?Id=2afe58af-ae92-44f3-a326-0781bda8d76e">Atlas &amp; Wikipedia</A> before, but we feel integrating Wikipedia articles into the "about this location" is a lot more useful.</P>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=88987cde-d5ed-403c-9dbe-cc9536c846df</comments>
      <pubDate>Mon, 13 Jul 2009 13:27:25 GMT</pubDate>
    </item>
    <item>
      <title>Basic, Advanced, Experimental</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=e462b726-edb8-43f3-9b81-ba0407095e10</link>
      <description><![CDATA[<P>Tonight's <A href="http://atlas.freshlogicstudios.com">Atlas</A> improvements includes reorganizing the tab menus that used to read: start, features, feeds, and services. They now read: basic, advanced, and experimental.</P>
<UL>
<LI>Basic includes, get this,&nbsp;the basics... like <A href="http://atlas.freshlogicstudios.com/?rtp=adr.St.%20Louis%2C%20MO~adr.Chicago%2C%20IL">directions</A> and <A href="http://atlas.freshlogicstudios.com/?ss=pizza">search</A>.</LI>
<LI>Advanced includes several of our most popular features... including lowest gas prices, <A href="http://atlas.freshlogicstudios.com/?Packages">package tracking</A>, and Flickr photo search.</LI>
<LI>Experimental includes a preview of some&nbsp;things we're still working on... such as <A href="http://www.freshlogicstudios.com/Products/Atlas/Gps.aspx">GPS device tracking</A>&nbsp;and our <A href="http://atlas.freshlogicstudios.com/?Twitter&amp;lvl=6">Twitter visualization</A>.</LI></UL>
<P>We hope this new change makes it easier to discover new ways to use <A href="http://atlas.freshlogicstudios.com/">Atlas</A>. If you have any other suggestions, <A href="http://www.freshlogicstudios.com/About/Contact.aspx">we'd love to hear it</A>.</P>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=e462b726-edb8-43f3-9b81-ba0407095e10</comments>
      <pubDate>Fri, 10 Jul 2009 00:34:15 GMT</pubDate>
    </item>
    <item>
      <title>JsFramework</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=693d6eab-1b41-4b69-9d60-122df7aafd97</link>
      <description><![CDATA[<a href="http://jsframework.com">JsFramework</a> is an object oriented JavaScript library with a programming model similar to the Microsoft .NET Framework.<br><br>We started this library a couple of years ago because <a href="/Posts/View.aspx?Id=e61ce7ce-179f-45e6-b0c3-f25583d01365">we hated working with JavaScript's Date class</a>. Back then we simply called the library "Scripts". Now that we've added <a href="/Posts/View.aspx?Id=c546d2b5-691f-41c8-97a8-edef603e9911">more and more</a> JavaScript implementations of the .NET Framework we decided to give it a new name; <a href="http://jsframework.com">JsFramework</a>.<br><br><a href="http://jsframework.com">JsFramework</a> is meant to supplement jQuery and the Microsoft AJAX Library. If you'd like to work with things like DateTime.ToShortDateString(), String.Format(), and Uri.GetHost() in JavaScript you should glance at the <a href="http://jsframework.com/Examples">examples</a> and <a href="http://jsframework.com/Download">give it a shot</a>.]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=693d6eab-1b41-4b69-9d60-122df7aafd97</comments>
      <pubDate>Wed, 08 Jul 2009 22:57:32 GMT</pubDate>
    </item>
    <item>
      <title>Fresh Logic Studios Redesigned... Sorta</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=fe7e8de2-56c7-47b5-a047-0e2b2d787505</link>
      <description><![CDATA[<P>The <A href="http://www.freshlogicstudios.com">freshlogicstudios.com</A> redesign is up. You're soaking in it. And right now many of you are thinking, "uh, it looks pretty much like it did back in 2007." You're right. It's old school.</P>
<P><STRONG>So, what's new in this redesign?<BR></STRONG>Nothing really. We took a small break from&nbsp;<A href="http://www.freshlogicstudios.com/About/Hire.aspx">project work</A> to tidy things up around here. Don't freak out; it was time for us to remove some older portions of the site.</P>
<P><STRONG>What happened to your gadgets?<BR></STRONG>We had a great time working with the Windows Live team and various groups inside Microsoft creating web gadgets for <A href="http://my.live.com">live.com</A>. Sadly there <A href="http://blogs.msdn.com/winlivegadgets">doesn't appear to be much activity</A> with web gadgets lately. If you're still using <A href="http://my.live.com">live.com</A> as your homepage you can find our gadgets on our <A href="http://www.freshlogicstudios.com/Products/Gadgets/">archived gadgets page</A> or on the <A href="http://gallery.live.com/author.aspx?a=a31dfdc3-86f5-4996-a258-8eef5f812380">Windows Live Gallery</A>.</P>
<P><STRONG>What happend to your JavaScript library?<BR></STRONG>We moved it to <A href="http://jsframework.com">jsframework.com</A>. We think <A href="http://jsframework.com">JsFramework</A> is a much better name than <A href="http://ajaxian.com/archives/fresh-logic-studios-scripts-oo-js">Fresh Logic Studios Scripts</A>; I'm sure you'll agree.</P>
<P><STRONG>What about Atlas?<BR></STRONG>Same great Atlas. If you've not tried some of the more advanced features, you should give them a shot. You could <A href="http://atlas.freshlogicstudios.com/?Videos=keyboard+cat">map videos from youtube</A>, <A href="http://atlas.freshlogicstudios.com/?Packages">track shipments</A>, <A href="/Posts/View.aspx?Id=72d2fc4d-efb6-48c5-833c-940ccde247f2">map twitter posts</A>... or use it to <A href="http://www.fireapparatusmagazine.com/fire-apparatus-magazine/articles/482613-Google-An-Address-To-Prepare-For-Fire">fight fires</A>.</P>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=fe7e8de2-56c7-47b5-a047-0e2b2d787505</comments>
      <pubDate>Mon, 06 Jul 2009 23:48:12 GMT</pubDate>
    </item>
    <item>
      <title>Search Twitter With Atlas</title>
      <link>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=72d2fc4d-efb6-48c5-833c-940ccde247f2</link>
      <description><![CDATA[<P>We still need to polish up the user interface, and it performs slower than we'd like, but tonight we were able to throw together a Twitter search visualization using Atlas. Try it out...</P>
<SCRIPT type=text/javascript>
	function RedirectToTwitterSearch()
	{
		var twitterQuery = document.getElementById('TextBoxTwitterQuery').value;
var geoRssUri = 'http://atlas.freshlogicstudios.com/GeoRss/Feeds/Twitter.ashx?q=' + escape(escape(twitterQuery));
		window.location.href = 'http://atlas.freshlogicstudios.com/?lvl=6&GeoRssUpdateInterval=5&GeoRssUri=' + escape(geoRssUri);
	}

function TextBoxTwitterQuery_KeyPress(e)
{
   var characterCode;
	 if(e && e.which){
	 e = e;
	 characterCode = e.which;
	 }
	 else{
	 e = event;
	 characterCode = e.keyCode;
	 }	 
	 if(characterCode == 13){
 	 RedirectToTwitterSearch();
return false;
	 }
else
{
return true;
}
}
</SCRIPT>

<P><INPUT maxlength="140" onkeypress="return TextBoxTwitterQuery_KeyPress(event);" id=TextBoxTwitterQuery style="WIDTH: 197px" size=9> <A class=Button href="javascript:RedirectToTwitterSearch();">Search</A></P></A>]]></description>
      <author>smiller@freshlogicstudios.com</author>
      <comments>http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=72d2fc4d-efb6-48c5-833c-940ccde247f2</comments>
      <pubDate>Mon, 02 Mar 2009 22:02:46 GMT</pubDate>
    </item>
  </channel>
</rss>