<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkQDSH87eSp7ImA9WhVTE08.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970</id><updated>2012-02-27T13:26:19.101+08:00</updated><category term="linux" /><category term="node.js" /><category term="facebook" /><category term="Continuous Integration" /><category term="mysql" /><category term="php" /><category term="books" /><category term="POG" /><category term="sheevaplug" /><category term="lisp" /><category term="fedora" /><category term="Management" /><category term="analytics" /><category term="Oracle" /><category term="Fun" /><category term="Java" /><category term="Programming" /><category term="life" /><category term="firefox" /><category term="Opinion" /><category term="android" /><category term="appengine" /><category term="LOTW" /><category term="debian" /><category term="Tools" /><category term="eclipse" /><category term="VIM" /><category term="ubuntu" /><category term="yii" /><category term="News" /><category term="google" /><category term="ZFS" /><category term="estimation" /><title>Stephen on Software</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.stephenonsoftware.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/StephenOnSoftware" /><feedburner:info uri="stephenonsoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ak8DSXk6fyp7ImA9WhRWF0o.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-247748741100019139</id><published>2012-01-05T23:53:00.002+08:00</published><updated>2012-01-05T23:54:38.717+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T23:54:38.717+08:00</app:edited><title>Hadoop World videos</title><content type="html">Hadoop World videos can be found here&amp;nbsp;
&lt;a href="http://www.cloudera.com/resources/Hadoop+World/"&gt;http://www.cloudera.com/resources/Hadoop+World/&lt;/a&gt;. Seems like I will be spending some time watching these for the next few weeks.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;a href="http://hadoop.apache.org/" target="_blank"&gt;Hadoop project&lt;/a&gt;&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-247748741100019139?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/n2w3l1h50mc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/247748741100019139/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2012/01/hadoop-world-videos.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/247748741100019139?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/247748741100019139?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/n2w3l1h50mc/hadoop-world-videos.html" title="Hadoop World videos" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2012/01/hadoop-world-videos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQMQno9eCp7ImA9WhRWEUs.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-8842582235507876894</id><published>2011-12-29T22:03:00.000+08:00</published><updated>2011-12-29T22:03:03.460+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-29T22:03:03.460+08:00</app:edited><title>Bing 2.0 API is useless</title><content type="html">Bing's 2.0 Search API is basically useless. The results dosen't match up with the Bing.com website and so testing is almost impossible.&lt;br /&gt;
&lt;br /&gt;
And worse the results returned by the API are mostly irrelevant. 

I think Microsoft needs to seriously look at what are they targeting the Bing API for. Because as a developer i won't want to use it.&lt;br /&gt;
&lt;br /&gt;
But there is a lack of freely&amp;nbsp;available&amp;nbsp;search apis out there.&lt;br /&gt;
Google Custom search requires you to search only specific websites that you specify and not google itself.&lt;br /&gt;
Yahoo BOSS requires payment so its out for me.&lt;br /&gt;
&lt;br /&gt;
Anyone knows of what other options are out there?&lt;br /&gt;
&lt;br /&gt;
Links to the issue:&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/5498900/bing-api-search-results-show-different-description" target="_blank"&gt;Stack Overflow&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.bing.com/community/developer/f/12254/p/667751/9650589.aspx" target="_blank"&gt;Bing Community&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-8842582235507876894?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/MBMCtAnZRNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/8842582235507876894/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/12/bing-20-api-is-useless.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8842582235507876894?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8842582235507876894?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/MBMCtAnZRNU/bing-20-api-is-useless.html" title="Bing 2.0 API is useless" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/12/bing-20-api-is-useless.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QHQHg-eCp7ImA9WhRQGE4.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-246266670074985947</id><published>2011-12-14T12:02:00.000+08:00</published><updated>2011-12-14T12:02:11.650+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T12:02:11.650+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="debian" /><category scheme="http://www.blogger.com/atom/ns#" term="sheevaplug" /><title>Sheevaplug Debian Install</title><content type="html">&lt;span class="Apple-style-span" style="background-color: white;"&gt;Upgraded from the default Ubuntu install to Debian today, mainly followed the instruction by&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;a href="http://www.cyrius.com/debian/kirkwood/sheevaplug/install.html" target="_blank"&gt;Martin Michlmayr&lt;/a&gt;. Mostly worked but the instructions for after installation of Debian to the MMC card was slightly different for mine.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;These are the ones that worked for me.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre style="background-color: #e0e0e0; text-align: justify;"&gt;setenv bootargs_console console=ttyS0,115200
setenv bootcmd_mmc 'mmcinit; ext2load mmc 0:1 0x00800000 /uImage; ext2load mmc 0:1 0x01100000 /uInitrd'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_mmc; bootm 0x00800000 0x01100000'
saveenv&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
The main difference is the mmcinit command, on my uboot it was "mmcinit" together, for the instructions that Martin gave was "mmc init" with a space.
&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-246266670074985947?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/EpsqqgH69ic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/246266670074985947/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/12/sheevaplug-debian-install.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/246266670074985947?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/246266670074985947?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/EpsqqgH69ic/sheevaplug-debian-install.html" title="Sheevaplug Debian Install" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/12/sheevaplug-debian-install.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MARn86eCp7ImA9WhdSFUU.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-7446698069058914852</id><published>2011-07-25T16:58:00.004+08:00</published><updated>2011-07-25T17:17:27.110+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-25T17:17:27.110+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="POG" /><category scheme="http://www.blogger.com/atom/ns#" term="estimation" /><title>Product Owner's Guide - Breaking down estimates</title><content type="html">&lt;div class="posterous_autopost"&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cbbXTBgNQ84/Ti0zygjoMJI/AAAAAAAAAnY/hYAIeehPcVg/s1600/40918i55qm7uqmm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://2.bp.blogspot.com/-cbbXTBgNQ84/Ti0zygjoMJI/AAAAAAAAAnY/hYAIeehPcVg/s320/40918i55qm7uqmm.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.freedigitalphotos.net/images/view_photog.php?photogid=1499"&gt;Image: Ambro / FreeDigitalPhotos.net&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Overhead this while at work.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;"The Product Owner wants us to break down our inital estimate on the development effort into parts like analysis, design and coding ...". &lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;That sounds to me like the Product Owner(PO) thinks that whatever estimate that the team came up with is too long and wants to cut the estimate. If the team gives such such a breakdown, then be prepared for the negotiation about the time needed for the project to be discussed.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;But how is the team going to come up with such a figure anyway? I always found the statement like "Most of the time is spent in design but little in coding", or using the 80-20 rule that 80% is spent in design and 20% in coding. Is that statement still relavant today? In the past (I&amp;nbsp;mean way way past), people do spent a lot of time in design because computers process ur programs in batches and you better get it right the first time if not you wait a day for the next run.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Fast forward to today, where we have powerful ides, programs run almost instantly, where you can code a little, test a little, you are more likely to try a program a vertical slice and then build up your system from there, with refactoring tools so powerful, changing methods, implementing interfaces no longer is such a chore.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;Now back to the story, not matter what the project team tries to justify their number the PO will just try to cut it. The problem with most people is that they have some prenotion of when the project will end, but they do not realised that an estimate is just that, &lt;strong&gt;an estimate&lt;/strong&gt;, it's a educated guess base on whatever&amp;nbsp;information&amp;nbsp;you have. An estimate is not an accurate prediction of the future and couple with the fact that software estimates are usually wrong. Steve McConnell says it well in his book &lt;a href="http://www.amazon.com/gp/product/0735605351/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;linkCode=as2&amp;amp;camp=178%209&amp;amp;creative=9325&amp;amp;creativeASIN=0735605351"&gt;Software Estimatation&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;b&gt;"Estimation should be treated as an unbiased, analytical process;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;b&gt;planning should be treated as a biased, goal-seeking process"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;So if you ask someone for an estimate, you are asking for his opinion on how long it will take, and you shouldn't try to cut his estimate down.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;More likely is the product owner is trying to get a plan from the team not an estimate, and the team's estimate isn't matching his plan. His plan can be anything, could be trying to meet some timeline for marketing, or some trade show demo.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; Product Owners please just tell the team what is your plan, it may be because of marketing, budget and other reasons that you need to slim it down. But please tell the real reason and not by trying to get the estimate within your plan.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; For the development team, try to find out the underlying reason for doing such an exercise, buy a copy of Steve McConnell Estimation book and give it to him. Negatiate on the scope, not all features need to be a mercedes, sometimes a vespa is good enough.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp; The only thing that can be reliably cut down to meet the target is actually the &lt;strong&gt;scope&lt;/strong&gt; of the project. Does&amp;nbsp;the Product Owner&amp;nbsp;need 100% of all the features of the software to be done to be really useful? More likely than not something like 50-70% will probably&amp;nbsp;be good enough.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Main takeaway - Estimation and Planning are 2 different things, try to make sure what is it you are talking about.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=stephensblo0a-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1934356581&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&amp;nbsp; &amp;nbsp;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=stephensblo0a-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0735605351&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-7446698069058914852?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/miGhBnK9XF4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/7446698069058914852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/07/product-owner-gudie-breaking-down.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/7446698069058914852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/7446698069058914852?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/miGhBnK9XF4/product-owner-gudie-breaking-down.html" title="Product Owner&amp;#39;s Guide - Breaking down estimates" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-cbbXTBgNQ84/Ti0zygjoMJI/AAAAAAAAAnY/hYAIeehPcVg/s72-c/40918i55qm7uqmm.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/07/product-owner-gudie-breaking-down.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQFSH05cCp7ImA9WhZQGUk.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-2020785079668190523</id><published>2011-04-28T00:08:00.004+08:00</published><updated>2011-04-28T06:45:19.328+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-28T06:45:19.328+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Expanding your toolbox - Picking a new language to learn.</title><content type="html">&lt;div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-2PUA0h3qgi4/Tbg-OU8t_3I/AAAAAAAAAlc/GdMvmlLyHps/s1600/main+thinking.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;img border="0" height="212" src="http://1.bp.blogspot.com/-2PUA0h3qgi4/Tbg-OU8t_3I/AAAAAAAAAlc/GdMvmlLyHps/s320/main+thinking.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.freedigitalphotos.net/images/view_photog.php?photogid=987"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;Image: graur razvan ionut / FreeDigitalPhotos.net&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;One day a developer on my team came up to me and asked, what should he programming language should he learn next to be marketable (and by the way he also thinks that Java is slowly dying).&lt;br /&gt;
&lt;br /&gt;
Well as to whether Java is dying a not, I don't think so, a quick check with TIOBE shows that Java is still ranked among the top few languages and lots of places still runs Java. So i do have a job for the next few years.&lt;br /&gt;
&lt;br /&gt;
But the thought came to me, it is worth learning things that are marketable or should you learn things that broaden your knowledge? What's your take on it? Should you expand your toolbox or have more of the same tools?&lt;/div&gt;&lt;div style="text-indent: 0px !important;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;a href="http://www.streamhead.com/what-programming-language-to-learn-next/"&gt;Steamhead&lt;/a&gt;  takes the languages from &lt;a href="http://www.amazon.com/gp/product/193435659X/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=193435659X"&gt;Seven Languages in Seven weeks&lt;/a&gt; and puts it into a nice flow chart. I think all should go check that out and pick something out from that list. After doing quite a lot in Java I begin to appreciate the simplicity of using&amp;nbsp;interpreted&amp;nbsp;languages like &amp;nbsp;python and php, and the fact that their frameworks are usually simple as compared to Java ones where sometimes we&amp;nbsp;descend&amp;nbsp;into XML&amp;nbsp;configuration&amp;nbsp;hell.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html"&gt;Steve Yegge&lt;/a&gt; has a interesting way of categorizing the various languages, he breaks them down into Nouns (Java, C# or OO languages), Verbs (LISP, Clojure or Functional Programming) and Verbs and Nouns (Scala, Ruby, Python, C++ or a Mixture of both). &lt;br /&gt;
&lt;br /&gt;
Well for me I am more for the expand your toolbox model, go learn something that makes you have a new way of looking at things. A lot of people learn languages but they don't really learn design, think stuff like design patterns (Gang of Four, &lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/"&gt;Java EE Design&lt;/a&gt; ...), &lt;a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod"&gt;SOLID&lt;/a&gt; principles, OO Metrics. Even if you know the syntax, you simply can't write maintainable programs and all you write lacks a certain &lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;craftsmanship&lt;/a&gt; to it.&lt;br /&gt;
&lt;br /&gt;
By learning a different language and looking at the api, you can have a different idea about how to design your programs. An example will be like in Java. You have Math.abs a static function to get the absolute value of a number, have you ever wonder why its so &lt;b&gt;"un OO"&lt;/b&gt; like? Compare with Ruby its just number.abs(), simple and elegant and fits into the OO paradigm.&lt;br /&gt;
&lt;br /&gt;
In short &lt;br /&gt;
&lt;br /&gt;
If you know Java, C# go learn Lisp Dialects (Common Lisp, Clojure), Haskell, Ruby, Python...&lt;br /&gt;
&lt;br /&gt;
If you know Python, Ruby, you are pretty much there, since you straddle the limits between the 2 kingdoms.&lt;br /&gt;
&lt;br /&gt;
If you know Common Lisp, Clojure, dont bother learning any other thing since you will think why in the world Java, C# programmers are typing so much code and configuring so much XML.&lt;br /&gt;
&lt;br /&gt;
If in doubt just learn PHP to be marketable :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-indent: 0px !important;"&gt;&lt;/div&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1590592395" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=193435659X" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=193435659X" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;script charset="utf-8" src="http://ws.amazon.com/widgets/q?rt=ss_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822/US/stephensblo0a-20/8001/c72d110c-a7b1-4335-af9b-91e074df9294" type="text/javascript"&gt;
 
