I want to experiment in making an online diagramming tool.
So step one is picking a platform in which to implement it. Normally this is the kind of decision that would paralyze me in weeks of delicious research and tinkering. Not anymore. As Jason Fried reminds us, decisions are temporary. Just make a choice. Change it later if it needs changing. You’re just as likely to make a bad choice after wasting two weeks fretting about it. Keep moving.
It’s got to be cross-platform because I know people whom I respect who run each of the big three as their primary platform. It’s got to be a full-featured diagramming tool that runs in a web browser because that’s what I want to use right now. So rule out any desktop development platforms: Qt, Java, Mono.
For online choices we have to chose among
- Java applet/webstart
- Canvas tag/VML/excanvas
- Hybrid Flash/Javascipt (Laszlo)
1. Rule out Silverlight because nobody’s got it yet. I know all Windows users will have it shoved upon them soon enough, but it’s going to be a long time before it’s commonly found on OS X or Linux.
2. Rule out Java because Sun has done such a miserable job of getting the JRE installed universally (maybe partially because it’s GIGANTIC).
3. The Canvas tag is phenomenal (where it works). Excanvas (canvas ported to VML) just doesn’t cut it for performance, though.
6. So it’s Flex. Macromedia (I’ll get used to saying Adobe, I really will) did an incredible job getting their plugin installed. It’s pretty much everywhere. ActionScript 3.0 is quite a respectable language. It’s arguably better than Java in certain corners–Events/Observing/Listening, for example. The library is certainly expansive. The canvas Flash gets you is very nice and performs beautifully. I’m sold.
(My first painful attempts to get a circle onscreen following a mouse have not yet convinced me I made a bad choice. It’s clear that Flex/AS3 are towing a lot of legacy baggage from previous incarnations of Flash/AS that are bunging up its API. But I eat technologies like cereal, and now I know the difference between addChild and getRawChildren.addChild. No problem no more.)