<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Greg Does IT</title>
	<atom:link href="http://gregdoesit.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregdoesit.com</link>
	<description>Do it to get it</description>
	<lastBuildDate>Sun, 22 Apr 2012 16:48:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Guest on the Windows Phone Dev Podcast</title>
		<link>http://gregdoesit.com/2012/04/guest-on-the-windows-phone-dev-podcast/</link>
		<comments>http://gregdoesit.com/2012/04/guest-on-the-windows-phone-dev-podcast/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 16:48:10 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[appflow]]></category>
		<category><![CDATA[Cocktail Flow]]></category>
		<category><![CDATA[wp7dev]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=895</guid>
		<description><![CDATA[Late March I was invited on to the Windows Phone Dev Podcast where I talked about Windows Phone app development, dropping some details on how Weather Flow, AppFlow and Cocktail Flow was developed. Listen to or download the podcast here: Episode 60 &#8211; DutchFlow.]]></description>
			<content:encoded><![CDATA[<p>Late March I was invited on to the Windows <a href="http://http://wpdevpodcast.com/">Phone Dev Podcast</a> where I talked about Windows Phone app development, dropping some details on how <a href="http://weatherflow.teamdistinction.com/">Weather Flow</a>, <a href="http://goappflow.com">AppFlow </a>and<a href="http://cocktailflow.com"> Cocktail Flow</a> was developed. Listen to or download the podcast here: <a href="http://themetrodevelopershow.com/2012/03/episode-060-dutchflow/">Episode 60 &#8211; DutchFlow</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2012/04/guest-on-the-windows-phone-dev-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashlight 7 Update: Constant LED Light Around the World</title>
		<link>http://gregdoesit.com/2011/11/flashlight-7-update-constant-light-around-the-world/</link>
		<comments>http://gregdoesit.com/2011/11/flashlight-7-update-constant-light-around-the-world/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 12:54:48 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Flashlight 7]]></category>
		<category><![CDATA[wp7dev]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=861</guid>
		<description><![CDATA[The latest version of Flashlight 7, v4.4 has added two exciting features: it now supports continuous LED light without flickering and has been fully translated to all 19 languages supported by Mango. This makes Flashlight 7 the only app on the market to support constant LED light under the lock screen as well as probably [...]]]></description>
			<content:encoded><![CDATA[<p>The latest version of Flashlight 7, v4.4 has added two exciting features: it now supports <strong>continuous LED light</strong> without flickering and has been fully <strong>translated to all 19 languages</strong> supported by Mango.</p>
<p>This makes Flashlight 7 the <strong>only app</strong> on the market to support constant LED light under the lock screen as well as probably the most feature rich and handy app available.</p>
<p>So grab the update now, what ever language you may have set your phone to:</p>
<ul>
<li>In English: <a href="http://www.windowsphone.com/en-US/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Flashlight 7</a></li>
<li>In French: <a href="http://www.windowsphone.com/fr-FR/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Lampe de Poche 7</a></li>
<li>In German: <a href="http://www.windowsphone.com/de-DE/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Taschenlampe 7</a></li>
<li>In Spanish: <a href="http://www.windowsphone.com/es-ES/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Linterna 7</a></li>
<li>In Italian: <a href="http://www.windowsphone.com/it-IT/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Torcia Elettrica 7</a></li>
<li>In Portuguese: <a href="http://www.windowsphone.com/pt-PT/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Lanterna 7</a></li>
<li>In Chinese: <a href="http://www.windowsphone.com/zh-TW/apps/5192e2d0-60e1-df11-a844-00237de2db9e">闪光灯7 </a></li>
<li>In Czech: <a href="http://www.windowsphone.com/cs-CZ/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Svítilna 7</a></li>
<li>In Danish: <a href="http://www.windowsphone.com/da-DK/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Lommelygte 7</a></li>
<li>In Dutch: <a href="http://www.windowsphone.com/nl-NL/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Zaklamp 7</a></li>
<li>In Finnish: <a href="http://www.windowsphone.com/fi-FI/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Taskulamppu 7</a></li>
<li>In Greek: <a href="http://www.windowsphone.com/el-GR/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Φακός 7</a></li>
<li>In Hungarian: <a href="http://www.windowsphone.com/hu-HU/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Zseblámpa 7</a></li>
<li>In Japanese: <a href="http://www.windowsphone.com/ja-JP/apps/5192e2d0-60e1-df11-a844-00237de2db9e">懐中電灯7</a></li>
<li>In Korean: <a href="http://www.windowsphone.com/ko-KR/apps/5192e2d0-60e1-df11-a844-00237de2db9e">플래쉬라이트 7</a></li>
<li>In Norwegian: <a href="http://www.windowsphone.com/nb-NO/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Lommelykt 7</a></li>
<li>In Polish: <a href="http://www.windowsphone.com/pl-PL/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Latarka 7</a></li>
<li>In Russian: <a href="http://www.windowsphone.com/ru-RU/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Фонарик 7</a></li>
<li>In Swedish: <a href="http://www.windowsphone.com/sv-SE/apps/5192e2d0-60e1-df11-a844-00237de2db9e">Ficklampa 7</a></li>
</ul>
<p>And here&#8217;s a screenshot of the LED:</p>
<p><img src="http://gregdoesit.com/wp-content/uploads/2011/09/Screen1.jpg"/></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/11/flashlight-7-update-constant-light-around-the-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flashlight 7 Updated to Mango, Adds LED Support</title>
		<link>http://gregdoesit.com/2011/09/flashlight-7-updated-to-mango-adds-led-support/</link>
		<comments>http://gregdoesit.com/2011/09/flashlight-7-updated-to-mango-adds-led-support/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 06:38:36 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Flashlight 7]]></category>
		<category><![CDATA[wp7dev]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=849</guid>
		<description><![CDATA[I&#8217;m happy to announce that Flashlight 7, the &#8211; currently &#8211; most popular flashlight app has been updated for Mango and now has LED support. According to tests the LED works on all phones, except for HTC HD7, MTC Mozart and Dell Venue Pro &#8211; these models don&#8217;t seem to properly implement the API used [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce that Flashlight 7, the &#8211; currently &#8211; most popular flashlight app has been updated for Mango and now has LED support. According to tests the LED works on all phones, except for HTC HD7, MTC Mozart and Dell Venue Pro &#8211; these models don&#8217;t seem to properly implement the API used to trigger the light on and off. The other features &#8211; such as police light, hypnosis, kaledioscope mode &#8211; have not been touched in this release, but expect some more fun modes in future releases.</p>
<p>And finally some pictures: the app running on a Samsung Omnia 7 and some screenshots of the application. Hope you enjoy the app, grab it from the Marketplace here, it&#8217;s free!</p>
<p><a href="http://social.zune.net/redirect?type=phoneApp&amp;id=5192e2d0-60e1-df11-a844-00237de2db9e"><img src="http://cocktailflow.com/images/wp7_English_300x50_blue.png" width="280" /></a></p>
<p><img src="http://gregdoesit.com/wp-content/uploads/2011/09/Screen1.jpg"/></p>
<p><img src="http://gregdoesit.com/wp-content/uploads/2011/09/Screen2.jpg"/></p>
<p><img src="http://gregdoesit.com/wp-content/uploads/2011/09/Screen3.jpg"/></p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/09/flashlight-7-updated-to-mango-adds-led-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bus Tracker Edinburgh for Windows Phone 7</title>
		<link>http://gregdoesit.com/2011/08/bus-tracker-edinburgh-for-windows-phone-7/</link>
		<comments>http://gregdoesit.com/2011/08/bus-tracker-edinburgh-for-windows-phone-7/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 13:34:29 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Community Involvement]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Bus Tracker Edinburgh]]></category>
		<category><![CDATA[wp7dev]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=798</guid>
		<description><![CDATA[I&#8217;m happy to announce that I&#8217;ve finally finished and published the Edinburgh Bus Tracker application, Bus Tracker Edinburgh. It&#8217;s completely free, get it from the Marketplace now: Main features of the application are: Find bus stops based on your location, by service number or by bus stop codes Mark stops as favorites and access them [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce that I&#8217;ve finally finished and published the Edinburgh Bus Tracker application, <a href="http://gergelyorosz.com/bustracker"><strong>Bus Tracker Edinburgh</strong></a>. It&#8217;s completely free, get it from the Marketplace now:</p>
<p><a style="text-decoration: underline;" href="http://social.zune.net/redirect?type=phoneApp&amp;id=12ebd130-6065-4992-b5d3-894f51f55688"><img src="http://cocktailflow.com/images/wp7_English_300x50_blue.png" width="280" style="float:left" /></a></p>
<p><img  src="http://gregdoesit.com/wp-content/uploads/2011/08/edinbus/173x173.png" style="float:left; margin-left:10px; clear:right" width="48" height="48"/></p>
<p style="clear:both">
Main features of the application are:</p>
<ul>
<li>Find bus stops based on your location, by service number or by bus stop codes</li>
<li>Mark stops as favorites and access them with a simple swipe on the main screen</li>
<li>Acess the most recently viewed stops from the main screen</li>
<li>Get automatic Lothian bus service alerts</li>
<li>&#8230; all designed to blend perfectly with your Windows Phone with beautiful Metro design</li>
</ul>
<p>(A note as to why I chose this name versus Edinburgh Bus Tracker or EdinBus: should you not pin the app to the start page it&#8217;s somewhat a drag to scroll all the way down to &#8220;E&#8221; to start the app. Changing the name to start with &#8220;B&#8221; seemed to put it at my fingertips in the long list app selector as well).</p>
<p>For more information and screenshots, visit the <a href="http://gergelyorosz.com/bustracker">Bus Tracker Edinburgh</a> home page.</p>
<p>If you&#8217;re an Edinburgh resident I hope you&#8217;ll find it useful on your everyday commute. (And if the lack of this application was stopping you getting a WP7 you can now reconsider it <img src='http://gregdoesit.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/08/bus-tracker-edinburgh-for-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Ad Rotator Control for Windows Phone 7</title>
		<link>http://gregdoesit.com/2011/06/ad-rotator-for-windows-phone-7/</link>
		<comments>http://gregdoesit.com/2011/06/ad-rotator-for-windows-phone-7/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 10:38:36 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[wp7dev]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=789</guid>
		<description><![CDATA[I&#8217;ve finished creating an ad rotator control for Windows Phone 7 and have published it along with the source code here: Windows Phone 7 Ad Rotator on CodePlex. I originally created the control so that I could dynamically configure ads appearing on Flashlight 7 based on ad culture. In the US I normally prefer using [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finished creating an ad rotator control for Windows Phone 7 and have published it along with the source code here: <a href="http://wp7adrotator.codeplex.com/">Windows Phone 7 Ad Rotator on CodePlex</a>.</p>
<p>I originally created the control so that I could dynamically configure ads appearing on <a href="http://www.appsfuze.com/applications/windowsphone.tools/flashlight-7,731">Flashlight 7</a> based on ad culture. In the US I normally prefer using PubCenter as it usually has the highest eCPM, outside of the US I would switch between other providers (AdMob, InnerActive and AdDuplex for promoting of the app). The main reason for changing the ratios of ad providers was that I wanted to experiment how showing more AdDuplex ads impacts downloads of the app &#8211; with this little tool I can do so when eCPM has gone somewhat down (Note: I&#8217;ve actually found AdDuplex have a positive effect on app downloads and use it despite higher eCPMs as well).</p>
<p>The control allows setting up of ad probabilites based on culture, so its possible to configure (and update) such a configuration as this:</p>
<ul>
<li>US: 80% PubCenter, 10% InnerActive, 5% AdMob, 5% AdDuplex ads </li>
<li>Germany: 80% AdMob, 10% PubCenter, 10% AdDuplex </li>
<li>France: 100% AdMob </li>
<li>Other: 25% PubCenter, 25% InnerActive, 25% AdMob, 25% AdDuplex </li>
</ul>
<p>Read the <a href="http://wp7adrotator.codeplex.com/">project description</a> and the <a href="http://wp7adrotator.codeplex.com/documentation">WP7 ad rotator documentation</a> on more details on how to integrate the control into projects.</p>
<p>Hope you find this tool useful!</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/06/ad-rotator-for-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Creating a Beautiful Windows Phone 7 Application</title>
		<link>http://gregdoesit.com/2011/05/creating-a-beautiful-windows-phone-7-application/</link>
		<comments>http://gregdoesit.com/2011/05/creating-a-beautiful-windows-phone-7-application/#comments</comments>
		<pubDate>Thu, 12 May 2011 19:04:34 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Community Involvement]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=780</guid>
		<description><![CDATA[I&#8217;ve presented the talk Creating a Beautiful Windows Phone 7 Application in two locations the past weeks: 18 May, Wednesday, Newcastle at NEBytes 24 May, Tuesday, London, Fulham at Tech.Days 2011 Some useful resources to get started with: Jeff Wilcox&#8217;s Metro Design Guide &#8211; an excellent, hands on design guide from the creator of the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve presented the talk <em>Creating a Beautiful Windows Phone 7 Application</em> in two locations the past weeks:</p>
<ul>
<li>18 May, Wednesday, Newcastle <a href="http://www.nebytes.net/post/NEBytes-May-2011-Windows-Phone-7-and-the-missing-Lync.aspx">at NEBytes</a></li>
<li>24 May, Tuesday, London, Fulham <a href="http://uktechdays.cloudapp.net/techdays-live/windows-phone-1-state-of-the-nation.aspx">at Tech.Days 2011</a></li>
</ul>
<p>Some useful resources to get started with:</p>
<ul>
<li><a href="http://www.jeff.wilcox.name/2011/03/metro-design-guide-v1/">Jeff Wilcox&#8217;s Metro Design Guide</a> &#8211; an excellent, hands on design guide from the creator of the highly rated <a href="http://4thandmayor.com/">4th and Mayor</a> WP7 application</li>
<li><a href="http://www.scottlogic.co.uk/blog/colin/tag/metro//">Metro in Motion Effects</a> by Colin Eberhardt- examples of creating animations that &#8220;feel&#8221; Metro</li>
<li><a href="http://www.istartedsomething.com/20100815/conceptual-usga-golf-scoring-app-microsoft-windows-phone-7-apps-done-right/">Conceptual &#8216;Metro&#8217; Application</a> &#8211; USGA Golf, created by Microsoft</li>
</ul>
<p>Slides of the talk:</p>
<div style="width:425px" id="__ss_8101836"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/GergelyOrosz/creating-a-beautiful-windows-phone-7-application-v2" title="Creating a Beautiful Windows Phone 7 Application">Creating a Beautiful Windows Phone 7 Application</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8101836" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/GergelyOrosz">Gergely Orosz</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/05/creating-a-beautiful-windows-phone-7-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cocktail Flow &#8211; Valentine&#8217;s Day Update</title>
		<link>http://gregdoesit.com/2011/02/cocktail-flow-valentines-day-update/</link>
		<comments>http://gregdoesit.com/2011/02/cocktail-flow-valentines-day-update/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 21:23:42 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[cocktail]]></category>
		<category><![CDATA[Cocktail Flow]]></category>
		<category><![CDATA[valentine's day]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=738</guid>
		<description><![CDATA[Cocktail Flow (on Twitter: @CocktailFlow) development hasn&#8217;t slowed since the Holiday update and I&#8217;m happy to announce that we&#8217;ve released another update for Valentine&#8217;s day. This update comes with a new, Valentine&#8217;s package as well as several small, but useful features added. The most important things we&#8217;ve added this update are the following: Valentine&#8217;s day [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cocktailflow.com">Cocktail Flow</a> (on Twitter: <a href="http://twitter.com/cocktailflow">@CocktailFlow</a>) development hasn&#8217;t slowed since the <a href="http://gregdoesit.com/2010/12/cocktail-flow-holiday-update/">Holiday update</a> and I&#8217;m happy to announce that we&#8217;ve released another update for Valentine&#8217;s day. This update comes with a new, Valentine&#8217;s package as well as several small, but useful features added.</p>
<p>The most important things we&#8217;ve added this update are the following:</p>
<ul>
<li><strong>Valentine&#8217;s day cocktails</strong> &#8211; nearly 30 delicious, themed drinks are added to the application in the Valentine&#8217;s package</li>
<li><strong>Packages can be deactivated</strong> and activated. This means if you&#8217;ve downloaded one of the holiday packages, but aren&#8217;t interested in those cocktails during the summer, simply deactivate the package to hide its contents.</li>
<li><strong>Extended cabinet</strong> &#8211; we&#8217;ve added a few drinks to the cabinet and from now on the cabinet is dynamically growing based on ingredients in packages.</li>
<li><strong>Search by ingredients</strong> &#8211; simply start typing the name of an ingredient in the search field and cocktails containing ingredients with that name are also returned.</li>
<li><strong>Smarter cabinet</strong> &#8211; if you select dark rum, lime juice and coke in the cabinet, you&#8217;ll see that Cuba Libre is suggested as a cocktail that can be mixed, even though the official recipe suggests using white rum, not dark. However, we&#8217;ve introduced substitute ingredients, and in the case of Cuba Libre, both white rum and dark rum can be used to mix this drink.</li>
</ul>
<p>And finally, here are a few screenshots of some of the new cocktails and new features:</p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2011/02/valentinesAndDeactivation.png" title="Valentine&#039;s Day Package - Cocktail Flow" class="alignnone" width="460" height="767" /></p>
<p align="center">Valentine&#8217;s Day package and the ability to deactivate (and activate) packages</p>
<p><span id="more-738"></span></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2011/02/searchByIngredient.png" title="Cocktail Flow - search by ingredient" class="alignnone" width="460" height="767" /></p>
<p align="center">Search now looks at cocktail ingredients, not just names</p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2011/02/valentinesDayOnTheRocks.png" title="Valentine&#039;s Day on the Rocks Cocktail" class="alignnone" width="460" height="636" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2011/02/strawberryMojito.png" title="Strawberry Mojito - Cocktail Flow" class="alignnone" width="460" height="711" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2011/02/sexualChocolate.png" title="Sexual Chocolate cocktail - Cocktail Flow" class="alignnone" width="480" height="745" /></p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/02/cocktail-flow-valentines-day-update/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Stock Data Visualization Using Silverlight</title>
		<link>http://gregdoesit.com/2011/01/stock-data-visualization-using-silverlight/</link>
		<comments>http://gregdoesit.com/2011/01/stock-data-visualization-using-silverlight/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 16:22:23 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[CodeProject]]></category>
		<category><![CDATA[Financial]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=734</guid>
		<description><![CDATA[I&#8217;ve written an article on CodeProject on visualizing live and historic stock data using Silverlight. In the article I&#8217;m presenting a pretty generic way of fetching, parsing and displaying the stock data. The structure of the article is as follows: Define data structures for storing and defining interfaces for fetching live and historical data. Implement [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written an <a href="http://www.codeproject.com/KB/silverlight/visualizingstockdata.aspx">article on CodeProject</a> on visualizing live and historic stock data using Silverlight. In the article I&#8217;m presenting a pretty generic way of fetching, parsing and displaying the stock data.</p>
<p>The structure of the article is as follows:</p>
<ul>
<li>Define data structures for storing and defining interfaces for fetching live and historical data.</li>
<li>Implement fetching stock data using <a href="http://finance.google.com">Google Finance</a></li>
<li>Visualize fetched stock data using <a href="http://visiblox.com">Visiblox Charts for Silverlight</a></li>
</ul>
<p>Read the full article and download the source code on Codeproject: <a href="http://www.codeproject.com/KB/silverlight/visualizingstockdata.aspx"> Visualizing Live and Historic Stock Data Using Silverlight</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2011/01/stock-data-visualization-using-silverlight/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cocktail Flow: Holiday Update</title>
		<link>http://gregdoesit.com/2010/12/cocktail-flow-holiday-update/</link>
		<comments>http://gregdoesit.com/2010/12/cocktail-flow-holiday-update/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 11:19:50 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[cocktail]]></category>
		<category><![CDATA[Cocktail Flow]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=718</guid>
		<description><![CDATA[With the team at Distinction we&#8217;ve continued to work hard on Cocktail Flow and I&#8217;m happy to announce that we&#8217;ve shipped an update for the application with some new features and holiday themed cocktails! So here&#8217;s a summary of what&#8217;s new: We&#8217;ve added support for cocktail packages - these can be downloaded within the application [...]]]></description>
			<content:encoded><![CDATA[<p>With the team at <a href="http://distinction.com">Distinction</a> we&#8217;ve continued to work hard on <a href="http://cocktailflow.com">Cocktail Flow</a> and I&#8217;m happy to announce that we&#8217;ve shipped an update for the application with some new features and holiday themed cocktails!</p>
<p>So here&#8217;s a summary of what&#8217;s new:</p>
<ul>
<li>We&#8217;ve added support for cocktail <strong>packages </strong>- these can be downloaded within the application for more cocktails.</li>
<li>We&#8217;ve released a <strong>Christmas</strong> and <strong>New Years package</strong> with over 50 new, holiday themed <strong>cocktail recipes</strong></li>
<li>Cocktails can be browsed by color as well and we&#8217;ve added brandy and champagne to the base drinks category</li>
<li>New settings: the lock screen can be configured not to turn the application off and the currency can be changed in the shopping assistant</li>
</ul>
<p>Of course the updates don&#8217;t stop with this; new cocktail packages planned to be released continuously. Should you miss some recipes, just send your suggestion on Twitter <a href="http://twitter.com/cocktailflow">@cocktailflow</a>.</p>
<p>Here are some screenshots of some of the new, holiday cocktails, the packages and the new start screen. Enjoy and Happy Holidays!</p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/ski-lift.png" title="Ski Lift cocktail" class="alignnone" width="470" height="664" /><br />
<span id="more-718"></span></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/warm-n-toasty.png" title="Warm &#039;n Toasty cocktail" class="alignnone" width="480" height="653" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/winter-chill.png" title="Winter Chill Cocktail" class="alignnone" width="480" height="669" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/christmas-list.png" title="Cockail Flow - Christmas Cocktails" class="alignnone" width="470" height="783" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/packages.png" title="Cocktail Flow - packages" class="alignnone" width="470" height="404" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/christmas.png" title="Cocktail Flow - Christmas Cocktails" class="alignnone" width="470" height="783" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/new-years.png" title="Cocktail Flow - New Years" class="alignnone" width="470" height="245" /></p>
<p><img alt="" src="http://gregdoesit.com/wp-content/uploads/2010/12/packages-0.png" title="Cocktail Flow - new start page" class="alignnone" width="470" height="783" /></p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2010/12/cocktail-flow-holiday-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Google App Engine as Proxy for Silverlight and Flash Cross-Domain Requests</title>
		<link>http://gregdoesit.com/2010/12/using-google-app-engine-as-proxy-for-cross-domain-requests/</link>
		<comments>http://gregdoesit.com/2010/12/using-google-app-engine-as-proxy-for-cross-domain-requests/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 17:51:25 +0000</pubDate>
		<dc:creator>Gergely Orosz</dc:creator>
				<category><![CDATA[Tips & tricks]]></category>
		<category><![CDATA[code snipplet]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://gregdoesit.com/?p=708</guid>
		<description><![CDATA[When using Silverlight or Flash to fetch data from other domains one often runs into cross-domain access restrictions. For security reasons in order to access data from different domains, the remote server explicitly has to allow this by defining a crossdomain.xml (or, for Silverlight, clientaccesspolicy.xml is good as well). If this file cannot be found [...]]]></description>
			<content:encoded><![CDATA[<p>When using Silverlight or Flash to fetch data from other domains one often runs into cross-domain access restrictions. For security reasons in order to access data from different domains, the remote server explicitly has to allow this by defining a crossdomain.xml (or, for Silverlight, clientaccesspolicy.xml is good as well). If this file cannot be found on the remote domain, the request is not executed.</p>
<p>This can be fustrating when querying against RSS feeds or JSON/XML web APIs that don&#8217;t define any of these files. The workaround for this issue is to use some sort of proxying service. In this article I&#8217;ll be showing how to use Google App Engine to create a simple proxy that will forward these requests for free &#8211; within a reasonable daily load.</p>
<h2>Google App Engine Overview</h2>
<p>The reason I&#8217;ve chose to implement the proxy using Google App Engine is because it has a <a href="http://code.google.com/appengine/docs/quotas.html">free daily quota</a> and getting started using it is really simple: all you need is a Google account and to download and install the Google App Engine SDK.</p>
<p>Google App Engine supports developing in both Java and Python. In my example I&#8217;ll be using Python. In order to use and deploy the code yourself as well, follow these steps:<br />
<span id="more-708"></span></p>
<ul>
<li>If you don&#8217;t yet have a Google account, <a href="https://www.google.com/accounts/NewAccount">register for one</a>.</li>
<li>Download and install Python <a href="http://www.python.org/download/">from python.org</a></li>
<li>Download and install the <a href="http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Python">Google App Engine Python SDK</a></li>
<li>Register an application on <a href="https://appengine.google.com/">Google App Engine</a> (click on <em>Create Application</em>). When done, run the Google App Engine Launcher and create an application with the same name you&#8217;ve just created.
</ul>
<h2>Creating the Proxy In Python</h2>
<p>Creating a simple proxy is pretty straightforward by using the <a href="http://code.google.com/appengine/docs/python/urlfetch/">urlfetch</a> library:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">try</span>:
	response = urlfetch.<span style="color: black;">fetch</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: black;">&#40;</span>urlfetch.<span style="color: black;">Error</span>, apiproxy_errors.<span style="color: black;">Error</span><span style="color: black;">&#41;</span>:
	<span style="color: #808080; font-style: italic;"># an error occured</span></pre></div></div>

<p>In order to make the proxy a bit smarter, I&#8217;ll implement some caching using the App Engine&#8217;s <a href="http://code.google.com/appengine/docs/python/memcache/usingmemcache.html">memcache</a>:</p>
<pre language="python">
proxiedContent = memcache.get(memcacheKey)
proxiedContentInMemcache = True
if proxiedContent is None:
   # not in memcache: execute request
   # ...
   # add the result content to memcache for CACHE_TIME minutes
   memcache.add(memcacheKey,proxiedContent,CACHE_TIME)
else:
   # use the content from memcache
</pre>
<p>Using these snipplets, here&#8217;s how the main file of the proxy webapp will look like:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">datetime</span>
<span style="color: #ff7700;font-weight:bold;">import</span> hashlib
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">pickle</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> wsgiref.<span style="color: black;">handlers</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">api</span> <span style="color: #ff7700;font-weight:bold;">import</span> memcache
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">api</span> <span style="color: #ff7700;font-weight:bold;">import</span> urlfetch
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">ext</span> <span style="color: #ff7700;font-weight:bold;">import</span> db
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">ext</span> <span style="color: #ff7700;font-weight:bold;">import</span> webapp
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">ext</span>.<span style="color: black;">webapp</span> <span style="color: #ff7700;font-weight:bold;">import</span> template
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">runtime</span> <span style="color: #ff7700;font-weight:bold;">import</span> apiproxy_errors
&nbsp;
CACHE_TIME = <span style="color: #ff4500;">1</span> <span style="color: #808080; font-style: italic;"># number of minutes to cache content for</span>
&nbsp;
URL_PREFIXES = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;http://www.google.com/finance&quot;</span><span style="color: black;">&#93;</span> <span style="color: #808080; font-style: italic;"># only allow URLs to be queried from certain domain(s)</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> getMemcacheKey<span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>:
  url_hash = hashlib.<span style="color: black;">sha256</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  url_hash.<span style="color: black;">update</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;hash_&quot;</span> + url_hash.<span style="color: black;">hexdigest</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> ProxyHandler<span style="color: black;">&#40;</span>webapp.<span style="color: black;">RequestHandler</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">def</span> get<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    url = <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'url'</span><span style="color: black;">&#41;</span>
    url = <span style="color: #dc143c;">urllib</span>.<span style="color: black;">unquote</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
    <span style="color: #808080; font-style: italic;"># only allow urls that start with prefixes defined in URL_PREFIXES to be used</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">self</span>.<span style="color: black;">isUrlAllowed</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>:
      <span style="color: #008000;">self</span>.<span style="color: black;">response</span>.<span style="color: black;">out</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;The URL passed can not be proxied due to security reasons.&quot;</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">return</span>
    memcacheKey = getMemcacheKey<span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span> 
&nbsp;
    <span style="color: #808080; font-style: italic;"># Use memcache to store the request for CACHE_TIME</span>
    proxiedContent = memcache.<span style="color: black;">get</span><span style="color: black;">&#40;</span>memcacheKey<span style="color: black;">&#41;</span>
    proxiedContentInMemcache = <span style="color: #008000;">True</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> proxiedContent <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
      proxiedContentInMemcache = <span style="color: #008000;">False</span>
      <span style="color: #ff7700;font-weight:bold;">try</span>:
        response = urlfetch.<span style="color: black;">fetch</span><span style="color: black;">&#40;</span>url<span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: black;">&#40;</span>urlfetch.<span style="color: black;">Error</span>, apiproxy_errors.<span style="color: black;">Error</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">error</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">404</span><span style="color: black;">&#41;</span>
      proxiedContent = response.<span style="color: black;">content</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> proxiedContent <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">error</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">404</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;"># Add the fetched content to memcache</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">not</span> proxiedContentInMemcache<span style="color: black;">&#41;</span>:
      memcache.<span style="color: black;">add</span><span style="color: black;">&#40;</span>memcacheKey,proxiedContent,CACHE_TIME<span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">response</span>.<span style="color: black;">out</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span>proxiedContent<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> isUrlAllowed<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, url<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">for</span> urlPrefix <span style="color: #ff7700;font-weight:bold;">in</span> URL_PREFIXES:
    <span style="color: #ff7700;font-weight:bold;">if</span> url.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span>urlPrefix<span style="color: black;">&#41;</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
&nbsp;
app = webapp.<span style="color: black;">WSGIApplication</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>
  <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;/proxy&quot;</span>, ProxyHandler<span style="color: black;">&#41;</span>,
<span style="color: black;">&#93;</span>, debug=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
  wsgiref.<span style="color: black;">handlers</span>.<span style="color: black;">CGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">run</span><span style="color: black;">&#40;</span>app<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
  main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>The proxy can now be called by passing the URL to be proxied via the url parameter. So to proxy e.g. http://google.com, the following request should be made: http://myapplication.appspot.com/proxy?url=http://google.com.</p>
<h2>Adding crossdomain.xml to the Application</h2>
<p>Now that the proxy class is ready, all we need to do is wire it into the web application and include a crossdomain.xml static file which will allow requests from all hosts (it is advisable to change this to the URL the requests are actually made). Based on this, here is how the crossdomain.xml would look like:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;*&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span> 
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>And here is how the modified app.yaml descriptior will look like:</p>
<pre lang="">
application: yourappname
version: proxyv1
runtime: python
api_version: 1

handlers:
- url: /crossdomain.xml
  static_files: crossdomain.xml
  upload: crossdomain.xml
- url: /.*
  script: proxy.py
  secure: optional
</pre>
<h2>Download the Code</h2>
<p>The code for the application can be downloaded here: <a href="http://gregdoesit.com/files/GoogleAppEngineProxy_v2.zip">Proxy Using Google App Engine.zip</a>. After unzipping be sure to change the &#8220;yourappname&#8221; name in app.yaml in order to be able to deploy it on Google App Engine.</p>
<h3>Update: Security Issues</h3>
<p>Andrew noted in the comment that the original solution raised security concerns as it would have been easy for someone to hijack this proxy and use it for their purpose as no authentication or authorization is done. I&#8217;ve added a small fix where the proxy only forwards to URLs that start from a list of prefixes. This is probably a sufficient solution for common cases, however more sophisticated authorization methods may be needed in other cases.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregdoesit.com/2010/12/using-google-app-engine-as-proxy-for-cross-domain-requests/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

