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

<channel>
	<title>Pensieri di un lunatico minore &#187; Programming</title>
	<atom:link href="http://blog.amber.org/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.amber.org</link>
	<description>Thoughts of a minor lunatic</description>
	<pubDate>Tue, 16 Jun 2009 20:00:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Ring of Perl</title>
		<link>http://blog.amber.org/2008/12/04/the-ring-of-perl/</link>
		<comments>http://blog.amber.org/2008/12/04/the-ring-of-perl/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 15:15:32 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/?p=3583</guid>
		<description><![CDATA[	I see a post entitled Perl 5 Programmers Are Dying, and all I can think of is The Ring. Odd, eh?

 ]]></description>
			<content:encoded><![CDATA[	<p>I see a post entitled <a href="http://use.perl.org/~Ovid/journal/38018?from=rss">Perl 5 Programmers Are Dying</a>, and all I can think of is <a href="http://www.imdb.com/title/tt0298130/">The Ring</a>. Odd, eh?</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/12/04/the-ring-of-perl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Obama campaign needs talented geeks</title>
		<link>http://blog.amber.org/2008/09/27/obama-campaign-needs-talented-geeks/</link>
		<comments>http://blog.amber.org/2008/09/27/obama-campaign-needs-talented-geeks/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 00:17:33 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/?p=3304</guid>
		<description><![CDATA[	If you&#8217;ve got talent and time on your hands:
	The Obama campaign&#8217;s grassroots movement is supported by the best data management in politics.
	The Obama Data team is looking for data-savvy supporters to join our team as Data Fellows for the last weeks of the campaign. The position is full time through November 4th.
	Data Fellows will be [...]]]></description>
			<content:encoded><![CDATA[	<p>If you&#8217;ve got talent and time on your hands:</p>
	<p><blockquote>The Obama campaign&#8217;s grassroots movement is supported by the best data management in politics.</p>
	<p>The Obama Data team is looking for data-savvy supporters to join our team as Data Fellows for the last weeks of the campaign. The position is full time through November 4th.</p>
	<p>Data Fellows will be required to attend an online training and will be expected to volunteer full-time in the state of their placement for three weeks. Data Fellows will also:<br />
<ul><li>Assist the voter file manager and data team with data processing, data compilation, or reporting needs</li><br />
<li>Assist the organizers with data-intensive tasks and projects</li><br />
<li>Help build this movement in any way they can</li></ul></blockquote></p>
	<p><a href="http://my.barackobama.com/page/s/datafellows">Apple online</a>.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/09/27/obama-campaign-needs-talented-geeks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speed freaks</title>
		<link>http://blog.amber.org/2008/07/20/speed-freaks/</link>
		<comments>http://blog.amber.org/2008/07/20/speed-freaks/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 01:19:24 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/?p=3013</guid>
		<description><![CDATA[	Other&#8217;s muse on the absurdity of those obsessed with speed. Like a meth addict, the use any possible rationale to justify their unhealthy obsession. My favorite is:
	
		&#8220;What do you mean my algorithm runs at O(n!)? It&#8217;s twice as fast as yours with this small test set&#8221;
	
	The number of times I&#8217;ve seen someone rant about how [...]]]></description>
			<content:encoded><![CDATA[	<p>Other&#8217;s muse on the <a href="http://davywybiral.blogspot.com/2008/07/speed-kiddies.html">absurdity of those obsessed with speed</a>. Like a meth addict, the use any possible rationale to justify their unhealthy obsession. My favorite is:</p>
	<blockquote>
		<p>&#8220;What do you mean my algorithm runs at O(n!)? It&#8217;s twice as fast as yours with this small test set&#8221;</p>
	</blockquote>
	<p>The number of times I&#8217;ve seen someone rant about how fast their new algorithm is&#8212;when running on an irrationally small sample&#8212;is uncountable. As I&#8217;ve said a million times:</p>
	<ol>
		<li>Make it work</li>
		<li>Make it right</li>
		<li>Make it fast enough</li>
	</ol>
	<ol>
		<li>Profit!
	<p>Seriously. Don&#8217;t put things in the wrong order, or you&#8217;ll never get anywhere.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/07/20/speed-freaks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>More Mosquito Lisp</title>
		<link>http://blog.amber.org/2008/06/06/more-mosquito-lisp/</link>
		<comments>http://blog.amber.org/2008/06/06/more-mosquito-lisp/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 13:55:26 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.amber.org/?p=2972</guid>
		<description><![CDATA[	Scott Dunlop writes about the transition of his work from Mosquito Lisp (MOSVM) to Wasp Lisp. One of the thing that I wanted to point out about my interest, though, was that it wasn&#8217;t strictly about it being a Lisp dialect. It&#8217;s more what that brings with it: flexibility. It&#8217;s a tight, very small, and [...]]]></description>
			<content:encoded><![CDATA[	<p>Scott Dunlop <a href="http://waspvm.blogspot.com/2008/06/surprised-by-loud-noises.html">writes about the transition of his work from Mosquito Lisp (MOSVM) to Wasp Lisp</a>. One of the thing that I wanted to point out about my interest, though, was that it wasn&#8217;t strictly about it being a Lisp dialect. It&#8217;s more what that brings with it: flexibility. It&#8217;s a tight, very small, and reasonable performing implementation that&#8217;s very flexible. It also comes with, to steal a phrase from Python, &#8220;batteries included&#8221;. This makes developing neat applications nearly trivial.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/06/06/more-mosquito-lisp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Close, but note quite close enough</title>
		<link>http://blog.amber.org/2008/06/04/close-but-note-quite-close-enough/</link>
		<comments>http://blog.amber.org/2008/06/04/close-but-note-quite-close-enough/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 21:03:02 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/?p=2966</guid>
		<description><![CDATA[	So today I was trying to debug some code, and for some reason, I couldn&#8217;t see what was wrong for a few seconds. Then, I realized that I had been typing lambada instead of lambda. Time to stop coding for the day.

 ]]></description>
			<content:encoded><![CDATA[	<p>So today I was trying to debug some code, and for some reason, I couldn&#8217;t see what was wrong for a few seconds. Then, I realized that I had been typing <code>lambada</code> instead of <code>lambda</code>. Time to stop coding for the day.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/06/04/close-but-note-quite-close-enough/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Uninformed commentary</title>
		<link>http://blog.amber.org/2008/06/02/uninformed-commentary/</link>
		<comments>http://blog.amber.org/2008/06/02/uninformed-commentary/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 20:59:02 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

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

		<guid isPermaLink="false">http://blog.amber.org/?p=2954</guid>
		<description><![CDATA[	One of the great things about the intertubes is that it allows people of all capabilities and skill sets to shoot off their mouth and make fools of themselves. Recently, Sho Fukamachi demonstrated the truly epic capability to not only miss the entire point, but demonstrate a nearly bottomless lack of knowledge of the area [...]]]></description>
			<content:encoded><![CDATA[	<p>One of the great things about the intertubes is that it allows people of all capabilities and skill sets to shoot off their mouth and make fools of themselves. Recently, <a href="http://fukamachi.org/wp/2008/06/02/maglev-and-the-naiivety-of-the-rails-community/">Sho Fukamachi</a> demonstrated the truly epic capability to not only miss the entire point, but demonstrate a nearly bottomless lack of knowledge of the area of virtual machine technology and what actually represents &#8220;state of the art&#8221;. Oddly, it reminds me of me when I was 20. Fortunately, Patrick Collins <a href="http://collison.ie/blog/2008/06/maglev-and-language-implementation">straightens it out</a>. Oh, and I&#8217;m quite aware of <a href="http://www.objectivity.com/pages/downloads/html/slac.html">object databases in the public eye</a> that are nearly 1PB <em>compressed</em>. There are some in the intel community that even larger and more complicated.</p>
	<p>It&#8217;s amazing how some communities think that they&#8217;ve actually had an original idea. There are almost no original ideas left. The only reason anyone thinks their &#8220;idea&#8221; is original is that they&#8217;re simply oblivious to the decades of work of others. </p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/06/02/uninformed-commentary/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sacred cows</title>
		<link>http://blog.amber.org/2008/06/01/sacred-cows/</link>
		<comments>http://blog.amber.org/2008/06/01/sacred-cows/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 17:19:53 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://blog.amber.org/?p=2952</guid>
		<description><![CDATA[	It&#8217;s amusing as all hell to watch some people blow up about the MagLev Ruby implementation. Personally, while I find Ruby interesting, the performance is embarrassingly bad for a lot of problem domains. That doesn&#8217;t mean it&#8217;s not useful, it just means it&#8217;s not as useful as it could be. I&#8217;d like to take a [...]]]></description>
			<content:encoded><![CDATA[	<p>It&#8217;s amusing as all hell to watch <a href="http://headius.blogspot.com/2008/06/maglev.html">some people blow up about the MagLev Ruby implementation</a>. Personally, while I find Ruby interesting, the performance is embarrassingly bad for a lot of problem domains. That doesn&#8217;t mean it&#8217;s not useful, it just means it&#8217;s not <em>as useful as it could be</em>. I&#8217;d like to take a couple comments that Charles Nutter made and just &#8220;observe&#8221;:</p>
	<blockquote>
		<p>First off, they demonstrated its distributed object database automatically synchronizing globally-reachable state across multiple VMs. It&#8217;s an amazing new idea that the world has never really seen&#8230;</p>
	</blockquote>
	<blockquote>
		<p>except that it isn&#8217;t. This is based on existing OODB technology that Gemstone and others have been promoting for better than a decade. It&#8217;s cool stuff, no doubt, but it&#8217;s been available in Gemstone&#8217;s Smalltalk product and in their Java product for years, and hasn&#8217;t seen widespread adoption. Maybe it&#8217;s on the rise, I really don&#8217;t know. It&#8217;s certainly cool, but it&#8217;s certainly not new.</p>
	</blockquote>
	<p>There are only a tiny handful of companies in the world who can show <em>production</em> object environments of that scale. Gemstone and Objectivity being two of the most successful. Both are rooted in the Smalltalk world originally, though offer other products to most of their customers. What I find troubling is the dismissive nature that Mr. Nutter has about the problem domain. The fact that most people worship at the relational temple doesn&#8217;t mean that it&#8217;s actually a good idea in many cases. Some of the most complex databases in the world are object databases. There&#8217;s a reason a huge percentage of Objectivity&#8217;s money comes from the intelligence community. Data fusion is everything.</p>
	<blockquote>
		<p>Except that these are results reported entirely in a vacuum. Whether this is fib following the &#8220;rules&#8221; of Ruby is entirely an open question. Whether this is method dispatch adhering to Ruby&#8217;s call logic is entirely an open question. Whether this is a while loop using all method calls for its condition and increment steps is an open quesetion. Because the Maglev guys haven&#8217;t started running Ruby tests yet. Is it Ruby?</p>
	</blockquote>
	<p>Well, once someone actually <em>defines what Ruby is</em> we can have that discussion. One of the most frustrating aspects of Ruby is that there is no actual language definition. There is only a language implementation, several at that, and if I recall correctly all have had to reverse &#8220;engineer&#8221; the language from the implementation. This makes discussing &#8220;is it Ruby&#8221; a laughable prospect, and Mr. Nutter should know that. Let&#8217;s examine &#8220;some words of his from just a few weeks back&#8221;:</p>
	<blockquote>
		<p>Compatibility is <strong>hard</strong>. I&#8217;m not talking a little hard, I&#8217;m talking monumentally hard. Ruby is a very flexible, complicated language to implement, and it ships with a number of very flexible, complicated core class implementations. Very little exists in the way of specifications and test kits, so what we&#8217;ve done with JRuby we&#8217;ve done by stitching together every suite we could find. And after all this time, we still have known bugs and weekly reports of minor incompatibilities. I don&#8217;t think an alternative implementation can ever truly become &#8220;compatible&#8221; as much as &#8220;more compatible&#8221;. We&#8217;re certainly the most compatible alternative impl, and even now we&#8217;ve got our hands full fixing bugs. Then there&#8217;s Ruby 1.9 support, coming up probably in JRuby 1.2ish. Another adventure.</p>
	</blockquote>
	<p>So before the stones are cast, perhaps the house should be repaired?</p>
	<blockquote>
		<p>Then there&#8217;s Maglev. Like the other impls, I&#8217;m excited that there&#8217;s a new possibility for Ruby to succeed. A high performance, &#8220;scalable&#8221; Ruby implementation is certainly what this community needs. But unlike most of the other implementations, it seems like Maglev is pushing performance numbers without compatibility metrics; marketing before reality. Am I far off here?</p>
	</blockquote>
	<p>Here&#8217;s the thing. Maglev is a new <em>language</em> on top of an existing VM. One that has over a decade of hardcore production use, something that even Java can&#8217;t really claim. There&#8217;s a wide gulf between putting a new syntax on top of an existing VM architecture and building a new VM. VMs are intensely hard, and only a few people in the world are truly good at them. Dynamic VMs all derive from Smalltalk, and even Java is having to glue on all sorts of silly doo-dads to try and pretend it can support it without huge cost. Ruby is very much Smalltalk in different clothing, and therefore I would expect Ruby to run at near Smalltalk speeds once you clean up some pieces. I know <a href="http://en.wikipedia.org/wiki/L._Peter_Deutsch">the great wizard</a> had a Python implementation running on a <a href="http://www.cincomsmalltalk.com/">Smalltalk VM</a>, alas it never got released.</p>
	<blockquote>
		<p>The truth is that not all of these optimizations are kosher right now. Removing the ability to override Fixnum#+ certainly makes it easier to optimize addition, but it&#8217;s not in the spirit of Ruby. Removing frames may be legal in some cases (like this one) but it&#8217;s not legal in all cases. And of course I&#8217;ve blogged about how Thread#kill and Thread#raise are broken, but we have to support them anyway. On and on we can go through lots of optimizations you might make in the first 100 days of your implementation, only to back out later when you realize you&#8217;re actually breaking features people depend on.</p>
	</blockquote>
	<p>Features, or design errors? Because if it&#8217;s the later, then breaking them is the best thing that can be done. The refusal to fix them in the past is simply a weakness.  The totem of backward compatibility is what gave us Windows Vista.</p>


 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/06/01/sacred-cows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Emacs color themes</title>
		<link>http://blog.amber.org/2008/05/16/emacs-color-themes/</link>
		<comments>http://blog.amber.org/2008/05/16/emacs-color-themes/#comments</comments>
		<pubDate>Fri, 16 May 2008 14:38:21 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

		<guid isPermaLink="false">http://blog.amber.org/2008/05/16/emacs-color-themes/</guid>
		<description><![CDATA[	In my continuing adventures getting back to using Emacs, I was working on tweaking the color theme that I use. While it&#8217;s based on someone else&#8217;s originally, I&#8217;ve made quite a few minor changes. Somewhere along the line, I messed it up and started getting all sorts of strange errors that made no sense. They [...]]]></description>
			<content:encoded><![CDATA[	<p>In my continuing adventures getting back to using Emacs, I was working on tweaking the <a href="http://www.emacswiki.org/cgi-bin/wiki?ColorTheme">color theme</a> that I use. While it&#8217;s based on someone else&#8217;s originally, I&#8217;ve made quite a few minor changes. Somewhere along the line, I messed it up and started getting all sorts of strange errors that made no sense. They couldn&#8217;t possibly be wrong.</p>
	<p>Here&#8217;s the old one:</p>
<pre>(defun color-theme-charcoal-personal ()
  (interactive)
  (color-theme-install
   '(color-theme-charcoal-gray-personal
     ((background-color . "Grey15")
     ...</pre>
	<p>And here it is, fixed:</p>
<pre>(defun color-theme-charcoal-personal ()
  (interactive)
  (color-theme-install
   '(color-theme-charcoal-personal
     ((background-color . "Grey15")
     ...</pre>
	<p><a href="http://assets.amber.org/wp-content/uploads/2008/05/color-theme-charcoal-personal-screenshot.png'"><img src="http://assets.amber.org/wp-content/uploads/2008/05/color-theme-charcoal-personal-screenshot.thumbnail.png" class="floatright" title="" alt="" width="295" height="320" /></a> Do you see the difference? No? Look carefully.</p>
	<p>It seems that if you name the <code>defun</code> differently than the first element of the first list passed to <code>color-theme-install</code>, it goes wonky. Unfortunately, the debugger wasn&#8217;t much help, and it was simply by stepping through a comparison with the original to see if somehow I&#8217;d missed something that I found the place where I&#8217;d screwed up. Something annoyingly tiny, and a mistake that should have generated a more useful error.</p>
	<p>If you want the Elisp code, you can find it here: <a href="http://assets.amber.org/wp-content/uploads/2008/05/color-theme-charcoal-personal.el">color-theme-charcoal-personal.el</a></p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/05/16/emacs-color-themes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fun with Pymacs</title>
		<link>http://blog.amber.org/2008/05/12/fun-with-pymacs/</link>
		<comments>http://blog.amber.org/2008/05/12/fun-with-pymacs/#comments</comments>
		<pubDate>Mon, 12 May 2008 15:01:04 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://blog.amber.org/2008/05/12/fun-with-pymacs/</guid>
		<description><![CDATA[	Pymacs was developed by FranÃ§ois Pinard, and it allows two-way communication between Emacs and Python. Very cool, except&#8230; it breaks my copy of Aquamacs, causing all sorts of things to spit out this lovely error:
	
		Variable binding depth exceeds max-specpdl-size
	
	What, you ask, is causing that? Well, it seems to be tied up with the advice framework [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://pymacs.progiciels-bpi.ca/">Pymacs</a> was developed by FranÃ§ois Pinard, and it allows two-way communication between Emacs and Python. Very cool, except&#8230; it breaks my copy of <a href="http://aquamacs.org">Aquamacs</a>, causing all sorts of things to spit out this lovely error:</p>
	<blockquote>
		<p><code>Variable binding depth exceeds max-specpdl-size</code></p>
	</blockquote>
	<p>What, you ask, is causing that? Well, it seems to be tied up with the advice framework (e.g., <code>defadvice</code>) and creating more recursion than Emacs will allow. Specifically, it trips at 600 levels. Very annoying.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/05/12/fun-with-pymacs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The debugger is your friend; even in Java</title>
		<link>http://blog.amber.org/2008/05/06/the-debugger-is-your-friend-even-in-java/</link>
		<comments>http://blog.amber.org/2008/05/06/the-debugger-is-your-friend-even-in-java/#comments</comments>
		<pubDate>Wed, 07 May 2008 00:27:52 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2008/05/06/the-debugger-is-your-friend-even-in-java/</guid>
		<description><![CDATA[	I am continually fascinated by how little many people use a debugger1 when they&#8217;re trying to understand their code. Today, I watched an otherwise very intelligent person stare at some Java code for 15-20 minutes trying, apparently, to mind-meld with the JVM and understand what went wrong and why he was getting a glorious NullPointerException, [...]]]></description>
			<content:encoded><![CDATA[	<p>I am continually fascinated by how little many people use a debugger<sup><a href="#fn20797954694a4fd47e8aaf1">1</a></sup> when they&#8217;re trying to understand their code. Today, I watched an otherwise <em>very</em> intelligent person stare at some Java code for 15-20 minutes trying, apparently, to mind-meld with the JVM and understand what went wrong and why he was getting a glorious <code>NullPointerException</code>, something I still find gloriously amusing.</p>
	<p>&#8220;Why don&#8217;t you set a breakpoint and look at what&#8217;s going on right there?&#8221; I asked. You would think I was talking Aramaic. Even I, arch-hater of Java&#8212;and Eclipse&#8212;was able to divine the way to do this task and within 15 seconds we had a solution.</p>
	<p>Learn to use the debugger, even if you&#8217;re working in a dead language like Java. It might not be a live object universe like Smalltalk, but it is 100x better than simply guessing.</p>
	<p id="fn20797954694a4fd47e8aaf1"><sup>1</sup> If you&#8217;re cursed with either C or C++, invest your hard-earned money in <a href="http://www.totalviewtech.com/index.htm">TotalView</a> if you have to do <em>anything</em> with multi-threaded code. It is unparalleled by any other debugger.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/05/06/the-debugger-is-your-friend-even-in-java/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Writing code is easy; designing software is hard</title>
		<link>http://blog.amber.org/2008/05/06/writing-code-is-easy-designing-software-is-hard/</link>
		<comments>http://blog.amber.org/2008/05/06/writing-code-is-easy-designing-software-is-hard/#comments</comments>
		<pubDate>Wed, 07 May 2008 00:23:01 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2008/05/06/writing-code-is-easy-designing-software-is-hard/</guid>
		<description><![CDATA[	In reading an article about SciPy, the author has this gem:
	
		The bottleneck in writing code isnâ€™t in the writing of the code, itâ€™s in understanding and conceptualising what needs to be done.
	
	I mean gem quite literally. This, in the end, is the core difficulty that people seem not to grasp about writing good software. Writing [...]]]></description>
			<content:encoded><![CDATA[	<p>In <a href="http://www.vetta.org/2008/05/scipy-the-embarrassing-way-to-code/">reading an article about SciPy</a>, the author has this gem:</p>
	<blockquote>
		<p>The bottleneck in writing code isnâ€™t in the writing of the code, itâ€™s in understanding and conceptualising what needs to be done.</p>
	</blockquote>
	<p>I mean gem quite literally. This, in the end, is the core difficulty that people seem not to grasp about writing <em>good</em> software. Writing lots of code is trivial; any monkey, or <acronym title="Integrated Development Environment">IDE</acronym> can do it. The difficulty comes in the concept and more importantly the domain knowledge around the problem. For me, that&#8217;s 90% of the problem.</p>
	<p>This is why I say languages don&#8217;t matter that much. Knowledge is language-insensitive.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/05/06/writing-code-is-easy-designing-software-is-hard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The ad</title>
		<link>http://blog.amber.org/2008/03/09/the-ad/</link>
		<comments>http://blog.amber.org/2008/03/09/the-ad/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 18:34:23 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2008/03/09/the-ad/</guid>
		<description><![CDATA[	When I was in TX, I started seeing Senator Clinton&#8217;s infamous homage to LBJ: the telephone ad. I almost fell out of my chain, though, as she hasn&#8217;t got an ounce of applicable experience to make that decision, which puts her exactly where Senator Obama and Senator McCain are. None have ever been the executive. [...]]]></description>
			<content:encoded><![CDATA[	<p>When I was in TX, I started seeing Senator Clinton&#8217;s infamous homage to LBJ: the telephone ad. I almost fell out of my chain, though, as she hasn&#8217;t got an ounce of applicable experience to make that decision, which puts her exactly where Senator Obama and Senator McCain are. None have ever been the executive. Dick Morris, never a retiring wall-flower, <a href="http://thehill.com/dick-morris/its-over-2008-03-06.html">has some advice for the campaign</a>:</p>
	<blockquote>
		<p>The next time Hillary uses the recycled red phone ad, counter with one of your own. When the phone rings in the middle of the night, have a womanâ€™s voice, with a flat Midwestern accent, answer it and say, &#8220;Hold on&#8221; into the receiver. Then she should shout, &#8220;Bill! Itâ€™s for you!&#8221;</p>
	</blockquote>
	<blockquote>
		<p>Because with Hillaryâ€™s complete lack of any meaningful experience in foreign affairs, and her lack of the &#8220;testing&#8221; that she boldly claims, sheâ€™ll be yelling for Bill.</p>
	</blockquote>
	<p>I don&#8217;t think he should run that ad, as some might see it as misogynistic, even though it&#8217;s not. But at the end of the day, the only test she&#8217;s had, on the Iraq war, she freaked and picked the wrong answer.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/03/09/the-ad/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Amazon Simple Queue Service</title>
		<link>http://blog.amber.org/2008/02/05/amazon-simple-queue-service/</link>
		<comments>http://blog.amber.org/2008/02/05/amazon-simple-queue-service/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 01:56:19 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2008/02/05/amazon-simple-queue-service/</guid>
		<description><![CDATA[	Amazon just released a new API and pricing model for their Simple Queue Service. There are two changes that I find especially interesting:
	
		Data transfer to EC2 is now free. You only pay for transfers to a system outside Amazon&#8217;s cloud. This makes it dirt cheap to use for many applications.
	
	
		Pricing is now $0.01/10,000 requests, rather [...]]]></description>
			<content:encoded><![CDATA[	<p>Amazon just released <a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1148">a new API and pricing model</a> for their <a href="http://aws.amazon.com/sqs/">Simple Queue Service</a>. There are two changes that I find especially interesting:</p>
	<ul>
		<li>Data transfer to <a href="http://aws.amazon.com/ec2/">EC2</a> is now free. You only pay for transfers to a system outside Amazon&#8217;s cloud. This makes it dirt cheap to use for many applications.</li>
	</ul>
	<ul>
		<li>Pricing is now $0.01/10,000 requests, rather than $0.10/1,000 messages. It&#8217;s both a change in how things are measured, but also potentially a lot cheaper depending on your application. This means that you can run 1,000,000 requests for a single dollar. Not bad.
	<p>Overall, it&#8217;s a great change, I think. They have reduced the size of the maximum message from 256kB to 8kB, but I doubt this will affect many people, and you can just shove the larger messages into <a href="http://aws.amazon.com/s3/">S3</a> and send a reference in the message.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2008/02/05/amazon-simple-queue-service/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mercurial tips</title>
		<link>http://blog.amber.org/2007/12/06/mercurial-tips/</link>
		<comments>http://blog.amber.org/2007/12/06/mercurial-tips/#comments</comments>
		<pubDate>Thu, 06 Dec 2007 19:00:01 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2007/12/06/mercurial-tips/</guid>
		<description><![CDATA[	So, I&#8217;ve switched to using Mercurial for all my version control needs. As a distributed design, it makes it easy to work on a detached machine&#8212;say on an airplane&#8212;and not lose the functionality of a full version control system. This is in stark contrast to either CVS or even Subversion, which was my previous choice. [...]]]></description>
			<content:encoded><![CDATA[	<p>So, I&#8217;ve switched to using <a href="http://www.selenic.com/mercurial/">Mercurial</a> for all my version control needs. As a distributed design, it makes it easy to work on a detached machine&#8212;say on an airplane&#8212;and not lose the functionality of a full version control system. This is in stark contrast to either CVS or even Subversion, which was my previous choice. All is not perfect, of course, but I&#8217;ve learned a few tricks that weren&#8217;t obvious, at least not to me.</p>
	<p>First, Mercurial doesn&#8217;t track directories, at least not as such. This is a big change from Subversion. This means that some of my scripts, which set up a uniform directory layout for projects and build that as the skeleton in the repository, no longer work. I fixed this relatively easily by simply putting a file names <code>00README</code> in the directory which contains a one line description of what the directory is for. Overkill, but it feeds my habits.</p>
	<p>Second, I found it a bit annoying when I needed to &#8220;push changes&#8221;: that I had to specify the location every time. Turns out, you don&#8217;t have to, as you can <a href="http://www.selenic.com/mercurial/hgrc.5.html">create aliases</a> and you can also create defaults.  If, for example, you put the following in the <code>.../.hg/hgrc</code> file in the repository, you just use the default all the time:</p>
<pre>[paths]
default-push = &lt;url&gt;&lt;/url&gt;</pre>
	<p>Now you can just use <code>hg push</code> to publish your changes, and not have to do anything else. Much nicer.</p>
	<p>Lastly, because it&#8217;s so easy to create new changesets, and takes almost zero time, I find myself checking things in much more frequently. This means that the changeset is smaller, and therefore easier to find issues should they arise.</p>


 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2007/12/06/mercurial-tips/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Distributed Version Control</title>
		<link>http://blog.amber.org/2007/12/03/distributed-version-control/</link>
		<comments>http://blog.amber.org/2007/12/03/distributed-version-control/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 18:56:03 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2007/12/03/distributed-version-control/</guid>
		<description><![CDATA[	Jeffrey Shell writes about moving to distributed version control:
	
		The more I play with the new breed of VCS tools, the more I appreciate them. The older generations (CVS, SVN) look increasingly archaic, supporting a computing and development model that seems unsustainable. Yet most of us lived with those tools, or something similar, for most of [...]]]></description>
			<content:encoded><![CDATA[	<p>Jeffrey Shell <a href="http://griddlenoise.blogspot.com/2007/12/distributed-vcss-are-great-enablers-or.html">writes about moving to distributed version control</a>:</p>
	<blockquote>
		<p>The more I play with the new breed of VCS tools, the more I appreciate them. The older generations (CVS, SVN) look increasingly archaic, supporting a computing and development model that seems unsustainable. Yet most of us lived with those tools, or something similar, for most of our development-focused lives.</p>
	</blockquote>
	<blockquote>
		<p>When I speak of the new breed, the two standouts (to me) are Git and Mercurial. There are some other interesting ones, particularly Darcs, but Git and Mercurial seem to have the most steam and seem fairly grounded and stable. Between those two, I still find myself preferring Git. Iâ€™ve had some nasty webs to untangle and Git has provided me with the best resources to untangle them.</p>
	</blockquote>
	<p>While Jeffrey is using <a href="http://git.or.cz/">Git</a>, I&#8217;m using <a href="http://www.selenic.com/mercurial/">Mercurial</a>, and I have to agree with him. I see two distinct advantages to distributed <acronym title="Version Control System">VCS</acronym>:</p>
	<ul>
		<li>Ability to work totally disconnected</li>
	</ul>
	<ul>
		<li>Light-weight branching, etc.
	<p>Jeffrey talks a lot about the light-weight nature of things. I can&#8217;t even begin to explain how critical the ability work totally disconnected is to how I operate. I spend a lot of time on airplanes&#8212;measured in hours-per-week&#8212;and the inability to check-in, merge, diff, etc., is a huge impediment to getting work done. Right now, I&#8217;m struggling with getting Mercurial to work properly under Windows with <acronym title="Secure Shell">SSH</acronym> as the transport protocol, but I&#8217;ve managed to work around it for now.</p>
	<p>If you&#8217;re doing a lot of work, even if it&#8217;s just a single developer, you should definitely be checking it out.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2007/12/03/distributed-version-control/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Baroqueness</title>
		<link>http://blog.amber.org/2007/08/15/baroqueness/</link>
		<comments>http://blog.amber.org/2007/08/15/baroqueness/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 02:52:07 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2007/08/15/baroqueness/</guid>
		<description><![CDATA[	Makefiles are evil; automake is a baroque disaster, likely understood by nobody currently living.

 ]]></description>
			<content:encoded><![CDATA[	<p><a href="http://en.wikipedia.org/wiki/Make_(software)">Makefiles</a> are evil; <a href="http://en.wikipedia.org/wiki/Automake">automake</a> is a baroque disaster, likely understood by nobody currently living.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2007/08/15/baroqueness/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Testing and behavior in development</title>
		<link>http://blog.amber.org/2006/10/16/testing-and-behavior-in-development/</link>
		<comments>http://blog.amber.org/2006/10/16/testing-and-behavior-in-development/#comments</comments>
		<pubDate>Mon, 16 Oct 2006 17:50:17 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2006/10/16/testing-and-behavior-in-development/</guid>
		<description><![CDATA[	I&#8217;ve been practicing test driven development on some percentage of my projects for a while now. Something, however, has always felt just a little bit tiring about the whole thing. The biggest thing I struggled with was what to test, and how best to test. I suppose that&#8217;s obvious, eh? My biggest failing was that [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve been practicing <a href="http://en.wikipedia.org/wiki/Test_driven_development">test driven development</a> on some percentage of my projects for a while now. Something, however, has always felt just a little bit tiring about the whole thing. The biggest thing I struggled with was what to test, and how best to test. I suppose that&#8217;s obvious, eh? My biggest failing was that I would often test things that don&#8217;t need testing; things like other people&#8217;s heavily tested frameworks. This made writing tests boring.</p>
	<p>Then, I read Dave Astel&#8217;s <a href="http://blog.daveastels.com/articles/2005/07/05/a-new-look-at-test-driven-development">posting on behavior driven development</a>, and a lightbulb&#8212;dim though it may be&#8212;went off in my head. The problem with <acronym title="Test Driven Development">TDD</acronym> isn&#8217;t the idea, but the perspective. Dave makes it clear in the following excerpt.</p>
	<blockquote>
		<p>It&#8217;s about figuring out what you are trying to do before you run off half-cocked to try to do it. You write a specification that nails down a small aspect of behaviour in a concise, unambiguous, and executable form. It&#8217;s that simple. Does that mean you write tests? No. It means you write specifications of what your code will have to do. It means you specify the behaviour of your code ahead of time. But not far ahead of time. In fact, just before you write the code is best because that&#8217;s when you have as much information at hand as you will up to that point. Like well done TDD, you work in tiny increments&#8230; specifying one small aspect of behaviour at a time, then implementing it.</p>
	</blockquote>
	<blockquote>
		<p>When you realize that it&#8217;s all about specifying behaviour and not writing tests, your point of view shifts. Suddenly the idea of having a Test class for each of your production classes is rediculously limiting. And the thought of testing each of your methods with its own test method (in a 1-1 relationship) will have you rolling on the floor laughing.</p>
	</blockquote>
	<p>Eureka! <a href="http://behaviour-driven.org/">Behavior Driven Development</a>. Really what was missing was the context of everything. So, I went searching the treasure-trove that is Google, and came across <a href="http://www.lukeredpath.co.uk/2006/8/29/developing-a-rails-model-using-bdd-and-rspec-part-1">an article by Luke Redpath</a> that put it in a <a href="http://rubyonrails.org/">Ruby on Rails</a> perspective. Specifically, the behavior of Models and how to specify them. That then led me to <a href="http://rspec.rubyforge.org/">RSpec</a>, which implements a <acronym title="Domain Specific Language">DSL</acronym> for writing specifications that is on top of the normal <code>Test::Unit</code> framework. There&#8217;s also a <a href="http://rspec.rubyforge.org/tools/rails.html">Ruby plugin</a> that helps make things work smoothly.</p>
	<p>Now, if only <a href="http://www.zenspider.com/ZSS/Products/ZenTest/">ZenTest</a> worked with Specs. The <code>auto_test</code> piece would be very useful. </p>
	<p><strong>Updated</strong> (21 Oct 2006):  Nick Sieger <a href="http://blog.nicksieger.com/articles/2006/09/13/auto-rspec">has done this already</a>, apparently using his magical time machine.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2006/10/16/testing-and-behavior-in-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A brilliant comment system for WordPress</title>
		<link>http://blog.amber.org/2006/10/09/a-brilliant-comment-system-for-wordpress/</link>
		<comments>http://blog.amber.org/2006/10/09/a-brilliant-comment-system-for-wordpress/#comments</comments>
		<pubDate>Mon, 09 Oct 2006 23:28:14 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2006/10/09/a-brilliant-comment-system-for-wordpress/</guid>
		<description><![CDATA[	I&#8217;ve been using WordPress for a while, and generally am quite happy with it. One thing is is slightly weak on is the comment system. I thought that what I wanted was a hierarchical system&#8212;where you can reply to other comments&#8212;but after seeing Jack Slocum&#8217;s absolutely brilliant work, I want his system.
	You really should see [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve been using <a href="http://www.wordpress.org/">WordPress</a> for a while, and generally am quite happy with it. One thing is is slightly weak on is the comment system. I thought that what I wanted was a hierarchical system&#8212;where you can reply to other comments&#8212;but after seeing <a href="http://www.jackslocum.com/yui/2006/10/09/my-wordpress-comments-system-built-with-yahoo-ui-and-yahooext/">Jack Slocum&#8217;s absolutely brilliant work</a>, I want his system.</p>
	<p>You really should see it to understand how great it is. It also shows off the <a href="http://developer.yahoo.com/yui/">Yahoo UI</a> Javascript libraries.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2006/10/09/a-brilliant-comment-system-for-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Software Engineering</title>
		<link>http://blog.amber.org/2006/09/02/software-engineering/</link>
		<comments>http://blog.amber.org/2006/09/02/software-engineering/#comments</comments>
		<pubDate>Sun, 03 Sep 2006 00:43:19 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2006/09/02/software-engineering/</guid>
		<description><![CDATA[	Without comment, from Andy Hunt, comes software engineering in 10 panels:
	
	Indeed.

 ]]></description>
			<content:encoded><![CDATA[	<p>Without comment, <a href="http://toolshed.com/blog/articles/2006/06/26/software-engineering-explained-perfectly">from Andy Hunt</a>, comes software engineering in 10 panels:</p>
	<p><a href="http://2listnow.com/googleimage/softwareengineeringexplained1r550x413.jpg"><img src="http://2listnow.com/googleimage/softwareengineeringexplained1r550x413.jpg" title="" alt="" width="550" height="413" /></a></p>
	<p>Indeed.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2006/09/02/software-engineering/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Typical</title>
		<link>http://blog.amber.org/2006/09/02/typical/</link>
		<comments>http://blog.amber.org/2006/09/02/typical/#comments</comments>
		<pubDate>Sat, 02 Sep 2006 13:09:13 +0000</pubDate>
		<dc:creator>petrilli</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.amber.org/2006/09/02/typical/</guid>
		<description><![CDATA[	In Language Wars, normally rational Joel Spolsky has simply cracked. I don&#8217;t know if it&#8217;s the pressure of popularity, or what, but he&#8217;s simply lost it. Other people have taken him down a notch, but here&#8217;s the priceless bit of nonsense:
	
		I for one am scared of Ruby because (1) it displays a stunning antipathy towards [...]]]></description>
			<content:encoded><![CDATA[	<p>In <a href="http://www.joelonsoftware.com/items/2006/09/01.html">Language Wars</a>, normally rational Joel Spolsky has simply cracked. I don&#8217;t know if it&#8217;s the pressure of popularity, or what, but he&#8217;s simply lost it. <a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&#38;entry=3334561617">Other people</a> <a href="http://www.loudthinking.com/arc/000596.html">have taken him down a notch</a>, but here&#8217;s the priceless bit of nonsense:</p>
	<blockquote>
		<p>I for one am scared of Ruby because (1) it displays a stunning antipathy towards Unicode and (2) it&#8217;s known to be slow, so if you become The Next MySpace, you&#8217;ll be buying 5 times as many boxes as the .NET guy down the hall.</p>
	</blockquote>
	<p>Seriously, this is so amazingly silly that I don&#8217;t know where to start. First, if you&#8217;re &#8220;the next MySpace&#8221;, you can afford this problem. But that&#8217;s not really the true absurdity demonstrated here. You are not going to become that popular<sup><a href="#fn14342028664a4fd47f455b9">1</a></sup>, so don&#8217;t sweat it. You can sweat it if you get that level of success.</p>
	<p>Also, you have to be able to move fast enough to get to the position of popularity, unless you truly have a one-of-a-kind idea, for that sort of success. Seriously, this argument is built on the mental masturbation of &#8220;what if I was Google?&#8221; But you aren&#8217;t, so just stop.</p>
	<p>Quit sweating the problems that give you a mental stiffy, and work on the problem that are truly hard: ease-of-use, process, transparency, discoverability and the whole use experience.</p>
	<p id="fn14342028664a4fd47f455b9"><sup>1</sup> This isn&#8217;t absolutely true, but given hundreds of thousands of startups, and the tiny handful of big successes, it&#8217;s probabilistically true.</p>

 ]]></content:encoded>
			<wfw:commentRss>http://blog.amber.org/2006/09/02/typical/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
