<?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-13890011</id><updated>2011-12-22T08:08:17.011+08:00</updated><title type='text'>The blog of a not-so-young software developer</title><subtitle type='html'>Drag me to your watering hole, and after half a mug of beer, he starts rambling about work, technology and what-not ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13890011.post-113617422617997860</id><published>2006-01-02T11:53:00.000+08:00</published><updated>2006-01-02T14:37:07.253+08:00</updated><title type='text'>Year in Review</title><content type='html'>2005 has come to an end.  For me, this would be the year where the most contigencies have happened, and almost impossible to plan.  Or perhaps I should use the old saying: "What man proposes, heaven disposes".&lt;br /&gt;&lt;br /&gt;My friends and colleagues would know that I'm the type who likes to plan ahead, be it the annual vacation, getting married, moving house, etc.  But this year, the guy upstairs seems to enjoy throwing things in the way of my plans.&lt;br /&gt;&lt;br /&gt;Well, my wife and I have been planning to start a family for quite a while.  Things haven't been happening quite as planned, so when my project work provided an opportunity for me to be posted overseas, my wife and I agreed that it would be a good break for us (to get away from the pressures to procreate, to allow me to focus on just one project and in technical work, to nudge my wife out of her comfort zone for a while).&lt;br /&gt;&lt;br /&gt;Just 2 months before our departure, my wife and I had the good news we were waiting for.  It was like the last month that we "let things go naturally"; if we had missed this one, I'd not be typing this from my home now.&lt;br /&gt;&lt;br /&gt;So, we had to backpaddle and put an emergency brake to the posting, make adjustments to both our work (my wife has already obtained the no-pay leave she requested and started to hand over some of the work; I had to explain to everybody that I'm not going after all and make arrangements for the project and my workload).&lt;br /&gt;&lt;br /&gt;Because I was not going overseas, and because of my dis-satisfaction with my involvement with this project, I started to request for transfer to other projects, getting the project manager to sort of agree that I will transit out by the next milestone sometime in 2006.&lt;br /&gt;&lt;br /&gt;Just as I was happily washing my hands off the project, my project manager had some personal issues with his family, and had to be away for quite a while.  And I had to cover his project management duties, an instant reversal of my planned extrication from this project.&lt;br /&gt;&lt;br /&gt;This took me all the way to the end of the year.  Come 2006, I'm not planning for anything, just waiting for things to come.  What with my first baby coming, and still not sure when my project manager will be back fulltime on his job, all I can do is to take things one step at a time.&lt;br /&gt;&lt;br /&gt;Wishing one and all a happy, healthy and fruitful 2006.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-113617422617997860?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/113617422617997860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=113617422617997860' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/113617422617997860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/113617422617997860'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2006/01/year-in-review.html' title='Year in Review'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-113020475830081126</id><published>2005-10-25T09:41:00.000+08:00</published><updated>2005-10-25T09:45:58.306+08:00</updated><title type='text'>Software Project Manager's Handbook by Dwayne Phillips</title><content type='html'>So Dwayne says that project managers must basically like to work with people.  I guess most of the project managers become project managers either because they are good at technical work, or simply outlasted the competition (i.e. stuck around long enough).&lt;br /&gt;&lt;br /&gt;Come to think of it, most professional services industry suffer from the same thing (accounting firms, law firms) ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-113020475830081126?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/113020475830081126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=113020475830081126' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/113020475830081126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/113020475830081126'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/10/software-project-managers-handbook-by.html' title='Software Project Manager&apos;s Handbook by Dwayne Phillips'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-113016594732445660</id><published>2005-10-24T22:57:00.000+08:00</published><updated>2005-10-24T22:59:07.333+08:00</updated><title type='text'>Recent Updates</title><content type='html'>Have not updated blog entries for a while. Guess I've gotten over the peevish stage with my Project Manager, so have not had the emotional upheaval to require an outlet to write.&lt;br /&gt;&lt;br /&gt;A combination of factors helped to resolve my bout of peevishness. I was supposed to be posted overseas for a stint, but things came up at home that I had to cancel the trip. The trip would have helped to reduce the friction between the project manager and I, but now that it did not happen, I was thinking about making a shift to another group, when the director (our collective boss) talked to me in the corridor and mooted the idea first. His concern, rightly, was that there isn't a clear role for me in the project. I was pretty much like a "deputy" project manager. I am rather grateful to him for making it easier for me by initiating it, instead of me trying to raise the issue without hurting anybody, especially myself. Anyway, so I am moving out of the project after the design phase.&lt;br /&gt;&lt;br /&gt;This provided an opportunity for me to raise the issue to my project manager, and I also made use of the opportunity to scope out a "role" in the team, in essentially the simulation team. With this, I deliberately chose to skip the customer's project management meetings. Skipping the meetings helped, because when I attended, I became essentially the "messegner boy", and often felt the pressure from the customer because of all the issues that remained happily outstanding in the project manager's lap. Now, they are breathing down HIS neck, and rightfully so, as I did not have the authority to direct the project resources anyway.&lt;br /&gt;&lt;br /&gt;Strange thing is that, now that I'm staying away, the idea of attending these meetings no longer irk me as much, and I do find myself attending some of them recently. I should remind myself not to get overly involved again. Like the Chinese saying: "Distance is Beauty".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-113016594732445660?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/113016594732445660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=113016594732445660' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/113016594732445660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/113016594732445660'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/10/recent-updates.html' title='Recent Updates'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112688539979842381</id><published>2005-09-16T23:11:00.000+08:00</published><updated>2005-09-17T00:08:04.750+08:00</updated><title type='text'>It is working != It is correct</title><content type='html'>I wonder how our local universities teach programming.  Wait, &lt;span style="font-style: italic;"&gt;I&lt;/span&gt; am a product of these universities ... well, guess I can only say that they're as wanting as before.&lt;br /&gt;&lt;br /&gt;A couple of weeks ago, I had to lecture one of my junior colleague, just out of U. It's not because he's not good, or the code's not working, but something just got on my nerves. Maybe I should illustrate with an example.&lt;br /&gt;&lt;br /&gt;Light, as we know, comprises 3 primary colour components. So, we can have a &lt;span style="font-family:courier new;"&gt;CLight&lt;/span&gt; class which has 3 &lt;span style="font-family:courier new;"&gt;CPrimaryColourComponent&lt;/span&gt;s. Each &lt;span style="font-family:courier new;"&gt;CPrimaryColourComponent&lt;/span&gt; has a integral value denoting the intensity, and an enumerated type that states whether it is BLUE, RED or GREEN.&lt;br /&gt;&lt;br /&gt;We can have&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;enum E_COLOUR_TYPE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   RED = 0,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   BLUE,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   GREEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In fact, this was defined, in a header file that includes a whole bunch of other stuff that is totally unnecessary for the simple remote data sender/receiver thing I asked him to write. So, I used integer instead, something like:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class CPrimaryColourComponent&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   int getIntensity() const;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   void setIntensity(int intensity);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   // 0 for RED, 1 for BLUE, 2 for GREEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   int getColourType() const;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   void setColourType(int colour);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;class CLight&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   void setPrimaryColour(int colour, int intensity);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   const CPrimaryColourComponent &amp; getPrimaryColour(int colour);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Initially, the code looks fine.  We were doing stuff like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CLight myLight;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// ....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(0, 23);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(1, 44);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(2, 32);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int redIntensity myLight.getPrimaryColour(0).getIntensity();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int blueIntensity myLight.getPrimaryColour(1).getIntensity();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int greenIntensity myLight.getPrimaryColour(2).getIntensity();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My mistake was that in the portion of the code that marshals the data across to his module, I got lazy and directly cast the integral value of the CPrimaryColourComponent's ColourType to the enumerated value, e.g.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;E_COLOUR_TYPE colType;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int colIntensity;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// ....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(colType, colIntensity);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CPrimaryColourComponent = pcComp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;E_COLOUR_TYPE pcType = pcComp.getColourType();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In &lt;span style="font-family:courier new;"&gt;CLight&lt;/span&gt;, there's an array of &lt;span style="font-family:courier new;"&gt;CPrimaryColourComponent&lt;/span&gt;, each element holding 1 &lt;span style="font-family:courier new;"&gt;CPrimaryColourComponent&lt;/span&gt;, indexed by the Colour type (Like I said, this was meant to be a simple stub thing).&lt;br /&gt;&lt;br /&gt;Of course, after a while, the E_COLOUR_TYPE had to be changed to&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;enum E_COLOUR_TYPE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   RED = 1,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   BLUE,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   GREEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instead of changing the mapping routine which I have passed to him for maintenance, he changed the implementation of &lt;span style="font-family:courier new;"&gt;CLight::setPrimaryColour(...)&lt;/span&gt; such that now, we call&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(1, 23);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(2, 44);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myLight.setPrimaryColour(3, 32);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However, the portion to retrieve the colour components was not changed:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int redIntensity myLight.getPrimaryColour(0).getIntensity();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int blueIntensity myLight.getPrimaryColour(1).getIntensity();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int greenIntensity myLight.getPrimaryColour(2).getIntensity();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Essentially, the &lt;span style="font-family:courier new;"&gt;CPrimaryColourComponent&lt;/span&gt; array index was offset by 1 in the set function, but not offset in the get function.&lt;br /&gt;&lt;br /&gt;I exclaimed that one cannot design a class where &lt;span style="font-family:courier new;"&gt;setPrimaryColour&lt;/span&gt; goes from 1 to 3, and the &lt;span style="font-family:courier new;"&gt;getPrimaryColour&lt;/span&gt; goes from 0 to 2. It's plain inconsistent and confusing.&lt;br /&gt;&lt;br /&gt;The strange thing was that he found me somewhat puzzling. He was probably thinking what's the big fuss, the code's working. He also thought I had wanted to access the array with an index from 1 to 3 and expressed concern about wasting one array element. I had to tell him that it's got nothing to do with however he intends to store the&lt;span style="font-family:courier new;"&gt; CPrimaryColourComponent&lt;/span&gt; instances, but it is wrong from the &lt;span style="font-family:courier new;"&gt;CLight&lt;/span&gt; interfaces.&lt;br /&gt;&lt;br /&gt;Until now, 2 weeks on, I'm still not sure he got my point ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112688539979842381?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112688539979842381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112688539979842381' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112688539979842381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112688539979842381'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/09/it-is-working-it-is-correct.html' title='It is working != It is correct'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112545676040712626</id><published>2005-08-31T10:49:00.000+08:00</published><updated>2005-08-31T10:52:40.416+08:00</updated><title type='text'></title><content type='html'>I feel like dirt.&lt;br /&gt;&lt;br /&gt;I found out I'm going on an overseas trip this week. How? My colleague SMS'ed me when I was on course 2 weeks ago to ask about the validity of my passport.&lt;br /&gt;&lt;br /&gt;Then I found out the arrival and departure dates. How? Another colleague emailed our overseas rep. A word document attached contains my name and the dates of arrival and departure.&lt;br /&gt;&lt;br /&gt;Then I found out we couldn't get seats on the intended departure date (ex SIN). How? During a casual post lunch conversation with the first colleague.&lt;br /&gt;&lt;br /&gt;Today I found out that because of the 2-day delay, my boss is extending the trip across the weekend (it was originally for 5 working days). How? Well, the first colleague just told me when we're in the lab working.&lt;br /&gt;&lt;br /&gt;The strange thing is that there is no agenda set yet.  So why am I going? In case they need me?  Because I'm good at everything?  So that my boss can throw me things he doesn't want to do?&lt;br /&gt;&lt;br /&gt;5 minutes ago, I found out that the admin girl helping with the ticket arrangement isn't informed of the extension. I'm 101%, no 99.999% sure (leave myself some room to wriggle) that hotel arrangement isn't updated.&lt;br /&gt;&lt;br /&gt;So far, my boss has not come to me and inform me that I am on this trip (although we ALL ASSUMED I was), when, and whether I can make it. I have to go around getting information from others.&lt;br /&gt;&lt;br /&gt;Am I a machine? To be moved at will?  To be switched on and off at will?&lt;br /&gt;&lt;br /&gt;Should I feel like dirt?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112545676040712626?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112545676040712626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112545676040712626' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112545676040712626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112545676040712626'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/08/i-feel-like-dirt.html' title=''/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112524286198197734</id><published>2005-08-28T23:26:00.000+08:00</published><updated>2005-08-28T23:27:41.986+08:00</updated><title type='text'>Barriers to Project Planning</title><content type='html'>A common situation in planning is that people do not want to spend the time and effort to plan. They are paid to build systems and write software, not plan. These people do not like to plan and they do not plan well. This combination means that they often delay planning until the last possible moment or beyond.&lt;br /&gt;&lt;br /&gt;Some people defer planning, hoping that additional information becomes available. Some think planning is a waste of time, because things always change anyway.&lt;br /&gt;&lt;br /&gt;Planning well takes time and effort. Thus it is important to "plan to plan". Often, planning is done during the "spare time" of the project managers who are often on other work assignments. Effort spent on estimation, budgeting, and tasking is not accounted for. It is little wonder then that the project plans are sketchy at best.&lt;br /&gt;&lt;br /&gt;A related problem is that project management is not perceived to be real work. When activities do get planned, few if any, actually plan in project management activities. Aside from schedule, there are many plans in a project, e.g. scmp, sqap, rmp, etc. Project managers often asked “If I had to do all that, how am I going to do the real work?”&lt;br /&gt;&lt;br /&gt;These people fail to see why the plans came about in the first place, and/or refuse to give up their selfish desire to do technical work. They do not care/think that the project and the team members suffer because of the lack of planning.&lt;br /&gt;&lt;br /&gt;There is an example quoted in the book that describes the consequences when project managers do not take time to plan. I'm sure many of us can see ourselves in such situations:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;“People were in the middle of flurries of unplanned activities. Since there was no plan, people were confused as to what they should be doing. Since they were confused, they were too busy to make the plan. This cycle repeats itself endlessly.”&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another common situation quoted in the book is that Project Managers are asked not to plan, but to cook up a “right answer plan”. Someone with authority dictates the deliverable milestones. Hence planning became a farce to arrange (and shorten) tasks to finish on the dictated date.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;"The project begins, the dictated deadlines passes with no deliverables, and everybody lives in agony until they finish."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The funny thing is people tend to accept dictated plans, and try to make them work. This is because&lt;br /&gt;· such situations occur so often it becomes normal;&lt;br /&gt;· the dictator is the boss; nobody likes (has the moral courage) to cross the boss.&lt;br /&gt;· people no longer believe in the plan; these disengaged staff just work silently and watch the inevitable happen.&lt;br /&gt;&lt;br /&gt;A related phenomenon is what I call "hysterical optimism", where people become overly optimistic about the schedule, timeline and resources.&lt;br /&gt;&lt;br /&gt;Very often we fool ourselves into thinking “The people will come on board.” Or “The other subsystem will be late”, “we’ll get the money from somewhere else” and the infamous "I think we can beat that date."&lt;br /&gt;&lt;br /&gt;There is no basis to these assumptions, hence "hysterical". One possible reason is that these people are pressurized into coming up with the "right answer plan" and become delusional. Another reason is that they are by nature overly-optimistic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112524286198197734?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112524286198197734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112524286198197734' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112524286198197734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112524286198197734'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/08/barriers-to-project-planning.html' title='Barriers to Project Planning'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112450785143749630</id><published>2005-08-20T11:16:00.000+08:00</published><updated>2005-08-20T11:17:31.436+08:00</updated><title type='text'>Goooogle me!</title><content type='html'>Hey, I'm on &lt;a href="http://www.google.com.sg/search?hl=en&amp;q=halfamugobeer&amp;amp;btnG=Google+Search&amp;amp;meta="&gt;Google&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112450785143749630?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112450785143749630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112450785143749630' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112450785143749630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112450785143749630'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/08/goooogle-me.html' title='Goooogle me!'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112450762261876084</id><published>2005-08-20T11:15:00.000+08:00</published><updated>2005-08-20T11:13:42.626+08:00</updated><title type='text'>Project Planning</title><content type='html'>&lt;p&gt;Planning starts when the Project Manager realises there are tangible items to be delivered by certain dates, identify certain activities needed to deliver these items, and assigns people to perform these activities.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;For all but the simplest projects (e.g. a weekend BBQ for 8 friends), this is insufficient.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Firstly, time is not taken into account. Items have to be delivered by a certain date, meaning that activities would have to be done by a certain date, meaning that they need to start by a certain date. Furthermore, some activities need to be performed in sequence. Without planning, people may start certain activities to find that they do not have the necessary input. Some may finish their activities and discover that nobody wants the things they did yet. Some activities may start too soon, and some too late.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;A very typical example of what happens in projects was given in the book.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;“Gamma had a high level plan. The PM or system engineer used it to sell the project to their managers. The plan was on a view graph. After approval, they never replaced these viewgraphs with a real plan.”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From the beginning (6 months to 2 years ago) till now, I have not seen the “real” project plan.&lt;span style=""&gt;  &lt;/span&gt;However, I cannot go to the PM and say that the project plan does not exist, because they will point to the high level plan.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Because of this, I feel that there should be 2 project plans. A high level plan with 1 or 2 levels of WBS and the major milestones is used for the customers and stakeholders. For the project teams, activities should be at individual level with duration at the week level. For big projects, this may require several cascading levels perhaps projects within projects (or programs in this case), but it is essential because ultimately you are telling somebody to do something by a certain time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112450762261876084?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112450762261876084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112450762261876084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112450762261876084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112450762261876084'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/08/project-planning.html' title='Project Planning'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112429191138690067</id><published>2005-08-17T23:05:00.000+08:00</published><updated>2005-08-17T23:18:31.396+08:00</updated><title type='text'>Quality Rants</title><content type='html'>It's been almost a month.  I would have written, but was really really caught up with work and some personal matters.  (Yes, programmers lead a normal life too.)&lt;br /&gt;&lt;br /&gt;Recently, on National Day (Singapore, 9 August), saw an ex-colleague's article appear in the newspaper's "Digital Life" supplement.  It was about software Quality.  Somehow, everybody seems to equate software quality with software quality processes, like ISO or SEI CMMi stuff.  I think people who think that is missing the whole big point about quality.&lt;br /&gt;&lt;br /&gt;I remember meeting &lt;a href="http://www.lindarising.org"&gt;Linda Rising&lt;/a&gt; during a Design Pattern workshop in Sydney in 1998.  She was talking about Christopher Alexander, his book "A Timeless Way To Build" and what he mentioned about "Quality without a name".  Now, I have not read Alexander's book, so I cannot comment on how I interpret it, but if I went away with the impression that it's about doing something, and the knowledge deep inside you that you know is good, and gives you pride and delights you.&lt;br /&gt;&lt;br /&gt;And I think this is what it's all about.&lt;br /&gt;&lt;br /&gt;Malcom Baldridge and SQA can say "quality is defined by the customer".  Some people say 6 sigma means good quality.  But as a technical person who's doing what he doesn't really enjoy doing most of the time, I think that QWAN thing is closer to me, and remains the Holy Grail that I am searching for.&lt;br /&gt;&lt;br /&gt;"It             is the search for those moments and situations when             we are most alive" so Christopher says. Aye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112429191138690067?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112429191138690067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112429191138690067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112429191138690067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112429191138690067'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/08/quality-rants.html' title='Quality Rants'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112170028901003371</id><published>2005-07-18T23:20:00.000+08:00</published><updated>2005-07-18T23:24:49.016+08:00</updated><title type='text'>Trouble publishing from Office</title><content type='html'>I seem to have some problem publishing blogs from my office PC.  Everyting is ok until I hit the "Save as Draft" or "Publish Post", and I get this page that says the page cannot be displayed (in IE6) or "This page contains no data" in Firefox.&lt;br /&gt;&lt;br /&gt;And then when I try to http://www.blogger.com, or use it's IP address, the page will not load (can't seem to establish connection).  But it's ok accessing my blog page http://halfamugobeer.blogspot.com&lt;br /&gt;&lt;br /&gt;Hmmm ... does anybody know why?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112170028901003371?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112170028901003371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112170028901003371' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112170028901003371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112170028901003371'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/07/trouble-publishing-from-office.html' title='Trouble publishing from Office'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112114369151772125</id><published>2005-07-12T12:45:00.000+08:00</published><updated>2005-07-18T23:19:35.383+08:00</updated><title type='text'>It sounded good when we started ... Dwayne Phillips and Roy O'Bryan</title><content type='html'>The title of the book caught my eye when I was in the&lt;br /&gt;library. So I picked it up, and it proved to be a book&lt;br /&gt;that's easy to read. So over the next few blogs, I'll&lt;br /&gt;try to capture a few points that I find&lt;br /&gt;meaningful/applicable/that I can relate to. Nowadays,&lt;br /&gt;when I write documents, I like to write what we intend&lt;br /&gt;to do and what we do NOT intend to do because readers&lt;br /&gt;seems to assume/imply that we do more than what we&lt;br /&gt;intend to do. I do not intend this to be a book&lt;br /&gt;review.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Proposals&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;I agree that for most projects, we do "short selling",&lt;br /&gt;i.e. we sell something that we do not have yet. Of&lt;br /&gt;course, the name of the game is to fill up the goods&lt;br /&gt;at a price cheaper than that we're selling. And of&lt;br /&gt;course, that doesn't always happen. The authors write&lt;br /&gt;about builders who propose beyond their capabilities.&lt;br /&gt;Sometimes, it is a case of the customer trying to&lt;br /&gt;"squeeze" the vendors for more "goodies". And it is&lt;br /&gt;not always the ability to deliver, but the pricing of&lt;br /&gt;the contract is so low that the project manager has no&lt;br /&gt;choice but to cut many corners during the project.&lt;br /&gt;&lt;br /&gt;I also agree that builders should decide if contracts&lt;br /&gt;are worth winning. Many times, I hear comments from&lt;br /&gt;the upper management like "I know the price is very&lt;br /&gt;low, but we'll lock in the customer, and we can charge&lt;br /&gt;more for subsequent phases". Or "the customer has many&lt;br /&gt;projects in the pipeline". Or some even more obscure&lt;br /&gt;"strategic interest" of the company. Often these same&lt;br /&gt;managers will persuade the poor project manager to&lt;br /&gt;stay within the budget of the project, and gently&lt;br /&gt;breathe down their necks if the project were to make a&lt;br /&gt;loss/delay etc. In so doing, instead of "locking in"&lt;br /&gt;the customer, they pretty much ensure that the&lt;br /&gt;customer will stay away for a very long time after&lt;br /&gt;that.&lt;br /&gt;&lt;br /&gt;By the way, if I were the customer and I'm trying to&lt;br /&gt;"squeeze" my vendor, I'll also say things like "oh,&lt;br /&gt;we're planning a major upgrade to &lt;the&gt;", or "if this&lt;br /&gt;turns out well, we have a good case for putting up&lt;br /&gt;budget for company-wide roll out ...". Who's to blame&lt;br /&gt;who if this doesn't turn out? "Oh, yeah, we WERE&lt;br /&gt;planning to upgrade, but y'know the oil prices are up&lt;br /&gt;and we have to trim our budget blah blah blah ...&lt;br /&gt;maybe next year when things get better ... by the way,&lt;br /&gt;do you suppose you could put in a trial license of the&lt;br /&gt;new features you were talking about? Maybe that might&lt;br /&gt;persuade my management ... no guarantees though"&lt;br /&gt;&lt;br /&gt;If I were the project manager in this case, I'd put up&lt;br /&gt;a realistic estimate of the cost/effort of the&lt;br /&gt;project, and insist that somebody up there agrees to&lt;br /&gt;commit to THAT cost of the project. Hopefully this&lt;br /&gt;will make them wake up to their unrealistic idea. At&lt;br /&gt;least I'd make sure somebody else's neck gets warmed&lt;br /&gt;up as well...&lt;/the&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112114369151772125?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112114369151772125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112114369151772125' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112114369151772125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112114369151772125'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/07/it-sounded-good-when-we-started-dwayne.html' title='It sounded good when we started ... Dwayne Phillips and Roy O&apos;Bryan'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112083716278124858</id><published>2005-07-08T23:36:00.000+08:00</published><updated>2005-07-08T23:39:22.786+08:00</updated><title type='text'></title><content type='html'>We know the saying "death by meetings". My project suffers from the&lt;br /&gt;opposite. The last time everybody updated everybody else was, oh, about a&lt;br /&gt;month ago?&lt;br /&gt;&lt;br /&gt;My project manager prefers to have 1-on-1 meetings with the individual&lt;br /&gt;developers, mainly to discuss the technical aspects of the module they&lt;br /&gt;are working on. Things like, should we use explicit acknowledgement for&lt;br /&gt;the communications module? Should we use hashmaps? What persistent&lt;br /&gt;storage should we use? Or the interfaces provided by "framework" classes he developed.&lt;br /&gt;&lt;br /&gt;My guess is that he does not want to waste the precious time of other&lt;br /&gt;people, since most of the discussion is very specific to the the module&lt;br /&gt;each individual is developing. So he probably pass on information that&lt;br /&gt;he thinks the developer needs to know in these meetings too.&lt;br /&gt;&lt;br /&gt;I am not responsible for any module. So, if he were to keep me in the&lt;br /&gt;loop, he would have to either bring me into every discussion, which is&lt;br /&gt;what he wants to avoid in the first place, or just tell me the stuff&lt;br /&gt;that I need to do. Actually, he doesn't do either. He doesn't tell me what&lt;br /&gt;he told the people, nor tell me the stuff that I need to do, cos I'm&lt;br /&gt;senior enough to figure out what to do without being told. Somehow I&lt;br /&gt;don't feel flattered.&lt;br /&gt;&lt;br /&gt;One thing I *think* I'm supposed to do is to "provide guidance".&lt;br /&gt;&lt;br /&gt;How?&lt;br /&gt;&lt;br /&gt;Every now and then, I get one of them to come up to me with one&lt;br /&gt;question or another. Like should we have a common way of sending functions across different modules, or should something be a synchronous or asynchronous call. And because I've been left out of the picture, sometimes it's a bit hard to call.&lt;br /&gt;&lt;br /&gt;I also think that this practice makes the developers feel very "compartmentalised". They are just concerned with their own modules. Once one of the developers started making certain assumptions about another module. I had to question why she did that, since the person developing that module is less than 10 meters (or 30 feet) away. A quick check would have given her all the answers she needed without having to assume.&lt;br /&gt;&lt;br /&gt;I also find it a bit hard some times to make recommendations to these&lt;br /&gt;developers because I'm not sure what has transpired between the PM and&lt;br /&gt;them, and I might be making recommendations on the side that is not&lt;br /&gt;consistent with what the PM said. Of course, I can always check back with&lt;br /&gt;the PM, but I prefer to refer the developer to the PM directly; anyway&lt;br /&gt;he's technically more capable than me.&lt;br /&gt;&lt;br /&gt;But that said, I cannot be the one who calls these meetings, for I&lt;br /&gt;would be overstepping my role. Guess I'll just have to let things be at the&lt;br /&gt;moment... ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112083716278124858?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112083716278124858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112083716278124858' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112083716278124858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112083716278124858'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/07/we-know-saying-death-by-meetings.html' title=''/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112056921707685130</id><published>2005-07-06T00:20:00.000+08:00</published><updated>2005-07-06T00:20:53.713+08:00</updated><title type='text'>"It's easy ... just use Singletons!"</title><content type='html'>This came from a senior developer of our collaborator when we were discussing about whether to have a builder class to "put the pieces together", so to speak. Instinctively, I felt alarm bells sounding off, but couldn't quite put it coherently why it is a bad idea.&lt;br /&gt;&lt;br /&gt;Somehow I wish that the GOF have left out the Singleton Pattern from their landmark Design Patterns book, because it is about the first book that anyone starting on Design Pattern would read, and the pattern is one that anyone reading it will easily understand. And use. A lot.&lt;br /&gt;&lt;br /&gt;I remember being in a class on Design Pattern (about 7 years ago?), contorting my mind about how in the world does one use AbstractFactory. My face must have been contorted too, judging by the concerned look on the trainer's face. Then, when we reached Singleton, it felt like enlightenment. Aha! Here is a pattern that I could immediately relate to. I could now show off to my project manager that with a neat trick, I have no global variables to mess around with. Everbody knows globals are bad right? (Hmmm, can't seem to remember why though ...)&lt;br /&gt;&lt;br /&gt;Yes. Singleton got rid of global variables. Some would say that global variables are now disguising themselves as singletons. Singletons do share some of the downside of globals, which I will attempt to list as I trawl the net for more ...&lt;br /&gt;&lt;br /&gt;1.  The good thing about Singletons (and global variables).&lt;br /&gt;Before singletons came along, global variables provided easy access to objects and data that have to be made accessible to many. Else you'd have to have a reference being passed back and forth, up and down just in case some module somewhere needs it. So, global variables were convenient to use. Too convenient, some would say. For when we say "easy access to many", how easy is easy, and how many is many? Thus when we talk about bad ideas, it is usually due to abuse, misuse or over-use of a good one.&lt;br /&gt;&lt;br /&gt;2.  Namespaces&lt;br /&gt;One of the main problems with global variables is the potential conflict in names.&lt;br /&gt;&lt;br /&gt;Imagine we have a global FileLogger which we affectionately call theLogger, that logs messages to a file. Now because of increased functionality, we decide that some modules that relate to some other functionality should log to a different file name. We create another global variable and call it ... ... the&lt;function&gt;Logger.  Yet another developer (who's new and hasn't really been told about the logger thing) wrote something like&lt;br /&gt;void doSomething ()&lt;br /&gt;{&lt;br /&gt;    FileLogger theLogger("MyLocalLogFile.txt");&lt;br /&gt;    // ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Some coding conventions do attempt to resolve this by stipulating that all globals should be prefixed with "g_" or something similar.  The use of namespaces in C++ further helps to scope and avoid name conflicts.&lt;br /&gt;&lt;br /&gt;This is an area where using Singleton helps.  A Singleton actually enforces the fact that there can only be at most 1 (or whatever number you design it to be)  singleton instance in the whole system.&lt;br /&gt;&lt;br /&gt;3.  Design issues&lt;br /&gt;Because Singleton removes the stigma of global variables, many often use it as a matter of convenience.  Now, all of a sudden, I can make all my long-living domain classes singletons, I no longer have to pay attention to who needs to talk to who.  If class X collaborates with class Y which delegates some responsibilities to classes Y1 and Y2, class Y no longer needs to furnish classes Y1 and Y2 with a reference to X, because everybody knows how to get X.  This may actually reduce coupling, because now Y does not need to know X anymore.  In fact,  singleton classes become islands in class diagrams, because nobody needs to establish any structural association with them.&lt;br /&gt;&lt;br /&gt;This makes it diificult to keep track of the clients of singleton classes because it is not apparent from the design diagrams.  Furthermore, because "eveybody knows where singletons live", it becomes very easy, especially if you're rushing to meet the code freeze date for that new functionality for which you're assigned, but not really sure which class(es) to assign to, to pull singletons from everywhere to do whatever you need to do, without seriously thinking about the software design and architecture.&lt;br /&gt;&lt;br /&gt;Another issue related to "everybody knows where singletons live" is the assumption about the clients of the singleton class, especially if the class was not designed to be a singleton (or rather for universal access) in the first place.&lt;br /&gt;&lt;br /&gt;A Logger, for want of a better example, is typically designed to be used by another other class that performs some generic logging function.  On the other hand, an EmployeeRecords class may have been designed to be used by some HR functions that does retrieval and update of 1 record at a time, indexed by the employeeId.  It being a singleton does not mean that it supports a management query function to list all employees who have been in the company for more than 5 years, or the payroll client to retrieve the bank information of the employees who have yet to be paid their expense reimbursements.  Depending on who owns the code and the software development process (or lack thereof), we may have a situation of the EmployeeRecords providing many specialised services.  In this day and age of personalised service, I wonder if that may not be a bad thing...&lt;br /&gt;&lt;br /&gt;Of course, bad software design exists way before the days of singleton, but singletons make it easier to rape a class.&lt;br /&gt;&lt;br /&gt;I've seen a Layered Architecture broken because of the over-use of singletons and global references.  The developer was rushing a deadline, there was "no time to do proper design", and we know how the code ended in an italian restaurant.  Guess who's staring at the plate? :(&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.  Memory Usage and Life cycle management&lt;br /&gt;I see this as more of an implementation issue.  Should we instantiate it on the stack?  It's a waste if it is not used.  Frankly, I think that's a lousy argument.  If you're not sure it would be used, why make it a singleton in the first place?  The more difficult issue is the order of creation of static objects in different translation units, so if you've got singletons that require other singletons, then you may be in trouble.&lt;br /&gt;&lt;br /&gt;Then, if you're using C++, there's the memory leak problem with the original GOF example, which doesn't really bother me, cause it happens only when the program exits, but if you insist, well, there's the Meyer's singleton which cleverly puts the object in the static local variable in the instance call.&lt;br /&gt;&lt;br /&gt;There are also issues with the order of destruction, with some using the atexit function that performs calls in the LIFO manner.  Of course, that's provided we know whoever's created first wouldn't need something that's created later when it exits.  I haven't thought about this much, but what happens if this happens?  More reading needed ...&lt;br /&gt;&lt;br /&gt;5.  Limited extensability of the singleton class.&lt;br /&gt;In the original GOF pattern, the constructor is made protected, so that the singleton can be extended through inheritance.  So you have a BaseClass, and there are classes doing BaseClass::instance() to get a BaseClass instance.  To allow subclassing, we'd need access to the BaseClass::instance(), modifying it to return the DerivedClass instead.  Of course, if we had known earlier, we could have placed the BaseClass::instance() in a separate translation unit (source file) to simplify the build.&lt;br /&gt;&lt;br /&gt;6.  Unit-Testability of the client class.&lt;br /&gt;The limited extensability of the singleton class also limits the testability of the client class, because it is potentially harder to provide a stub in place of the actual singleton class, unless we own the code.  Imagine the class under test needs a reference to BaseClass.  We could have easily provided a MockBaseClass that inherits from BaseClass and pass that reference to the ClassUnderTest.  But if it calls BaseClass::instance(), and BaseClass is part of a bigger library needed for other stuff, then we'd need to work with the actual BaseClass.&lt;br /&gt;&lt;br /&gt;Another problem I've faced is in some distributed computing nodes where services in a node talk to peer services in other nodes via some protocol.  When I'm doing unit testing, I just want to test that one class, without dragging in all the supporting services for a remote connection.  Unfortunately, the clients and the class itself are singletons, which means I could not now create 2 instances of the clients and 2 instances of the class for my unit test.&lt;br /&gt;&lt;br /&gt;Well, it's way past my bedtime, and I'm getting up for a morning run, so I'll just upload this, and edit it again if I can tomorrow ... err later today...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112056921707685130?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112056921707685130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112056921707685130' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112056921707685130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112056921707685130'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/07/its-easy-just-use-singletons.html' title='&quot;It&apos;s easy ... just use Singletons!&quot;'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-112012596972325526</id><published>2005-06-30T17:56:00.000+08:00</published><updated>2005-06-30T18:06:09.726+08:00</updated><title type='text'>The unOfficial Project Manager</title><content type='html'>Had lunch with an ex-colleague on Tuesday, and even she said that I shouldn't leave things undone because they're PM stuff and I'm not the PM.&lt;br /&gt;&lt;br /&gt;So, I asked. Do I do all the PM stuff, while he retains the PM role in name?  She hesitated before saying that it's better to make things official.  Yeah, right.&lt;br /&gt;&lt;br /&gt;Frankly, I'm not being difficult on purpose.  It's just that I find it hard at times to feel an ownership of the tasks that are quite clearly (to me) somebody else's.  Give me a little time  ....&lt;br /&gt;&lt;br /&gt;******&lt;br /&gt;&lt;br /&gt;Posted a &lt;a href="http://discuss.joelonsoftware.com/default.asp?joel.3.153139.1"&gt;question&lt;/a&gt; on CM and defect tracking on Joel Spolsky's forum.  So far only 1 comment.  Anybody else can contribute?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-112012596972325526?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/112012596972325526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=112012596972325526' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112012596972325526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/112012596972325526'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/unofficial-project-manager.html' title='The unOfficial Project Manager'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-111985201468186368</id><published>2005-06-27T14:00:00.000+08:00</published><updated>2005-06-27T14:00:14.686+08:00</updated><title type='text'>Lessons from Star Wars Episode III</title><content type='html'>(Spoiler warning!)&lt;br /&gt;&lt;br /&gt;The thing that stuck most about Ep. 3, is how Anakin Skywalker went over to the dark side.  While the Jedi training aims at controlling one's emotions, and the denial of self to serve the common good, the Sith aims at using one's emotions to unleash greater powers to achieve one's desires.&lt;br /&gt;&lt;br /&gt;I think Anakin's inevitable fall can be attributed to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;His inability to control his anger, especially the desire to seek revenge.&lt;/li&gt;&lt;li&gt;His ambition, of thinking he's meant for greater things, and his frustration at all who seem to block his way.&lt;/li&gt;&lt;li&gt;His obsession to hold on to what is his, namely Padme and their children.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;But isn't that the nature of all "evil", common across all religions?  That obsession with self without regards to the common good?&lt;/p&gt;&lt;p&gt;Imagine, if I had been an overaged Jedi apprentice, talking to Yoda ...&lt;/p&gt;&lt;p&gt;Yoda: Very troubled, you've been, paduan.&lt;/p&gt;&lt;p&gt;Me:  I'm sick of doing things on behalf on my PM, Master Yoda. I'm not going to do them anymore!  I'll just do what I want to do.  He can screw up the project for all I care!&lt;/p&gt;&lt;p&gt;Yoda: Very close to the dark side, you are.&lt;/p&gt;&lt;p&gt;Me: You mean, I've to carry on clearing his work for him?&lt;/p&gt;&lt;p&gt;Yoda: Exist to serve the common good, the jedi.  Do the right things, you must. Learn to let go of your sense of injustice, you must.&lt;/p&gt;&lt;p&gt;Me: ... ...&lt;/p&gt;&lt;p&gt;Yoda:  Patience, paduan. Great things, big sacrifices, follow.&lt;/p&gt;&lt;p&gt;Me: Oh yeah?  I expect a big bonus then ...&lt;/p&gt;&lt;p&gt;Gotta go for my meeting ...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-111985201468186368?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/111985201468186368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=111985201468186368' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111985201468186368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111985201468186368'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/lessons-from-star-wars-episode-iii.html' title='Lessons from Star Wars Episode III'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-111984893855650506</id><published>2005-06-27T13:11:00.000+08:00</published><updated>2005-06-27T13:08:58.560+08:00</updated><title type='text'>RSS, Atom, Syndication &amp; Site Feed</title><content type='html'>Being new to the blogging business, I noticed this site feed option here in blogger.  Curious, went to look it up, and found an excellent explanation at &lt;a href="http://www.mezzoblue.com/archives/2004/05/19/what_is_rssx/"&gt;http://www.mezzoblue.com/archives/2004/05/19/what_is_rssx/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-111984893855650506?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/111984893855650506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=111984893855650506' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111984893855650506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111984893855650506'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/rss-atom-syndication-site-feed.html' title='RSS, Atom, Syndication &amp; Site Feed'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-111977005158716057</id><published>2005-06-26T15:10:00.000+08:00</published><updated>2005-06-26T15:14:11.590+08:00</updated><title type='text'>Managing Your Boss</title><content type='html'>Started some reading on project management and career management because of my current situation with my project manager Terry.  One of the books that I picked up from the library is the Harvard Business Review on Managing Your Career, because of the HBR classic "&lt;a href="http://harvardbusinessonline.hbsp.harvard.edu/b02/en/common/item_detail.jhtml;jsessionid=BC0UVSOFXVBIIAKRGWCB5VQBKE0YIIPS?id=R0501J"&gt;Managing Your Boss&lt;/a&gt;" by John Gabarro and John Kotter.&lt;br /&gt;&lt;br /&gt;In the article, the authors told the story about how Bonnevie did not get along with his boss Gibbons, resulting in the company making a loss and Bonnevie getting the boot.  The authors further argued that while many dismiss such situations as personality conflict, it was more of a case of an "unrealistic assumptions and expectations of boss-subordinate relationships", that it involves a &lt;em&gt;mutual dependence&lt;/em&gt; of 2 &lt;em&gt;fallible&lt;/em&gt; human beings.&lt;br /&gt;&lt;br /&gt;They then went on to discuss the need to understand both yourself and your boss, to adapt to the boss's working style, ... go read the &lt;a href="http://harvardbusinessonline.hbsp.harvard.edu/b02/en/common/item_detail.jhtml;jsessionid=BC0UVSOFXVBIIAKRGWCB5VQBKE0YIIPS?id=R0501J"&gt;article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The part of the abstract on effective behavior caught my attention most: "Forget ambition. Forget promotion. Forget raises.  Just think of the job and how to be effective in it."&lt;br /&gt;&lt;br /&gt;So ... I'm just supposed to carry on doing what he's supposed to be doing (boring PM stuff), while he's doing what both of us like to be doing (interesting technical stuff)?  B-b-but what if I did some of the PM stuff wrong?  Who's responsible? Please don't tell me things like 'both of you'.  Initially I consoled myself that at least I'm "learning the ropes" to be a PM, without shouldering the responsibilities, but after a while I O.D. on that consolation.&lt;br /&gt;&lt;br /&gt;Does the &lt;em&gt;classic&lt;/em&gt; article still apply in the 21st century?&lt;br /&gt;&lt;br /&gt;Incidentally, I read this article not long after I watched Star Wars Episode III.  I think somebody up there is trying to tell me something ... ... but that's for the next blog, perhaps tomorrow?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-111977005158716057?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/111977005158716057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=111977005158716057' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111977005158716057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111977005158716057'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/managing-your-boss.html' title='Managing Your Boss'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-111966415096731956</id><published>2005-06-26T09:11:00.000+08:00</published><updated>2005-06-26T09:12:32.773+08:00</updated><title type='text'>B-B-But I'm not the project manager ...</title><content type='html'>I have a problem. Quite a big one. A very typical one.&lt;br /&gt;&lt;br /&gt;It's my Project Manager.&lt;br /&gt;&lt;br /&gt;You know how it is in the technical line. People become Project Managers, not because they are good at managing, or even like managing. They often become project managers because they are good at their technical fields, and over time they become the most senior people on the team and that means becoming the project manager.&lt;br /&gt;&lt;br /&gt;These people like dabbling in their technical stuff, be it writing software, developing protocols, or designing algorithms. They do NOT like boring stuff, like writing plans, thinking about risk management, attending useless user meetings, and (especially) keying in stuff in the SAP.&lt;br /&gt;&lt;br /&gt;So it's the case with my project manager, whom I shall call Terry.&lt;br /&gt;&lt;br /&gt;Just to fill in the perspective: I'm the senior developer on the team of about 10. I'll provide more details if needed as we go along ...&lt;br /&gt;&lt;br /&gt;It so happens that 1 day I woke up, and realised that I was the one who wrote the SOW (Scope of Work), did the effort and cost estimation, organised contract negotiation meetings and kept track of the many versions of contracts, rushed around like a madman on the eve of our business trip to make sure the business admin department cleared the contract before we leave.&lt;br /&gt;&lt;br /&gt;And I decided I've had enough. Why am I the one doing all these stuff, instead of the PM?&lt;br /&gt;&lt;br /&gt;A lot of the stuff that I did was on my own initiative. It wasn't something that he delegated to me. He did not come over to me and say "Aloysius, I'm really swamped with work, can you handle the user meetings for me?" No. The users sent notice via email to both of us. I attended and he didn't. That happens long enough, and the users now just sends the mails to me. But I'm not the project manager! Can I commit on his behalf how many of us will attend the tools training? How many of us will support the initial testing? Whether we are going to inter-operate with system A, B or C?&lt;br /&gt;&lt;br /&gt;It's the same with the other stuff like SOW, or software configuration management, document repository, etc ...&lt;br /&gt;&lt;br /&gt;I guess my main question is: if the Project Manager doesn't care to do or delegate, should I do it on my own initiative? Should I care, if the Project Manager doesn't?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-111966415096731956?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/111966415096731956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=111966415096731956' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111966415096731956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111966415096731956'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/b-b-but-im-not-project-manager.html' title='B-B-But I&apos;m not the project manager ...'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-111957750857538785</id><published>2005-06-24T09:49:00.000+08:00</published><updated>2005-06-24T09:45:08.580+08:00</updated><title type='text'>Niel Christiansen on File System Filters</title><content type='html'>Was reading the &lt;a href="http://radio.weblogs.com/0001011/2005/06/16.html#a10405"&gt;exchange&lt;/a&gt; between Robert Scoble and Joel Spolsky on the Microsoft Recruitment issue, and came across a &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=36907"&gt;video on Niel Christiansen talking about File System Filters&lt;/a&gt;. I like the video, not for the architecture presented, but the insight into the considerations in adopting the first stack-based implementation and the change to the Filter Manager-based impementation.&lt;br /&gt;&lt;br /&gt;Come to think of it, the thought of developing something that is used by billions of people worldwide is rather daunting. Imagine the number of people coming after my throat if I did something (inadvertently of course) that results in worldwide misery.&lt;br /&gt;&lt;br /&gt;Will dig more around Channel 9 to see if there's more interesting stuff. Later, gotta get back to my design work first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-111957750857538785?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/111957750857538785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=111957750857538785' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111957750857538785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111957750857538785'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/niel-christiansen-on-file-system.html' title='Niel Christiansen on File System Filters'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13890011.post-111950739218591261</id><published>2005-06-23T14:20:00.000+08:00</published><updated>2005-06-24T10:42:44.780+08:00</updated><title type='text'>Well, well, what do you know ....</title><content type='html'>"You know," I was telling a friend. "Bloggers are typically egotistic fools who suffer from the delusion that there's an audience for their inane ramblings."&lt;br /&gt;&lt;br /&gt;"Hey! That's sounds like me!" I added, excitedly.&lt;br /&gt;&lt;br /&gt;So here I am, and the only reason that's been holding me back all this while is the sheer inertia of clicking on the right spot, and thinking of meaningless things to say.&lt;br /&gt;&lt;br /&gt;A little pathetic though, to start off my blog this way, if this is all I have to say. Well, I DID think about what I should talk about here -- should it be about work? my love life? my interest? Heck, I've decided to let it just flow and see what happens.&lt;br /&gt;&lt;br /&gt;So here's 1 to me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13890011-111950739218591261?l=halfamugobeer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://halfamugobeer.blogspot.com/feeds/111950739218591261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13890011&amp;postID=111950739218591261' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111950739218591261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13890011/posts/default/111950739218591261'/><link rel='alternate' type='text/html' href='http://halfamugobeer.blogspot.com/2005/06/well-well-what-do-you-know.html' title='Well, well, what do you know ....'/><author><name>+1tanium</name><uri>http://www.blogger.com/profile/14772382315000482337</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
