<?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: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-6294800522287787952</id><updated>2011-11-28T11:51:21.957+11:00</updated><category term='C#'/><category term='Resharper'/><category term='Windows Forms'/><category term='Book Review'/><category term='Opinion'/><category term='Domain Specific Languages'/><category term='Firefox'/><category term='SQL'/><category term='Readify Developer Network'/><category term='AI'/><category term='Stylecop'/><category term='Installers'/><category term='System Tools'/><category term='CodeProject'/><category term='Gadgets'/><category term='Stackoverflow'/><category term='Android'/><category term='MS Office'/><category term='Google'/><category term='Programming'/><category term='XAML'/><category term='Silverlight'/><title type='text'>The Occasional Observation</title><subtitle type='html'>Observations on Software, IT and other tech.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5718751459886987085</id><published>2011-06-15T11:04:00.002+10:00</published><updated>2011-06-17T10:16:26.071+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opinion'/><title type='text'>Anyone else noticed blogs are dying</title><content type='html'>&lt;p&gt;Has anyone else noticed how a lot of bloggers just aren’t posting anymore.&amp;#160; Has the initial buzz gone away.&amp;#160; Of course some blogs are going strong like coding horror, but even that took a hiatus while they built Stack Overflow.&lt;/p&gt;  &lt;p&gt;Maybe its moved to Facebook pages instead as they are easier to make.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5718751459886987085?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5718751459886987085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5718751459886987085' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5718751459886987085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5718751459886987085'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2011/06/anyone-else-noticed-blogs-are-dying.html' title='Anyone else noticed blogs are dying'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-7077686644385472796</id><published>2010-12-25T20:40:00.006+11:00</published><updated>2010-12-25T21:08:10.837+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Brevity leading to obfuscation</title><content type='html'>I ran into this article today.  In 25 lines of code a guy created a python spelling checker.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://norvig.com/spell-correct.html"&gt;http://norvig.com/spell-correct.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now its impressive to be able to do that but at the end of the 4,500 word explanation I realised that the code was obfuscation for the sake of brevity.  He has named functions and variables with reasonable names, and I could guess initially at what some things were doing.  &lt;br /&gt;&lt;br /&gt;So what are the obvious readability problems with the code.&lt;br /&gt;&lt;br /&gt;The explanation mentions edit distances, the code doesn't, it mentions edits1.&lt;br /&gt;Even though I knew about edit distances and my initial thoughts were it must use them somehow, you really have to guess that edits1 is returning those strings with string edit distance of 1 from the original string.&lt;br /&gt;&lt;br /&gt;The explanation uses Bayes theorem, something I am familiar with, the code doesn't mention probability or Bayes or anything of a statistical nature in any words.&lt;br /&gt;&lt;br /&gt;The code has functions like train, but it doesn't say what its trying to produce or how its training it.  Is it creating a list of probabilities?  From the code you have to guess.&lt;br /&gt;&lt;br /&gt;The code leaves no hints as to what data structures it is using other than maybe lists.&lt;br /&gt;&lt;br /&gt;He ran into a bug or two but that's not a big deal, nearly all code has bugs.  He also did it quite rapidly, so for that I salute him.&lt;br /&gt;&lt;br /&gt;But as for maintainable by another programmer who might have had to pick it up, I seriously doubt it.  This code requires 4500 words of comments to be maintainable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-7077686644385472796?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/7077686644385472796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=7077686644385472796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7077686644385472796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7077686644385472796'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/12/brevity-leading-to-obfuscation.html' title='Brevity leading to obfuscation'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-1293493312900971658</id><published>2010-12-23T11:41:00.003+11:00</published><updated>2010-12-23T11:46:44.091+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android take over</title><content type='html'>Woah this is so spot on&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.mobilesplease.co.uk/why-android-is-the-new-windows/"&gt;http://blog.mobilesplease.co.uk/why-android-is-the-new-windows/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Android to take over the mobile phone market unless windows phone 7 can compete, they may have to sell the Windows Phone OS cheaper.  Its good to live in interesting times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-1293493312900971658?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/1293493312900971658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=1293493312900971658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1293493312900971658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1293493312900971658'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/12/android-take-over.html' title='Android take over'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5567879736478986678</id><published>2010-12-11T18:08:00.007+11:00</published><updated>2010-12-23T11:56:02.259+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>On Intelligence</title><content type='html'>Just got myself a copy of Jeff Hawkins "On Intelligence", stay tuned for a review.  I'm one chapter in and so far it seems an easy read.  The main thrust of his ideas seem sound, we shall see what evidence he presents and how his argument develops.&lt;br /&gt;&lt;br /&gt;I agree with him on his initial misgivings with 80's AI research.  Basing AI on symbols and language parsing seems such a silly idea now.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XeMESVoGM_U/TQMk2QVk-xI/AAAAAAAAAGQ/He-ffdUrthY/s1600/On%2BIntelligence.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 177px; height: 262px;" src="http://3.bp.blogspot.com/_XeMESVoGM_U/TQMk2QVk-xI/AAAAAAAAAGQ/He-ffdUrthY/s400/On%2BIntelligence.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5549319680367590162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I ran into it at the &lt;a href="http://www.numenta.com/"&gt;numenta&lt;/a&gt; web site and bought it from bookdepository in the UK.  Free shipping!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5567879736478986678?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5567879736478986678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5567879736478986678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5567879736478986678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5567879736478986678'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/12/on-intelligence.html' title='On Intelligence'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XeMESVoGM_U/TQMk2QVk-xI/AAAAAAAAAGQ/He-ffdUrthY/s72-c/On%2BIntelligence.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3031757681281856404</id><published>2010-11-04T10:49:00.001+11:00</published><updated>2010-11-04T10:51:25.705+11:00</updated><title type='text'>Poem in chinese entirely made up of Shi</title><content type='html'>This is a &lt;a href="http://i.imgur.com/PiECo.jpg"&gt;poem&lt;/a&gt;  entirely made up of the syllable Shi.  Impressive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3031757681281856404?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3031757681281856404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3031757681281856404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3031757681281856404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3031757681281856404'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/11/poem-in-chinese-entirely-made-up-of-shi.html' title='Poem in chinese entirely made up of Shi'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2258842809068338398</id><published>2010-08-12T09:57:00.005+10:00</published><updated>2010-12-23T12:24:14.348+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinion'/><title type='text'>Response to Google and Verizons Open Internet proposal</title><content type='html'>I feel I have to respond to this &lt;br /&gt;&lt;a href="http://googlepublicpolicy.blogspot.com/2010/08/joint-policy-proposal-for-open-internet.html"&gt;open internet proposal&lt;/a&gt; by google and verzion.&lt;br /&gt;&lt;br /&gt;For some reason they seem to have allowed wireless boradband not have net neutrality enforced.  This seems to be a fundamental flaw.  If it allows providers to make more money by throttling services then it will push incentive to develop further wireless brodband and disincentivise wired broadband development.  In the longer term we will be threatened with a purely wireless internet that is dominated and controlled by corporations.  &lt;br /&gt;&lt;br /&gt;This could happen within 20 years given the pace of change of technology.&lt;br /&gt;&lt;br /&gt;Verizon and Google have got to give this idea up and go full net neutrality for all types of providers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2258842809068338398?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2258842809068338398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2258842809068338398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2258842809068338398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2258842809068338398'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/08/response-to-google-and-verizons-open.html' title='Response to Google and Verizons Open Internet proposal'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-1623372766266342380</id><published>2010-02-19T00:28:00.004+11:00</published><updated>2010-12-23T11:54:32.378+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeProject'/><title type='text'>The Kingdom and Quick Answers</title><content type='html'>&lt;p&gt;Finally watching “The Kingdom” from 2007.&amp;#160; Gosh its bloody, violent and full of dodgy stereotypes.&amp;#160; Why would Islamic militants not manage to hit the broadside of a barn with 2,000,000 bullets and yet 4 FBI agents are all crack marksmen.&lt;/p&gt;  &lt;p&gt;Not a great movie.&lt;/p&gt;  &lt;p&gt;Anyway found a new thing on CodeProject the other day. &lt;a href="http://www.codeproject.com/script/Answers/List.aspx?tab=latest"&gt;Quick Answers.&lt;/a&gt;  Its neat, but it doesn't seem to have the momentum yet of a StackOverflow or a ExpertsExchange.  Time will tell &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-1623372766266342380?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/1623372766266342380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=1623372766266342380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1623372766266342380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1623372766266342380'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/02/kingdom.html' title='The Kingdom and Quick Answers'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3639930247111178589</id><published>2010-01-09T12:30:00.001+11:00</published><updated>2010-01-09T12:30:01.621+11:00</updated><title type='text'>Avatar</title><content type='html'>&lt;p&gt;Saw Avatar the other day, pretty impressive 3D graphics.&amp;#160; This seems to be the film of the summer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_XeMESVoGM_U/S0fcE5HaYkI/AAAAAAAAAFg/4B-dNzduniU/s1600-h/Avatar%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Avatar" border="0" alt="Avatar" src="http://lh5.ggpht.com/_XeMESVoGM_U/S0fcF9Q-rnI/AAAAAAAAAFk/RS4fd1uExd4/Avatar_thumb.jpg?imgmax=800" width="84" height="54" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And its not any one scene that is special, its the fact that the whole lot seamlessly works together.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3639930247111178589?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3639930247111178589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3639930247111178589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3639930247111178589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3639930247111178589'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2010/01/avatar.html' title='Avatar'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_XeMESVoGM_U/S0fcF9Q-rnI/AAAAAAAAAFk/RS4fd1uExd4/s72-c/Avatar_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-9085278026742195045</id><published>2009-12-04T11:26:00.004+11:00</published><updated>2010-12-23T11:56:47.747+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Hooking into the windows message loop</title><content type='html'>Ive just been trying to figure out a way to hook into the windows message loop of a WinForm.&lt;br /&gt;&lt;br /&gt;protected override void WndProc(ref Message m)&lt;br /&gt;{&lt;br /&gt;  Trace.WriteLine(m.Msg.ToString() + “: “ + m.ToString());&lt;br /&gt;&lt;br /&gt;  base.WndProc(ref m);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;In an attempt to fix a form that hangs when you lock the computer.  Haven't fixed the form yet but the message loop helps.&lt;br /&gt;&lt;br /&gt;Update: In the end it was controls being created on a background thread which lead to the hang.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-9085278026742195045?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/9085278026742195045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=9085278026742195045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/9085278026742195045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/9085278026742195045'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/12/hooking-into-windows-message-loop.html' title='Hooking into the windows message loop'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-7601535268347255941</id><published>2009-11-08T13:16:00.003+11:00</published><updated>2010-12-23T12:05:49.550+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Predictably Irrational</title><content type='html'>Haven't posted for ages.  I have been reading a book &lt;a href="http://www.predictablyirrational.com/"&gt;"Predictably Irrational"&lt;/a&gt; by Dan Ariely about behavioral economics.  Fascinating stuff in it, like how first impressions count on our later choices.  A good read so far, I recommend it if you have the time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-7601535268347255941?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/7601535268347255941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=7601535268347255941' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7601535268347255941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7601535268347255941'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/11/predictably-irrational.html' title='Predictably Irrational'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3112952045090098754</id><published>2009-08-16T10:54:00.003+10:00</published><updated>2010-12-23T12:13:39.713+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets'/><title type='text'>Improvments to Paint .Net 3.5 startup speed</title><content type='html'>It starts up much faster now, well done to Rick Brewster and anyone else who worked on this version.&lt;br /&gt;&lt;br /&gt;If they could speed it up even faster it would be just fantastic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3112952045090098754?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3112952045090098754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3112952045090098754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3112952045090098754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3112952045090098754'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/08/improvments-to-paint-net-35-startup.html' title='Improvments to Paint .Net 3.5 startup speed'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-4392261470717054822</id><published>2009-08-14T23:23:00.002+10:00</published><updated>2010-12-23T11:59:27.255+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stackoverflow'/><title type='text'>Anybody else noticed</title><content type='html'>how stack overflows ratings system is busted?&lt;br /&gt;&lt;br /&gt;I've kind of lost interest in it now.  My stack does not overfloweth anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-4392261470717054822?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/4392261470717054822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=4392261470717054822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4392261470717054822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4392261470717054822'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/08/anybody-else-noticed.html' title='Anybody else noticed'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-4464595106577273781</id><published>2009-06-27T09:06:00.001+10:00</published><updated>2009-06-27T09:15:16.165+10:00</updated><title type='text'>“Huburb”</title><content type='html'>&lt;p&gt;I was just having a shower and thinking of how Melbourne is growing and I think I came up with a new word. Huburb to describe a major hub suburb.&amp;#160; The ones where all the trains and trams meet and there are cinemas and shopping centres.&amp;#160; &lt;/p&gt;  &lt;p&gt;I was thinking of Camberwell and Box Hill when it came to me. The “huburbs” that have failed to materialize from Steve Brack’s Melbourne 2030.&lt;/p&gt;  &lt;p&gt;So that’s my new word. I’ll think I’ll send the word to Justin Madden the current planning minister for Victoria.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-4464595106577273781?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/4464595106577273781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=4464595106577273781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4464595106577273781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4464595106577273781'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/06/my-new-word-huburb.html' title='“Huburb”'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-8897684500724896296</id><published>2009-05-26T11:10:00.003+10:00</published><updated>2010-12-23T12:12:59.784+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight Rule 1</title><content type='html'>Discovered a Silverlight issue today in Visual Studio 2008.&lt;br /&gt;&lt;br /&gt;When you add a user defined control to a control the parsing can stuff up.  If the 1st control has event handlers that are not defined or parse incorrectly then you get into a state that is hard to recover from. I ended up with many AG_E_UNKNOWN_ERROR and AG_E_BAD_TYPE errors.&lt;br /&gt;&lt;br /&gt;This leads to Silverlight rule no 1. &lt;br /&gt;&lt;br /&gt;"Don't put event handlers into your Xaml."&lt;br /&gt;&lt;br /&gt;Until the parser gets better, either VS2010, Silverlight 3 or a patch this seems to be the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-8897684500724896296?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/8897684500724896296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=8897684500724896296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8897684500724896296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8897684500724896296'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/05/silverlight-rule-1.html' title='Silverlight Rule 1'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-7834011070227598605</id><published>2009-05-23T17:15:00.007+10:00</published><updated>2010-12-23T12:33:46.433+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Tools'/><title type='text'>USB Flash memory</title><content type='html'>&lt;p&gt;Been having horrible trouble with a 16GB USB Flash stick today. Couldn’t copy a 9GB file to it.&amp;#160; Never found an answer.&amp;#160; In the end I destroyed it by using convert.exe /FS:NTFS. rats&lt;/p&gt;  &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Edit:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I fixed my flash disk. In the end I booted from a windows XP DVD into a recovery mode.  Then I used the FixMBR command.  Oh boy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-7834011070227598605?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/7834011070227598605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=7834011070227598605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7834011070227598605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7834011070227598605'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/05/usb-flash-memory.html' title='USB Flash memory'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5186524023431860790</id><published>2009-03-31T21:55:00.001+11:00</published><updated>2009-03-31T21:55:19.174+11:00</updated><title type='text'>First post with Windows Live Writer</title><content type='html'>&lt;p&gt;I ran into windows Live Writer today.&amp;#160; The story goes at work we have merged with another company, usually we use Skype but the new company won’t use Skype so the two groups are using MSN for the time being.&amp;#160; Installing MSN Messenger also has a few extra tick boxes and one of them i windows Live Writer.&amp;#160; Its a simple enough WYSIWIG editor.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="199"&gt;A Test Table&lt;/td&gt;        &lt;td valign="top" width="199"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="199"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;With a few tricks like tables.&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f878db53-342e-4017-b5cc-bf946c48b13c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/And+you+can+add+tags" rel="tag"&gt;And you can add tags&lt;/a&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;And maps &lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterEditableSmartContent" id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:8464b022-3329-4cea-841a-a12dfe734572" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=-37.81565~144.9581&amp;amp;lvl=14&amp;amp;style=a&amp;amp;scene=32801371&amp;amp;mkt=en-us&amp;amp;FORM=LLWR" id="map-1da49e6e-7034-483c-a0a8-8a5ca6a55c10" alt="Click to view this map on Live.com" title="Click to view this map on Live.com"&gt;&lt;img src="http://lh6.ggpht.com/_XeMESVoGM_U/SdH2js7qKDI/AAAAAAAAAEg/R1vvE6W3SpM/map-ec55403fb476.jpg?imgmax=800" width="320" height="240" alt="Map picture"&gt;&lt;/a&gt;&lt;/div&gt; &lt;/p&gt;  &lt;h2&gt;Headings&lt;/h2&gt;  &lt;p&gt;And video&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:cb33ea8e-d420-4a3e-a1ee-3b390895025e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div id="62ac1705-8f2d-48f6-b3a2-f3e7022dc06a" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://video.msn.com/video.aspx?vid=5de6982d-c012-41ed-a531-ebcd9c5a39b6&amp;amp;from=writer" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/_XeMESVoGM_U/SdH2k6JWEoI/AAAAAAAAAEk/UzhTqMtBRdo/video08e4e88cf6b2%5B1%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('62ac1705-8f2d-48f6-b3a2-f3e7022dc06a'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;embed src=\&amp;quot;http://images.video.msn.com/flash/soapbox1_1.swf\&amp;quot; quality=\&amp;quot;high\&amp;quot; width=\&amp;quot;432\&amp;quot; height=\&amp;quot;364\&amp;quot; wmode=\&amp;quot;transparent\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; pluginspage=\&amp;quot;http://macromedia.com/go/getflashplayer\&amp;quot; flashvars=\&amp;quot;c=v&amp;amp;v=5de6982d-c012-41ed-a531-ebcd9c5a39b6&amp;amp;from=writer&amp;amp;mkt=en-US\&amp;quot; &amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;In general it seems an improvement over the standard blogger editor.&lt;/p&gt;  &lt;p&gt;We shall see&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5186524023431860790?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5186524023431860790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5186524023431860790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5186524023431860790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5186524023431860790'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/03/first-post-with-windows-live-writer.html' title='First post with Windows Live Writer'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_XeMESVoGM_U/SdH2js7qKDI/AAAAAAAAAEg/R1vvE6W3SpM/s72-c/map-ec55403fb476.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-1229762454340189329</id><published>2009-03-18T17:34:00.005+11:00</published><updated>2010-12-23T12:31:50.813+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android on a Eee PC</title><content type='html'>Heaps of people must have seen this recent development, putting Google's Android onto an Asus Eee PC.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.electronista.com/articles/09/03/10/android.eee.pc.coming.soon/"&gt;http://www.electronista.com/articles/09/03/10/android.eee.pc.coming.soon/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.brighthand.com/default.asp?newsID=14953&amp;subject=Google+Android+Asus+Netbook"&gt;http://www.brighthand.com/default.asp?newsID=14953&amp;subject=Google+Android+Asus+Netbook&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A few guys have already done it successfully to their own Eee&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gizmodo.com/5122147/android-on-an-eee-pc"&gt;http://gizmodo.com/5122147/android-on-an-eee-pc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and most importantly its going into production with Asus.  Is this the beginning of a new era in desktop OS's?   Is it the thin end of the wedge?  Who knows. Linux is now getting supported by a major player, but I wonder if Googles corporate instincts can match with Linux's Open Source ethos.  Only time will tell, still I'm tempted to try android now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-1229762454340189329?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/1229762454340189329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=1229762454340189329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1229762454340189329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1229762454340189329'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/03/android-on-eee-pc.html' title='Android on a Eee PC'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3502840714135850016</id><published>2009-03-17T10:52:00.009+11:00</published><updated>2010-12-23T12:40:11.039+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Back from holidays</title><content type='html'>I haven't blogged for a while, I've just got back from holidays.&lt;br /&gt;&lt;br /&gt;I have been reading HR Ekbias &lt;a href="http://www.amazon.com/Artificial-Dreams-Quest-Non-Biological-Intelligence/dp/product-description/0521878675"&gt;Artificial Dreams&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XeMESVoGM_U/Sb7mrOcXIQI/AAAAAAAAAEU/BD9T-eThE8Q/s1600-h/Artificial+Dreams.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://4.bp.blogspot.com/_XeMESVoGM_U/Sb7mrOcXIQI/AAAAAAAAAEU/BD9T-eThE8Q/s400/Artificial+Dreams.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5313938240629580034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;Its been a thought provoking book.  Pointing out the problems with old Boolean AI, and also the lower end approaches like subsumption architecture and neural nets.  A very good survey of AI over the years, as good as Daniel Creviers AI from '93.&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Edit 2010.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You know I should add one of the things I got out of this book was the concept of a free ride.  For any data structure, pattern matching method or AI technique to be successful out of specific boundaries it is clearly going to need a structure that will give it a "free ride" so it can generalize.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3502840714135850016?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3502840714135850016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3502840714135850016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3502840714135850016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3502840714135850016'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/03/back-from-holidays.html' title='Back from holidays'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XeMESVoGM_U/Sb7mrOcXIQI/AAAAAAAAAEU/BD9T-eThE8Q/s72-c/Artificial+Dreams.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2556988605608918696</id><published>2009-01-05T11:12:00.008+11:00</published><updated>2010-12-23T12:31:36.939+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opinion'/><title type='text'>Linux ad comp</title><content type='html'>I found this link today about a competition to create a &lt;a href="http://www.bit-tech.net/news/2008/12/22/i-am-linux-ad-competition-launched/1"&gt;Linux ad&lt;/a&gt; to counter the "I'm a Mac. I'm a PC" ads.&lt;br /&gt;&lt;br /&gt;The most interesting thing i read was in the comments. A lot of people were out bagging Linux as too hard to use.  One person even said the Mac was the best desktop experience these days.  I find it sad that Apple can take a base like BSD and create a better experience for users in a few years (about 8 I'd guess), when Linux has been banging away at it for 20.&lt;br /&gt;&lt;br /&gt;I reckon this stems from a cultural problem at Linux headquarters. Some of this has been pointed out indirectly by &lt;a href="http://primates.ximian.com/~miguel/bongo-bong.html"&gt;Miguel De Icaza&lt;/a&gt; before.  A pity as I want Open Source to work and I'd love to have a really good Open Source alternative to windows.&lt;br /&gt;&lt;br /&gt;Wouldn't it be nice if there was only one or two flavours of linux instead of &lt;a href"http://en.wikipedia.org/wiki/Comparison_of_Linux_distributions"&gt;85 or so.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This distribution chart shows it well.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XeMESVoGM_U/SWFVNcG5uAI/AAAAAAAAAD0/wVtIrHbdEzo/s1600-h/LinuxDistro.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 282px; height: 400px;" src="http://2.bp.blogspot.com/_XeMESVoGM_U/SWFVNcG5uAI/AAAAAAAAAD0/wVtIrHbdEzo/s400/LinuxDistro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287601126881474562" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2556988605608918696?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2556988605608918696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2556988605608918696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2556988605608918696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2556988605608918696'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2009/01/linux-ad-comp.html' title='Linux ad comp'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XeMESVoGM_U/SWFVNcG5uAI/AAAAAAAAAD0/wVtIrHbdEzo/s72-c/LinuxDistro.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-8032431428446178197</id><published>2008-12-29T18:11:00.007+11:00</published><updated>2010-12-23T12:21:35.605+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>CodeFest 2008</title><content type='html'>The inaugural CodeFest 2008 is over.  Attendees Clarence Bakirtzidis and myself made our first 3 silverlight apps. Though I have made a small one before for work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tim.yen.googlepages.com/catsapp"&gt;Hello World&lt;/a&gt;&lt;br /&gt;&lt;a href="http://tim.yen.googlepages.com/catsimages"&gt;Showing some images&lt;/a&gt;&lt;br /&gt;&lt;a href="http://tim.yen.googlepages.com/catsvideo"&gt;Showing a video&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We spent a day from 10 am and it was a lot of fun.&lt;br /&gt;We used Microsoft live to host the silverlight apps as its free, the only hitch is it has no database.  The video was encoded using Expression Encoder and the code was Developed using Expression Blend2 sp1 and Visual Studio 2008.&lt;br /&gt;&lt;br /&gt;Our next attempt will have to be a game, or so we said as clarence left.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-8032431428446178197?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/8032431428446178197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=8032431428446178197' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8032431428446178197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8032431428446178197'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/12/codefest-2008.html' title='CodeFest 2008'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-8829247948935975462</id><published>2008-12-26T21:22:00.005+11:00</published><updated>2010-12-23T12:03:04.507+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Speed up Firefox startup</title><content type='html'>I found &lt;a href="http://www.bloganything.net/164/tweaks-to-speed-up-firefox"&gt;this&lt;/a&gt; great post to speedup the firefox startup.&lt;br /&gt;&lt;br /&gt;It amounts to settings 4 settings in the about:config&lt;br /&gt;network.http.pipelining=true&lt;br /&gt;network.http.proxy.pipelining=true&lt;br /&gt;network.http.pipelining.maxrequests=30&lt;br /&gt;and add integer&lt;br /&gt;nglayout.initialpaint.delay=0. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"Normally Firefox will make one request to a web page at a time. When you enable pipelining it will make several at once, which really speeds up page loading."&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;And the initial paint delay of 0 makes firefox render immediately.&lt;br /&gt;&lt;br /&gt;Be warned this may &lt;a href="http://weblogs.mozillazine.org/asa/archives/007164.html"&gt;break&lt;/a&gt; some of your page views.  But for me if it gets rid of the annoyingly slow startup while sacrificing a few pages, I can live with it.&lt;br /&gt; &lt;br /&gt;If I find any others Ill add them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-8829247948935975462?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/8829247948935975462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=8829247948935975462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8829247948935975462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8829247948935975462'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/12/speed-up-firefox-startup.html' title='Speed up Firefox startup'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3761715955015556488</id><published>2008-12-20T12:49:00.006+11:00</published><updated>2010-12-23T12:25:07.592+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domain Specific Languages'/><title type='text'></title><content type='html'>I found this &lt;a href="http://www.infoq.com/news/2008/08/Fowler-North-Crevasse-of-Doom"&gt;reason to use a DSL&lt;/a&gt; today, and it is the best reason to use a DSL I have heard of so far.&lt;br /&gt;&lt;br /&gt;"DSL allows business people to read through code and understand what is going on, so they can spot misinterpreted requirements."&lt;br /&gt;&lt;br /&gt;I wonder if it is true in practice?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3761715955015556488?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3761715955015556488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3761715955015556488' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3761715955015556488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3761715955015556488'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/12/i-found-this-reason-to-use-dsl-today.html' title=''/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2950717904589762527</id><published>2008-12-06T10:39:00.004+11:00</published><updated>2010-12-23T11:49:16.705+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stylecop'/><category scheme='http://www.blogger.com/atom/ns#' term='Resharper'/><title type='text'>StyleCop for ReSharper</title><content type='html'>I ran into this little plug in on CodePlex &lt;a href="http://www.codeplex.com/StyleCopForReSharper"&gt;StyleCop For Resharper&lt;/a&gt; the other day.  It's still in development but it seems a great idea.&lt;br /&gt;&lt;br /&gt;To all the people working on it, keep it up, it looks really good so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2950717904589762527?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2950717904589762527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2950717904589762527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2950717904589762527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2950717904589762527'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/12/stylecop-for-resharper.html' title='StyleCop for ReSharper'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5337074190012835144</id><published>2008-11-21T23:00:00.009+11:00</published><updated>2010-12-23T12:33:24.955+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets'/><title type='text'>Plastic Logic E Readers</title><content type='html'>I found this &lt;a href="http://www.plasticlogic.com/index.html"&gt;Plastic Logic e reader&lt;/a&gt; a while back.  I hope its development is not affected by the global economic slump we are in, this seems such a cool product and much better than the kindle or its ilk.  The original release date was Spring 2009 which i assume means March-May.  Hopefully its not delayed or even put off.&lt;br /&gt;&lt;br /&gt;I was originally tempted by the Illad by iRex as it wold allow me to develop stuff for it too.  Well here's hoping the Plastic Logic will be a developers platform too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5337074190012835144?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5337074190012835144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5337074190012835144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5337074190012835144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5337074190012835144'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/11/plastic-logic-e-readers.html' title='Plastic Logic E Readers'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-4442893283431883286</id><published>2008-11-07T19:39:00.003+11:00</published><updated>2010-12-23T12:00:16.624+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets'/><title type='text'>Dream PC's</title><content type='html'>&lt;a href="http://www.wepc.com"&gt;Asus and Intel&lt;/a&gt; have a new site up for you to suggets your dream PC.  I found this one a laptop with 3 screens and I have been wanting one of these for ages.  When not plugged in you use one screen to save power, but other times as a developer I really appreciate 3 screens, so it would be a true mobile workstation for me.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://www.wepc.com/dream/embed/2734" width="300" height="250" scrolling="no" frameborder="0" marginwidth="0" marginheight="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Whats your dream PC?  Why not suggest it, it can't hurt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-4442893283431883286?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/4442893283431883286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=4442893283431883286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4442893283431883286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4442893283431883286'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/11/dream-pcs.html' title='Dream PC&apos;s'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-8095304685548398824</id><published>2008-10-18T16:01:00.005+11:00</published><updated>2010-12-23T12:32:34.538+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stackoverflow'/><title type='text'>My stack overflows</title><content type='html'>Haven't posted for a while, I've been using the new &lt;a href="http://stackoverflow.com/"&gt;stack overflow&lt;/a&gt; website of late.&lt;br /&gt;&lt;br /&gt;I'm not sure its working yet.  The aim of the site is to become the one source of useful answers for code and computer related questions and it is getting a huge number of questions and answers.  I've steadily been answering and voting on questions to up my reputation points.  &lt;br /&gt;&lt;br /&gt;The biggest issue I have with the site is almost no questions end up as wiki style entries.  There ends up a long list of answers, some better than others but a combined and detailed answer may be the most useful.  I suspect the initial steam to gather reputation and badges will slow down after a while and the site might struggle to maintain the desired wikipedia like feel.&lt;br /&gt;&lt;br /&gt;Maybe wiki answers are irrelevant for the long term survival of the site.  It remains to be seen.&lt;br /&gt;&lt;br /&gt;Check it out anyway its a new resource.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-8095304685548398824?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/8095304685548398824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=8095304685548398824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8095304685548398824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8095304685548398824'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/10/my-stack-overflows.html' title='My stack overflows'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3159399583282332322</id><published>2008-08-25T09:37:00.005+10:00</published><updated>2010-12-23T12:30:44.072+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Tools'/><title type='text'>Apply Computer Settings slow</title><content type='html'>I have had a login problem for a while. Whenever I booted up and logged in I would get to the "Apply Computer settings" message and it would sit for ages.&lt;br /&gt;&lt;br /&gt;Well I found a solution last week, refresh your DHCP lease using&lt;br /&gt;&lt;br /&gt;ipconfig /registerdns&lt;br /&gt;&lt;br /&gt;in a command prompt. This worked for me and now my boot up time is minutes shorter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3159399583282332322?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3159399583282332322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3159399583282332322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3159399583282332322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3159399583282332322'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/08/apply-computer-settings-slow.html' title='Apply Computer Settings slow'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-785999680944373058</id><published>2008-08-14T16:25:00.006+10:00</published><updated>2010-12-23T11:52:29.273+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Transparent TrackBar Windows Forms</title><content type='html'>I discovered today that trackbars in windows forms .net don't support transparency, now why would i want transparency, so that when you put it on a tab control it looks the same as all the other controls.  I could have set the tabPage UseVisualStyleBackColor to false but then i get the same old grey controls.  &lt;br /&gt;&lt;br /&gt;so I searched around today for a transparent trackbar and I found 2.&lt;br /&gt;&lt;br /&gt;The first is just a dll from &lt;a href="&lt;br /&gt;http://dotnetrix.co.uk/controls.htm"&gt;Mick Doherty&lt;/a&gt;, with no code, so im a little hesitant to use it in case it breaks&lt;br /&gt;&lt;br /&gt;The second was originally on Matt Bird's web site but has now been moved to &lt;a href="http://www.codeplex.com/TransparentTrackBar"&gt;codeplex TransparentTrackBar&lt;/a&gt; as the original link was taken down.&lt;br /&gt;&lt;br /&gt;Thanks to Matt Bird for allowing this code to be open sourced.&lt;br /&gt;&lt;br /&gt;I hope people find them useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-785999680944373058?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/785999680944373058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=785999680944373058' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/785999680944373058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/785999680944373058'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/08/transparent-trackbar-windows-forms.html' title='Transparent TrackBar Windows Forms'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-8140533890565937357</id><published>2008-08-03T09:42:00.006+10:00</published><updated>2010-12-23T12:11:11.977+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stylecop'/><category scheme='http://www.blogger.com/atom/ns#' term='Resharper'/><title type='text'>Microsoft Stylecop</title><content type='html'>I ran into Microsoft StyleCop the other day. While I disagree with some of its style conventions, I agree with most of them.  I can forsee see the day when it will be the default for nearly all C# applications.&lt;br /&gt;&lt;br /&gt;To this end I hope JetBrains update ReSharper to be able to auto format to the Microsoft standard.  Much of it is boilerplate but it would be really good.&lt;br /&gt;&lt;br /&gt;There is a JetBrains &lt;a href ="http://www.jetbrains.net/jira/browse/RSRP-71904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_274490"&gt;enhancement request&lt;/a&gt; for this so feel free to add your vote if you are a ReSharper user. (Search for (RSRP-71904) StyleCop / Source Analysis reformatting if the link doesn't work)&lt;br /&gt;&lt;br /&gt;StyleCop itself will be adding the ability to auto format code to their coding conventions (http://blogs.msdn.com/sourceanalysis/) and Jason Allor responded to me via email that they will be publishing their style rules in a document soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-8140533890565937357?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/8140533890565937357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=8140533890565937357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8140533890565937357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/8140533890565937357'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/08/microsoft-stylecop.html' title='Microsoft Stylecop'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3735411443187894991</id><published>2008-06-22T22:08:00.011+10:00</published><updated>2010-12-23T12:06:34.113+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Installers'/><title type='text'>Tip on adding many content files to a .net setup project</title><content type='html'>We have had this problem at work for ages now where we have added 300-400 database scripts to our .net installer project.  This included tables, stored procedures, functions, indexes, triggers, the lot.  It was a constant pain in the arse adding the files to the correct output directory.&lt;br /&gt;&lt;br /&gt;When all we really wanted was a "grab all the files in these directories and copy them in the exact same layout to the install directory when the installer runs" method.&lt;br /&gt;&lt;br /&gt;This would be a nice function to have in the native .net installer but it isn't there.&lt;br /&gt;&lt;br /&gt;When we move to a better installer maybe they will have a function like that but if your still stuck using the native .net installer projects then we came up with a bit of an easier way to do it, its not a perfect fix but its a bit quicker.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Add all the files to an empty project as content. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XeMESVoGM_U/SF5EhBp8XOI/AAAAAAAAADE/aNYecly3Nrg/s1600-h/Empty+Project.jpg"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_XeMESVoGM_U/SF5EhBp8XOI/AAAAAAAAADE/aNYecly3Nrg/s400/Empty+Project.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5214680752712342754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This will retain the directory structure of the files as they are on your disk. &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then add this project to your Merge Module or MSI installer project.  In the correct directory of the Files view window just add the content files of your newly created empty project.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XeMESVoGM_U/SF5Gnc3IHcI/AAAAAAAAADM/JY5ipCz6rHQ/s1600-h/Setup.jpg"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_XeMESVoGM_U/SF5Gnc3IHcI/AAAAAAAAADM/JY5ipCz6rHQ/s400/Setup.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5214683062117866946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;It has saved me a heck of a lot of time maintaining the directory structure in the installer project. Now I just maintain the file structure on the disk and in our source control.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Now to check out installawhere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3735411443187894991?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3735411443187894991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3735411443187894991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3735411443187894991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3735411443187894991'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/06/tip-on-adding-many-content-files-to-net.html' title='Tip on adding many content files to a .net setup project'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XeMESVoGM_U/SF5EhBp8XOI/AAAAAAAAADE/aNYecly3Nrg/s72-c/Empty+Project.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-7082135540331304837</id><published>2008-05-11T21:52:00.011+10:00</published><updated>2010-12-23T12:03:37.492+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Foxmarks the killer app for Firefox?</title><content type='html'>I've been using &lt;a href="http://www.foxmarks.com/"&gt;Foxmarks&lt;/a&gt; a bookmark synchronizer for FireFox for the last year or so.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XeMESVoGM_U/SCbg9nLxO7I/AAAAAAAAAC4/nkO23ZmvpPs/s1600-h/FoxMarks.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_XeMESVoGM_U/SCbg9nLxO7I/AAAAAAAAAC4/nkO23ZmvpPs/s400/FoxMarks.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5199090168940805042" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Its just this little icon on the corner of Firefox&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is fantastic, it kills del.iciou.us by a mile.  It so easy its just totally behind the scenes and I can organize my bookmarks using the standard bookmark manager.  Check it out if you can.  No crappy extra menu like delicious which, when i last used it, had no sub menus and i had to regroup/organize every single one of my existing bookmarks.  No way!  They lost me.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;&lt;br /&gt;Firefox&lt;/a&gt; is my browser of choice because it forces Microsoft to innovate and competition is a good thing.  I encourage everyone to download Firefox and use it as their primary browser with Foxmarks as their bookmark synchronization program, if for no other reason than a monopoly on the internet is not a good thing.  I don't mind there being big players and small players but without a critical mass people won't write their pages to work with Firefox, so no one will use it, so there will be a real incentive for Microsoft to create proprietary standards.  I'm assuming you are the technical elite or why are you reading a blog on software?  Go &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;download Firefox&lt;/a&gt;, so it keeps its critical mass, which will keep standards Open and maintain internet diversity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Its Free! 10/10 Foxmarks! Get Firefox.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-7082135540331304837?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/7082135540331304837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=7082135540331304837' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7082135540331304837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7082135540331304837'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/05/foxmarks-killer-app-for-firefox.html' title='Foxmarks the killer app for Firefox?'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XeMESVoGM_U/SCbg9nLxO7I/AAAAAAAAAC4/nkO23ZmvpPs/s72-c/FoxMarks.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-7389789815632369241</id><published>2008-05-06T19:35:00.004+10:00</published><updated>2010-12-23T12:07:28.816+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MS Office'/><title type='text'>The Office 2007 Orb</title><content type='html'>I found this &lt;a href="http://thenewpaperclip.com/2006/08/27/what-happened-to-the-file-menu-help-with-the-new-user-interface-in-office-2007/"&gt;link &lt;/a&gt;that says a bit about the Office 2007 orb.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The old style menu system from Office 2003, Office XP, and earlier versions has been replaced with a brand new interface, which most people call the ‘Ribbon’.  Why did Microsoft replace the old style menu with the new Ribbon?  Because it was getting to difficult to find the right menu options because the menus were too complicated.  The Ribbon is designed to make it easier to find the features that you need to use.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It still doesn't tell me why it doesn't have a word on it, and why it doesn't actually look like a button.  Its like its deliberately hidden. I assume there was some logic based upon some statistics but I don't grok this one.&lt;br /&gt;&lt;br /&gt;Anyway you can get your old &lt;a href="http://www.addintools.com/english/menuoffice/"&gt;toolbar back&lt;/a&gt; it seems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-7389789815632369241?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/7389789815632369241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=7389789815632369241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7389789815632369241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7389789815632369241'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/05/office-2007-orb.html' title='The Office 2007 Orb'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-7350278629634521661</id><published>2008-05-06T10:01:00.012+10:00</published><updated>2010-12-23T12:23:06.745+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MS Office'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets'/><title type='text'>Improve your IQ</title><content type='html'>I ran into this little game today. Gee it can get hard.  Its a game designed to improve your IQ, I can understand how it might work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dual-n-back.com/nback.html"&gt;http://dual-n-back.com/nback.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In addendum, my brothers laptop has easily migrated back to windows XP and he is a happy user again.&lt;br /&gt;&lt;br /&gt;In one final comment why is the menu for MS Office Vista an icon, not a word?  &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XeMESVoGM_U/SB-i0WDEUfI/AAAAAAAAACw/aRN_RWDnIUg/s1600-h/Office2007+Screen+Shot.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_XeMESVoGM_U/SB-i0WDEUfI/AAAAAAAAACw/aRN_RWDnIUg/s400/Office2007+Screen+Shot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5197051515164185074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Yep that sqiggly round hashy thing on the top left is a menu.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;In nearly every other program I have used in windows the menu's are labeled with words. Talk about breaking conventions, no wonder &lt;a href="http://www.joelonsoftware.com/items/2007/08/18.html"&gt;Joel Spolsky&lt;/a&gt; was not a fan.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-7350278629634521661?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/7350278629634521661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=7350278629634521661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7350278629634521661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/7350278629634521661'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/05/improve-your-iq.html' title='Improve your IQ'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XeMESVoGM_U/SB-i0WDEUfI/AAAAAAAAACw/aRN_RWDnIUg/s72-c/Office2007+Screen+Shot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5832039808226369275</id><published>2008-04-26T11:11:00.002+10:00</published><updated>2008-04-26T11:26:15.405+10:00</updated><title type='text'>Another Vista laptop bites the dust</title><content type='html'>My brother the other day called me up at work.  He'd just bought a new laptop and it had windows vista on it.  So he spent the morning trying to install things and had finally given up.  He rang me to find out if he could just back up vista onto disks and then downgrade to XP, keeping Vista in case he wanted to upgrade later.&lt;br /&gt;&lt;br /&gt;Now my brother has a degree in engineering, and an MBA.  He has worked as a materials engineer for a number of years, and then as middle management. Of late he's run his own business.  I consider him to be pretty well educated and techno savvy.&lt;br /&gt;&lt;br /&gt;So why did he give up on Vista?  The learning curve is too big, the hassles of things just not working on it are too big.  Microsoft had a morning of his time to ease him into it and it flunked.  I haven't even upgraded to Vista as I'd need a new PC at home.&lt;br /&gt;&lt;br /&gt;I guess its getting harder and harder for Microsoft to convince people to upgrade as there seems to be very little immediately obvious reason to migrate.  Maybe the memory requirements of programs will eventually break the 4GB barrier and with that 64 bit processors will take over and Vista at the same time.  Personally I hope it happens.  4GB of memory seems a silly limit to me and I like some of what I've seen in vista, but saying that we have never gotten over the x86 instruction set, so maybe it will just be easier to retro fit everything to XP forever? I hope not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5832039808226369275?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5832039808226369275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5832039808226369275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5832039808226369275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5832039808226369275'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/04/another-vista-laptop-bites-dust.html' title='Another Vista laptop bites the dust'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5116727223593991426</id><published>2008-04-15T14:55:00.008+10:00</published><updated>2010-12-23T12:33:00.278+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domain Specific Languages'/><title type='text'>Bjarne Stroustrup on DSL's</title><content type='html'>I found an interview with Bjarne Stroustrup of C++ fame on MSDN Magazine where they asked him about DSL's.&lt;br /&gt;&lt;br /&gt;I noted that he also thinks DSL's need a general purpose (I used the word broad) language fall back position.&lt;br /&gt;&lt;br /&gt;Q:  What are your thoughts on DSLs in general? What do you envision as the relationship between DSLs and general-purpose languages?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XeMESVoGM_U/SAQ2llfWWNI/AAAAAAAAACk/RWXq17ps-r4/s1600-h/Bjarne+Stroustrup.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_XeMESVoGM_U/SAQ2llfWWNI/AAAAAAAAACk/RWXq17ps-r4/s320/Bjarne+Stroustrup.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5189332689984313554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bjarne: I worry about the number of languages being designed, implemented, introduced with great fanfare, and then fading away without significant impact. During this—typically many-years long phase of development—a new language consumes significant resources with essentially no returns. I wrote a paper on this phenomenon called "A Rationale for Semantically Enhanced Library Languages" (research.att.com/~bs/SELLrationale.pdf). I argue for using libraries, possibly supported by tools, and a general-purpose language.&lt;br /&gt;I think that a DSL should be a last resort, not a first. If at all possible, the DSL should be firmly rooted in a general-purpose language and standard tool chains. A DSL needs a general-purpose language (or at least a systems programming language) for its implementation and the implementation of its run-time primitives. I think it would be best if a DSL is consciously and firmly paired with at least one general-purpose language so that it is easy to add new facilities through the use of libraries written in that general-purpose language. Obviously, a professional should master several languages, but I do wonder if the sum of complexity of a variety of DSLs couldn't become so high that it became a problem. Also, many (if not most) DSLs seem to "want to" become general-purpose languages.&lt;br /&gt;&lt;br /&gt;Here's the &lt;a href="http://msdn2.microsoft.com/en-us/magazine/cc500572.aspx"&gt;full interview &lt;/a&gt;if you want to see his opinion on other things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5116727223593991426?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5116727223593991426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5116727223593991426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5116727223593991426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5116727223593991426'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/04/bjarne-stroustrup-on-dsls.html' title='Bjarne Stroustrup on DSL&apos;s'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XeMESVoGM_U/SAQ2llfWWNI/AAAAAAAAACk/RWXq17ps-r4/s72-c/Bjarne+Stroustrup.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3054159125375632254</id><published>2008-04-13T20:12:00.025+10:00</published><updated>2010-12-23T12:25:48.165+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domain Specific Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>The trouble with DSL's (Domain Specific Languages )</title><content type='html'>&lt;p&gt;Why do we have &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language"&gt;domain specific languages&lt;/a&gt;?  They are supposed to make our lives easier for a specific task.  &lt;a href="http://en.wikipedia.org/wiki/SQL"&gt;SQL&lt;/a&gt; is the classic example of this, but XPath and other DSL's exist.  SQL does an excellent job of doing what it was designed to do, support database access.  Or does it?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;SQL began life without and If statement, without assignment statements (:=) and variables but PL/SQL and T/SQL added them to make it useful.  SQL has changed its spec 6 times since 1986.  To include new features that people thought it should do.  Still this is not enough.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;I think the concept of a DSL has a a fundamental flaw.  They can't move with business requirements and as such they need access to a broader language.  This almost defeats the entire purpose of them.  &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The solution going on around the database world is to replace or integrate the DSL (SQL) with broad languages.(Oracle and SQL Server now support .net assemblies).  The other solution is to add the useful features of the DSL into the non DSL (LINQ kind of adds SQL to .net).  The point is SQL as the most well known DSL has failed to accommodate the business requirements of the developers world.  And yet it is hugely popular and very useful.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The wikipedia entry for domain specific languages makes a good comment.  "A domain-specific language is somewhere between a tiny programming language and a scripting language, and is often used in a way analogous to a programming library."  And herein lies some of the problems with DLS's.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;DSL's are not libraries.  They are not easily extensible. You can add to a library pretty easily.  It's nigh on impossible for me to extend Oracle PL/SQL.  The only people who can extend PL/SQL are Oracle and they move like a glacier. (Does this mean they are speeding up of late with global warming? ;) )&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;DSL's by definition are limited in scope and usually dont' have access to the entire operating system.  This means they usually don't cover all of the area's that people want to use them for.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is a big problem for the developer.  Initially you get a problem and let's say you solve it with a DSL, like SQL.  It seems a a good solution, the language is designed for the job, its all a neat fit.  But inevitably business requirements change and code needs to be refactored.  But its a change thats not really in the fundamental design of the DSL, (ie you want to do some maths on data retrieved from a  database).  You oughta turf the DSL and go with a more flexible solution but you can't.   Time and effort has already been invested, there is no time, the impact would not be this one area of the code but would affect other areas of the system.  You are forced politically to go with the existing solution and do some kind of work around.  The code ends up as a bit of spaghetti as a result and maintainability suffers.  This goes on for a while and eventually the entire system becomes a rigid, impossible to morph system prone to bugs and errors due to the enormous complexity.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The problem here was not the change of the system, that happens all the time, the problem was the choice of a DSL.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is hard to refactor SQL and as far as I know you can't unit test SQL.  While functions are supported, classes aren't and using maths libraries in SQL is way out there.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Part of the problem lies in that SQL does not have access to a broad language like C#.  &lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx"&gt;LINQ &lt;/a&gt;is an attempt to solve this.  This traditional boundary of DSL's not having access to the full operating system (which is by design) is a fatal flaw.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So my thought is to be warned when you choose a DSL that will not have access to a broad language.  Ask yourself will it work in the longer haul? Can you break out of it to do non DSL specific things?  And do this before you are wedded to the code base it will create.  They have good bits but they are all flawed. &lt;span style="font-weight:bold;"&gt;In the end I now try and only use DSL's that have access to a broad language if I reasonably can (note the use of reasonably).&lt;/span&gt; Still I like the fundamental structure of something like SQL.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3054159125375632254?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3054159125375632254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3054159125375632254' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3054159125375632254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3054159125375632254'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/04/trouble-with-dsls-domain-specific.html' title='The trouble with DSL&apos;s (Domain Specific Languages )'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3366862432129708038</id><published>2008-04-05T11:37:00.009+11:00</published><updated>2010-12-23T12:34:21.344+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinion'/><title type='text'>The case against inheritance</title><content type='html'>I was posting a reply to a codeproject lounge comment the other day when I got a response that challenged me to &lt;a href="http://www.codeproject.com/Lounge.aspx?msg=2494412#xx2494412xx"&gt;justify why its good multiple inheritance is not in c#&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll cut and copy my response here&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-style:italic;"&gt;You don't have to know what every method does of the parent class(es). You just have to implement the interface.&lt;br /&gt;&lt;br /&gt;If you don't know what the parent class(es) do then when you modify an existing class structure you may leave in (fail to override) code that will just not work. And that applies all the way up the inheritance tree too. The deeper the inheritance tree the more you have to know if your going to modify the structure. Usually I find just using a class is fine, but modifying a class hierarchy to me requires you understand it on a deeper level.&lt;br /&gt;&lt;br /&gt;Now maybe this is just an argument against inheritance in general but multiple inheritance just makes it harder and binds things together more tightly.&lt;br /&gt;&lt;br /&gt;In general I'm moving away from inheritance as it has&lt;br /&gt;1. largely failed to provide code reuse on a big scale,&lt;br /&gt;2. has a habit of hiding implementation details and&lt;br /&gt;3. locks in structure based on assumptions/goals that change and make it hard(er) to modify.&lt;br /&gt;&lt;br /&gt;The best form of code reuse I have heard of is in components, in particular VB components and they don't use inheritance in that model as far as I know. Though internally the component may.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;One of my experiences with the problems of inheritance hierarchies was when designing a bunch of firewire camera classes to grab frames from multiple cameras and save them to disk, in c++.  We initially designed a nice little class hierarchy based on a a Basler BCAM library with a common frame grabbing thread.  The aim being that if we wanted to use a different library we could just replace the Basler camera library with the new camera library object.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Of course along came a second &lt;a href="http://www.cs.cmu.edu/~iwan/1394/"&gt;CMU&lt;/a&gt; library and we found that this was trickier than expected. The libraries grabbed frames in a different manner to each other and this is where we went wrong.  The first one had a sequence of 1. Set callback in camera library, 2. Start 3. Wait for Frames to arrive. 4. End grabbing frames.  The second library had a sequence of 1. Begin Grabbing Frames, 2. Grab Frame, 3. End grabbing frames.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So we tried to fit the second camera library to the existing structure, bad move.  Eventually it got done but it was a huge effort just to maintain the same frame grabbing thread code. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;It would have been much easier to have had an interface to each library and write code for each type of camera.  What really happened is I foolishly believed that the original hierarchy we had defined would apply to all camera libraries and that a new camera would simply slide into our class hierarchy.  This wasn't true, we had bound our existing classes too tightly to the Basler library.  At that point we should have abandoned modifying the existing class hierarchy and moved to a different code base for the new type of camera library.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The real point about this is that because I had a class hierarchy I thought I should reuse it.  If it had been just an interface then I probably would have been less emotionally and politically tied into it.  What can I say, I was young and inexperienced, none the less it is a lesson well learned.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;p&gt;The lessons I learnt&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Changing a class hierarchy may impact on many areas.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Class hierarchies can be hard to change&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Because they are hard to change they can tie you politically and emotionally into a way of thinking&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Inherited code can be harder to reuse than helper classes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Inheritance doesn't necessarily lead to much code reuse.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;If you want to know the arguments a little further get the book &lt;a href="http://www.amazon.com/Effective-Specific-Improve-Software-Development/dp/0321245660/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1207356308&amp;sr=8-1"&gt;&lt;span style="font-weight:bold;"&gt;Effective C#&lt;/span&gt;&lt;/a&gt; by Bill Wagner page 118&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3366862432129708038?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3366862432129708038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3366862432129708038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3366862432129708038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3366862432129708038'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/04/case-against-inheritance.html' title='The case against inheritance'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-4951527842477313832</id><published>2008-03-27T18:35:00.010+11:00</published><updated>2010-12-23T12:30:20.195+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Installers'/><title type='text'>There is no MTS object context</title><content type='html'>I/we ran into a installer error the other day at work when we were installing on a Windows XP machine.  A dialog popped up saying "There is no MTS context object".  Then a couple of days later it came up again installing on a windows 2003 machine.   So we searched installer logs using the "voicewarmupx" registry key. Check the &lt;a href="http://blogs.msdn.com/windows_installer_team/archive/2005/09/21/471793.aspx"&gt;Windows Installr Team Blog&lt;/a&gt; for how to generate these log files.&lt;br /&gt;&lt;br /&gt;Well in the end &lt;span style="font-weight:bold;"&gt;Ben Hounslow &lt;/span&gt; (he even gets his name in bold) one of the guys at work found a solution, so if you ever run into this error here is the solution below as cut and paste from Ben's email.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;"Microsoft Distributed Transaction Coordinator was installed but was non-functional. This caused the installer to fail with the following error:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XeMESVoGM_U/R-tPQUUf1NI/AAAAAAAAACE/IiNaQ2mT3AQ/s1600-h/MTS+Context+Error.jpg"&gt;&lt;img style="float:middle; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_XeMESVoGM_U/R-tPQUUf1NI/AAAAAAAAACE/IiNaQ2mT3AQ/s320/MTS+Context+Error.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5182322937971070162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This problem can be resolved by reinstalling MSDTC. This can be done with the following commands (entered at the command-line):&lt;br /&gt;&lt;br /&gt;msdtc –uninstall&lt;br /&gt;[may need to reboot at this point]&lt;br /&gt;msdtc –install&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;All thanks to Ben for this fix.  How the MS Distributed Transaction Coordinator became damaged is nobody knows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-4951527842477313832?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/4951527842477313832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=4951527842477313832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4951527842477313832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4951527842477313832'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/03/there-is-no-mts-object-context.html' title='There is no MTS object context'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XeMESVoGM_U/R-tPQUUf1NI/AAAAAAAAACE/IiNaQ2mT3AQ/s72-c/MTS+Context+Error.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-712166656535229043</id><published>2008-03-11T22:55:00.002+11:00</published><updated>2008-03-11T23:02:52.971+11:00</updated><title type='text'>My goals for the year</title><content type='html'>Better late than never I figure Ill put down my goals for the year.  I must be feeling motivated.&lt;br /&gt;&lt;br /&gt;1. Marry my gal Susheila.  Thats an easy one.&lt;br /&gt;&lt;br /&gt;2. Build a web page. The aim is to make a self sustaining, low maintenance web page.  I have always wanted a Sudoku helper/hinter. Something that will help me with the tough ones when I get stuck.  I plan to use it as an excuse to firstly learn Ruby and web programming which I am sorely lacking in.&lt;br /&gt;&lt;br /&gt;Secondly its part of a larger plan to make some money from the web eventually.&lt;br /&gt;&lt;br /&gt;Thirdly its an ad for my skills.&lt;br /&gt;&lt;br /&gt;3. Search for houses/apartments.  This I will leave until later in the year when the housing market has settled a bit.&lt;br /&gt;&lt;br /&gt;Well thats all for now and thats probably a big enough list for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-712166656535229043?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/712166656535229043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=712166656535229043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/712166656535229043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/712166656535229043'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/03/my-goals-for-year.html' title='My goals for the year'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2162286473398967751</id><published>2008-03-05T08:08:00.009+11:00</published><updated>2008-03-12T09:44:28.818+11:00</updated><title type='text'>When UI design wins!</title><content type='html'>At work we have to record our time on our time sheets.  I have never been all that good at doing this, partly making it up each week once I had to fill it in.  I've tried a few timing programs in the past but hadn't found a good one.&lt;br /&gt;&lt;br /&gt;Recently I looked again.  At first I was suggested one by a work colleague. Susheila said "It looks like government made it" when she saw it. So I looked around some more.&lt;br /&gt;&lt;br /&gt;Then I found &lt;a href="http://www.slimtimer.com"&gt;SlimTimer&lt;/a&gt; by Richard White.  It just kicks arse over the other timing programs I have looked at.  All you do is add tasks and select your current task.  Then it logs the time you have taken.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XeMESVoGM_U/R828tnTxLJI/AAAAAAAAAA8/r2Y6xGVaWeU/s1600-h/Slim+Timer.jpg"&gt;&lt;img style="float:centre; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_XeMESVoGM_U/R828tnTxLJI/AAAAAAAAAA8/r2Y6xGVaWeU/s320/Slim+Timer.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5173999038750600338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Combined with bubbles which puts an icon in the system tray for any url you care to imagine this has transformed my time sheet world.  I now actually know what I do each day and for how long.  Some tasks that I feel are taking ages, I can now prove are taking ages, which gives me more information to choose when to pull the plug.&lt;br /&gt;&lt;br /&gt;The reporting section is one of the wonders of SlimTimer, its just obvious how to use it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XeMESVoGM_U/R82-KnTxLKI/AAAAAAAAABE/zI27nxuIl4c/s1600-h/Slim+Timer+Reports.jpg"&gt;&lt;img style="float:centre; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_XeMESVoGM_U/R82-KnTxLKI/AAAAAAAAABE/zI27nxuIl4c/s320/Slim+Timer+Reports.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5174000636478434466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I thoroughly recommend it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2162286473398967751?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2162286473398967751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2162286473398967751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2162286473398967751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2162286473398967751'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/03/when-ui-design-wins.html' title='When UI design wins!'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XeMESVoGM_U/R828tnTxLJI/AAAAAAAAAA8/r2Y6xGVaWeU/s72-c/Slim+Timer.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-1645584314667930735</id><published>2008-02-09T14:12:00.000+11:00</published><updated>2008-02-09T14:59:33.096+11:00</updated><title type='text'>Microsoft to become Big Blue II?</title><content type='html'>I ran into a blog entry today &lt;a href="http://www.bbc.co.uk/blogs/technology/2008/02/microsoft_is_a_doomed_dinosaur.html"&gt;Is Microsoft a doomed dinosaur&lt;/a&gt; and felt I had to respond.&lt;br /&gt;&lt;br /&gt;For me the more I hear and read about Microsoft, the more I think they are doomed.  And its not Open source thats going to take over, its sheer middle management inertia that is going to slowly choke Microsoft.  A while back I heard Microsoft had 7 layers of management between Bill Gates and the developers. I figure Steve Ballmer has recognized this with his "Developers Developers Developers" speech, the problem here is that as soon as Steve goes the next CEO will be a person who is good at playing internal politics.  They will not be an entrepreneur, they will not be an exceptional businessman with an eye for an opportunity like Rupert Murdoch.  They will be smart, a great presenter and wear really nice suits. But they won't be what made Microsoft the behemoth it is today.&lt;br /&gt;&lt;br /&gt;They will be &lt;a href="http://en.wikipedia.org/wiki/IBM"&gt;&lt;span style="font-weight: bold;"&gt;Big Blue II &lt;/span&gt;&lt;/a&gt;style middle management rising to the top.&lt;br /&gt;&lt;br /&gt;And just like Apple in the 80's during &lt;a href="http://en.wikipedia.org/wiki/Gil_Amelio"&gt;Gil Amelio's&lt;/a&gt; tenure at the top, they will slowly drown in company politics and stupid decisions.&lt;br /&gt;&lt;br /&gt;In some ways I feel Steve Ballmer is already making some ordinary decisions, that appear to focus on near term profits for and from businesses, not on building communities, but he is trying to &lt;a href="http://www.blogger.com/post-create.g?blogID=6294800522287787952"&gt;focus on developers&lt;/a&gt; which I will give him credit for.  No one person in IT has all the ideas and one of Microsoft's historic strengths has been to steal other peoples good ideas (Windows, Browsers, tabbed Browsing the list is endless).  This is leading to some really good ideas like Silverlight and the profits are growing.&lt;br /&gt;&lt;br /&gt;Don't get me wrong, I don't think Microsoft is going to go away pretty much ever, like IBM, but I suspect it will be a long (20-30 year) slow grind downwards, based  on the wrong people, too many middle people,  average decisions, bad internal culture and some shocks along the way.   Eventually they will get to where they do not have a single no 1. selling product in any category just like IBM got to in the 80's. Oh and more people will wear suits to work, than not.&lt;br /&gt;&lt;br /&gt;Maybe Steve will have an epiphany before then and split the company up into Baby M's, but you can almost guarantee no one new will do it.  It won't be in any new CEO's own interest ever to do it.&lt;br /&gt;&lt;br /&gt;But I'll be about retirement age when that happens, so I'll just keep along for the ride.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-1645584314667930735?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/1645584314667930735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=1645584314667930735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1645584314667930735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1645584314667930735'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/02/microsoft-to-become-big-blue-ii.html' title='Microsoft to become Big Blue II?'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-859406358977458692</id><published>2008-01-28T15:26:00.002+11:00</published><updated>2010-12-23T12:34:38.336+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Opinion'/><title type='text'>Optimal Lines of code per Method</title><content type='html'>What is the optimal lines of code per method?  How long should you make a function?&lt;br /&gt;&lt;br /&gt;For years I've lent on a rule of thumb, every method must be viewable on a single screen.  I assume I read it somewhere and it seemed logical to me and I've done it ever since.&lt;br /&gt;&lt;br /&gt;Recently though I thought I'd go find where I got this rule from, so I looked up my old copy of &lt;a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1201494792&amp;amp;sr=1-1"&gt;Code Complete&lt;/a&gt;.  In chapter 5.5 How Long Can a Routine Be? it points out a few studies that suggest that my rule of thumb is wrong! Up to 200 lines of code was acceptable per routine.  Something made me a little suspicious of this partly due to the fact they were using the word "routine" instead of "method".  This leads me to think they were thinking in terms of C routines and also that some of the studies in the book may be out of date. Earlier on the book was even arguing for using routines, well duh!!!  Which I find just amazing, still methods must have come from somewhere.&lt;br /&gt;&lt;br /&gt;So I searched around the net and found &lt;a href="http://www.faqs.org/docs/artu/ch04s01.html"&gt;an article on encapsulation and module size&lt;/a&gt;.  It claims a module is most effective when between 200-400 functional Lines of Code.  Which leads to 400-800 lines of code with comments white space etc.  Which is more within my thinking.&lt;br /&gt;&lt;br /&gt;Still this didn't solve my problem, where did I hear this rule?  Well the answers is I can't find it.  But I have a guess as to where it comes from.  Earlier in Code Complete it mentions "Cohesion" breaking it up into 4 good types, Functional, Sequential, Communicational and Temporal. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Functional cohesion is when a method performs only one operation e.g. sin, GetLocation, CalculateLoanPayment.  I have always striven for this as it makes my code easier for me to understand.&lt;/li&gt;&lt;li&gt;Sequential cohesion is when a group of things have to be done in order.  I find this common enough but each step in the sequence I will break up into functionally cohesive method calls.&lt;/li&gt;&lt;li&gt;Communicational cohesion is when the method operates on the same data but may do two things on it.  I generally don't like methods like this.&lt;/li&gt;&lt;li&gt;Temporal Cohesion is things that occur at the same time. ie OnLoad&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I think that in my efforts to create functionally cohesive methods I have adopted a practice that the studies of the mid 80's did not support.   To make a function cohesive I have to see it all at the same time and confirm it really only does one thing.  Even  now if i run into a big method i bust it down to understand it.&lt;br /&gt;&lt;br /&gt;The later study I found, while not directly supporting small methods, pretty much makes it impossible to create long methods while having shortish classes.  In the end you would have 2-6 methods per class, each ranging from 65 to 200 lines of code.&lt;br /&gt;&lt;br /&gt;Code Complete hints that functional cohesion is the most important of the cohesions and it seems pretty obvious to me.  One method to do one thing, how easy is that?&lt;br /&gt;&lt;br /&gt;What this leads me to believe is that a new generation of developers have been trained in OO methods and think differently when coding.  And that the studies done in the 80's are probably out of date in regards OO coding practices.         For one thing there is no mention of  &lt;a href="http://www.sei.cmu.edu/str/descriptions/cyclomatic.html"&gt;Cyclomatic Complexity&lt;/a&gt; or &lt;a href="http://www.sei.cmu.edu/str/descriptions/halstead.html"&gt;Halstead Complexity measures&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have a few Electrical Engineering friends who still seem to get taught to code in sequence, rather than in encapsulated object terms.  Is this better or worse?  I'm not sure.  We know that sequential code can become spaghetti but this has as much to do with bad cohesion and coupling, rather than method length. &lt;br /&gt;&lt;br /&gt;Is OO better, I suspect so in that it encourages encapsulation and functional cohesion.  Note how i said encourages, because some coders just never grok these two terms.  Which is probably bad, but maybe not if some of the old Code Complete studies still apply.  I also  like to create logically cohesive objects, which is what OO (Object Orientation)  is all about.  BigMother is not a good name for an object (or a database table, which I once ran into).&lt;br /&gt;&lt;br /&gt;So in the end i think i chose my rule of thumb based on functional cohesion and cyclomatic complexity without having a study to base it on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-859406358977458692?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/859406358977458692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=859406358977458692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/859406358977458692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/859406358977458692'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/01/optimal-lines-of-code-per-method.html' title='Optimal Lines of code per Method'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-403663343491343353</id><published>2008-01-25T09:27:00.003+11:00</published><updated>2010-12-23T12:05:26.856+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Changed the title</title><content type='html'>I changed the title of my blog today in response to an article on &lt;a href="http://seonoobs.com/your-crappy-title-tag-is-costing-you-money-are-you-on-my-list"&gt;Seonoobs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While I didn't agree with the article's contention that long title's are always good, I do agree with the keywords idea and I thought who would read my blog if all it says is "The Occasional Observation".  Observations on what? is the logical next question.  So I've changed it to use a few keywords.  I may change the title again as time goes on.  It will be interesting to see where I end up in the google search ranks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-403663343491343353?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/403663343491343353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=403663343491343353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/403663343491343353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/403663343491343353'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/01/changed-title.html' title='Changed the title'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3802283774339083763</id><published>2008-01-17T09:15:00.003+11:00</published><updated>2010-12-23T12:29:09.599+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Domain Specific Languages'/><title type='text'>Bagging UML</title><content type='html'>We were chatting about UML the other day at work and one guy found this article &lt;a href="http://archive.eiffel.com/doc/manuals/technology/bmarticles/uml/page.html"&gt; bagging UML&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm a bagger of UML too, I've never really liked it.  It seems to me it was just 3 guys combining their own 3 ways of doing diagrams.  So it ended up being design by committee, with hundreds of symbols meaning arcane and obscure things. It's still hard to beat screen shots, flow charts and basic object diagrams with stuff written on them in English so you know what the heck each blob means.&lt;br /&gt;&lt;br /&gt;Maybe one day I'll propose a simple modeling language, nice and opinionated like &lt;a href="http://www.rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt;.  Then I'll leave UML to the architects and managers in big Telco's who use it as an excuse to justify their existence. (see the last paragraph of &lt;a href="http://archive.eiffel.com/doc/manuals/technology/bmarticles/uml/page.html"&gt; bagging UML&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3802283774339083763?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3802283774339083763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3802283774339083763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3802283774339083763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3802283774339083763'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/01/bagging-uml.html' title='Bagging UML'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2344302515631779584</id><published>2008-01-01T09:10:00.003+11:00</published><updated>2010-12-23T12:22:28.069+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Readify Developer Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>PowerShell and silverlight downloads beta</title><content type='html'>I ran into the new windows PowerShell the other day at another &lt;a href="http://www.readify.net/Default.aspx?tabid=302"&gt;Readify Developer Network&lt;/a&gt; session.  Presented excellently by &lt;a href="http://notgartner.wordpress.com/" &gt;Mitch Denny&lt;/a&gt; with true geek cred.&lt;br /&gt;&lt;br /&gt;So following the cues I downloaded &lt;a href="http://ps1.soapyfrog.com/2007/01/02/space-invaders/"&gt;space invaders&lt;/a&gt; for PowerShell by soapyfrog.  Its an interesting example of how to to things in PowerShell and get graphics going.&lt;br /&gt;&lt;br /&gt;Excellent stuff must get into it some more.&lt;br /&gt;&lt;br /&gt;Also in my travels I have run into the new silverlight based &lt;a href="http://www.microsoft.com/beta/downloads/Default.aspx"&gt;microsoft downloads page&lt;/a&gt;.  At work we have been debating whether or not silverlight will kick off.  Its a plugin afterall, and people are loathe to download plugins.  But this is sheer genius, make the default download page use silverlight and the world downloads your plugin.  Also the world downloads the latest version of your plugin too.  Once again another example of microsoft proving it is the catch up football king.&lt;br /&gt;&lt;br /&gt;Silverlight is here to stay and could really start to make inroads.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2344302515631779584?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2344302515631779584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2344302515631779584' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2344302515631779584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2344302515631779584'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2008/01/powershell.html' title='PowerShell and silverlight downloads beta'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3532863107819252226</id><published>2007-12-07T09:39:00.001+11:00</published><updated>2010-12-23T11:59:55.984+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gadgets'/><title type='text'>iGoogle's todo list</title><content type='html'>I discovered iGoogle's &lt;a  href="http://www.google.com.au/ig/directory?q=todo&amp;hl=en&amp;root=%2Fig&amp;igtab=News&amp;dpos=top" &gt;todo list widget&lt;/a&gt; today. I was even thinking of writing my own but now I'm a happy little munchkin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3532863107819252226?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3532863107819252226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3532863107819252226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3532863107819252226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3532863107819252226'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/12/igoogles-todo-list.html' title='iGoogle&apos;s todo list'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-6342752721606813422</id><published>2007-12-02T12:05:00.000+11:00</published><updated>2007-12-10T10:54:02.734+11:00</updated><title type='text'>Domain Driven Design</title><content type='html'>So I went to another readify session the other day, this one about domain driven design.  Some guy from Sydney was presenting it and he knew he was getting into holy war territory.  There was the usual discussion, all of it good natured.&lt;br /&gt;&lt;br /&gt;So what did I learn.&lt;br /&gt;&lt;br /&gt;I think I learnt about the use of an aggregate.  A class encapsulating a number of other classes/objects that has methods attached to it that may apply across more than one of the other objects. The example used was a transaction object, being used to deposit money into a bank account.  Is the deposit method attached to the bank, the account or the customer.  I suppose this has traditionally been the account that has transactions applied to it, but the suggested solution was to have a transaction aggregate object that has an account, a customer and a bank attached to it and put the deposit method on this object.&lt;br /&gt;&lt;br /&gt;I'm not sure its a great example but I've seen similar things occur where a method can apply across two or more objects. usually it has led me to tack it onto one or the other object and pass a reference to the other required object.  I always felt this was a little crap and now i have a logical solution and a reason why.  &lt;br /&gt;&lt;br /&gt;I learn a little more every day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-6342752721606813422?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/6342752721606813422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=6342752721606813422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/6342752721606813422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/6342752721606813422'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/12/domain-driven-design.html' title='Domain Driven Design'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2045502337973227800</id><published>2007-10-26T10:01:00.002+10:00</published><updated>2010-12-23T12:23:45.379+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opinion'/><title type='text'>Response to 5 easy ways to fail</title><content type='html'>Joel Spolsky wrote an article on &lt;a href="http://www.joelonsoftware.com/items/2007/10/25.html"&gt;5 easy ways for a software project to fail&lt;/a&gt; and I think I disagree with Joels first point.  I think in every team i have worked in there has been a star or two, a pile of middle ground developers and some duds.  In my experience its more important to get rid of the duds than to get the 'superstars'.&lt;br /&gt;&lt;br /&gt;While stars can be great, they are few and far between and they may not fit your corporate culture.  Stars also have a habit of doing things their own way which no one else can follow and make themselves indispensable.&lt;br /&gt;&lt;br /&gt;Back at HIH a now defunct Australian insurance company, i was working in Oracle Forms 2.0 with some extra additions that had been added by the local guru.  They were great and made our developers lives easier, but then we moved to Forms 3.0 and voila these proprietary extensions didn't upgrade nicely.  Which in the end created a headache and a lot of extra work in the upgrade process.  My point being that the local guru, I don't know his name, did things which probably cost the company a lot of money in the end.  I don't really know the politics of why the extensions got added.&lt;br /&gt;&lt;br /&gt;I find a true superstar is not just a good coder but a good teacher as well.  So people can follow what has gone before.  I wonder if thats what Joel looks for when he chooses coders.&lt;br /&gt;&lt;br /&gt;But i agree to avoid 'duds' just read any article from http://worsethanfailure.com/ to see the value of avoiding duds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2045502337973227800?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2045502337973227800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2045502337973227800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2045502337973227800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2045502337973227800'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/10/response-to-5-easy-ways-to-fail.html' title='Response to 5 easy ways to fail'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-191830631564567818</id><published>2007-10-22T21:17:00.002+10:00</published><updated>2010-12-23T12:40:56.922+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Server 2008 and AJAX session</title><content type='html'>Last Thursday i went to another of the Readify developer networks sessions.&lt;br /&gt;&lt;br /&gt;This time Greg Low put on a show about SQL Server 2008 and all its new goodies&lt;br /&gt;The highlights that come to mind are partial indexes, sparse columns and the huge number of other things they have added.  In one of those amazingly useless Microsoft slides, Greg displayed all 100 or so things that have been added.   Why can't Microsoft group these under headings? please.&lt;br /&gt;&lt;br /&gt;T/SQL seems to have undergone a bit of a change too with table types being passed into procedures now and separate Date and Time classes now.  All good stuff.&lt;br /&gt;&lt;br /&gt;Damian Edwards came back for a repeat performance to follow up his Silverlight presentation of a few weeks ago.  This time it was on AJAX and the basics.  Time was short and Damian sped through the basics of AJAX, if you were already a web developer you may have felt it was a bit light on. For myself I'm just learning web stuff, but being a coder of a few years experience it was a good look at how Microsoft AJAX works in the new rich internet world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-191830631564567818?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/191830631564567818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=191830631564567818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/191830631564567818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/191830631564567818'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/10/sql-server-2008-and-ajax-session.html' title='SQL Server 2008 and AJAX session'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-4441013520399854380</id><published>2007-10-09T11:39:00.001+10:00</published><updated>2007-10-09T11:42:56.177+10:00</updated><title type='text'>Hooking up to technorati</title><content type='html'>&lt;a href="http://technorati.com/claim/5kzm3jaw6f" rel="me"&gt;&lt;a href="http://technorati.com/faves?sub=addfavbtn&amp;amp;add=http://theoccasionalobservation.blogspot.com"&gt;&lt;img src="http://static.technorati.com/pix/fave/tech-fav-1.png" alt="Add to Technorati Favorites" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-4441013520399854380?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/4441013520399854380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=4441013520399854380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4441013520399854380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/4441013520399854380'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/10/hooking-up-to-technorati.html' title='Hooking up to technorati'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-5809624892463406819</id><published>2007-10-08T17:46:00.001+10:00</published><updated>2010-12-23T12:20:04.709+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><title type='text'>I forgot to mention Databinding</title><content type='html'>In my last post about XAML I forgot to mention data binding. It appears to have improved a lot.  From the demo i saw, you can now bind more than one object to the same data source and they both get updated "automagically" when the data changes.&lt;br /&gt;&lt;br /&gt;This really kicks arse IMHO. Its like you get a Model View pattern now without having to implement the Observer pattern.&lt;br /&gt;&lt;br /&gt;Damian Edwards who did the presentation had used it to make a demo game of Space Invaders using a timer and data binding.  Very cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-5809624892463406819?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/5809624892463406819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=5809624892463406819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5809624892463406819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/5809624892463406819'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/10/i-forgot-to-mention-databinding.html' title='I forgot to mention Databinding'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-1150575391406411671</id><published>2007-10-06T00:39:00.001+10:00</published><updated>2010-12-23T12:04:08.567+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Readify Developer Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Readify .Net Session</title><content type='html'>Last thursday i went to a free session hosted by Readify at Cliftons on collins st.  It was about WPF and Silverlight.  It was part of the &lt;a href="http://www.readify.net/rdn.aspx"&gt;Readify Developer Networks sessions&lt;/a&gt;.  If all of the presentations are to be of this standard then i highly recommend them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I came away with some new things out of the silverlight session&lt;br /&gt;- Silverlight has isolated storage on the client side&lt;br /&gt;- Javascript can be called and can get called from managed code&lt;br /&gt;&lt;br /&gt;and a few things from the WPF&lt;br /&gt;- XAML is pretty amazing and I can imagine will become amazingly hard to read very quickly.&lt;br /&gt;- XAML forms have a practical limit of 5000 items in their control tree&lt;br /&gt;- Windows Forms can be hosted from XAML and vice versa&lt;br /&gt;&lt;br /&gt;And most imprtantly i think i got inspired a little on the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-1150575391406411671?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/1150575391406411671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=1150575391406411671' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1150575391406411671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/1150575391406411671'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/10/readify-net-session.html' title='Readify .Net Session'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-2538718426456240853</id><published>2007-10-01T22:09:00.001+10:00</published><updated>2010-12-23T12:19:08.884+11:00</updated><title type='text'>This blog to become computer related only.</title><content type='html'>I've been chatting to my girlfriend, susheila, and we've come to a decision to make this blog basically about computers and technology only.&lt;br /&gt;&lt;br /&gt;Ill move any comments i make on politics and sport to other blogs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-2538718426456240853?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/2538718426456240853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=2538718426456240853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2538718426456240853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/2538718426456240853'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/10/this-blog-become-computer-related-only.html' title='This blog to become computer related only.'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6294800522287787952.post-3991843779521938902</id><published>2007-09-26T22:43:00.000+10:00</published><updated>2007-09-26T22:52:58.585+10:00</updated><title type='text'>A First Post</title><content type='html'>Welcome to my blog.&lt;br /&gt;&lt;br /&gt;I plan to chat about the things that interest me,  this includes in no particular order&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Software&lt;/li&gt;&lt;li&gt;Computer Science&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Politics, History, Archaeology&lt;/li&gt;&lt;li&gt;Sports&lt;/li&gt;&lt;/ul&gt;and anything else that takes my fancy.&lt;br /&gt;&lt;br /&gt;I may convert this into 3 or 4 different blogs based on these subjects in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6294800522287787952-3991843779521938902?l=theoccasionalobservation.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theoccasionalobservation.blogspot.com/feeds/3991843779521938902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6294800522287787952&amp;postID=3991843779521938902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3991843779521938902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6294800522287787952/posts/default/3991843779521938902'/><link rel='alternate' type='text/html' href='http://theoccasionalobservation.blogspot.com/2007/09/first-post.html' title='A First Post'/><author><name>Tim Yen</name><uri>http://www.blogger.com/profile/03910041717054478120</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
