<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- generator="wordpress/2.1.2" --><rss 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/" version="2.0">

<channel>
	<title>microBlog</title>
	<link>http://blog.micropledge.com</link>
	<description>All things microPledge</description>
	<pubDate>Mon, 15 Sep 2008 09:25:44 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/micropledge/blog" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">945591</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmicropledge%2Fblog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><item>
		<title>Helvetica: can a font be a film?</title>
		<link>http://blog.micropledge.com/2008/09/helvetica/</link>
		<comments>http://blog.micropledge.com/2008/09/helvetica/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 09:25:44 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/09/helvetica/</guid>
		<description><![CDATA[I&#8217;ve always been curious about fonts. Well, about typefaces, really. Strictly speaking, a font is an instance of a typeface with a particular size and style. In a programming language, you might say it this way:

    helvetica_10pt_bold = Helvetica(10, bold=True)


Helvetica is the typeface. &#8220;Helvetica 10pt bold&#8221; is the font.

Yes, I admit to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been curious about fonts. Well, about <i>typefaces</i>, really. Strictly speaking, a <i>font</i> is an instance of a typeface with a particular size and style. In a programming language, you might say it this way:</p>

<pre class='prettyprint'><code>    helvetica_10pt_bold = Helvetica(10, bold=True)
</code></pre>

<p>Helvetica is the typeface. &#8220;Helvetica 10pt bold&#8221; is the font.</p>

<p><a title='Go to the Helvetica film website' href='http://www.helveticafilm.com/'><img class='right border' src='http://blogstatic.micropledge.com/2008/09/helvetica.png'></a>Yes, I admit to having been an amateur typophile for a while now. It probably started with <a href='http://en.wikipedia.org/wiki/Donald_Knuth'>Donald Knuth</a>, and me poring over his books in the Canterbury University library between lectures, just basking in pure letter shape.</p>

<p>Anyway, Helvetica is no longer just a Swiss typeface. It&#8217;s now also a <a href='http://www.helveticafilm.com/'>feature-length documentary</a> about the typeface and about graphic design in general.</p>

<p>It runs for 80 minutes, and it interviews a number of top type designers. Still, it&#8217;s certainly interesting for a general audience. My wife prepared herself to be bored, but actually found it quite compelling.</p>

<p><a title="Go to the 'How to Spot Arial' article" href='http://www.ms-studio.com/articlesarialsid.html'><img class='right' src='http://blogstatic.micropledge.com/2008/09/helvetica-arial.png'></a>Another interesting thing is the Helvetica vs Arial debate (if you can call it a debate). Arial is pretty much a cheap clone of Helvetica, designed by Microsoft so they didn&#8217;t have to pay Linotype&#8217;s licensing fees. I don&#8217;t have to try too hard to believe that.</p>

<p>The differences between the two typefaces are very subtle, but interesting. Check out the differences in the &#8216;a&#8217; and the &#8216;t&#8217; in the image to the right. <a href='http://www.ms-studio.com/articlesarialsid.html'>Mark Simonson has more on this.</a></p>

<p>Anti-Microsofting aside, I do prefer the font handling in Windows XP over anything else I&#8217;ve seen. It&#8217;s just so clear and sharp. Linux still doesn&#8217;t have it together. And even Mac OS&#8217;s fonts aren&#8217;t that great &#8212; <a href='http://www.joelonsoftware.com/items/2007/06/12.html'>Apple seems to be pretending</a> we&#8217;ve already all got 300dpi displays.</p>

<p>So check out <a href='http://www.helveticafilm.com/'><i>Helvetica</i></a>, the film. I think you&#8217;ll enjoy it, typophile or not. At the least, it&#8217;ll make you do a double-take at every other sign and billboard &#8212; &#8220;Hey, is that Helvetica?&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/09/helvetica/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gifty — gift lists made simple</title>
		<link>http://blog.micropledge.com/2008/07/gifty/</link>
		<comments>http://blog.micropledge.com/2008/07/gifty/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 08:08:03 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/07/gifty/</guid>
		<description><![CDATA[One of my friends is getting married soon, and I thought it&#8217;d be fun to make him and his fianc&#233;e an online gift list.

For our own wedding, my wife and I got about 20 white platters, not to mention 3 toasters. I guess it&#8217;s nice to be able to give away toasters to the needy, [...]]]></description>
			<content:encoded><![CDATA[<p>One of my friends is getting married soon, and I thought it&#8217;d be fun to make him and his fianc&eacute;e an online gift list.</p>

<p>For our own wedding, my wife and I got about 20 white platters, not to mention 3 toasters. I guess it&#8217;s nice to be able to give away toasters to the needy, but I wanted to save my friend the hassle. :-)</p>

<p>There are a bunch of wedding gift sites out there already, but they&#8217;re usually tied to a specific shop, or they cost US$99 to use. And some require guests to go through a long sign-up process &#8212; not cool.</p>

<p>Well, here is <a href='http://gifty.co.nz/'>Gifty.co.nz</a>. It wasn&#8217;t much harder to open it to the public, so I did:</p>

<p style='text-align: center; margin: 2em 0;'><a href='http://gifty.co.nz/' title='Go to Gifty.co.nz'><img src='http://blogstatic.micropledge.com/2008/07/gifty.png' width='350' height='109' alt='Gifty.co.nz logo'/></a></p>

<p>It&#8217;s simple and free to start a list, and it only costs NZ$20 (US$15) when you&#8217;re ready to send out your invites. Try out the <a href='http://gifty.co.nz/johnmary'>demo list</a>, or tell your friends that are getting married to head over to <b>Gifty.co.nz</b>.</p>

<p>Note that Gifty only does <i>wedding</i> gift lists at the moment, but I&#8217;m planning to add support for other types of lists before too long.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/07/gifty/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Protothreads and C++</title>
		<link>http://blog.micropledge.com/2008/07/protothreads/</link>
		<comments>http://blog.micropledge.com/2008/07/protothreads/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 08:57:27 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/07/protothreads/</guid>
		<description><![CDATA[Part of my day job is embedded programming, and recently I&#8217;ve discovered Adam Dunkels&#8217; lovely invention: protothreads. He calls them lightweight, stackless threads in C. And that they are.

What protothreads give you is the ability to write procedural, thread-style code, but without the overhead of real threads. The kind of thing embedded programmers normally use [...]]]></description>
			<content:encoded><![CDATA[<p>Part of my day job is embedded programming, and recently I&#8217;ve discovered Adam Dunkels&#8217; lovely invention: <a href='http://www.sics.se/~adam/pt/'>protothreads</a>. He calls them <i>lightweight, stackless threads in C</i>. And that they are.</p>

<p>What protothreads give you is the ability to write procedural, thread-style code, but without the overhead of real threads. The kind of thing embedded programmers normally use <code>switch</code> state machines for.</p>

<p><a href='http://www.sics.se/~adam/pt/' title="Go to Adam Dunkels' original protothread example"><img class='right border' src='http://blogstatic.micropledge.com/2008/07/protothread.png' width='190' height='152' alt='Protothread example' /></a>The other alternative is full-blown threads, but real threads certainly have their drawbacks. They each need their own stack, for one &#8212; and that&#8217;s often nasty in embedded systems, where you might only have 2 KB of RAM total. There&#8217;s the performance hit of context switching. There&#8217;s having to worry about sharing between threads, locking, etc.</p>

<p>Enter protothreads.</p>

<p>One of the cool things about them is that, behind the scenes, they break all the conventions (but not the commandments). Use of the legendary <a href='http://en.wikipedia.org/wiki/Duff%27s_device'>Duff&#8217;s device</a>, macros that open braces but don&#8217;t close them &#8230; but they work, they&#8217;re fast and portable, and they give you pseudo-threads almost for free.</p>

<p>Because of how they work &#8212; perhaps it&#8217;s the same for any neat tool&nbsp;&mdash; there are a few gotchas:</p>

<ul>
<li>You can use locals, but their values won&#8217;t be remembered across waits (you have to use <code>static</code>s for that).</li>
<li>You&#8217;ve got to put all your &#8220;state change code&#8221; in a single function.</li>
<li>And you can&#8217;t have a <code>switch</code> of your own spanning the use of the wait macros.</li>
</ul>

<p>You&#8217;ll want to <a href='http://www.sics.se/~adam/pt/'>read more about them</a> and see some examples on Adam Dunkels&#8217; website.</p>

<h4 id='cpp'>Protothreads in C++</h4>

<p>But what about this C++ thing? Well, C++ is a more or less a superset of C, so protothreads will work as-is. But if we take C and sprinkle in a dash of ++, we can make them even tastier:</p>

<ul>
<li>You can make a <code>Protothread</code> class, so you don&#8217;t need to pass the <code>struct pt*</code> around everywhere.</li>
<li>You can use instance variables where you might have used statics, making your protothreads easy to multi-instance.</li>
<li>You can write classes derived from <code>Protothread</code> that add helper variables and macros to read and wait for timers, specific I/O ports, etc.</li>
</ul>

<p>&#8220;Okay, so show us an example.&#8221; Fair call.</p>

<p>Below is a C++-style protothread that implements a simple packet protocol. Each packet has a sync byte, a length byte, <i>n</i> data bytes, and a checksum byte. Packets are only processed if they&#8217;re good and complete:</p>

<pre class='prettyprint'><code>bool UartThread::Run()
{
    PT_BEGIN();

    while (true) {
        // wait for sync byte
        PT_WAIT_UNTIL(ReadByte(ch));
        if (ch == Sync) {
            // read length byte, ensure packet not too big
            PT_WAIT_UNTIL(ReadByte(ch));
            len = ch;
            if (len &lt;= MaxLength) {
                // read n data bytes
                for (i = 0; i &lt; len; i++) {
                    PT_WAIT_UNTIL(ReadByte(ch));
                    data[i] = ch;
                }
                // read checksum, dispatch packet if valid
                PT_WAIT_UNTIL(ReadByte(ch));
                if (ValidChecksum(data, len, ch))
                    Dispatch(data, len);
            }
        }
    }

    PT_END();
}
</code></pre>

<p>Not bad, eh? Even with comments it&#8217;s much shorter and sweeter than the equivalent state machine version (which, incidentally, is pretty much what the protothread macros expand to):</p>

<pre class='prettyprint'><code>bool UartThread::Run()
{
    while (true) {
        switch (state) {
        case StateSync:
            if (!ReadByte(ch))
                return true;
            if (ch != Sync)
                break;
            state = StateLength;

        case StateLength:
            if (!ReadByte(ch))
                return true;
            len = ch;
            if (len &gt; MaxLength) {
                state = StateSync;
                break;
            }
            i = 0;
            state = StateData;

        case StateData:
            while (i &lt; len) {
                if (!ReadByte(ch))
                    return true;
                data[i] = ch;
                i++;
            }
            state = StateChecksum;

        case StateChecksum:
            if (!ReadByte(ch))
                return true;
            if (ValidChecksum(data, len, ch))
                Dispatch(data, len);
            state = StateSync;
        }
    }
}
</code></pre>

<script type='text/javascript' src='http://blogstatic.micropledge.com/prettify.js'></script>

<script type='text/javascript'>
    prettyPrint();
</script>

<p>So there you go. I know which version I&#8217;d rather write and maintain.</p>

<p>Feel free to use the <b><a href='http://blogstatic.micropledge.com/2008/07/Protothread.h.txt'>Protothread.h</a></b> header file I put together from Adam Dunkels&#8217; C version&nbsp;&mdash; it should have all you need to get started. I&#8217;ve left a &#8220;protothread scheduler&#8221; as an exerciser for the reader, as it would be both simple and application-dependent.</p>

<p>Just a final word: I&#8217;m not suggesting protothreads are a replacement for threads &#8212; they&#8217;re not. But when you need the appearance of threads, or you&#8217;re dealing with embedded micros and don&#8217;t have screeds of RAM, give them a try.</p>

<hr />

<p><small>Chris Woods has also implemented a <a href='http://mind-flip.blogware.com/blog/_archives/2007/12/12/3404499.html'>version of protothreads in C++,</a> but he&#8217;s taken a different approach for the Symbian OS.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/07/protothreads/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simple XP tip: use “Undo Delete”</title>
		<link>http://blog.micropledge.com/2008/07/undo-delete/</link>
		<comments>http://blog.micropledge.com/2008/07/undo-delete/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 08:18:09 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/07/undo-delete/</guid>
		<description><![CDATA[Windows XP has a pretty decent recycle bin. Well, it does make deleting files slow when it gets full, and Explorer still has that &#8220;Are you sure &#8230; ?&#8221; dialog &#8212; but still, it works. Here&#8217;s how to make it a little better:

Step one: turn off the &#8220;are you sure?&#8221; dialog. What&#8217;s the point in [...]]]></description>
			<content:encoded><![CDATA[<p>Windows XP has a pretty decent recycle bin. Well, it does make deleting files slow when it gets full, and Explorer still has that &#8220;Are you sure &#8230; ?&#8221; dialog &#8212; but still, it works. Here&#8217;s how to make it a little better:</p>

<p><b>Step one: turn off the &#8220;are you sure?&#8221; dialog.</b> What&#8217;s the point in having a confirm dialog if you can easily get the files back from the Recycle Bin anyway?</p>

<p>To turn it off, go to Explorer (the file browser, not the web browser), then right-click on Recycle Bin and go to Properties. Simply uncheck the option &#8220;Display delete confirmation dialog&#8221;, and you&#8217;re away.</p>

<p>You can then press delete, and it&#8217;ll delete right away. If you stuff up and really do want that file, it&#8217;ll be there for you in the Bin.</p>

<p><b>Step two: use &#8220;Undo Delete&#8221;.</b> Actually, it&#8217;s easier than the above. Explorer has a nice Undo Delete action. If you&#8217;ve just deleted a file but didn&#8217;t mean to, simply go to the Edit menu and click Undo Delete (even better, just press <code>Ctrl-Z</code>, the standard undo key).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/07/undo-delete/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Thank you, Adobe Reader 9!</title>
		<link>http://blog.micropledge.com/2008/07/adobe-reader-9/</link>
		<comments>http://blog.micropledge.com/2008/07/adobe-reader-9/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 08:51:52 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/07/thank-you-adobe/</guid>
		<description><![CDATA[Recently I wrote a blog entry about bloated software, and how much better Foxit PDF reader was than Adobe Reader. But I was using Adobe Reader 8. Little did I know how much superior version 9 would be.

For starters, version 8 was a 22 MB download. Version 9 is a mere 33 MB &#8212; a [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.adobe.com/products/acrobat/readstep2.html'><img class='right' src='http://blogstatic.micropledge.com/2008/07/adobe.png' width='104' height='104' alt='Adobe Reader logo' title='Adobe Reader 9, oh so much better!' /></a>Recently I wrote a <a href='http://blog.micropledge.com/2008/06/snappy-software/'>blog entry about bloated software</a>, and how much better Foxit PDF reader was than Adobe Reader. But I was using Adobe Reader 8. Little did I know how much superior version 9 would be.</p>

<p>For starters, version 8 was a 22 MB download. Version 9 is a <b>mere 33 MB</b> &#8212; a whole major version up, and not even twice as big. The default download includes a 19 MB eBay Desktop program, for all your &#8220;faster searching, smarter bidding&#8221; needs. So tempting &#8230; but I opted out.</p>

<p>On my cable connection, it took about 5 minutes to download, nicely allowing me enough time to brew a decent cup of coffee while I waited.</p>

<p>But it wasn&#8217;t just a simple, ordinary download. First Adobe told me to download a Firefox plugin. I assumed the plugin would help me read PDFs in my browser. But oh no, this was a special plugin, an Adobe Reader Download Manager (TM) &#8212; a plugin specially designed to help Firefox download Adobe&#8217;s powerful PDF viewer.</p>

<p>After the plugin was installed and Firefox restarted, the download began. I couldn&#8217;t wait to try Adobe&#8217;s <a href='http://blog.micropledge.com/2008/06/snappy-software/#comment-2492'>MUCH FASTER and SMARTER</a> product.</p>

<p>Download done, I double-clicked the installer. It spent a long time unpacking and validating the installer, which gave me warm fuzzies about Adobe&#8217;s good grasp of stability, security, and enterprisey robustness.</p>

<p>After the unpacking, the install process itself took 10 minutes. I could only thank Adobe&#8217;s engineers, presuming they were filling up my hard drive with yummy icons, tasty DLLs, and amazing 3D JavaScript add-ons. No matter &#8212; the <b>210 MB</b> it required was there to be used.</p>

<p>I had just slurped down the dregs of my coffee when the installer finished. <b>I was so thankful when it told me I needed to restart my computer,</b> welcoming the extra time to drink coffee, as well as the pure delight I knew I&#8217;d get from starting all my applications again.</p>

<p>I could finally try out this new software. I was impressed. It started in a minuscule 13 seconds, plus the time it took me to skim their poetic and beneficent license agreement.</p>

<p>Ah, the joy of using a new product. Unlike Microsoft products, Adobe&#8217;s new, bigger Reader behaves exactly the same as the old one. In fact, it&#8217;s so compatible I can&#8217;t even tell the difference! Boy, I know good release management when I see it &#8230;</p>

<p>Thank you, Adobe, for version 9 of your free PDF Reader. You even thought to put a nice link to Acrobat.com on my Start Menu!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/07/adobe-reader-9/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Can modern software be snappy?</title>
		<link>http://blog.micropledge.com/2008/06/snappy-software/</link>
		<comments>http://blog.micropledge.com/2008/06/snappy-software/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 23:38:31 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/06/snappy-software/</guid>
		<description><![CDATA[Solomon once said not to pine for the good ol&#8217; days, and that&#8217;s sage advice, but I&#8217;m sure he didn&#8217;t intend it to apply to software bloat.

I&#8217;m not just talking about memory and megahertz bloat &#8212; we&#8217;ve also got performance unbloat. And it almost seems like the two go hand-in-hand. The more memory something hogs, [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.mattwardman.com/blog/2007/08/22/dumping-itunes-because-of-software-bloat/' title='See this blog entry, for example'><img class='right' src='http://blogstatic.micropledge.com/2008/06/nobloat.png' width='125' height='126' alt='No bloat' /></a>Solomon once said <a href='http://www.biblegateway.com/passage/?search=eccl%207:10;&amp;version=31;'>not to pine for the good ol&#8217; days</a>, and that&#8217;s sage advice, but I&#8217;m sure he didn&#8217;t intend it to apply to software bloat.</p>

<p>I&#8217;m not just talking about memory and megahertz bloat &#8212; we&#8217;ve also got performance <i>un</i>bloat. And it almost seems like the two go hand-in-hand. The <i>more</i> memory something hogs, the slower it&#8217;ll run.</p>

<p>Compare <a href="http://www.foxitsoftware.com/pdf/rd_intro.php">Foxit&#8217;s PDF reader</a> to <a href="http://www.adobe.com/products/acrobat/readstep2.html">Adobe Reader</a>:</p>

<ul>
<li>Foxit is a 2.5 MB download, Adobe is a 25 MB one.</li>
<li>Foxit uses 8 MB of memory for a 700 KB PDF, Adobe uses 56 MB.</li>
<li>Foxit loads in about 1 second, Adobe in 4 seconds.</li>
<li>Foxit is as fast or faster to use.</li>
</ul>

<p>Okay, so maybe Foxit doesn&#8217;t display all the latest 3D JavaScript-enhanced PDFs, but it does all you need, and it does it (relatively) small, fast, and light.</p>

<p>Maybe it helps (or hinders) to be an <a href='http://brush.co.nz/software'>embedded programmer</a>, and know how much you <i>can</i> do with 32 KB of code, 2 KB of RAM, and an 8 MHz, 8-bit processor. Sometimes I wish developers had to write code on ancient 66 MHz 486s. Constraints are the mother of optimization, and programmers will usually forget about optimization after it runs &#8220;fast enough&#8221; on their 42-core Pentium IX, 10 TB RAM development machine.</p>

<p>Sure, I grant that RAM and clock cycles are cheap these days, and we might as well use &#8216;em. But surely there&#8217;s a limit to all this. When my (plain text!) editor runs slow enough so I can see the screen updating, there&#8217;s something wrong.</p>

<p>When Visual Studio takes 2 entire seconds to pop up a simple properties window the first time, there&#8217;s something wrong.</p>

<p>Back in the days when programmers cared about how many characters they could write to video memory during the <a href='http://en.wikipedia.org/wiki/Color_Graphics_Adapter'>CGA</a> horizontal retrace time without it producing snow &#8212; back in those days, and running on a 286, I couldn&#8217;t see my screen updating.</p>

<p>We now have 1000&#8217;s of times the computing power, and as far as user experience is concerned, stuff runs slower than it used it. And we put up with it, because they&#8217;ve added one or two features we like, and it&#8217;s &#8220;good enough&#8221;. But it just ain&#8217;t right.</p>

<p>And it&#8217;s not just the my text editor and Visual Studio. When <a href='http://www.mozilla.com/thunderbird/'>Thunderbird</a> first came out, it was so slow on my fairly average hardware that I simply couldn&#8217;t use it. And now on my 2 GHz dual-core whatever-it-is, it&#8217;s still slow. I click on Inbox the first time, and it takes a second and a half for the message to pop up. Come on, people &#8212; you could load a usenet thread off a floppy drive in that time!</p>

<p>Somehow we&#8217;ve convinced ourselves that Gmail&#8217;s conversation view and anti-spam features make it worth putting up with 750 millisecond <a href="http://www.codinghorror.com/blog/archives/000722.html">Ajax delays all the time</a>. <i>Nope, it just ain&#8217;t right.</i></p>

<p>Recently I was reading from Michael Abrash&#8217;s <a href='http://www.byte.com/abrash/'><i>Graphics Programming Black Book</i></a>, and he has something telling (albeit provocative) to say about all this in chapter 2:</p>

<blockquote><p><a href='http://www.byte.com/abrash/' title='Abrash is the Antibloat'><img class='right border' src='http://blogstatic.micropledge.com/2008/06/abrash.png' width='150' height='133' alt="Abrash's Black Book" /></a>You will notice that my short list of objectives for high-performance assembly programming does not include traditional objectives such as easy maintenance and speed of development. Those are indeed important considerations&mdash; to persons and companies that develop and distribute software. <b>People who actually <i>buy</i> software, on the other hand, care only about how well that software performs, not how it was developed nor how it is maintained.</b> These days, developers spend so much time focusing on such admittedly important issues as code maintainability and reusability, source code control, choice of development environment, and the like that they often forget rule #1: From the user&rsquo;s perspective, <i>performance is fundamental.</i></p></blockquote>

<p>My theory is that it&#8217;s gonna take an <a href="http://en.wikipedia.org/wiki/Richard_Stallman">RMS</a>-style prophet to come along, take a few pages out of Abrash&#8217;s book, write his own instant-GUI operating system, wake up the masses to the 
joy of responsive computing, and watch the bloat industry crumble.</p>

<p>It&#8217;ll be a world where you can turn on your computer and use it immediately. A world where you wait at most half a second for big programs to load. A world where your screen will update even before the keyup event is sent. It won&#8217;t be utopia, but I&#8217;m still looking forward to it.</p>

<p>We&#8217;re taking submissions for this kind of prophet. Drop your résumé or CV in the comments below. :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/06/snappy-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Design Interval on crowdsourcing</title>
		<link>http://blog.micropledge.com/2008/05/crowdsourcing/</link>
		<comments>http://blog.micropledge.com/2008/05/crowdsourcing/#comments</comments>
		<pubDate>Wed, 28 May 2008 20:00:20 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/05/crowdsourcing/</guid>
		<description><![CDATA[There&#8217;s a nice post about how to build a crowdsourcing website over at the Design Interval blog. He&#8217;s written up some stuff about microPledge as well as crowdSPRING, a crowdsourcing website for graphic design.

For more about &#8220;crowdsourcing&#8221;, see the Wikipedia article on the subject.
]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a nice post about <a href='http://www.designinterval.com/19/how-to-build-a-crowdsourcing-website/'>how to build a crowdsourcing website</a> over at the <a href='http://www.designinterval.com/'>Design Interval blog</a>. He&#8217;s written up some stuff about <a href='http://micropledge.com/'>microPledge</a> as well as <a href='http://www.crowdspring.com/'>crowdSPRING</a>, a crowdsourcing website for graphic design.</p>

<p>For more about &#8220;crowdsourcing&#8221;, see the <a href='http://en.wikipedia.org/wiki/Crowdsourcing'>Wikipedia article</a> on the subject.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/05/crowdsourcing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simple XP tip: show COM ports</title>
		<link>http://blog.micropledge.com/2008/05/com-ports/</link>
		<comments>http://blog.micropledge.com/2008/05/com-ports/#comments</comments>
		<pubDate>Tue, 20 May 2008 23:05:34 +0000</pubDate>
		<dc:creator>Berwyn</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/05/com-ports/</guid>
		<description><![CDATA[As a developer, it&#8217;s annoying how XP hides advanced features way down deep.

For instance, I often use USB-serial devices, and when I need to check which port one of them&#8217;s attached to, here&#8217;s the 7-stage clickfest:




Start
Settings
Control Panel
System
Hardware
Device Manager
Ports (COM &#38; LPT)


Well, it can be much simpler than that. Simply put the following lines in a [...]]]></description>
			<content:encoded><![CDATA[<p>As a developer, it&#8217;s annoying how XP hides advanced features way down deep.</p>

<p>For instance, I often use USB-serial devices, and when I need to check which port one of them&#8217;s attached to, here&#8217;s the 7-stage clickfest:</p>

<p><img src="http://blogstatic.micropledge.com/2008/05/usbicon.png" width="150" align="right" alt="Ports" /></p>

<ol>
<li>Start</li>
<li>Settings</li>
<li>Control Panel</li>
<li>System</li>
<li>Hardware</li>
<li>Device Manager</li>
<li>Ports (COM &amp; LPT)</li>
</ol>

<p>Well, it can be much simpler than that. Simply put the following lines in a file called <code>ports.bat</code> and drag it to your quick launch bar:</p>

<blockquote>
<pre>reg query HKLM\hardware\devicemap\serialcomm
pause</pre>
</blockquote>

<p>Voila! Every time you click it, you get a nice list of all your COM ports in Lucida Console.</p>

<p>Feel free to drop <b>your own XP developer tips</b> in the comment box.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/05/com-ports/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Markup, not HTML, for source code</title>
		<link>http://blog.micropledge.com/2008/05/markup/</link>
		<comments>http://blog.micropledge.com/2008/05/markup/#comments</comments>
		<pubDate>Wed, 14 May 2008 21:07:42 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/05/markup/</guid>
		<description><![CDATA[Jeff Atwood&#8217;s idea to use HTML for his upcoming stackoverflow.com site is not a terrible one, except for one thing: source code. Even inside &#60;pre&#62; tags, &#60; and &#38; characters aren&#8217;t escaped. So instead of saying


if y &#60; 32:
    x = (y &#60;&#60; 3) &#038; 0xFF


you have to write


if y &#38;lt; 32:
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.codinghorror.com/blog/archives/001116.html'>Jeff Atwood&#8217;s idea to use HTML</a> for his upcoming stackoverflow.com site is not a terrible one, except for one thing: <i>source code</i>. Even inside <code>&lt;pre&gt;</code> tags, <code>&lt;</code> and <code>&amp;</code> characters aren&#8217;t escaped. So instead of saying</p>

<blockquote>
<pre>if y &lt; 32:
    x = (y &lt;&lt; 3) &#038; 0xFF</pre>
</blockquote>

<p>you have to write</p>

<blockquote>
<pre>if y &amp;lt; 32:
    x = (y &amp;lt;&amp;lt; 3) &amp;amp; 0xFF</pre>
</blockquote>

<p>Please, no!</p>

<p>Admittedly, it wouldn&#8217;t be hard for them to have their back-end convert these characters to HTML entities if they&#8217;re inside a <code>&lt;pre&gt;</code> tag. But then you can ask, is it really HTML anymore? </p>

<p>And would it correctly interpret &ldquo;<code>if n&lt;pre: x &gt;&gt;= 3</code>&rdquo;?</p>

<p>Even apart from all that, however, I much prefer the simplicity and relative beauty of a good markup language (read: Textile or Markdown). And it&#8217;s hardly a learning barrier if you&#8217;ve got a pop-up &#8220;help window&#8221; nearby, like <a href='http://reddit.com/r/programming/info/6jcfe/comments/'>reddit</a> or this blog do (see &#8220;formatting help&#8221; below).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/05/markup/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Decent: cool, minus the cucumber.</title>
		<link>http://blog.micropledge.com/2008/04/decent/</link>
		<comments>http://blog.micropledge.com/2008/04/decent/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 06:57:43 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
		
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.micropledge.com/2008/04/decent/</guid>
		<description><![CDATA[Decent.

The word&#8217;s just got a ring to it.

Yeah, pretty decent.

It&#8217;s like, totally way better than Cool. Same meaning and all that, but without those frigid &#8220;as a cucumber&#8221; connotations. Plus, it&#8217;s got a much bigger moral and artistic backbone.

Trust me, all the decent people are doing it. All the people here, at my place. Well, [...]]]></description>
			<content:encoded><![CDATA[<p><i>Decent.</i></p>

<p>The word&#8217;s just got a ring to it.</p>

<p><i>Yeah, pretty decent.</i></p>

<p>It&#8217;s like, totally way better than <i>Cool</i>. Same meaning and all that, but without those frigid &#8220;as a cucumber&#8221; connotations. Plus, it&#8217;s got a much bigger moral and artistic backbone.</p>

<p>Trust me, all the <i>decent</i> people are doing it. All the people here, at my place. Well, I am, at any rate. Woke up one morning and just switched. Easy as <a href='http://en.wikipedia.org/wiki/Sed'><code>s/cool/decent/g</code></a>.</p>

<p><a href='http://www.chesterton.org/aboutus.htm'>Chesterton said</a> we should break the conventions but keep the commandments. So why not start with your lingo, blingo, rap rap, you know what I&#8217;m sayin&#8217;?</p>

<p>C&#8217;mon, join the revolution: bring <i>decent</i> to a town near you.</p>

<p><i>Decent, man.</i></p>

<hr />

<p><small>P.S. Yep, I&#8217;m afraid this is tongue-in-cheek. Though I have &#8220;switched&#8221; &#8212; and years before <a href='http://decenturl.com/'>DecentURL</a> was conceived. Then again, maybe it&#8217;s just getting late. :-)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.micropledge.com/2008/04/decent/feed/</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 0.413 seconds -->
