<?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/dhtml</link>		<description></description>		<language>en</language>		<copyright>Copyright 2010 seth@macrobyte.net</copyright>		<generator>Conversant's Weblog II plugin</generator>		<category>DHTML / AJAX</category>		<item>	<title>A New JS Mode for Emacs, and Why I Wrote a JS module for BBEdit</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6163/trackback</trackback:ping>	<link>http://www.truerwords.net/6163</link>	<pubDate>Mon, 31 Mar 2008 17:02:51 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6163</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6163#msg6163</comments>	<category>Macrobyte</category>	<category>Technology</category>	<category>Rich Siegel</category>	<category>BBEdit</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;&lt;a href=&quot;http://steve-yegge.blogspot.com/2008/03/js2-mode-new-javascript-mode-for-emacs.html&quot;&gt;Stevey's Blog Rants: js2-mode: a new JavaScript mode for Emacs&lt;/a&gt;&lt;/p&gt;&lt;blockquote class=&quot;quote cite&quot; cite=&quot;http://steve-yegge.blogspot.com/2008/03/js2-mode-new-javascript-mode-for-emacs.html&quot;&gt;	For the OOD-loving and API-minded among you, the &quot;beautiful&quot; way to do syntax coloring would have been to finish parsing, &lt;em&gt;then&lt;/em&gt; walk the AST using a Visitor interface, applying the coloring in a second pass.  I tried it, and it was, as they say, &quot;butt slow&quot;.  In fact (perhaps not surprisingly) walking the AST takes exactly as long as parsing, so it was twice as slow as doing it inline.	&lt;br&gt;&lt;br&gt;	So I bit the bullet and moved my syntax-coloring to happen inline with parsing.  Fortunately it only introduced about 30 lines of code to the 4000-line parser/scanner, because most of the coloring happens in the scanner, at the token level.  Go figure.&lt;/blockquote&gt;&lt;p&gt;Steve Yegge describes (at length) his new JavaScript mode for Emacs. For much of the article he's talking about (trying to) parse the JavaScript file at the same time that he's applying syntax coloring. It's absolutely NOT a simple task, not by a long shot. He had the benefit of direct access to Brendan Eich (the author and maintainer of JavaScript itself) at least twice so far, but still describes how difficult it was. And this is someone many people consider a superstar programmer who has been working at Google for years.&lt;/p&gt;&lt;p&gt;Well, next to Conversant, my favorite-ever project is/was the JavaScript module in BBEdit. I won't go into all the technical details like Steve does, but I will say, &quot;I feel his pain.&quot;&lt;/p&gt;&lt;p&gt;Thinking about this, I realized that I never wrote the story of how I came to be contracted with Bare Bones. With all the explosives experts, martial artists, photographers, and &quot;connected&quot; individuals at BB I need to be careful not to cross the lines of my NDA, but I think I can tell this story safely. ;-)&lt;/p&gt;&lt;h3&gt;How It All Started&lt;/h3&gt;&lt;p&gt;In early Spring of 2006 — almost exactly two years ago — I was doing a lot of work with JavaScript. &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt; was my new favorite toy, but 1.0 hadn't yet been released. My editor of choice was BBEdit, but I was frustrated that it didn't &lt;a href=&quot;http://www.truerwords.net/5734&quot;&gt;list the functions in Prototype.js&lt;/a&gt; (follow that link for more details, including pictures). I wrote to Bare Bones tech support to ask if they knew of any third-party, BBEdit, language modules for JavaScript.&lt;/p&gt;&lt;p&gt;The answer was &quot;no,&quot; but I was told that a couple other people had asked about improvements to their JavaScript support. I wrote back to say that I'd like to take a crack at it, if I could only see &quot;the source to the currentsyntax module.&quot; Hah. Yeah, like that was ever going to happen. &quot;Could you send me some of the source to your app, so I can write something better?&quot; (That's NOT what I said, but that's probably what it sounded like.)&lt;/p&gt;&lt;p&gt;After lots of email back and forth, on May 10th we had only reached the point where Bare Bones was &quot;planning to update it in a future release.&quot; I'm a developer, I know what that means. So I wrote again, and said I was going to start my own language module (based on BBEdit's public SDK for language modules), and could they just send me their current list of language keywords?&lt;/p&gt;&lt;p&gt;A month later, Rich himself finally sent them to me. That was June 12th. I wrote back with a better list of keywords, and told him I was going to start working on my own module unless they told me I shouldn't bother because they already had one under development. They didn't, but Rich seemed to be trying to call my bluff: you go ahead and start working on it, and if you come up with something good maybe we'll work something out. (I've been on both sides of this discussion, and I know that usually nothing happens.)&lt;/p&gt;&lt;p&gt;Three days later, I sent them a copy of a fully functional JavaScript language module, written in C++. &lt;span style=&quot;font-style: italic;&quot;&gt;(Looking back, I'm all impressed with myself!)&lt;/span&gt; When I'm telling this story in person, especially if Rich is nearby, I like to say that they tried to call my bluff but found I wasn't bluffing. I still think there was a little of that, but mostly I think they just dealt with this nagging, mostly-unknown customer the best way they could: &quot;go ahead and do your thing, and yes, maybe we'll work something out.&quot;&lt;/p&gt;&lt;p&gt;A few days after that I sent them another one, with some more features and some bugs fixed.&lt;/p&gt;&lt;p&gt;A few days later, I went to &lt;a href=&quot;http://www.truerwords.net/5567&quot;&gt;RailsConf&lt;/a&gt; in Chicago, and found out that lots of Rails developers were using TextMate. I'd barely heard of it! (Probably because I don't go looking for new toys very often when I have work to do.)&lt;/p&gt;&lt;p&gt;While at the conference, I talked to other JavaScript devs about their editors, and showed them what I'd done for BBEdit. I even showed Sam Stephenson, Prototype's author, at the same time that I was showing him what I'd done for &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;custom events in javascript&lt;/a&gt;. Everybody liked it, and it was definitely better than anything else out there. &lt;b&gt;I also&lt;/b&gt; asked people why they were using whatever editor they were using. Most of the Rails folks who were using TextMate were using it because that's what the top Rails guys recommended, and because it had really good integration with Rails itself.&lt;/p&gt;&lt;p&gt;I wrote up all this &quot;research&quot; and sent it to Bare Bones when I returned home.&lt;/p&gt;&lt;p&gt;Writing the language module, peppering them with lots of email, and sending in the research I did at RailsConf were enough to really get their attention. In early July (can't remember... July 3rd or 5th), Rich came down here and we had lunch at &lt;a href=&quot;http://www.costellosclamshack.com/&quot;&gt;Costello's Clam Shack&lt;/a&gt;, right on the water. I got an early look at BBEdit 8.5, we talked about my 1,001 feature requests, and I signed an NDA with a handshake (and later with pen and ink).&lt;/p&gt;&lt;p&gt;Perhaps as import as the business that was done that day, &lt;a href=&quot;http://www.glorifiedtypist.com/2006/11/bread_pudding_1.html&quot;&gt;Rich and I became friends&lt;/a&gt; (and have had a casual breakfast almost every Tuesday morning since then).&lt;/p&gt;</description>	</item><item>	<title>How well do you know Prototype?</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/6015/trackback</trackback:ping>	<link>http://thinkweb2.com/projects/prototype-checklist/</link>	<pubDate>Mon, 13 Aug 2007 01:35:14 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/6015</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=6015#msg6015</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;&lt;a href=&quot;http://thinkweb2.com/projects/prototype-checklist/&quot;&gt;thinkweb2.com&lt;/a&gt; posted a great set of examples of better ways to take advantage of Prototype in your own javascript code.&lt;/p&gt;&lt;blockquote cite=&quot;http://thinkweb2.com/projects/prototype-checklist/&quot;&gt;	Here, I've collected most common use cases that do	&lt;strong&gt;NOT&lt;/strong&gt; use all of prototype's capabilities and their	simple solutions. I hope this will be a basic checklist to go through	when developing for your next project.&lt;/blockquote&gt;&lt;p&gt;Excellent list. If you don't work with Prototype on a regular basis, or you do but you haven't paid attention to everything it can do, read this. It could save you a lot of typing, headaches, and time.&lt;/p&gt;</description>	</item><item>	<title>Resignation?</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5999/trackback</trackback:ping>	<link>http://www.truerwords.net/5999</link>	<pubDate>Mon, 23 Jul 2007 19:32:10 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5999</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5999#msg5999</comments>	<category>Macrobyte</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;I've already mentioned how &quot;over committed&quot; I am right now. It's so bad that I decided to resign, at least temporarily, from the &lt;a href=&quot;http://www.prototypejs.org/&quot; title=&quot;Prototype - a javascript library for web applications&quot;&gt;Prototype&lt;/a&gt; core team.&lt;/p&gt;&lt;p&gt;Then I felt so guilty about it that I attended this morning's all-hands chat room meeting.&lt;/p&gt;&lt;p&gt;On the other hand, I've actually finished a few items on my to-do list lately.&lt;/p&gt;&lt;p&gt;Who knows... someday soon I may even be able to start the PMC Software Auctions. Hope so, since the &lt;a href=&quot;http://www.truerwords.net/fundraising/how-to-pmc.html&quot; title=&quot;Pan-Mass Challenge, a charity ride across Massachusetts&quot;&gt;PMC&lt;/a&gt; itself is less than two weeks away.&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 16: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>Geek Lunch</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5936/trackback</trackback:ping>	<link>http://www.truerwords.net/5936</link>	<pubDate>Sun, 20 May 2007 17:35:46 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5936</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5936#msg5936</comments>	<category>People</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;Three of us, maybe four, are going to lunch today. &lt;a href=&quot;http://sam.conio.net/&quot;&gt;Sam Stephenson&lt;/a&gt;, &lt;a href=&quot;http://mir.aculo.us/&quot;&gt;Thomas Fuchs&lt;/a&gt;, myself, and &lt;a href=&quot;http://www.danwebb.net/&quot;&gt;Dan Webb&lt;/a&gt; if I can talk him into it.&lt;/p&gt;&lt;p&gt;Gee, what do you suppose we'll be talking about? ;-)&lt;/p&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 14: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>Events, Listeners, and MSIE: A Big Surprise</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5838/trackback</trackback:ping>	<link>http://www.truerwords.net/5838</link>	<pubDate>Thu, 08 Feb 2007 00:32:21 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5838</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5838#msg5838</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Web Sites</category>	<description>&lt;p&gt;I've been doing event-based JavaScripting for approximately as long as there has been such a thing.&lt;/p&gt;&lt;p&gt;One of the foundations of this programming is that MSIE puts its event object at window.event, and most everybody else passes the event object to the listener (the method that is called when the event is triggered).&lt;/p&gt;&lt;p&gt;I moved past my frustration with that difference in behavior many years ago, so I could get some real work done. Know what I mean?&lt;/p&gt;&lt;p&gt;Turns out it's not true anyway.&lt;/p&gt;&lt;p&gt;Someone (can't say who) contacted me today in a fit of confusion. HIs events listeners in MSIE 6 were receiving events objects as parameters.&lt;/p&gt;&lt;p&gt;He was using &lt;a href=&quot;http://www.prototypejs.org/&quot; title=&quot;Prototype - a javascript library for web applications&quot;&gt;Prototype&lt;/a&gt; to set up his listeners, so I assumed it had something to do with that. I looked into it...&lt;/p&gt;&lt;p&gt;First, I tried my own test, of course. Yep, there's the event object.&lt;/p&gt;&lt;p&gt;Second, I traced the code in Prototype. Function.bindAsEventListener() would explain it... except that's not what we were using in this case.&lt;/p&gt;&lt;p&gt;Nothing else in Prototype explained it, so I went out to the web to see what others had to say.&lt;/p&gt;&lt;p&gt;David Flanagan — The Man Himself, author of &lt;a href=&quot;http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FJavaScript-Definitive-Guide-David-Flanagan%2Fdp%2F0596101996%2Fsr%3D1-1%2Fqid%3D1170897458%3Fie%3DUTF8%26s%3Dbooks&amp;tag=truerwords-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325&quot;&gt;my favorite book on JavaScript&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=truerwords-20&amp;amp;l=ur2&amp;amp;o=1&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt; — &lt;a href=&quot;http://www.davidflanagan.com/blog/2006_10.html#000114&quot;&gt;had this to say:&lt;/a&gt; back on October 23 of last year (just 3 1/2 months ago):&lt;/p&gt;&lt;blockquote cite=&quot;http://www.davidflanagan.com/blog/2006_10.html#000114&quot; class=&quot;cite&quot;&gt;	&lt;p&gt;		I don't know how I know this: it is just one of those things I've always known about IE.  But a reader (Tom Stambaugh of zeetix.com) just emailed me with a trivially simple counter example.  It turns out that if you use attachEvent() (at least in IE 6) then the event handler you specify is passed an event object as an argument.		&lt;/p&gt;	&lt;p&gt;		I don't think I'm the only one who believed that handlers registered with attachEvent() don't get passed an event object.  For example, the documentation on attachEvent() at		&lt;a href=&quot;http://javascript.about.com/library/bldom20.htm&quot;&gt;about.com&lt;/a&gt; says:		&lt;/p&gt;	&lt;blockquote cite=&quot;http://javascript.about.com/library/bldom20.htm&quot; class=&quot;cite&quot;&gt;		&lt;p&gt;			Also unlike the standard DOM method, the event is not passed to the function as a parameter. Instead IE supplies a standard window.event object to hold the details relating to the latest event.			&lt;/p&gt;	&lt;/blockquote&gt;	&lt;p&gt;		And the 		&lt;a href=&quot;http://developer.yahoo.com/yui/event/&quot;&gt;documentation&lt;/a&gt; for the YUI event library advertises, as a feature of the library, that: 		&lt;/p&gt;	&lt;blockquote cite=&quot;http://developer.yahoo.com/yui/event/&quot; class=&quot;cite&quot;&gt;		&lt;p&gt;			The first parameter your callback receives when the event fires is always the actual event object. There is no need to look at window.event.			&lt;/p&gt;	&lt;/blockquote&gt;	&lt;p&gt;	[SNIP]&lt;/p&gt;	&lt;p&gt;		&lt;b&gt;Update:&lt;/b&gt; Thanks to the commenters who have pointed out the interesting fact that the event object passed to a handler is not the same object (not == to) window.event.  I've written a &lt;a href=&quot;http://www.davidflanagan.com/attach.html&quot;&gt;trivial test&lt;/a&gt; that demonstrates that 1) an object is passed to a handler registered with attachEvent(), 2) that this object is not == to window.event, and that 3) the properties of this object are the same as the properties of window.event (except that they both have a property that refers to different empty arrays).		&lt;/p&gt;	&lt;p&gt;	[SNIP]&lt;/p&gt;	&lt;p&gt;		&lt;b&gt;Update 2:&lt;/b&gt; In comments, Alistair Potts presents test results that indicate that attachEvent has always passed a copy of the window.event object to event handlers.  His test code is at: http://www.partyark.co.uk/html/ieeventtest.htm		&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;(I seriously wonder if everybody else based their assumptions on David's own writing. I think the original version of his book was published by Gutenberg himself, and almost every serious JavaScripter has a copy of it.)&lt;/p&gt;&lt;p&gt;Long story, short: MSIE has (almost) always passed the event object to the listeners, as long as you registered the listener with attachEvent instead of just &quot;assigning&quot; the listener.&lt;/p&gt;</description>	</item><item>	<title>Live Reviewer</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5837/trackback</trackback:ping>	<link>http://www.truerwords.net/5837</link>	<pubDate>Tue, 06 Feb 2007 21:09:16 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5837</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5837#msg5837</comments>	<category>Humor</category>	<category>News</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;P&gt;One of the other members of the &lt;A href=&quot;http://www.prototypejs.org/core&quot;&gt;Prototype Core&lt;/A&gt; team just asked me to be his only English-speaking &quot;Live Reviewer&quot; for a forthcoming book on Prototype / Scriptaculous.&lt;/P&gt;&lt;P&gt;I'm not sure if I should be happy about this, or just sorry for the other English-speaking reviewers (as it implies they're not 'live'... come on guys, stay with me...). ;-)&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 16: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>How to Serve Compressed Data with mod_gzip and Apache 1.3 on Mac OS X</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5777/trackback</trackback:ping>	<link>http://www.truerwords.net/articles/web-tech/serving_compressed_with_mod_gzip.html</link>	<pubDate>Fri, 17 Nov 2006 01:04:09 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5777</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5777#msg5777</comments>	<category>Essays</category>	<category>Technology</category>	<category>Conversant</category>	<category>DHTML / AJAX</category>	<category>Frontier</category>	<category>Mozilla</category>	<category>Web Sites</category>	<description>&lt;p&gt;Some of us have recently been discussing the size of the &lt;a href=&quot;http://prototype.conio.net/&quot;&gt;Prototype&lt;/a&gt; library, my preferred library for DHTML/AJAX). Proponents of some of the other libraries play up their smaller file sizes, and it's true that this is a real issue for some people.&lt;/p&gt;&lt;p&gt;This little essay/how-to explains the basic ideas (the what, how, and why), and then walks you through setting up Apache on Mac OS X, to enable mod_gzip and serve compressed content. If you skip the editorial content and just follow the steps I've outlined, you should have everything up and running in fifteen minutes or less.&lt;/p&gt;</description>	</item><item>	<title>Prototype: A Call For Documentation</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5753/trackback</trackback:ping>	<link>http://encytemedia.com/blog/articles/2006/10/31/prototype-a-call-for-documentation</link>	<pubDate>Wed, 01 Nov 2006 15:02:50 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5753</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5753#msg5753</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Web Sites</category>	<description>&lt;p&gt;&lt;a href=&quot;http://prototype.conio.net/&quot;&gt;Prototype&lt;/a&gt; (a super-popular DHTML/AJAX library for JavaScript) is finally going to have a full-fledged, dedicated documentation site. Justin Palmer is one of the guys working on it, and has just posted &lt;a href=&quot;http://encytemedia.com/blog/articles/2006/10/31/prototype-a-call-for-documentation&quot;&gt;A Call For Documentation&lt;/a&gt;.&lt;/p&gt;&lt;blockquote cite=&quot;http://encytemedia.com/blog/articles/2006/10/31/prototype-a-call-for-documentation&quot;&gt;	&lt;p&gt;We’re hard at working getting the Prototype documentation site ready for launch.  However, we know there is already a lot of great documentation scattered throughout the web.  Instead of us rewriting a lot of this documentation, we’d like to ask that the community lend us a helping hand.&lt;/p&gt;   &lt;p&gt;If you’ve documented parts of Prototype, we’d be tickled pink if you’d be willing to share that with us.  We’re looking for all types of documentation, everything from examples, tutorials, to general api docs.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The rest of his post explains how to submit material for the site, and how to be 'officially' involved in regular site maintenance (they're looking for some volunteers).&lt;/p&gt;</description>	</item><item>	<title>BBEdit 8.5.1's JavaScript Support</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5734/trackback</trackback:ping>	<link>http://www.barebones.com/support/bbedit/arch_bbedit851.shtml</link>	<pubDate>Thu, 12 Oct 2006 18:21:36 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5734</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5734#msg5734</comments>	<category>Technology</category>	<category>BBEdit</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;&lt;a href=&quot;http://www.barebones.com/&quot; title=&quot;Bare Bones Software, Inc.&quot;&gt;Bare Bones&lt;/a&gt; just announced the release of &lt;a href=&quot;http://www.barebones.com/support/bbedit/arch_bbedit851.shtml&quot;&gt;BBEdit 8.5.1&lt;/a&gt;. This is basically a release of &quot;bug fixes and feature tweaks,&quot; but there's some cool stuff in there that some people will certainly enjoy playing with (myself included).&lt;/p&gt;&lt;div style=&quot;float: right; font-size: 80%; font-family: sans-serif; color: #666; width: 160px; text-align: center; border: 1px solid #666; padding: 0px 6px 2px 6px; margin-left: 1em;&quot;&gt;	&lt;a name=&quot;shots&quot;&gt;&lt;/a&gt;	&lt;p&gt;Comparison of the function popup for the same JavaScript file in 8.2.6, 8.5, and 8.5.1:&lt;/p&gt;	&lt;div&gt;		&lt;a href=&quot;http://media.truerwords.net/images/bbedit85/8.2.6.png&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/bbedit85/8.2.6.small.jpg&quot; alt=&quot;BBEdit 8.2.6&quot; id=&quot;BBEdit826&quot; align=&quot;center&quot; height=&quot;200&quot; width=&quot;150&quot; title=&quot;BBEdit 8.2.6. Click for larger image.&quot; /&gt;&lt;/a&gt;		&lt;br clear=&quot;all&quot; /&gt;		&lt;div&gt;BBEdit 8.2.6&lt;/div&gt;	&lt;/div&gt;	&lt;br /&gt;	&lt;div&gt;		&lt;a href=&quot;http://media.truerwords.net/images/bbedit85/8.5.png&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/bbedit85/8.5.small.jpg&quot; alt=&quot;BBEdit 8.5&quot; id=&quot;BBEdit85&quot; align=&quot;center&quot; height=&quot;200&quot; width=&quot;150&quot; title=&quot;BBEdit 8.5. Click for larger image.&quot; /&gt;&lt;/a&gt;		&lt;br clear=&quot;all&quot; /&gt;		&lt;div&gt;BBEdit 8.5&lt;/div&gt;	&lt;/div&gt;	&lt;br /&gt;	&lt;div&gt;		&lt;a href=&quot;http://media.truerwords.net/images/bbedit85/8.5.1.png&quot;&gt;&lt;img src=&quot;http://media.truerwords.net/images/bbedit85/8.5.1.small.jpg&quot; alt=&quot;BBEdit 8.5.1&quot; id=&quot;BBEdit851&quot; align=&quot;center&quot; height=&quot;200&quot; width=&quot;150&quot; title=&quot;BBEdit 8.5.1. Click for larger image.&quot; /&gt;&lt;/a&gt;		&lt;br clear=&quot;all&quot; /&gt;		&lt;div&gt;BBEdit 8.5.1&lt;/div&gt;	&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;note&quot;&gt;(Ahem. See my &lt;a href=&quot;http://www.truerwords.net/articles/bbedit/disclaimer.html&quot;&gt;BBEdit Disclaimer&lt;/a&gt;, please.)&lt;/p&gt;&lt;p&gt;As I've mentioned, I did some work for Bare Bones on the 8.5 release, and the same is true for 8.5.1 (just a small part of the total work, in both cases, but it feels significant to me). What I &quot;didn't yet get around to&quot; is that my favorite part of this project has been the new JavaScript support! I totally rewrote it from scratch for 8.5, and then enhanced it a bit for 8.5.1. (The story of how this came about is pretty cool, but there's no room for it here. For now, let it suffice to say that it involved food and a bit of personal challenge.)&lt;/p&gt;&lt;p&gt;The significant, JavaScript-related changes that a user would notice, between 8.2.6 and 8.5, include the following:&lt;/p&gt;&lt;ul&gt;	&lt;li&gt;&lt;p&gt;More keywords are recognized and colored.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Much better detection of functions for the function popup menu.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Recognition of &quot;anonymous&quot; functions (again, for the function popup menu.)&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Folding. (I didn't write BBEdit's folding feature, I just hooked it up in the JavaScript support.)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Even before 8.5 had shipped, I was working on some improvements. I had this crazy idea that I could make BBEdit's JavaScript support as complete as possible, to the point that I would actually feel like it was &quot;done.&quot; (Is software ever done?)&lt;/p&gt;&lt;p&gt;Here's what was added for 8.5.1:&lt;/p&gt;&lt;ul&gt;	&lt;li&gt;&lt;p&gt;Function names in the function popup are now &lt;b&gt;complete&lt;/b&gt;. That is, it doesn't just grab the last word of the name. (See the third picture &lt;a href=&quot;#shots&quot;&gt;on the right&lt;/a&gt;.)&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Folding improvements. Rather than adding automatic &quot;fold points&quot; only at the start/end of functions, they're added to all matched sets of {curly braces} that contain at least N lines (N defaults to 4, but can be set via a hidden preference from the command line).&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Object literals are listed in the function popup, if they have names. The names are found in the same way as function names, so long.dotted().names work, too. Plus, nested objects and functions are listed &quot;hierarchically&quot; in the function popup, and objects are marked with a special character so you can scan the menu quickly to find the objects you need.&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;Since &lt;a href=&quot;http://prototype.conio.net/&quot;&gt;Prototype&lt;/a&gt; is so wildly popular these days, we added support for Prototype's &quot;Object.extend&quot; as another way to 'name' an object.&lt;/p&gt;	&lt;p&gt;	Not clear on that one? Here's an example:	&lt;/p&gt;		&lt;pre&gt;&lt;code&gt;Object.extend( foo.prototype, { ... } )&lt;/code&gt;&lt;/pre&gt;	&lt;p&gt;	... produces an entry in the function popup menu called &quot;foo.prototype&quot;&lt;/p&gt;&lt;/li&gt;	&lt;li&gt;	&lt;p&gt;You can add arbitrary strings (&quot;place markers&quot;) to your JavaScripts, in comments, and they're added to the function popup. For example, this comment:	&lt;/p&gt;	&lt;pre&gt;&lt;code&gt;// #mark Hello World&lt;/code&gt;&lt;/pre&gt;	&lt;p&gt;	... causes a &quot;Hello World&quot; entry to be added to the function popup. I personally find this very useful for breaking a long file up into &quot;labeled&quot; parts. Plus, if the mark is just a single hyphen (so, &quot;#mark -&quot;) then a standard menu-separator is added to the popup menu.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are tons of other little improvements in 8.5.1, unrelated to JavaScript. A few of them I worked on, most of them I had nothing to do with. (Meaning, of course, Bare Bones did it themselves.) For me, this is &quot;the JavaScript release,&quot; as I think this makes BBEdit a really great JavaScript editor. (But then, I &lt;b&gt;*would*&lt;/b&gt; think that!)&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 18: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>Updated the Custom Events Essay and Code</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5571/trackback</trackback:ping>	<link>http://www.truerwords.net/5571</link>	<pubDate>Tue, 04 Jul 2006 05:49:37 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5571</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5568#msg5571</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;I've updated the &lt;a href=&quot;http://www.truerwords.net/articles/web-tech/custom_events.html&quot;&gt;custom events in javascript&lt;/a&gt; essay, and all of the reference code.&lt;/p&gt;&lt;p&gt;A couple of bugs in the code have been squished, the Event.Broker mix-in (that was described in the essay but not originally provided) is there now, and the essay text&amp;nbsp; has been slightly tweaked.&lt;/p&gt;&lt;br /&gt;&lt;br /&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 19: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 15: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>Aggregator Updated</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5540/trackback</trackback:ping>	<link>http://www.truerwords.net/5540</link>	<pubDate>Wed, 07 Jun 2006 01:57:15 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5540</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5540#msg5540</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Web Sites</category>	<description>&lt;p&gt;Hey, aggregator testers! I've updated it again. Minor stuff, mostly (I'm busy with another project, so I can only do this in my off hours, now), but still pretty good. The notes are on the secret-secret test site's weblog! ;-)&lt;/p&gt;&lt;p style=&quot;font-style: italic;&quot;&gt;The fact that Conversant will soon have a nifty, built-in aggregator is no longer a secret. Obviously. That I'm planning to make it work with (and like) my favorite desktop aggregator(s) IS a secret. Mum's the word!&lt;/p&gt;</description>	</item><item>	<title>Client-Side Storage in Web 2.0 Applications</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5484/trackback</trackback:ping>	<link>http://codinginparadise.org/weblog/2006/04/now-in-browser-near-you-offline-access.html</link>	<pubDate>Wed, 26 Apr 2006 20:21:19 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5484</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5484#msg5484</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<category>Web Sites</category>	<category>XML</category>	<description>&lt;p&gt;&lt;a href=&quot;http://codinginparadise.org/weblog/2006/04/now-in-browser-near-you-offline-access.html&quot;&gt;This looks to be a fantastic breakthrough.&lt;/a&gt; I think Brian A. will get a kick out of the storage system he describes... it sounds awfully familiar. ;-)&lt;/p&gt;&lt;blockquote cite=&quot;http://codinginparadise.org/weblog/2006/04/now-in-browser-near-you-offline-access.html&quot;&gt;	&lt;p&gt;I'm proud to announce the immediate availability of dojo.storage and a new web-based editor named Moxie.	&lt;/p&gt;	&lt;p&gt;Imagine if web applications could store megabytes of data on the client-side, in the browser, both persistently and securely. No server needed.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I'm going to have to implement this for Conversant. Soon.&lt;/p&gt;&lt;p&gt;(Thanks for the link, &lt;a href=&quot;http://spoken.phrasewise.com/articles/2006/04/26/dojo-storage&quot;&gt;Daniel&lt;/a&gt;.)&lt;/p&gt;</description>	</item><item>	<title>Google Wants to *Be* the Web</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5403/trackback</trackback:ping>	<link>http://www.truerwords.net/5403</link>	<pubDate>Wed, 08 Mar 2006 16:40:47 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5403</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5403#msg5403</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Web Sites</category>	<description>&lt;p&gt;Google is working on an &lt;a href=&quot;http://www.techcrunch.com/2006/03/08/exclusive-screenshots-google-calendar/&gt;&quot;&gt;impressive new calendarsystem&lt;/a&gt;that's going to integrate tightly with Gmail.&lt;/p&gt;&lt;p&gt;This really bothers me. I told &lt;a href=&quot;http://greg.agiletortoise.com/&quot; title=&quot;Greg Pierce&quot;&gt;Greg&lt;/a&gt; that Google wants to *be* the web.They're clearly working hard to prove that the web is the next operatingsystem, and they're working in areas that let them slide right underMicrosoft's soft underbelly. (With Gmail + a good calendar system, theyhave very strong competition for Outlook.)&lt;/p&gt;&lt;p&gt;I wrote to someone at my ISP who's doing a big, online calendaring system.He showed it to me a month ago... it's a community events calendar, notreally a personal calendaring system at all, but I still thought he shouldknow about what Google's up to.&lt;/p&gt;&lt;p&gt;His reaction? &quot;Google is poised to take over the Internet.&quot;&lt;/p&gt;&lt;p&gt;My problem is that they're leaving so little room for everybody else. Itseems that no matter what part of the web you specialize in, Google haseither announced or is about to announce something significant. Thatthey're doing it all at once is what makes me nuts, though: a small team ofdevelopers can compete effectively with Google's equivalent application,but it's almost impossible for anybody to compete with the integration theyhave planned for all of the tools.&lt;/p&gt;&lt;p&gt;Never thought that someone working on a very cool new web application (thatI don't compete with at all) would feed me such a big plate of sourgrapes... but it did.&lt;/p&gt;</description>	</item><item>	<title>AJAX Toolkit Installed</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5391/trackback</trackback:ping>	<link>http://www.truerwords.net/5391</link>	<pubDate>Fri, 03 Mar 2006 19:38:39 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5391</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5390#msg5391</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<description>&lt;p&gt;Installing the AJAX Toolkit into Eclipse was a little more work than I expected, but not much. It took about thirty minutes, and most of that time was spent installing the dependencies.&lt;/p&gt;&lt;p&gt;Once it's done, Mozilla really is fully integrated into eclipse. It's good to see that XULRUnner has come so far. There are some glitches (no contextual menus in the browser), but nothing horrible and no crashers so far.&lt;/p&gt;&lt;p&gt;More later...&lt;/p&gt;</description>	</item><item>	<title>AJAX Toolkit Framework for Eclipse!</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5390/trackback</trackback:ping>	<link>http://www.alphaworks.ibm.com/tech/ajaxtk</link>	<pubDate>Thu, 02 Mar 2006 20:08:33 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5390</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5390#msg5390</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Mozilla</category>	<category>Operating Systems</category>	<category>Programming</category>	<description>&lt;p&gt;Excellent!&lt;/p&gt;&lt;p&gt;IBM's AlphaWorks group has released the &lt;a href=&quot;http://www.alphaworks.ibm.com/tech/ajaxtk&quot;&gt;AJAX ToolkitFramework&lt;/a&gt;.It's an Eclipse plugin that provides DOM browsing, syntax checking duringediting, javascript debugging... and an embedded Gecko (Mozilla/Firefox)browser. That's cool!&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.alphaworks.ibm.com/tech/ajaxtk/requirements&quot;&gt;Requirements: Windows&lt;/a&gt;.(Cue audio: Wah wah waaaaaahhhhh.) That's a bummer. Guess I can't blamethem. It's not like many of the creative types are on Mac or anything.&lt;/p&gt;&lt;p&gt;It's open source, though, so perhaps someone will put in the time to makeit cross-platform.&lt;/p&gt;&lt;p&gt;I'm about to install it on my PC, and will report back later with myopinion and results.&lt;/p&gt;</description>	</item><item>	<title>Good Work, Shot Down</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5383/trackback</trackback:ping>	<link>http://www.truerwords.net/5383</link>	<pubDate>Fri, 24 Feb 2006 03:55:13 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5383</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5383#msg5383</comments>	<category>News</category>	<category>Customers</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Web Sites</category>	<description>&lt;p&gt;I did some very cool UI work for a client today, to revamp an old project. Nothing complicated or confusing, just some clever and simple dhtml bling to keep a page clean but still highlight the important elements.&lt;/p&gt;&lt;p&gt;Jed saw what I was doing, and raved about how cool it was, that &amp;quot;more sites should do stuff like that... it was so easy!&amp;quot;&lt;/p&gt;&lt;p&gt;The client shot it down. Said it was &amp;quot;too much like flash&amp;quot;, and in his opinion, &amp;quot;flash is the worst thing to ever hit the internet.&amp;quot;&lt;/p&gt;&lt;p&gt;I was *very* happy with the approach I used, and it sparked some more ideas for experimentation. Not a total loss.&lt;/p&gt;</description>	</item><item>	<title>Is JavaScript the most successful scripting language ever?</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5378/trackback</trackback:ping>	<link>http://spoken.phrasewise.com/articles/2006/02/20/is-javascript-the-most-successful-scripting-language-ever</link>	<pubDate>Mon, 20 Feb 2006 18:34:32 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5378</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5378#msg5378</comments>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;Daniel repeats a question from Alex: &lt;a href=&quot;http://spoken.phrasewise.com/articles/2006/02/20/is-javascript-the-most-successful-scripting-language-ever&quot;&gt;Is JavaScript the most successfulscripting language ever?&lt;/a&gt;&lt;/p&gt;&lt;blockquote cite=&quot;http://spoken.phrasewise.com/articles/2006/02/20/is-javascript-the-most-successful-scripting-language-ever&quot; type=&quot;cite&quot;&gt;	I would like to know is this: on what axis is JavaScript &lt;em&gt;not&lt;/em&gt;	the most successful scripting language of all time?	&lt;cite style=&quot;font-style: italic;&quot; title=&quot;Daniel's Remark...&quot; cite=&quot;http://alex.dojotoolkit.org/?p=540&quot;&gt;[It certainly is successful within its scope.]&lt;/cite&gt; 	&lt;br /&gt;&lt;br /&gt;	Source: &lt;a href=&quot;http://alex.dojotoolkit.org&quot;&gt;Continuing Intermittent Incoherency&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;I've been telling friends (specific conversations with Flip Martin and Steve Ivy cometo mind) for a couple of years that JavaScript is the most importantscripting language (or one of them). Neither popularity nor sucess are good measures ofimportance, but in this case they seem to have gone hand in hand.&lt;/p&gt;&lt;p&gt;In fact, last Fall I bored Steve Davis with my thoughts on the rise ofJavaScript and DHTML, even though he's not a web developer of any sort.(What he was, however, was a captive audience. We were on our bikes on afreezing-cold century, by ourselves!)&lt;/p&gt;</description>	</item><item>	<title>The Door is AJAR</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5292/trackback</trackback:ping>	<link>http://www.truerwords.net/5292</link>	<pubDate>Wed, 04 Jan 2006 12:34:50 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5292</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5292#msg5292</comments>	<category>Humor</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<description>&lt;p&gt;What an excellent coincidence, that &lt;a href=&quot;http://dig.csail.mit.edu/breadcrumbs/node/62&quot;&gt;Tim Berners-Lee's new toy&lt;/a&gt;, called &lt;a href=&quot;http://dig.csail.mit.edu/breadcrumbs/node/62&quot;&gt;Tabulator&lt;/a&gt;, is built on something he's calling &lt;acronym title=&quot;Asynchronous Javascript and RDF&quot;&gt;AJAR&lt;/acronym&gt;... and to make it work the way he wants, he needs to find a way around Firefox's security constraints (as in, leave the barn door open).&lt;/p&gt;</description>	</item><item>	<title>Multilingual Context Switching (ouch)</title>	<author>seth@macrobyte.net</author>	<dc:creator>Seth Dillingham</dc:creator>	<trackback:ping>http://www.truerwords.net/5282/trackback</trackback:ping>	<link>http://www.truerwords.net/5282</link>	<pubDate>Mon, 26 Dec 2005 03:59:32 GMT</pubDate>	<guid isPermaLink="true">http://www.truerwords.net/5282</guid>	<comments>http://www.truerwords.net/fullThread$msgNum=5282#msg5282</comments>	<category>Humor</category>	<category>Technology</category>	<category>DHTML / AJAX</category>	<category>Programming</category>	<description>&lt;p&gt;Man it's a pain to switch back and forth between similar languages like PHP and JavaScript.&lt;/p&gt;&lt;p&gt;I spent most of the day in PHP. Get some features working the &amp;quot;traditional HTML way,&amp;quot; and then tweak it with AJAX... which means javascript. But I start seeing bugs everywhere in my JavaScript code, because my brain still thinks I'm looking at PHP.&lt;/p&gt;&lt;p&gt;For example: in PHP it's &lt;code style=&quot;padding: 3px;&quot;&gt;join( $glueString, $someArray )&lt;/code&gt;. When I saw &lt;code style=&quot;padding: 3px;&quot;&gt;someArray.join( glueString )&lt;/code&gt; in JavaScript, I started backing it out to fix the obvious bug... no no no, that's not a bug. That's JavaScript.&lt;/p&gt;</description>	</item>	</channel></rss>