<?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>Omer Khan&#039;s Blog</title>
	<atom:link href="http://www.omerkhan.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.omerkhan.com</link>
	<description>causing chaos with technology</description>
	<lastBuildDate>Sun, 12 Feb 2012 05:13:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Amazon &#8211; Free 2-Day Shipping Or Would You Like To Pay for It?</title>
		<link>http://www.omerkhan.com/2012/02/amazon-free-2-day-shipping-or-would-you-like-to-pay-for-it/</link>
		<comments>http://www.omerkhan.com/2012/02/amazon-free-2-day-shipping-or-would-you-like-to-pay-for-it/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 04:10:07 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=389</guid>
		<description><![CDATA[I&#8217;m a big fan of Amazon.com. I do more than 90% of my shopping online. And I do more than 90% of my online shopping at Amazon.com. I pay $79/year for Prime membership and one of the benefits that I &#8230; <a href="http://www.omerkhan.com/2012/02/amazon-free-2-day-shipping-or-would-you-like-to-pay-for-it/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of Amazon.com. I do more than 90% of my shopping online. And I do more than 90% of my online shopping at Amazon.com. I pay $79/year for Prime membership and one of the benefits that I enjoy is free 2 day shipping on many items. I know the folks at Amazon obsess about the customer and how to continuously improve the customer experience. I don&#8217;t think there&#8217;s any company that provides a better online customer experience. But even Amazon isn&#8217;t perfect and it&#8217;s moments like this that I&#8217;m reminded of that:</p>
<p><img class="aligncenter size-full wp-image-392" title="Amazon" src="http://www.omerkhan.com/wp-content/uploads/2012/02/Amazon1.png" alt="Amazon" width="737" height="175" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2012/02/amazon-free-2-day-shipping-or-would-you-like-to-pay-for-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python: Functions with Optional &amp; Named Arguments</title>
		<link>http://www.omerkhan.com/2011/11/python-functions-with-optional-named-arguments/</link>
		<comments>http://www.omerkhan.com/2011/11/python-functions-with-optional-named-arguments/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 19:00:24 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=352</guid>
		<description><![CDATA[Python allows functions to have default values for arguments. These are used when the function is called without the argument. But where it gets really interesting is when you realize that in Python it&#8217;s also possible to name the arguments &#8230; <a href="http://www.omerkhan.com/2011/11/python-functions-with-optional-named-arguments/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Python allows functions to have default values for arguments. These are used when the function is called without the argument. But where it gets really interesting is when you realize that in Python it&#8217;s also possible to name the arguments and call them in any order, which can be very useful.  </p>
<p><div class="codecolorer-container python railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> shirt<span style="color: black;">&#40;</span>styleID<span style="color: #66cc66;">,</span> size<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'Medium'</span><span style="color: #66cc66;">,</span> color<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'White'</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; ...</div></div>
</p>
<p>For example, in the &#8216;shirt&#8217; function above, style is a required argument (since it has no default value) but the other two arguments i.e. size and color are optional (since they do have default values assigned). </p>
<p>There are several ways to call this function:</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt;&gt;&gt; shirt(1)</div></div>
<p>styleID gets a value of 1 and size and color are assigned their default values.</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt;&gt;&gt; shirt(1, &quot;Large&quot;)</div></div>
<p>styleID gets a value of 1 and size gets a value of &#8220;Large&#8221;, while color gets the default value.</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt;&gt;&gt; shirt(1, color=&quot;Black&quot;)</div></div>
<p>styleID gets a value of 1 and color gets a value of &#8220;Black&#8221;, while size gets the default value.</p>
<div class="codecolorer-container text railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&gt;&gt;&gt; shirt(size=&quot;Small&quot;, styleID=2)</div></div>
<p>size gets a value of &#8220;Small&#8221; and styleID gets a value of 2, while color gets the default value.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/11/python-functions-with-optional-named-arguments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 Things to Know About Amazon (Infographic)</title>
		<link>http://www.omerkhan.com/2011/11/9-things-to-know-about-amazon-infographic/</link>
		<comments>http://www.omerkhan.com/2011/11/9-things-to-know-about-amazon-infographic/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 18:48:26 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=350</guid>
		<description><![CDATA[This is a great infographic about Amazon produced by FrugalDad: Source: Frugaldad.com]]></description>
			<content:encoded><![CDATA[<p>This is a great infographic about Amazon produced by FrugalDad:</p>
<p><a href="http://frugaldad.com/amazon-infographic/"><img src="http://frugaldad.com/wp-content/uploads/2011/11/FathomingAmazon.png" alt="Amazon Infographic" width="500"  border="0" /></a></p>
<p>Source: <a href="http://frugaldad.com">Frugaldad.com</a></p>
<p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/11/9-things-to-know-about-amazon-infographic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Reverse A String in Python</title>
		<link>http://www.omerkhan.com/2011/11/how-to-reverse-a-string-in-python/</link>
		<comments>http://www.omerkhan.com/2011/11/how-to-reverse-a-string-in-python/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 01:56:19 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=324</guid>
		<description><![CDATA[Unlike other languages such as Ruby, there is no built-in method to reverse a string in Python. Here are two possible ways to accomplish that:&#160; 1) The &#39;Long&#39; Way This approach uses a for-loop with the join method to reverse &#8230; <a href="http://www.omerkhan.com/2011/11/how-to-reverse-a-string-in-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Unlike other languages such as Ruby, there is no built-in method to reverse a string in Python. Here are two possible ways to accomplish that:&nbsp;</p>
<h3><span style="font-family: verdana,geneva,sans-serif;">1) The &#39;Long&#39; Way<br />
	</span></h3>
<p>This approach uses a for-loop with the join method to reverse a string:</p>
<div class="codecolorer-container python railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> rev<span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>s<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>-<span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span>-<span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">print</span> rev<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;abcde&quot;</span><span style="color: black;">&#41;</span><br />
edcba</div></div>
<h3><span style="font-family: verdana,geneva,sans-serif;">2) The Simpler Way<br />
	</span></h3>
<p><span style="font-family: verdana,geneva,sans-serif;">This approach uses Python&#39;s &#39;<a href="http://docs.python.org/tutorial/introduction.html#strings"><em>slice notation</em></a>&#39; to accomplish the same result: </span></p>
<div class="codecolorer-container python railscasts" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> rev<span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> s<span style="color: black;">&#91;</span>::-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">print</span> rev<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;abcde&quot;</span><span style="color: black;">&#41;</span><br />
edcba</div></div>
<p>
	I think I read somewhere that #1 (for-loop) is faster, but I do love the simplicity of slicing. It looks a little strange at first, if you&#39;re not used to Python. But it really is pretty easy to use once you get the hang of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/11/how-to-reverse-a-string-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn Python the Hard Way</title>
		<link>http://www.omerkhan.com/2011/11/learn-python-the-hard-way/</link>
		<comments>http://www.omerkhan.com/2011/11/learn-python-the-hard-way/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 10:00:32 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=341</guid>
		<description><![CDATA[Over the last two years, I&#39;ve spent considerable time learning several programming languages (PHP, C# and Ruby).&#160; I started developing web applications with PHP, moved onto ASP.NET MVC using C# and then decided to experiment with Ruby on Rails. &#160;I &#8230; <a href="http://www.omerkhan.com/2011/11/learn-python-the-hard-way/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the last two years, I&#39;ve spent considerable time learning several programming languages (PHP, C# and Ruby).&nbsp; I started developing web applications with PHP, moved onto ASP.NET MVC using C# and then decided to experiment with Ruby on Rails. &nbsp;I really loved the simplicity of Ruby and the &#39;magic&#39; of Rails, but there was something about the Ruby language that just didn&#39;t grok with me &#8212; I still can&#39;t exactly put my finger on it.</p>
<p>A couple of months ago, I read Dharmesh Shah&#39;s post &#39;<a href="http://onstartups.com/tabid/3339/bid/20493/Why-PHP-Is-Fun-and-Easy-But-Python-Is-Marriage-Material.aspx">Why PHP is Fun and Easy But Python is Marriage Material</a>&#39;.&nbsp; He made a compelling case for using Python and so a few weeks later I decided to take a closer look at Python myself. As sad as it sounds, I&#39;ve finally found a programming language that I&#39;m really excited about. It&#39;s simple and easy to get started with Python but it&#39;s also an extremely powerful language. And after I got over some of the initial &#39;weirdness&#39; of Python e.g. using tabs for code-blocks, it really started to grow on me.</p>
<p style="text-align: center;"><a href="http://learnpythonthehardway.org/"><img alt="Learn Python The Hard Way" height="380" src="http://www.omerkhan.com/wp-content/uploads/lpthwbook.jpg" width="245" /></a></p>
<p>If you&#39;re interested, a great place to start learning Python is Zed Shaw&#39;s &quot;<a href="http://learnpythonthehardway.org/">Learn Python the Hard Way</a>&quot;.&nbsp; The online version of the book is available for free and there&#39;s also an&nbsp; <a href="http://www.udemy.com/learn-python-the-hard-way/">online class</a> with screencasts at <a href="http://www.udemy.com">Udemy.com</a>. The course is really designed for people with little or no programming experience. I consider myself to be a novice, but after a few years of programming in other languages, I realized that I actually know more than I thought I did. It was actually a very easy course for me, which I got through relatively quickly. But it was a great way to learn the fundamentals of Python. It might be too basic for a lot of people, but I still think it&#39;s worth taking a quick look at.</p>
<p>At the moment, I&#39;m going through Mark Pilgrim&#39;s &quot;<a href="http://www.diveintopython.net/index.html">Dive Into Python</a>&quot; book &#8212; which so far has been EXCELLENT. This is a book for experienced programmers and you will find a ton of useful information here. This book is available for free (published under the GNU Free Documentation License) and can be downloaded in a number of formats and languages. Along with this, I&#39;m also reading Ayman Hourieh&#39;s &#39;<a href="http://www.amazon.com/Django-Website-Development-Ayman-Hourieh/dp/1847196780/ref=sr_1_3?ie=UTF8&amp;qid=1321411872&amp;sr=8-3">Django 1.0 Website Development</a>&#39; book (Django is an excellent web framework for Python). I guess you could call it &quot;Python on Django&quot; but that doesn&#39;t quite roll off the tongue as &quot;Ruby on Rails&quot; does.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/11/learn-python-the-hard-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Django</title>
		<link>http://www.omerkhan.com/2011/10/introduction-to-django/</link>
		<comments>http://www.omerkhan.com/2011/10/introduction-to-django/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 05:43:05 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=315</guid>
		<description><![CDATA[Here&#39;s a great introduction to Django from PyCon 2010.]]></description>
			<content:encoded><![CDATA[<p>Here&#39;s a great introduction to Django from PyCon 2010.</p>
<p><iframe src="http://blip.tv/play/g4Vigc6dHAI.html" width="550" height="442" frameborder="0" allowfullscreen></iframe><embed type="application/x-shockwave-flash" src="http://a.blip.tv/api.swf#g4Vigc6dHAI" style="display:none"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/10/introduction-to-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learn Rails the Zombie Way</title>
		<link>http://www.omerkhan.com/2011/09/learn-rails-the-zombie-way/</link>
		<comments>http://www.omerkhan.com/2011/09/learn-rails-the-zombie-way/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 20:00:19 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=287</guid>
		<description><![CDATA[A fun way to learn the basics of Ruby on Rails: For more information check out&#160;http://railsforzombies.org/]]></description>
			<content:encoded><![CDATA[<p>A fun way to learn the basics of Ruby on Rails:</p>
<p><!--[if IE]><object width="545" height="451" id="viddlerOuter-82ae973b" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="movie" value="http://www.viddler.com/player/82ae973b/0/"><param name="allowScriptAccess" value="always"><param name="allowNetworking" value="all"><param name="allowFullScreen" value="true"><param name="flashVars" value="f=1&#038;autoplay=f&#038;disablebranding=f"><object id="viddlerInner-82ae973b"><video id="viddlerVideo-82ae973b" src="http://www.viddler.com/file/82ae973b/html5mobile/" type="video/mp4" width="545" height="409" poster="http://www.viddler.com/thumbnail/82ae973b/" controls="controls" x-webkit-airplay="allow"></video></object></object><![endif]--><!--[if !IE]> <!-->
<p><object data="http://www.viddler.com/player/82ae973b/0/" height="451" id="viddlerOuter-82ae973b" type="application/x-shockwave-flash" width="545"><param name="movie" value="http://www.viddler.com/player/82ae973b/0/" /></object> <!--<![endif]--></p>
<p>For more information check out&nbsp;<a href="http://railsforzombies.org">http://railsforzombies.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/09/learn-rails-the-zombie-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teach Your Child To Ride a Bike in 5 Simple Steps</title>
		<link>http://www.omerkhan.com/2011/07/teach-your-child-to-ride-a-bike-in-5-simple-steps/</link>
		<comments>http://www.omerkhan.com/2011/07/teach-your-child-to-ride-a-bike-in-5-simple-steps/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 06:41:52 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=279</guid>
		<description><![CDATA[Recently, I&#39;ve been thinking about teaching my 5 year old son to ride a bike without training wheels. We tried to do this a couple of weeks ago and I experienced probably what every parent teaching their child goes through. &#8230; <a href="http://www.omerkhan.com/2011/07/teach-your-child-to-ride-a-bike-in-5-simple-steps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently, I&#39;ve been thinking about teaching my 5 year old son to ride a bike without training wheels. We tried to do this a couple of weeks ago and I experienced probably what every parent teaching their child goes through. I spent most of the time holding the bike and running behind him. And by the end of the day, he wanted to put his training wheels back on and I had a sore back.</p>
<p>Yesterday, I watched <a href="http://www.youtube.com/watch?v=u4Y_9cZLoyQ&amp;feature=youtube_gdata_player">this video</a> about an organization called <a href="http://www.bikenewyork.org">Bike New York</a>, a non profit whose mission is &quot;<span class="bodytext">to promote and encourage bicycling and bicycle safety through education, public events, and collaboration with community and government organizations&quot;.</span> They run &quot;Teach Your Child to Ride&quot; clinics at parks around New York city and apparently have a very high level of success. After learning about their unconventional training technique, I felt inspired to teach my son to ride again, but this time with a very different approach.</p>
<p>The result &#8212; in 24 hours with about 60 minutes of practice, he was riding a bike all by himself. I shot some footage with my iPhone 4 and edited with iMovie 11. Here&#39;s the result:</p>
<p><iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/pRk1xZbahf0" width="560"></iframe></p>
<p><span class="bodytext"><br />
	</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/07/teach-your-child-to-ride-a-bike-in-5-simple-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Photograpy &#8211; Who Needs a Digital SLR?</title>
		<link>http://www.omerkhan.com/2011/06/iphone-photograpy/</link>
		<comments>http://www.omerkhan.com/2011/06/iphone-photograpy/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 00:25:26 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=257</guid>
		<description><![CDATA[It&#8217;s amazing what you can do with an iPhone and a $1.99 app. I&#8217;ve been using the Camera+ app on my iPhone 4 for a couple of months. It has a one touch clarity feature that transforms your photos and &#8230; <a href="http://www.omerkhan.com/2011/06/iphone-photograpy/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s amazing what you can do with an iPhone and a $1.99 app. I&#8217;ve been using the <a href="http://campl.us/">Camera+</a> app on my iPhone 4 for a couple of months. It has a one touch clarity feature that transforms your photos and also provides the capability to add beautiful effects. I&#8217;ve been on a couple of recent trips where I also took my digital SLR with me but never used it once. I managed to get all the shots that I needed with my iPhone.</p>
<p>Here are some shots I took in Lake Wenatchee and Issaquah&#8230;</p>
<div id="flickr_scenery_748" class="slickr-flickr-galleria landscape medium classic" style="visibility:hidden;"><p class="nav medium"><a href="#" class="prevSlide">&laquo; previous</a> | <a href="#" class="startSlide">start</a> | <a href="#" class="stopSlide">stop</a> | <a href="#" class="nextSlide">next &raquo;</a></p><ul><li class="active"><a href="http://farm7.staticflickr.com/6031/5886359738_8104af5164.jpg"><img src="http://farm7.staticflickr.com/6031/5886359738_8104af5164_s.jpg" alt="" title="Issaquah, WA" /></a></li><li><a href="http://farm7.staticflickr.com/6054/5885792901_dfe745e30a.jpg"><img src="http://farm7.staticflickr.com/6054/5885792901_dfe745e30a_s.jpg" alt="" title="Issaquah, WA" /></a></li><li><a href="http://farm7.staticflickr.com/6036/5885792593_6441ce27b3.jpg"><img src="http://farm7.staticflickr.com/6036/5885792593_6441ce27b3_s.jpg" alt="" title="Lake Wenatchee, WA" /></a></li><li><a href="http://farm7.staticflickr.com/6011/5886358966_fa09dc467b.jpg"><img src="http://farm7.staticflickr.com/6011/5886358966_fa09dc467b_s.jpg" alt="" title="Wenatchee River, WA" /></a></li></ul><div style="clear:both"></div><p class="nav medium"><a href="#" class="prevSlide">&laquo; previous</a> | <a href="#" class="startSlide">start</a> | <a href="#" class="stopSlide">stop</a> | <a href="#" class="nextSlide">next &raquo;</a></p></div><script type="text/javascript">jQuery("#flickr_scenery_748").data("options",{"delay":5000,"autoPlay":true,"captions":true,"descriptions":false});</script>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/06/iphone-photograpy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Do Microsoft Program Managers Do?</title>
		<link>http://www.omerkhan.com/2011/06/what-do-microsoft-program-managers-do/</link>
		<comments>http://www.omerkhan.com/2011/06/what-do-microsoft-program-managers-do/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 06:14:56 +0000</pubDate>
		<dc:creator>omerkhan</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Program Management]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.omerkhan.com/?p=183</guid>
		<description><![CDATA[For most of my 10+ year&#8217;s career at Microsoft, I&#8217;ve been in program management roles &#8212; from being a program manager responsible for a specific product feature to becoming a group program manager leading a team of program managers. It&#8217;s &#8230; <a href="http://www.omerkhan.com/2011/06/what-do-microsoft-program-managers-do/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For most of my 10+ year&#8217;s career at Microsoft, I&#8217;ve been in program management roles &#8212; from being a program manager responsible for a specific product feature to becoming a group program manager leading a team of program managers. It&#8217;s a role that I really enjoy doing and over the years I have learned a lot about the program management discipline from a lot of smart people at Microsoft. This post focuses on the &#8216;what&#8217; i.e. what do program managers do.</p>
<p>The first thing to note about the program manager role is that it&#8217;s an unfortunate job title. As Steven Sinofsky wrote in his blog post <a href="http://blogs.msdn.com/b/techtalk/archive/2005/12/16/504872.aspx">PM at Microsoft</a> back in 2005 &#8220;program managers do not program, nor do they manage&#8221;. Well that isn&#8217;t completely true – there are some PMs that write code (although that&#8217;s not usually part of a PM&#8217;s job) and there are PMs that manage other PMs (but not development and test teams). Also PMs play an important role in not only defining the software product, but also doing the project management.</p>
<p>I like to describe the PM role at Microsoft using the &#8217;3 Ds&#8217; – discover, design and deliver:</p>
<p><img src="http://www.omerkhan.com/wp-content/uploads/2011/06/DiscoverDesignDeliver.png" alt="" width="574" height="212" border="0" hspace="25" /></p>
<p>&nbsp;</p>
<h2>1) Discover (Framing the Landscape)</h2>
<p>In order to understand and frame the landscape, the PM needs to gather as much data as possible about the market, customers, competitors, technology trends etc. There are lots of ways to accomplish this – market research reports, customer feedback, user surveys, usability studies, competitor product reviews, industry reports etc. The goal at this stage is to just gather data and start making some sense of the landscape.</p>
<p>The next step is to analyze this data and identify opportunities, gaps, trends in the market. One useful tool for distilling this data into key information is a <a href="http://en.wikipedia.org/wiki/SWOT_analysis">SWOT analysis</a> (strengths, weaknesses, opportunities &amp; threats). In simplest terms you identify the strengths and weaknesses of your business/product (internal) and then identify the opportunities and threats in the market (external). Whatever tool you use, the goal at this stage is to develop a deeper understanding of the landscape.</p>
<p>Once the PM understands the landscape, it&#8217;s time to clearly define the opportunity. Usually this doesn&#8217;t just emerge once you&#8217;ve understood the landscape &#8211; it takes a little more work. One useful way to develop those ideas is to start discussing your findings with other members of the team i.e. other PMs, developers, testers, product planners, marketing, partners etc. This will eventually get you to a point where you feel good about a particular opportunity and are ready to tell a story.</p>
<p>Telling the story is really about answering the what, who &amp; why questions i.e. what problem are you going to solve, who are you going to solve it for, why does this problem need to be solved etc. By now the PM can clearly describe the landscape and use data to backup key points. You&#8217;ll know when you&#8217;re onto something when people clearly understand what you&#8217;re proposing and why. And when your story not only resonates with them but starts to get people excited.</p>
<h2>2) Design (Defining What to Build)</h2>
<p>Once the landscape has been framed, the PM must help define what to build.  A good place to start is by clarifying the value proposition i.e. what problems will you solve for your customers.  The PM will then work with the team to establish <a href="http://en.wikipedia.org/wiki/SMART_criteria">SMART goals</a> including the non-goals i.e. what you will not try to do (in order to manage the project scope).  And then work with key stakeholders to define and prioritize the requirements &#8212; which will eventually get translated into <a href="http://en.wikipedia.org/wiki/User_scenarios">scenarios</a>.</p>
<p>There&#8217;s no silver-bullet for figuring out what to build &#8212; as they say, the best way to have great ideas is to have lots of ideas (good or bad).  The PM must help foster the right environment for idea generation e.g. establishing brainstorming &#8216;ground rules&#8217;, involving the right people etc.  Then these ideas need to be validated using relevant data, evaluating the trade-offs and by continuously asking &#8216;will this solve our customers&#8217; problem?&#8217;.  And then the PM must help the team get closure by selecting a concept or idea.</p>
<p>Getting to the right design takes multiple iterations and feedback loops. The PM needs to clearly communicate the early ideas (whiteboards, sketches, emails etc.) and gather lots of feedback on the proposed design. Both functionality and user experience (UX) need to be considered at this stage, so it&#8217;s critical to involve UX designers early in the process. After several iterations, the PM should have enough information to start producing the detailed specifications (spec).</p>
<p>The spec is typically a document that provides very detailed information on how the final product should look and function. But in an agile world, it&#8217;s sometimes more effective to write a shorter spec and communicate the details of the design with a prototype. In some cases, this could be a set of <a href="http://en.wikipedia.org/wiki/Comprehensive_layout">design comps</a> and in other cases it could be a working mockup of the final product. There are lots of great prototyping tools available &#8212; a couple of my favorites are <a href="http://balsamiq.com/">Balsamiq</a> and <a href="http://www.endloop.ca/imockups/">iMockups for iPad</a>.</p>
<h2>3) Deliver (Shipping the Right Product On Time)</h2>
<p>In this phase, the PM&#8217;s job is to ensure that the product team ships the right product on time. This means working with the rest of the product team (development and test) to understand work item estimates, develop a schedule and make the right trade-offs e.g. cutting features if necessary. The PM must take on a leadership role in developing a solid plan with the rest of the product team and effectively anticipating and identifying potential issues.</p>
<p>The PM also spends a lot of time refining the plan during this phase e.g. clarifying requirements, working with developers to resolve feature design challenges etc. And with so much focus at this stage on <em>how</em> to build the product, it can be easy to sometimes forget <em>why</em> you&#8217;re building it. So ensuring that everyone keeps the big picture in mind is critical. The PM needs to continuously remind the rest of the team about the value proposition and ensure that the final product will actually solve the customer&#8217;s problems.</p>
<p>As early versions of the product become available, the PM can start to get real user feedback e.g. is the product intuitive to use, does it address the real world scenarios, do customers actually like what they see etc. This provides the product team with incredibly value information about the product they&#8217;re building and it&#8217;s an opportunity to refine the design and make additional improvements to ensure that the team ships the right product. It can also help to identify major customer issues that may require the team to go back to the drawing board.</p>
<p>And finally, the PM needs to provide effective communication across the board. There are always a lot of moving parts on any software development project and the PM is the key person to ensure that everyone on the team knows what&#8217;s going on i.e. status of the project, issues, risks, dependencies, early customer feedback etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.omerkhan.com/2011/06/what-do-microsoft-program-managers-do/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