&lt;/script&gt; &lt;noscript&gt;&lt;a href="http://ws.amazon.com/widgets/q?rt=ss_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822%2FUS%2Fstephensblo0a-20%2F8001%2Fc72d110c-a7b1-4335-af9b-91e074df9294&amp;amp;Operation=NoScript"&gt;Amazon.com Widgets&lt;/a&gt;&lt;/noscript&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-2020785079668190523?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/KWgzkENzHO4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/2020785079668190523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/04/expanding-your-toolbox-picking-new.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/2020785079668190523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/2020785079668190523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/KWgzkENzHO4/expanding-your-toolbox-picking-new.html" title="Expanding your toolbox - Picking a new language to learn." /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-2PUA0h3qgi4/Tbg-OU8t_3I/AAAAAAAAAlc/GdMvmlLyHps/s72-c/main+thinking.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/04/expanding-your-toolbox-picking-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMBQX49eSp7ImA9Wx9VFkw.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-5874230573686225873</id><published>2011-02-02T11:14:00.001+08:00</published><updated>2011-02-02T11:14:10.061+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T11:14:10.061+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>One hour early a day...</title><content type="html">&lt;div class='posterous_autopost'&gt;   My latest read is&amp;nbsp;Robin Sharma's book (&lt;a href="http://www.amazon.com/gp/product/1439109125?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1439109125"&gt;The Leader&amp;nbsp;who had no&amp;nbsp;title&lt;/a&gt;), interesting read. But one statement struck me (I more or less paraphrase it) &lt;p /&gt; &lt;div&gt;&lt;strong&gt;"If you wake up one hour early each day for a month, in 30 days you will have almost one weeks worth of working time, think of the things you could do"&lt;/strong&gt;&lt;/div&gt; &lt;p /&gt; &lt;div&gt;When i told this to some of my colleagues/friends they say wha sleep less one hour how ? Not enough time to sleep already.&lt;/div&gt; &lt;p /&gt; &lt;div&gt;&lt;strong&gt;"You have enough time to sleep when you are dead"&amp;nbsp;&lt;/strong&gt;&lt;/div&gt; &lt;p /&gt; &lt;div&gt;I guess this is the difference between people who do impressive/great things (physically fit, be it in doing voluntary work, open source projects, making lots of money, hobbies, making a difference, side business, execise often) and the rest of us. They spent the time not just dreaming and talking&amp;nbsp;about it but actually doing it. I am not actually saying that you forgo sleep altogether but think of the possibilities that could happen if you think about how to spend your time wisely.&lt;/div&gt; &lt;p /&gt; &lt;div&gt;At the end of our life, lets not spend time regretting what it might have been, or what we might have done better.&lt;/div&gt; &lt;p /&gt; &lt;div&gt;Remember the saying that you need 10,000 hours to become good at what u do, maybe i should start doing things instead of writing things on my blog :)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-5874230573686225873?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/aX-P-xhswG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/5874230573686225873/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/02/one-hour-early-day.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/5874230573686225873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/5874230573686225873?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/aX-P-xhswG0/one-hour-early-day.html" title="One hour early a day..." /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/02/one-hour-early-day.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUDQno6fCp7ImA9Wx9VEEg.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-1184575568864093956</id><published>2011-01-26T23:37:00.002+08:00</published><updated>2011-01-26T23:37:53.414+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-26T23:37:53.414+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>Ebooks from top StackOverflow answers</title><content type="html">&lt;div class="posterous_autopost"&gt;Have you tried &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;, if you are a developer its probably one of the best resource for asking questions.&lt;br /&gt;
&lt;div&gt;Its a great site, what is even greater is that someone converted the best answers into an Ebook format.&lt;br /&gt;
&lt;br /&gt;
Great for bring around, the link is here&amp;nbsp;&lt;a href="http://hewgill.com/~greg/stackoverflow/ebooks/"&gt;http://hewgill.com/~greg/stackoverflow/ebooks/&lt;/a&gt;. Whats nice is that it is broken up nicely into the different subject like ajax, python, c#.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-1184575568864093956?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/gaWzURW96zo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/1184575568864093956/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/01/ebooks-from-top-stackoverflow-answers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1184575568864093956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1184575568864093956?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/gaWzURW96zo/ebooks-from-top-stackoverflow-answers.html" title="Ebooks from top StackOverflow answers" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/01/ebooks-from-top-stackoverflow-answers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YMR3o8cSp7ImA9Wx9WGUk.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-1065567539547841311</id><published>2011-01-25T17:53:00.001+08:00</published><updated>2011-01-25T17:53:06.479+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-25T17:53:06.479+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="node.js" /><title>Posting data with Node.js</title><content type="html">&lt;div class='posterous_autopost'&gt;   Recently i needed to post data using node.js, I was not trying to post a long string of data but rather parameters from a form. But the Node.js help page isn't too helpful, it just say use request.write() to write data to the stream&lt;p /&gt; &amp;nbsp; This is the first interation i got.&lt;p /&gt; &amp;nbsp;&lt;div class="CodeRay"&gt; &lt;div class="code"&gt;&lt;pre&gt;var http=require('http'); var post=http.createClient(80,'localhost'); var request=post.request('POST',/test.php'.{'host':'localhost'}); request.write('test=10'); request.end(); request.on('response',function(response){ response.setEncoding('utf8'); reponse.on('data',function(chunk){ console.log(chunk); } });&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &amp;nbsp;&lt;br /&gt; test.php is a simple php script that prints out the parameter value.&lt;p /&gt; &amp;nbsp; I got nothing... nothing was printed out. What was wrong?&lt;p /&gt; &amp;nbsp; Using curl and Fiddler, i did a little investigating about what went wrong, what was missing was the &lt;strong&gt;Content-Length&lt;/strong&gt; and the &lt;strong&gt;Content-Type&lt;/strong&gt; which needs to be &lt;strong&gt;application/x-www-form-urlencoded&lt;/strong&gt;.&lt;p /&gt; &amp;nbsp; Adding these 2 parameters to the script&lt;br /&gt;&lt;div class="CodeRay"&gt; &lt;div class="code"&gt;&lt;pre&gt;var http=require('http'); var post=http.createClient(80,'localhost'); var request=post.request('POST',/test.php'.{'host':'localhost','Content-Length':'7','Content-Type':'application/x-www-form-urlencoded'}); request.write('test=10'); request.end(); request.on('response',function(response){ response.setEncoding('utf8'); reponse.on('data',function(chunk){ console.log(chunk); } });&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &amp;nbsp;&lt;br /&gt; And yeah ! It works !&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-1065567539547841311?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/ymJcpHxyEN4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/1065567539547841311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/01/posting-data-with-nodejs.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1065567539547841311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1065567539547841311?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/ymJcpHxyEN4/posting-data-with-nodejs.html" title="Posting data with Node.js" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/01/posting-data-with-nodejs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYAQH46cCp7ImA9Wx9XF04.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-1553706357346103354</id><published>2011-01-11T17:29:00.001+08:00</published><updated>2011-01-11T17:29:01.018+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-11T17:29:01.018+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><title>JRex, Embedding Gecko (Firefox) in eclipse</title><content type="html">&lt;div class='posterous_autopost'&gt;   Jrex is a Java component that embeds Mozila Gecko in your application. The project has been dead for some time since 2008 from what the mozdev.org page. So the version&amp;nbsp;of Gecko may not be the latest but should be good enough for whatever you&amp;nbsp;would like to try out.&lt;p /&gt;&amp;nbsp;However looking at the code from Vijay (&lt;a href="http://www.vijaykiran.com/2006/09/05/using-jrex-in-eclipse-rcp/"&gt;http://www.vijaykiran.com/2006/09/05/using-jrex-in-eclipse-rcp/&lt;/a&gt;&lt;br /&gt;), i got it working and it seems to work fine, but Vijay dosen't really go into how to setup the project like where to download the jars and where to put the dll and so on, and I did have some hard time trying to find out where to find the jars.&lt;p /&gt;&amp;nbsp;Downloads &lt;br /&gt;1. At first i took apart the jnlp file on jrex.mozdev.org to find out what are the dependencies, but after looking around the mozdev site, i finally found the downloads for the jars, source and docs in here (&lt;a href="http://www.mozdev.org/sourc e/browse/jrex/downloads/#dirlist"&gt;http://www.mozdev.org/source/browse/jrex/downloads/#dirlist&lt;/a&gt;).&lt;p /&gt;&amp;nbsp;2. But it dosen't include the jrex_gre files that are in the jnlp, those you can get them here (&lt;a href="http://www.mozdev.org/source/browse/jrex/www/releases/jrex-1.0b1_dom3/"&gt;http://www.mozdev.org/source/browse/jrex/www/releases/jrex-1.0b1_dom3/&lt;/a&gt;). Look for the jrex_gre.jar&lt;p /&gt;&amp;nbsp;Setting up your eclipse.&lt;br /&gt;Put the jrex.dll in your&amp;nbsp;eclipse directory, if not you will get a UnsatisfiedLinkError when you try to run the&amp;nbsp;view. Put the&amp;nbsp;jrex.jar in your lib folder of your project.&lt;p /&gt;&amp;nbsp;Unzip the jrex_gre.jar contents to a nice location you can remember. &amp;nbsp;You will see in Vijay's code a place that you will need to supply the path to the file in org/mozilla/jrex/jrex_gre files.&lt;p /&gt;&amp;nbsp;That should fill up the missing pieces in Vijay's writeup.&lt;p /&gt;I will try to package&amp;nbsp;the source code into github at some later time.&lt;br /&gt;&amp;n bsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-1553706357346103354?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/tiLG_xYGYtU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/1553706357346103354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/01/jrex-embedding-gecko-firefox-in-eclipse.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1553706357346103354?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1553706357346103354?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/tiLG_xYGYtU/jrex-embedding-gecko-firefox-in-eclipse.html" title="JRex, Embedding Gecko (Firefox) in eclipse" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/01/jrex-embedding-gecko-firefox-in-eclipse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIGSHw_eyp7ImA9Wx9XEko.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-3251731760841431500</id><published>2011-01-06T09:32:00.001+08:00</published><updated>2011-01-06T09:32:09.243+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-06T09:32:09.243+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="fedora" /><title>Fedora 14 - Using the DVD as a software repository</title><content type="html">&lt;div class='posterous_autopost'&gt;   Installed Fedora today at office in order to try out some web acceleration stuff lile squid and varnish. I used the DVD iso version, so that i can have most of the essential software already.&lt;p /&gt; &amp;nbsp; When i rebooted i found that the dvd is not recongnised as a software repository, because there is no entry in /etc/yum.repos.d/.&lt;p /&gt; No biggie, just mount the dvd, in the root of the dvd there is a file media.repo, jus copy the file to /etc/yum.repos.d/ as packagekit-media.repo and you are all set, your dvd becomes a software repository.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-3251731760841431500?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/mCuBmd-wtsU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/3251731760841431500/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/01/fedora-14-using-dvd-as-software.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3251731760841431500?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3251731760841431500?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/mCuBmd-wtsU/fedora-14-using-dvd-as-software.html" title="Fedora 14 - Using the DVD as a software repository" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/01/fedora-14-using-dvd-as-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMERX88eip7ImA9Wx9XEUQ.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-3157008372298567480</id><published>2011-01-05T09:53:00.001+08:00</published><updated>2011-01-05T09:53:24.172+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-05T09:53:24.172+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Resolutions 2011</title><content type="html">&lt;div class='posterous_autopost'&gt;     My resolutions for 2011. &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;strong&gt;For the personal geek in me (Probably have little to do with work)&lt;/strong&gt;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;br /&gt;I declare this to be the year of functional programming for me!&lt;p /&gt;&lt;/div&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/stephenonsoftware/gxzvGytuoADqHBEyAjHJubFJJtqutAbfFykxBeagkjmduvxuHErvqtmCcpfC/media_httpwwwlisperat_mnqzh.png.scaled500.png" width="256" height="223"/&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Common Lisp&amp;nbsp;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Begin by first completing Practical Common Lisp and&lt;a href="http://www.amazon.com/gp/product/1593272812?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1593272812"&gt; Land of Lisp&lt;/a&gt;, and the little pet project that i do when i have free time, the idea of closures and high order functions really appeal to me.&lt;br /&gt;&lt;/div&gt; &lt;p /&gt; &lt;div&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/stephenonsoftware/abwuCwowIvhkkghFsAEFaGGCArpfpratdfnHqlsJIFdanqdAmFiJqEBhaACz/media_httpwwwerlangor_caDCv.png.scaled500.png" width="156" height="135"/&gt; &lt;/div&gt; &lt;p /&gt; &lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/Erlang_%28programming_language%29"&gt;Erlang&lt;/a&gt;&lt;/div&gt; &lt;div&gt;Another Functional Language that I hopefully have time for this year. Invented by Ericsson for using in telephony applications, it has some interesting properties like fault tolerant and hot swapping. Since it's designed for telephony (which has something like 9 9's of&amp;nbsp;availability) you can actually swap in code while the system is running which i think its pretty cool.&lt;/div&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Hadoop/Map Reduce&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Always heard about MapReduce and Hadoop, I shall attempt to read google's paper on it and hopefully setup a working instance.&lt;/div&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;NoSQL&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;a href="http://en.wikipedia.org/wiki/NoSQL"&gt;NoSQL&lt;/a&gt; is getting big nowadays with &lt;a href="http://www.readwriteweb.com/cloud/2011/01/how-twitter-uses-nosql.php"&gt;Twitter&lt;/a&gt;&amp;nbsp;and Facebook all moving/developing part of their infrastructure on top of NoSQL type of storage.&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Learn at least one implementation and see how it can be worked into&amp;nbsp;a project.&lt;/div&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;strong&gt;For the bookworm in me&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Read The Elements of Style, one of the great books on the writing for the English language. Time to get better at my writing, better written communication is essential as you go along ur working life.&lt;p /&gt;Read more "management" style books especially in the realm of making people happy at work, I am quite interested in how great organizations retain their people and keep them happy. &lt;br /&gt;So far i have &lt;a href="http://www.amazon.com/gp/product/0786868686?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0786868686"&gt;FISH! tales&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/B001OMHV0K?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B001OMHV0K"&gt;Why work sucks&lt;/a&gt; from the library here with me.&lt;p /&gt;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;strong&gt;For the not so fit me&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Finish taking my IPPT before June and pass it.&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Run at least once a week at least 2.4km.&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Attempt to run a half marathon by then end of the year. (Haha this will the hardest one in my list)&lt;br /&gt;&lt;/div&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;strong&gt;For the bad habits in me&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt; &lt;div&gt;Second guessing or&amp;nbsp;interrupting&amp;nbsp;people midway&lt;/div&gt; &lt;div&gt;I don't know if people noticed but i do have a bad habit of either completing other people's sentence or second guessing what they will say. I will let others finish what they want to say before I start, I will try to follow the rule of &lt;b&gt;One Conversation at a time&lt;/b&gt;.&lt;/div&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Procrastination&lt;br /&gt;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;I have a habit of procrastinating, enuff said.&lt;p /&gt;&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;strong&gt;For the father and husband in me&lt;/strong&gt;&lt;br /&gt;Vacation&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Hopefully I will have time to go for a vacation, hopefully it will be the first time that I am bringing Chloe overseas.&lt;/div&gt; &lt;p /&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Better Father/husband&lt;/div&gt; &lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Its quite hard trying to be specific as to what makes a better father, could be a variety of factors but i sorta like this one that I got from FISH! Tales book, &lt;strong&gt;"Love for child. is simply being there"&lt;/strong&gt;.&lt;p /&gt;Lets look back again in 2012.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-3157008372298567480?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/vE50xN9K9z4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/3157008372298567480/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2011/01/resolutions-2011.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3157008372298567480?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3157008372298567480?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/vE50xN9K9z4/resolutions-2011.html" title="Resolutions 2011" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2011/01/resolutions-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EHRn0yfCp7ImA9Wx9QFUk.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-8253209700437403982</id><published>2010-12-28T21:07:00.001+08:00</published><updated>2010-12-28T21:07:17.394+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-28T21:07:17.394+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>Reflections on 2010</title><content type="html">&lt;div class='posterous_autopost'&gt;   &lt;div&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/stephenonsoftware/yJBrEbBtGGtheHEncCttyGoDjFetmCnuCmmAHgueHBxEnjvrCDuDxburhfhj/media_httpfarm6static_cjeai.jpg.scaled500.jpg" width="500" height="375"/&gt; &lt;/div&gt;&lt;p /&gt;Well 2010 has come and soon will be gone, so time to look back.&lt;p /&gt;&lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;I have been married for 2 years now although there are ups and downs but I am happy that I have a nice wife and a cute (and she continues to amaze me everyday) daughter.&lt;/div&gt;&lt;p /&gt;&lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Being a father does entail some sacrifices, no longer will you have "your" time, but rather it will be the "family's" time or more accurately the "baby's" time. But the smile of Chloe when she see you wake up and when she is scared and runs to hugs you ( only when the mum in law not around) makes it all worth while. But as for having another one .... lets wait and see :)&lt;/div&gt;&lt;p /&gt;&lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Hdb finally decides to give me my house, and it is in the process of renovating, left the painting and the carpentry to be done and it should be ready to move in.&lt;/div&gt;&lt;p /&gt;&lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/stephenonsoftware/iDqflifzlfDehCmyigdqhvqbsnJgqbCkBuwtwrgfdmdEwbuyrjcjhsblGAvA/media_httpdilbertcomd_aHoaf.gif.scaled1000.gif'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/stephenonsoftware/iDqflifzlfDehCmyigdqhvqbsnJgqbCkBuwtwrgfdmdEwbuyrjcjhsblGAvA/media_httpdilbertcomd_aHoaf.gif.scaled500.gif" width="500" height="221"/&gt;&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;p /&gt;&lt;div style="font-family: Tahoma; font-size: 10pt;"&gt;Work wise has been good, finally saw a project from the start to the OSAT phase, couldn't see it all the way to the end though, got rope into another project, as a Software Develop ment Manager, its sort of like a Project Lead kinda thing. Challenging though because the project had already been running for sometime before I came in and there are lots of stuff that I need to pick up and be very familiar with. I am aware of &lt;a href="http://en.wikipedia.org/wiki/Peter_Principle"&gt;the Peter Principle&lt;/a&gt;&amp;nbsp;and the&lt;a href="http://en.wikipedia.org/wiki/Dilbert_Principle"&gt; Dilbert Principle&lt;/a&gt;, hope that this is not the end yet :)&lt;/div&gt;&lt;p /&gt;&lt;div&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/stephenonsoftware/bzarqIovsCiElIvfBmHaGIIAxdrDwtDnhGscBnldyegdarnudlJqAkFGeDhg/media_httpwwwsuzukimu_cIblv.jpg.scaled1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/stephenonsoftware/bzarqIovsCiElIvfBmHaGIIAxdrDwtDnhGscBnldyegdarnudlJqAkFGeDhg/media_httpwwwsuzukimu_cIblv.jpg.scaled500.jpg" width="500" height="185"/&gt;&lt;/a&gt; &lt;/div&gt;&lt;p /&gt;&lt;div&gt;On more personal note, I have been trying to pick up the Diatonic Harmonica, practicing while waiting for my wife to go off work. Always sort of regretted that I never did pick up a musical instr ument, haha now trying to catch up. Seems like a lot of people around my age are playing catch up in music, I know a few who are trying to pick up the piano, trumpet and the violin.&amp;nbsp;&lt;/div&gt;&lt;p /&gt;&lt;div&gt;Hope to play like this guy below someday!&lt;/div&gt;&lt;div&gt;&lt;object height="417" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JUHZy_8SGMw&amp;hl=en&amp;fs=1" /&gt;&lt;/param&gt;&lt;param name="wmode" value="window" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JUHZy_8SGMw&amp;hl=en&amp;fs=1" allowfullscreen="true" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="window" height="417" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;p /&gt;&lt;div&gt;or even this guy!&lt;/div&gt;&lt;div&gt;&lt;object height="417" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pJB1j5PFsQg&amp;hl=en&amp;fs=1" /&gt;&lt;/param&gt;&lt;param name="wmode" value="window" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/pJB1j5PFsQg&amp;hl=en&amp;fs=1" allowfullscreen="true" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="window" height="417" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;p /&gt;&lt;div&gt;Till the next time...&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-8253209700437403982?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/6DYzgRLs_fk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/8253209700437403982/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/12/reflections-on-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8253209700437403982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8253209700437403982?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/6DYzgRLs_fk/reflections-on-2010.html" title="Reflections on 2010" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/12/reflections-on-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EHQXs8fyp7ImA9Wx9TF0o.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-8947206457471919148</id><published>2010-11-26T21:53:00.001+08:00</published><updated>2010-11-26T21:53:50.577+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-26T21:53:50.577+08:00</app:edited><title>Winston W Royce - Father of waterfall</title><content type="html">&lt;div class='posterous_autopost'&gt;   &amp;nbsp;Uncle Bob posted an article, What killed waterfall could kill agile.&lt;a href="http://cleancoder.posterous.com/what-killed-waterfall-could-kill-agile"&gt;http://cleancoder.posterous.com/what-killed-waterfall-could-kill-agile&lt;/a&gt;. He mentioned about a person named &lt;a href="http://en.wikipedia.org/wiki/Winston_W._Royce"&gt;Dr Winston W Royce&lt;/a&gt; (whom uncle bob called the "Father of waterfall") who published a paper,&amp;nbsp; &lt;a href="http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf" class="external text" rel="nofollow"&gt;Managing the Development of Large Software Systems: Concepts and Techniques&lt;/a&gt;, in which a system of developement now know as the Waterfall model was described.&lt;p /&gt;&amp;nbsp;What shocked me in that paper was not that he advocate the waterfall model, but rather he condemns it. In his own words &lt;br /&gt;"I believe in this concept, but the implementation described above is &lt;strong&gt;risky and invites failure&lt;/strong&gt;".&lt;p /&gt;&amp;nbsp;The funny thing is so many generations of programmers who studied in colleges and university were brought up believing that it was one of (or depending on how old you are) or "the" model of how software actually gets built. Now we know better, that's why we have things like the Agile movement,&amp;nbsp;Kanban and so on&lt;p /&gt; &amp;nbsp;If you read the paper, you will discover he has views on how to improve the process and what is surprising is how similar it is to practices that we are advocating today.&lt;p /&gt; His&amp;nbsp;4th and&amp;nbsp;5th recommendation looked remarkably like Agile practices.&lt;p /&gt; &amp;nbsp;&lt;strong&gt;Step 4: Plan, Control and Monitor Testing&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;Code inspection&lt;/strong&gt;&lt;br /&gt;He advocates the use of code inspection by a second party, he said the use of computers would be too expensive for this task. But with the computing power we have today. Software like Findbugs or JTest can help in the first line of bad code detection and Pair Programming helps in that aspect too.&lt;p /&gt;&amp;nbsp;Code Coverage&lt;br /&gt;Code coverage is also advocated in fact he advocates testing every logical path if possible and if he is the customer he would not accept delivery until this step is done. Although he acknowledges the difficulty in accomplishing this step for large programs.&lt;p /&gt;&amp;nbsp;&lt;strong&gt;Step 5: Involve the customer&lt;/strong&gt;&lt;br /&gt;He knows that software design and specifications is open to a wide interpretation even after agreements, customer involvement in his words should be &lt;strong&gt;"formal, in-depth and continuing".&amp;nbsp;&lt;/strong&gt;&lt;p /&gt;&amp;nbsp;Let's not remember Winston W Royce as "Father of the waterfall" but rather one who saw how software&amp;nbsp;development could be done better 40 years ago.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-8947206457471919148?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/GjN9DA2ZTLI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/8947206457471919148/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/11/winston-w-royce-father-of-waterfall.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8947206457471919148?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8947206457471919148?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/GjN9DA2ZTLI/winston-w-royce-father-of-waterfall.html" title="Winston W Royce - Father of waterfall" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/11/winston-w-royce-father-of-waterfall.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcEQ3o-fip7ImA9Wx9TEkw.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-6925295123748578624</id><published>2010-11-20T08:27:00.001+08:00</published><updated>2010-11-20T08:30:02.456+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-20T08:30:02.456+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="yii" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Relational selects in YII</title><content type="html">How do you do relational selects in YII? The kind where you have a many to many relationship on a table. The YII page on relational queries didn't have &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/database.arr"&gt;many good examples&lt;/a&gt; on how to do it, so I tried it out and found it to be actually quite easy, its quite like how you would do for single table query.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.yiiframework.com/tutorial/image?type=guide&amp;amp;version=1.1&amp;amp;lang=en&amp;amp;file=er.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://www.yiiframework.com/tutorial/image?type=guide&amp;amp;version=1.1&amp;amp;lang=en&amp;amp;file=er.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
The above figure was taken from the YII &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/database.arr"&gt;page on relational queries&lt;/a&gt; (I was too lazy to do up my own example).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;We will just concentrate on the tbl_post , tbl_post_category and the tbl_category tables.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I will assume you know how to &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship"&gt;overwrite the relations function&lt;/a&gt; in CActiveRecord to setup the relations correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So the scenario is, I would like to retrieve posts that are in a certain category.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The idea is to use the &lt;a href="http://www.yiiframework.com/doc/api/1.1/CActiveRecord#with-detail"&gt;&lt;b&gt;with()&lt;/b&gt; method&lt;/a&gt; that is part of CActiveRecord, we would like to&amp;nbsp;retrieve&amp;nbsp;the categories together with the Posts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So the query would look like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;pre&gt;$posts=Post::model()-&amp;gt;with(&lt;b&gt;array('categories'=&amp;gt;array('condition'=&amp;gt;'name="FunStuff"'))&lt;/b&gt;)-&amp;gt;findAll();
&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;In the &lt;b&gt;with &lt;/b&gt;portion you specify the relations that you want to load in this case &lt;b&gt;categories&lt;/b&gt;, and with it you can specify the &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-options"&gt;different relation query options&lt;/a&gt; like select, condition and so on. In this case we use the "&lt;b&gt;condition&lt;/b&gt;" option to specify what from categories that we want to retrieve. For this we want to retrieve all the &lt;b&gt;Post&lt;/b&gt; with &lt;b&gt;categories&lt;/b&gt; name = "FunStuff".&lt;br /&gt;
&lt;br /&gt;
Simple rite!&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=stephensblo0a-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1847199585&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-6925295123748578624?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/wVYm2zz2VAw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/6925295123748578624/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/11/relational-selects-in-yii.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/6925295123748578624?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/6925295123748578624?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/wVYm2zz2VAw/relational-selects-in-yii.html" title="Relational selects in YII" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/11/relational-selects-in-yii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEANQX4_fSp7ImA9Wx5VGE0.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-3095570241752127168</id><published>2010-10-11T21:09:00.001+08:00</published><updated>2010-10-11T21:13:10.045+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-11T21:13:10.045+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOTW" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>LOTW - 11 Oct 2010</title><content type="html">&lt;a href="http://web.archive.org/web/20070213165045/users.ipa.net/~dwighth/smalltalk/byte_aug81/design_principles_behind_smalltalk.html"&gt;Design Principles Behind Smalltalk&lt;/a&gt;&amp;nbsp;- One of the most influential language although it didn't become popular. Java, Ruby all draw&amp;nbsp;inspiration&amp;nbsp;from it. If you are a programmer you owe it to yourself to go try Smalltalk. &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt; and &lt;a href="http://pharo-project.org/home"&gt;Pharo&lt;/a&gt;s are probably the more famous of the free implementation around.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.scribd.com/doc/38765815/Google-Answer-and-Counterclaims-v-Oracle-Filed"&gt;Google's answers to Oracle's allegations&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Doing quite a bit of PHP programming these days so there are the few links that might be useful&lt;br /&gt;
&lt;a href="http://prajwalaa.wordpress.com/2009/03/19/using-emacs-to-edit-php-files/"&gt;Using Emacs to edit php files&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://code.google.com/p/geben-on-emacs/"&gt;Geben + XDebug&lt;/a&gt; to debug php code on emacs -&amp;nbsp; Haven tried this, so far with PHP, doing print statements still works for me.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://aptoncd.sourceforge.net/"&gt;AptOnCD&lt;/a&gt; Backs up all the packages that you have installed, making it easy to restore your packages instead of downloading them all again.&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-3095570241752127168?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/hOuSq0rij58" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/3095570241752127168/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/10/lotw-11-oct-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3095570241752127168?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3095570241752127168?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/hOuSq0rij58/lotw-11-oct-2010.html" title="LOTW - 11 Oct 2010" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/10/lotw-11-oct-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEAQX05fCp7ImA9Wx5VEUs.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-2287252345037030092</id><published>2010-10-04T11:24:00.000+08:00</published><updated>2010-10-04T11:24:00.324+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-04T11:24:00.324+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOTW" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>LOTW - 4 Oct 2010</title><content type="html">&lt;a href="http://www.dzone.com/links/r/map_reduce_a_really_simple_introduction.html"&gt;A really simple introduction to Map Reduce&lt;/a&gt; - Great intro to what Mappers, Groupers and Reducers are all about. I was scratching my head about &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;Map Reduce&lt;/a&gt; before this came about.&lt;br /&gt;
&lt;br /&gt;
How big are Facebook's data centers? This &lt;a href="http://www.datacenterknowledge.com/the-facebook-data-center-faq/"&gt;FAQ&lt;/a&gt; will tell you all that you need to know including servers, software, location and expansion plans.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://goo.gl/"&gt;Google URL shortener&lt;/a&gt; goo.gl opens for business&lt;br /&gt;
&lt;br /&gt;
Heard of the &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt;, unknown to me there is actually a&amp;nbsp;&lt;a href="http://netduino.com/"&gt;Netdunio &lt;/a&gt;yeap, and it runs on .Net. &lt;a href="http://www.hanselman.com/blog/TheNETMicroFrameworkHardwareForSoftwarePeople.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+ScottHanselman+(Scott+Hanselman+-+ComputerZen.com)"&gt;Scott Hanselman&lt;/a&gt; talks about it.&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-2287252345037030092?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/OW4qeSKIAnc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/2287252345037030092/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/10/lotw-4-oct-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/2287252345037030092?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/2287252345037030092?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/OW4qeSKIAnc/lotw-4-oct-2010.html" title="LOTW - 4 Oct 2010" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/10/lotw-4-oct-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUFRHg8eyp7ImA9Wx5WFk4.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-998698745980620634</id><published>2010-09-28T08:36:00.000+08:00</published><updated>2010-09-28T08:36:55.673+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-28T08:36:55.673+08:00</app:edited><title>Quote: Paul Graham on Beautiful software</title><content type="html">&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;b&gt;"Great software requires a fanatical devotion to beauty.&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;b&gt;If you look inside good software, you will find parts no one is suppose to see are beautiful too."&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.paulgraham.com/"&gt;Paul Graham&lt;/a&gt; from &lt;a href="http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/1449389554?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Hackers and Painters&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1449389554" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/1449389554?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Hackers &amp;amp; Painters: Big Ideas from the Computer Age" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=1449389554&amp;amp;tag=stephensblo0a-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1449389554" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-998698745980620634?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/qexN4doklPo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/998698745980620634/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/09/quote-paul-graham-on-beautiful-software.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/998698745980620634?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/998698745980620634?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/qexN4doklPo/quote-paul-graham-on-beautiful-software.html" title="Quote: Paul Graham on Beautiful software" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/09/quote-paul-graham-on-beautiful-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EEQn86cSp7ImA9Wx5XGUw.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-868870735649695206</id><published>2010-09-20T01:00:00.001+08:00</published><updated>2010-09-20T01:00:03.119+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-20T01:00:03.119+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOTW" /><category scheme="http://www.blogger.com/atom/ns#" term="lisp" /><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><title>LOTW - 20 Sept 2010</title><content type="html">&lt;span style="font-size: small;"&gt;I missed last weeks LOTW due to lots of work and basically I was lazy haha, so this week gonna do a bumper issue. Enjoy&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/97_Things_Every_Programmer_Should_Know"&gt;97 things every programmer should know&lt;/a&gt; - I guess most would already know about this, every programmer should go read what's in there, there are so many pearls of wisdom, now we have a&lt;a href="http://blog.martinig.ch/videos/97-things-every-programmer-should-know/"&gt; video&lt;/a&gt; by&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small; line-height: 16px;"&gt;&lt;a href="http://programmer.97things.oreilly.com/wiki/index.php/Kevlin_Henney" style="background-image: none; color: #002bb8; text-decoration: none;" title="Kevlin Henney"&gt;Kevlin Henney&lt;/a&gt;&amp;nbsp;at the keynote at jazoon talking about. Slides can be found at the video link.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small; line-height: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: small; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', sans-serif;"&gt;&lt;a href="http://dzone.com/iCQ1"&gt;Epic failures: 11 infamous software bugs&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;Google is going to release&amp;nbsp;&lt;a href="http://googlewavedev.blogspot.com/2010/09/wave-open-source-next-steps-wave-in-box.html"&gt;Wave in a Box&lt;/a&gt;, an installable version of Google Wave, since they have decided to discontinue Google Wave. The version is not going to have all the features of the original wave, but they are going to support federated across other Google wave boxes.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;a href="http://lispcabinet.sourceforge.net/"&gt;Lisp cabinet&lt;/a&gt; - For those who wants to tinkle with Common Lisp "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&lt;b&gt;Lisp Cabinet&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;is a set of configuration files, tools and utilites bundled with automated installer to deliver full-fledged Emacs based Lisp development environment for&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;&lt;b&gt;Microsoft Windows"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif; font-size: small;"&gt;Check out all the cool videos from NDC 2010 in this &lt;a href="http://dl.dropbox.com/u/1373839/NDC2010%20Sessions.torrent"&gt;torrent&lt;/a&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt; interested to hear Uncle Bob and Mike Cohn speak, Uncle Bob's slides from his Clean Code I Args are &lt;a href="http://dl.dropbox.com/u/4730299/Clean%20Code%20Args.pdf"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Lamda the Ultimate has two posts that focus on &lt;a href="http://en.wikipedia.org/wiki/Software_transactional_memory"&gt;Software Transactional Memory&lt;/a&gt;, &lt;a href="http://lambda-the-ultimate.org/node/4070"&gt;one post&lt;/a&gt; quotes from a &lt;a href="http://userweb.cs.utexas.edu/users/rossbach/pubs/wddd09-rossbach.pdf"&gt;study&lt;/a&gt; that STM actually helps reduce errors as compared to the traditional locking model, while the other &lt;a href="http://lambda-the-ultimate.org/node/4069"&gt;post&lt;/a&gt; talks about the support for STM in .NET and the decisions they have to make. I haven't really tried STM yet in any language, but basing modifications around a database like transactional model can probably make understanding and programming easier.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-868870735649695206?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/BoI8Rs-3Sbg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/868870735649695206/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/09/lotw-20-sept-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/868870735649695206?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/868870735649695206?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/BoI8Rs-3Sbg/lotw-20-sept-2010.html" title="LOTW - 20 Sept 2010" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/09/lotw-20-sept-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cAQX47fyp7ImA9Wx5XFUQ.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-8496089746470833197</id><published>2010-09-15T10:11:00.006+08:00</published><updated>2010-09-16T09:04:00.007+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-16T09:04:00.007+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><title>Designing Interfaces guidelines.</title><content type="html">We all write interfaces when programming, these are the few rules that I found useful to keep in mind when designing and implementing interfaces.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Do not write interfaces for Model classes&lt;/b&gt;&lt;br /&gt;
Model like classes are classes like your DB model, or any other kind of class whoose primary function is to hold values. I usually do not write interfaces for these kind of classes for their main purpose is to hold values, and so let say you have Person class with getters and setters for Name and Address. And you have a interface call IPerson so you have getters and setters in the interface for IPerson. If you add a Telephone to Person, you need to add both the getters and setters to the IPerson. And it just goes on and on.&lt;br /&gt;
&lt;br /&gt;
So far I haven really found a nice use case for implementing interfaces for simple value/model kind of classes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Reduce your external dependecies&lt;/b&gt;&lt;br /&gt;
The reason you are writing interfaces is so that you can reduce the dependcies and change implementations if necessary. Consider the following&lt;br /&gt;
&lt;br /&gt;
import org.internal.*&lt;br /&gt;
import &lt;b&gt;org.external.NameValuePair&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
public interface HttpPost{&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;public void setPostParameters(NameValuePair[] pairs);&lt;br /&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;....&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
You are writing an interface to HttpPost and you have a method to add the post parameters. Your NameValuePair class actually comes from an external library. Now you have a dependency to that external library and you will need to package that every time you are using this interface.&lt;br /&gt;
&lt;br /&gt;
I will try to keep this to a minimium, the reason why I write interfaces is to keep dependencies simple not to introduce new ones. So i might introduce a new class to break that dependency if needed or change the method signature to something like addPostParameter(String,String);&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Keep your interfaces small and cohesive&lt;/b&gt;&lt;br /&gt;
Try not to have interfaces that does sort of everything, keep your interfaces small and cohesive (that means the methods in the interfaces are related to each other).&lt;br /&gt;
&lt;br /&gt;
Bob martin in his article on the &lt;a href="http://www.objectmentor.com/resources/articles/isp.pdf"&gt;Interface Segregation Principle&lt;/a&gt; talks about using the Adapter pattern and multiple inheritance to join multiple interfaces together.&lt;br /&gt;
&lt;br /&gt;
I like the line from Uncle Bob, &lt;b&gt;"Clients should not be forced to depend on interfaces they do not use"&lt;/b&gt;. Keep that as a rule when designing and implementing interfaces.&lt;br /&gt;
&lt;br /&gt;
Martin Fowler &lt;a href="http://martinfowler.com/bliki/RoleInterface.html"&gt;Role Interface&lt;/a&gt; article also talks about this.&lt;br /&gt;
&lt;br /&gt;
Interfaces are great for breaking up dependency and when use together with the &lt;a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle"&gt;Dependency Inversion&lt;/a&gt; principle you will have a easier time coping with changes to your software.&lt;br /&gt;
&lt;br /&gt;
These are the book I recommend to improve your code.&lt;br /&gt;
&lt;a href="http://www.amazon.com/Java-TM-Language-Specification-3rd/dp/0321246780?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Effective Java&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Effective Java (2nd Edition)" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0321356683&amp;amp;tag=stephensblo0a-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321356683" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0132350882" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Java-TM-Language-Specification-3rd/dp/0321246780?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321246780" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Clean Code: A Handbook of Agile Software Craftsmanship" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0132350882&amp;amp;tag=stephensblo0a-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0132350882" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Agile Software Development, Principles, Patterns, and Practices&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0135974445" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Agile Software Development, Principles, Patterns, and Practices" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0135974445&amp;amp;tag=stephensblo0a-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0135974445" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" height="50" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" width="50" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" height="50" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" width="50" /&gt;&lt;/a&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-8496089746470833197?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/OAgugyo7WNk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/8496089746470833197/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/09/designing-interfaces-guidelines.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8496089746470833197?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8496089746470833197?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/OAgugyo7WNk/designing-interfaces-guidelines.html" title="Designing Interfaces guidelines." /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/09/designing-interfaces-guidelines.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NQ306eSp7ImA9Wx5QF08.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-3197977908349940411</id><published>2010-09-06T07:16:00.000+08:00</published><updated>2010-09-06T06:49:52.311+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-06T06:49:52.311+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOTW" /><title>LOTW - 6 Sept 2010</title><content type="html">Yahoo releases the &lt;a href="http://www.yuiblog.com/blog/2010/08/25/introducing-yeti-the-yui-easy-testing-interface/"&gt;Yahoo YUI Testing Interface&lt;/a&gt; it allows running to units tests in different browsers simultaneously.&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;a href="http://37signals.com/svn/posts/2538-the-first-step-is-to-start"&gt;The first step is to start&lt;/a&gt; from 37 signals -  If you want to start something, just start, dont worry about it. As Yoda says "Do there is no try". Good advice for me ...&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://nighthacks.com/roller/jag/entry/let_larry_know_you_care"&gt;James Gosling&lt;/a&gt; creates a &lt;a href="http://www.cafepress.com/OrcOmit"&gt;"Free Java from Oracle"&lt;/a&gt; t-shirt. Frankly I wonder what if Java was free from the beginning, would it reach the popularity that it has today? Look at those with ISO like organizations behind it like C++ or Ecmascript, they tend to have abit too much political maneuvering and arguing and it take a long time for them to agree on standards. For the one person system that Python, Ruby have, the seem to lack the mass acceptance that Java commands (because SUN was backing it up those days), yeap they are popular but are they really being used a lot in the Enterprise space?&lt;br /&gt;
&lt;br /&gt;
Scott Hanselman talks about 2 tools he use for a more readable web, &lt;a href="http://www.instapaper.com/"&gt;Instapaper &lt;/a&gt;and &lt;a href="http://lab.arc90.com/experiments/readability/"&gt;Readablility&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://uncompatible.com/2010/09/01/google-offering-programming-courses-for-free-including-android-developement-course/"&gt;Google Code University &lt;/a&gt;&amp;nbsp;- Offers courses on C++, Python, Android, Web security, lots of good stuff comes with slides, assignments and videos.&lt;br /&gt;
&lt;br /&gt;
Let's face it programmers are probably not the best designers in the world (me included), hope the following 2 links can help out.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://speckyboy.com/2010/09/02/20-useful-free-pdf-ebooks-for-designers-and-bloggers/"&gt;20 useful free pdf books for designers and bloggers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dzone.com/links/r/10_resources_for_designchallenged_programmers.html"&gt;10 resources for design challenged programmers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-3197977908349940411?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/qBZinwPgtOs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/3197977908349940411/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/09/lotw-6-sept-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3197977908349940411?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/3197977908349940411?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/qBZinwPgtOs/lotw-6-sept-2010.html" title="LOTW - 6 Sept 2010" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/09/lotw-6-sept-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4FRXc8cSp7ImA9Wx5QE0Q.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-6748094815733836355</id><published>2010-09-02T10:18:00.001+08:00</published><updated>2010-09-02T10:18:34.979+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-02T10:18:34.979+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>What's your motivation for programming?</title><content type="html">Studies since the 1970s that show that&lt;a href="http://en.wikipedia.org/wiki/Motivation#Intrinsic_and_extrinsic_motivation"&gt; Intrinsic motivation&lt;/a&gt; (from within) rather than &lt;a href="http://en.wikipedia.org/wiki/Motivation#Intrinsic_and_extrinsic_motivation"&gt;Extrinsic motivation&lt;/a&gt; (external factors like money) is the main motivation for people doing good work. In &lt;a href="http://www.amazon.com/Drive-Surprising-Truth-About-Motivates/dp/1594488843?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Drive: The Surprising Truth About What Motivates Us&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1594488843" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, Daniel Pink talks about the various research and studies and even gave some suggestions on how to improve your workplace, if you are a lead or manager go read the book. If you don't have time to read the book, RSA has a nice video (about 10 mins) that sums up book quite nicely.&lt;br /&gt;
&lt;br /&gt;
&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/u6XAPnuFjJc?fs=1&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/u6XAPnuFjJc?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
So what is your motivation for doing your job as a programmer? What are some of the motivations that you have for continuing to do programming as work? Here are some that I came up with, feel free to add more in the comments section.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Joy of knowing that there is always something new to learn &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I am always amaze that there are still so many things that I can learn in this field, and that's a motivation for me, because I will always have some new framework, language, technology to play with. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. Joy of finding a solution to a problem.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Solving a problem be it in programming, performance or a process issue is always satisfying &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Joy of seeing a user liking your solution.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
For most of us, we program for real users and its a good feeling when a user tells you that you did good work. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. Joy of doing work with people that you like or like minded.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;I am glad to be able to work with a bunch of guys who I like and feel comfortable with, the pantry talks and the lunches help make for a more interesting day. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-6748094815733836355?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/3xUI0rwEH94" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/6748094815733836355/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/09/what-are-programmers-intrinsic.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/6748094815733836355?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/6748094815733836355?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/3xUI0rwEH94/what-are-programmers-intrinsic.html" title="What's your motivation for programming?" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/09/what-are-programmers-intrinsic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEAQX8-fSp7ImA9Wx5QEks.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-2518982106880982963</id><published>2010-08-31T08:51:00.001+08:00</published><updated>2010-08-31T21:50:40.155+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-31T21:50:40.155+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>Exploring Google Analytics Api - 1 Client Login</title><content type="html">Blogger dosen't have a "popular posts" widget, and since I am using Google Analytics and there is a popluar posts metric, i decided to roll my own and host it using App Engine. I am roughly following the examples on the Google Analytics Api site but adapting it for AppEngine use.&lt;br /&gt;
&lt;br /&gt;
There are 3 methods to authenticate to Google Analytics and retrieving data.&lt;br /&gt;
1. Client Login&lt;br /&gt;
2. AuthSub&lt;br /&gt;
3. OAuth&lt;br /&gt;
&lt;br /&gt;
The explanation for all these 3 types are provided &lt;a href="http://code.google.com/apis/gdata/docs/auth/overview.html"&gt;here&lt;/a&gt;&amp;nbsp;with the various scenarios on what to use.&lt;br /&gt;
&lt;br /&gt;
If you are planning to serve out data from a server you should use OAuth, its the most secure and there is no passing of passwords anywhere, however since I am still playing around with the API and I don't want to mess with the complexities of OAuth authentication. I will be using ClientLogin for now.&lt;br /&gt;
&lt;br /&gt;
Google does provide client libraries in Java for accessing the Google Data API (which Analytics is a part of), however they don't play well with App Engine because they use some&amp;nbsp;restricted&amp;nbsp;classes. So we will have to go with the &lt;a href="http://code.google.com/apis/analytics/docs/gdata/gdataAuthentication.html#understandingClientLogin"&gt;protocol &lt;/a&gt;version, i.e using POST, GET calls to get the data.&lt;br /&gt;
&lt;br /&gt;
You will need to POST the following data to&amp;nbsp;&lt;i&gt;https://www.google.com/accounts/ClientLogin&lt;/i&gt; with the following parameters.The table below from Google shows the parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;table style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-collapse: collapse; border-color: initial; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; clear: right; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 16px; margin-bottom: 0px; margin-left: 1px; margin-right: 0px; margin-top: 1em;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;" width="20%"&gt;&lt;strong&gt;accountType&lt;/strong&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;Type of account to request authorization for. The default is&amp;nbsp;&lt;code style="color: #007000; font-family: monospace; font-size: 10pt;"&gt;GOOGLE&lt;/code&gt;, which is currently the only option supported by Google Analytics.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class="alt"&gt;&lt;td style="background-attachment: initial; background-clip: initial; background-color: whitesmoke; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;&lt;strong&gt;Email&lt;/strong&gt;&lt;/td&gt;&lt;td style="background-attachment: initial; background-clip: initial; background-color: whitesmoke; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;The user's email address. It must include the domain (e.g. joe@gmail.com).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;&lt;strong&gt;Passwd&lt;/strong&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;The user's password.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class="alt"&gt;&lt;td style="background-attachment: initial; background-clip: initial; background-color: whitesmoke; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;&lt;strong&gt;service&lt;/strong&gt;&lt;/td&gt;&lt;td style="background-attachment: initial; background-clip: initial; background-color: whitesmoke; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;The Analytics service name is&amp;nbsp;&lt;code style="color: #007000; font-family: monospace; font-size: 10pt;"&gt;analytics&lt;/code&gt;. (For other service names, see the&amp;nbsp;&lt;a href="http://code.google.com/support/bin/answer.py?answer=62712&amp;amp;topic=10433" style="color: #0000cc;"&gt;service name list&lt;/a&gt;.)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;&lt;strong&gt;source&lt;/strong&gt;&lt;/td&gt;&lt;td style="background-color: white; border-bottom-color: rgb(187, 187, 187); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(187, 187, 187); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(187, 187, 187); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(187, 187, 187); border-top-style: solid; border-top-width: 1px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; padding-top: 6px; text-align: left; vertical-align: top;"&gt;A string identifying your client application in the form&amp;nbsp;&lt;var&gt;companyName&lt;/var&gt;-&lt;var&gt;applicationName&lt;/var&gt;-&lt;var&gt;versionID&lt;/var&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Table 1: Post Parameters (Credits &lt;a href="http://code.google.com/apis/analytics/docs/gdata/gdataAuthentication.html"&gt;Google&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
In App Engine, to do POST/GET request you will have to go quite low level, you will need to use the URL and HttpURLConnection classes. Below is a sample of using the classes to do a POST to the client URL.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;URL loginUrl=new URL("https://www.google.com/accounts/ClientLogin");
   
StringBuffer message=new StringBuffer();
message.append("accountType=GOOGLE&amp;amp;");
message.append("Email="+URLEncoder.encode(username)+"&amp;amp;");
message.append("Passwd="+URLEncoder.encode(password)+"&amp;amp;");
message.append("service=analytics&amp;amp;");
message.append("source=stephenonsoftware-sitedata-1");
   
HttpURLConnection connection=(HttpURLConnection) loginUrl.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
   
OutputStreamWriter writer=new OutputStreamWriter(connection.getOutputStream());
writer.write(message.toString());
   
writer.close();
   
if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){
BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));
    
