<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Jimako's Blog</title>
	<atom:link href="http://www.jimako.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jimako.com/blog</link>
	<description>Looking forward, aware of the past...</description>
	<pubDate>Fri, 11 Apr 2008 06:39:19 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Murphy&#8217;s Lesser-Known Laws</title>
		<link>http://www.jimako.com/blog/2008/01/25/murphys-lesser-known-laws/</link>
		<comments>http://www.jimako.com/blog/2008/01/25/murphys-lesser-known-laws/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 23:31:37 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2008/01/25/murphys-lesser-known-laws/</guid>
		<description><![CDATA[
Light travels faster than sound. This is why some people appear bright until you hear them speak. 
He who laughs last thinks slowest. 
Those that live by the sword get shot by those who don&#8217;t. 
Nothing is foolproof to a sufficiently talented fool. 
The 50-50-90 rule: Anytime you have a 50-50 chance of getting something right, there&#8217;s a 90% [...]]]></description>
			<content:encoded><![CDATA[<ol>
<li>Light travels faster than sound. This is why some people appear bright until you hear them speak. </li>
<li>He who laughs last thinks slowest. </li>
<li>Those that live by the sword get shot by those who don&#8217;t. </li>
<li>Nothing is foolproof to a sufficiently talented fool. </li>
<li>The 50-50-90 rule: Anytime you have a 50-50 chance of getting something right, there&#8217;s a 90% probability you&#8217;ll get it wrong. </li>
<li>The things that come to those who wait will be the things left by those who got there first. </li>
<li>Give a man a fish and he will eat for a day. Teach a man to fish and he&#8217;ll sit in a boat all day, drinking beer. </li>
<li>The shin bone is a device for finding furniture in a dark room. </li>
<li>A fine is a tax for doing wrong. A tax is a fine for doing well. </li>
<li>When you go into court, you are putting yourself in the hands of 12 people who weren&#8217;t smart enough to get out of jury duty.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2008/01/25/murphys-lesser-known-laws/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Time to take time to take leave&#8230;</title>
		<link>http://www.jimako.com/blog/2008/01/25/time-to-take-time-to-take-leave/</link>
		<comments>http://www.jimako.com/blog/2008/01/25/time-to-take-time-to-take-leave/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 19:26:08 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Housekeeping]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2008/01/25/time-to-take-time-to-take-leave/</guid>
		<description><![CDATA[Recently, I needed to cancel some leave to get a jump start on some requirements gathering and design work over the holiday season. It wasn&#8217;t a real problem as I had not made any real plans &#8212; in fact, I had planned specifically not to schedule any activities or tasks for myself so as to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I needed to cancel some leave to get a jump start on some requirements gathering and design work over the holiday season. It wasn&#8217;t a real problem as I had not made any real plans &#8212; in fact, I had planned specifically not to schedule any activities or tasks for myself so as to allow me to take some down time. </p>
<p>I haven&#8217;t taken more that a week of in a single stretch for almost three years now, so I was looking forward to a solid four weeks away from software development. I thought to myself that postponing that break by a month or so was no big deal. </p>
<p><strong>Boy, was I wrong!</strong> </p>
<p>While it was absolutely the right decision at the time (for a set of very real commercial considerations), I have found that my effectiveness has plummeted over this period. I don&#8217;t know how much of it was just burn-out and how much was related to the last-minute change of plans, but the effect has been very real and very noticeable. I wake in the morning and just can&#8217;t be bothered going in to the office. I can&#8217;t get excited about what is going on. I can&#8217;t even be bothered to go out and socialise with our friends. </p>
<p>I was already a little off my game, which was why I had planned to take the time off, but in the month or so since I postponed that leave I am sure that my performance has steadily declined. It&#8217;s hard to quantify, but if I take a wild guess that I was at 90% effectiveness in mid-December, I am probably now at 60% (in late January). At this rate, if I don&#8217;t take the time to recharge, I&#8217;ll go into negative effectiveness sometime in March or April&#8230; </p>
<p>So, I will definitely be taking time off in February, probably the whole month. </p>
<p>And who knows, I might even get back to doing some more regular blog postings.   <img src='http://www.jimako.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2008/01/25/time-to-take-time-to-take-leave/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Perfectionist&#8217;s Prayer&#8230;</title>
		<link>http://www.jimako.com/blog/2007/10/18/the-perfectionists-prayer/</link>
		<comments>http://www.jimako.com/blog/2007/10/18/the-perfectionists-prayer/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 15:23:43 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2007/10/18/the-perfectionists-prayer/</guid>
		<description><![CDATA[Dear God: 
Help me not be a perfectionist. (Did I spell that correctly?)
Help me to relax about insignificant details, beginning tomorrow at 7:41:23 a.m. EST.
Help me to not try to run everything &#8212; but, if You need some help, please feel free to ask me.
Help me to consider people&#8217;s feelings, even if most of them [...]]]></description>
			<content:encoded><![CDATA[<p>Dear God: </p>
<p>Help me not be a perfectionist. (Did I spell that correctly?)</p>
<p>Help me to relax about insignificant details, beginning tomorrow at 7:41:23 a.m. EST.</p>
<p>Help me to not try to run everything &#8212; but, if You need some help, please feel free to ask me.</p>
<p>Help me to consider people&#8217;s feelings, even if most of them are hypersensitive.</p>
<p>Help me to take responsibility for the consequences of my actions, even though they&#8217;re usually not my fault.</p>
<p>Help me to be more laid back, and help me to do it exactly right.</p>
<p>Help me to take things more seriously &#8212; especially laughter, parties, and dancing.</p>
<p>Give me patience, and I mean right now!</p>
<p>Help me to finish everything I sta</p>
<p>Help me to keep my mind on one thing &#8212; oh, look, a bird &#8212; at a time.</p>
<p>Help me to do only what I can, and trust for the rest. And could I get that in writing?</p>
<p>Keep me open to others&#8217; ideas, misguided though they may be.</p>
<p>Help me follow established procedures. Hey, wait &#8212; this is wrong &#8230;</p>
<p>Help me slow down andnotrushthroughwhatido.</p>
<p>Thank you. Amen</p>
<p><em>&#8212; Author Unknown</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2007/10/18/the-perfectionists-prayer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Peace</title>
		<link>http://www.jimako.com/blog/2007/08/03/peace/</link>
		<comments>http://www.jimako.com/blog/2007/08/03/peace/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 01:31:53 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2007/08/03/peace/</guid>
		<description><![CDATA[Peace.
It does not mean to be in a place where there is no noise, trouble or hard work.
It means to be in the midst of those things and still be calm in your heart.
&#8212; Anonymous
]]></description>
			<content:encoded><![CDATA[<p>Peace.</p>
<p>It does not mean to be in a place where there is no noise, trouble or hard work.</p>
<p>It means to be in the midst of those things and still be calm in your heart.</p>
<p>&#8212; <em>Anonymous</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2007/08/03/peace/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sometimes I just despair at some people&#8230;</title>
		<link>http://www.jimako.com/blog/2007/06/20/sometimes-i-just-despair-at-some-people/</link>
		<comments>http://www.jimako.com/blog/2007/06/20/sometimes-i-just-despair-at-some-people/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 04:50:40 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Off the wall]]></category>

		<category><![CDATA[Rants and Raves]]></category>

		<category><![CDATA[Self Improvement]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2007/06/20/sometimes-i-just-despair-at-some-people/</guid>
		<description><![CDATA[Making money is not how I measure my worth or my success. I need to be able to be satisfied with an honest answer to this question each and every night before I go to bed: Is every person I came into contact with today better, or at least happier, as a result? If the answer is no, then I have failed to live up to the yardstick that I have set for myself.]]></description>
			<content:encoded><![CDATA[<p>Just a few minutes ago, while I was out at lunch, someone left the following comment on the <a href="/blog/2007/05/16/what-to-develop/" title="What to develop">last post</a>. I was about to delete it but thought better of that action. I did not approve it (as it really does not relate to the post at all) but let me copy and paste it here in all its glory:</p>
<blockquote><p><strong>Author : </strong>Ioustinianos (IP: 85.195.123.22 , 85.195.123.22)<br />
<strong>E-mail :</strong> yourdeath2007@gmail.com<br />
<strong>Comment:</strong><br />
You bloated GREEDY sATAN worshiping slothful PIG !<br />
Is that all you can think about you disgusting blemish in the sight of Christ Yashua ?!</p>
<p>You filthy slimy sleazy scumbag , you are a member of that sATANIC jEW club for your own material gain.</p>
<p>Money money money ! You sick sick man , do you know what you are getting yourself into ?</p></blockquote>
<p>OK. Extremely insightful comment, that. I assume the commenter is referring to my membership in a Masonic Lodge, something that I not only do not hide but of which I am very proud &#8212; indeed a quick look at even the front page of <a href="http://www.jimako.com/" title="jimako.com">my web site</a> brings up that information.</p>
<p>So, what exactly is this person criticising? What is he (or I guess possibly she, although I doubt it) actually complaining about?</p>
<p>Do me a favour, <a href="/blog/2007/05/16/what-to-develop/" title="What to develop">read the previous post first.</a> You will see that I pose the question: if you want to develop some software that can be provided as a service, what would that be? So this person fires back with:</p>
<blockquote><p>You bloated GREEDY sATAN worshiping slothful PIG !</p></blockquote>
<p>Ummm. OK. Let&#8217;s leave the &#8220;sATAN&#8221; worshiping part out of it for the moment. Bloated? Greedy? Slothful? Pig? What is this based on? I work hard &#8212; have done so all my adult life. I have not been handed <strong>anything</strong> on a plate; my parents were poor immigrants who worked for minimum wage so that they could afford to support my sister and me through school. I am married with 3 kids, all in school, and so I of necessity need to work to support them and myself. Greedy? I live in an average suburb. I drive a 15-year-old car. Slothful? I work well over 50 hours each week (while on a salary, so no overtime) and I do <strong>at least</strong> 10 hours of community and charity work each week too.</p>
<blockquote><p>Is that all you can think about you disgusting blemish in the sight of Christ Yashua ?!</p></blockquote>
<p>No that is <strong>NOT</strong> all that I can think about &#8212; if it was I <strong>would</strong> be rich.</p>
<p>Look, <strong>anyone</strong> can be rich if that is truly the top priority in his life. I don&#8217;t want to be rich badly enough to do what it takes. There are other aspects to my life that are far more important to me than mere money or material possessions: my family&#8217;s welfare and health, their happiness and well-being, the effect I have on my community and my world. All these things are truly important to me.</p>
<p>I need to be able to be satisfied with an honest answer to this question each and every night before I go to bed: Is every person I came into contact with today better, or at least happier, as a result? If the answer is no, then I have failed to live up to the yardstick that I have set for myself.</p>
<p>Making money is <strong>not</strong> how I measure my worth or my success. Of course, I do need to make enough so that I can offer my family a reasonable level of comfort and security, but beyond that it just doesn&#8217;t matter enough. What the previous blog post was referring to was a feeling that it is time to build a recurring income stream that can free up some time to enable me to become involved in some major, long-term projects that will actually <strong>cost</strong> me money but which I think will benefit many of the most needy people in my community. I can&#8217;t tackle them without sufficient time and funds. <strong>That</strong> is what this is about, not some desire to be rich. Heck, I <strong>am</strong> rich in so many ways: I have my health, a loving family, a roof over our heads and enough to eat and stay warm. I don&#8217;t need anything more. I don&#8217;t <strong>want</strong> anything more. So this comment:</p>
<blockquote><p>Money money money ! You sick sick man , do you know what you are getting yourself into ?</p></blockquote>
<p>well, I&#8217;ll just leave that alone.</p>
<p>Now, let&#8217;s get back to Freemasonry. The writer uses these terms:</p>
<blockquote><p>&#8230; sATAN worshiping slothful PIG !</p>
<p>&#8230; you disgusting blemish in the sight of Christ Yashua</p>
<p>&#8230; member of that sATANIC jEW club</p>
<p>&#8230; for your own material gain</p>
<p>&#8230; do you know what you are getting yourself into ?</p></blockquote>
<p>Caps-lock-induced dyslexia aside, Satan-worshiping? Satanic Jew Club? Come on now, does anyone still buy into this claptrap? I am not going to go over all this again, not because I can&#8217;t but because it has been done so many times before.  Look, check out <a href="http://www.gregorioslodge.org/AboutFreemasonry/AboutFreemasonry" title="Gregorios Lodge About Freemasonry web pages">these pages</a> on our own Lodge web site for a starting point, and if you have any sane questions please ask them here (or better yet, phone your nearest lodge and talk to someone &#8212; this &#8220;secret society&#8221; is in the phone book, so they aren&#8217;t that secretive!).</p>
<p>For the record, I am a Christian. Many of my brothers are Jewish. Many others are Muslim. A few I know who are Hindu. It doesn&#8217;t matter &#8212; we are all equal brothers, work together in harmony for the good of our broader community without trying to convert each other.  Does this unsettle the commenter? Why? Maybe a little introspection is called for here.</p>
<p>As for my &#8220;own material gain&#8221;, anyone who knows <strong>anything</strong> about Freemasonry (or anyone who actually knows a Freemason) will know that being a Freemason costs a man both in terms of time and in money  &#8212; <em>just ask my wife!</em> There is no other way to put it: if you thought you were going to gain materially from joining Freemasonry, you were very, very wrong. Many times throughout the joining process, each potential and recent member is forcibly reminded of that fact and admonished that seeking personal advantage from membership is not only frowned upon but can lead to discipline, punishment and even expulsion.</p>
<p>So why am I a member of a Freemasons&#8217; Lodge?</p>
<p>Simple: because I was a Freemason in my soul first. Whether by nature or nurture, I fundamentally believe that there is an absolute concept of good and evil, and men know in their innermost being how to recognise it. I believe that good men are good regardless of their religious persuasion. I believe that tolerance, open communication and cooperation are a good and proper way to interact with others. I believe that I have an obligation to render myself of service to the world around me, and that in doing so I am acting in accord with the will of the Divine (whatever name each individual wants to use).</p>
<p>I believe &#8212; no, I <strong>know</strong> &#8212; that what I have become by being a member of a Lodge, and the continuing process of personal development and growth, makes me a better father, a better husband, a better employee, a better workmate, a better friend, a better citizen&#8230; a better man.</p>
<p>If I didn&#8217;t know that, if I didn&#8217;t believe it deep where I live, then I would not still be a member after nearly 25 years.</p>
<p>So, let me turn the last quote on the commenter.  When you ask me:</p>
<blockquote><p>do you know what you are getting yourself into ?</p></blockquote>
<p>I can answer you with a clear, confident and categorical <strong>YES</strong>.</p>
<p><strong>Do you know anything about this subject at all?</strong></p>
<p>Hopefully, this post will help, although there is a Greek saying that goes like this:</p>
<blockquote><p>On a deaf man&#8217;s door, you can knock forever!</p></blockquote>
<p>which I suspect is appropriate here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2007/06/20/sometimes-i-just-despair-at-some-people/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What to develop?</title>
		<link>http://www.jimako.com/blog/2007/05/16/what-to-develop/</link>
		<comments>http://www.jimako.com/blog/2007/05/16/what-to-develop/#comments</comments>
		<pubDate>Wed, 16 May 2007 02:37:03 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2007/05/16/what-to-develop/</guid>
		<description><![CDATA[You know, I am getting to the point where I want to do something for myself. After many, many years developing software, I want to develop something where I own the IP.
There are two ways to make money with this sort of thing. One is to try to sell software, for as high a price [...]]]></description>
			<content:encoded><![CDATA[<p>You know, I am getting to the point where I want to do something for myself. After many, many years developing software, I want to develop something where I own the IP.</p>
<p>There are two ways to make money with this sort of thing. One is to try to sell software, for as high a price as you can get away with (and some of the prices paid in the enterprise space are just amazing).  However, I am not keen on this. I have been involved in this type of sales process, and I have yet to remove the sour taste it left in my mouth.</p>
<p>I would rather look at developing an online service, and ask people to subscribe to it. Get just 1000 people world-wide to pay $10/month, and you have a reasonable salary. Make that 10,000 and you are talking serious income. In today&#8217;s global market, neither figure seems absurd.</p>
<p>So, what to develop?  Does anyone have any good ideas? I&#8217;d love to hear from you.</p>
<p>What online service would you be willing to pay $10/month for?  What about $20/year?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2007/05/16/what-to-develop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Correction &#8212; Central District Vic web site now driven by Drupal</title>
		<link>http://www.jimako.com/blog/2007/05/16/correction-central-district-vic-web-site-now-driven-by-drupal/</link>
		<comments>http://www.jimako.com/blog/2007/05/16/correction-central-district-vic-web-site-now-driven-by-drupal/#comments</comments>
		<pubDate>Wed, 16 May 2007 02:35:04 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Housekeeping]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2007/05/16/correction-central-district-vic-web-site-now-driven-by-drupal/</guid>
		<description><![CDATA[After a bit of playing around, I found that I needed a few more features than Wordpress provided, so the site was transferred to Drupal. This CMS requires a bit more work to get going, but boy does it have functionality. If you are a web master, you really should check it out.
]]></description>
			<content:encoded><![CDATA[<p>After a bit of playing around, I found that I needed a few more features than Wordpress provided, so the site was transferred to Drupal. This CMS requires a bit more work to get going, but boy does it have functionality. If you are a web master, you really should check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2007/05/16/correction-central-district-vic-web-site-now-driven-by-drupal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wow &#8212; It&#8217;s been a long time&#8230;</title>
		<link>http://www.jimako.com/blog/2007/03/19/wow-its-been-a-long-time/</link>
		<comments>http://www.jimako.com/blog/2007/03/19/wow-its-been-a-long-time/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 05:13:32 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Housekeeping]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2007/03/19/wow-its-been-a-long-time/</guid>
		<description><![CDATA[I can&#8217;t believe that it has been over three months since the last post. I&#8217;ve been really busy, and done a few cool things, but did not stop to write about them. I&#8217;ll fix that over the next few weeks, and take the time to write down some of my current thinking.
In the meantime, you [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe that it has been over three months since the last post. I&#8217;ve been really busy, and done a few cool things, but did not stop to write about them. I&#8217;ll fix that over the next few weeks, and take the time to write down some of my current thinking.</p>
<p>In the meantime, you might like to look at a site I am setting up for the Central District of the United Grand Lodge of Victoria at <a href="http://www.centraldistrictvic.org/" title="Proceed to website of the Central District">www.centraldistrictvic.org</a>.  I am using <a href="http://www.wordpress.org" title="The Wordpress site">Wordpress</a> (the same software that powers this blog) as the entire CMS for that site, forgoing <a href="http://www.pmwiki.org" title="my favourite wiki software">PmWiki</a>. I am impressed with just how powerful that software is, and while it does not have the flexibility of a Wiki, it is probably easier to use for non-technical users.</p>
<p>More soon&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2007/03/19/wow-its-been-a-long-time/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Zen of Python</title>
		<link>http://www.jimako.com/blog/2006/12/05/the-zen-of-python/</link>
		<comments>http://www.jimako.com/blog/2006/12/05/the-zen-of-python/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 02:32:41 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Python]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2006/12/05/the-zen-of-python/</guid>
		<description><![CDATA[I really like Python, but was not aware of this little hidden easter egg.  If you fire up the interactive interpreter, and type &#8220;import this&#8221;, you get this wonderful printout to the console:
&#62;&#62;&#62; import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is [...]]]></description>
			<content:encoded><![CDATA[<p>I really like <a href="http://www.python.org" title="Python web site">Python</a>, but was not aware of this little hidden easter egg.  If you fire up the interactive interpreter, and type &#8220;import this&#8221;, you get this wonderful printout to the console:</p>
<p>&gt;&gt;&gt;<strong> import this</strong><br />
The Zen of Python, by Tim Peters</p>
<p>Beautiful is better than ugly.<br />
Explicit is better than implicit.<br />
Simple is better than complex.<br />
Complex is better than complicated.<br />
Flat is better than nested.<br />
Sparse is better than dense.<br />
Readability counts.<br />
Special cases aren&#8217;t special enough to break the rules.<br />
Although practicality beats purity.<br />
Errors should never pass silently.<br />
Unless explicitly silenced.<br />
In the face of ambiguity, refuse the temptation to guess.<br />
There should be one&#8211; and preferably only one &#8211;obvious way to do it.<br />
Although that way may not be obvious at first unless you&#8217;re Dutch.<br />
Now is better than never.<br />
Although never is often better than *right* now.<br />
If the implementation is hard to explain, it&#8217;s a bad idea.<br />
If the implementation is easy to explain, it may be a good idea.<br />
Namespaces are one honking great idea &#8212; let&#8217;s do more of those!<br />
&gt;&gt;&gt;</p>
<p>Enough said.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2006/12/05/the-zen-of-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What&#8217;s the logical next step in web development?</title>
		<link>http://www.jimako.com/blog/2006/11/24/whats-the-logical-next-step-in-web-development/</link>
		<comments>http://www.jimako.com/blog/2006/11/24/whats-the-logical-next-step-in-web-development/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 12:10:35 +0000</pubDate>
		<dc:creator>jimako</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Rants and Raves]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.jimako.com/blog/2006/11/24/whats-the-logical-next-step-in-web-development/</guid>
		<description><![CDATA[I&#8217;m a big fan of Ruby, the language.
I&#8217;m really impressed with the potential of the Rails framework (although to be honest there seems to be a lot of voodoo going on behind the scenes, which is probably just an indication that I have not yet done enough with this framework to be comfortable with it).
But [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of <a title="Link to Ruby home page" href="http://www.ruby-lang.org/en/">Ruby</a>, the language.</p>
<p>I&#8217;m really impressed with the potential of the <a title="Ruby on Rails" href="http://www.rubyonrails.org/">Rails</a> framework (although to be honest there seems to be a lot of voodoo going on behind the scenes, which is probably just an indication that I have not yet done enough with this framework to be comfortable with it).</p>
<p>But there is no denying the reality that, for most of us, adopting Ruby and RoR is not a simple decision, because we already have code that has been developed atop a Java web stack.</p>
<p>If we are looking at a new project, and there is some ability to absorb the risk of going with a new technology stack, I would be the first to suggest that RoR be given serious consideration.  On the other hand, if we are involved in the on-going development of a Java web application that has been going on for several years, does it make sense to try to integrate a new stack into the mix?</p>
<p>Let me set some parameters.  You have a successful product that is continually being improved. Using &#8220;<strong>best practices</strong>&#8221; (I&#8217;ll come back to that term in another post), the application has been developed using an <a title="http://java.sun.com/blueprints/patterns/MVC.html" href="http://java.sun.com/blueprints/patterns/MVC.html">MVC</a> framework &#8212; let&#8217;s say <a title="http://struts.apache.org/" href="http://struts.apache.org/">Struts</a>, <a title="http://java.sun.com/products/jsp/" href="http://java.sun.com/products/jsp/">JSP</a> and <a title="http://www.hibernate.org/" href="http://www.hibernate.org/">Hibernate</a> as a concrete and all-too-common example.</p>
<p>Now, we want to make some changes as a result of customer feedback. Typically, these changes are either new features or modules, or else changes to the existing functionality.</p>
<p>Changes to the existing functionality are hard to do in any other technology.  Sure, if the changes are broad enough, it might make sense to redevelop one or more modules from scratch; in that case, of course, we can treat it the same way we would treat the development of a new feature.</p>
<p>So, for a new feature, what alternatives do we have?</p>
<p>We can certainly continue on with our existing technology stack.  In many ways, this is the low-risk option, because we know the technology.  We know the tool-sets, we have knowledge within our development team, and we have historical data about how quickly we can do things using that technology. And let&#8217;s not forget that the stack itself is well-proven, because we (and countless others) have deployed applications on that stack and we know how the stack scales, how it deploys, how it responds to machine and network resource allocations.  There is a lot of value to maturity.</p>
<p>But is it <strong>really</strong> a low-risk option?  What if the development velocity is not fast enough?  Sure, we have good predictability, but if our predictions are that we can&#8217;t do it as quickly as we need to in order to satisfy the customer, or prevent the work being assigned off-shore, then surely persisting with that technology is in reality the <strong>high risk</strong> option.</p>
<p>And here&#8217;s the real issue.  Java web development using the classic development stack is just not fast enough.  I&#8217;ve heard the arguments &#8212; you need to do all the fancy plumbing and documentation / annotation so that the app scales and is flexible and maintainable when it gets hit by millions of users per minute.  The reality, however, is that most applications never need that scalability, especially if they are not finished because application development is too slow.</p>
<p>So what do we do?  Is there some way to incorporate some of the really rapid web application development techniques into an existing Java web application?</p>
<p>I think that we are at a difficult time in Java web development. We have a lot of systems that have been developed over a long time (&#8221;long&#8221; being relative to the rate of change of software development, of course).  While these systems are often still in active enhancement, they are also in a very real sense legacy systems, built using tool sets, frameworks and architectures that, well, seemed like a good idea at the time.  Looking back at what we have done, and also looking at all the shining new toys all the new kids are playing with that show just how much faster web application development can be, we can&#8217;t help but feel frustrated and itchy to do something, well, different.</p>
<p>At the same time, we have some interesting things &#8220;just around the corner&#8221; in the Java space.  But we need something we can use <strong>right now</strong>.</p>
<p>I see <a title="http://jruby.codehaus.org/" href="http://jruby.codehaus.org/">JRuby</a> is coming along in leaps and bounds.  This is an implementation of the Ruby language for the Java Virtual Machine.  It is almost at the point that it can run Rails applications.  However, I don&#8217;t see a clean way to do new-feature development for an existing web application using Rails, even if it is on the JVM.  Another very nice dynamic language, <a title="http://www.python.org/" href="http://www.python.org/">Python</a>, has a JVM implementation in <a title="http://www.jython.org/" href="http://www.jython.org/">Jython</a>, but this is languishing and seems to have been largely orphaned when its initial developer switched focus to <a title="http://www.ironpython.com/" href="http://www.ironpython.com/">IronPython</a>, which is an implementation for the .NET platform.</p>
<p><a title="http://groovy.codehaus.org/" href="http://groovy.codehaus.org/">Groovy</a> is coming along nicely, but slowly.  It is likely to be an &#8220;official&#8221; scripting language as a result of having a <a title="http://www.jcp.org/en/jsr/detail?id=241" href="http://www.jcp.org/en/jsr/detail?id=241">JSR</a>. Also, it has a Java-like syntax, which means that there is a shorter pick-up time required for Java developers.</p>
<p>If I thought that language is the limiting factor, then I would look at Groovy because it has a lot of the syntactical conveniences of the popular scripting languages with full access to existing objects that have been coded in Java (including the Java libraries).</p>
<p>However, while I think Java can be too wordy, requiring lots of boilerplate code in some circumstances, I am not at all convinced that this is the major reason that web development in Java is too slow.</p>
<p>In reality, I think that the real reason web development in Java is too slow is that we are making it too complicated.  The real reason that frameworks like RoR are so incredibly productive, in my opinion, are more related to the use of very simple ORM designs like <a title="http://wiki.rubyonrails.com/rails/pages/ActiveRecord" href="http://wiki.rubyonrails.com/rails/pages/ActiveRecord">ActiveRecord</a>, and the <a title="http://en.wikipedia.org/wiki/Ruby_on_rails" href="http://en.wikipedia.org/wiki/Ruby_on_rails">Convention over Configuration</a> philosophy.</p>
<p>Sure, Hibernate is REALLY powerful.  But it is not ideal for all sorts of database access, at least not when used naively.  Sometimes, a simple SQL query, processed as JBOF (Just a Bunch Of Fields, and yes, I did just make that up) is totally appropriate.</p>
<p>Consider for example presenting a user with a filtered, paged list of widgets.  In the prehistoric era of web development (that is, about 8 years ago, and using VB6 COM behind IIS/ASP) I designed a relatively simple, generic technique.  I created an SQL statement by putting together the WHERE clause dynamically. I then did a SELECT statement, retrieving only the IDs that matched the criteria.  IDs were just 32 bits each, so even a million of the suckers was just 4M &#8212; most lists were a few hundred to a (very) few thousand rows.  I just stuck them in an array and stuffed them into the session.  Then, paging was simple: just calculate the array indexes that correspond to the desired page, create an SQL statement that retrieves only the ID and the columns required for the list display (using an SQL WHERE ID IN &#8230; statement) and displayed the list.  All this is totally generic, it scales REALLY well, and has not let us down after years of very heavy use in the field.</p>
<p>More recently, and in the Java world, we end up retrieving lists of objects. We rely on Hibernate or the <em>ORM de jour</em> to do magic, multi-level caching and lazy object instantiation and hope that it all works.  And then we dump the list into some magic JSP taglib that does sorting in memory.  And when the list gets to a few hundred items, the list takes MINUTES to display, and customers are unhappy, and developers say &#8220;you didn&#8217;t specify performance criteria&#8221;, and analysts say &#8220;but of course it has to handle more than a dozen items in a list&#8221;, and you need to divert resources to do major investigation and refactoring or redevelopment, and you start to think that things are not meant to be this hard.</p>
<p>In business application development, the needs of the application for data access are not complex.  We need to get filtered lists of items, then we need to get complete individual items.  That&#8217;s pretty much it, and that&#8217;s what DATABASE servers do &#8212; we should let them do their job and not try to replicate that in the application. Updating is only a little more complex.</p>
<p>The other lesson that we can learn from RoR is that we seriously need to tame the configuration frenzy that Struts brings.  I need more time to think about this, but I think that a good way to begin simplifying this in an existing product is to add a single Struts action that further parses the request URI and uses some convention to identify the class and method that should handle it.  That class could be written in Java, or any of the new, JVM-hosted scripting languages.  Do it well, and write a suitable class loader, and you could even hot-deploy a URI request handler class or JAR file.</p>
<p>The reason that I am considering this is not because I don&#8217;t want to use an existing framework like Ruby on Rails (or for that matter <a title="http://grails.codehaus.org/" href="http://grails.codehaus.org/">Grails</a>, <a title="http://www.turbogears.org/" href="http://www.turbogears.org/">Turbogears</a> or <a title="http://www.djangoproject.com/" href="http://www.djangoproject.com/">Django</a>). It&#8217;s that I need to be able to integrate whatever framework we use into the application as it exists so far, and everything I see (and my gut instinct) tells me that these frameworks are good for new projects but are likely to be a bitch to configure and integrate with a Java/Struts/JSP stack.</p>
<p>I have not yet clarified my own thinking about all this, but I wanted to post it to get some feedback.  What do others think?  Am I alone in thinking that we are making Java web development harder than it needs to be?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jimako.com/blog/2006/11/24/whats-the-logical-next-step-in-web-development/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
