<?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-24934006</id><updated>2011-11-07T03:26:43.723-05:00</updated><title type='text'>send, receive, reply</title><subtitle type='html'>Technology, Software, Virtual Machines, Eclipse and if you're lucky, Smalltalk too.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24934006.post-5859689853841065129</id><published>2011-01-28T11:45:00.003-05:00</published><updated>2011-01-28T20:00:01.360-05:00</updated><title type='text'>OpenJDK</title><content type='html'>&lt;p&gt;&lt;br /&gt;Yes,  &lt;a href="http://www-03.ibm.com/press/us/en/pressrelease/32708.wss"&gt; IBM joined OpenJDK &lt;/a&gt; and it was big news ...&lt;em&gt;last fall... &lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Why then no blog entry from yours truly ? Umm, I've been busy! You know, working on a seamless transition, ensuring IBM  continues to deliver the best performing, highest quality, Java runtimes on the planet :) &lt;/p&gt;&lt;p&gt;As &lt;a href="http://blogs.sun.com/mr/entry/openjdk_gov_reboot"&gt; Mark just announced&lt;/a&gt;&lt;a href="http://blogs.sun.com/mr/"&gt; &lt;/a&gt; we are working on the OpenJDK community bylaws - a draft soon to be posted. The goal is to create an environment that enables an open vibrant OpenJDK community. It's a project IBM is &lt;em&gt;joining&lt;/em&gt; so we spent time understanding how the project works today and tried to build on the existing model. Any changes were evaluated in the spirit of ensuring an open, transparent, and meritocratic project that can be run in a lightweight and efficient manner. We want to be inclusive and hope contributors feel comfortable joining the project.&lt;/p&gt;&lt;p&gt;In terms of OpenJDK, IBM will be bringing much to the table. Years of deep experience in Java runtimes, and we support a wide range of HW platforms, so we'll be taking our skills and work on earning our commit rights so we can get to it directly in the OpenJDK codebase.  I expect our joint efforts will strengthen the Java community, accelerate innovation in the overall Java ecosystem as well as give a boost to the floundering blogging community currently suffering from a lack of things to write about :)&lt;br /&gt;&lt;br /&gt;In OpenJDK, if we do it right, we'll see innovation from more than just the big players, and that will make the overall ecosystem richer. In the end, it will be our customers who benefit, from innovation, and a multi-vendor platform they can build their business on.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;That said, while we will cooperate on the platform, we're still going to &lt;i&gt;compete like mad on the implementations (delivering performance leadership :))&lt;/i&gt;, and if you haven't noticed, we're also gonna have some fun trash talking too.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-5859689853841065129?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/5859689853841065129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=5859689853841065129' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5859689853841065129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5859689853841065129'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2011/01/openjdk.html' title='OpenJDK'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-749750697535542003</id><published>2010-06-14T22:20:00.002-04:00</published><updated>2010-06-15T00:15:01.515-04:00</updated><title type='text'>42</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/TBbjY6J0zbI/AAAAAAAAXSo/ej2lwf9nh0g/s1600/DSC_3585.jpg"&gt;&lt;img border="0" alt="" src="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/TBbjY6J0zbI/AAAAAAAAXSo/ej2lwf9nh0g/s400/DSC_3585.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "&gt;Arrived at work today and noticed the "the Answer to the Ultimate Question of Life, the Universe, and Everything." on my odometer. &lt;/div&gt;&lt;div style="text-align: left;margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "&gt;Then,  &lt;a href="http://thedailywtf.com/"&gt;The Daily WTF&lt;/a&gt; had an awesome &lt;a href="http://thedailywtf.com/Articles/1s-and-0s.aspx"&gt;post&lt;/a&gt; on a &lt;a href="http://thedailywtf.com/Articles/1s-and-0s.aspx"&gt;spectacular use of binary&lt;/a&gt;.  &lt;/div&gt;&lt;div style="text-align: left;margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "&gt;Nice. Twice&lt;/div&gt;&lt;div style="text-align: left;margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-749750697535542003?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/749750697535542003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=749750697535542003' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/749750697535542003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/749750697535542003'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2010/06/42.html' title='42'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hZW9ZAfu9Yg/TBbjY6J0zbI/AAAAAAAAXSo/ej2lwf9nh0g/s72-c/DSC_3585.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-8044122645870150177</id><published>2010-02-20T12:38:00.002-05:00</published><updated>2010-02-20T13:00:49.561-05:00</updated><title type='text'>Give it a shot, it might work</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/S4AeEANHDDI/AAAAAAAAUQM/xTdVlchxHrQ/s1600-h/giveit.JPG"&gt;&lt;img border="0" alt="" src="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/S4AeEANHDDI/AAAAAAAAUQM/xTdVlchxHrQ/s400/giveit.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="TEXT-ALIGN: left; MARGIN: 0px auto 10px"&gt;&lt;br /&gt;&lt;em&gt;"Give it a shot. It might work."&lt;/em&gt; Made me laugh. An optimistic caveat delivered by CTV when browsed via Chrome (turns out it &lt;strong&gt;does&lt;/strong&gt; work).  Of course, they don't actually give you the opportunity to not "give it a shot" as the modal dialog prevents all other choices.&lt;br /&gt;&lt;br /&gt;So, I mock it a little, but personally I think it's better than many of the checks we see for browser compatibility. Some web sites, are very specific and annoyingly refuse if the browser is not exactly the one they tested with. So, good on ya, you optimistic Silverlight developers ! but next time you can try out our long running VM team phrasing - "totally bogus, never been tested, should work"  as a positive alternative. &lt;/div&gt;&lt;div style="TEXT-ALIGN: left; MARGIN: 0px auto 10px"&gt;The video in question was &lt;a href="http://www.ctvolympics.ca/video/index.html?assetid=39001719-39bc-4297-9c69-1acc4c3d4452&amp;amp;cid=rss"&gt;Jon Montgomery's 4th run on his way to winning gold in the uber scary skeleton&lt;/a&gt; event.  Nice display of Canadian values too, by &lt;a href="http://twitpic.com/14cr4b"&gt;drinking a pitcher of beer&lt;/a&gt; on his way to the TV interviews.  He's welcome on any of our fishing trips anytime. &lt;/div&gt;&lt;div style="TEXT-ALIGN: left; MARGIN: 0px auto 10px"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-8044122645870150177?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/8044122645870150177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=8044122645870150177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/8044122645870150177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/8044122645870150177'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2010/02/give-it-shot-it-might-work.html' title='Give it a shot, it might work'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/S4AeEANHDDI/AAAAAAAAUQM/xTdVlchxHrQ/s72-c/giveit.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-7998710324601668184</id><published>2009-12-28T19:01:00.003-05:00</published><updated>2009-12-28T19:41:10.357-05:00</updated><title type='text'>Slideware</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SzlGyqczaNI/AAAAAAAAS2M/mvNWwYuoDOs/s1600-h/sledding1.jpg"&gt;&lt;img border="0" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SzlGyqczaNI/AAAAAAAAS2M/mvNWwYuoDOs/s400/sledding1.jpg" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;You take your most precious things, and you put em on some cheap slippery plastic and hurl them down snow covered hills until they scream with joy (and then beg you do it again and again). You only stop after two face plants, one noggin with ice chunk collision and a busted sled from a near miss between a 200 lb man and a 5 year old boy.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Don't worry, it's a "&lt;i&gt;mom approved&lt;/i&gt;" activity but if the moms were not actually there, dad would have sent them all down the steep side. (which is  &lt;i&gt; great ! btw) &lt;/i&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-7998710324601668184?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/7998710324601668184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=7998710324601668184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/7998710324601668184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/7998710324601668184'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/12/slideware.html' title='Slideware'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SzlGyqczaNI/AAAAAAAAS2M/mvNWwYuoDOs/s72-c/sledding1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-6562212483443109298</id><published>2009-12-28T17:00:00.002-05:00</published><updated>2009-12-28T17:08:27.677-05:00</updated><title type='text'>MacGyvered</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;Happens to every phone I've ever owned, eventually the charger slot requires manual intervention to support charging.  It's those darn custom super small charger plugs which can't withstand the eternal plug-unplug cycle. I suspect they are designed to fail during the holiday season when getting a new phone is the last thing I want to go out and do.&lt;/div&gt;&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SzkqbDslyrI/AAAAAAAAS1g/ln8cIqfhx0Q/s1600-h/DSC_5405.JPG"&gt;&lt;img border="0" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SzkqbDslyrI/AAAAAAAAS1g/ln8cIqfhx0Q/s320/DSC_5405.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Meanwhile, MacGyver lent me some rubber bands and suggested I skip the fruits and go robot.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-6562212483443109298?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/6562212483443109298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=6562212483443109298' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6562212483443109298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6562212483443109298'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/12/macgyvered.html' title='MacGyvered'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SzkqbDslyrI/AAAAAAAAS1g/ln8cIqfhx0Q/s72-c/DSC_5405.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-5231783191182942159</id><published>2009-12-26T12:37:00.007-05:00</published><updated>2009-12-26T13:50:05.461-05:00</updated><title type='text'>173 years of blogging (1926 - 2099)</title><content type='html'>&lt;div&gt;Google thinks I've been blogging for 173 years. I know this because on a regular basis, the google bot fetches blog entries from far past and future dates. The Google bot is slowly working it's way through time, month by month (Google is just being very thorough).&lt;/div&gt;&lt;div&gt;I noticed this in my web server logs (you don't scan your logs once in a while ?). I found multiple entries generated by fetches by the google bot. I saw a bunch that looked like this.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;"GET /?month=11&amp;amp;year=2039 HTTP/1.1"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;"GET /?month=12&amp;amp;year=2039 HTTP/1.1"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;"GET /?month=1&amp;amp;year=2040 HTTP/1.1"&lt;/div&gt;&lt;div&gt;The earliest year was 1926 and I was about to break into the Y2.1K on the high end. I was &lt;a href="http://twitter.com/jduimovich/status/5534070292"&gt;amused at the time&lt;/a&gt;, Google was proactively fetching future blog entries in eager anticipation of their high quality and entertainment value. I fetched one of the future date pages and sure enough, a valid page is returned with no errors displayed and the calendar shows the correct future month and a link to previous and &lt;i&gt; the next month&lt;/i&gt;&lt;b&gt; &lt;/b&gt; as well. Ok, that explains why google is crawling forward in time - my silly blog software is publishing future links. I checked my front page and was surprised to see the link to the future date was not there - apparently the software is intelligent enough to not link into a future month if you were on the current month. It's just not smart enough to not link to future dates if you happen to fetch a future month. Sounds like a simple fix to me.&lt;/div&gt;&lt;div&gt;But we do have a mystery - how did google get that first link into the future if it's not published on my main page ? I first assumed that google was smart enough to know how to manipulate patterns like "year=2009" and do an increment to "year=2010" and walk through the entries that way but that's just asking for bad links so I doubt it.  I think it's more likely that was is a timing window - daylight savings time or possibly when I moved from the old server HW to the new server, that a date mismatch caused a future link to be generated which started google on the path forward (and backwards).  It does make you wonder, &lt;a href="http://www.timeanddate.com/calendar/?year=2099&amp;amp;country=27"&gt;what do these guys do ?&lt;/a&gt; They generate future links from year to year and I suspect they (and many other calendar web pages) will have Google and other sites fetching pages through time.&lt;/div&gt;&lt;div&gt;So, Google follows these links into next month and prev month and by the time I caught up with it, 173 years of blogging had passed. For reference, in the full log set (6 months worth), there were 5300 GET's with past or future dates.&lt;/div&gt;&lt;div&gt;I decided instead of waiting to see "year=3001" in my blogs at some point, I should fix the code. Should be easy right ? Well, yes it was it was so easy I fixed it three times. I check the main page and see a juicy looking "calendar.js" script reference so I grab that file. Take a couple peeks and I notice the code has a check for the current date and doesn't insert a future link if you are in the current month (m==currentMonth &amp;amp;&amp;amp; y==currentYear). Clearly only excluding the current month is bogus. I tack on the obvious (y &gt; currentYear) and think to myself "that was easy". Time to test - and of course the change has no effect.  I futz with it a few times and nope, the changes have no effect. I hack in some obvious visible changes "December" -&gt; "HACK DECEMBER" so I could see it  and know I was in the right file. Nope, this code is not running.&lt;/div&gt;&lt;div&gt;So, grep around (again) and voila ! find a *second* file that looks "calendar like" but not called calendar (hidden code crafty!) and again - I find the&lt;i&gt; exact same code&lt;/i&gt;, apply same changes and retest. Nope - no effect. This is getting silly. So, first - to prove the files are the real ones, I use the old trick - rename the two files, lets be sure they are being used at all, rerun the tests - nope - &lt;i&gt;deleting the files has no effect&lt;/i&gt;. Obi-wan speaks to me &lt;em&gt; These are not the files you're looking for.&lt;/em&gt;&lt;/div&gt;&lt;div&gt;Grep around some more, and hey, even more calendar code ! (must have been a 3 for one sale), and voila!, the same code there too, with a incorrect comment that says "prevent future dates from being displayed" and of course &lt;i&gt;the exact same bogus code.  &lt;/i&gt;(&lt;aside&gt; kind of like shipping 3, 4, 5 or more JVMs in your product (grrrr), the more the merrier of course, but updates may require a visit from Obi-wan to guide your choice &lt;/aside&gt;)&lt;/div&gt;&lt;div&gt;Third times a charm, and the link into the future is gone, so next time Google grabs the last cached link, it will stop the eternal march into the future (and it did). I also fixed the eternal past links, choosing an arbitrary cutoff so that Google doesn't march it's way down to 1/1/0001 or something since those old blog entries are &lt;i&gt;soooooo&lt;/i&gt; embarassing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-5231783191182942159?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/5231783191182942159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=5231783191182942159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5231783191182942159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5231783191182942159'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/12/173-years-of-blogging-1926-2099.html' title='173 years of blogging (1926 - 2099)'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-6532055401174426547</id><published>2009-11-05T19:03:00.001-05:00</published><updated>2009-11-05T19:04:49.660-05:00</updated><title type='text'>The answer is yes</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SvNn7VdT-OI/AAAAAAAARQs/tDU12tIRjvs/s1600-h/DSC_2167.JPG"&gt;&lt;img border="0" alt="" src="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SvNn7VdT-OI/AAAAAAAARQs/tDU12tIRjvs/s320/DSC_2167.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For those who live in warmer climates and ask me almost daily, yes, the answer is yes.&lt;br /&gt;You may begin the weather related mocking now.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-6532055401174426547?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/6532055401174426547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=6532055401174426547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6532055401174426547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6532055401174426547'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/11/answer-is-yes.html' title='The answer is yes'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SvNn7VdT-OI/AAAAAAAARQs/tDU12tIRjvs/s72-c/DSC_2167.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-6680052759455271567</id><published>2009-11-02T17:39:00.001-05:00</published><updated>2009-11-02T17:42:36.061-05:00</updated><title type='text'>Funny and Not-a-Funny</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;This morning, two things appeared on my screen (at different times). The first, a progress bar declaring that the download was NaN% complete (funny). The second, probably the &lt;em&gt;NaNth &lt;/em&gt;time (ahem) I've seen the blue screen of dead in the past month - indicating that my laptop is more than umm, NaN% dead (not funny).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Su9flEr3LOI/AAAAAAAARNM/toXQLwAqNc0/s1600-h/nan.jpg"&gt;&lt;img border="1" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Su9flEr3LOI/AAAAAAAARNM/toXQLwAqNc0/s320/nan.jpg" /&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Su9flYBGcJI/AAAAAAAARNU/DbaIRs-r0GA/s1600-h/DSC_2650.JPG"&gt;&lt;img border="1" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Su9flYBGcJI/AAAAAAAARNU/DbaIRs-r0GA/s320/DSC_2650.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(does anyone still get blue screens of death ?)&lt;br /&gt;Today's entry brought to you by the non-number NaN&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-6680052759455271567?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/6680052759455271567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=6680052759455271567' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6680052759455271567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6680052759455271567'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/11/funny-and-not-funny.html' title='Funny and Not-a-Funny'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Su9flEr3LOI/AAAAAAAARNM/toXQLwAqNc0/s72-c/nan.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-3543853924738321209</id><published>2009-07-01T17:12:00.000-04:00</published><updated>2009-07-01T17:12:14.192-04:00</updated><title type='text'>Happy Canada Day</title><content type='html'>&lt;div style="TEXT-ALIGN: center; MARGIN: 0px auto 10px"&gt;&lt;a href="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SkvRLYKpp7I/AAAAAAAAOkM/jl3Sdrk2r-8/s1600-h/DSC_4588.JPG"&gt;&lt;img border="0" alt="" src="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SkvRLYKpp7I/AAAAAAAAOkM/jl3Sdrk2r-8/s400/DSC_4588.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;Happy Canada Day to all&lt;br /&gt;&lt;/div&gt;&lt;div style='clear:both; text-align:CENTER'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-3543853924738321209?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/3543853924738321209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=3543853924738321209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3543853924738321209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3543853924738321209'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/07/happy-canada-day.html' title='Happy Canada Day'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SkvRLYKpp7I/AAAAAAAAOkM/jl3Sdrk2r-8/s72-c/DSC_4588.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-5077119760095272949</id><published>2009-06-08T13:09:00.002-04:00</published><updated>2009-06-09T07:17:50.099-04:00</updated><title type='text'>James Gosling cannot be subclassed</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/Si1FtUJ5D8I/AAAAAAAAM8U/jp2AObjxp0k/s1600-h/DSC_1732.JPG"&gt;&lt;/a&gt; &lt;div&gt;Photo from JavaOne 2009&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/Si1FtWe1XkI/AAAAAAAAM8c/L3iK-55hKq0/s1600-h/DSC_1735.JPG" style="text-decoration: none;"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; FLOAT: left; CLEAR: both" border="0" alt="" src="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/Si1FtWe1XkI/AAAAAAAAM8c/L3iK-55hKq0/s400/DSC_1735.JPG" /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(Yeah, techie humour can be a sad thing)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-5077119760095272949?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/5077119760095272949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=5077119760095272949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5077119760095272949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5077119760095272949'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/06/james-gosling-cannot-be-subclassed.html' title='James Gosling cannot be subclassed'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/Si1FtWe1XkI/AAAAAAAAM8c/L3iK-55hKq0/s72-c/DSC_1735.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-3800595662018030012</id><published>2009-03-31T14:32:00.003-04:00</published><updated>2009-03-31T14:49:22.721-04:00</updated><title type='text'>We are the fastest ! (and probably the best looking too)</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lots of excitement around Intel's Nehalem launch yesterday. It's one fast chip and if you keep track of these things, you will notice lots of benchmarking activity with press and blogs from the various benchmark leaders boasting about their superiority. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, everyone and their dog (ok, just the people I know) has sent me a note asking about my next bragging post - they just assume - no post, no lead but they would be wrong - we are the fastest still. I just continue to prefer the "humble" is the new "proud" approach to benchmark superiority, but since I'm easily swayed, I will succumb to peer pressure and indulge in some bragging. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yep... IBM J9 is the fastest Java VM you can get. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://j9tr.blogspot.com/2009/03/ibm-j9-specjbb2005-results-used-in.html"&gt;Derek sums it up again with a concise chart comparing IBM J9, Hotspot and JRockit &lt;/a&gt;and while our &lt;a href="http://blogs.sun.com/dagastine/entry/java_rocks_intel_nehalem1"&gt;friends&lt;/a&gt; posted some nice improvements (good work guys), we maintain an impressive lead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What can you conclude here ? The IBM J9 team is an impressive engineering team, and they have done excellent work - congratulations to the J9 and IBM Testarossa teams and my personal thanks to all for your hard work. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What else &lt;i&gt;might&lt;/i&gt; you conclude here ?  Any team that posts such good looking numbers is likely a really good looking team, likely the best looking team by about 8-10% :) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, verifing the good looking aspects will be tricky since we keep the Canadian engineering teams locked indoors buried under 2 metres of permafrost. So, you'll have to trust me on this one - in addition to the good looking JVM benchmarks, we are one good looking team.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-3800595662018030012?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/3800595662018030012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=3800595662018030012' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3800595662018030012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3800595662018030012'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/03/we-are-fastest-and-probably-best.html' title='We are the fastest ! (and probably the best looking too)'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-5511443101112030391</id><published>2009-01-26T20:43:00.007-05:00</published><updated>2009-01-27T00:45:46.339-05:00</updated><title type='text'>The score</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SX5mxgEh2HI/AAAAAAAAKcE/-DjONdWDupo/s1600-h/no.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SX5mx0DQ0zI/AAAAAAAAKcM/qiB3BL6741Y/s1600-h/DSC_2436.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SX5mx0DQ0zI/AAAAAAAAKcM/qiB3BL6741Y/s400/DSC_2436.JPG" border="0" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;washing machine &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;1&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;, 16Gb flash drive &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;0&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;'nuff said.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-5511443101112030391?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/5511443101112030391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=5511443101112030391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5511443101112030391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5511443101112030391'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2009/01/score.html' title='The score'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hZW9ZAfu9Yg/SX5mx0DQ0zI/AAAAAAAAKcM/qiB3BL6741Y/s72-c/DSC_2436.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-700708796113358467</id><published>2008-12-15T20:17:00.000-05:00</published><updated>2008-12-15T20:17:09.126-05:00</updated><title type='text'>We're with you Ken</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SUcBkwT4-ZI/AAAAAAAAJRo/pgUUzpCAf_4/s1600-h/DSC_9677.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SUcBkwT4-ZI/AAAAAAAAJRo/pgUUzpCAf_4/s320/DSC_9677.JPG" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;My friend and co-worker &lt;a href="http://www.ken.walker.name/usr/_home.html"&gt;Ken Walker&lt;/a&gt; is going through some tough times this year. His wife is fighting cancer and has begun chemo sessions, with associated hair loss effects. Ken has of course decided to &lt;a href="http://www.ken.walker.name/usr/_blog/Entries/2008/12/12_Time_for_some_husband_duties.html"&gt;join the club&lt;/a&gt; and shave his head down to the shiny base which he showcased at the office today. Very slick.&lt;br /&gt;&lt;br /&gt; So, on the way home tonight, I stopped in for a number one, all around - very quick and easy - not much styling going on.  Now, I don't have much hair in the first place but the hair I do have, I give up, in support, in friendship and in hope.&lt;br /&gt;&lt;br /&gt;When Ken did this, his daughter said he looks like an Elf, but when I got home today, my daughter said I look like I just got out of prison.  She should have picked Elf, cause last I heard, ex-cons don't hand out Christmas presents.&lt;br /&gt;&lt;br /&gt;Ken, Kelly - in solidarity, thinking about you.&lt;div style='clear:both; text-align:LEFT'&gt;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' style='border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;' align='middle' border='0' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-700708796113358467?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/700708796113358467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=700708796113358467' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/700708796113358467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/700708796113358467'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2008/12/were-with-you-ken.html' title='We&apos;re with you Ken'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hZW9ZAfu9Yg/SUcBkwT4-ZI/AAAAAAAAJRo/pgUUzpCAf_4/s72-c/DSC_9677.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-3467393998033669614</id><published>2008-12-11T16:23:00.005-05:00</published><updated>2008-12-11T20:38:38.369-05:00</updated><title type='text'>It ain't bragging when it's true</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, it's finally happened, bursting pride in our accomplishments has exceeded our shyness and &lt;a href="http://j9tr.blogspot.com"&gt;Derek Inglis&lt;/a&gt; has posted some &lt;a href="http://j9tr.blogspot.com/2008/12/specjbb2005-bragging-rights-for-j9.html"&gt;`braggin` about IBM's J9 performance results.&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's simple - IBM J9 is the fastest Java VM you can get. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, you don't see alot of performance chest thumping on my blog, despite the fact that we are frequently in the leadership position. The reason ?  Performance is just one factor in our  business. It's a lesson learned in many face to face interactions with customers. Surprisingly, not one of these customers run any of the industry standard benchmarks as their key application (ok, not surprising) and bragging about a particular benchmark to them,  often results in a "that's nice, how does *my* application run?" followed by "How easy is it to service ? How easy to install, tune and manage ?" and those details matter.  It's easy to lose focus when you're winning, so a little humbleness goes along way in keeping your attention on the right things. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, despite &lt;a href="http://duimovich.blogspot.com/2006/12/7-stages-of-benchmarks.html"&gt;benchmarks being benchmarks&lt;/a&gt;, I'd like to do some braggin of my own ... not about the numbers, but about my world class team who delivered these results. Thanks to the Toronto, Ottawa, Hursley, Bangalore and Shanghai teams, way to go!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, being humble is one thing, but we're human and it's been a long year, so I say let's brag a &lt;strike&gt;little&lt;/strike&gt; lot. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;... and besides ... &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;It ain't bragging when it's true, and it's true right now. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can read the nitty gritty details &lt;a href="http://j9tr.blogspot.com/2008/12/specjbb2005-bragging-rights-for-j9.html"&gt;here.&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-3467393998033669614?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/3467393998033669614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=3467393998033669614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3467393998033669614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3467393998033669614'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2008/12/it-aint-bragging-when-its-true.html' title='It ain&apos;t bragging when it&apos;s true'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-37286122331235697</id><published>2008-09-20T12:13:00.002-04:00</published><updated>2008-10-06T19:55:24.212-04:00</updated><title type='text'>Thanks Bangalore</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SNUhSRrxBZI/AAAAAAAAFkE/YK3x1Io_dp0/s1600-h/DSC_4113.JPG"&gt;&lt;img style="CLEAR: both; FLOAT: left; MARGIN: 0px 10px 10px 0px" alt="" src="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SNUhSRrxBZI/AAAAAAAAFkE/YK3x1Io_dp0/s160/DSC_4113.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's been a long week, met lots of great people, tried some wonderful food while visiting the Java team here in Bangalore but it's time to go so I spent my last day touristing.&lt;br /&gt;&lt;br /&gt;Here's me flying high, in front of the Bangalore Palace, one of our stops in todays touristing slam.&lt;br /&gt;&lt;br /&gt;I haven't been blogging much but I did promise the team an entry about Bangalore, so here it is. It's a wild city, full of contrasts - you can find Silicon Valley type compounds (with matching technical people) in the same block as cows and temples. Traffic is crazy but flows forward regardless, almost magically at times and surprisingly no accidents were witnessed despite the constant near misses.&lt;br /&gt;&lt;br /&gt;For the record, I did &lt;strong&gt;not&lt;/strong&gt; try an auto-rickshaw despite the obvious fun in trying a death defying vehicle. Save that for next time.&lt;br /&gt;&lt;br /&gt;For now, all I can say is Thanks Bangalore.&lt;div style="clear:both; text-align:LEFT"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-37286122331235697?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/37286122331235697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=37286122331235697' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/37286122331235697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/37286122331235697'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2008/09/thanks-bangalore.html' title='Thanks Bangalore'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SNUhSRrxBZI/AAAAAAAAFkE/YK3x1Io_dp0/s72-c/DSC_4113.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-43734674156412910</id><published>2008-02-20T23:14:00.001-05:00</published><updated>2008-02-21T08:47:44.852-05:00</updated><title type='text'>Lunar Eclipse 2008</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/R7z6n2-XnzI/AAAAAAAACtE/44F0SZ-WV9c/s1600-h/DSC_1920.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" style="margin: 0px 10px 10px 0px; clear: both; float: left;" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/R7z6n2-XnzI/AAAAAAAACtE/44F0SZ-WV9c/s400/DSC_1920.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Lucky for us in Ottawa, the night sky was clear for tonight's lunar eclipse. Less lucky was the -16C/3F temps which came with these clear skies but cold clear weather is good for pictures, even if bad for fingers.&lt;br /&gt;&lt;br /&gt;So, if you missed it, here is what it looked like from my front yard. Sadly, you'll have to wait until Dec 21, 2010 for the next total lunar eclipse.  If that's too far away, you can still get your Eclipse fix at this years &lt;a href="http://www.eclipsecon.org/2008/"&gt;EclipseCon&lt;/a&gt;, which is less than a month away. You can take in all the eclipse goodness you missed tonight without freezing your ... umm ... fingers off.  This will certainly make it much nicer if you plan to &lt;a href="http://www.eclipsecon.org/2008/index.php?page=activities/"&gt;run with Darin &lt;/a&gt;or &lt;a href="http://www.eclipsecon.org/2008/index.php?page=activities/"&gt;golf with Ralph&lt;/a&gt;.&lt;div style="clear: both; text-align: left;"&gt;&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-43734674156412910?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/43734674156412910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=43734674156412910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/43734674156412910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/43734674156412910'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2008/02/lunar-eclipse-2008.html' title='Lunar Eclipse 2008'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hZW9ZAfu9Yg/R7z6n2-XnzI/AAAAAAAACtE/44F0SZ-WV9c/s72-c/DSC_1920.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-3529608387117633394</id><published>2007-09-12T21:34:00.000-04:00</published><updated>2007-09-12T23:23:23.137-04:00</updated><title type='text'>Transparency is good</title><content type='html'>Interesting, our friends at QNX have gone open, announcing that they would be making the source code for Neutrino available and moving to a transparent development model for the technology at &lt;a href="http://foundry27.com"&gt;foundry27.com.&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;This is similar (but not identical) to the models being used by IBM in &lt;a href="http://projectzero.org"&gt;Project Zero&lt;/a&gt; and&lt;a href="http://jazz.net"&gt; Jazz&lt;/a&gt;, where commercial products are being developed via an "open transparent collaborative community development process". Of course, each project has named their "unique" process something different (Transparent Development Process, Open Commercial Development or Community-Driven Commercial Development) but they all have one goal in common - they are are trying to enable a conversation with their customers  (notice I said customers ... paying customers), who may be that much more interested paying for the next version if they have a say in it's evolution. This is not entirely new, many commercial products have early access programs, alpha, beta and partner programs where this feedback could take place but on a much smaller scale. This is a wide open conversation where anybody can participate and it's one area that's weak in proprietary software development. Clearly companies like QNX (who lead the &lt;a href="http://eclipse.org/cdt"&gt;CDT&lt;/a&gt;  project) are applying lessons learn from the &lt;a href="http://eclipse.org/"&gt;Eclipse&lt;/a&gt;  &lt;a href="http://www.eclipse.org/projects/dev_process/development_process.php"&gt;open source development process&lt;/a&gt; to their own development process. and by creating an open dialog with their customers (existing and potential ones), earlier in the development cycle, hope improve their products and translate into more sales.&lt;br /&gt;&lt;br /&gt;So, I'll admit my bias, I have friends at QNX, we support their RTOS in our products, they are a business partner so now that my credibility is shot, all I can say is, &lt;span style="font-style: italic;"&gt;cool move guys  &lt;/span&gt;(and best of luck too).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-3529608387117633394?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/3529608387117633394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=3529608387117633394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3529608387117633394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3529608387117633394'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2007/09/transparency-is-good.html' title='Transparency is good'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-6054335984484298903</id><published>2007-06-25T19:01:00.001-04:00</published><updated>2007-06-25T21:09:34.756-04:00</updated><title type='text'>Magicians</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;br /&gt;I was asked to perform some techno wizard magic earlier today, so  I was tickled when I found &lt;a href="http://www.magician.org/"&gt;this&lt;/a&gt; and then &lt;a href="http://radar.oreilly.com/archives/2007/06/are_we_magician.html"&gt;this&lt;/a&gt;.&lt;b&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;span style="font-style: italic;"&gt;"The I.B.M. is &lt;/span&gt;&lt;span style="font-style: italic;"&gt;the world's largest organization for magicians"&lt;/span&gt;  ... so to answer t&lt;a href="http://radar.oreilly.com/archives/2007/06/are_we_magician.html"&gt;he question&lt;/a&gt;, yes apparently, we &lt;span style="font-weight: bold; font-style: italic;"&gt;are &lt;/span&gt;magicians ... &lt;a href="http://www.magician.org/"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.magician.org/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 114px; height: 114px;" src="http://www.magician.org/headerimages/IBMHeaderLogo.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-6054335984484298903?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/6054335984484298903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=6054335984484298903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6054335984484298903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6054335984484298903'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2007/06/magicians.html' title='Magicians'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-2673785286620391926</id><published>2007-03-10T19:50:00.000-05:00</published><updated>2007-03-11T21:59:55.170-04:00</updated><title type='text'>Content may have shape-shifted during flight.</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/RfNSS2lJGRI/AAAAAAAAAAc/jAfs_fTFPrg/s1600-h/IMGP4778.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" style="clear: both; float: left;" alt="" src="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/RfNSS2lJGRI/AAAAAAAAAAc/jAfs_fTFPrg/s160/IMGP4778.JPG" border="0" /&gt;&lt;/a&gt; Some of you are aware of my tales of woe last week, having lost my luggage during my trip to EclipseCon. Some of you laughed at me for stupidly checking my luggage (umm I guess cause &lt;em&gt;yours&lt;/em&gt; arrived you geniuses) and then gleefully asking about the loss all week (ahem). Since you are probably curious about the outcome, yes, I now have my luggage. I retrieved it after arriving in Ottawa, where it sat waiting patiently for my return. Did it actually leave Ottawa ? It's unclear to me but it was tagged for Oakland so they did know where to send it had they decided to actually do so. Some luggage is apparently marked "optional".&lt;br /&gt;&lt;br /&gt;In Ottawa, when I arrived, I was not given my luggage right away. Nope, they first claim that they "never heard of me". Hmm, strange, they called saying it was in Ottawa, but never mind, I have the paperwork and my lost luggage claim so lets try anyhow. "Ok, right, here you are, lets go take a tour of the lost luggage facility at the airport and see if you can spot yours" (not so optimal as there is a fair amount of luggage sitting at the airport). Nope, not there. So, the baggage services guy goes through to the customs area to check if it was there as I was returning from the US. This was actually very nice of him so I'm not really complaining as he could have just punted on me and said "we'll call if it turns up". While he was off searching the international baggage area, I spotted a bunch of bags cached away in his office. I snuck in, feeling very guilty since it was an airport and they seem to take this security stuff pretty seriously but there was my bag so my trespass was worth it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/RfNSS2lJGSI/AAAAAAAAAAk/T2qBktUwUN4/s1600-h/IMGP4781.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" style="clear: both; float: left;" alt="" src="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/RfNSS2lJGSI/AAAAAAAAAAk/T2qBktUwUN4/s160/IMGP4781.JPG" border="0" /&gt;&lt;/a&gt; After I &lt;strike&gt;stole&lt;/strike&gt; got the bag back, I waited for the guy so I could tell him to close the file. While waiting, I had a small panic attack when I noticed a sheet, attached to my bag, which looked like a list of the contents of the bag, except it listed such items like &lt;em&gt;female gym shoes,&lt;/em&gt; and&lt;em&gt; gold ring earrings&lt;/em&gt; and &lt;em&gt;a female jogging suit.&lt;/em&gt; Hmm, I don't recall having any of those items when I left and since when do they inventory a bag ? It was also unlikely that they mistook my pair of size 14 running shoes as woman's runners but who knows ?  How to explain this ? "Gee honey, they lost my luggage and sent back ladies stuff."  Right. Next you'll be saying you went to EclipseCon and it was hard work and you're really tired. Um, yeah, how did you know ?&lt;br /&gt;&lt;br /&gt;I was only a little apprehensive opening the bag but it was all ok, &lt;em&gt;my&lt;/em&gt; runners and &lt;em&gt;my&lt;/em&gt; shirts were all there, no sign of the ladies stuff.  No content shape-shifting occurred &lt;span style="font-style: italic;"&gt;this time. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lessons learned.&lt;br /&gt;&lt;ul&gt;&lt;li&gt; don't check your luggage  (I knew this already, I was just testing)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; your true friends will offer to loan you clothing&lt;/li&gt;&lt;li&gt;as a true friend you will decline and buy new stuff&lt;br /&gt;&lt;/li&gt;&lt;li&gt;your non-friends will mock your stupidity for checking luggage and then offer pretend sympathy - do not be fooled, plan revenge instead&lt;br /&gt;&lt;/li&gt;&lt;li&gt; contents &lt;span style="font-style: italic;"&gt;may &lt;/span&gt;shape-shift into embarrassing items during flight (airline dependent) - plan your explanations in advance - just in case.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; "destination" is relative. When they say "luggage has been delivered to "destination", they may mean "&lt;span style="font-style: italic;"&gt;not delivered&lt;/span&gt;" or "&lt;span style="font-style: italic;"&gt;eventual &lt;/span&gt;destination&lt;span style="font-style: italic;"&gt;"  &lt;/span&gt;which is sometimes known as home.&lt;/li&gt;&lt;/ul&gt;Which is where I am now, scotch in hand so all is good with the world.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-2673785286620391926?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/2673785286620391926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=2673785286620391926' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/2673785286620391926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/2673785286620391926'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2007/03/content-may-have-shape-shifted-during.html' title='Content may have shape-shifted during flight.'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/RfNSS2lJGRI/AAAAAAAAAAc/jAfs_fTFPrg/s72-c/IMGP4778.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-2587112552946653593</id><published>2007-02-23T13:58:00.000-05:00</published><updated>2007-02-23T14:22:21.923-05:00</updated><title type='text'>Retirement</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Rd85bJkLJOI/AAAAAAAAAAM/d8fvFgkQSx8/s1600-h/DSC_0127.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_" alt="" src="http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Rd85bJkLJOI/AAAAAAAAAAM/d8fvFgkQSx8/s320/DSC_0127.JPG" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;Yesterday, it was my pleasure to be the speaker at Peter Tanner's Retirement party here at the IBM Lab in Ottawa. Peter is retiring after 13 years at OTI/IBM. Peter's role was in business development, most recently around our J9 runtime technology which can be found in IBM product such as &lt;a href="http://www-306.ibm.com/software/wireless/weme/"&gt;WEME/WECE &lt;/a&gt;as well as the IBM J2SE SDK. In that role, Peter was able to leverage his technical knowledge, and his business skills and contributed much to the success of J9. For that I personally thank you Peter.&lt;br /&gt;&lt;br /&gt;During the party, Peter's daughter Laura showed a humorous PowerPoint presentation of pictures of Peter, from baby, to long hair hippy, and finally as a suit &lt;em&gt;and tie&lt;/em&gt; clad business person. It was during this presentation that I realized how lucky us old guys have it. We have spent most of our lives in the absence of digital photography, so much of the evidence of our youthful hairstyles and partying antics are difficult to find. For you younger career people starting out today, be forewarned, your whole lives will available in easy to &lt;strike&gt;blackmail&lt;/strike&gt; distribute form, and in 30 years, at your retirement party, there will be so many more embarrassing pics to choose from. We may have had to walk 10 miles to school in the snow, at -30C and uphill both ways, but I know, my youthful antics are buried. You youngsters on the other hand will have to explain &lt;a href="http://www.bsu.edu/blogcaster/%7Ecraig/?p=20"&gt;your university party days&lt;/a&gt; to your kids.&lt;br /&gt;&lt;br /&gt;The picture above is me (left) presenting Peter with some last minute IBM paperwork before his departure.  (Cliche moment, he selected the &lt;a href="http://2.bp.blogspot.com/_hZW9ZAfu9Yg/Rd8-JZkLJPI/AAAAAAAAAAU/VHafzUwpBRg/s1600-h/DSC_0150.JPG"&gt;retirement watch&lt;/a&gt;). Given the picture could be interpreted differently, it's not surprising that someone asked me if it was me retiring, (oh how I wish) but sadly no, I'm still here. (Photo credit Jim des Rivieres).&lt;br /&gt;&lt;br /&gt;Congratulations and enjoy your retirement Peter, I am so jealous.&lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-2587112552946653593?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/2587112552946653593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=2587112552946653593' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/2587112552946653593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/2587112552946653593'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2007/02/retirement.html' title='Retirement'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hZW9ZAfu9Yg/Rd85bJkLJOI/AAAAAAAAAAM/d8fvFgkQSx8/s72-c/DSC_0127.JPG' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-5751938094373345095</id><published>2006-12-29T14:31:00.000-05:00</published><updated>2006-12-29T18:31:40.504-05:00</updated><title type='text'>unshifty results...</title><content type='html'>&lt;a href="http://talklikeaduck.denhaven2.com/"&gt;Rick &lt;/a&gt;posted a &lt;a href="http://duimovich.blogspot.com/2006/09/performance-is-not-optional.html#4861169547565369708"&gt;comment&lt;/a&gt; and some &lt;a href="http://talklikeaduck.denhaven2.com/articles/2006/12/22/stage-fright-or-more-on-performance-anxiety"&gt;thoughts &lt;/a&gt;on the validity of the performance numbers I posted a few months ago. He astutely noticed that the benchmarks for each language did slightly different things and generously offered up an excuse that all is fair in love and benchmarking. While it's tempting to be allowed to escape via this path, I think that correctness matters (even in benchmarks) and I was curious on whether the numbers would change with better Ruby code.&lt;br /&gt;&lt;br /&gt;First, a comment. I was not knocking Ruby performance. My point at the time was that Ruby, being similar to Smalltalk, should be able to improve its performance using fairly well understood implementation techniques used in Smalltalk and many other OO language runtimes. As Ruby becomes &lt;a href="http://www.tiobe.com/tpci.htm"&gt;more popular&lt;/a&gt;, I know there will be a focus on performance and Ruby developers will benefit.  The comparisons here, just tell you where Ruby could be.&lt;br /&gt;&lt;br /&gt;Two of the points Rick made, were 1) the benchmark code is &lt;strike&gt;wrong&lt;/strike&gt; different between the languages and 2) the code doesn't use the &lt;em&gt;proper&lt;/em&gt; Ruby array API, specifically calling out that using &lt;strong&gt;insert&lt;/strong&gt; is overkill. I'm not a Ruby programmer &lt;em&gt;yet&lt;/em&gt; despite all the &lt;a href="http://www-03.ibm.com/developerworks/blogs/page/pmuellr?entry=taking_the_ruby_plunge"&gt;pressure to take the Ruby plunge&lt;/a&gt; so I didn't notice the insert/pop discrepancy. Rick also noted that methods like &lt;a href="http://www.rubycentral.com/book/ref_c_array.html"&gt;push or unshift&lt;/a&gt; would be better for the type of work the benchmark was doing. The only way to find out is to bench it and besides, here I sit, on my couch, recovering from a brutal "cough your lungs out" cold with nothing better to do anyhow. This time, push/pop and shift/unshift are the candidates. I used the same original code from &lt;a href="http://baus.net/static/testlist.rb"&gt;here&lt;/a&gt; with the loop counter changed to 500000 (so I don't have to wait 60 seconds+ per bench), and the inner operations changed to the various permutations of unshift/shift/push/pop.&lt;br /&gt;&lt;br /&gt;unshift/shift 6.47 s&lt;br /&gt;unshift/pop 6.97 s&lt;br /&gt;push/pop 4.28 s&lt;br /&gt;push/shift 6.05 s&lt;br /&gt;&lt;br /&gt;Hmmmm, clearly the push/pop combination (which adds to the end and removes from the end) is the better choice for a pure stack and you would probably use push/shift for a queue. Ruby experts can chime in if there are better ways.&lt;br /&gt;&lt;br /&gt;Now, let's try the old Smalltalk comparison. The equivalent methods in Smalltalk would be addFirst:/removeFirst/addLast:/removeLast. These numbers from same machine as above, same permutations using OrderedCollections.&lt;br /&gt;&lt;br /&gt;addFirst/removeFirst 437 ms&lt;br /&gt;addFirst/removeLast 468 ms&lt;br /&gt;addLast/removeLast 375 ms&lt;br /&gt;addLast/removeFirst 515 ms&lt;br /&gt;&lt;br /&gt;So, for this case, I think Ruby has some opportunities to exploit which could help Ruby runtime performance. The one caveat is that I don't know enough about Ruby internals to tell if there is some super secret array semantics that makes it difficult to implement efficiently.&lt;br /&gt;&lt;br /&gt;Can someone explain what Ruby is doing here that is taking the time ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-5751938094373345095?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/5751938094373345095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=5751938094373345095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5751938094373345095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/5751938094373345095'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/12/unshifty-results.html' title='unshifty results...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-4761000322070416256</id><published>2006-12-14T00:11:00.000-05:00</published><updated>2006-12-14T16:09:30.260-05:00</updated><title type='text'>Goat Shaving</title><content type='html'>Work has some annoying days...  What else is new ? but I think there's hope. Thanks to &lt;a href="http://ken.walker.name/"&gt;Ken Walker&lt;/a&gt; , I think I found an opportunity for a new career.&lt;br /&gt;&lt;br /&gt;&amp;lt;career rant deleted&amp;gt;&lt;br /&gt;&lt;br /&gt;People make drums, drums require skins, skins need shaving, which leads to the  "new career opportunity", becoming a "Goat Shaver" and making drums. Ken tuned me into this opportunity with his recent &lt;a href="http://ken.walker.name/index.php?p=109"&gt;blog entry&lt;/a&gt; that includes shocking goat shaving pictures.  Career goal, be the best darn goat shaver in history !&lt;br /&gt;&lt;br /&gt;You can even &lt;a href="http://www.ehow.com/how_5669_shave-goat-show.html"&gt;learn more about goat shaving&lt;/a&gt; online. Of course, this is for live goats and Ken was shaving the skins of dead goats but that's just a detail.  My favorite tip  ? "Talk to other goat owners in your area and have a goat-shaving day". How am I supposed to find goat owners in my area ?  I guess I could ask ... so if you own a goat and live in my area, drop me line.&lt;br /&gt;&lt;br /&gt;Am I serious about goat shaving as a career ? Probably not. Was it worth it to pretend so I could have a blog entry called Goat Shaver ? Absolutely.&lt;br /&gt;&lt;br /&gt;Anyhow, I sent out a goat shaving career change notice which apparently didn't appeal to any of my friends or co-workers. They suggested that instead we start a band, go on tour and call the band "The Goat Shavers". This is genius in it's purest form. This way we can be "Goat Shavers" with no actual goat shaving required, kind of like virtual goat shavers.&lt;br /&gt;&lt;br /&gt;Virtual machines, virtual goats ... right up my alley,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-4761000322070416256?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/4761000322070416256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=4761000322070416256' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/4761000322070416256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/4761000322070416256'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/12/goat-shaving.html' title='Goat Shaving'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-6640086858724761271</id><published>2006-12-07T13:31:00.000-05:00</published><updated>2006-12-07T19:00:22.470-05:00</updated><title type='text'>The 7 stages of benchmarks...</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://photos1.blogger.com/x/blogger2/5750/3043/1600/301925/benchmarks.jpg"&gt;&lt;img alt="" src="http://photos1.blogger.com/x/blogger2/5750/3043/400/9245/benchmarks.jpg" border="0" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Inspired by Pat Mueller's &lt;a href="http://www-03.ibm.com/developerworks/blogs/page/pmuellr?entry=thank_you_mr_x"&gt;recent historical journey&lt;/a&gt;, I dipped into my own archives and found this old chart from a presentation I did &lt;em&gt;many &lt;/em&gt;years ago in which I apparently mocked benchmarking (we probably weren't doing so well at the time). I did modify it slightly by changing the background to white (from the horrid powerpoint one I had used) and I also removed the words that were under each figure so you could have some fun and invent your own.  This is not a contest, but all suggestions welcome. I will repost an updated pic with tag lines added for the one which makes me laugh the most.&lt;br /&gt;&lt;br /&gt;Note: these figures are straight from Powerpoint which includes these useful pictures (I wonder why?) as well as handy pre-filled in templates (it used to be a wizard) which help you &lt;a href="http://office.microsoft.com/en-us/templates/TC062560581033.aspx?pid=CT101450061033"&gt;"communicate bad news".&lt;/a&gt; Seems the creators of powerpoint have it all covered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-6640086858724761271?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/6640086858724761271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=6640086858724761271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6640086858724761271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/6640086858724761271'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/12/7-stages-of-benchmarks.html' title='The 7 stages of benchmarks...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-1033403640395314573</id><published>2006-11-07T17:19:00.000-05:00</published><updated>2006-11-07T21:09:06.825-05:00</updated><title type='text'>Happy Birthday Eclipse !</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a href="http://photos1.blogger.com/blogger2/5750/3043/1600/server1.jpg"&gt;&lt;img alt="" src="http://photos1.blogger.com/blogger2/5750/3043/320/server1.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger2/5750/3043/1600/server-back.jpg"&gt;&lt;img alt="" src="http://photos1.blogger.com/blogger2/5750/3043/320/server-back.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;In his happy birthday post, Mike Milinkovich mentions the &lt;a href="http://milinkovich.blogspot.com/2006/11/happy-birthday.html"&gt;original servers&lt;/a&gt; we put up at OTI when Eclipse started, 5 years ago. Those were pretty wild times as evidenced by these server pictures, taken on November 9th, 2001. This was the original Eclipse server and it was in this  configuration because of a disk failure soon after going live. A quick and dirty repair and we were back in business. You will notice the case was off and the drive hanging out but we decided that the site was so busy, we didn't want to take the server down for &lt;em&gt;any reason&lt;/em&gt; so the server ran like this for a while. The running gag at the time was "open source, open case". I suspect that if we got Denis to take a picture of the servers Eclipse uses today, it would be a much different story...&lt;br /&gt;&lt;br /&gt;I'm off to the Eclipse birthday party now, to swap tales of the good old days (5 years goes by pretty fast).&lt;br /&gt;&lt;br /&gt;Happy Birthday Eclipse, here's to many more ... &lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-1033403640395314573?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/1033403640395314573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=1033403640395314573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/1033403640395314573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/1033403640395314573'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/11/happy-birthday-eclipse.html' title='Happy Birthday Eclipse !'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-4767879351022596763</id><published>2006-11-04T12:46:00.000-05:00</published><updated>2006-11-04T16:56:13.249-05:00</updated><title type='text'>Vista Smalltalk</title><content type='html'>Last week I attended the &lt;a href="http://smalltalk.ottawa.on.ca/"&gt;Ottawa Smalltalk Users Group &lt;/a&gt;to hear a talk by Peter Fisk, on his &lt;a href="http://vistascript.net/vistascript/docuwiki/doku.php"&gt;Vista Smalltalk.&lt;/a&gt;  Peter blogs regularly and eloquently about his development efforts  &lt;a href="http://vistasmalltalk.wordpress.com/"&gt;here&lt;/a&gt;.  It's a must read if you're interested in Smalltalk or Microsoft Vista programming and want to experience more &lt;a href="http://duimovich.blogspot.com/2006/08/pure-programming-joy.html"&gt;programming joy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I intended to blog about it but &lt;a href="http://www.cincomsmalltalk.com/userblogs/buck/blogView"&gt;David Buck &lt;/a&gt;beat me to it and created a &lt;a href="http://www.simberon.com/VistaSmalltalk.htm"&gt;nice screen demo&lt;/a&gt; of the Vista Smalltalk system. If you are a Smalltalker, you have to see this, &lt;a href="http://www.simberon.com/VistaSmalltalk.htm"&gt;go to Davids screen capture&lt;/a&gt; &lt;span style="font-style: italic;"&gt;now!&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The evening was lots of fun. Peter is a veteran of the computing industry and started off with a history review of his computing background.  The summary was entertaining and unfortunately for me, a reminder that I had lived through some of the ancient history myself.  Yeah, &lt;a href="http://www.josephmoore.net/2006/05/visual-studio-ruby-on-rails-and-old.html"&gt;we're old dudes who know Smalltalk... &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a VM implementor, I was keen to understand the details so if that kind of thing thrills you, read on.&lt;br /&gt;&lt;br /&gt;Peter has basically written an interpreter for Smalltalk in C#. He supports the usual stuff (blocks) but not the esoteric (become:). Vista Smalltalk parses Smalltalk from text, every time (there is no image) and creates its own internal runtime format (classes, methods). You'd think it takes time, but by keeping the class libraries small (clearly Peter is a fan of "small is beautiful", it does ok). Peter also showed some configuration files which describe what to download into your web browser. This allows you to download just what you need for your application. You can decide to include a development environment (see Dave's screen cast for a demo). A development image has a workspace and supports a class browser. You can modify code, run doits, and normal development environment stuff, all running inside your web browser, all written in Smalltalk.&lt;br /&gt;&lt;br /&gt;For his class library, he has a core subset of the Smalltalk libraries. Interestingly, he also has these "mapped" classes which are are directly mapped to native format CLR classes (I believe String is done this way). Looks like it makes it pretty simple to add natives and reuse CLR classes. There was some discussion if all the CLR methods for a particular mapped class are available by default, but currently you have to decide what to expose to the Smalltalk libraries via a primitive syntax. Peter said it would be pretty easy to do some reflection munging around to make these methods available for "free" but the current mechanism is good enough.&lt;br /&gt;&lt;br /&gt;Since he has his own interpreter, he is not using the MSIL "bytecodes" directly. Peter says it's possible to do so but he decided not to compile to MSIL or create assemblies (assemblies are fancy .net DLLs) for a few reasons. First, assemblies have problems with unloading and he needs hot code replace (classes and methods) to work. .NET contains a newer solution with the introduction of a facility called "lightweight code generation" and while Peter said he could probably use that, he also said that the facility needed special signed permissions to  be allowed to run in browsers and he wanted to avoid the signing issue for now. Peter's focus is on writing code that can run in browsers with no headaches. &lt;br /&gt;&lt;br /&gt;Peter's target is browser execution, and a simplified application programming for Microsoft Vista which includes new technologies like XAML. Since his focus is on the client side, with tight browser (desktop support too), the key is  integration with .NET. I think he spends alot of his time, just figuring out how CLR / .NET / WinForms/ WPF  and threading all works. It was clear he gets much joy in doing things the Microsoft manual says you can't or shouldn't and specifically is proud about how easy it is to create apps with his system.  Leveraging the .NET clases makes for some compelling demos too.&lt;br /&gt;&lt;br /&gt;Peter wants to get stuff done. He sees Smalltalk as the best way to get there, so he wrote his own Smalltalk interpreter (where have I heard that before ?). I thought it was pretty cool, he is trying to solve a specific problem and is just going to build what he needs to solve it.  Refreshing...&lt;br /&gt;&lt;br /&gt;After the talk, we retired to the pub, swapping old and new tales.  Any inaccuracies in the above description can be attributed to beer and the late night.  I am fully prepared to go back and drink more beer with Peter or anyone else who attended to correct any details I got  wrong.&lt;br /&gt;&lt;br /&gt;The Vista Smalltalk demo and talk was fun to see, and it's going to be neat to watch it evolve.  Go Peter go !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-4767879351022596763?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/4767879351022596763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=4767879351022596763' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/4767879351022596763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/4767879351022596763'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/11/vista-smalltalk.html' title='Vista Smalltalk'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-4392357552024120655</id><published>2006-11-01T08:38:00.000-05:00</published><updated>2006-11-01T12:29:06.477-05:00</updated><title type='text'>Soluble product #4</title><content type='html'>If you visit the IBM Queensview offices where I work, and you're tempted to get a coffee from the automated coffee machine (we have three, I'm referring to the one that serves coffee, hot chocolate, and mocha), you may want to reconsider.  This morning, I overheard the restocking discussion for the various mysterious powders that go into the machine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;"This bin takes hot chocolate and this bin holds &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;soluble product #4&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I checked, it's the real name they order the "product" by and refers to the French Vanilla flavouring.  In honour of this new information, I hereby coin the word "schroedinfood"  -"food you were perfectly happy to eat before but you no longer eat once you know what's in it or how it's made", inspired by the word &lt;a href="http://catb.org/jargon/html/S/schroedinbug.html"&gt;schroedinbug&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-4392357552024120655?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/4392357552024120655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=4392357552024120655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/4392357552024120655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/4392357552024120655'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/11/soluble-product-4.html' title='Soluble product #4'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-3564586947282799424</id><published>2006-10-23T21:24:00.000-04:00</published><updated>2006-10-23T21:36:55.455-04:00</updated><title type='text'>blogger spam...</title><content type='html'>So, blogger offers you a chance to upgrade to the new beta. New look if you want, new tools for editing, new features (like comment feeds) ... tempting to try... tempting enough that I did it.&lt;br /&gt;&lt;br /&gt;So, they "auto-convert blog" to new version but these morons, they republish everything, with different timestamps and all the old entries are new again.  &lt;sigh&gt; Now I'm afraid to try anything, lest they repost the goods again. Wonder what happens when they go from beta to release ?&lt;br /&gt;&lt;br /&gt;Enjoy the posts, maybe they are better second time around.&lt;br /&gt;&lt;br /&gt;Me-thinks &lt;a href="http://thedailywtf.com/"&gt;The Daily WTF&lt;/a&gt; needs an update.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-3564586947282799424?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/3564586947282799424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=3564586947282799424' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3564586947282799424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3564586947282799424'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/10/blogger-spam.html' title='blogger spam...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-3260520007591701178</id><published>2006-10-23T19:31:00.000-04:00</published><updated>2006-10-23T20:22:09.688-04:00</updated><title type='text'>Going to get milk, be right back.</title><content type='html'>I rant, therefore I am ... for those who know me or have met me in person, no explanation required. &lt;br /&gt;&lt;br /&gt;I was ranting recently about some silly performance complaints and my victim (rantee ?) suggested I blog it instead of hammering him with my amusing "bon mots". I find ranting in person much more enjoyable but this time, for you readers, sure. If you want to read other rants or amusing techno sillyness, I recommend &lt;a href="http://thedailywtf.com/"&gt;The Daily WTF &lt;/a&gt;which probably stands for "The Daily Weird Techno Fun" or something like that. Try &lt;a href="http://thedailywtf.com/forums/thread/95098.aspx"&gt;this one&lt;/a&gt; or &lt;a href="http://thedailywtf.com/forums/thread/92281.aspx"&gt;this one (for my close friends).&lt;/a&gt; Some funny stories there, that's for sure. But I digress.&lt;br /&gt;&lt;br /&gt;So, here I am on the receiving end of some complaints about Java performance.  Always keen to know more, I ask some questions. "What's slow ?, what are you trying to do ?" . Well, it turns out that  they were 1) loading a class into its own class loader and 2) creating a single instance of it. Hmmm, this sounds suspicious, how could this be a performance problem ? Answer "we're doing it 100,000 times" ... ah yes, I see now.  So, dig some more and find out the class is actually the same every time.  OK. Step away from the keyboard, slowly, let me see your hands... ( I leave the recommendation as an exercise for the reader). &lt;br /&gt;&lt;br /&gt;Listen, creating a classloader, loading a class, making one instance, and then throwing it all away is bad for performance, especially if you do it another 99,999 times. It's like renting a car, driving to the store for milk, returning the car and then coming to me to complain that "buying milk is too slow".  Tip, keep the car for a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-3260520007591701178?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/3260520007591701178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=3260520007591701178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3260520007591701178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/3260520007591701178'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/10/going-to-get-milk-be-right-back.html' title='Going to get milk, be right back.'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115958967775865864</id><published>2006-09-29T23:54:00.000-04:00</published><updated>2006-10-23T19:28:54.960-04:00</updated><title type='text'>Algorithms matter</title><content type='html'>Brian  commented on the my previous entry, calling the benchmark comparison unfair.&lt;br /&gt;&lt;br /&gt;To quote.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"This is a rather unfair comparison though, as it is comparing completely different data structures with a test that caters to the strengths of one. Python and Ruby's lists are implemented via vectors, not linked lists, so have O(n) time to remove the first element. Linked lists (with a reference to their end) are O(1) for both insert at start, and delete from end."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I agree, it is unfair to compare an O(1) algorithm vs an O(n) algorithm. I don't know how Ruby libraries implements insert or pop but Brian implies it's O(n) because it's using vectors. For the record , OrderedCollection uses Arrays (vectors) under the covers and it does ok.  Anyhow, I decided to see how well the Smalltalk version would do if I did with some "less than optimal" code (Just for fun you know).&lt;br /&gt;&lt;br /&gt;So, the original benchmark used OrderedCollections&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;| l |&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;l := OrderedCollection new.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;^Time millisecondsToRun: [&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    1 to: 5000000 do: [:x |&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        0 to: 9 do: [:i| l addFirst: i].    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        [ l isEmpty ] whileFalse: [l removeFirst]&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;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I changed it to use an ordinary Array. Smalltalk Arrays can't grow or shrink, so to insert an element you have to create a new array. I do this with some bogus code which simply concatenates a new array containing the new element with the previous array. This is an O(n) operation. To remove the first element, I just copy all but the first element into a new array, again O(n).&lt;br /&gt;This makes the inner loop of n insertions and n deletions actually O(n^2).&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;| l |&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;l := Array new.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;^Time millisecondsToRun: [&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;    1 to: 5000000 do: [:x |&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;        0 to: 9 do: [:i| l := (Array with: i), l].&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;    [ l size &lt;= 0 ] whileFalse: [l := l copyFrom: 2 to: l size]&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;    ]&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, the original loop using #addFirst:, and #removeFirst is about 6 seconds. The second version with the O(n) insert and delete is a much slower 34 seconds. Still faster than the Ruby version, so I think this is good news for Ruby fans, it is possible to do better and I fully expect it to happen. My fearless prediction ? some performance  improvements will be due to VM improvements, and others will be algorithm improvements.&lt;br /&gt;&lt;br /&gt;Now, the thing about the O(n) version is that it should be sensitive to the values of the inner  loop.  Let's test that ...&lt;br /&gt;&lt;br /&gt;In Smalltalk if you vary the values of the loops (outer,inner) here's what you get.&lt;br /&gt;The original code, using OrderedCollections finishes all three variations in about 6 seconds.&lt;br /&gt;&lt;br /&gt;The Array code comes back with this.&lt;br /&gt;&lt;br /&gt;Outer,Inner Time&lt;br /&gt;5000000,9 - 34 seconds&lt;br /&gt;500000, 99 - 47 seconds&lt;br /&gt;50000, 999 - 170 seconds&lt;br /&gt;&lt;br /&gt;no great surprise, given the fact that each insert makes a full copy of the array, of course it peforms worse when the arrays are larger. Yes, the O(n) insertion and deletion hurts.&lt;br /&gt;&lt;br /&gt;The Ruby numbers are (&lt;a href="http://baus.net/static/testlist.rb"&gt;same bench as before, &lt;/a&gt;just vary the loop counters)&lt;br /&gt;&lt;br /&gt;Outer,Inner Time&lt;br /&gt;5000000,9 - 104 seconds&lt;br /&gt;500000, 99 - 119 seconds&lt;br /&gt;50000, 999 - 180 seconds&lt;br /&gt;&lt;br /&gt;What does this tell me ? Ruby is probably using some O(n) insert and deletion. However this is just me guessing...  What this really tells me is simple ... algorithms matter...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115958967775865864?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115958967775865864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115958967775865864' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115958967775865864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115958967775865864'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/09/algorithms-matter.html' title='Algorithms matter'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115862920654618122</id><published>2006-09-18T21:19:00.000-04:00</published><updated>2006-10-23T19:28:54.905-04:00</updated><title type='text'>Performance is not optional</title><content type='html'>Interesting read &lt;a href="http://www.redmonk.com/sogrady/archives/002228.html"&gt;here&lt;/a&gt;, on languages and choice and the conclusion is even right (the ability to mix and match languages, with proper interop will be key - frankenstein solutions need not apply). More on that some other time but referenced from that blog, I saw &lt;a style="border-bottom-style: groove;" href="http://www.baus.net/dynamic-list-performance"&gt;this &lt;/a&gt;which did some &lt;strike&gt;bashing&lt;/strike&gt; comparisons of C/C++, Python and Ruby performance and my curiosity got the better of me ... I &lt;span style="font-weight: bold;"&gt;had &lt;/span&gt;to try my Smalltalk implementation (VisualAge Smalltalk) to compare.&lt;br /&gt;&lt;br /&gt;The  Ruby benchmark shown by the author is shown &lt;a href="http://baus.net/static/testlist.rb"&gt;here (testlist.rb) &lt;/a&gt;. On the authors machine, it completes in "~100 secs".  In comparison the author's C++ code took ~7 seconds and you can read his &lt;a style="border-bottom-style: groove;" href="http://www.baus.net/dynamic-list-performance"&gt;entry &lt;/a&gt;to determine his conclusions on the suitability of Ruby or Python for some applications.  So, to compare and set a baseline on my own hardware, I first ran the Ruby code on my laptop and it completed in 111 seconds which for this purpose will be considered close enough to ~100 seconds to claim that our machines are roughly equivalent (I do know better but for this purpose... I declare it "close enough for government work" so I just squint a little and I can do a direct comparison to the authors C++ numbers.&lt;br /&gt;&lt;br /&gt;I translated the Ruby code to Smalltalk,  trying to keep the code as close as possible to the Ruby version. Here it is.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;| l start stop |&lt;br /&gt;l := OrderedCollection new.&lt;br /&gt;start := Time millisecondClockValue.&lt;br /&gt;1 to: 5000000 do: [:x |&lt;br /&gt;0 to: 9 do: [:i|&lt;br /&gt; l addFirst: i.&lt;br /&gt;].&lt;br /&gt;[ l isEmpty ] whileFalse: [&lt;br /&gt; l removeFirst]&lt;br /&gt;].&lt;br /&gt;stop := Time millisecondClockValue.&lt;br /&gt;stop - start&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;On the same machine it runs in (drum roll please ...)  &lt;span style="font-weight: bold;"&gt;7.2 seconds&lt;/span&gt; which is umm, "approximately" 7 seconds and comparable to the optimized C++ numbers quoted by the author. (For complete truth in advertising, if you use different permutations of #addLast, #removeLast, the times can go up to about 9 seconds).&lt;br /&gt;&lt;br /&gt;What does this tell me ? Clearly, Smalltalk is as fast as C++ ? Wooo hooo... sure, and sometimes faster, and ok, sometimes slower too. What does it really show ? That Ruby and Python have a way to go performance wise and if you apply modern implementation techniques like the ones used in commercial (and some open source)  Smalltalks, improved performance is well within reach. Using a Smalltalk VM for Ruby has been discussed &lt;a style="border-bottom-style: groove;" href="http://patricklogan.blogspot.com/2006/09/ruby-and-strongtalk.html"&gt;here&lt;/a&gt; and with the release of &lt;a href="http://strongtalk.org"&gt;Strongtalk&lt;/a&gt;, this is a possibility.&lt;br /&gt;&lt;br /&gt;Anyone want to guess what the numbers  for the same benchmark is in Java ? (Hint - think linked list of &lt;span style="font-style: italic;"&gt;primitive types&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;So, despite some of the crazy rhetoric you have to wade though these days, one of the nice things that has happened as part of the recent rise in interest in dynamic languages are these performance comparisons, which in turn is leading to a rediscovery of the &lt;a style="border-bottom-style: groove;" href="http://duimovich.blogspot.com/2006/07/old-smalltalkers-considered-useful.html"&gt;"old ways"&lt;/a&gt; :). This can only be good for all. Remember kids, "performance is not optional" (and neither is interop).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115862920654618122?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115862920654618122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115862920654618122' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115862920654618122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115862920654618122'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/09/performance-is-not-optional.html' title='Performance is not optional'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115824923448054978</id><published>2006-09-14T11:02:00.000-04:00</published><updated>2006-10-23T19:28:54.850-04:00</updated><title type='text'>Yes, Virginia there is an Unreachable Clause.</title><content type='html'>(with apologies to &lt;a href="http://www.newseum.org/yesvirginia/"&gt;Francis Church&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;From Neil's &lt;a href="http://gafter.blogspot.com/2006/09/nominal-closures-for-java-version-02.html"&gt;update &lt;/a&gt;to closures being considered for Java.&lt;br /&gt;&lt;br /&gt;I like closures as a powerful programming construct but after reading it, I can only say ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"DEAR EDITOR of SRR: I am 44 years old.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Some of my Java friends say there is no Unreachable Clause.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;a style="font-style: italic;" href="http://blogs.sun.com/gbracha/entry/achieving_closure"&gt;Papa says&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, 'If you see it in &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.sun.com"&gt;THE SUN&lt;/a&gt;&lt;span style="font-style: italic;"&gt; it's so.'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Please tell me the truth; is there a Unreachable Clause?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"VIRGINIA O'HANLON."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;VIRGINIA, your Java friends are wrong. They have been confused by dynamic languages in this web services age. They do not believe except [what] they &lt;span style="font-weight: bold;"&gt;type&lt;/span&gt;. They think that nothing can be which is not fixable by their little type declarations. In this great universe of ours the source is a key artifact, and using ant, javac, and lots of developer intellect, you can create a boundless platform (in source and in size), and be joyous  by our intelligence capable of grasping the whole of truth and knowledge.&lt;br /&gt;&lt;br /&gt;Yes, VIRGINIA, there is a Unreachable Clause. It exists as certainly as do generics, primitive types, exceptions and inner classes, and you know that they are bound to give to your code its highest beauty and joy. Alas! How dreary would be the world if there were no Unreachable Clause! It would be as dreary as if there were no &lt;strike&gt; java.lang.Object &lt;/strike&gt; Smalltalk. There would be no childlike faith in type systems, no runtime errors, no exceptions to make tolerable this existence. We should have no enjoyment, no &lt;a href="http://duimovich.blogspot.com/2006/08/pure-programming-joy.html"&gt;programming joy&lt;/a&gt;. The eternal light which complex type systems fills in programmer's heads would be extinguished.&lt;br /&gt;&lt;br /&gt;Not believe in Unreachable Clause! You might as well not believe in Java! You might get your papa to hire men to watch in all the JSRs in the JCP to catch the Unreachable Clause, but even if they did not see Unreachable Clause coming down, what would that prove? Nobody sees the Unreachable Clause, but that is no sign that there is no Unreachable Clause. The most real things in the world are those that neither children nor men can subclass or instantiate. Have you ever declared an unchecked exception ? Of course not, but that's no proof that they are not there. Nobody can conceive or imagine all the wonders there are untyped and instantiatable in the world.&lt;br /&gt;&lt;br /&gt;You tear apart the JVM and see what makes the ticking inside, but there is a veil covering the unseen world which not the strongest developer, nor even the united strength of all the type theorists that ever lived, could tear apart. Only faith, fancy, syntax, types, question marks and &lt;&gt; brackets can push aside that curtain and view and picture the supernal beauty and glory beyond. Is it all real? Ah, VIRGINIA, in all this world there is nothing else real and abiding. No Unreachable Clause! Thank &lt;a href="http://blogs.sun.com/jag/"&gt;GOD&lt;/a&gt;! that Unreachable lives, and it will live forever even if you cannot reach it. A thousand years from now, nay, ten times ten thousand years from now, Unreachable will continue to make glad the heart of developers.&lt;br /&gt;&lt;br /&gt;The Editor of SRR&lt;br /&gt;&lt;br /&gt;p.s. With this, I have received closure. It's not what I expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115824923448054978?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115824923448054978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115824923448054978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115824923448054978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115824923448054978'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/09/yes-virginia-there-is-unreachable.html' title='Yes, Virginia there is an Unreachable Clause.'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115705902650647794</id><published>2006-08-31T16:56:00.000-04:00</published><updated>2006-10-23T19:28:54.795-04:00</updated><title type='text'>Realtime Java</title><content type='html'>Today &lt;a href="http://www-306.ibm.com/common/ssi/fcgi-bin/ssialias?subtype=ca&amp;infotype=an&amp;appname=iSource&amp;supplier=897&amp;letternum=ENUS206-210"&gt;IBM announced&lt;/a&gt; the availability of our &lt;a href="http://www-306.ibm.com/software/webservers/realtime/"&gt;J9 based realtime Java VM&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;The product is called Websphere Realtime and is a full Java 5 runtime which also contains a full implmentation of &lt;a href="http://www.jcp.org/en/jsr/detail?id=1"&gt;RTSJ JSR1&lt;/a&gt; in addition to a true, realtime garbage collector based on IBM research's &lt;a href="http://domino.research.ibm.com/comm/research_projects.nsf/pages/metronome.index.html"&gt;Metronome technology.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The technology is pretty impressive (ms level max pause with guaranteed utilization) and goes along way in making Java useable in complex time critical applications.&lt;br /&gt;&lt;br /&gt;Being a full J2SE means it won't fit on my mindstorms robot yet, I would have to do a J2ME version (in my copious spare time) &lt;sigh&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115705902650647794?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115705902650647794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115705902650647794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115705902650647794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115705902650647794'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/08/realtime-java.html' title='Realtime Java'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115699629015138677</id><published>2006-08-30T23:35:00.000-04:00</published><updated>2006-10-23T19:28:54.736-04:00</updated><title type='text'>[|] == Powered by Smalltalk</title><content type='html'>In reference to the &lt;a href="http://www.cincomsmalltalk.com/userblogs/sticBlog/blogView?showComments=true&amp;entry=3334294342"&gt;new suggested smalltalk logo &lt;/a&gt;  &lt;b&gt;[|]&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;I like it and given &lt;a href="http://duimovich.blogspot.com/2006/08/robot-fetch-my-beer-please.html"&gt;my recent actitities&lt;/a&gt;, it's nice it has some similarities to the &lt;a href="http://www.computeruser.com/resources/dictionary/emoticons.html"&gt;emoticon for robot&lt;/a&gt;  ( &lt;b&gt;[:|]&lt;/b&gt;.  ). &lt;br /&gt;&lt;br /&gt;My only question is how to search for it in &lt;a href="http://www.google.com/search?&amp;q=%22[|]%22"&gt;google&lt;/a&gt; or any of the others ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115699629015138677?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115699629015138677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115699629015138677' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115699629015138677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115699629015138677'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/08/powered-by-smalltalk.html' title='[|] == Powered by Smalltalk'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115610884055806850</id><published>2006-08-20T17:20:00.000-04:00</published><updated>2006-10-23T19:28:54.607-04:00</updated><title type='text'>Insane objects</title><content type='html'>&lt;a href="http://photos1.blogger.com/hello/101/11329/1024/insane.jpg"&gt;&lt;img style="border: 1px solid rgb(0, 0, 0); margin: 2px;" src="http://photos1.blogger.com/hello/101/11329/400/insane2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Insane objects... (click on pic to see context).&lt;br /&gt;&lt;br /&gt;Why yes, it *is* software from a toy company, how did you know ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115610884055806850?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115610884055806850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115610884055806850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115610884055806850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115610884055806850'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/08/insane-objects_115610884055806850.html' title='Insane objects'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115602521351620616</id><published>2006-08-19T17:46:00.000-04:00</published><updated>2006-10-23T19:28:54.417-04:00</updated><title type='text'>It's a boy !</title><content type='html'>Our first robot came to life yesterday. So far it can move around, say things and basically do some simple things. The graphics programming tool is usable by my 9 year old son with no help from me which is pretty cool. Lest you all think we're robot geniuses by mistake, let it be known than the robot pictured is the exact starter configuration they have you build. We just followed instructions and here he is. No name yet but I'm thinking it will be something like &lt;em&gt;&lt;strong&gt;destructo&lt;/strong&gt;&lt;/em&gt; ! &lt;a href="http://photos1.blogger.com/blogger/3388/2583/640/IMGP3489.jpg"&gt;&lt;img style="display: block; text-align: center;" alt="" src="http://photos1.blogger.com/blogger/3388/2583/320/IMGP3489.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next up will be pinchers and some sensors. I will also be screwing around with the bluetooth interface to see if we can get my cheap bluetooth usb dongle and the NXT development kit talking. I can get them talking to each other via the bluetooth software that came with the USB card but I cannot download programs from inside the development environment via BT.... Given they actually have a &lt;a href="http://mindstorms.lego.com/Overview/Bluetooth.aspx"&gt;compatibility list&lt;/a&gt; I'd say the Mindstorm NXT seems to be &lt;a href="http://www.vialist.com/users/jgarbers/NXTBluetoothCompatibilityList"&gt;picky about bluetooth&lt;/a&gt;. Standards eh ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115602521351620616?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115602521351620616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115602521351620616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115602521351620616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115602521351620616'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/08/its-boy.html' title='It&apos;s a boy !'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115559668596868474</id><published>2006-08-14T18:54:00.000-04:00</published><updated>2006-10-23T19:28:54.359-04:00</updated><title type='text'>robot, fetch my beer please...</title><content type='html'>&lt;a href="http://mindstorms.lego.com/"&gt;&lt;img style="display: block; text-align: center;" alt="" src="http://photos1.blogger.com/blogger/3388/2583/320/mindstorm.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First we will tune our abilities with "bump into wall and turn" or "spin around" or maybe even "wave back when we say hi" but I'm sure   eventually, with our new found robot capabilities, my son and I will be taking over the world!&lt;br /&gt;&lt;br /&gt;Have to investigate the &lt;a href="http://mindstorms.lego.com/Overview/NXTreme.aspx"&gt;developer kits&lt;/a&gt;, and do a port of the J9 virtual machine, and then, a robot beer fetcher will be within my reach!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115559668596868474?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115559668596868474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115559668596868474' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115559668596868474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115559668596868474'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/08/robot-fetch-my-beer-please.html' title='robot, fetch my beer please...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115446796659598554</id><published>2006-08-01T17:22:00.000-04:00</published><updated>2006-10-23T19:28:54.302-04:00</updated><title type='text'>Pure programming joy.</title><content type='html'>&lt;a href="http://inside-swt.blogspot.com/2006/07/kids-these-days.html"&gt;Steve gets it&lt;/a&gt;. &lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;Joel gets it&lt;/a&gt;. and then &lt;a href="http://www.joelonsoftware.com/items/2006/08/01.html"&gt;gets it again.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Make sure you read Joel's to the end and then follow his reference to the Kindom of Nouns - well worth the click it will cost you to get there.&lt;br /&gt;&lt;br /&gt;So, I really don't need to explain these things ... they did fine, but I want to add my two cents worth ...&lt;br /&gt;&lt;br /&gt;First penny: if you're looking for a job implementing programming language runtimes and you &lt;span style="font-style: italic;"&gt;only &lt;/span&gt;know Java... umm... I suggest you learn a couple more languages starting with C/C++ (so you know how programming carelessly can really hurt hurt hurt you) and then Scheme (so you learn about recursion, first class functions, continuations, and programs as data) and then finally Smalltalk (so you can experience true object oriented programming and pure programming joy).&lt;br /&gt;&lt;br /&gt;The downside is you may be spoiled for lesser programming environments, and become surly and depressed once you understand the sad truth of the programming language landscape today.  It's not all doom and gloom however, some people are doing something about it like  &lt;a href="http://vistasmalltalk.wordpress.com/"&gt;this guy.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second penny: Steve, Joel... yes, better employment opportunity, better programmers come from knowing other languages but you missed one thing, fun ... we could also have pure programming joy too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115446796659598554?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115446796659598554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115446796659598554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115446796659598554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115446796659598554'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/08/pure-programming-joy.html' title='Pure programming joy.'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115357595436503889</id><published>2006-07-22T09:37:00.000-04:00</published><updated>2006-10-23T19:28:54.243-04:00</updated><title type='text'>old smalltalkers considered useful</title><content type='html'>Thank you  &lt;a href="http://www.josephmoore.net/2006/05/visual-studio-ruby-on-rails-and-old.html"&gt;Joseph Moore&lt;/a&gt; for your endorsement of &lt;a href="http://www.josephmoore.net/2006/05/visual-studio-ruby-on-rails-and-old.html"&gt;old Smalltalkers.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Young whipper-snappers out there, take note: if you ever here some Old Dude say the words "in Smalltalk you could blah blah blah" or "In VisualWorks you could yada yada", &lt;span style="font-style: italic;"&gt;spend as much time with this person as possible&lt;/span&gt;.  "&lt;br /&gt;&lt;br /&gt;Yes young grasshopper, listen to my rantings  (thanks Joe, check's in the mail!)&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.josephmoore.net/2006/05/visual-studio-ruby-on-rails-and-old.html"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115357595436503889?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115357595436503889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115357595436503889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115357595436503889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115357595436503889'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/07/old-smalltalkers-considered-useful.html' title='old smalltalkers considered useful'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115300482411077739</id><published>2006-07-15T18:49:00.000-04:00</published><updated>2006-10-23T19:28:54.186-04:00</updated><title type='text'>I don't understand...</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;a href="http://www.sympatico.ca/"&gt;Sympatico &lt;/a&gt;(my ISP) sent me an &lt;a href="http://service.sympatico.ca/index.cfm?method=content.view&amp;category_id=75&amp;amp;content_id=468"&gt;&lt;span style="font-weight: bold;"&gt;email &lt;/span&gt;&lt;/a&gt;telling me that &lt;/span&gt;&lt;span style="font-size:100%;"&gt;my "&lt;b&gt;Sympatico e-mailbox is almost full" &lt;/b&gt;and that perhaps I should &lt;span style="font-weight: bold;"&gt;actually read my email &lt;/span&gt;so that my mailbox doesn't fill up.&lt;br /&gt;&lt;br /&gt;Thanks for the tip.  Here's one back - &lt;span style="font-style: italic;"&gt;don't send me email to tell me my email box is full! &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115300482411077739?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115300482411077739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115300482411077739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115300482411077739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115300482411077739'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/07/i-dont-understand.html' title='I don&apos;t understand...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115229565360199924</id><published>2006-07-07T13:55:00.000-04:00</published><updated>2006-10-23T19:28:54.129-04:00</updated><title type='text'>I wonder if we'll see him online...</title><content type='html'>I have one, &lt;a href="http://mikew.ca/wp/?p=160"&gt;Mike has one&lt;/a&gt; and now &lt;a href="http://gizmodo.com/gadgets/portable-media/nintendo-gives-ds-lite-brain-age-to-president-bush-for-60th-birthday-185602.php"&gt;US president Bush has one.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My son can probably take him in &lt;a href="http://www.gamespot.com/ds/driving/mariokartds/index.html"&gt;Super Mario Kart&lt;/a&gt; ... I wonder if we'll see POTUS online via the &lt;a href="http://www.nintendowifi.com/global/index.jsp?locale=en_CA"&gt;Nintendo WiFi Connection ?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115229565360199924?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115229565360199924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115229565360199924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115229565360199924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115229565360199924'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/07/i-wonder-if-well-see-him-online.html' title='I wonder if we&apos;ll see him online...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115229020403184702</id><published>2006-07-07T12:11:00.000-04:00</published><updated>2006-10-23T19:28:54.071-04:00</updated><title type='text'>PowerpointUnit... the end of presentations as we know them</title><content type='html'>Steve Loughran making arguments for increased testing required for WS*.* interop was quoted in a few places with his well turned phrase "strategic glue for a planet". As least thats how I happened on his blog entry.  Yes blah blah, more testing is good but I think the real innovation Steve made was his idea for empowering architects via PowerpointUnit... &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.1060.org/blogxter/entry?publicid=5DCD3E87598A94B120A73CD0F977AFBB"&gt;"we could bring the tools to the architects with &lt;i&gt;PowerPointUnit&lt;/i&gt; being a test framework combining powerpoint macros and the truth-resolution feature of the semantic web" &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;he nailed it...  Made me laugh for sure and &lt;span style="font-weight: bold;"&gt;PowerpointUnit &lt;/span&gt;gets my vote for the killer app that would most change my life. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115229020403184702?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115229020403184702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115229020403184702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115229020403184702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115229020403184702'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/07/powerpointunit-end-of-presentations-as.html' title='PowerpointUnit... the end of presentations as we know them'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115202843509155361</id><published>2006-07-04T11:44:00.000-04:00</published><updated>2006-10-23T19:28:54.013-04:00</updated><title type='text'>PHP, Smalltalk and Java... sorted out</title><content type='html'>The other day I needed to sort something... doesn't matter what, but it consisted of a collection of key/value pairs... The keys were strings and the values were integer strings (strings whose values were actually integers). The code happened to be in PHP and I had been outputting unsorted results. This started to bother me so I thought "how hard could it be to sort" ?&lt;br /&gt;&lt;br /&gt;So, googled the API... (and found it's call &lt;span style="font-family: courier new;"&gt;sort &lt;/span&gt;... duh!) and inserted a sort call into my code ...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt; &lt;span style="font-family:courier new;"&gt;   sort ($table);&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;but nope, didn't work. It sorted by values but it didn't keep the keys like I needed but looky here, PHP has a rich library and a bunch of friendly sort routines including &lt;span style="font-weight: bold;font-family:courier new;" &gt;asort&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;which does exactly what I wanted - it sorts the values and keeps the keys which were indexing those values... sounds perfect ? sort of ... I also wanted it sorted from into descending values which was no problem either,  &lt;span style="font-weight: bold;font-family:courier new;" &gt;arsort &lt;/span&gt;to  the rescue, except one problem.  It returned results that looked like like  "30,20,100,1" which makes sense if you remember what I said about values being strings which looked like integers. These strings also had some leading blanks on the values due to being read from a file so they sorted kind of funny including the problem where 100 is between 20 and 1. One last tweak to the rescue, PHP has an option on the sort functions to treat values like integers.&lt;br /&gt;&lt;br /&gt;The final code added was&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;    arsort ($table, SORT_NUMERIC);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;pretty sweet and not too much work for me.  So for reference, a simple example in PHP looks like this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$a = array ("a"=&gt;"1","b"=&gt;"2","c"=&gt;"3","d"=&gt;"4","e"=&gt;"100");&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;arsort ($a,&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;SORT_NUMERIC&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;) &lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Every one knows Smalltalk is my favourite language, it's just done right... so how would it compare ?&lt;br /&gt;&lt;br /&gt;Lets start with a table in array form which looks like this. I  set it up so it matches PHP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;| table |&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;table := #(('a' '1')('b' '2')('c' '3')('d' '4')('e' '100')). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sorted as strings ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(table asSortedCollection: [ :a :b |(a at: 2) &gt; (b at: 2)]) asArray &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;-&gt;  (('d' '4') ('c' '3') ('b' '2') ('e' '100') ('a' '1'))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family: times new roman;font-family:arial;" &gt;sorted as numbers ... &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(table asSortedCollection: [ :a :b |  (a at: 2)  asNumber &gt; (b at: 2) asNumber]) asArray  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;-&gt;  (('e' '100') ('d' '4') ('c' '3') ('b' '2') ('a' '1'))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Exactly what I wanted - properly sorted arrays, not too much code.&lt;br /&gt;&lt;br /&gt;How about our old friend Java ? ... sigh ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;String[][] anArray = {{ "a", "1"},{"b","2"},{"c","3"},{"d","4"}, {"e","100"}};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and a print helper&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;private static void printArray(String[][] anArray, String message) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        System.out.println(message);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        for (String[] i : anArray) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            System.out.println(i[0] + " " + i[1]);&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;    }&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;some snippets. Below is my first try, sure it compiles but it doesn't work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;    System.out.println("This sort will runtime error... but compiles just fine.");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Arrays.sort(anArray);   // type safety ? ha ! still get a runtime error ... &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    printArray(anArray, "Sorted using Arrays.sort no, extra comparator.");&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Yes, I get a runtime error in the library when it does a cast to Comparable. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.String; incompatible with &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;java.lang.Comparable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    at java.util.Arrays.mergeSort(Arrays.java:1171)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    at java.util.Arrays.sort(Arrays.java:1095)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    at stringsort.Test.main(Test.java:37)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Indeed, type safety is not a catch all, runtime errors are still possible (remember that kids when you try to tell your boss it compiled so it's gotta work). In fact, don't forget to mention cases like this to people who don't understand &lt;span style="font-family: courier new;"&gt;#doesNotUnderstand:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To fix, you add a comparator. Pretty simple (but blocks are simpler).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; class CompareAsStrings implements Comparator&lt;string[]&gt; {&lt;/string[]&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            public int compare(String[] a, String[] b) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                return  b[1].compareTo(a[1]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            }&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;} ;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and the code looks like this&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Arrays.sort(anArray, new CompareAsStrings());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        printArray(anArray, "Sorted using CompareAsStrings");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;of course the output is string sorted (and wrong for what I want).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Sorted using CompareAsStrings&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;d 4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;c 3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;b 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;e 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;a 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;so instead of this, you add a compatator which converts to Integers.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        class CompareAsInts implements Comparator&lt;string[]&gt; {&lt;/string[]&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            public int compare(String[] a, String[] b) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                return new Integer(Integer.parseInt(b[1])).compareTo(new Integer (Integer.parseInt(a[1])));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            }&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and you finally get happy sorted values...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Sorted using CompareAsInts&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;e 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;d 4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;c 3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;b 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;a 1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Of course some bozo is gonna tell me that they would have created a class for the key/value pairs which would have implemented comparable and all would have been fine. Yes, and it would have been a page of code.&lt;br /&gt;&lt;br /&gt;So, what do you learn from this ... nothing really, just some random ranting about Java verbosity but if you're the lesson learning type...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesson #1  &lt;/span&gt; Wanna be agile ? Write less code, use a dynamic language like Smalltalk or PHP.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesson #2 &lt;/span&gt; Never trust the compiler despite how type safe it claims to be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115202843509155361?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115202843509155361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115202843509155361' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115202843509155361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115202843509155361'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/07/php-smalltalk-and-java-sorted-out.html' title='PHP, Smalltalk and Java... sorted out'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115202162081873510</id><published>2006-07-04T09:24:00.000-04:00</published><updated>2006-10-23T19:28:53.954-04:00</updated><title type='text'>happy birthday north america</title><content type='html'>It's a long weekend of birthdays...&lt;br /&gt;&lt;br /&gt;Last Saturday it was Canada Day, celebrating confederation, July 1, 1867.  Happy 139 Canada.&lt;br /&gt;&lt;br /&gt;Today, is Independence Day in the USA, celebrating  230 years since tea taxes enraged the people to form their own country (and some other reasons too).&lt;br /&gt;&lt;br /&gt;You may also be interested to know that Canadians owe some of their independence to the thrifty British and the warmongering Americans...&lt;br /&gt;&lt;br /&gt;In fact, the Canadian goverment web site &lt;a href="http://www.collectionscanada.ca/confederation/kids/h2-1260-e.html"&gt;confederation information for kids&lt;/a&gt;   teaches our kids that these very facts.&lt;br /&gt;&lt;br /&gt;I quote ...&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Meanwhile, Britain didn't want to have to pay for the cost of defending its colonies. It decided to encourage the colonies to join together, because the United States would be less likely to attack Canada if it were a self-governing country rather than separate colonies of Britain. The fear of the United States helped to strengthen the call for Confederation."&lt;/span&gt;&lt;br /&gt;from http://www.collectionscanada.ca/confederation/kids/h2-1260-e.html&lt;br /&gt;&lt;br /&gt;Thank you cheap British people and you Americans for the threat which helped encourage us Canadians into Confederation.&lt;br /&gt;One more thing, ummm, Americans, please don't &lt;a href="http://www.damninteresting.com/?p=492"&gt;plan to attack us &lt;/a&gt;&lt;a href="http://www.damninteresting.com/?p=492"&gt;again&lt;/a&gt;     and &lt;span style="font-weight: bold;"&gt;no &lt;/span&gt;quebec does &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;have the bomb despite what the &lt;a href="http://www.snpp.com/episodes/AABF09"&gt;simpsons say&lt;/a&gt;....&lt;br /&gt;&lt;br /&gt;Just us peaceful Canadians up here... Feel free to come up and join us for the fishing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115202162081873510?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115202162081873510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115202162081873510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115202162081873510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115202162081873510'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/07/happy-birthday-north-america.html' title='happy birthday north america'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115142583334906725</id><published>2006-06-27T12:26:00.000-04:00</published><updated>2006-10-23T19:28:53.883-04:00</updated><title type='text'>IBM Java Rocks....</title><content type='html'>Perhaps I'm biased (ok I am) but today IBM announced &lt;a href="http://www-03.ibm.com/press/us/en/pressrelease/19886.wss"&gt;performance leadership &lt;/a&gt;&lt;a href="http://www.spec.org/jbb2005/"&gt;SPECjbb2005 &lt;/a&gt;scores on new power efficient hardware using the most excellent Java 5 VM based on J9 .... sweet ...&lt;br /&gt;&lt;br /&gt;[update] Results &lt;a href="http://www.spec.org/jbb2005/results/res2006q3/jbb2005-20060623-00145.html"&gt;now on spec web site.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115142583334906725?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115142583334906725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115142583334906725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115142583334906725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115142583334906725'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/ibm-java-rocks.html' title='IBM Java Rocks....'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115115486338431823</id><published>2006-06-24T09:14:00.000-04:00</published><updated>2006-10-23T19:28:53.824-04:00</updated><title type='text'>Awww shucks...</title><content type='html'>It's nice to read, but now my hats don't fit, my huge expanded head bumps the door frames and my ego is bigger than ever...  even so ... thanks for the &lt;a href="http://tedogrady.blogspot.com/2006/06/john-duimovich.html"&gt;kind words&lt;/a&gt; Ted...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115115486338431823?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115115486338431823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115115486338431823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115115486338431823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115115486338431823'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/awww-shucks.html' title='Awww shucks...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115108011306238987</id><published>2006-06-23T11:38:00.000-04:00</published><updated>2006-10-23T19:28:53.769-04:00</updated><title type='text'>Not for secret agents...</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/3388/2583/640/IMGP2907.jpg"&gt;&lt;img style="display: block; text-align: center;" alt="" src="http://photos1.blogger.com/blogger/3388/2583/320/IMGP2907.jpg" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;I saw this pen and one of the features in addition to a "Cushion Grip" was "Visible Ink".  Usually this kind of thing is reserved for listing features that no one else (aka a competitive advantage) has but all of my pens seem to have "visible ink" so that can't be it. Perhaps the "BiC Exact-Tip Roller" has a sister line of &lt;span style="font-style: italic;"&gt;Invisible Ink&lt;/span&gt; pens for secret agents and spies.All very curious except what they really mean is that you can see how much ink remains in the pen. Funny, the ubiquitous clear BiC pen has had “visible ink” for years and they never even thought to label it that way. Must be new marketing school graduates working at BiC these days...&lt;br /&gt;&lt;br /&gt;This technique reminds me of the trendy labels, companies add to food products which take advantage of consumers fear installed by the latest medical report ...  so for the record, this blog entry contains 0 % transfat,  0 calories, no caffeine and is written using visible fonts. All the other blogs make you fat, blind and may even keep you awake at night.  As an additional bonus, reading my blog with a glass of red wine will lower your cholesterol and make you happy.&lt;br /&gt;&lt;br /&gt;You're welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115108011306238987?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115108011306238987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115108011306238987' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115108011306238987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115108011306238987'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/not-for-secret-agents.html' title='Not for secret agents...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115048253469053306</id><published>2006-06-16T10:53:00.000-04:00</published><updated>2006-10-23T19:28:53.715-04:00</updated><title type='text'>VEE'06</title><content type='html'>I was asked to be on a &lt;a href="http://research.ihost.com/vee/vee06/panel.html"&gt;panel &lt;/a&gt;at &lt;a href="http://www.veeconference.org/"&gt;VEE'06&lt;/a&gt;  on &lt;a href="http://en.wikipedia.org/wiki/Virtualization"&gt;Virtualization &lt;/a&gt;which something I like to do once in a while. First, it's just nice to be asked and second it can be fun and interesting when you get to meet smart people with similar interests.  The is often the upside of being able to drink beer afterwards with some of the smartest people on the planet so it's all good.&lt;br /&gt;&lt;br /&gt;The guidance from the moderator on the details of the topic of the panel was purposely thin and no definition of virtualization was given which suprisingly worked out really well as the panel was well represented by people who do or have done various language virtual machines (me, Dave Tartidi, &lt;span style=""&gt;Christopher Vick&lt;/span&gt;) and those who work on hardware virtual machines (like Xen (&lt;span class="SpellE"&gt;&lt;span style=""&gt;Leendert&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; van &lt;span class="SpellE"&gt;Doorn)&lt;/span&gt;&lt;/span&gt; and VMWare (&lt;span class="SpellE"&gt;&lt;span style=""&gt;Pratap&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt; &lt;span class="SpellE"&gt;Subrahmanyam)&lt;/span&gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;So even though it seems like we're a widely different group, in fact turns out we're all in the &lt;a href="http://en.wikipedia.org/wiki/Level_of_abstraction"&gt;"level of indirection"&lt;/a&gt; business which is a way of saying we're inserting ourselves in between the user code and the hardware or between user and the operating system for some perceived benefit (safety, isolation, security or ego).&lt;br /&gt;&lt;br /&gt;One issue mentioned by a member of the audience was the increasing number of levels of indirection inserted with virtual execution of the operating systems, device drives and additional language VMs on top. The panel was sympathetic however clearly felt indirections were worth it... you know should be ok cause we know what were doing :). Personally, my view is that many of the language virtual machine functions (garbage collection or JIT) will migrate into the operating system and allow for more performance and the reduction of levels of indirection. You can see this clearly in what microsoft is doing, perhaps the CLR is not "part of the OS" or maybe it is but the &lt;a href="ftp://ftp.research.microsoft.com/pub/tr/TR-2005-135.pdf"&gt;direction&lt;/a&gt; is clear, the OS will eventually be all managed code and the benefit will be increased security and reliability.&lt;br /&gt;&lt;br /&gt;My favourite comment however came from &lt;a href="http://research.microsoft.com/%7Edtarditi/"&gt;David Tarditi&lt;/a&gt; who said the opportinity here in the virtualization community is to try and solve problems by &lt;span style="font-style: italic;"&gt;changing &lt;/span&gt;the problem. So, instead of assuming you have a processor which can do only the same old same old, you invent a new processor, architecture, or compute model which simplies your problem and you simulate with a virtualized environment.   Finally, a researcher who thinks researchers should be doing "crazy" research instead of tacking in another 2% on the latest spec benchmarks. I agree, the sky is the limit, all you have to do is reach ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Virtualization"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115048253469053306?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115048253469053306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115048253469053306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115048253469053306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115048253469053306'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/vee06.html' title='VEE&apos;06'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-115016960390160751</id><published>2006-06-12T23:04:00.000-04:00</published><updated>2006-10-23T19:28:53.659-04:00</updated><title type='text'>Just asking for it...</title><content type='html'>I know better that to replace a &lt;a href="http://fedora.redhat.com/"&gt;perfectly working Linux install&lt;/a&gt; with a different version of &lt;a href="http://www.ubuntu.com/"&gt;Linux&lt;/a&gt;&lt;span style="font-style: italic;"&gt;   for no reason&lt;/span&gt; other than I felt like it.&lt;br /&gt;&lt;br /&gt;So, tonight I took my server, copied a few megabytes of random crap off of it and installed Ubuntu 6.06 LTS . No fear ... cause if I can't get back to a working system then I deserve what I get. In my view,  even with the reliability of Linux, eventually even my lighty loaded server will need rebuild, or reinstall with a new version ... so why wait ?&lt;br /&gt;&lt;br /&gt;With my freshly burned CD in hand, I didn't even flinch (much) when I inserted the CD and pressed reboot. The install screen offered me some strange options like "Install to the hard disk" vs "Install a LAMP server" ... hmm, doesn't the lamp server get installed on the hard disk ?  Oh, well. I decided to go for the LAMP server install as I needed an apache server and php. After selecting some defaults, it just installed in 10 minutes and presented me with a login prompt. The "LAMP" install is a console install so everything is old school TTY.&lt;br /&gt;&lt;br /&gt;Next I added SSH and Samba using some apt-get install action. I also had to set up the static IP (default is DHCP) and I also added my virtual sites and restored my html files and voila, I'm back in business. No fuss, no muss. Kind of disappointed ... no tales of woe or sad stories requiring heroics, new hardware or reinstalls or anything...&lt;br /&gt;&lt;br /&gt;New Linux installed, no problems... nothing to see here, move along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-115016960390160751?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/115016960390160751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=115016960390160751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115016960390160751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/115016960390160751'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/just-asking-for-it.html' title='Just asking for it...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-114937893019565923</id><published>2006-06-03T19:08:00.000-04:00</published><updated>2006-10-23T19:28:53.602-04:00</updated><title type='text'>Java int math blows...</title><content type='html'>A &lt;a href="http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html"&gt;recent post&lt;/a&gt; by Google software developer Josh Bloch explains how a bug in the jdk went undetected for 9 years even after the perfectly good code was copied from John Bentley programming pearls.&lt;br /&gt;&lt;br /&gt;mid = (low + high) / 2;&lt;br /&gt;&lt;br /&gt;which for large values of low/high (as in huge collections) it would overflow and fail. Since we finally have huge machines and huges indexes, this gives Java math an opportunity to fail all over the place.&lt;br /&gt;&lt;br /&gt;Turns out the Smalltalk binary search in my image has nearly identical code (gee, makes you think, did some Java programmer derive their class libraries from Smalltalk ? but I digress)... but I'll have you know that the Smalltalk version does not have the bug. It's simple, Smalltalk math works. Java math blows.&lt;br /&gt;&lt;br /&gt;Lucy wanted some 'splaining ... so ...&lt;br /&gt;&lt;br /&gt;If you have a language where a &amp;lt; b and (a+b)/2 is not greater or equal to a and less than b, then you're screwed by this kind of bug. The overflow is not caught and you are at the mercy of twos compliement math on ints. Boo hoo for you - you chose Java or C or many others... but if you chose Smalltalk ... smile and be happy - math works in Smalltalk. yes... I said works. It doesn't work in Java or C... (ok it works just not well).&lt;br /&gt;&lt;br /&gt;Some sample code ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;package test;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class BrokenMath {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public static void main(String[] args) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;testIntMath(1,100);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;testIntMath(Integer.MAX_VALUE - 10, Integer.MAX_VALUE);&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;private static void testIntMath(int low, int high) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int mid;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mid = (low+high)/2;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println ();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println ("Testing Low " + low + " high " + high);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println ("Is low &amp;lt; high ? " + (low &amp;lt; high));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println ("what is mid ? " + (mid));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println ("Is mid &amp;gt;= low ? " +(mid &amp;gt;= low));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.out.println ("Is mid &amp;lt; high ? " +(mid &amp;lt; high));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (!(mid &amp;gt;= low)) System.out.println ("Java int math blows");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (!(mid &amp;lt; high)) System.out.println ("Java int math blows");&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;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and you get something like this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Testing Low 1 high 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is low &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;what is mid ? 50&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;gt;= low ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Testing Low 2147483637 high 2147483647&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is low &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;what is mid ? -6&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;gt;= low ? false&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Java int math blows&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;in Smalltalk the equivalent ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;testLow: low high: high&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;| mid |&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mid := (low + high) // 2.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transcript cr.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transcript cr; show: 'Testing Low ' , low printString , ' high ' , high printString.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transcript cr; show: 'Is low &amp;lt; high ? ' , (low &amp;lt; high) printString.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transcript cr; show: 'what is mid ? ' , mid printString.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transcript cr; show: 'Is mid &amp;gt;= low ? ' ,(mid &amp;gt;= low) printString.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Transcript cr; show: 'Is mid &amp;lt; high ? ' ,(mid &amp;lt; high) printString.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(mid &amp;gt;= low) ifFalse: [ Transcript cr; show: 'Smalltalk int math blows'].&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;(mid &amp;lt; high) ifFalse: [ Transcript cr; show: 'Smalltalk int math blows']&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;self testLow: 1 high: 100.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;self testLow: SmallInteger largest - 10 high: SmallInteger largest&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;Testing Low 1 high 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is low &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;what is mid ? 50&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;gt;= low ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Testing Low 1073741813 high 1073741823&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is low &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;what is mid ? 1073741818&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;gt;= low ? true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Is mid &amp;lt; high ? true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You see ! Smalltalk math works, Java math does not. Java blows at math.&lt;br /&gt;&lt;br /&gt;And yeah, if you could catch the overflow (thank you C#) then you could detect this case but don't look for Java for help there either. &lt;span style="font-weight: bold;"&gt;It blows.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-114937893019565923?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/114937893019565923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=114937893019565923' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114937893019565923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114937893019565923'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/java-int-math-blows.html' title='Java int math blows...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-114937556649818901</id><published>2006-06-03T18:41:00.000-04:00</published><updated>2006-10-23T19:28:53.544-04:00</updated><title type='text'>we're spoiled ...</title><content type='html'>It's easy to get spoiled when you're a software developer these days. Loads of RAM, fast processors, new machines, freshly installed operating systems and modern conveniences like plug and play hardware and wireless networks make it simple these days to futz around with stuff and it all *just works*. It wasn't always that way and if you were around for the bad old days say 8 or so years ago when windows 95 ruled the earth, then you'll know what I mean.&lt;br /&gt;&lt;br /&gt;I took a refresher course just this weekend and realized how much better these things are now that in days of old (reminder to you &lt;span id="misp_compose_1" class="hm"&gt;youngins&lt;/span&gt;, we used to walk 5 miles to school and it was uphill &lt;span style="font-weight: bold;"&gt;both ways&lt;/span&gt;... and yes, we &lt;span style="font-weight: bold;"&gt;liked&lt;/span&gt; it and didn't complain once)...&lt;br /&gt;&lt;br /&gt;My refresher turned out to be a try at rebuilding a windows 95 (ahem) server machine which was being used as a gateway, printer server and &lt;span id="misp_compose_3" class="hm"&gt;VPN&lt;/span&gt; client providing service to a bunch of office PCs. This was the most critical piece of equipment and there was no documentation, no anything... and it died. Drivers ? dream on ... &lt;span id="misp_compose_4" class="hm"&gt;config&lt;/span&gt; files or notes ... um no. It had three printers, one parallel (thank god) and two serial... Remember baud, parity, flow control ? Not quite as simple as plug-and-play networking, you either know the details or you cannot connect.&lt;br /&gt;&lt;br /&gt;So, off we go and first things first... remember &lt;span id="misp_compose_6" class="hm"&gt;Wingate&lt;/span&gt; ? this must go. Replaced with a dirt cheap router/gateway which does everthing you need, stuff like &lt;span id="misp_compose_7" class="hm"&gt;DHCP&lt;/span&gt;, VPN routing, firewall with no fuss no muss. Removed all the &lt;span id="misp_compose_8" class="hm"&gt;wingate&lt;/span&gt; hacks from each client to make it &lt;span style="font-style: italic;"&gt;normal&lt;span style="font-weight: bold;"&gt;  &lt;/span&gt;&lt;/span&gt;and get back to connectivity. Now the printers... no idea what baud rate the old printers needed and no, getting a new printer is not possible as these were specialty printers and no replacements exist. So, we waste this special expensive paper trying to get a simple non garbled ticket to print ... all day my tale of woe lasted.&lt;br /&gt;&lt;br /&gt;The fix in the end was we found a written post-it that said 4800 on it... Guessing that this was the baud rate and with some additional experiments it worked and printing was happy again.&lt;br /&gt;&lt;br /&gt;I just don't know how small customers with 10 year old computers do it. No patches, so software and no way to fix simple problems due to lack of drivers, updates or anything and the faded history of time means all past configuration know how is gone.&lt;br /&gt;&lt;br /&gt;The funny thing, is when we finally checked all the configurations, we noticed the server has a whopping 128M and the clients all on 64M and they worked *fine*... they even boot way faster than my new highend machine running Windows XP...&lt;br /&gt;&lt;br /&gt;all I can say after this afternoons mess is we're spoiled...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-114937556649818901?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/114937556649818901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=114937556649818901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114937556649818901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114937556649818901'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/were-spoiled.html' title='we&apos;re spoiled ...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-114919536923815170</id><published>2006-06-01T16:51:00.000-04:00</published><updated>2006-10-23T19:28:53.487-04:00</updated><title type='text'>Saying it twice ...</title><content type='html'>In a recent &lt;a href="http://blogs.sun.com/roller/page/jonathan?entry=phase_2"&gt;blog entry&lt;/a&gt; Sun's CEO Jonathon Schwartz said, in reference to their recent &lt;a href="http://www.cio.com/blog_view.html?CID=21648"&gt;layoff announcement&lt;/a&gt; (Sun cutting 5000 jobs).&lt;br /&gt;&lt;br /&gt;"while continuing to reduce redundant or duplicative functions."&lt;br /&gt;&lt;br /&gt;I'm not actually sure the statement itself is redundant or duplicative but it illustrates the need well. Way to go Jonathon !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-114919536923815170?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/114919536923815170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=114919536923815170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114919536923815170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114919536923815170'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/saying-it-twice.html' title='Saying it twice ...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-114919493618162005</id><published>2006-06-01T16:34:00.000-04:00</published><updated>2006-10-23T19:28:53.431-04:00</updated><title type='text'>Satan not welcome...</title><content type='html'>The recent brouhaha over the &lt;a href="http://radar.oreilly.com/archives/2006/05/web_20_service_mark_controvers.html"&gt;Web 2.0 trademark &lt;/a&gt;reminded me of my feelings towards the whole x.0 phenomenon. You know, the technique where you tack on 2.0 or 3.0 or hmm, all the way to &lt;span style="font-weight: bold;"&gt;"Web X"... &lt;/span&gt;to coin the next hot thing.&lt;br /&gt;&lt;br /&gt;Anyhow, I've seen few decriptions of what Web 2.0 really means and one of my favourites is simple - James Snell's  &lt;a href="http://www-03.ibm.com/developerworks/blogs/page/jasnell?entry=chmod_777_web"&gt;"chmod 777 " &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I like it but gee, if it's a &lt;a href="http://www.readwriteweb.com/"&gt;read-write web&lt;/a&gt; isn't it &lt;span style="font-weight: bold;"&gt;chmod 666&lt;/span&gt; ? If it's a &lt;span style="font-style: italic;"&gt;rw and execute&lt;/span&gt; it's 777.&lt;br /&gt;&lt;br /&gt;I'm just saying...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-114919493618162005?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/114919493618162005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=114919493618162005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114919493618162005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114919493618162005'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/06/satan-not-welcome.html' title='Satan not welcome...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-114618771933299912</id><published>2006-04-27T21:28:00.000-04:00</published><updated>2006-10-23T19:28:53.377-04:00</updated><title type='text'>Fishing ...</title><content type='html'>&lt;div align="center"&gt;Gone fishing ...&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3388/2583/640/IMG_0493.0.jpg"&gt;&lt;img style="display: block; text-align: center;" alt="" src="http://photos1.blogger.com/blogger/3388/2583/320/IMG_0493.0.jpg" border="0" /&gt;&lt;/a&gt;  &lt;/div&gt; &lt;a href="http://picasa.google.com/blogger/" target="ext"&gt;&lt;img src="http://photos1.blogger.com/pbp.gif" alt="Posted by Picasa" style="border: 0px none ; padding: 0px; background: transparent none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="middle" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-114618771933299912?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/114618771933299912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=114618771933299912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114618771933299912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114618771933299912'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/04/fishing.html' title='Fishing ...'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24934006.post-114618655846457251</id><published>2006-04-27T21:09:00.000-04:00</published><updated>2006-10-23T19:28:53.262-04:00</updated><title type='text'>Hello World</title><content type='html'>&lt;p class="mobile-post"&gt;&lt;br /&gt;How many blogs start with hello world as a first post... probably lots and here's one more.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24934006-114618655846457251?l=duimovich.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://duimovich.blogspot.com/feeds/114618655846457251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24934006&amp;postID=114618655846457251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114618655846457251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24934006/posts/default/114618655846457251'/><link rel='alternate' type='text/html' href='http://duimovich.blogspot.com/2006/04/hello-world.html' title='Hello World'/><author><name>John Duimovich</name><uri>http://www.blogger.com/profile/04607559713630425477</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_hZW9ZAfu9Yg/SzpyVhJTLmI/AAAAAAAAS7Y/7Se5pbFukvo/S220/DSC_6729.JPG'/></author><thr:total>0</thr:total></entry></feed>
