Dojo Developers
OSCON ‘08
I’m leaving tomorrow for my yearly trek to Portland for OSCON. If you’re going, don’t hesitate to drop me a line if you want to catch up or RSVP for the Dojo meetup/dinner on Wed evening.
Speaking as a member of the OSCON program committee, I’m very happy about the quality of the talks in the web-ish tracks this year. There’s even a Dojo talk – even though for the first time in a long while, I won’t be giving any talks. The inimitable Matthew Russell, author of ORA’s Dojo: TDG will be giving an awesome talk on 2D drawing with Dojo’s GFX system. I know he’s got some awesome demos worked up, so I can’t wait to see the talk. Gavin Doughtie, occasional contributor to the GFX system, is also giving several talks that you’ll find me in. Should be a lot of fun.
On a more macro scale, though, I’ve started to become concerned that “Open Source” as a brand has lost its way. Those who would speak for Open Source have focused narrowly on licensing and have largely ignored the other social processes and artifacts that define what it means to contribute to OSS projects and how those artifacts lead to success or failure of projects, and therefore, of the movement such as it is. There’s a huge disconnect between what the letter of the Open Source law dictates (the licenses) and the social and process constraints that are required to build high-quality, trustable communities that ensure 100 point OSS products, and many businesses have struck on these differences as a way to use the Open Source brand to imply or insinuate that users should trust their products more than is warranted. OSI’s failure to address this brand erosion has had some troubling effects in the small JavaScript corner of the OSS world of late, and I know we’re not alone. OSI has also proven completely impotent in preventing license proliferation, further eroding the Open Source brand. There are, of course, lots of folks who are also concerned about these thing, and so I’m excited to see David Recordon (of OpenID, etc. fame) giving a talk which looks to talk about some of the community aspects. I tend to blow off “community” talks at conferences, but given David’s use of the phrase “Open Web” and his unique perspective, I’ll be interested to see what he says. I’ll also be curious to see if and how any of this is discussed at the FLOSSCON meeting of OSS Foundation leaders tomorrow and Sunday.
If you’ll be in Portland next week, don’t hesitate to join us for the dojo.dinner() on Wed. I’m looking forward to seeing everyone again and talking though the issues. Should be a great time.
Only 2 More Days!
Go! Go right now to and watch Dr. Horrible’s Sing Along Blog (if you aren’t already compulsively refreshing the page in the hopes that they post episode 3 a tad bit early). Joss Whedon does it again.
Variable Properties
Weirdest Spam Ever
Staring at it I realized that it was some base64 encoded data, so I jumped to a web-based base64 decoder and decoded it. What it turned out to be blew me away. Here is the data above in this random spam email base64 decoded:
PCEtLQ0KICAgQ29weXJpZ2h0IChjKSAyMDA1LCBCcmFkIE5ldWJlcmcsIGJrbjNAY29sdW1i
aWEuZWR1DQogICBodHRwOi8vY29kaW5naW5wYXJhZGlzZS5vcmcNCg0KICAgUGVybWlzc2lv
biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nDQogICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQogICB0byBkZWFsIGluIHRoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0
aW9uDQogICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz
aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCiAgIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0
aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KICAgU29m
dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9uczoNCg0KICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg
cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUNCiAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg
b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KDQogICBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwNCiAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUw0KICAgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULg0KICAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP
UiBBTlkNCiAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQNCiAgIE9SIE9USEVSV0lTRSwgQVJJU0lO
RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUg0K
ICAgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQotLT4NCjwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25h
bC8vRU4iPg0KPGh0bWw+DQoJPGhlYWQ+DQoJCTx0aXRsZT5Bc2suY29tIC0gTG9jYWwgU2Vh
cmNoPC90aXRsZT4NCgkgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4NCgkJCQlm
dW5jdGlvbiBwYWdlTG9hZGVkKCkgew0KCQkJCSAgIHdpbmRvdy5wYXJlbnQuZGh0bWxIaXN0
b3J5LmlmcmFtZUxvYWRlZCh3aW5kb3cubG9jYXRpb24pOw0KCQkJCX0NCgkgICA8L3Njcmlw
dD4NCgk8L2hlYWQ+DQogICA8Ym9keSBvbmxvYWQ9InBhZ2VMb2FkZWQoKSI+DQogICAgICA8
aDE+YmxhbmsuaHRtbCAtIE5lZWRlZCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIncyBoaWRkZW4g
SUZyYW1lPC9oMT4NCiAgIDwvYm9keT4NCjwvaHRtbD4NCg==
Okay, that's really weird on alot of levels! First, that's one of the files from the Really Simple History project, which is an open source project I started -- that's just strange that its base64 encoded in a spam message to me! Second, it says Ask.com in there -- is Ask.com using Really Simple History?
<!--
Copyright (c) 2005, Brad Neuberg, ***@******* (email removed)
http://codinginparadise.org
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ask.com - Local Search</title>
<script language="JavaScript">
function pageLoaded() {
window.parent.dhtmlHistory.iframeLoaded(window.location);
}
</script>
</head>
<body onload="pageLoaded()">
<h1>blank.html - Needed for Internet Explorer's hidden IFrame</h1>
</body>
</html>
Update: Looking through the Ask.com source I see that they are using Really Simply History! Cool!
Submitting dijit.Editor’s content in a form
Fascinating Data
Note: this post is far afield of my usual discussions. In the interest of not distracting those who read this blog because I usually discuss web-oriented things, the content of the post is beyond the jump.
dojo.hitch and scope - more romance
BizUnite launched
"[BizUnite the] platform unites independent businesses, or the Davids, through what we are call "Goliath Clout". What the hell is Goliath Clout you ask? Goliath Clout allows the Davids to better compete against the Goliath's, through tools like Cost Savings (ex. credit card processing), Insurance, Marketing, and Best Practices. For more info on BizUnite check out our launch post.
In the meantime, register for our site, and feel free to forward this around to others especially those that run independent businesses. The site is fully functioning, and indy businesses can get real value right out of the gate."
There are some really cool ideas in here, and their goal of allowing decentralized, smaller businesses to band together to get clout is really cool and worthy.
AppEngine Shell Project
I’ve created a minimal Google AppEngine example project for an upcoming workshop. Here it is:
Installing MySQLdb on Leopard
Dojo Developer Day Boston, Sept. 28-29
As Dylan just posted over on the official Dojo blog, we’re having our next bi-annual Dojo Developer Day event in Boston just prior to the Ajax Experience conference.
Like previous DDD events, the first day will be somewhat contributor-oriented, and many decisions about the direction of the project are likely to get made there. The Monday event will be community focused with tutorials, presentations of new work, time to present your Dojo-based apps, and opportunities for Q&A with the developers who are hacking on the features you use every day.
Sound interesting? Sign up!
Dojo just announced the details of
Power vs. Authority
More than a year ago I had the pleasure meeting a man by the name of Amit Green. At the time we got to talking about lots of things, and eventually his arguments helped turn the tide on making the big changes required for Dojo 0.9. As a part of of those discussions, he convinced me to read this book, which in 2007 read as part wise tome and part time-capsule from a simpler, slower time in business. Perhaps the most important thing I took away from it was the difference between power and authority. To quickly summarize, “power” is the ability to affect change while “authority” is the right to make any given decision. It’s easy to see how these are different: the person actually doing the work has all the power while the person who signed off on the spec has the authority. Sometimes these things are embodied in the same person but the minute they’re not you have a “management problem”. The solution isn’t to just assume that one person will do everything; you’ll get no division of labor that way which defeats the entire point of modern economics. Instead, you have to get everyone to respect the other parties such that authorized decisions represent the interests of those with power and that those with power have some agency.
But what happens when that process breaks down? When those with power forget that they have (or should have) instigating new decisions or framing them correctly? Or when everyone on the outside assumes that those with authority are the ones who can really make something happen? I’ll argue that you get the web as we know it today.
As a case study in putting your faith in the wrong idols, you can’t do better than posts like this which “blame the W3C” (via Molly). Blaming the W3C for not pushing the web forward is both humorously off-target and distressingly common. I’ve written about this before, but fundamentally you can’t blame the W3C for failing to act because it’s not the W3C’s job to act. An MBA should be able to tease this out a bit more effectively – any decision only requires that you have answers for five questions: why? what? how? when? who?
Answering these for pushing the web forward is straightforward, even on a simplistic level:
- Why?: it’s too hard to build reasonably sophisticated interactions with current web technology
- What?: new tags, JS and DOM APIs, CSS syntax, and renderer support for all of the above. Eventually, a spec or five reflecting these new technologies.
- How?: we could try asking the W3C to do it, but they don’t have any power. When they’ve been left to their own devices, the W3C has failed. Miserably. Over and over and over again. Instead, browser makers should introduce new stuff and then agree to agree on it (via the W3C or similar organizations).
- When?: introducing new features in any given browser seems doable in short-order. In the case of Open Source browsers, the answer is “as soon as someone decides to invest in them”. Competition has even spurred Microsoft to some level of action. The likely time-scale for new features over all, though, appears to be on the order of 5+ years. That’s clearly not soon enough.
TODO: investigate ways to speed this up. - Who?: browser makers and others in a position to affect the code that goes into the renderers we use.
Figuring out “how” leads you directly to “who” in this case. The action we all want is the sole purview and responsibility of the browser vendors and they alone have the power to push the web forward. The “web standards community” has made it clear that they’ll need the imprimatur of some authoritative body where agreement can be forced, but that hasn’t kept the browser vendors from taking the initiative there, either. The big, open questions then center around how the “web standards community” can make enough room for renderer vendors to try out new stuff, since that’s how we get new things. Demanding agreement on what to do before trying it out demonstrably doesn’t work, so it’s then imperative that there be a mechanism for the web to iterate prior to standardization. In fact, I’ll argue that this is now the biggest reason that Paul Ellis isn’t getting the improvements he wants out of the web: there’s no mechanism in place by which any browser vendor can take significant risks without incurring the wrath of a swarm of WaSPs, or worse. Attempts to even begin to lay the groundwork for such a mechanism have been shot down forcefully by may folks who, like Paul, view “fixing the web” as the W3C’s job.
Standards bodies are animated only by the needs of industry to reduce costs by forcing vendors to agree on things. Like Open Source, they can act as a back-stop to the monopoly-creating power of network effects by ensuring that the price of software commodities eventually does reach zero. In this context, then, the W3C’s only effective function is to drive consensus when visions for how to go forward diverge or lead down proprietary ratholes. Asking the W3C for more is the fast path to continued disappointment.
The W3C is just a sail and all sails need the wind to function. You can’t blame the sail for the wind not blowing.
Love is in the AIR
Black Death: Installing XP over Ubuntu
I have an oldish ThinkPad (a T42p) lying around that I decided to use as an Ubuntu playground on for a while. I learned a lot playing with it, but now I do most of my Ubuntu-based work in a VM running on my fancy multi-core desktop, and Mandy could use a little portable Diablo II game machine, so today I went to reinstall XP.
After sticking the install disc in, I see the familiar "Setup is inspecting your hardware…" prompt and then… nothing. Just a black screen. Hard drive light is stuck on, the CD eventually spins down and nothing happens. /me scratches head.
After a bit of searching around, it turns out that the Windows XP setup program really doesn’t like it if you have odd partitions on the hard drive, where in this case, odd is defined as the default partition layout as set up by Ubuntu.
So, after a quick download of GParted and a wipe of the hard drive, the install is now cruising along, merry as can be.
Update: Thanks to Will for pointing out a Microsoft Knowledge Base article on exactly this subject.
A Lovely Box For Your Toolkit
I’m incredibly excited about the SitePen Dojo Toolbox AIR app that just launched. I’ve been using early versions for a couple of weeks now, and in that time it has earned a privileged place on my desktop. Being able to make local builds without delving to the command line is something that I’ve wanted to be able to show new Dojo users for years and this tool finally makes it easy. There’s more work to do around configuring the profiles themselves, but the new tool demystifies many of the build configuration options significantly. Having a searchable API viewer available is also a godsend. Huge props to the team that put it together!
Edit: I forgot to note one of my favorite parts of the project, namely that because the Dojo build system is written in JavaScript (thanks to James Burke’s awesome work), the build system in the Toolbox doesn’t require Java. Instead, SitePen was able to port the few Rhino dependencies in the build tool to work with the native JavaScript engine in AIR. It’s a minor thing, but it speaks to the excellent engineering behind Dojo’s tooling and the power of having actual web-native technologies inside a desktop app.
Taking a Moment
I’ve been spending the last few nights reading Michael Ruhlman’s The Making of a Chef. I’ve enjoyed it immensely; I’d always wondered what it was like inside that campus after driving past it so many times in our weekend adventures northward from Tarrytown. Mandy and I never got the chance to eat at any of their restaurants while we lived downstate, but now we’re hopefully planning a trip south to sample the cuisine. Ruhlman is a pleasure to read and does a fantastic job conveying the passion and pressure of going through the Culinary’s course load. If you’re into cooking at all or want to know more about what it’s like to be inside the Culinary Institute of America (our other CIA), I heartily recommend the book.
Last night, as I was nearing the end of the book, I came across a scene that I’ve been replaying in my head all day. When you’re cooking in a professional kitchen, things move very fast and you have to come into it prepared and once there you have to be incredibly efficient to stay on top of all the orders coming in. When you get behind or overwhelmed, it’s called being “in the weeds.” While working at American Bounty, the premier restaurant at the Culinary and the last stop for the students before graduation, Ruhlman is working the grill station and another student is lost in the weeds. He’s getting behind and his station is getting messier and messier, enough so that the head chef asks him repeatedly to clean up his station. After a few such reminders, the instructor finally stops the student and tells him how he likes to get out of the weeds.
He takes a moment. He wipes down his station, getting it perfectly clean. He arranges everything he needs back into order, and this little restoration of order helps him clean up his mind as well. When you’re in the weeds, it’s as much a mental problem as it is a physical one. To perform quickly and efficiently, you have to be focused. The mess clouds your focus and that lack of clarity shows up in the final result.
This reminded me a lot of programming under a tight deadline. In the rush to get everything done and out the door, you tend to get messy. You don’t write tests, you don’t verify that code changes work in all the browsers, you check code in without actually compiling it first, and eventually the whole thing disintegrates. In your effort to go faster, you get sloppy and you end up slowing down.
So, a reminder to myself. When things get hairy, take a moment and clean everything up. You’ll probably get done sooner as a result.
Commands
My contribution to the meme:
blowery@hermes:~$ history 1000 | awk '{a[$2]++}END{for(i in a){print a[i] ” ” i}}’ | sort -rn | head
170 cd
78 ls
55 sudo
31 svn
18 scons
18 nm
12 less
9 grep
8 rm
8 make
As for why these, here are some rough guesses:
- cd
- obviously we use a lot of directories and I end up moving around quite a bit.
- ls
- implicitly tied to cd usage I think. And I have a lousy memory for what file names in what dirs.
- sudo
- This meme caught me while I was setting up a new working vm instance, hence all the sudo. Normally, I don’t think I use it quite so much.
- svn
- svn is our source control management tool of choice
- scons
- scons is our build tool of choice
- nm
- nm lists the exported symbols in a library. I was tracking down a problem with MySQL and a broken exported symbol during the aforementioned instance install.
- less
- less is my pager of choice
- grep
- handy for finding things
- rm
- handy for removing things. I think this was related to MySQL causing me grief
- make
- everyone else’s built tool of choice and I was installing a lot of everyone else’s stuff
Firefox3 is out!
Firefox 3
Point your browsers over to getfirefox.com and download the best version of the best cross-platform browser yet. I’ve been using the alphas and betas and release candidates for a while and I think this will be a great release. Between the performance and typographic rendering improvements, I just can’t stand using Firefox2 any more.
A Fresh New Look
If you’re seeing this in a feed reader, come on by the site and check out the new look. I went for a simple, easy to maintain look with minimal graphics for a fairly speedy page load. I also pulled out a few things that were slowing down the site: a plugin that was inadvertently pulling in the YUI library, some supposedly fancy Amazon script that showed previews of products when you hovered over their links, and biggest of all, Google’s Adsense. I’m still pulling in Google Analytics, but it’s the last thing on the page and shouldn’t affect load times too much. I wanted something simple and clean and easy to read, and I think I’ve got that.
I also spent a fair bit of time trying to get the typography right. Fancy, no?. I really enjoy The Elements of Typographic Style Applied to the Web and I wanted to try my hand at working within their framework. For example, the asides follow the sidenotes section. Getting the vertical rhythm right was more challenging than I expected, especially with photos and other non-text elements that are inherently pixel-sized. I was trying to get everything working on a em-based grid at first, but eventually caved in and ended up with a 50 by 50 pixel grid on which to base the layout. There’s always more things to learn…
This was my first Wordpress theme from scratch and I was pleasantly surprised by how easy it was to develop. I’m tracking Wordpress’ SVN and the theme using Git. That too has been a fun learning experience; I’m getting much more comfortable with git, git-svn, and git-submodule as a result. If anyone is interested, I can write up a bit on how the whole development process fits together. In the meantime, here’s the code for the theme and my Wordpress mirror with that theme as a submodule.
Git really scratches an itch I’ve had for a while with SCM systems. I started out with zip files, then Visual Source Safe, then CVS and Perforce, then Subversion. I liked Perforce quite a bit, especially the branch and merge support, and Subversion works just fine, but the branching and merging support in Git is just phenomenal. I’ve built up a little library of reading material on Git if you’re interesting in learning more; I’d start with Git from the bottom up by John Wiegley.
Going forward, I’d like to extend the blog a bit and add some features using Dojo. It only seems appropriate. Maybe Ajaxy inline-comment loading? Real-time search? Fancy graphs? We’ll see.
As always, feedback is welcome and the comments are open.

