<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-15692829</id><updated>2017-04-04T11:31:17.993+08:00</updated><category term="iOS"/><category term="groovy"/><category term="android"/><category term="cocoa"/><category term="java"/><category term="mosc2011"/><category term="objective-c"/><category term="ubuntu"/><category term="andengine"/><category term="brew"/><category term="cocoa touch"/><category term="csv"/><category term="express"/><category term="extjs javascript pattern gui"/><category term="gae"/><category term="gaelyk"/><category term="grails"/><category term="grails ext ajax"/><category term="grails lucene java"/><category term="groovy java"/><category term="gwt"/><category term="iphone sdk"/><category term="macruby"/><category term="nerd"/><category term="node.js"/><category term="rails"/><category term="review books agile"/><category term="scala"/><category term="shit"/><category term="tomcat"/><category term="uicolor"/><category term="uiimageview"/><category term="xcode"/><title type='text'>Sh*tmores</title><subtitle type='html'>Muse about software engineering and life on the Internet</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default?start-index=26&amp;max-results=25'/><author><name>Teo Choong Ping</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>147</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15692829.post-2508886920092444572</id><published>2014-06-23T23:12:00.003+08:00</published><updated>2014-06-23T23:36:55.130+08:00</updated><title type='text'>Kiss-ass Principle</title><content type='html'>The steps to resolve a bug/error report can be broken down into 6 simple steps.&lt;br /&gt;&lt;div&gt;&lt;ol style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;li&gt;Clarify the problem&lt;/li&gt;&lt;li&gt;Implement temporary solution (if applicable)&lt;/li&gt;&lt;li&gt;Find root cause of the problem&lt;/li&gt;&lt;li&gt;Implement permanent solution&lt;/li&gt;&lt;li&gt;Verify solution with user&lt;/li&gt;&lt;li&gt;Implement preventive solution/action --make sure this problem doesn&#39;t repeat again&lt;/li&gt;&lt;li&gt;Send out summary of lesson learned &lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;A reckless programmer will only do at least 2 of the steps above and no more.&lt;/div&gt;&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;I don&#39;t like reckless programmers.&lt;/div&gt;&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;However when it comes to responding the bug/error report back to the user directly, I have a helpful format what I call &lt;i&gt;&#39;Kiss-ass Principle&#39;&lt;/i&gt;.&lt;br /&gt;It is designed to make the user feel respected. And happy.&lt;br /&gt;A happy user will support you in more ways than you can imagine.&lt;br /&gt;&lt;br /&gt;Kiss-ass Principle can be plainly broken to roughly 7 steps. &lt;/div&gt;&lt;div style=&quot;-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-family: arial; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;ol&gt;&lt;li&gt;Acknowledge the user problem feedback and clarify --&lt;span style=&quot;color: magenta;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&quot;Thanks Sam, what/how/where/when you see that error?&quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Let them know when you are looking into this problem --&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&quot;OK, I am doing this shit currently but will look into this in 5 mins time&quot;&lt;/span&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;or&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&quot;Ok, investigating now&quot;&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Let them know you found the source of the problem --&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&quot;Ah I see the problem now. It is because of la la la la&quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: black;&quot;&gt;Tell them when it will be fixed --&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&quot;This bug will be fixed in the next server update&quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: black;&quot;&gt;Tell them it is fixed and request the user verify --&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&quot;OK, updated the server with the fix, can you try again&quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: black;&quot;&gt;Reassure the user the problem is seriously taken care of --&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: magenta;&quot;&gt;&quot;This is a shitty problem but it is fixed and should be fine from now on&quot;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: black;&quot;&gt;Say sorry if you have to.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/2508886920092444572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=2508886920092444572' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2508886920092444572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2508886920092444572'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2014/06/kiss-ass-principle.html' title='Kiss-ass Principle'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-8881793354692530897</id><published>2014-02-01T22:41:00.001+08:00</published><updated>2014-02-02T10:12:36.627+08:00</updated><title type='text'>Book review: Groovy 2 Cookbook</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.packtpub.com/groovy-2-cookbook/book&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://dgdsbygo8mp3h.cloudfront.net/sites/default/files/imagecache/productview_larger/9366OS_Cover.jpg&quot; height=&quot;320&quot; title=&quot;&quot; width=&quot;262&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;(Disclaimer: I got a copy of Groovy 2 Cookbook from Packt for review)&lt;br /&gt;&lt;br /&gt;A good cookbook will help you learn something quickly, or guide you to solve a problem in simpler way. On both count this book has done a good job.&lt;br /&gt;&lt;br /&gt;I find the &#39;Using Groovy Language features&#39; chapter easy to follow and will be helpful for newbies to learn Groovy. However I think they missed out focused topics on &lt;a href=&quot;http://groovy.codehaus.org/Collections&quot; target=&quot;_blank&quot;&gt;Collections&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The chapter on Meta-programming and DSL is particularly helpful. I have learned new tricks on applying DSL in my day to day work.&lt;br /&gt;&lt;br /&gt;The chapter on concurrent programming is decent but could be better with simpler examples. This is the chapter where it reads like a overview of what gpars can do for you but if you don&#39;t have a good grasp of concurrent programming with groovy then the examples can be confusing. I wouldn&#39;t recommend newcomers to learn &lt;a href=&quot;http://gpars.codehaus.org/&quot; target=&quot;_blank&quot;&gt;gpars&lt;/a&gt; from this book and instead learn from the online doc directly.&lt;br /&gt;&lt;br /&gt;Maybe it is the nature of Groovy where the language is already quite easy to read and understand -- this book can be seen as struggling to compete with the very concise and clear online documentation.&lt;br /&gt;&lt;br /&gt;As somebody who has been programming with Groovy for many years, I would recommend this book to Java programmer who would like to get a good grip of Groovy language quickly. Otherwise this book offers little to seasoned Groovy programmers.</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/8881793354692530897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=8881793354692530897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8881793354692530897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8881793354692530897'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2014/02/book-review-groovy-2-cookbook.html' title='Book review: Groovy 2 Cookbook'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-8050273342515086646</id><published>2013-11-07T15:56:00.003+08:00</published><updated>2013-12-21T12:12:06.864+08:00</updated><title type='text'>Instant Handlebar.js book review</title><content type='html'>(Got a chance to review &lt;a href=&quot;http://www.amazon.com/gp/product/1783282657/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1783282657&amp;amp;linkCode=as2&amp;amp;tag=seymourcakes-20%22%3EInstant%20Handlebars.js%3C/a%3E%3Cimg%20src=%22http://ir-na.amazon-adsystem.com/e/ir?t=seymourcakes-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1783282657%22%20width=%221%22%20height=%221%22%20border=%220%22%20alt=%22%22%20style=%22border:none%20!important;%20margin:0px%20!important;%22%20/%3E&quot; target=&quot;_blank&quot;&gt;this book&lt;/a&gt; last week, and here is it)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;margin-left: -5px;&quot;&gt;&lt;/span&gt;        &lt;b&gt;Easy and very fast read&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; &lt;br /&gt;Good for developers who are looking to learn better JS template solution.&lt;br /&gt;Also good for more in-depth information after reading various tutorial online.&lt;br /&gt;The actual Handlebar.js is pretty good too so this short book is more like a  introduction to the power of Handlebar.js before you dig into the  official doc. &lt;br /&gt;&lt;br /&gt;&lt;iframe class=&quot;gxypienivjxazdhxyxtq pimilwukxzmsnjgvethe&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://rcm-na.amazon-adsystem.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=seymourcakes-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=1783282657&quot; style=&quot;height: 240px; width: 120px;&quot;&gt;&lt;/iframe&gt; </content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/8050273342515086646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=8050273342515086646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8050273342515086646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8050273342515086646'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2013/11/instant-handlebarjs-book-review.html' title='Instant Handlebar.js book review'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-2159547039819361938</id><published>2013-07-15T12:59:00.004+08:00</published><updated>2013-07-15T12:59:47.315+08:00</updated><title type='text'>One thing you need to do to stop being sucky</title><content type='html'>Stop waiting for &lt;i&gt;permission&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;You don&#39;t need the company budget to get the X gadget that will increase productivity by Y-fold.&lt;br /&gt;&lt;br /&gt;You don&#39;t need your boss to &#39;okay&#39; to do that awesome thing.&lt;br /&gt;&lt;br /&gt;You don&#39;t need to make your colleagues happy -- ship it or fuck off.&lt;br /&gt;&lt;br /&gt;You don&#39;t have to be nice. It&#39;s optional. Get shits done.&lt;br /&gt;&lt;br /&gt;You don&#39;t need permission from God to set out to change the world. Ask for blessing and forgiveness.&lt;br /&gt;God loves you anyway.&lt;br /&gt;&lt;br /&gt;You don&#39;t need permission.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/2159547039819361938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=2159547039819361938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2159547039819361938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2159547039819361938'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2013/07/one-thing-you-need-to-do-to-stop-being.html' title='One thing you need to do to stop being sucky'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-2355757637777178871</id><published>2013-06-06T14:15:00.004+08:00</published><updated>2013-06-06T14:18:52.514+08:00</updated><title type='text'>When sending e-mail</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;userContent&quot; data-ft=&quot;{&amp;quot;tn&amp;quot;:&amp;quot;K&amp;quot;}&quot;&gt;If it&#39;s too long, break it down into list&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;userContent&quot; data-ft=&quot;{&amp;quot;tn&amp;quot;:&amp;quot;K&amp;quot;}&quot;&gt;If it&#39;s a long instruction, break it down into steps&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;userContent&quot; data-ft=&quot;{&amp;quot;tn&amp;quot;:&amp;quot;K&amp;quot;}&quot;&gt;Number your list&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;userContent&quot; data-ft=&quot;{&amp;quot;tn&amp;quot;:&amp;quot;K&amp;quot;}&quot;&gt;Keep it &lt;b&gt;very&lt;/b&gt; short -- let&#39;s leave essay to schools&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;userContent&quot; data-ft=&quot;{&amp;quot;tn&amp;quot;:&amp;quot;K&amp;quot;}&quot;&gt;At the end of e-mail, suggest/recommend/tell the reader what to do next &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Now go send e-mail like a boss.&lt;span class=&quot;userContent&quot; data-ft=&quot;{&amp;quot;tn&amp;quot;:&amp;quot;K&amp;quot;}&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/2355757637777178871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=2355757637777178871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2355757637777178871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2355757637777178871'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2013/06/when-sending-e-mail.html' title='When sending e-mail'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-5730729431335020975</id><published>2013-06-02T17:07:00.001+08:00</published><updated>2013-06-13T00:38:28.785+08:00</updated><title type='text'>Why we need the visionaries to save us (the nerds)</title><content type='html'>&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;I met many young aspiring startup founders  this weekends at AngelHack SG. I was impressed. I was also disturbed by  the lack of visionary thinking among them.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;Programmer nerds are by default, clever people. You need a certain level of intelligence to code shit. And you need visionaries.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;b&gt;Need.&lt;/b&gt; It&#39;s not optional.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;You can code the damn thing -- the algorithm, the SQL data mapping, CSS framework, angular-shit, and what not. You make it pretty and fast. And you proved that it works.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;You, the awesome programmer is going to impress the judges and some of them will fall off their chairs. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;Haha.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;No no. It is different when you are hacking in events like AngelHack. Unless you can complete the whole damn thing -- the best bang for bucks is the slides! But better make sure you can code the damn thing okay.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;After 24 or 48 hours labor, you have to present to a panel of angels and investors that need to understand what you got for them.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;You window of opportunity is very small.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;I mean, how long does it take you to pee? Well you got less time than that. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;But I digress, the point is not about pitching in the shortest time possible.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;It is about making them see the value of your stuff.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;Show is better than tell.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;You got to show what you got -- not tell.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;But if you only have the server running and you are showing them the logs flying everywhere, you get an F.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;F for fail.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/yURNUwmslGk?feature=player_embedded&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt; &lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;I know you are an awesome programmer, but if you don&#39;t have the chops to deliver your idea out to the world, you need a vision guy to do it for you.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;The vision guy will &lt;i&gt;sell&lt;/i&gt; your idea.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;This vision guy will &lt;i&gt;do the slides&lt;/i&gt; for you.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;For you!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;If you can&#39;t find any then maybe it&#39;s about time you learn how to be a visionary.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;Start &lt;a href=&quot;https://www.youtube.com/watch?feature=player_detailpage&amp;amp;v=jSlwuafyUUo#t=258s&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/5730729431335020975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=5730729431335020975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5730729431335020975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5730729431335020975'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2013/06/why-we-need-visionaries-to-save-us-nerds.html' title='Why we need the visionaries to save us (the nerds)'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/yURNUwmslGk/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-1995097550202756951</id><published>2013-05-14T21:40:00.002+08:00</published><updated>2013-05-14T21:40:44.973+08:00</updated><title type='text'>Send GCM notification from Clojure</title><content type='html'>&lt;script src=&quot;https://gist.github.com/seymores/5575940.js&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/1995097550202756951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=1995097550202756951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/1995097550202756951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/1995097550202756951'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2013/05/send-gcm-notification-from-clojure.html' title='Send GCM notification from Clojure'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-6343548975679889097</id><published>2013-04-12T10:08:00.001+08:00</published><updated>2013-04-12T10:08:35.778+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="tomcat"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Simplest solution to redirect Tomcat port 8080 to port 80</title><content type='html'>sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080&lt;br /&gt;&lt;br /&gt;(Tested to work fine on Ubuntu 12.04, 12.10)</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/6343548975679889097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=6343548975679889097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/6343548975679889097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/6343548975679889097'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2013/04/simplest-solution-to-redirect-tomcat.html' title='Simplest solution to redirect Tomcat port 8080 to port 80'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-5736876243504923804</id><published>2012-12-12T11:46:00.002+08:00</published><updated>2012-12-12T11:49:09.207+08:00</updated><title type='text'>How to check if a 3rd party or app dependency is available</title><content type='html'>I have seen some nasty and complicated workaround to find out if a certain app or dependency is installed.&lt;br /&gt;&lt;br /&gt;Here is the simpler and better way to find out if the app is already in your Android device by using &lt;a href=&quot;http://developer.android.com/reference/android/content/pm/PackageManager.html&quot; target=&quot;_blank&quot;&gt;PackageManager&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;https://gist.github.com/4264698.js&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/5736876243504923804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=5736876243504923804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5736876243504923804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5736876243504923804'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2012/12/how-to-check-if-3rd-party-or-app.html' title='How to check if a 3rd party or app dependency is available'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-3836335839463359745</id><published>2012-11-25T22:05:00.000+08:00</published><updated>2012-11-25T22:29:22.032+08:00</updated><title type='text'>Project Management in 10 steps.</title><content type='html'>&lt;ol&gt;&lt;/ol&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;I have been tasked with manag&lt;span style=&quot;font-size: small;&quot;&gt;ing small team of software developers on&lt;span style=&quot;font-size: small;&quot;&gt; and off over the years&lt;span style=&quot;font-size: small;&quot;&gt;. &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Projec&lt;span style=&quot;font-size: small;&quot;&gt;t Management is&lt;/span&gt;&lt;/span&gt; always about getting things done right&lt;span style=&quot;font-size: small;&quot;&gt; and&lt;/span&gt; on time. If you got these 2 right then you usually don&#39;t&lt;span style=&quot;font-size: small;&quot;&gt; have to worry a&lt;span style=&quot;font-size: small;&quot;&gt;bout over-budget.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Any PM &lt;span style=&quot;font-size: small;&quot;&gt;can be broken down into th&lt;span style=&quot;font-size: small;&quot;&gt;ese 10 steps&lt;span style=&quot;font-size: small;&quot;&gt; assuming the project &lt;span style=&quot;font-size: small;&quot;&gt;time estimation has been determined early on.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Find out the goals, or what to get done. If the goals are not clear, don&#39;t proceed.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Find out when the project must finish, a.k.a deadline.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Make a quick mental model of tasks to the time available. If you are really familiar with the works then break the tasks down by hours, else break it by days. If things are vague, use &quot;week&quot;. &lt;i&gt;This is the point where you either get that comfortable feeling that things will go alright, or getting the sick feeling that you are screwed.&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Find out who to report to. This is the person (or persons) you send progress report to.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Find out who is on the team or do you have a team to take on the work.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Assemble the team and brief everyone on about the project.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Create the project structure, the git/svn repo, the bug tracking and give everyone the necessary access to these systems.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Assign tasks to everyone and put a date on the tasks. Tasks without date should be moved to the side for now. I recommend Kanban system of placing stuff.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;M&lt;/span&gt;onitor team progress, report progress and updates to stakeholder. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Get out of the way so your team can do their work.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Further discussion &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Getting out of the way is important. If you hire right and the team is in good shape, there is absolutely no reason for you to micromanage.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;No, you don&#39;t have to make everyone happy.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Kanban and Scrum fits my organization. You may already be doing these things without you knowing their common names.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/3836335839463359745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=3836335839463359745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/3836335839463359745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/3836335839463359745'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2012/11/project-management-in-10-steps.html' title='Project Management in 10 steps.'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-7162789065887573052</id><published>2012-02-06T00:41:00.001+08:00</published><updated>2012-02-06T10:31:31.678+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="express"/><category scheme="http://www.blogger.com/atom/ns#" term="node.js"/><title type='text'>Node.js express file upload -- uploading file the easy way</title><content type='html'>Forget all those old example on how to upload file. Express provides a very easy and simple to use file upload feature that every newbie (like me) should know and use.&lt;br /&gt;&lt;br /&gt;Step 1:&lt;br /&gt;Your form must be multipart.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;color: #741b47; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;&lt;/span&gt;form&amp;nbsp; enctype=&quot;multipart/form-data&quot; &lt;/div&gt;&lt;div style=&quot;color: #741b47; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;...&amp;gt;&lt;br /&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;lt;&lt;/span&gt;input name=&quot;uploadfile&quot; type=&quot;file /&amp;gt; &lt;/div&gt;&lt;br /&gt;Step 2:&lt;br /&gt;Here comes the req.files magic.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;code&gt;app.post(&#39;/upload&#39;, function(req, res) {&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;color: #741b47; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; console.log( &lt;b&gt;req.files&lt;/b&gt;.uploadfile );&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; console.log( &lt;/span&gt;&lt;b style=&quot;color: #741b47;&quot;&gt;req.files&lt;/b&gt;&lt;span style=&quot;color: #741b47;&quot;&gt;.uploadfile.name );&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // use fs.rename to move the file and unlink after that&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;});&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Internally express is using formidable to do handle the file upload. But it&#39;s a surprise to me that formidable doc is a piece of shit, and express is obviously not advertising this feature enough.&lt;/code&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/7162789065887573052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=7162789065887573052' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/7162789065887573052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/7162789065887573052'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2012/02/nodejs-express-file-upload-uploading.html' title='Node.js express file upload -- uploading file the easy way'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-8367406449209139658</id><published>2012-01-11T09:30:00.000+08:00</published><updated>2012-01-11T09:30:06.435+08:00</updated><title type='text'>Looking for Java/Groovy/Ruby/Python hacker</title><content type='html'>Hi, we are looking for a guy (or girl) who can hack Java/Groovy/Ruby/Python -- a generalist.&lt;br /&gt;&lt;br /&gt;You must love to learn &amp;amp; and work on new stuff -- pick up advance Javascript, Android development, work on iOS projects, solve big data problems with mongodb, HTML5/CSS3 etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You will have fun, glory, and opportunities to get your hand dirty on the latest techs. &lt;br /&gt;&lt;br /&gt;We are based in Singapore and expect you to be here. We will pay you good, and hope you will grow with us.&lt;br /&gt;&lt;br /&gt;Interested? PM me on my Twitter &lt;a href=&quot;https://twitter.com/#%21/seymores&quot;&gt;@seymores&lt;/a&gt; or &lt;a href=&quot;http://www.linkedin.com/profile/view?id=29079416&quot;&gt;Linkedin&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/8367406449209139658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=8367406449209139658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8367406449209139658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8367406449209139658'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2012/01/looking-for-javagroovyrubypython-hacker.html' title='Looking for Java/Groovy/Ruby/Python hacker'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-5930231805908740344</id><published>2011-09-23T15:02:00.004+08:00</published><updated>2011-09-23T15:02:42.959+08:00</updated><title type='text'>DLog</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;#define DLog(fmt, ...) NSLog((@&quot;%s [Line %d] &quot; fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/5930231805908740344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=5930231805908740344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5930231805908740344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5930231805908740344'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/09/dlog.html' title='DLog'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-8494093444616850908</id><published>2011-09-20T21:57:00.001+08:00</published><updated>2011-09-20T21:57:39.797+08:00</updated><title type='text'>Simple Scala IRC Client</title><content type='html'>Direct and simple port of a typical Java IRC client to Scala. Notice the break. Consider this iteration 1 to learn Scala. :-)&lt;br /&gt;&lt;script src=&quot;https://gist.github.com/1229114.js?file=IrcClient.scala&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/8494093444616850908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=8494093444616850908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8494093444616850908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8494093444616850908'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/09/simple-scala-irc-client.html' title='Simple Scala IRC Client'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-3088582502260191732</id><published>2011-09-05T00:06:00.000+08:00</published><updated>2011-09-05T00:06:14.852+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="brew"/><category scheme="http://www.blogger.com/atom/ns#" term="scala"/><title type='text'>Homebrew install formula for Scala 2.9.1 final</title><content type='html'>Save this homebrew formula to /usr/local/Library/Formula/scala2.9.1.rb. Then &#39;brew install scala2.9.1&#39; from command line.&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;https://gist.github.com/1193071.js?file=scala-2.9.1.final&quot;&gt; &lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/3088582502260191732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=3088582502260191732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/3088582502260191732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/3088582502260191732'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/09/homebrew-install-formula-for-scala-291.html' title='Homebrew install formula for Scala 2.9.1 final'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-8707286516760738535</id><published>2011-08-04T15:33:00.000+08:00</published><updated>2011-08-04T15:33:06.608+08:00</updated><title type='text'>UI Engineer (SG)</title><content type='html'>&lt;b&gt;UI Engineer (Base in Singapore)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We are a successful web and mobile development consultancy seeking to bring on a UI engineer to assist with front-end web development. Our work environment is both fast-paced and fun.&lt;br /&gt;&lt;br /&gt;An ideal candidate should have these capabilities:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ability to communicate effectively in English. Mandarin is helpful but not mandatory.&lt;/li&gt;&lt;li&gt;Very solid HTML and CSS skills. You must live and breathe it.&lt;/li&gt;&lt;li&gt;JavaScript - understand concepts like scoping and declaration hoisting&lt;/li&gt;&lt;li&gt;Understand the differences between browser implementations of HTML, CSS, and JS&lt;/li&gt;&lt;li&gt;Reasonably adept with Photoshop &lt;/li&gt;&lt;/ul&gt;To be clear, this is not a web design position. It involves client-side development and implementation of designs.&lt;br /&gt;&lt;br /&gt;This is a full-time position based in Singapore (S088853). &lt;br /&gt;&lt;br /&gt;To apply, please email a resume/CV to hr017@favoritemedium.com and use &#39;SG UI Engineer [2011Q3]&#39; as the email subject. Include links to Twitter and/or Github accounts, if applicable.</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/8707286516760738535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=8707286516760738535' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8707286516760738535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8707286516760738535'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/08/ui-engineer-sg.html' title='UI Engineer (SG)'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-264886584452037734</id><published>2011-07-09T23:50:00.002+08:00</published><updated>2011-07-09T23:50:28.273+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gae"/><category scheme="http://www.blogger.com/atom/ns#" term="gaelyk"/><category scheme="http://www.blogger.com/atom/ns#" term="groovy"/><category scheme="http://www.blogger.com/atom/ns#" term="mosc2011"/><title type='text'>MOSC2011: Programming Google App Engine with Gaelyk</title><content type='html'>&lt;div style=&quot;width:425px&quot; id=&quot;__ss_8552292&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/seymores/google-app-engine-with-gaelyk&quot; title=&quot;Google App Engine with Gaelyk&quot;&gt;Google App Engine with Gaelyk&lt;/a&gt;&lt;/strong&gt;&lt;object id=&quot;__sse8552292&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mosc11-gaelyk-110709104021-phpapp01&amp;stripped_title=google-app-engine-with-gaelyk&amp;userName=seymores&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed name=&quot;__sse8552292&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mosc11-gaelyk-110709104021-phpapp01&amp;stripped_title=google-app-engine-with-gaelyk&amp;userName=seymores&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/seymores&quot;&gt;Seymour Cakes&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/264886584452037734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=264886584452037734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/264886584452037734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/264886584452037734'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/07/mosc2011-programming-google-app-engine.html' title='MOSC2011: Programming Google App Engine with Gaelyk'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-794659316278389724</id><published>2011-05-30T15:34:00.003+08:00</published><updated>2011-05-31T00:43:12.131+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cocoa"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="uicolor"/><title type='text'>Custom UIColor from hex value</title><content type='html'>This is how to convert hex to uicolor for iOS/iPhone development.&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;https://gist.github.com/998562.js?file=gistfile1.txt&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/794659316278389724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=794659316278389724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/794659316278389724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/794659316278389724'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/custom-uicolor-from-hex-value.html' title='Custom UIColor from hex value'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-8664533641799284167</id><published>2011-05-26T15:20:00.001+08:00</published><updated>2011-05-26T15:20:43.687+08:00</updated><title type='text'>Where I sit and work</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-6-OzHBMYE10/Td3-9a2XRuI/AAAAAAAAA0I/DJQHSn8C69I/s1600/IMG_1867.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-6-OzHBMYE10/Td3-9a2XRuI/AAAAAAAAA0I/DJQHSn8C69I/s1600/IMG_1867.jpg&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;How about you guys? &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/8664533641799284167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=8664533641799284167' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8664533641799284167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/8664533641799284167'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/where-i-sit-and-work.html' title='Where I sit and work'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-6-OzHBMYE10/Td3-9a2XRuI/AAAAAAAAA0I/DJQHSn8C69I/s72-c/IMG_1867.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-6195309528138301285</id><published>2011-05-24T17:39:00.001+08:00</published><updated>2011-05-24T17:40:36.666+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="nerd"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><title type='text'>What happens when you read a lot of books?</title><content type='html'>You buy more books of course.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-5AuFZ6r4XAs/Tdt8obkfSjI/AAAAAAAAA0A/EUps17VwkE0/s1600/Screen+shot+2011-05-24+at+PM+05.37.06.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-5AuFZ6r4XAs/Tdt8obkfSjI/AAAAAAAAA0A/EUps17VwkE0/s1600/Screen+shot+2011-05-24+at+PM+05.37.06.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;For the rest of the interesting video, go &lt;a href=&quot;http://www.youtube.com/watch?v=E7qgiEMXTQQ&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/6195309528138301285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=6195309528138301285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/6195309528138301285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/6195309528138301285'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/what-happen-when-you-read-lot-of-books.html' title='What happens when you read a lot of books?'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-5AuFZ6r4XAs/Tdt8obkfSjI/AAAAAAAAA0A/EUps17VwkE0/s72-c/Screen+shot+2011-05-24+at+PM+05.37.06.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-2850247827136911241</id><published>2011-05-24T15:21:00.000+08:00</published><updated>2011-05-24T15:21:55.754+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="groovy"/><title type='text'>AndroidManifest.xml file decompressor</title><content type='html'>If you ever need to extract out the string from AndroidManifest.xml from your apk file, and you happen to need it to be in Groovy, use this. I hope this help someone out there. Thanks to &lt;a href=&quot;http://stackoverflow.com/questions/2097813/how-to-parse-the-androidmanifest-xml-file-inside-an-apk-package&quot;&gt;Robo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;https://gist.github.com/988255.js?file=androidmanifest_decompressor.groovy&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/2850247827136911241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=2850247827136911241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2850247827136911241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/2850247827136911241'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/androidmanifestxml-file-decompressor.html' title='AndroidManifest.xml file decompressor'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-5982927220068090737</id><published>2011-05-20T23:43:00.001+08:00</published><updated>2011-05-21T00:26:35.698+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="andengine"/><category scheme="http://www.blogger.com/atom/ns#" term="android"/><title type='text'>Plaything: Andengine</title><content type='html'>What I am playing now -- Killer Pool 2011, Android game with &lt;a href=&quot;http://www.andengine.org/&quot;&gt;Andengine&lt;/a&gt;.&lt;br /&gt;I spent 2 hours of my youth reading the code examples and hack around the physic engine to come up with a simple game, screenshot below. I like what I see so far. The code on &lt;a href=&quot;http://github.com/seymores/killerpool2011&quot;&gt;github here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-qCTTxtm6SUw/TdaLjAB739I/AAAAAAAAAz8/bJhBLB4Uv6A/s1600/device.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-qCTTxtm6SUw/TdaLjAB739I/AAAAAAAAAz8/bJhBLB4Uv6A/s1600/device.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/5982927220068090737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=5982927220068090737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5982927220068090737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5982927220068090737'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/plaything-andengine.html' title='Plaything: Andengine'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-qCTTxtm6SUw/TdaLjAB739I/AAAAAAAAAz8/bJhBLB4Uv6A/s72-c/device.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-5406937560931244142</id><published>2011-05-20T13:31:00.000+08:00</published><updated>2011-05-20T13:31:27.309+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Re: Seven Advantages Of Java</title><content type='html'>My usual routine is to checkout dzone.com after coming back from lunch and today the&amp;nbsp;&lt;a href=&quot;http://bielik.blogspot.com/2011/05/seven-advantages-of-java.html&quot;&gt;Seven Advantages of Java blog post caught my attention&lt;/a&gt;. It&#39;s a quick and easy read but I will play the devil&#39;s advocate and lets put a spot light on the 7 &quot;advantages&quot; of Java.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;1.&lt;/b&gt; &lt;b&gt;Java is easy to learn&lt;/b&gt;&lt;br /&gt;Java was designed to be easy to use and is therefore much more easy to  write, compile, debug, run and learn than other programming languages.&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: #741b47; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;Well not really. This is pretty subjective -- Java is easy to learn compared to what? C or C++? Ruby is easy. Groovy is easier if you already have Java background. Python is the easiest as most claimed.&lt;/div&gt;&lt;div style=&quot;color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: #3d85c6; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;2. Java is object-oriented&lt;/b&gt;&lt;br /&gt;This allows you to create modular maintainable applications and reusable code.&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: black; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Just because it&#39;s OO does not mean that it will create modular and maintainable program. OO languages are dime a dozen and that doesn&#39;t necessary make it an advantage for Java. &lt;/span&gt;&lt;i style=&quot;color: #666666; font-family: inherit;&quot;&gt;(Psst, It&#39;s how you write the code)&lt;/i&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;color: #741b47; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;i&gt;3. &lt;b&gt;Java is platform-independent&lt;/b&gt;&lt;br /&gt;One  of the most significant advantages of Java is its ability to move   easily from one system to another. The ability to run the same  code on  many different systems is crucial to www,  and Java succeeds at this by  being platform-independent at the  source and almost binary levels.&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: inherit;&quot;&gt;This platform-independent thing is overrated but I bought it -- hook and sinker -- when I was in college. This is a marketing-speak advantage but not so much of a practical thing in real world. It helps to know how to program in Java but you still have to learn the platform idioms and usage patterns. For example, you can&#39;t and don&#39;t run servlet as desktop app and vice versa. Btw, wassup with the &quot;almost binary levels&quot; -- it will always compile down to JVM bytecode.&lt;/div&gt;&lt;div style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;4. Java is distributed&lt;/b&gt;&lt;br /&gt;Java is  designed to make distributed computing easy with the networking   capability that is inherently integrated into it. Writing network   programs in Java is like sending and receiving data to and from a file.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;This true and may be cool many years back but almost every language framework comes with some kind of distributed capability that you can use right away. So, meh, overrated. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;5. Java is secure&lt;/b&gt;&lt;br style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot; /&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt; Java  considers security as part of its design. The Java language,  compiler,  interpreter, and runtime environment were each developed with  security  in mind.&lt;/span&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This is true to certain extend but when we talk about security we have to understand that security covers a huge body of concern -- authentication, authorization, integrity etc. So Java VM is secure against attacks like buffer overflow, but the security of the software is not guaranteed by Java alone. It&#39;s how you program it. The author should back it up with more specifics.&lt;br /&gt;&lt;div style=&quot;color: #0b5394;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;6. Java is robust&lt;/b&gt; &lt;br /&gt;Robust means reliability. Java  puts a lot of emphasis on early checking  for possible errors, as Java  compilers are able to detect many  problems that would first show up  during execution time in other  languages.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;By robust you mean the damn thing doesn&#39;t crash mysteriously then ya Java is robust. But so is every languages worth their beans. Weak argument really. Reminds me of an advert I came across many years ago -- one of the publicize &quot;Feature&quot; of the program is, &lt;u&gt;Bug Free&lt;/u&gt;. :-O&lt;br /&gt;&lt;br /&gt;Oh, I don&#39;t think you will think about this advantage point when you are getting OutOfMemoryException.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;color: #0b5394; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;Java is multithreaded&lt;/b&gt;&lt;br /&gt;Multithreaded  is the capability for a program to perform several tasks  simultaneously  within a program. In Java, multithreaded programming has  been smoothly  integrated into it, while in other languages, operating  system-specific  procedures have to be called in order to enable  multithreading.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;I think we get it, multithreaded is important and Java is multithreaded language. Ok. So what are the &quot;other languages&quot;?&lt;br /&gt;&lt;br /&gt;The author sounds like he is new to Java world. I hope he won&#39;t bail once he learned about Ruby. Hmm, maybe he will write &quot;100 Reasons Ruby Kicks Java-ass&quot; then.</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/5406937560931244142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=5406937560931244142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5406937560931244142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5406937560931244142'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/re-seven-advantages-of-java.html' title='Re: Seven Advantages Of Java'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-7117040289781757145</id><published>2011-05-20T11:28:00.001+08:00</published><updated>2011-05-20T11:29:21.259+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="objective-c"/><title type='text'>I earned the &quot;Famous Question&quot; badge in StackOverflow</title><content type='html'>But it shows how Objective-C can be shitty in areas other language never give a rat-ass about.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;So &lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a class=&quot;question-hyperlink&quot; href=&quot;http://stackoverflow.com/questions/968792/what-is-the-right-way-to-check-for-a-null-string-in-objective-c&quot;&gt;What is the right way to check for a null string in Objective-C?&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-AWe3GeYgIPM/TdXfPtfW7tI/AAAAAAAAAz4/d-qwdtvT46A/s1600/Screen+shot+2011-05-20+at+AM+11.25.00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-AWe3GeYgIPM/TdXfPtfW7tI/AAAAAAAAAz4/d-qwdtvT46A/s1600/Screen+shot+2011-05-20+at+AM+11.25.00.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/7117040289781757145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=7117040289781757145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/7117040289781757145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/7117040289781757145'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/i-earned-famous-question-badge-in.html' title='I earned the &quot;Famous Question&quot; badge in StackOverflow'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-AWe3GeYgIPM/TdXfPtfW7tI/AAAAAAAAAz4/d-qwdtvT46A/s72-c/Screen+shot+2011-05-20+at+AM+11.25.00.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15692829.post-5379452529228163243</id><published>2011-05-18T21:14:00.003+08:00</published><updated>2011-05-18T21:14:54.147+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="groovy"/><title type='text'>What&#39;s new in Groovy 1.8</title><content type='html'>&lt;div style=&quot;width:425px&quot; id=&quot;__ss_8010619&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/glaforge/groovy-18-update-guillaume-laforge-gr8conf-europe-2011&quot; title=&quot;Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011&quot;&gt;Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011&lt;/a&gt;&lt;/strong&gt; &lt;iframe src=&quot;http://www.slideshare.net/slideshow/embed_code/8010619&quot; width=&quot;425&quot; height=&quot;355&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt; &lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/glaforge&quot;&gt;Guillaume Laforge&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://shitmores.blogspot.com/feeds/5379452529228163243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15692829&amp;postID=5379452529228163243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5379452529228163243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15692829/posts/default/5379452529228163243'/><link rel='alternate' type='text/html' href='http://shitmores.blogspot.com/2011/05/whats-new-with-groovy-18.html' title='What&#39;s new in Groovy 1.8'/><author><name>Teo Choong Ping</name><uri>https://plus.google.com/100187854176864631323</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-FoBU54vJ7y0/AAAAAAAAAAI/AAAAAAAABNc/R3vRsuATduM/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>