String line;
StringBuffer result=new StringBuffer();
while((line=reader.readLine())!=null){
 result.append(line);
}
reader.close();
return getAuthString(result.toString());
}else{
return "";
}
&lt;/pre&gt;&lt;br /&gt;
You will get back a long string containg the SID,LSID and Auth parts, you will just need the Auth part so just split the string at 'Auth=' and you can get the authentication token, you will need this token to request for the data from Analytics.&lt;br /&gt;
&lt;br /&gt;
Now you have successfully login using ClientLogin, next I will post about how to get your account details from analytics.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;a href="http://code.google.com/appengine/docs/java/urlfetch/usingjavanet.html"&gt;Using java.net&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-2518982106880982963?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/Nu7noe0cY5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/2518982106880982963/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/08/exploring-google-analytics-api-client.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/2518982106880982963?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/2518982106880982963?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/Nu7noe0cY5Q/exploring-google-analytics-api-client.html" title="Exploring Google Analytics Api - 1 Client Login" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/08/exploring-google-analytics-api-client.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEMQns-cSp7ImA9Wx5QEU8.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-8284372497153818191</id><published>2010-08-30T07:14:00.001+08:00</published><updated>2010-08-30T07:14:43.559+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T07:14:43.559+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOTW" /><title>LOTW - 30 Aug</title><content type="html">&lt;a href="http://www.renaebair.com/2010/08/11/my-husband-is-a-programmer-i-have-no-idea-what-that-means/"&gt;“My husband is a programmer; I have no idea what that means.”&lt;/a&gt; - Nice blog post about a non programmer and a programmer geek getting together and learning about each other. I agree with Renae, the important thing is to take an interest in what your other half does during work and his hobbies.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="breadcrumb-item"&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/jmeier/archive/2010/08/16/patterns-and-practices-for-improving-personal-productivity-time-management-and-effectiveness.aspx"&gt;Patterns and Practices for Improving Personal Productivity, Time Management, and Effectiveness&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://article.gmane.org/gmane.comp.java.clojure.user/34269" target="_blank"&gt;Tim     Daly writes about writing big Lisp applications&lt;/a&gt;.- Tim Daly responds to Steve Yegge's &lt;a href="http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html"&gt;Lisp is not an acceptable Lisp&lt;/a&gt;. I let you make your own decision about whether Lisp is good. For me as a developer/programmer wanting to have more "breath" in your knowledge (I guess most of us are brought up in the OO kind of world), you owe your self to go try one of the functional languages, for me I am going to try Common Lisp and Clojure.&lt;br /&gt;
&lt;h2&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;a href="http://pascal%20costanza%27s%20highly%20opinionated%20guide%20to%20lisp/"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Pascal Costanza's Highly Opinionated Guide to Lisp&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&amp;nbsp;- Pascal talks about why use Lisp and some of the common pitfalls and where to find more information on your discovery of Lisp. I was always a bit confused by the backquote operator ` in Lisp, his explanation is the easiest I have found. Gotta spend more time reading &lt;a href="http://www.amazon.com/Practical-Common-Lisp-Peter-Seibel/dp/1590592395?ie=UTF8&amp;amp;tag=stephensblo0a-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Practical Common Lisp&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=stephensblo0a-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1590592395" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt; !&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-8284372497153818191?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/viN9caH0yqs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/8284372497153818191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/08/lotw-30-aug.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8284372497153818191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/8284372497153818191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/viN9caH0yqs/lotw-30-aug.html" title="LOTW - 30 Aug" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/08/lotw-30-aug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYDRXYzcCp7ImA9Wx5RFUg.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-4018630634385506705</id><published>2010-08-23T16:46:00.000+08:00</published><updated>2010-08-23T16:46:14.888+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-23T16:46:14.888+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LOTW" /><title>LOTW - 23 Aug 2010</title><content type="html">&lt;a href="http://www.google.com.sg/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=oralce+sues+google"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Oracle Sues Googl&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;e - This must be the big thing this past week.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://news.cnet.com/8301-30684_3-20013546-265.html"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;CNet's Report&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; has a copy of the letter from Oracle's lawyers.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.dzone.com/links/r/oracle_and_open_source_a_list_of_grievances.html"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Top 5&amp;nbsp;grievances&amp;nbsp;with Oracle&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;- &amp;nbsp;A list of complaints about oracle and open source.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;James Gosling foretold&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.dzone.com/links/r/google_calls_oracle_patent_suit_baseless_and_an_a.html"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Google saying that Oracle's suit is baseless&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.acm.uiuc.edu/sigops/roll_your_own/intro.html"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Writing an operating system&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - &amp;nbsp;Something that I always wanted to try. Lets put that in the todo list !&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.msteched.com/2010/NorthAmerica/DEV307"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;F# in Visual Studio&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - Functional programming is getting lots of press these days, for the JVM; Clojure and Scala and for .Net F#, the video shows how F# can be use most effectively and introduces F# features like &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;arallelism, succinct expressive syntax, rich access to .NET libraries.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;You can get the &lt;a href="http://developer.windowsphone.com/"&gt;beta Windows 7 Phone developer tools&lt;/a&gt; already. Singapore is one of the launch countries so we will have our own application marketplace here.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Scott Hanselman in his &lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode56VisualStudio2010AndNETFramework4TrainingKitCodeContractsParallelFrameworkAndCOMInterop.aspx?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29"&gt;56th Weekly source code&lt;/a&gt; talks about the Visual Studio 2010 training kit and some of the cool stuff in there. I was particularly interested in the Parallel Framework&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-4018630634385506705?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/QHxY0kknQOg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/4018630634385506705/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/08/lotw-23-aug-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/4018630634385506705?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/4018630634385506705?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/QHxY0kknQOg/lotw-23-aug-2010.html" title="LOTW - 23 Aug 2010" /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/08/lotw-23-aug-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHQnk_fip7ImA9Wx5SF0U.&quot;"><id>tag:blogger.com,1999:blog-6413936821755549970.post-1854568161379749632</id><published>2010-08-14T12:27:00.002+08:00</published><updated>2010-08-14T18:17:13.746+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-14T18:17:13.746+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Oracle sues Google over Android - Possible outcomes.</title><content type="html">Oracle finally sues Google over Java.&amp;nbsp;&lt;a href="http://news.cnet.com/8301-30684_3-20013546-265.html"&gt;CNET&lt;/a&gt; has a copy of the complaint letter from Oracle. Other than a list of patents that was&amp;nbsp;infringed&amp;nbsp;nothing much was said about how it was infringed. I always thought that with the coming of Android, Java finally has a great platform in the mobile arena, I know people will agree with me that Java ME sucks most of the time.&lt;br /&gt;
&lt;br /&gt;
I agree with &lt;a href="http://tirania.org/blog/archive/2010/Aug-13.html"&gt;Miguel &lt;/a&gt;that Java as a product has never been profitable for Sun, when Sun was around the big names in the J2EE app server market was Oracle, Bea and probably IBM that made money from selling middleware products. So i guess since &lt;a href="http://www.oracle.com/us/corporate/press/018363"&gt;Oracle paid quite abit for Sun&lt;/a&gt; and so they need to milk it for all it's worth.&lt;br /&gt;
&lt;br /&gt;
How will all this pan out? Below are my 4&amp;nbsp;guesses.&lt;br /&gt;
1. Google pays Oracle&lt;br /&gt;
Straight forward way to solve the problem, but that will mean anyone else who has the same idea as Google needs to cough up money big time and that affect's Java, although people might not be moving away quickly but stagnation may occur and that's bad for any language.&lt;br /&gt;
&lt;br /&gt;
2. Google goes to court and wins ! And all is well in the Android world.&lt;br /&gt;
Might be a long and drawn out battle, but sets the scene for even more innovation in the Java eco system. The thing is what will Oracle do about Java if it loses this battle.&lt;br /&gt;
&lt;br /&gt;
3. Google goes to court and lose, Google pays Oracle&lt;br /&gt;
Same as 1&lt;br /&gt;
&lt;br /&gt;
4. Google moves&amp;nbsp;Android&amp;nbsp;to alternative languages (Python, .Net).&lt;br /&gt;
That would be interesting, considering that Goggle is quite the advocate for Java and Python (look at App Engine). Would love to see Android supporting Python in the future, quite like how Symbian has some support for Python (although I think Symbian as a platform is dead also), the next closest alternative would be a move to C#, since they are quite close in terms of syntax and perhaps&amp;nbsp;popularity, and it&amp;nbsp;doesn't&amp;nbsp;cost much for a Java programmer to move to C#.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://feeds.feedburner.com/StephenOnSoftware"&gt;&lt;img border="0/" src="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/rss-85.png" /&gt;&lt;/a&gt;&lt;a href="http://www.twitter.com/stephenleejm"&gt;&lt;img border="0/" src="http://lh3.ggpht.com/_IWTPvXnAJ9g/TDFKToKrixI/AAAAAAAAAiA/zhGZwM_tDHc/twitter-85.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6413936821755549970-1854568161379749632?l=www.stephenonsoftware.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StephenOnSoftware/~4/xjw2SQimPT4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.stephenonsoftware.com/feeds/1854568161379749632/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.stephenonsoftware.com/2010/08/oracle-sues-google-over-android-wth.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1854568161379749632?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6413936821755549970/posts/default/1854568161379749632?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StephenOnSoftware/~3/xjw2SQimPT4/oracle-sues-google-over-android-wth.html" title="Oracle sues Google over Android - Possible outcomes." /><author><name>Stephen Lee</name><uri>https://profiles.google.com/106445025755682967609</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-ZYr5UeC8XAA/AAAAAAAAAAI/AAAAAAAAAtk/5CkTR3WK0uo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_IWTPvXnAJ9g/TDFKTRkv3lI/AAAAAAAAAh8/d5Gx3GB-pzM/s72-c/rss-85.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://www.stephenonsoftware.com/2010/08/oracle-sues-google-over-android-wth.html</feedburner:origLink></entry></feed>

