<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">	<channel>		<title>Truer Words - A Journal</title>		<link>http://www.truerwords.net/index/channel/programming</link>		<description>The online journal of Seth Dillingham: faith, family, code, cycling, joy, and pain.</description>		<language>en</language>		<copyright>Copyright 2008 seth@macrobyte.net</copyright>		<generator>Conversant's Weblog II plugin</generator>		<category>Programming</category>		<item>	<title>An Entirely Other Day - Wide vs. Deep</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6096/trackback</trackback:ping>	<link>http://www.truerwords.net/6096</link>	<pubDate>Wed, 21 Nov 2007 22:31:25 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6096</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6096#msg6096</comments>	<category>People</category>	<category>Business</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;&lt;a href=&quot;http://blog.eod.com/post/18462877&quot;&gt;An Entirely Other Day - Wide vs. Deep&lt;/a&gt;&lt;/p&gt;&lt;blockquote cite=&quot;http://blog.eod.com/post/18462877&quot; class=&quot;cite&quot;&gt;	So here’s my theory:  Managers must work shallow and wide, while programmers must work narrow and deep.  People who are naturally tuned to one particular method of work will not only enjoy their jobs a lot more, but be better at them.  I’m a deep guy, I should be doing deep work.&lt;/blockquote&gt;&lt;p&gt;This article and his theory remind me of something (er, someone) which seems to be completely unrelated: Michael Jordan. When he retired from the Bulls for the first time (shortly after his Dad died) to see if he could play Major League Baseball, he found it very difficult to hit those legendary pitches.&lt;/p&gt;&lt;p&gt;What's the connection? The pitching coach (of either the White Sox or the AA team where he played... the Barons?) said his problem was one of focus. When you play basketball, you have to be aware of everything going on around you all the time. Peripheral vision is key. When you're trying to hit a 90-mile-per-hour baseball, you need absolute tunnel vision, total focus on that one task.&lt;/p&gt;&lt;p&gt;That's the difference between managing and programming.&lt;/p&gt;&lt;p&gt;Like the author of &quot;Wide vs. Deep,&quot; I've done both and I prefer programming. (Managing my crew at Macrobyte during its heyday was fine, but I'm referring to my time at RR Donnelley in the mid-90's.)&lt;/p&gt;&lt;p class=&quot;note&quot;&gt;(Thanks to &lt;a href=&quot;http://daringfireball.net/linked/2007/november#wed-21-wide_deep&quot;&gt;DF&lt;/a&gt; for the original link.)&lt;/p&gt;</description>	</item><item>	<title>Faster Code (Converting HTML to Text)</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6092/trackback</trackback:ping>	<link>http://www.truerwords.net/6092</link>	<pubDate>Mon, 12 Nov 2007 15:01:17 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6092</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6092#msg6092</comments>	<category>Customers</category>	<category>Macrobyte</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;Over the years I've written this code in a few different languages: take some HTML input, process it according to some of the basic rules a browser would use, and spit out plain text (no tags or HTML entities). By &quot;basic rules a browser would use,&quot; I mean that e.g. a series of &amp;lt;p&amp;gt; tags should not result in a long blank gap, but a series of &amp;lt;br /&amp;gt; tags should. Line breaks (\r or \n) don't matter except within a pre-formatted section. Etc., etc.&lt;/p&gt;&lt;p&gt;My first attempt, I think, was in straight UserTalk. Then i rewrote it a couple of times with regular expressions (still UserTalk) to make it faster. Then a client needed it in a language that could be used on any Mac OS X box, so I rewrote it in Perl, which was faster still (and was much better about converting the HTML entities to UniCode).&lt;/p&gt;&lt;p&gt;The Perl script uses lots of regular expressions, and so makes many passes over the input, changing the text in place. It worked well enough for most HTML, but long documents with a very high ratio of tags-to-text (that is, very tag heavy) would process very slowly. Unfortunately the script was run automatically in the background by a &quot;regular&quot; GUI application, and so the app would seem to freeze up for a little while as it processed one of these pathological cases.&lt;/p&gt;&lt;p&gt;Over the last week I rewrote it again, this time in pure C++. It's a command line tool with the same basic interface that the Perl script had: you can pass it an argument to specify the input file and output files. Omitting either one causes it to use standard input and/or output.&lt;/p&gt;&lt;p&gt;The new tool makes a single pass through the text, doesn't use any regular expressions, and generates slightly better output. Actually, it's more honest to say that it makes three passes through the text: first it converts UTF-8 to UTF-16 (but that's an OS API service), then it processes the UTF-16, then it converts back to UTF-8 (again, just done by the OS) for output.&lt;/p&gt;&lt;p&gt;The timing results speak for themselves. These tests use the worst, most pathological example we had. It's a 200 KB file that's about 90% tags (specifically, it's a long email exchange where everybody top-posted and quoted everything else, and everyone used HTML messages.)&lt;/p&gt;&lt;pre class=&quot;code&quot;&gt;$ time striphtmltags.pl - &amp;lt; ./striphtmltags.input.html &amp;gt; ./striphtmltags.output.txt &lt;span style=&quot;color: rgb(0, 255, 0);&quot;&gt;# old one&lt;/span&gt; real    &lt;b style=&quot;color: rgb(221, 0, 0);&quot;&gt;0m20.201s&lt;/b&gt;user    0m19.774ssys     0m0.352s $ time newstriphtml &amp;lt; ./striphtmltags.input.html &amp;gt; ./striphtmltags.output.txt &lt;span style=&quot;color: rgb(0, 255, 0);&quot;&gt;# new one&lt;/span&gt; real    &lt;b style=&quot;color: rgb(0, 0, 221);&quot;&gt;0m0.048s&lt;/b&gt;user    0m0.039ssys     0m0.010s&lt;/pre&gt;&lt;p&gt;They wanted it faster. For this worst-case scenario, it's 420 times faster. Zoom.&lt;/p&gt;</description>	</item><item>	<title>My First Core Image Filter (for Acorn)</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6064/trackback</trackback:ping>	<link>http://www.truerwords.net/6064</link>	<pubDate>Fri, 28 Sep 2007 03:32:42 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6064</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6064#msg6064</comments>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;While playing with &lt;a href=&quot;http://flyingmeat.com/acorn/&quot;&gt;Acorn&lt;/a&gt;, I was trying to figure out how to make a scan of some black and white line art appear as black-and-transparent, so it would look as though it was &quot;drawn&quot; directly onto whatever background over which it was placed.&lt;/p&gt;&lt;p&gt;Not *quite* as easy as it sounds, for a couple of reasons. The biggest problem is that you can't just give all white pixels an opacity of 0% (or 100% transparency). Black and white line art &quot;scans&quot; are not just black and white, even after you clean them up: the edges of the black have a sort of anti-aliasing: light gray pixels that help to smooth out the image. The second problem is that Acorn doesn't support channel-based editing. You can change opacity and color all you want to, but you can't just view and edit the image's alpha channel.&lt;/p&gt;&lt;p&gt;I asked &lt;a href=&quot;http://gusmueller.com/blog/&quot;&gt;Gus&lt;/a&gt; if he thought I should do an Acorn plugin (and described what I was trying to accomplish). See, years ago I wrote a little plugin for a little company called Adobe, for their little app called Photoshop (v.4, I think). The money was good, and we still have the B&amp;W G3 and 17&quot; display that they sent me along with the check. Anyway, I figured if I could write a Photoshop plugin for Adobe, I could write an Acorn plugin for my own use, right? Right!?&lt;/p&gt;&lt;p&gt;Gus said I would be better served writing a Core Image Filter. It's like a filter/plugin, but it's for the OS instead of a specific app.&lt;/p&gt;&lt;p&gt;I didn't make time to work on it until today. It took a couple of hours to find the right documentation and actually write the filter. Gus had sent me the heart of the filter in the form of a single, very short function that just manipulated the alpha value of a pixel based on the channel's combined r/g/b values.&lt;/p&gt;&lt;p&gt;Apple's docs for this stuff are surprisingly bad. I found one tutorial that helped a bit, and then in the end I just had to try a few things to make it work.&lt;/p&gt;&lt;style type=&quot;text/css&quot;&gt;&lt;!--div.demoWrapper {	position: relative;	width: 630px; 	top: 1em;	left: 1em;	height: 418px;	overflow: auto;}div.imageBlock {	width: 206px;	position: absolute;}div.imageDisplay {	margin: 6px;	padding: 0;	text-align: center;}div.imageBlock.bga div.background {	background: url(http\://media.macrobyte.net/white_to_trans/Background%20A.png);}div.imageBlock.bgb div.background {	background: url(http\://media.macrobyte.net/white_to_trans/Background%20B.png);}div.imageBlock.bgc div.background {	background: url(http\://media.macrobyte.net/white_to_trans/Background%20C.png);}div.imageDisplay div {	padding: 2px;}div.imageDisplay div.description {	background: #fff;	font-size: 9px;	font-family: helvetical, verdana, arial;}--&gt;&lt;/style&gt;&lt;!--[required_stylesheets]--&gt;&lt;div class=&quot;demoWrapper&quot;&gt;	&lt;h4 style=&quot;text-align: center; margin: 0;&quot;&gt;Three Images, Three Backgrounds&lt;/h4&gt;	&lt;div class=&quot;imageBlock bga&quot;&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20A.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;Plain black and white image, no transparency.&lt;/div&gt;		&lt;/div&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20B.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;White converted to 100% transparency. The 'halo' comes from the light gray pixels that smooth out the black lines when the image is over a white background.&lt;/div&gt;		&lt;/div&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20C.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;Image after applying the 'White to Alpha' filter in Acorn.&lt;/div&gt;		&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imageBlock bgb&quot; style=&quot;left: 206px;&quot;&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20A.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;Plain black and white image, no transparency.&lt;/div&gt;		&lt;/div&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20B.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;White converted to 100% transparency. The 'halo' comes from the light gray pixels that smooth out the black lines when the image is over a white background.&lt;/div&gt;		&lt;/div&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20C.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;Image after applying the 'White to Alpha' filter in Acorn.&lt;/div&gt;		&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imageBlock bgc&quot; style=&quot;left: 412px;&quot;&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20A.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;Plain black and white image, no transparency.&lt;/div&gt;		&lt;/div&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20B.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;White converted to 100% transparency. The 'halo' comes from the light gray pixels that smooth out the black lines when the image is over a white background.&lt;/div&gt;		&lt;/div&gt;		&lt;div class=&quot;imageDisplay&quot;&gt;			&lt;div class=&quot;background&quot;&gt;&lt;img src=&quot;http://media.macrobyte.net/white_to_trans/Macrobyte%20Logo%20C.png&quot; /&gt;&lt;/div&gt;			&lt;div class=&quot;description&quot;&gt;Image after applying the 'White to Alpha' filter in Acorn.&lt;/div&gt;		&lt;/div&gt;	&lt;/div&gt;&lt;/div&gt;&lt;br clear=&quot;all&quot; /&gt;&lt;p&gt;So what does it do, exactly? Well, the idea was to display black-and-white line art so that it would look &quot;good&quot; on any background (not just white). In Photoshop, the easiest way to do this is to copy the artwork to the alpha channel, invert the channel (100% -&gt; 0%, 0% -&gt; 100%, 25% -&gt; 75%, etc.), go back to the main image (either the RGB channels or the Gray channel) and bring the brightness way down and the contrast way up so that any pixels which were anything other than pure white are now pure black.&lt;/p&gt;&lt;p class=&quot;note&quot;&gt;(Why? Because their &quot;gray&quot; levels will now be opacity levels, so they will blend against any background. What was light gray is now solid black but mostly transparent.)&lt;/p&gt;&lt;p&gt;That's how I'd do it in Photoshop. Now I can do it in Acorn with a single click. :-D&lt;/p&gt;&lt;p&gt;If you want it, feel free to &lt;a href=&quot;http://media.macrobyte.net/white_to_transparent.plugin.zip&quot;&gt;download a copy of the filter&lt;/a&gt;. Copy it to /Libryar/Graphics/Image Units/ or ~/Library/Graphics/Image Units/. I've used it in Acorn, Core Image Fun House, and Quartz Composer… so I can assure you that it works on my machine. ;-)&lt;/p&gt;&lt;p&gt;Update: If you install it, you'll find it in Acorn under the Filters-&gt;Stylize menu. Maybe not the best place for it, but I'm not sure where it should be.&lt;/p&gt;</description>	</item><item>	<title>PMC Software Auction 8: Web Developer's Paradise</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6040/trackback</trackback:ping>	<link>http://www.truerwords.net/6040</link>	<pubDate>Tue, 28 Aug 2007 18:40:46 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6040</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6040#msg6040</comments>	<category>PMC</category>	<category>Software Auctions</category>	<category>Technology</category>	<category>Programming</category>	<category>Web Sites</category>	<description>&lt;p&gt;The eighth auction is running, and is called “&lt;a href=&quot;http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;ih=011&amp;viewitem=&amp;item=320152686343&amp;rd=1&quot;&gt;Mac Software Bundle: Web Developer's Paradise&lt;/a&gt;.”&lt;/p&gt;&lt;p&gt;This is the most ‘focused’ auction to date. These are tools for web (site or app) developers, and include high-end apps like BBEdit for source editing, Coda and Sandvox for designing, SQLGrinder for databases, Interarchy for FTP, and Screen Mimic for screencasts. (I do this work for a living, and seriously wish I had all of these apps!) Also included Daylite and Billings, to help on the business side of being a web developer.&lt;/p&gt;&lt;p&gt;Yeah, ok, that last sentence sounded like a lame attempt at marketing, but it wasn't. I'm serious. I don't have Coda, Sandvox, SQLGrinder, or Screen Mimic, and could certainly use them. (So maybe it's not a good idea for me to sell a sweet bundle like this to my competition!)&lt;/p&gt;&lt;p&gt;Two last details: there's no reserve this time, and it's a seven day auction instead of five.&lt;/p&gt;</description>	</item><item>	<title>GarageSale and the PMC Software Auctions</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6026/trackback</trackback:ping>	<link>http://www.truerwords.net/6026</link>	<pubDate>Sun, 19 Aug 2007 02:25:30 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6026</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6026#msg6026</comments>	<category>PMC</category>	<category>Software Auctions</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;I'm taking a  minute to post a big &quot;Thank You&quot; to the folks at &lt;a href=&quot;http://www.iwascoding.com/&quot;&gt;iwascoding&lt;/a&gt;, the makers of &lt;a href=&quot;http://www.iwascoding.com/GarageSale/&quot;&gt;GarageSale&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;They didn't &quot;just&quot; donate five licenses of GarageSale to the auction. They also gave me a license of my own to use for the auctions, AND... no, wait, this deserves it's own paragraph.&lt;/p&gt;&lt;p&gt;AND... they added a feature to GarageSale specifically because I needed it!&lt;/p&gt;&lt;p&gt;Here's the deal: if you're doing charity auctions on eBay, you need to have an account with &lt;a href=&quot;http://www.missionfish.org/&quot;&gt;MissionFish&lt;/a&gt;, who guarantees that the charity receives the money. When you create the auction, you need to provide your Mission Fish info, choose your charity (out of a list of thousands), and specify what percentage of the final sale will go to the charity.&lt;/p&gt;&lt;p&gt;It's a serious pain in the neck, just like everything else related to setting up an auction on eBay (IMO).&lt;/p&gt;&lt;p&gt;With GarageSale, though, it's easy. They remember my MissionFish account in the prefs. They remember my choice of charities. I can create new auctions almost instantly, based on previous auction templates. Plus, the software has this practically endless list of aucton styles!&lt;/p&gt;&lt;p&gt;This project will always be a huge amount of work, but I'm whittling away at the process and it's growing easier all the time. GarageSale and it's charity-friendliness is my number-one biggest time saver, though. (Next year, my Rails app for managing all the data for this project will be the number one time-saver. I'm already using it this year, and it's saving me time, but I also &lt;b&gt;wrote it&lt;/b&gt; this year so the real savings won't start until next year.)&lt;/p&gt;&lt;p&gt;Um... &quot;P.S.&quot; Last time I did this, I got free copies of &lt;a href=&quot;http://www.knoxformac.com/&quot;&gt;Knox&lt;/a&gt;, &lt;a href=&quot;http://www.flyingmeat.com/voodoopad/&quot;&gt;VoodooPad&lt;/a&gt;, &lt;a href=&quot;http://www.flyingmeat.com/flysketch/&quot;&gt;FlySketch&lt;/a&gt; and &lt;a href=&quot;http://www.flyingmeat.com/flygesture/&quot;&gt;FlyGesture&lt;/a&gt;, but I forgot to thank Marko and Gus. Thanks guys!&lt;/p&gt;</description>	</item><item>	<title>Working On Tools</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6002/trackback</trackback:ping>	<link>http://www.truerwords.net/6002</link>	<pubDate>Tue, 31 Jul 2007 22:17:03 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6002</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6002#msg6002</comments>	<category>Essays</category>	<category>Technology</category>	<category>BBEdit</category>	<category>Conversant</category>	<category>Frontier</category>	<category>Programming</category>	<category>Ruby</category>	<category>Ruby on Rails</category>	<description>&lt;p&gt;Immediately after &quot;retiring&quot; from the &lt;a href=&quot;http://prototypejs.org/core&quot;&gt;Prototype Core Team&lt;/a&gt;, I became active (for the first time!) on the group and finally did what I was there to do in the first place. The next version of Prototype (1.6) will have custom events. The custom events code in 1.6 doesn't look much like &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;the code I described in my essay&lt;/a&gt; a year ago, but it's built on the same idea: piggyback custom events on one of the browser's built-in events. (The custom events code in 1.6 was written by a number of people, not just me.)&lt;/p&gt;&lt;p&gt;Anyway, the real point here is that I use &lt;a href=&quot;http://www.prototypejs.org/&quot; title=&quot;Prototype - a javascript library for web applications&quot;&gt;Prototype&lt;/a&gt; for nearly all of my web projects now, &lt;span style=&quot;font-weight: bold;&quot;&gt;and&lt;/span&gt; I contribute to its development. That's working on my own tools.&lt;/p&gt;&lt;p&gt;Plus, immediately after finishing my side of Prototype's new events code, I realized that the next version of Prototype didn't look quite right in BBEdit's function popup. (Some objects were listed as [anonymous] when they should have had names, and some class methods were listed as though they weren't contained by anything.)&lt;/p&gt;&lt;p&gt;So, I updated BBEdit's JavaScript module to fix that problem.&lt;/p&gt;&lt;p&gt;I'm rather proud of the JavaScript support in &lt;a href=&quot;http://www.barebones.com/products/bbedit/&quot;&gt;BBEdit&lt;/a&gt;, but (again) the real point here is that I love being able to work on my own tools! (See the &lt;a href=&quot;http://www.truerwords.net/articles/bbedit/disclaimer.html&quot;&gt;BBEdit Disclaimer&lt;/a&gt;...)&lt;br&gt;&lt;/p&gt;&lt;p&gt;The same is true for &lt;a href=&quot;http://conversant.macrobyte.net/&quot; title=&quot;Macrobyte's Groupware and Content Managent software&quot;&gt;Conversant&lt;/a&gt;, which currently runs on &lt;a href=&quot;http://frontierkernel.org/&quot; title=&quot;Frontier scripting system. Open source.&quot;&gt;Frontier&lt;/a&gt;, and which runs my site (and lots of others).&lt;/p&gt;&lt;p&gt;Being a tool-builder makes me feel like a real craftsman.&lt;/p&gt;</description>	</item><item>	<title>Apple, On Custom JavaScript Events</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5982/trackback</trackback:ping>	<link>http://www.truerwords.net/5982</link>	<pubDate>Wed, 04 Jul 2007 17:45:40 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5982</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5982#msg5982</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<description>&lt;p&gt;This morning when I checked my Gmail account, I read a message (from someone named &quot;Filippelli Christophe&quot;) that said Apple seemed to be using my &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;Custom JavaScript Events&lt;/a&gt; code on the iPhone page. (In case anyone misunderstands: this is a &lt;b&gt;very good thing&lt;/b&gt; in my opinion.)&lt;/p&gt;&lt;p&gt;&quot;Yeah right,&quot; I thought.&lt;/p&gt;&lt;p&gt;But it's true, at least at the moment. You can see it for yourself:&lt;/p&gt;&lt;ol style=&quot;width: 75%;&quot;&gt;	&lt;li&gt;&lt;a href=&quot;http://media.truerwords.net/events/apple_images/01%20iphone%20home.png&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/events/apple_images/01%20iphone%20home%20thumb.png&quot; align=&quot;right&quot; border=&quot;0&quot; height=&quot;110&quot; width=&quot;110&quot;&gt;&lt;/a&gt;Go to &lt;a href=&quot;http://www.apple.com/iphone/&quot;&gt;the iPhone home page&lt;/a&gt;&lt;br clear=&quot;all&quot;&gt;&lt;/li&gt;	&lt;li&gt;&lt;a href=&quot;http://media.truerwords.net/events/apple_images/02%20iphone%20home%20src.png&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/events/apple_images/02%20iphone%20home%20src%20thumb.png&quot; align=&quot;right&quot; border=&quot;0&quot; height=&quot;110&quot; width=&quot;110&quot;&gt;&lt;/a&gt;View the source.&lt;br clear=&quot;all&quot;&gt;&lt;/li&gt;	&lt;li&gt;&lt;a href=&quot;http://media.truerwords.net/events/apple_images/03%20iphone%20event_mixins.png&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/events/apple_images/03%20iphone%20event_mixins%20thumb.png&quot; align=&quot;right&quot; border=&quot;0&quot; height=&quot;110&quot; width=&quot;110&quot;&gt;&lt;/a&gt;About 20 lines down (in the source) there's an indented bundle of &amp;lt;script&amp;gt; tags, the first of which points to “&lt;code&gt;/global/scripts/lib/event_mixins.js&lt;/code&gt;”. Copy that path, and &lt;a href=&quot;http://www.apple.com/global/scripts/lib/event_mixins.js&quot;&gt;load it up in your browser&lt;/a&gt;. &lt;br clear=&quot;all&quot;&gt;&lt;/li&gt;	&lt;li&gt;See? Third line down says, “(c) 2006 Seth Dillingham …”. &lt;em&gt;How cool is that?&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;section&quot; style=&quot;border: 1px solid rgb(255, 153, 0); overflow: auto; max-height: 2.5in;&quot;&gt;&lt;h3 style=&quot;margin-left: -0.5em;&quot;&gt;Boring Mac Programmer Stuff&lt;/h3&gt;	&lt;p&gt;The irony is that my custom events code is based on Apple's own work.&lt;/p&gt;	&lt;p&gt;	Huh?&lt;/p&gt;	&lt;p&gt;	Well, in the early 90's, Apple pushed the Mac application developers to make their applications scriptable and recordable.&lt;/p&gt;	&lt;ul&gt;		&lt;li&gt;Scriptable meant you could automate (control) the application with AppleScript scripts.&lt;/li&gt;		&lt;li&gt;Recordable meant you could tell your script editor to start recording, then do something in the application and your actions would be translated to a re-usable applescript in the script editor.&lt;/li&gt;	&lt;/ul&gt;	&lt;p&gt;	The way it worked was that a button click or menu selection (to name just two examples) in the application would cause the application to send an AppleEvent (the tech on which AppleScript was built) &lt;i&gt;to itself&lt;/i&gt;. So it was like you had two applications in one: the one the user interacts with, and the &quot;engine room&quot; where all the real work was done, and the UI communicated with the engine room by sending AppleEvents.&lt;/p&gt;	&lt;p&gt;	Many well-written applications already “decoupled” the UI from the rest of the code anyway. If the application was also going to be scriptable, then also making it recordable (with the above approach) was at least a realistic consideration (though it was still a lot of work.)&lt;/p&gt;	&lt;p&gt;	My &quot;Custom Events for JavaScript&quot; article uses the word ‘decoupling’ in the title for exactly that reason: the intent is to allow you to decouple the UI of a web application from the data processing you do in JavaScript, and/or on the server side. It's not identical to Apple's recordability model, but it's inspired by it.&lt;/p&gt;	&lt;p&gt;	Blah blah blah... most people don't care about that stuff, I know.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Anyway, I told &lt;a href=&quot;http://www.glorifiedtypist.com/&quot;&gt;Rich&lt;/a&gt; about this and he said Apple owes me an iPhone. Hah.&lt;/p&gt;&lt;blockquote&gt;	“Dear Apple: my friend Rich Siegel — you've heard of him, right? — says you owe me an iPhone. Love, Seth”&lt;/blockquote&gt;&lt;p&gt;(Of course, they don't actually owe me anything. I did release the code for free, after all...)&lt;/p&gt;&lt;p&gt;Rich had a funny response to the above (in the form of a faux letter back from Apple), but I'll leave it to him to post (or not). ;-)&lt;/p&gt;&lt;p&gt;I told &lt;a href=&quot;http://flip.macrobyte.net/weblog&quot; title=&quot;Philippe Martin&quot;&gt;Flip&lt;/a&gt; about it, too (hey, I was excited!), and he said he's going to tell his friends that he knows someone who made the iPhone possible. Hear that popping sound? That was my ego. ;-)&lt;/p&gt;&lt;p&gt;Update: forgot to mention that the custom events stuff is what landed me on the Prototype Core team in the first place... and they (the rest of the team) expect me to roll some form of the custom events code into Prototype itself. Have to do it soon, or Sam is going to send me a &lt;a href=&quot;http://en.wikipedia.org/wiki/Magical_objects_in_Harry_Potter#Howler&quot;&gt;Howler&lt;/a&gt;...&lt;/p&gt;&lt;br clear=&quot;all&quot;&gt;</description>	</item><item>	<title>Creating Custom Events with, uh... me?</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5854/trackback</trackback:ping>	<link>http://www.truerwords.net/5854</link>	<pubDate>Wed, 28 Feb 2007 15:08:05 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5854</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5854#msg5854</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<description>&lt;p&gt;Last year I was working on a &lt;a href=&quot;http://conversant.macrobyte.net/&quot; title=&quot;Macrobyte's Groupware and Content Managent software&quot;&gt;Conversant&lt;/a&gt;-based RSS aggregator. It was very AJAXy, with a responsive UI which acted as much like a traditional desktop aggregator as I could manage in the limited time I had to work on this project.&lt;/p&gt;&lt;p&gt;In the process, I created the Custom Events mix-in (extension) classes for &lt;a href=&quot;http://www.prototypejs.org/&quot; title=&quot;Prototype - a javascript library for web applications&quot;&gt;Prototype&lt;/a&gt;. Then, a little later, I &lt;a href=&quot;http://www.truerwords.net/5567&quot;&gt;attended RubyConf '06&lt;/a&gt; and met Sam, who was impressed enough with my work that he asked me to join the &lt;a href=&quot;http://prototypejs.org/core&quot;&gt;Prototype Core&lt;/a&gt; team a few months later when it was formed. (Which is something I've neglected to mention here.)&lt;/p&gt;&lt;p&gt;Those custom events classes have received some attention... except from me. My &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;write-up that described my approach&lt;/a&gt; is one of the most-frequently-hit pages on the site, and a number of people have linked to it (&lt;a href=&quot;http://alistapart.com/articles/fontresizing&quot;&gt;including A List Apart&lt;/a&gt;, which generated a lot of traffic).&lt;/p&gt;&lt;p&gt;Most of the links, though, were in passing. Comments like, &quot;this looks interesting,&quot; or, &quot;here's an alternative approach to doing custom events,&quot; etc., etc., etc. That was fine... I'd heard from people who I know are using it, and some have even reported bugs (which I've fixed) that they ran into while implementing custom events in their own projects.&lt;/p&gt;&lt;p&gt;Yesterday, Daniel wrote &lt;a href=&quot;http://spoken.phrasewise.com/articles/2007/02/27/creating-custom-events-with-seth&quot;&gt;“Creating Custom Events with Seth”&lt;/a&gt;, wherein he documented not only the struggles that led his team to using Custom Events in the first place, but also the benefits they've seen as a result.&lt;/p&gt;&lt;blockquote cite=&quot;http://spoken.phrasewise.com/articles/2007/02/27/creating-custom-events-with-seth&quot;&gt;	So toggling is screaming to be refactored since the wiring is painful to behold. It’s far too interwingled with the other stuff on the page and we know it. I had looked at Seth’s work a while back, and shoved it into my back pocket… and today it worked out perfectly. We did a little spike, got the basic code working, and then applied our new found knowledge to the problem. Now we have excellent separation of concerns. The toggle dispatches a custom event, and various things listen for it via a broker. Nice. Any other widgets or tools can tie in just as easily. Since we were already using Prototype.js and our own classes, it took only about 15 minutes to mixin the Event classes and set up a broker. Most excellent Seth!&lt;/blockquote&gt;&lt;p&gt;Very cool, Daniel, I'm really glad this worked out for you.&lt;/p&gt;&lt;p&gt;He also mentioned a documentation bug, which doesn't surprise me at all. I should really rewrite and reconfigure that page into a small collection of more approachable pages, and review it all for accuracy. Just one more thing for the to-do list.&lt;/p&gt;</description>	</item><item>	<title>Writing Hardware</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5843/trackback</trackback:ping>	<link>http://www.truerwords.net/5843</link>	<pubDate>Tue, 13 Feb 2007 20:42:49 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5843</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5843#msg5843</comments>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;Reading &lt;a href=&quot;http://planet.mozilla.org/&quot;&gt;Planet Mozilla&lt;/a&gt; this afternoon, as I do every day, I saw this in Brendan Eich's article, &lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/archives/2007/02/threads_suck.html&quot;&gt;Threads Suck&lt;/a&gt;:&lt;/p&gt;&lt;blockquote cite=&quot;http://weblogs.mozillazine.org/roadmap/archives/2007/02/threads_suck.html&quot; class=&quot;cite&quot;&gt;	&lt;p&gt;Threads violate abstractions six ways to Sunday. Mainly by creating race conditions, deadlock hazards, and pessimistic locking overhead. And still they don't scale up to handle the &lt;a href=&quot;http://www.cs.princeton.edu/%7Edpw/popl/06/Tim-POPL.ppt&quot;&gt;megacore teraflop future&lt;/a&gt;.&lt;/p&gt;	&lt;p&gt;	We can hope for better static analyses to find all races. In the real world, the code is C or C++ and there's no hope for static salvation.  Sure, some languages try to put deadlocks in a syntactic cage, but that walks right into the overhead problem, in spite of heroic VM-based optimizations. Unexpected costs, even if constant or linear, can sink any abstraction. For example (still piquant to Mozilla hackers busy &lt;a href=&quot;http://weblogs.mozillazine.org/roadmap/archives/2006/02/fresh_xpcom_thinking.html&quot;&gt;deCOMtaminating&lt;/a&gt;), virtual method calls cost; they should be avoided where you're writing &lt;a href=&quot;http://steve-yegge.blogspot.com/2007/01/pinocchio-problem.html&quot;&gt;hardware&lt;/a&gt;. The same goes for locks: not all abstractions must be MT-safe; some must be ST and fast.&lt;/p&gt;	&lt;p&gt;	So my default answer to questions such as the one I got at last May's Ajax Experience, &quot;When will you add threads to JavaScript?&quot; is: &quot;over your dead body!&quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I'm all in favor of not having threads in JavaScript. We already have pretend threads... we certainly don't need preemptive multitasking in our web scripting. KISS, you know?&lt;/p&gt;&lt;p&gt;Anyway, my real reason for posting this? I just wanted to point out that I knew where that &quot;writing hardware&quot; link was going to point even before I checked it.&lt;/p&gt;&lt;p&gt;That Steve Yegge, man. Quite the writer.&lt;/p&gt;</description>	</item><item>	<title>Chat with Brian Regarding Lexers and Parser Generators</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5833/trackback</trackback:ping>	<link>http://www.truerwords.net/5833</link>	<pubDate>Fri, 02 Feb 2007 18:10:30 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5833</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5833#msg5833</comments>	<category>Nits</category>	<category>Friends</category>	<category>Technology</category>	<category>Brian Andresen</category>	<category>Programming</category>	<description>&lt;p&gt;(I'm sure with that subject, everybody's just dying to read this one...)&lt;/p&gt;&lt;p&gt;I had a (third) chat with Brian Andresen today about Lexers and Parser Generators, a type of software that's working overtime to suck worse than most email clients.&lt;/p&gt;&lt;div class=&quot;chat&quot;&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:06:49&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;remember we were looking for Unicode-savvy parsing tools a while back?&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:06:59&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;I do&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:07:04&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;I&amp;apos;m looking for new parser-generator tools for my project at work&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;came across this:  http://www.devincook.com/goldparser/about/why-use-gold.htm&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:09:23&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;oh man, very interesting&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:09:51&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;I suspect that the author is more mindful of capability than performance&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;still, I plan to download it and try a small grammar with GOLD&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;I&amp;apos;ll also try out ANTLR (again) and ACCENT (http://accent.compilertools.net/)&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;(why do all of these tools use all-caps names?  dunno.)&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:11:18&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;ANTLR is an acronym, I don&amp;apos;t know about the rest&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;not that it matters much&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:11:40&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;yeah&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:12:00&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;I know ANTLR made some more progress, but I haven&amp;apos;t played with it. &lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;heh. Check out the first News Item on the &lt;a href=&quot;http://www.antlr.org/&quot;&gt;ANTLR home page&lt;/a&gt; &lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:12:59&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;bah, GOLD is Win32-only.&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:13:07&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;Grr.&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;This whole class of software is a joke.&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:13:24&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;2009?!  we&amp;apos;re going to have to wait a long time for that next beta.&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:14:09&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;But the news is in past tense! I think they&amp;apos;re probably just thousands of timezones ahead of us. That would explain it.&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:14:17&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;heh&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;yeah, there&amp;apos;s not much out there that&amp;apos;s free.  I&amp;apos;ve found a bunch of commercial tools, but none of them have even inspired me to request a trial version&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:24:57&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;again, I see that ANTLR&amp;apos;s C++ target is dormant. http://www.antlr.org:8080/pipermail/antlr-interest/2007-January/019001.html&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:25:11&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;that&amp;apos;s very relevant, thank you&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:25:32&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;Looking at this stuff never makes me happy. :-(&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:25:40&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;no kiddin&amp;apos;&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;well, that just left me with a grand total of zero tools to investigate.  lame.&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:26:18&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;I think, &amp;quot;I could devote a ton of my time to learning the issues and helping to fix these problems. Or I could make a living and have a life, and make do with what I already have.&amp;quot;&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:26:31&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;yep&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:26:58&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;But it still makes me nuts. My work could really benefit from a good, Unicode-savvy parser generator.&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;with a C++ target&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:28:01&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;yeah.  the thing that got me started on this (for Agilent) was how poorly designed lex/yacc (and flex/bison) are for providing code to be part of a larger project&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;they were designed for making a standalone executable that doesn&amp;apos;t need to do much more beyond the parsing, it seems&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:28:56&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;they&amp;apos;re specifically for feeding a compiler, right? &lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:29:22&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;our simulator already has six lex/yacc-based parsers in the code, and we end up having to mangle the yy___ symbols and other globals to even just make it link&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:29:57&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;(a particular kind of compiler/builder, I mean)&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:30:06&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;yeah&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:30:17&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;Hey, do you mind if I post this conversation on [tw]? I&amp;apos;ll hide your handle.&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member1&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Brian Andresen&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:31:36&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Brian Andresen.jpg&quot; alt=&quot;Brian Andresen&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;oh right, and my other gripe was memory management.  Suppose we&amp;apos;re parsing through a line and allocating memory for various things as we go.  Then we hit a syntax error.  There are ways to design the rules to do error recovery, but designing the rules to allow error recovery to clean up all allocated memory is not obvious at all.&lt;/div&gt;		&lt;div class=&quot;imessageText&quot;&gt;go for it&lt;/div&gt;	&lt;/div&gt;	&lt;div class=&quot;imessage member2&quot;&gt;		&lt;span class=&quot;sender&quot;&gt;Seth Dillingham&lt;/span&gt;		&lt;span class=&quot;time&quot;&gt;11:32:48&lt;/span&gt;		&lt;span class=&quot;avatar&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/adium/Seth Dillingham.jpg&quot; alt=&quot;Seth Dillingham&quot; /&gt;&lt;/span&gt;		&lt;div class=&quot;imessageText&quot;&gt;thanks&lt;/div&gt;	&lt;/div&gt;&lt;/div&gt;</description>	</item><item>	<title>Steve Yegge on Living Software, Reminds me of Something...</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5827/trackback</trackback:ping>	<link>http://www.truerwords.net/5827</link>	<pubDate>Thu, 25 Jan 2007 19:05:33 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5827</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5827#msg5827</comments>	<category>Technology</category>	<category>Conversant</category>	<category>Programming</category>	<description>&lt;p&gt;Steve Yegge has written another fantastic rant, this time about &lt;a href=&quot;http://steve-yegge.blogspot.com/2007/01/pinocchio-problem.html&quot;&gt;designing for living software&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;He starts out by reiterating something I've said before: all software is crap. (I usually say &lt;a href=&quot;http://www.truerwords.net/2936&quot;&gt;it all sucks&lt;/a&gt;, and then follow it up with a comment about &lt;a href=&quot;http://www.truerwords.net/780&quot;&gt;all email software sucking infinitely&lt;/a&gt;.) He goes on to talk about the traits that make some software suck the &lt;b&gt;least&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;I got a small thrill as I read it, and I think some of my friends will, also, if they take the time to read it (specifically, those friends who spent time working on &lt;a href=&quot;http://conversant.macrobyte.net/&quot; title=&quot;Macrobyte's Groupware and Content Managent software&quot;&gt;Conversant&lt;/a&gt;, or a lot of time using it).&lt;/p&gt;&lt;p&gt;We did the UI all wrong (something which I hope to remedy), but this article has reminded me that the design principles we followed in building Conversant's core — and many of its plugins — were pretty good.&lt;/p&gt;&lt;blockquote cite=&quot;http://steve-yegge.blogspot.com/2007/01/pinocchio-problem.html&quot; class=&quot;cicte&quot;&gt;	&lt;p&gt;Moving right along, world-class software systems always have an extension language and a plug-in system — a way for programmers to extend the base functionality of the application. Sometimes plugins are called &quot;mods&quot;. It's a way for your users to grow the system in ways the designer didn't anticipate.&lt;/p&gt;	&lt;p&gt;	…&lt;/p&gt;	&lt;p&gt;	The very best plug-in systems are powerful enough to build the entire application in its own plug-in system. This has been the core philosophy behind both Emacs and Eclipse. There's a minimal bootstrap layer, which as we will see functions as the system's hardware, and the rest of the system, to the greatest extent possible (as dictated by performance, usually), is written in the extension language.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Certainly, there are aspects of Conversant's core we should have done better, or at lesat should have re-done by now. Also, there are a couple of things on his checklist which we barely even considered. Still... go read his rant, and see if it doesn't sound familiar to you.&lt;/p&gt;</description>	</item><item>	<title>Inline-Block, Coming Soon to a Firefox Near You</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5798/trackback</trackback:ping>	<link>http://www.truerwords.net/5798</link>	<pubDate>Wed, 13 Dec 2006 17:21:47 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5798</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5798#msg5798</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Mozilla</category>	<category>Programming</category>	<category>Web Sites</category>	<description>&lt;p&gt;I'm surprised and happy to see that dbaron (one of the most experienced and &quot;lowest level&quot; (as in plumbing, not importance) Mozilla contributors) is finally working on an implementation of CSS &lt;a href=&quot;http://www.quirksmode.org/css/display.html#inlineblock&quot;&gt;'display: inline-block'&lt;/a&gt;. I've been subscribed to the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=9458&quot;&gt;Bugzilla bug for inline-block&lt;/a&gt; for years and years, so I was amazed to see it finally get some official attention a couple days ago.&lt;/p&gt;&lt;p&gt;Apparently he's also implementing inline-table.&lt;/p&gt;</description>	</item><item>	<title>What Is In that Bread Pudding, Anyway!?</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5776/trackback</trackback:ping>	<link>http://www.glorifiedtypist.com/2006/11/bread_pudding.html</link>	<pubDate>Thu, 16 Nov 2006 17:08:26 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5776</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5776#msg5776</comments>	<category>Humor</category>	<category>Customers</category>	<category>People</category>	<category>Macrobyte</category>	<category>Friends</category>	<category>Technology</category>	<category>Rich Siegel</category>	<category>BBEdit</category>	<category>Programming</category>	<description>&lt;p&gt;By now most everybody &lt;a href=&quot;http://www.truerwords.net/articles/bbedit/disclaimer.html&quot;&gt;knows&lt;/a&gt; that &lt;a href=&quot;http://macrobyte.net/&quot; title=&quot;Macrobyte Resources, my company.&quot;&gt;Macrobyte&lt;/a&gt; is doing some work for &lt;a href=&quot;http://www.barebones.com/&quot;&gt;Bare Bones&lt;/a&gt; on BBEdit. I've also become friends with Rich Siegel, the president at BB.&lt;/p&gt;&lt;p&gt;How did this come about? &lt;a href=&quot;http://www.glorifiedtypist.com/2006/11/bread_pudding_1.html&quot;&gt;Rich tells the story&lt;/a&gt; in short form, and along the way heaps praise on me, Corinne for her cooking, and even does appropriate obeisance before the telekinetic bread pudding.&lt;/p&gt;&lt;p&gt;Rich is awesome to work with, has proven himself a true friend on at lest one occasion already, and (frankly) I'm benefitting massively from his years of experience in this field. All this praise from him could go to my head, though, if I didn't know it was really the bread pudding influencing his thoughts. ;-)&lt;/p&gt;&lt;p&gt;My favorite line:&lt;/p&gt;&lt;blockquote cite=&quot;http://www.glorifiedtypist.com/2006/11/bread_pudding.html&quot; class=&quot;cite&quot;&gt;	&lt;p&gt;… she obviously enjoys cooking: big family events, small catering jobs, to say nothing of keeping Seth appropriately fed and watered. Which brings us to the &lt;a href=&quot;http://www.truerwords.net/5704&quot;&gt;sentient bread pudding&lt;/a&gt; … &lt;/p&gt;&lt;/blockquote&gt;</description>	</item><item>	<title>TextMate’s Undo, and the New Editor Wars</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5773/trackback</trackback:ping>	<link>http://nslog.com/2006/11/08/textmates_undo/</link>	<pubDate>Fri, 10 Nov 2006 17:18:05 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5773</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5773#msg5773</comments>	<category>Nits</category>	<category>People</category>	<category>Business</category>	<category>Technology</category>	<category>BBEdit</category>	<category>Programming</category>	<description>&lt;p&gt;Erik Barzeski on &lt;a href=&quot;http://nslog.com/2006/11/08/textmates_undo/&quot;&gt;TextMate’s Undo&lt;/a&gt;&lt;/p&gt;&lt;blockquote cite=&quot;http://nslog.com/2006/11/08/textmates_undo/&quot; class=&quot;cite&quot;&gt;	Recently I conducted another of these experiments. I got so far as trying to modify one of the files in the theme I use on this site. I typed a line or two, uploaded the changes, and realized I'd edited the wrong file. I hit cmd-Z to undo and… yeah. TextMate users know what I found. Undo only &quot;undoes&quot; one character at a time.&lt;/blockquote&gt;&lt;p&gt;I love it. Why do I love it? Check out this snippet from a chat I had with &lt;a href=&quot;http://greg.agiletortoise.com/&quot; title=&quot;Greg Pierce&quot;&gt;Greg&lt;/a&gt; back in July:&lt;/p&gt;&lt;blockquote class=&quot;cite&quot;&gt;&lt;dl style=&quot;font-style: italic;&quot;&gt;&lt;dt style=&quot;color: rgb(0, 0, 255); font-weight: bold;&quot;&gt;Seth:&lt;/dt&gt;	&lt;dd&gt;You had seven items. BBEdit can already do 6.5 of them, almost exactly the same way that TM does it. BBEdit's problem is that they don't present their features very well.&lt;/dd&gt;&lt;dt style=&quot;color: rgb(255, 0, 0); font-weight: bold;&quot;&gt;Greg:&lt;/dt&gt;	&lt;dd&gt;y.&lt;/dd&gt;&lt;dt style=&quot;color: rgb(0, 0, 255); font-weight: bold;&quot;&gt;Seth:&lt;/dt&gt;	&lt;dd&gt;Actually, 5.5 of them. Their prefs are certainly more complex than TM's. They can reduce them, but they can't eliminate them.&lt;/dd&gt;&lt;dt style=&quot;color: rgb(255, 0, 0); font-weight: bold;&quot;&gt;Greg:&lt;/dt&gt;	&lt;dd&gt;i'm not surprised&lt;/dd&gt;&lt;dt style=&quot;color: rgb(0, 0, 255); font-weight: bold;&quot;&gt;Seth:&lt;/dt&gt;	&lt;dd&gt;I can't stand TM's undo feature, though. Undoing one character at a time is nuts.&lt;/dd&gt;&lt;dt style=&quot;color: rgb(0, 0, 255); font-weight: bold;&quot;&gt;Seth:&lt;/dt&gt;	&lt;dd&gt;At least you can hold it down for fast repeat.&lt;/dd&gt;&lt;/dl&gt;&lt;/blockquote&gt;&lt;p&gt;All that just to point out that I've felt exactly the same way for a long time.&lt;/p&gt;&lt;p&gt;There's way more to this story, though. Erik's post touched off another battle in the editor wars, which have raged for decades. Unfortunately for Erik, it doesn't seem that he knew people would get so fired up about it. (See the comments on Erik's page.)&lt;/p&gt;&lt;p&gt;Allan, TextMate's creator, responded there on the site. As did a zillion other people. Back and forth, back and forth. Someone named &lt;a href=&quot;http://nslog.com/2006/11/08/textmates_undo/#comment-22044&quot;&gt;MJD said&lt;/a&gt;:&lt;/p&gt;&lt;blockquote class=&quot;cite&quot; cite=&quot;http://nslog.com/2006/11/08/textmates_undo/#comment-22044&quot;&gt;	Something that really turns me off TextMate is the way Allan Odgaard is constantly attacks BBEdit, Barebones, and Rich Siegel. There is no need for it. Especially the attacks on Rich. Try standing on the merits of your own program rather than belittling another.&lt;/blockquote&gt;&lt;p&gt;Allan and his friend &lt;span title=&quot;jacobulus?&quot;&gt;Jacob Rus&lt;/span&gt; both denied that Allan has attacked BBEdit, Bare Bones, or Rich.&lt;/p&gt;&lt;p&gt;Has anybody read Allan's weblog's version of an acceptance speech for his Apple Design Award? You could say this is his definitive link, it's where he tells the story of winning the award — an award which is a huge honor for any mac developer. In it, he points to a picture of himself that also happens to include a man getting sick, and he says, &lt;b&gt;&quot;no, the guy getting sick is not Mr. Siegel.&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I know of plenty of other little bashes on BBEdit, Bare Bones, and Rich. Some published, some not, but that comment in his weblog post is probably the most telling. It looks to this outsider like Allan wants TextMate to succeed almost as much as he wants BBEdit to fail and Rich to be hurt somehow.&lt;/p&gt;&lt;p&gt;Allan: the mac platform is doing well, but the developer community is still pretty small. You have to assume that if you say something, it's going to be quoted and re-quoted. Is your business plan really based around mocking Rich, claiming that Bare Bones is just a sales-oriented company that contracts out all the hard work, and poking fun at other independent developers?&lt;/p&gt;&lt;p&gt;OK, I'm tired of this battle already. It's time for this &lt;i&gt;code monkey&lt;/i&gt; to climb back into his tree and finish the next language module.&lt;/p&gt;&lt;p class=&quot;note&quot;&gt;(Note: please see the &lt;a href=&quot;http://www.truerwords.net/articles/bbedit/disclaimer.html&quot;&gt;BBEdit Disclaimer&lt;/a&gt;.)&lt;/p&gt;</description>	</item><item>	<title>Programmers (and Their Bosses) Should Take Note</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5722/trackback</trackback:ping>	<link>http://www.truerwords.net/5722</link>	<pubDate>Tue, 03 Oct 2006 19:45:43 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5722</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5722#msg5722</comments>	<category>Business</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;Every programmer (&quot;software developer&quot;) with whom I've discussed Steve Yegge's recent article, &lt;a href=&quot;http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html&quot;&gt;Good Agile, Bad Agile&lt;/a&gt;, has had a similar comment: &quot;I think I'd like to work there.&quot;&lt;/p&gt;&lt;p&gt;Further discussion usually reveals that the person (myself included) might not want to actually work at Google, but most definitely wants to work in an environment like Steve describes.&lt;/p&gt;&lt;p&gt;Steve describes what I love about being self-employed. Most of the time, I'm working on software that I care about, and when business is going well I'm able to work at my own pace. (When I'm really interested in or enthused about the project or product I'm developing, &quot;my own pace&quot; could mean &quot;almost non-stop for days on end&quot; or something a little healthier.) I even have those food-related perks that Steve mentions!&lt;/p&gt;&lt;p&gt;Attitudes about software development, such as Steve ascribes to Google, could transform our industry if enough of us read and retell stories like Steve's and decide that we won't settle for (much) less.&lt;/p&gt;&lt;p&gt;To be clear: I don't mean &quot;transform our industry&quot; in the sense of giving us all cushy jobs where we can eat all we want and be spoiled rotten. That's simply a means to the real end, the real transformation. The real transformation is that the quality of the software will improve because more of us will be creating something we care about, and releasing it &lt;i&gt;when it's done&lt;/i&gt; rather than simply &lt;i&gt;when it's usable.&lt;/i&gt;&lt;/p&gt;&lt;h4&gt;An Example from My Own Recent Experience&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;http://www.barebones.com/&quot;&gt;Bare Bones&lt;/a&gt; recently allowed me (as a contractor) to work on an important feature until it was &lt;b&gt;done&lt;/b&gt;. I smile every time I think about that, even though I finished it over a week ago! Yes, there were some scheduling constraints (Meaning I couldn't keep working on it forever. Obviously.), but they wanted something of high enough quality that we could all say, &quot;It's done.&quot; (We've since had ideas for some new features that could be added in future revisions, but that's a train that just never stops rolling...) When's the last time you wrote software for someone else (employer or client), and didn't have to release it until you felt it was DONE? It feels good, let me tell you.&lt;/p&gt;&lt;p&gt;Google's definitely on to something, and I hope it catches on.&lt;/p&gt;</description>	</item><item>	<title>Loopy Humor</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5707/trackback</trackback:ping>	<link>http://www.truerwords.net/5707</link>	<pubDate>Mon, 18 Sep 2006 19:16:06 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5707</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5707#msg5707</comments>	<category>Humor</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;&lt;a href=&quot;http://www.barebones.com/&quot;&gt;Bare Bones&lt;/a&gt; has been persuaded to dip their toes in the water of public beta releases. &lt;i&gt;That means one of my hands, previously bound behind my back, has been freed up to let me write about what's in the public betas.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;I won't bore you with much technobabble, but I felt this clipping from the release notes was funny:&lt;/p&gt;&lt;pre&gt;    -   Fixed the infinite loop in the YAML module caused by some uses        of the vertical pipe '|' (because Macs only need 1 Infinite        Loop)&lt;/pre&gt;&lt;p style=&quot;font-style: italic;&quot;&gt;Note: &lt;a href=&quot;http://www.yaml.org/&quot;&gt;YAML&lt;/a&gt; is a markup language based almost entirely on indentation. That has nothing to do with the reason for reprinting the above note, though.&lt;/p&gt;&lt;p&gt;If you don't get it, methinks you may not be a mac user (or have absolutely no idea what an infinite loop is)..&lt;/p&gt;&lt;p&gt;Somebody felt funny that day...&lt;/p&gt;&lt;p style=&quot;color: #aaa&quot;&gt;Postscript: yes, I confess, it was me.&lt;/p&gt;</description>	</item><item>	<title>BBEdit 8.5 (short version)</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5696/trackback</trackback:ping>	<link>http://www.truerwords.net/5696</link>	<pubDate>Thu, 07 Sep 2006 20:43:15 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5696</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5696#msg5696</comments>	<category>News</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;Today &lt;a href=&quot;http://www.barebones.com/company/press.php?news_id=153&amp;amp;sort_year=2006&quot;&gt;Bare Bones announced&lt;/a&gt; the &lt;a href=&quot;http://www.barebones.com/products/bbedit/&quot;&gt;release of BBEdit 8.5&lt;/a&gt;, my favorite Mac text editor.&lt;/p&gt;&lt;p&gt;I'm quite psyched about this release for two reasons: it has loads of new features (many that I've been hoping for, in fact), and because I played a small part in its production.&lt;/p&gt;&lt;p&gt;See, this is the project I worked on non-stop for two months. My contributions are minor compared to those from within the walls of Bare Bones itself, but it was still two months of my time. And more than that, I really (really, really) enjoyed this project, so much that I feel a sense of ownership and real contribution. Last night I joked with Rich that I've made myself a Bare Bones employee, but it would have been better to say &quot;Bare Bones Fellow&quot;. ;-) &lt;span style=&quot;font-style: italic;&quot;&gt;(No, Macrobyte's not going anywhere, anytime soon.)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Of course, what are bound to be the most generally popular new features (most notably Code Folding) had nothing to do with me. I &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;wish&lt;/span&gt; I could take credit for that one. ;-)&lt;/p&gt;&lt;p&gt;Like &lt;a href=&quot;http://mjtsai.com/blog/2006/09/07/bbedit-85/&quot;&gt;Michael&lt;/a&gt; and many others have already done, I plan to go into a lot more detail about this new release, and I'll even (finally!) be able to talk about what I did. Unfortunately it's going to have to wait until tomorrow. Just couldn't let the whole day go by without saying *something* about it.&lt;/p&gt;&lt;p&gt;Congratulations to everybody at Bare Bones, especially Rich. 8.5 is a fantastic update!&lt;/p&gt;&lt;p style=&quot;font-style: italic;&quot;&gt;Oh, and yes... Bare Bones president Rich Siegel is who I went with &lt;a href=&quot;http://www.truerwords.net/5693&quot;&gt;to the MacTechGroup meeting&lt;/a&gt;, yesterday.&lt;/p&gt;&lt;p style=&quot;font-style: italic; color: #666;&quot;&gt;Jim C. from Bare [space] Bones has reminded me for the second time in three years that there is a space in their company name, and that they &quot;paid good money for that space.&quot; Oops. Fixed!&lt;/p&gt;</description>	</item><item>	<title>New API Docs for Custom JavaScript Events</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5691/trackback</trackback:ping>	<link>http://www.truerwords.net/5691</link>	<pubDate>Wed, 06 Sep 2006 19:31:59 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5691</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5691#msg5691</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<description>&lt;p&gt;With some major new interest (more about that later) in the &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;Custom JavaScript Events&lt;/a&gt; stuff I wrote a couple months ago, I've been prompted to write some &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events_ref.html&quot;&gt;simple API docs for my Custom Events code&lt;/a&gt; (which is an addition to &lt;a href=&quot;http://prototype.conio.net/&quot;&gt;Prototype.js&lt;/a&gt;). (What, you don't have time to read 3500 words on why you should be using custom events in your JavaScript apps to save your own time? Come on! ;-)&lt;/p&gt;</description>	</item><item>	<title>YAML Made Me Feel Stupid</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5665/trackback</trackback:ping>	<link>http://www.truerwords.net/5665</link>	<pubDate>Tue, 15 Aug 2006 17:17:35 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5665</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5665#msg5665</comments>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;It has taken me three full days to figure out how to write a scanner/almost-parser for this totally generic, relatively-simple &lt;a href=&quot;http://yaml.org/spec/current.html&quot;&gt;data serialization language&lt;/a&gt;, in C++. Most of that time was spent trying to decipher the darn documentation.&lt;/p&gt;&lt;p&gt;Spec authors need to get a clue. Specificity is not the only — nor always the best — route to clarity. And examples with little or no context requires too much thinking, and it's that much harder to be sure you're right.&lt;/p&gt;&lt;p&gt;Every time I thought I had it figured out, another special case would crop up that broke my mental model.&lt;/p&gt;&lt;p&gt;This morning, right before lunch, I grabbed a piece of paper and furiously scribbled down the steps for doing it right. There are still special cases, but they're called out in the docs so they're not my fault!&lt;/p&gt;&lt;p&gt;It took me about the same amount of time to (figure out how to) write a scanner for one of my favorite scripting languages, which is much more complicated than this mini-language. Like I said, I'm feeling stupid.&lt;/p&gt;</description>	</item><item>	<title>The Wizard Schools</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5570/trackback</trackback:ping>	<link>http://www.truerwords.net/5570</link>	<pubDate>Sat, 01 Jul 2006 18:37:18 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5570</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5570#msg5570</comments>	<category>Humor</category>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;Oh my word.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://steve-yegge.blogspot.com/2006/07/wizard-school.html&quot;&gt;How much of this&lt;/a&gt; can you read before you start laughing?&lt;/p&gt;&lt;p&gt;[SPOILER AHEAD]&lt;/p&gt;&lt;p&gt;I've lost my voice due to some sort of head cold or sinus infection, so I sound ridiculous... but Stevey's latest blog rant is so hilarious it had me choking and laughing out loud, over and over again.&lt;/p&gt;&lt;p&gt;One wonders how long it takes the average reader to realize it's not &lt;i&gt;entirely&lt;/i&gt; serious. ;-)&lt;/p&gt;&lt;p&gt;The best part is its recursiveness. Man, what a writer. Stevey is cool.&lt;/p&gt;</description>	</item><item>	<title>Creating Custom Events with JavaScript: Decoupling</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5568/trackback</trackback:ping>	<link>http://www.truerwords.net/articles/web-tech/custom_events.html</link>	<pubDate>Fri, 30 Jun 2006 20:50:36 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5568</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5568#msg5568</comments>	<category>Essays</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<description>&lt;p&gt;Many &quot;Web 2.0&quot; applications suffer from too-tight-coupling between the various javascript objects used to model the data and control the interface. This has always been seen as a necessary evil because there seemed to be no good alternative.&lt;/p&gt;&lt;p&gt;One common solution in desktop applications is called &quot;event driven programming.&quot; Not just user-supplied events like mouse clicks, hovers, and window scrolls (obviously, we do all of that in our javascript apps already), but actual data-driven or state-driven events such as &quot;message selected&quot; or &quot;preference changed&quot;.&lt;/p&gt;&lt;p&gt;Truly custom events, when used correctly, allow you to decouple many of the JS objects in your application. This leads to better self-containment and much better maintainability.&lt;/p&gt;&lt;p&gt;It has generally been considered impossible — or at least too difficult — to create truly custom events in our applications. There is a W3C spec for custom events, but it's not supported by most of the browsers so is really of no use to us.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;Read the full essay&lt;/a&gt; and together we'll examine the problem a little more closely, and consider my solution. (There may be others, but all I found was attempt after attempt to duplicate the features already provided by the browser.)&lt;/p&gt;</description>	</item><item>	<title>RailsConf 2006: Highs and Lows</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5567/trackback</trackback:ping>	<link>http://www.truerwords.net/5567</link>	<pubDate>Tue, 27 Jun 2006 16:49:31 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5567</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5567#msg5567</comments>	<category>Technology</category>	<category>Travel</category>	<category>Corinne</category>	<category>Greg Pierce</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<category>Ruby on Rails</category>	<description>&lt;p&gt;RailsConf (the first 'official' Ruby on Rails conference) ended Sunday afternoon. I'm very glad I went.&lt;/p&gt;&lt;p&gt;Highlights:&lt;/p&gt;&lt;ul&gt;	&lt;li&gt;&lt;p&gt;Having Corinne there with me, for a lot of reasons.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Meeting &lt;a href=&quot;http://greg.agiletortoise.com/&quot; title=&quot;Greg Pierce&quot;&gt;Greg&lt;/a&gt; and hanging out like old friends, making plans for future work, and getting help with problems in one of my projects (he has more Rails experience than I do).&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Watching one of my clients (M.C.) scurry around with a big backpack, and talk to anybody who would listen about his project. The man really seems to love his work.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;The jets taking off right over the hotel, and the huge trains rumbling by on the tracks across the street.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Dave Thomas's keynote on Friday morning, throwing down the gauntlet.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;All the keynote speakers bluntly disagreeing with all of the others, without hostility.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;DHH's keynote on Saturday night&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;The Homesteader's Guide, by Nethaniel Talbott&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;The code-related sections of the &quot;performance&quot; by &quot;Why the Lucky Stiff&quot;&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Meeting with Sam Stephenson, author of Prototype, for an hour on Sunday, and being told that he loved what I showed him. It seems I really did figure out something NEW in JavaScript, and wasn't actually deluding myself. (Note: JS-related validation from Sam is a bit like Ruby-related validation from DHH. That is, he didn't write the language, but he is considered one of the elite and there are many, many thousands of people following his lead.)	&lt;br&gt;&lt;br&gt;		&lt;i&gt;(Yes, I'll have a LOT more to say about this soon.)&lt;/i&gt;&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;An email I received from a brand new client. I had to work for this one, but in this case that's a very good thing. I can't wait to say more about this!&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;The macs. It was totally nuts. 550 attendees, and I've seen estimates between 80% and 95% mac coverage. Some joked that &quot;in the future, everyone uses macs.&quot; I parried that this wasn't the future, it was the alternate universe where things had worked out like we always knew they were supposed to.	&lt;br&gt;&lt;br&gt;	&lt;a href=&quot;http://flickr.com/search/?w=all&amp;amp;q=railsconf+apple&amp;amp;m=text&quot;&gt;Check out some of the pictures.&lt;/a&gt; I'm even in one of them, from the neck down. ;-)&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Giving the (other) last remaining mac geeks (about twelve of them) in the bar just off the hotel lobby a whole pizza (our leftovers after we ordered two smalls). They couldn't believe their good fortune! I told them they could have it if they promised not to get any on their MacBooks. They looked at me funny, one guy said that his runs better with pizza. I said, &quot;you don't need to put it on the macbook, the pizza is already cooked.&quot; Took them all a second to figure that one out. :-)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now the lowlights:&lt;/p&gt;&lt;ul&gt;	&lt;li&gt;My babe being bored out of her mind. The conference kept us so busy that there was no time for us to do much of anything, and who wants to play tourist by oneself? (Not her!) Lesson learned. For future conferences, we'll be able to make a more informed decision about whether or not she goes with me.&lt;p&gt;&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Some of the sessions were desperately boring and lacking in any useful technical information. Some were good, many were not.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;All the rest of Why's performance. Some people totally loved it. I'm not one of them.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;&lt;a href=&quot;http://paulgraham.com/marginal.html&quot;&gt;Paul Graham's keynote presentation.&lt;/a&gt; He has this awesome rep, and I truly enjoy most of his essays, but all he did was read it! Dude. Look at your audience more often than when you're making a joke. (It was funny, though, that he kept saying, “I’m going to leave THAT part ouf of the essay on the site.”)&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;That it ended so soon. Sigh.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Back to work!&lt;/p&gt;</description>	</item><item>	<title>New Fixture: The Next Best Thing</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5555/trackback</trackback:ping>	<link>http://www.truerwords.net/5555</link>	<pubDate>Sun, 18 Jun 2006 02:33:10 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5555</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5554#msg5555</comments>	<category>Technology</category>	<category>Programming</category>	<description>&lt;p&gt;Some of you may remember that I started a new section on the site, last year, called &lt;a href=&quot;http://www.truerwords.net/fixtures/index.html&quot;&gt;Fixtures&lt;/a&gt;. I added &lt;a href=&quot;http://www.truerwords.net/fixtures/angry_driver.html&quot;&gt;one cycling-related fixture&lt;/a&gt; and then never bothered with it again.&lt;/p&gt;&lt;p&gt;A new fixture has finally bounced it's way out of my head, and has been, well, affixed on the site. This one is called &lt;a href=&quot;http://www.truerwords.net/fixtures/next_best_thing.html&quot;&gt;The Next Best Thing&lt;/a&gt;, and is related to technology.&lt;/p&gt;</description>	</item><item>	<title>Xcode 2.3 is Ready</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5526/trackback</trackback:ping>	<link>http://www.truerwords.net/5526</link>	<pubDate>Wed, 24 May 2006 15:22:58 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5526</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5526#msg5526</comments>	<category>News</category>	<category>Technology</category>	<category>Operating Systems</category>	<category>Programming</category>	<description>&lt;p&gt;&lt;a href=&quot;http://developer.apple.com/tools/download/&quot;&gt;Apple has released Xcode 2.3&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;You &lt;b&gt;may&lt;/b&gt; even be able to get it now if you're patient. It's freakin' huge. 915 Megabytes. (Those darn universal binaries!)&lt;/p&gt;&lt;p&gt;Version 2.3 includes &lt;a href=&quot;http://developer.apple.com/tools/xcode/update.html&quot;&gt;two major changes and a bunch of little changes&lt;/a&gt;. The big ones are DWARF support for debugging, and Distributed Network Builds for those who have dedicated build farms. DWARF looks very promising... DNB not so much for my needs.&lt;/p&gt;&lt;blockquote class=&quot;cite&quot;&gt;	Xcode 2.3 introduces support for the DWARF debugging format in GCC and the Xcode debugger.  Because the DWARF format eliminates duplication of debugging symbols, Xcode builds using DWARF often take up significantly less space on disk and in memory while providing even greater debugging fidelity.  For the users of Xcode, this will mean lowered system requirements to build large projects, as well as noticeable improvements in the debugging experience itself.&lt;/blockquote&gt;&lt;p&gt;Pretty cool. They cite some performance improvements, too. I wonder how fast I'll be able to build Frontier/Conversant now. ;-)&lt;/p&gt;</description>	</item><item>	<title>An Old New Member Helping with the Frontier Kernel</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5503/trackback</trackback:ping>	<link>http2groups.yahoo.com/group/frontierkernel/message/2389</link>	<pubDate>Wed, 10 May 2006 22:47:49 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5503</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5503#msg5503</comments>	<category>News</category>	<category>People</category>	<category>Technology</category>	<category>Frontier</category>	<category>Programming</category>	<description>&lt;p&gt;Doug Baron just &lt;a href=&quot;http://groups.yahoo.com/group/frontierkernel/message/2389&quot;&gt;announced his presence on the Frontier Kernel mailing list.&lt;/a&gt;&lt;/p&gt;&lt;blockquote cite=&quot;http://groups.yahoo.com/group/frontierkernel/message/2389&quot;&gt;	&lt;p&gt;Andre just stepped in to help close the loop that Seth opened last week when he dropped me an email out of nowhere. I fished his &lt;b&gt;&lt;i&gt;[that is, Seth's --ed]&lt;/i&gt;&lt;/b&gt; message out of my Junk mail folder, and a flurry of email exchanges later I find myself here, introducing myself to the list. :)&lt;/p&gt;	&lt;p&gt;	Reading the names of recent senders makes me feel as though I'm already amongst friends: Henri Asseily, David Gewirtz, David Gewirtz, Scott Lawton, Seth Dillingham, Andre Radke, Matt Neuburg. Greetings to all of you. To those who don't know me, I was one of the lead developers of the Frontier kernel, but have not been involved with it since before it went open source.&lt;/p&gt;	&lt;p&gt;	My intention in joining this list is primarily to make myself available to developers who need help working with the kernel. Time permitting, I may contribute to the build. In any case, I look forward to re-connecting with Frontier and this community.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Don't know who &lt;a href=&quot;http://www.chilehead.com/blog/index.php?blog=5&quot;&gt;Doug&lt;/a&gt; is? He's the person second-most responsible for the existence of &lt;a href=&quot;http://frontierkernel.org/&quot; title=&quot;Frontier scripting system. Open source.&quot;&gt;Frontier&lt;/a&gt;, after &lt;a href=&quot;http://scripting.com/&quot;&gt;Dave Winer&lt;/a&gt;. Doug programmed the kernel from 1990 through sometime in the early 2000's. (I did a search in the source code: his initials appear 4,314 times!)&lt;/p&gt;&lt;p&gt;He was a huge part of the community, and universally liked.&lt;/p&gt;&lt;p&gt;I find that I'm still quite attached to Frontier, in spite of my long term intention to the contrary. Having realized that, and that I was learning quite a bit about lower-level programming by working on the kernel, it was clear that what I really want is for the kernel to keep improving. For that, we need more volunteers, which would have to come from the pool of (old) Frontier users.&lt;/p&gt;&lt;p&gt;That happens to be a group of people I understand quite well. Among other things, it's a group that has a collective (if small) emotional scar over the perceived &quot;loss&quot; of Frontier and the amazing community that had built up around it in the 90's. Virtually everyone in the community has moved on... and bringing any of them back would be difficult.&lt;/p&gt;&lt;p&gt;Doug is likely to be a great resource for the current, small group of kernel developers, even if he never gets very involved in coding. (He'll be the &quot;Oracle at Austin.&quot;) Anything beyond that — like actual coding time or drawing in more of the &quot;old ranch hands&quot; — is gravy.&lt;/p&gt;&lt;p&gt;Blah blah blah... my point is that I've accepted a personal mission with the Frontier kernel. I want to build up a bright new community like we had in the late-mid 90's, around a &lt;b&gt;modern&lt;/b&gt;, ever-improving Frontier. Doug's joining the group is a big, important first step.&lt;/p&gt;</description>	</item>	</channel></rss>