<?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-8718181</id><updated>2011-04-22T05:39:41.890+01:00</updated><title type='text'>mat salleh - the ramblings of a "white man"...</title><subtitle type='html'>discussions on iTV, software dev, communication, and anything else i feel like ;-)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8718181.post-115919359348082867</id><published>2006-09-25T14:47:00.000+01:00</published><updated>2006-09-25T15:13:13.490+01:00</updated><title type='text'>O'Reilly Code Search</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/Image1.0.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/Image1.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;O'Reilly, the people that brought you the programming "animal" books, have just released a new searchable website of all the code examples in their books.  The database contains examples from nearly 700 books, over 123,000 individual examples, composing of 2.6 million lines of code.  Being a bit of an O'Reilly fan this could be a mighty handy tool.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.oreilly.com/code/"&gt;O'Reilly Code Search&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oreilly.com/"&gt;O'Reilly.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115919359348082867?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115919359348082867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115919359348082867' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115919359348082867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115919359348082867'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/09/oreilly-code-search.html' title='O&apos;Reilly Code Search'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115885621397252118</id><published>2006-09-21T15:57:00.000+01:00</published><updated>2006-09-21T17:30:17.060+01:00</updated><title type='text'>Change, Learning Curves, and Kung Fu</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/leungslide4c.0.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/leungslide4c.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Being in IT and computing I'm fundamentally in the business of change.  Instigators of change are essentially trying to make things better, smarter, faster, more productive etc.  However, it is more than apparent that the majority of people in the world hate change.  But why is that?&lt;br /&gt;&lt;br /&gt;The instigator of change usually has all those who benefit from the old way of doing things as his enemies and he has only lukewarm supporters from those that will benefit from his new way of doing things.  Seems like change is a big risk will only a small reward.  So why the big imbalance?&lt;br /&gt;&lt;br /&gt;Why are those who stand to gain from change usually so lukewarm in support of it?  Well, again simply because people hate change.  When we start out to change something it’s never certain that we will succeed and it's this uncertainty that is more compelling than the potential for any gain.  People don't like to gamble what they already have.  It is also true that the masters of the old ways will likely take offence to the change as it demeans what they currently do.  "What you currently do, and have been doing for years, isn’t so good.  You should do it this way".  Not surprisingly this causes resistance.&lt;br /&gt;&lt;br /&gt;Once a new change has been made anyone involved will go through a period of learning how to use or deal with the change.  For example someone being trained to use a new replacement system.  Tom DeMarco and Timothy Lister, of "&lt;a href="http://www.amazon.co.uk/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439/sr=8-1/qid=1158854805/ref=pd_ka_1/026-1374621-8114015?ie=UTF8&amp;s=books"&gt;Peopleware&lt;/a&gt;" fame, call this the &lt;span style="font-style: italic;"&gt;Chaos Phase&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;This &lt;span style="font-style: italic;"&gt;Chaos Phase&lt;/span&gt;, in which the individual is just starting out on a new learning curve, is also likely to cause further dislike of change, not necessarily because they have to learn something new, but more likely because of their misconception of what a learning curve really is.&lt;br /&gt;&lt;br /&gt;Training in &lt;a href="http://www.wingtsunwelt.com/"&gt;Wing Tsun&lt;/a&gt; (a type of Kung Fu) one of my instructors often mentioned how many students misunderstood learning curves.  If you imagine a graph, most people believe a learning curve to be a line with their ability starting at zero and slowly going up with time.  However, this is a misconception and one that can lead to feelings of disappointment in the student.  Instead a learning curve is indeed a line that increases with time (hopefully) but one that starts below zero (&lt;a href="http://matsalleh.co.uk/images/blog/learning_curve.gif"&gt;see graph&lt;/a&gt;).  For example, everybody (who has arms and hands) can throw a punch.  A child of 4 can throw a punch.  It may be slow, inefficient or lacking in power but everyone can throw one.  Now assume an instructor teaches you how to throw a particular, better punch, in the case of Wing Tsun this could be a straight punch from near the chest outward with a vertical fist.  When you first start training in throwing the punch it will seem very awkward, you will probably perform it poorly, it will be lacking in power, and it will probably cause negative feelings (“this feels wrong”, “I couldn’t knock a fly out with this” etc).  In fact the punch will be so bad it will be worse than your original natural punch (however poor that may be).  You are now at the beginning of the learning curve and your performance is less than zero (i.e. less than your original way) and things are making you feel more negative than they were at the start.&lt;br /&gt;&lt;br /&gt;It will take a little time, as your performance increases, before the new way "overtakes" in performance the old way and the &lt;span style="font-style: italic;"&gt;Chaos Phase&lt;/span&gt; ends.  And it’s this negative feeling of uneasiness, of being at the start of the learning curve that causes this further dislike of change.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115885621397252118?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115885621397252118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115885621397252118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115885621397252118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115885621397252118'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/09/change-learning-curves-and-kung-fu.html' title='Change, Learning Curves, and Kung Fu'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115764291187709462</id><published>2006-09-07T15:44:00.000+01:00</published><updated>2006-09-07T19:13:00.350+01:00</updated><title type='text'>&gt;1,000,000,000,000,000 calculations a second</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/rendition_2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/rendition_2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;IBM has recently announced they will build the worlds most powerful computer.......again.  Currently the most powerful computer is IBM's &lt;a href="http://domino.research.ibm.com/comm/research_projects.nsf/pages/bluegene.index.html"&gt;BlueGene/L&lt;/a&gt; which contains 131,072 processors and achieves "teraflop" speeds of trillions of calculations per second.  However, IBM's new supercomputer, called &lt;span style="font-style: italic;"&gt;Roadrunner&lt;/span&gt;, will achieve "petaflop" speeds of up to 1600 trillion calculations per second using its 16,000 standard processors working alongside 16,000 "cell" processors (cell processors were originally designed for the PS3).  Roadrunner is scheduled to be completed in 2008 and could be used for "a programme that ensures the US nuclear weapons stockpile remains safe and reliable", say the US Department of Energy.  So the USA's nuclear weapson stockpile hasnt been "safe" for the last 50+ years then??&lt;br /&gt;&lt;br /&gt;More &lt;a href="http://news.bbc.co.uk/1/hi/technology/5322704.stm"&gt;info @ BBC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In case you were wondering what the greek/latin names (they are all greek derived except Giga and Yotta which are latin, apparently) used to describe the powers of speed/data in computing (for example kilobyte, megabyte etc) are, the following list should enlighten you:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Kilo&lt;/span&gt; = 1,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mega&lt;/span&gt; = 1,000,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Giga&lt;/span&gt; = 1,000,000,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Terra&lt;/span&gt; = 1,000,000,000,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Peta&lt;/span&gt; = 1,000,000,000,000,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exa&lt;/span&gt; = 1,000,000,000,000,000,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Zeta&lt;/span&gt; = 1,000,000,000,000,000,000,000&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Yotta&lt;/span&gt; = 1,000,000,000,000,000,000,000,000&lt;br /&gt;&lt;br /&gt;A yotta-byte can probably hold just about all information in the universe so I guess you dont need any higher multiplier than that! ;-)&lt;br /&gt;&lt;br /&gt;Further info on &lt;a href="http://www.jamesshuggins.com/h/tek1/prefixes.htm"&gt;prefixes&lt;/a&gt; and the greek &lt;a href="http://www.bio.umass.edu/micro/immunology/greek.htm"&gt;alphabet&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115764291187709462?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115764291187709462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115764291187709462' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115764291187709462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115764291187709462'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/09/1000000000000000-calculations-second.html' title='&gt;1,000,000,000,000,000 calculations a second'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115745308675910894</id><published>2006-09-05T11:25:00.000+01:00</published><updated>2006-09-05T11:44:46.770+01:00</updated><title type='text'>Programming Quotes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/Image1.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/Image1.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Found an interesting, though be it quite long list of &lt;a href="http://www.eskimo.com/%7Ehottub/software/programming_quotes.html"&gt;programming related quotes&lt;/a&gt;.  Personal favourites include:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Before software can be reusable it first has to be usable."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Ralph Johnson&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Maurice Wilkes discovers debugging, 1949&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"If you want a girlfriend, avoid working in the computer games industry like the plague. If you work seven days a week, 15 hours a day for almost two years, with barely enough time for a pint, you have no time whatsoever for relationships. Plus computer-games makers are regarded as being about as hip and cool as abattoir workers."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Toby Gard, creator of Lara Croft.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"As we said in the preface to the first edition, C "wears well as one's experience with it grows." With a decade more experience, we still feel that way."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Brian Kernighan and Dennis Ritchie&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Antoine de Saint-Exupery, Wind, Sand and Stars&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Simplicity carried to the extreme becomes elegance."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Jon Franklin&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Bertrand Russell&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115745308675910894?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115745308675910894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115745308675910894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115745308675910894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115745308675910894'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/09/programming-quotes.html' title='Programming Quotes'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115737849056682546</id><published>2006-09-04T14:16:00.000+01:00</published><updated>2006-09-04T15:01:30.580+01:00</updated><title type='text'>Meetings without "actions" are pointless</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/loss.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/loss.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;I didn't think I would ever say this, but, we simply don't have enough constructive meetings where I work.  I've been in about only 5 meetings in the last 9 months (i.e. this year!) and general communication seems to be at a serious low.  However, the meetings (however infrequent they are) that I have been to have nearly all been pointless and unconstructive.  For a while I started wondering why these meetings seemed to be pointless and then it hit me.  The person who chairs the meeting rarely makes any actions for after the meeting!  Nothing is ever followed up.  People simply turn up to the meeting, each give thier opinion on a few things, make a few decisions and then its forgotten.  In other words the end productivity of the meeting is zero.&lt;br /&gt;&lt;br /&gt;All development meetings must have some sort of action list (however short or long) to follow up the decisions made in the meeting.  I'd always know this since I left university (I'm sure you do to) but it had never really fully occurred to me until now how important action-ing something from a meeting really is! doh!&lt;br /&gt;&lt;br /&gt;A recorded action must have at least the following attributes to be of value:&lt;br /&gt;&lt;br /&gt;- Who is responsible for carrying out the action.&lt;br /&gt;- What the action is.  What the developer, designer, producer etc. is supposed to do!&lt;br /&gt;- When the action is to be completed by.&lt;br /&gt;&lt;br /&gt;And of course the person chairing the meeting (PM, manager etc.) must make sure that the actions are carried out otherwise we are back once again to pointless meetings.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115737849056682546?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115737849056682546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115737849056682546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115737849056682546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115737849056682546'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/09/meetings-without-actions-are-pointless.html' title='Meetings without &quot;actions&quot; are pointless'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115694629318291255</id><published>2006-08-30T14:13:00.000+01:00</published><updated>2006-08-30T15:00:40.433+01:00</updated><title type='text'>The Christian OS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/ubuntu.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/ubuntu.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Ubuntu, the creators of a flavour of the popular Linux operating system, have produced &lt;a href="http://www.whatwouldjesusdownload.com/christianubuntu/"&gt;Ubuntu Linux "The Christian Edition"&lt;/a&gt;.  This quite unashamable piece of marketing/re-packaging is as Ubuntu describe it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"...a free, open source operating system geared towards Christians."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Or to put it another way, it's what jesus would download (if he had a new Dell PC, DSL modem, and 8 meg line subscription to pipex).&lt;br /&gt;&lt;br /&gt;Ubuntu Christian Edition also contains the &lt;span style="font-style: italic;"&gt;"best available Christian software"&lt;/span&gt;. Including:&lt;br /&gt;&lt;br /&gt;- A bible study program.&lt;br /&gt;- A "christian dictionary".  I can only presume this is a normal english(?) dictionary with all the rude words removed, such as "sex", "muslim", "darwinism", etc.&lt;br /&gt;- Web parental control.  To allow parents to stop little Johnny looking up the words on the web he cant find in his christian dictionary.&lt;br /&gt;- Graphical changes to the Ubuntu Linux OS.  As Ubuntu describes:  &lt;span style="font-style: italic;"&gt;"The graphical changes are minor and are only intended to tailor the project to Christians."&lt;/span&gt;  What exactly?  All the icons are now crosses?&lt;br /&gt;&lt;br /&gt;And just in case your worried whether Ubuntu Christian Edition is &lt;a href="http://www.whatwouldjesusdownload.com/christianubuntu/2006/07/faq.html"&gt;designed for protestant or catholic&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;christians &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;(orthodox? huh, who are they?), well Ubuntu says:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Both! Ubuntu Christian Edition will always try to cater to the needs of all Christians."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So don't worry.  Whether you believe in the divinity of the pope or not, Ubuntu has got ya covered!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115694629318291255?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115694629318291255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115694629318291255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115694629318291255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115694629318291255'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/08/christian-os.html' title='The Christian OS'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115436140290407344</id><published>2006-07-31T16:19:00.000+01:00</published><updated>2006-07-31T17:05:58.783+01:00</updated><title type='text'>Outlook UI quickie</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/outlook.2.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/outlook.2.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;I use MS Outlook and like a lot of developers I receive quite a few emails everyday.  Also if your like me most of the emails are not really that important, yet Outlook treats them in the same way.  It interrupts you.  It plays a sound, shows a little icon of an envelope in the system tray, and if you have it enabled displays a (nasty) little popup from the start bar that slowly fades out.  If your busy trying to concentrate on the days work at hand receiving lots of these interruptions can be a pain.&lt;br /&gt;&lt;br /&gt;Because of this I've seen many developers close their email client all together just to escape, while loading it back up periodically every few hours to go through all the new mail they have received.  This is a little extreme and a pain in the ass and not what most people, including me, want to be doing.  Instead why can't Outlook provide some immediate UI feedback as to how many new emails I currently have?  I can then decide the granularity of new mail I should have before I switch back to Outlook (and interrupt the current work I'm doing).&lt;br /&gt;&lt;br /&gt;There’s a couple of (very easy) ways I have thought of and they both involve the system tray.  (I'm a bigger fan of the system tray icon over the sounds and pop-ups as I think it is generally less intrusive).&lt;br /&gt;&lt;br /&gt;1. The system tray icon changes colour as more new emails are received.  For example it starts as a pale yellow and slowly turns more towards bright red.&lt;br /&gt;&lt;br /&gt;2. The system tray icon changes its pictorial form.  For example as more new emails are received the icon shows a picture of more and more envelopes (I know the system tray icon is very small, but you get the idea).&lt;br /&gt;&lt;br /&gt;The granularity of the colour/pictorial change could then be set in the options of Outlook to your desired level (for example every 3 new messages change the colour to a more "urgent" colour).&lt;br /&gt;&lt;br /&gt;Simple.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115436140290407344?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115436140290407344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115436140290407344' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115436140290407344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115436140290407344'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/07/outlook-ui-quickie.html' title='Outlook UI quickie'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115323450633821360</id><published>2006-07-18T14:59:00.000+01:00</published><updated>2006-07-18T16:06:48.596+01:00</updated><title type='text'>Loosing "the zone"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/19991069.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/19991069.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;OK, its just gone over 32 degrees centigrade in the office and I have just lost "the zone" for the last time today.  At this temperature with no air-con and no fan I've had enough.  Its "browse the internet and try to look like your working" time for the rest of the day.  The temperature however is not the only thing that can cause a developer to loose his/her zone.  However, before we get onto that what is "the zone" and where can I can get one please?&lt;br /&gt;&lt;br /&gt;Programming involves holding a lot of short term information about a system (variable names, function names, values, references etc) in your head all at the same time while you concentrate on working on the system.  "The zone" (I'm sorry I don’t know what it is called in English - until then we are stuck with this American football(?) term) is when a software developer has all this information in their head and is coding at optimum efficiency.  Mentally it's the place where all programmers should want to be when working (and their employers for that matter).&lt;br /&gt;&lt;br /&gt;Loosing "the zone" is simply when the software developer has "the zone" but then looses it (forgets all the short term information they have in their memory) because he/she is interrupted.  Once a developer looses "the zone" it can often take 15+ minutes to get back to where they were originally and if the developer is interrupted many times in the day they can often get little or not real coding done at all!&lt;br /&gt;&lt;br /&gt;So if making sure a software developer retains "the zone" for as long as possible is important then what causes the developer to loose the zone?  Well, short answer, anything.  Anything that can interrupt someone’s trail of thought is bad.  I already mentioned one, the heat.  However, in the course of the working day just this week I have also been interrupted by:&lt;br /&gt;&lt;br /&gt;- People walking/running through our open plan office causing noise.  Mainly women with heals on (we have a wood floor).&lt;br /&gt;- Dodgy equipment.  Someone, somewhere in the building "unplugged" me from the network twice already this week.  The scart on my TV has also developed a mind of its own.&lt;br /&gt;- The department's "jukebox" enabling anyone to play, out loud, their favourite song at any time to the department.&lt;br /&gt;- Workers outside drilling the road (we have no air-con in the office so the windows are open).&lt;br /&gt;- Mobile phones.&lt;br /&gt;- Loud people in the office.  My boss loves to listen to his voice messages on speaker phone so the whole department can hear! WHY??&lt;br /&gt;&lt;br /&gt;... etc etc I could go on.  The answers to these problems are usually simple: give women employees slippers, buy better equipment, disable jukebox, get air-con, smash mobiles, kill boss etc.  However, all of them come really down to environment.  If you want to get the best out of software developers you have to give them a great physical working environment.  An environment that is:&lt;br /&gt;&lt;br /&gt;- Clean.&lt;br /&gt;- Has plenty of space.&lt;br /&gt;- Has good lighting, like natural light (neon strips need not apply).&lt;br /&gt;- Has the kitchen basics, like tea and coffee that is actually drinkable, water dispensers etc.&lt;br /&gt;- Has equipment that is up to date and works reliably.&lt;br /&gt;- Is temperature controlled.&lt;br /&gt;- And probably most importantly .... quiet.&lt;br /&gt;&lt;br /&gt;However, if you don't work in a quiet environment I strongly suggest headphones which can be a developers best friend for remaining "in the zone".&lt;br /&gt;&lt;br /&gt;For more info on "the zone" check out: &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Joel’s test point number 8&lt;/a&gt; and the &lt;a href="http://www.amazon.co.uk/gp/product/0932633439/"&gt;Peopleware&lt;/a&gt; book by Tom DeMarco (which by the way is becoming increasingly hard to get hold of).&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115323450633821360?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115323450633821360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115323450633821360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115323450633821360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115323450633821360'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/07/loosing-zone.html' title='Loosing &quot;the zone&quot;'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115202023293776551</id><published>2006-07-04T14:14:00.000+01:00</published><updated>2006-07-04T15:19:28.496+01:00</updated><title type='text'>Suing music pirates</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/Image1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 232px; height: 164px;" src="http://photos1.blogger.com/blogger/3054/605/320/Image1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;I've noticed the press coverage the &lt;a href="http://news.bbc.co.uk/1/hi/technology/default.stm"&gt;BBC technology news website&lt;/a&gt; gives to the constant war going on between the music and film industry and the "pirates" of this type of content. Whether its the suing of &lt;a href="http://allofmp3.com/"&gt;allofmp3.com&lt;/a&gt; or the attempted closure of &lt;a href="http://thepiratebay.org/"&gt;The Pirate Bay&lt;/a&gt; bit torrent website the BBC seem to have at least 2 or 3 stories on this topic everyday! The most current (as of today) is the go ahead the British Phonographic Industry (BPI) have recently got to &lt;a href="http://news.bbc.co.uk/1/hi/entertainment/5140788.stm"&gt;sue allofmp3.com&lt;/a&gt; for illegally allowing users all around the world to buy unlicensed music tracks. Allofmp3.com is based in Moscow and is currently the second biggest mp3 selling website on the internet for UK residents (i presume behind iTunes). This particular story has been ongoing for a while and though the owner of a piece of content has the right to up hold its copyright this trend just proves how slow to change and out of touch the music and film industry are with what consumers want.&lt;br /&gt;&lt;br /&gt;If Allofmp3.com is the second highest used website for music bought on the internet then why haven’t the industry learned from this and produced something similar, popular and affordable that is legal and more importantly will make money for them? Its obvious there is a continuing shift in consumer needs from buying music in shops (on CDs etc) to obtaining music online. I for one am not interested in having hundreds of physical CDs when instead I could have all the music they contain on a single small hard disk.&lt;br /&gt;&lt;br /&gt;It is also becoming more than obvious that people are simply not willing to pay £15+ (the typical cost of a CD album in the UK) for a piece of music. The industry has got away with overcharging for music in shops for way too long.  I have practically stopped buying music on CDs and I doubt I will ever go back to buying music on physical media in a big way ever again.&lt;br /&gt;&lt;br /&gt;The technology that has made the internet massively popular is here (and like all other technology) is not going away. If the music and film industry continually persist in being slow adapting to this new technology, to what consumers want, and the method of distribution they are simply missing out on a lot of revenue.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115202023293776551?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115202023293776551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115202023293776551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115202023293776551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115202023293776551'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/07/suing-music-pirates.html' title='Suing music pirates'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115105494272260838</id><published>2006-06-23T10:22:00.000+01:00</published><updated>2006-06-23T10:29:02.746+01:00</updated><title type='text'>Texas Holdem's "Animal Types"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/texas-holdem.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/texas-holdem.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;After recently putting together a set of gadget/objects for card games on OpenTV/iTV and implementing Black Jack with a trainer (an advisor on your course of play based on the cards you are dealt) I have been getting more into poker, specifically Texas Holdem.  After reading a couple of "duffer" poker Holdem books I read &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0060780193"&gt;Phil Hellmuth's Texas Holdem book&lt;/a&gt;.  One of the more interesting things to come out of the book was Phil's "Animal Types" which describe the five basic personality types of Texas Holdem players.  But before we take a look at that, first the ten best Texas Holdem dealt hands.&lt;br /&gt;&lt;br /&gt;In Texas Holdem the top ten pocket cards that you can be dealt are, in order of greatness (number 1 is best):&lt;br /&gt;&lt;br /&gt;1. A-A, 2. K-K, 3. Q-Q, 4. A-K, 5. J-J, 6. 10-10, 7. 9-9, 8. 8-8, 9. A-Q, 10. 7-7&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The "Animal Types"&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Phil describes five different "Animal Types":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mouse&lt;/span&gt;&lt;br /&gt;- The mouse is very conservative.&lt;br /&gt;- Will only play the top 10 hands (if that!).  For example a mouse is probably unsure about playing even a 8-8 hand.&lt;br /&gt;- A mouse hardly ever raises.  If a mouse does then they must have a good hand!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lion&lt;/span&gt;&lt;br /&gt;- The lion is a tough competitor playing fairly tight poker.&lt;br /&gt;- Will play the top 10 cards but does'nt limit him/herself to them.&lt;br /&gt;- Will bluff with excellent timing.&lt;br /&gt;- You could do a lot worse than play like a lion!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Jackal&lt;/span&gt;&lt;br /&gt;- A jackal is a gambler playing in a more loose and wild manner.&lt;br /&gt;- Will get involved in nearly all games.&lt;br /&gt;- Puts in many bets and will raise often.&lt;br /&gt;- Expect big "swings" (loosing to winning, vise versa) with the Jackal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Elephant&lt;/span&gt;&lt;br /&gt;- The elephant is a fairly loose player.&lt;br /&gt;- Never folds when he is supposed to fold as often believes other players are bluffing.&lt;br /&gt;- Therefore impossible to bluff.&lt;br /&gt;- Will often go to the end of the game "calling" any other players.&lt;br /&gt;- Elephants do well against jackals as Jackals will keep trying to bluff elephants.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Eagle&lt;/span&gt;&lt;br /&gt;- Rare player as is one of the best 100 players in the world.&lt;br /&gt;- As Phil describes: &lt;span style="font-style: italic;"&gt;"He flies around high in the sky and swoops down to eat other animals' chips when he's hungry.  Learning to play like an Eagle is a lofty and worthwhile goal"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115105494272260838?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115105494272260838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115105494272260838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115105494272260838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115105494272260838'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/06/texas-holdems-animal-types.html' title='Texas Holdem&apos;s &quot;Animal Types&quot;'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115097252450765337</id><published>2006-06-22T11:10:00.000+01:00</published><updated>2006-06-22T16:22:42.856+01:00</updated><title type='text'>"Eventually, everything connects"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/21image.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/21image.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Got sent a link for the film "Powers of Ten" recently.  Until now I'd missed this classic short film made in 1977 by &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Charles and Ray Eames of IBM.  Well worth checking out and it will probably make you feel all human endeavour is insignificant and futile......or is that just me? ;-)&lt;br /&gt;&lt;br /&gt;Description:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"The film starts on a picnic blanket in Chicago and zooms out 10x every 10 seconds until the entire universe (more or less) is visible. And then they zoom all the way back down into the nucleus of an atom."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.kottke.org/06/06/powers-of-ten"&gt;Video online @ kottke&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.cakeshop.tv/clientsection_site/jk/BestSimpsonsCouchGag.mov"&gt;Simpsons Powers of Ten couch gag&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.powersof10.com/"&gt;Official Powers of Ten website&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.imdb.com/title/tt0078106/"&gt;Powers of Ten @ IMDB&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115097252450765337?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115097252450765337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115097252450765337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115097252450765337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115097252450765337'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/06/eventually-everything-connects.html' title='&quot;Eventually, everything connects&quot;'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115030341096827976</id><published>2006-06-14T16:35:00.000+01:00</published><updated>2006-06-14T17:46:51.710+01:00</updated><title type='text'>Integrate Early, Integrate Often</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/agile.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/agile.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;I'm currently reading "&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/097451408X"&gt;Practices of an Agile Developer&lt;/a&gt;" by Venkat Subramaniam &amp; Andy Hunt.  It’s not a bad book, though it does sometime feel like reading a long "shopping list" of best agile programming practices!  Section 14 of the book discusses why its best practice to integrate early and as often as possible.  Venkat &amp;amp; Andy describe why not doing so can lead to problems:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"...Integration is one of the major risk areas in product development.  As you let a subsystem grow, un-integrated, you're exposing yourself to greater and greater risk - the rest of the world is marching without you, and the potential for divergence will just keep increasing."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;They go on to address the benefits of early, frequent integration:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"By integrating early, you get to see how sub-systems interact and interoperate, and you get to evaluate how information is shared and communicated.  The earlier you understand and address these issues, the less work you'll have to do fixing them."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So it’s good to integrate frequently (Venkat and Andy recommend more than once a day if possible), but immediate integration may not be appropriate.  If this is the case then the system can be isolated and mock objects can be used (or if you’re in a non-OO environment then mock functions can be used).  A mock object is a stand in for the real object and can be used to simulate the required behaviour for testing purposes.  As soon as the tests pass you are then ready to integrate.&lt;br /&gt;&lt;br /&gt;It's worth noting that the only time you may want to work in total isolation is on prototype and experimental code.  In these (learning experience) cases integration is probably not required.&lt;br /&gt;&lt;br /&gt;This section on integration of the book struck home with me because I have just recently been given the job of integrating two different systems (one old, one new) that I did not develop.  You have probably guessed that the new system was generally developed in isolation and did not have frequent integration with the old system.  Surprise-surprise they do not integrate together very well at all.  This has caused a major problem and one that leads me to the conclusion that integration of a new piece of code must be completed by the developer who wrote it! For a  developer to adopt the "big bang" approach to system integration is not good.  As Venkat and Andy sum up:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"If your integration problems are large, you're not integrating often enough"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I couldn’t agree more.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115030341096827976?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115030341096827976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115030341096827976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115030341096827976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115030341096827976'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/06/integrate-early-integrate-often.html' title='Integrate Early, Integrate Often'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-115020062714742614</id><published>2006-06-13T12:02:00.000+01:00</published><updated>2006-06-13T13:27:47.176+01:00</updated><title type='text'>Some notes on specs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/paper_stack2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/paper_stack2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;I was recently in a project meeting where a developer made an off the cuff comment about how specs are never finished before implementation and how this was a bad thing.   Do most developers still expect the specification of a system to be complete before they implement the system?  Do most developers really think that there are going to be no more changes once the system has been first designed?  If there is any constant on a project, it is change.  And it is the job of the spec to capture and document this ongoing change.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why bother with a spec?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- A spec forces you to think about design and as we all know design is a good thing.&lt;br /&gt;&lt;br /&gt;- Without a spec any schedule is worthless.  How can you estimate how long it will take to build something if you haven’t thought about what it is you are to build?&lt;br /&gt;&lt;br /&gt;- A spec, because it is a piece of documentation, can save time in communicating how a system is supposed to work to all parties (developers, testers, customers etc).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What a spec should be&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Specs, unlike what a lot of developers traditionally think, do not have to be completed before implementation begins.  Over time implementation will cause the design to change slightly, to evolve, and the spec should continue to capture this change.  A spec is only complete when implementation is complete.  This then allows end system testing of the application to be done against the spec.  Just because a spec isnt complete at the start of implementation doesn’t mean you shouldn’t have a spec.  There should always be a spec!  And it must be kept up to date.&lt;br /&gt;&lt;br /&gt;There are two main different types of spec:&lt;br /&gt;&lt;br /&gt;1. Functional Spec&lt;br /&gt;The functional spec is how the system works from the users perspective.  The features of the system, the functionality it will support.  How anything is to be implemented should NOT be in the functional spec.&lt;br /&gt;&lt;br /&gt;2. Technical Spec&lt;br /&gt;The technical spec describes the internal implementation.  All details that a technical person (such as a developer, tester etc) needs to understand how the system is put together and works.&lt;br /&gt;&lt;br /&gt;Ideally you should be producing both of these specs for a single project.&lt;br /&gt;&lt;br /&gt;A spec should (unless the project is very large) have only one owner/author.  Though everyone can contribute only one person should have control of the document.  In projects I have worked on in the past the project manager usually fore filled the role of the functional spec author and the system architect/senior developer fore filled the role of the technical spec author.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A note on using specs for the wrong reasons&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some times specs, instead of being used to aid a projects success, actually hinder it.  I once worked on a project where the project manager was using the spec (he was the author) as something to save his own neck in light of impending project failure.  When the project started to fail (late, not meeting management expectations etc.) he used the spec against other members of the project team to attribute blame.  For example: "why haven’t you built this piece of functionality, it was in the spec".  It was very clear to many members of the project team he was simply adding in changes to the spec without ever notifying or consulting the team.&lt;br /&gt;&lt;br /&gt;This proves that though a specification is important for recording (and arriving) at decisions, it is not a complete substitute for communicating change verbally.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-115020062714742614?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/115020062714742614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=115020062714742614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115020062714742614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/115020062714742614'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/06/some-notes-on-specs.html' title='Some notes on specs'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114985686674605562</id><published>2006-06-09T11:44:00.000+01:00</published><updated>2006-06-09T13:45:53.256+01:00</updated><title type='text'>Build it and they will come......or maybe not</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/kuala_lumpur_7935.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/kuala_lumpur_7935.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Malaysia is a country I have a strong interest in.  My wife is Malaysian, I like the country a lot and I will be visiting for my fourth time later this year. Malaysia has also been in the technology news quite a bit recently concerning its flagging technology project to make it "the silicon valley of the east". This ambitious project was started in 1996 by the &lt;a href="http://www.msc.com.my/"&gt;MSC&lt;/a&gt;, also know as the Multimedia Super Corridor. It involved building a large new technology centre outside of Kuala Lumpur (Cyberjaya) leading to the attraction of both foreign and local technology businesses. I've seen Cyberjaya and it would appear the phase of construction (building, infrastructure etc.) is complete and up until around 2002/2003 the project has been on target. However, the project is now 10 years in and in the last three years the project appears to be lagging behind.  Some official given explanations for this lag include:&lt;br /&gt;&lt;br /&gt;- The dot com bust.&lt;br /&gt;- Asia's financial crisis in 1997/98.&lt;br /&gt;- Rival nations, such as Singapore, Thailand, China, India and South Korea, setting up other initiatives.&lt;br /&gt;&lt;br /&gt;These explanations seem very lame to me.  After all in technology terms the dot com bust was now a long time ago, as was Asia’s financial crisis.  Also, these first two affected other neighbouring countries as well (Singapore, Thailand etc.), yet these countries are now managing to forge ahead.  For example, in Malaysia the fastest home consumer internet connection you can get is still only 1Mb (it was 1Mb over a year ago as well), while in neighbouring countries consumers can obtain speeds of up to 6Mb.&lt;br /&gt;&lt;br /&gt;It's always much easier to blame external factors than admit internal problems within the country.  I suspect that a number of factors exist in Malaysia that are causing bigger problems than the list given above.&lt;br /&gt;&lt;br /&gt;The first is that Malaysia (like many countries) has a big skills shortage in the technology industry.  Malaysian universities are simply not producing enough good quality technology graduates.  Malaysia also has quite tough immigration law which makes applying for a visa very difficult.  To me it would appear that if you can't provide the skills internally and you make it hard for foreign skilled workers to immigrate then you will end up with a lot of empty offices.  And it doesn’t matter how many Cyberjayas are built this problem isn't simply going to go away.  Obviously this problem can only be addressed through better internal education (and incentives to education) and freeing up of borders to allow more overseas skilled workers in.&lt;br /&gt;&lt;br /&gt;The second is the apparent lethargy of Malaysia's telco industry and the government that is linked to them.  The current Malaysian government is said to be quite conservative, slow and "traditional".  If countries next door to Malaysia can now provide faster infrastructure (especially when Malaysia had a head start) then the conservatives and traditionalists are obviously being too slow to respond.&lt;br /&gt;&lt;br /&gt;Malaysian government, the MSC and the telcos need to wake up and smell the "kopi" before other east Asian countries including India and China (that produce comparatively huge numbers of skilled university graduates because of their huge populations) over take them for good.&lt;br /&gt;&lt;br /&gt;The BBC quoted Jeff Ooi (a telecoms consultant and one of Malaysia's most influential bloggers) as saying:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"We are looking at MSC like a supermarket.  We build it and people will come and the property developers will make some money."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But this in itself is obviously not enough.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114985686674605562?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114985686674605562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114985686674605562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114985686674605562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114985686674605562'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/06/build-it-and-they-will-comeor-maybe.html' title='Build it and they will come......or maybe not'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114949882530553025</id><published>2006-06-05T10:11:00.000+01:00</published><updated>2006-06-05T10:13:45.316+01:00</updated><title type='text'>LinkedIn the professional "brown nosing" community?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/logo.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;I was recently sent a link by a friend at work for &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;, a community website that is supposed to promote professional communities.  Colleagues finding lost colleagues, allowing employers to find employees, helping people to get in touch with similar people in their industry, etc.  At first I was hesitant about it, like all the other *crappy* spam "join this community" emails I get sent from people (knowingly or unknowingly to them).  However, I looked into the website and it did seem to have something.  I have been "collecting" work colleagues that I have got on with on my msn messenger list since I finished university and if I don't get on with you then you don't go on the list, simple.  However, until I saw LinkedIn I didn't know of any website (or application) that takes this to the next level allowing you to see colleagues of colleagues and creating communities around certain industries in this way.&lt;br /&gt;&lt;br /&gt;However, LinkedIn has a problem.  The reliability of what someone says they are or have done (basically their CV) is verified through what LinkedIn calls "endorsements" (someone that you've worked with or known writing something about you).  And here's the catch, endorsements can only ever be positive!  When you write an endorsement about someone it is sent to them via email to verify. If they want your comment about them to be viewed by the rest of the world they can decide: yes or no.  And of course who is going to knowingly allow something bad to be said about them!&lt;br /&gt;&lt;br /&gt;I have noticed that this has lead to some serious "brown nosing" between people that have previously worked together to get as many endorsements as possible.  Including people who I know hate each other leaving nice comments just so the other will reciprocate. Which sort of renders the endorsement rating scheme as pointless!&lt;br /&gt;&lt;br /&gt;If community websites like LinkedIn don't want to allow negative comments to be made public then maybe they should have a new scheme based on the ratio of your work connections to endorsements (a work connection being a registered known colleague).  After all wouldn't a persons profile (and the person them self) be considered more reliable if they have 5 endorsements for 10 work connections rather than someone else who has 5 endorsements for over 100 work connections?&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114949882530553025?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114949882530553025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114949882530553025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114949882530553025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114949882530553025'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/06/linkedin-professional-brown-nosing.html' title='LinkedIn the professional &quot;brown nosing&quot; community?'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114898558446555872</id><published>2006-05-30T10:39:00.000+01:00</published><updated>2006-05-30T12:30:01.746+01:00</updated><title type='text'>The Joel Test  - 12 Steps to better code</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/1590593898.01.LZZZZZZZ.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/1590593898.01.LZZZZZZZ.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Today I thought I'd run the company I currently work for (no names ;-)) through &lt;a href="http://joelonsoftware.com/articles/fog0000000043.html"&gt;"The Joel test"&lt;/a&gt; to see how well they do (the Joel test is also available in his book &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/1590593898"&gt;"Joel On Software"&lt;/a&gt;).  In case you are not aware of the Joel test its a list of 12 steps from software dev guru Joel Spolsky that measure how good a software team/department is.  Joel himself describes it as:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;"...my own, highly irresponsible, sloppy test to rate the quality of a software team. The great part about it is that it takes about 3 minutes. With all the time you save, you can go to medical school."  &lt;br /&gt;...&lt;br /&gt;"A score of 12 is perfect, 11 is tolerable, but 10 or lower and you've got serious problems. The truth is that most software organizations are running with a score of 2 or 3, and they need serious help, because companies like Microsoft run at 12 full-time. "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;So on with the test...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;font-weight: bold;"&gt;1. Do you use source control?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Yes.  We currently use VSS though when I arrived at the company the only source control was CVS, which no one used at all.  VSS is now used by most of the developers but certainly not all.  Important to note that HAVING source control setup for use is not really any use unless all developers have been told/educated to use it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(1 point)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;font-weight: bold;"&gt;2. Can you make a build in one step?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;No (not really).  Compilation to a binary (most code is written in C in the department) is fine, but moving it to a test environment requires stops and starts of various things.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;3. Do you make daily builds?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;No.  Developers are not forced to make daily builds to the test environment.  Builds are uploaded upon request.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;4. Do you have a bug database?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;No.  This is a big problem within the department and needs to be fixed ASAP.  Bugs are currently "tracked" by testers and developers sending emails to one another (in other words not tracked at all).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;5. Do you fix bugs before writing new code?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;Yes and No.  Personally, of course I do! ;-p.  This is quite a hard one to measure unless you look at what all developers in the department are doing all the time.  However, a number of developers have been know to ignore 100's of compiler warnings in their code that has gone live.  If the (C) compiler is throwing a warning then in my experience you have probably introduced a bug.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0.5 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;6. Do you have an up-to-date schedule?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;Yes.  Schedules are kept up to date by project managers.  However, the communication of changes to developers is very poor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(1 point)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;7. Do you have a spec?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;Technically yes, most of the time.  Though specs are rarely kept up to date with changes communicated to developers.  I'm a strong believer that a spec should evolve over time until all implementation is complete.  User acceptance testing of the software can then be conducted against the finished spec.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(1 point)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;8. Do programmers have quiet working conditions?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;Most of the time, no, because:&lt;br /&gt;&lt;br /&gt;- The software department is in an open plan office.&lt;br /&gt;- It sits physically in the middle of the company, so people are constantly walking through the middle from one end of the building to the other.&lt;br /&gt;- The department has a "jukebox" which anyone can play what ever they want at any time.  Probably seemed like a good idea at one point...&lt;br /&gt;- A manager who insists on listening to his voice mail on the speaker phone at max volume.&lt;br /&gt;... the list goes on an on...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;9. Do you have the best tools money can buy?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;No.  I have been asking for a certain piece of kit for over 6 months and I still haven’t got it.  Many developers have to share time with certain pieces of kit.  As far as desktops go some developers are still having to use PCs that are less than 2Ghz.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;10. Do you have testers?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;Yes.  Though the ratio is more like 1 tester for every 7 or 8 developers not every 2 or 3 as Joel recommends:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-style: italic;"&gt;"If your team doesn't have dedicated testers, at least one for every two or three programmers, you are either shipping buggy products, or you're wasting money by having $100/hour programmers do work that can be done by $30/hour testers. Skimping on testers is such an outrageous false economy that I'm simply blown away that more people don't recognize it."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(0.5 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;font-weight: bold;"&gt;11. Do new candidates write code during their interview?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;Yes.  Though they are asked to write it on paper with a pen.  Which I always think is a little daft.  When am I going to next write C code on paper?  Besides it is painfully slow to write code on paper.  Notepad on a laptop would be a much better idea.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family:arial;"&gt;(1 point)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: arial;font-size:85%;" &gt;12. Do you do halfway usability testing?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family: arial;"&gt;Joel describes "halfway usability testing" as the following:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;font-family: arial;font-style: italic;"&gt;"A hallway usability test is where you grab the next person that passes by in the hallway and force them to try to use the code you just wrote. If you do this to five people, you will learn 95% of what there is to learn about usability problems in your code."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-size:85%;"&gt;The idea for the product usually comes from a "producer".  This person very rarely tests the usability of the product on real users.  So short answer, no.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-size:85%;"&gt;(0 points)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: arial;font-size:85%;" &gt;Total points: 5 (A lot of room for improvement).&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114898558446555872?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114898558446555872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114898558446555872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114898558446555872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114898558446555872'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/05/joel-test-12-steps-to-better-code.html' title='The Joel Test  - 12 Steps to better code'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114839876710864432</id><published>2006-05-23T15:56:00.000+01:00</published><updated>2006-05-24T10:59:09.633+01:00</updated><title type='text'>Why the big red Wrox books suck</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/1861006209.01._SCMZZZZZZZ_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/1861006209.01._SCMZZZZZZZ_.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;The big red Wrox computing books from Wrox Press Ltd.  You know them, I hate them and this is why:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Too many authors&lt;/span&gt;&lt;br /&gt;Why does nearly every Wrox book have SO many authors?  WHY?  Are the authors simply lazy to write a book on their own?  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;The more authors the more inconsistent the style of content is and there is often a lot of content overlap between what each of the authors write.  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;The book is always about a single aspect of software development, unlike such books as &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/1590595009"&gt;Best of Software Writing I&lt;/a&gt;, so why have so many authors?  &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/1861006209"&gt;Professional ASP.NET Security&lt;/a&gt; for example, has 8 authors and unlike most of the Wrox books is only 400 pages long.  Thats only 50 pages each!  A chapter each maybe?  My personal "favourite" though has to be &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764544004"&gt;Professional VB.NET 2nd Edition&lt;/a&gt; which comes in at ONLY 16 authors.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Too big&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;Most Wrox books (like a lot of software development books) are simply too big and too long.  Most of the Wrox books are 800+ pages long including:&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764557599"&gt;Professional C# 3rd Edition&lt;/a&gt; =&gt; 1356 pages&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764558900"&gt;Professional ASP.NET 1.1&lt;/a&gt; =&gt; 1400 pages&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764576100"&gt;Professional ASP.NET 2.0&lt;/a&gt; =&gt; 1296 pages&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764559923"&gt;Professional VB.NET 2003&lt;/a&gt; =&gt; 1056 pages&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764559036"&gt;Access 2003 VBA&lt;/a&gt; =&gt; 892 pages&lt;br /&gt;...ok you get the idea.. :-p&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;Why are these books so big?  You cant carry them around very easily and forget reading them on the tube (see also "The cover").  There is an art in communicating a message efficiently, succinctly and to the point.  This appears to have been lost on most of the Wrox books.  For example you don't need to read nearly 1400 pages on C# to understand the C# language.  An O'Reilly book, &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596003765"&gt;Learning C#&lt;/a&gt;, managed to do it with only 360.  So what are the other 1040 pages for?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Too many long examples&lt;/span&gt;&lt;br /&gt;The Wrox books tend to have way too many long examples that continue over several pages.  Why would I want to read pages and pages of code in a book?  Are the writers aware of the Internet and the WWW?  Wouldn't it be better to spend the time explaining the theory, the concepts and teaching the reader to understand the technology rather than creating a convoluted "cookbook" of code?&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Professional professional professional&lt;/span&gt;&lt;br /&gt;Why is nearly every book "Professional"?  Hmmm maybe if I collect enough of these books I'll be really "Professional" as well.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;The covers&lt;/span&gt;&lt;br /&gt;A big blob of red that attracts the eye to the "models" on the cover.  Did no one at Wrox ever question why they would want to have the authors on the front cover?   Does this marketing tactic increase sales?  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;I'm sure most of these guys are intelligent, but do we really need to see what they all look like?  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;And are they in black and white &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;to make them look sexy?  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;My personal favourite cover though has to be: &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0764589555"&gt;Wrox's Visual C# 2005 Express Edition Starter Kit&lt;/a&gt; by F. Scott Barker (sorry F.).  Based upon the cover I'm surprised F.Scott Barker managed to pull himself away from his &lt;a href="http://en.wikipedia.org/wiki/Texas_hold_%27em"&gt;Texas Hold'em&lt;/a&gt; game.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But wait!&lt;/span&gt;&lt;br /&gt;Like all those reasons weren't enough, I noticed this recent Wrox publication on Amazon: be the envy of your friends and enemies with the &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0470048409"&gt;Wrox Box&lt;/a&gt;!  I guess too many authors, too many pages, too many long examples, and too many sexy covers is never professional enough for some people! :-)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114839876710864432?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114839876710864432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114839876710864432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114839876710864432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114839876710864432'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/05/why-big-red-wrox-books-suck.html' title='Why the big red Wrox books suck'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114830244182209418</id><published>2006-05-22T12:20:00.000+01:00</published><updated>2006-05-23T15:39:34.446+01:00</updated><title type='text'>Being obsessive over a single function return point is not good practice</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Do your functions often contain more than a single return point?  A lot of software developers, including myself, consider a single return or exit point to be good practice.  However, after reading the article "&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;a href="http://damienkatz.net/2006/05/signs_youre_a_c.html"&gt;Signs You're a Crappy Programmer (and don't know it)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;" and some of the reader comments I was reminded that some developers seem to take this to the extreme.  Having this single minded goal of creating a single return point functions can cause a problem by increasing code complexity.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;So what do I mean by complex?  Well simply put it is harder to read and understand the function!  If you are using a lot of block indentation in your code then you are probably needlessly increasing the complexity and lowering the readibility of the function.  For example instead of coding the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if(i &gt; 0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;i++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(j &gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(k &gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;k++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;return(i+j+k);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Why not code the following equivalent (potentially more readable) code:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;if(i &lt;= 0)        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return(i+j+k); &lt;br /&gt;i++;    &lt;br /&gt;&lt;br /&gt;if(j &lt;= 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return(i+j+k); &lt;br /&gt;j++;  &lt;br /&gt;&lt;br /&gt;if(k &lt;= 0)    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return(i+j+k);&lt;br /&gt;k++;    &lt;br /&gt;&lt;br /&gt;return(i+j+k); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This example is obviously over simplified (hopefully you get the idea) but its important to note that the more levels of indentation your code has the harder it is for any reader to understand.  I have seen production code that has been nested to 12 levels deep that was near totally unreadable!  In fact 4 or 5 levels of indentation is about the max most software developers can fully comprehend (see &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0735619670"&gt;Code Complete&lt;/a&gt; for further info).  In my opinion aiming for a single exit point in a function should be seen as a recommendation and not something you head for blindly while sacrificing function simplicity and ultimately readability.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114830244182209418?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114830244182209418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114830244182209418' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114830244182209418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114830244182209418'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/05/being-obsessive-over-single-function.html' title='Being obsessive over a single function return point is not good practice'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114794526087596881</id><published>2006-05-18T10:40:00.000+01:00</published><updated>2006-05-18T10:41:00.876+01:00</updated><title type='text'>A round up of the best blogs I know of...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/185px-Blogger.Logo.0.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/185px-Blogger.Logo.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;The following is a round up of some of the best &lt;a href="http://en.wikipedia.org/wiki/Blog"&gt;blogs&lt;/a&gt; i know of at the moment (feel free to let me know of others!):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boingboing.net/"&gt;Boing Boing&lt;/a&gt;&lt;br /&gt;Probably the best blog on the internet.  All random/interesting things and sometimes very useful!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codinghorror.com/blog/"&gt;Coding Horror&lt;/a&gt;&lt;br /&gt;Interesting ".NET and human factors" short articles writen&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt; by Jeff Atwood.  Jeff also has a good list of recommended books for software developers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://thedailywtf.com/"&gt;The Daily WTF&lt;/a&gt;&lt;br /&gt;If your a software developer and dont know about this website then your work is probably on it!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt;&lt;br /&gt;Software dev guru Joel Spolsky's blog.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.escapefromcubiclenation.com/get_a_life_blog/"&gt;Escape from cubicle nation&lt;/a&gt;&lt;br /&gt;...one day...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nannyknowsbest.blogspot.com/"&gt;Nanny Knows Best&lt;/a&gt;&lt;br /&gt;1984 here we come... ;-)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114794526087596881?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114794526087596881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114794526087596881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114794526087596881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114794526087596881'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/05/round-up-of-best-blogs-i-know-of_18.html' title='A round up of the best blogs I know of...'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8718181.post-114786031244838261</id><published>2006-05-17T10:38:00.000+01:00</published><updated>2006-05-17T16:27:21.586+01:00</updated><title type='text'>OpenTV as an object based language</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3054/605/1600/sm_soccer.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3054/605/320/sm_soccer.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;I have been learning&lt;a href="http://www.opentv.com/"&gt;&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/OpenTV"&gt;OpenTV&lt;/a&gt; (and C) for about 6 months now and at no point did any document illustrate to me the relationship between the OpenTV language and the basic principles/functionality of an object based language.  Coming from more of an OO background this seemed like a shame to me as these relationships were something I had to spend time figuring out rather than them having already been documented.  Hopefully this article will take a step towards helping document this relationship.&lt;br /&gt;&lt;br /&gt;Its worth noting that at most OpenTV can only be an object based language, not an OO language, because at the end of the day the developer if he/she so chooses can break out and code in a completely non-object way (other languages such as VB6 and C++ come to mind as also being object based).&lt;br /&gt;&lt;br /&gt;OpenTV is essentially C (with extended OpenTV functionality provided through the OpenTV library) and as such does not support objects.  However, a sort of "object" can be created in OpenTV called a "gadget".  A gadget has its own .c and .h file and generally speaking comprising of the following:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A structure to hold its internal state.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A number of  functions to act on its state.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A special OpenTV external function called an initialiser.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A special OpenTV internal function called a message handler.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;A resource definition that allows data to be passed in at the point of construction.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Using these basic features of OpenTV the various aspects of object development as we usually know it can be implemented and tied into OpenTV.  The following sections describe how various aspects of OO can be related to OpenTV.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;State&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Internal member variables&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt; must be contained within the gadget's structure (struct).  These include not just the objects internal state but also any on screen presentation of the gadget.  For example a playing card gadget may contain an integer value (1 to 13), an enumeration of the suit, as well as an actual image (icon) to represent the type of card it is on screen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;Properties&lt;/span&gt;&lt;br /&gt;To preserve encapsulation the gadget's state should be private within the .c file it is declared.  Access to the member variables in the gadget's struct outside of the gadget should be implemented through the use of Get (read) and Set (write) access functions (properties).  Examples of Get and Set properties:&lt;br /&gt;&lt;gadget_name&gt;&lt;property_name&gt;&lt;br /&gt;&lt;gadget_name style="font-family: courier new;"&gt;extern int MYGADGET_GetMyInt(MYGADGET *g);&lt;br /&gt;&lt;/gadget_name&gt;&lt;/property_name&gt;&lt;/gadget_name&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;extern void MYGADGET_SetMyInt(MYGADGET *g, int i);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;gadget_name&gt;&lt;property_name&gt;&lt;gadget_name&gt;&lt;property_name&gt;&lt;br /&gt;&lt;/property_name&gt;&lt;/gadget_name&gt;&lt;/property_name&gt;&lt;/gadget_name&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;Methods&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;Constructor&lt;/span&gt;&lt;br /&gt;A constructor in OpenTV is implemented through the use of a resource (structure) defined in the header file.  This resource can then be passed in when the gadget is created through the  use of a hard coded program structure or a resource file identifier (an external .rc file can be created to hold the actual resource definitions, only the ID need be passed in).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; Deconstructor&lt;/span&gt;&lt;br /&gt;Gadget deconstruction can be forced by passing the gadget pointer to the O_gadget_delete() function. This will signal a &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;MSG_TYPE_DELETE event to be triggered which can be captured in the gadget before it is destroyed.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Private Methods&lt;/span&gt;&lt;br /&gt;In OpenTV functions that need to have their access restricted to within the gadget itself (i.e. private) can be marked with the "static" keyword in the function declaration.  (Note: the meaning of static in C is not the same as the general OO meaning of static in languages such as C#).  Example of a private method declaration:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;static bool LoadCardImage(CARD *this)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Public Methods&lt;/span&gt;&lt;br /&gt;OpenTV functions that need to be exposed to other gadgets, main program etc. (i.e. public) can be implemented through the use of the "extern" keyword.  Example of a public method declaration:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;extern bool CARD_Equals(CARD *this, CARD *cardToCompare)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Other non OO specific (but nevertheless required) methods in OpenTV are:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-style: italic;"&gt;Initialiser&lt;/span&gt;&lt;br /&gt;The initialiser method is a required public method for all OpenTV gadgets that &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;registers the gadget with the UIMS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;.  It should be called before any instances of the gadget are created. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Message Handler&lt;/span&gt;&lt;br /&gt;The message handler is an private function used for handling all incoming messages/events to the gadget.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;Events&lt;/span&gt;&lt;br /&gt;In OpenTV the function O_ui_callback() can be called to trigger an event (of a specified type) back to the parent gadget or program.  This event can then be captured in the parent's own message handler.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Interfaces&lt;/span&gt;&lt;br /&gt;The public interface of the gadget needs to be defined in the header .h file so it can be included in any other required gadget or program.  However, as far as multiple interfaces is concerned you are limited to the limitations of the C language.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;...and lastly...&lt;/span&gt;&lt;br /&gt;As you can see many of the OO principles do have relationships to the OpenTV language (though in places are a little strange).  However when it comes to the OO concepts of inheritance and polymorphism &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;forget it ...for the moment. These concepts would currently be over the top for most OpenTV B2C development. Worth remembering that we are dealing with TV set-top-boxes here not PC's with 512Mb of RAM ;-).&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8718181-114786031244838261?l=mat-salleh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mat-salleh.blogspot.com/feeds/114786031244838261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8718181&amp;postID=114786031244838261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114786031244838261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8718181/posts/default/114786031244838261'/><link rel='alternate' type='text/html' href='http://mat-salleh.blogspot.com/2006/05/opentv-as-object-based-language.html' title='OpenTV as an object based language'/><author><name>mat-salleh</name><uri>http://www.blogger.com/profile/05427366153203430268</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://matsalleh.co.uk/images/mypic1.jpg'/></author><thr:total>1</thr:total></entry></feed>
