Archive for the ‘Musings’ Category

Little Boxes, in the Browser…

Little boxes...

Little boxes on the hillside...

“…little boxes made of ticky tacky…”

I work on making those boxes just about everyday – those blinking, glowing, beeping boxes that hold an instance of the Flash Player. Some people seem to think that my boxes should be derided and ridiculed like the cookie cutter suburban homes (and lifestyle) the song “Little Boxes” was originally written about.

The problem is that conformity is on the wrong side of the debate this time around – it’s Flash that works to push new forms of media and interactivity out on the web, HTML 5 is just playing catch up.

Yes, this is my post about “The Great Flash vs. HTML 5 Debate of 2010″. Many other people have written about this (I’ll add some links to my favorites in an update later) but my take on it is that a lot of people are missing the point and “yelling” just to yell. HTML 5 is, in some ways, catching up with Flash – but Flash is just going to keep moving forward, and that’s good for everyone.

Overall, the debate (if you can call it that) has been very odd because it’s possible to be an HTML/CSS/JS developer and never use Flash, but it’s very difficult to be a Flash developer and NOT be well versed in the other tools of the web development trade. This has meant that one side of the debate has actual technical familiarity with BOTH technologies in question and the other side only knows “their side”. Folks from that side of the debate seem to see Flash as an abomination, a scourge that must be purged from the web – but why? I hate to say it, but it’s about conformity – it’s cool to hate Flash and entirely ignore it’s merits.

It’s all gotten quite silly really. So, as the owner of a software development shop that creates interactive media for the web in many different technologies (including Flash *AND* HTML/JS) let me lay down a few facts about the technologies in question and how they affect my business:

Yes, HTML 5 supports video and yes there’s still some dust to be settled about the codecs – that’s well worn territory. What isn’t often discussed is the fact that Flash can do so much MORE with video. For starters with Flash you have alpha channel support – with HTML 5 you’ve got video in a box, that’s it. Now that’s not to say you can’t do cool stuff with HTML 5 video – but no green screen action. Then, don’t forget about DRM (I don’t care about it, but ask Hulu or CBS and I’m sure you’ll get a different reaction) and video input. Could you build Chat Roulette with HTML 5? Nope.

When I start new projects with clients we usually spend time debating which Flash Player version we should target. Usually we’re talking about a 5-10% difference (say 92-97% penetration) – but across millions of users, that’s a lot. To put that in perspective, right now, somewhere around 60% of the browsers in the hands of users aren’t capable of rendering the canvas tag. If I’m targeting a general audience, the canvas tag is essentially unusable for me right now and will be for some time to come. That doesn’t even touch on the fact that NO major animation tool (actually I don’t know about any!) currently targets canvas as an output format. If you have kids you’ll see the major problem here – just sloughing off an animated GIF onto junior just isn’t going to cut it these days.

Finally (well, for this post at least) there is audio. What kind of audio support is there in HTML 5 and the other related technologies? Well, you’ve got playback but that’s about it. No synchronization, no volume control, no panning and definitely none of the low-level features needed to make something like, say, Audio Tool or the virtual DJ toy my studio recently released, Shmitty, McFunkle & Stump’s Beats.

What this all comes down to is this simple question: Where does innovation in interactive media on the web come from? It’s not from committees and standards bodies – it’s from de-facto standards that win because they are BETTER and offer MORE than is possible by working within the standards alone. Like it or not, the web, for many, many people, is just an entertainment medium. HTML still has a ways to go to match the kind of entertainment you can build with Flash.

Finally, I want to make this very, very clear – I really want HTML 5 to succeed. There’s a lot of promise there and my team and I are busy working with canvas and other HTML 5 technologies where and when we can. What I don’t want is for Flash to die, and you shouldn’t either – it pushes the web forward in a way and at a speed that a standards body never can.

I mean, if Flash dies, where will HTML 6 borrow ideas from?

Thanks to Malvina Reynolds for her awesome song lampooning the rise of cookie-cutter suburbia, it’s been a favorite of mine since I was a little kid.

Back in my day…

…you had to download a form from NetworkSolutions, fill it out, photocopy your drivers license, and fax everything over. Then, around a week or so later, you’d have a domain. You’d have to go through the whole process again if you wanted to change say, your nameservers.

I mention this because a few days ago my wife and I came up with an idea for a cool web app. Tonight we were able to buy and setup everything we needed to get started coding. The domain is registered, the server is running, and the databases have been created. Ain’t technology grand?

Sleep Rhythms

I’m starting to think the later-night valleys in my sleep cycle are around 3 hours apart. Why do I think this? Well, because I can strangely wake up without much issue around 5:30-5:45. In fact I often wake up right around then, see that it’s still dark out and just zonk back out. If I do that, and I’m able to sleep in I tend to wake up again at around 8:45 without much issue.

Suffice it to say I usually need to wake up somewhere in between the those two times… and that waking me up is the final practical exam for mad scientist trainees enrolled in Reanimating the Dead 101.

I may have to become one of those evil “morning people” because 8:45 is just too late and I’m starting (after 9 years of marriage, grant you) to feel bad for what my wife has to do to get me up. I guess this what that whole “acting like an adult” thing is all about.

Inspiration and Perspiration

I feel like I was more organized when I was younger (high school, definitely not college!) but I think that may just be a case of selective memory. After all I do remember spending more than one lunch period in the library doing homework or an essay that was due that afternoon. Maybe back then I just didn’t know how poorly organized I was so it didn’t bother me as much as it does now.

Anyways, the source of my scheduling issues seem to stem from a strange artist-like quirk of my personality – I really need to feel inspired in order to sit down and code. If my muse is there it can be scary how much code I can write in just a few hours. On the flip side, forcing inspiration can be hard – very hard. I seem to want to mentally sabotage the effort – there’s always something more interesting or more important I should be doing.

I think taking the next step to better self-scheduling/not procrastinating is difficult because I’ve been very successful at slaying the first dragon in this quest – hitting deadlines. I’ve been really good over the past year with the vast majority of my deadlines. There have been a few nasty outliers, that’s for sure, but for the most part I’m getting quite unaccustomed to the lovely sound a deadline makes as it whizzes past.

Now that I’ve dealt with my issues well enough to not hurt other people, the only person I’m still negatively affecting is myself. I still have to put in a good deal more stressed-out crunch time and heroic efforts than I would like. It’s one thing to beat my muse into submission so that I don’t negatively affect someone else and a whole other thing to try to smack my muse down to the point that I don’t have to work late to make that happen.

The technique I’m currently trying is a combination of better/earlier delegation combined with daily or near daily minimum levels of effort for ALL projects I’m currently working on. I sure do hope this works because I’m getting really tired of working late but at the same time I actually love the pace of my schedule!

Bruised Shins

When I left college I knew a bit about GNU Make. Just a bit though. Only what I had been taught in class to make my C++ applications build. I had no idea what I was really doing, nor had I any concept about the power of the tool or related tools like Autoconf.

I had to run into the problem of a complex build and deployment process before I really “got” the idea of build scripts. The same thing was true for me about test-driven development. Until you experience the pain of playing wack-a-mole with regression errors it’s hard to comprehend the importance of well written unit tests. Hell, when I think about it, almost every single major point of growth in my ability to develop software has been based on me virtually banging my shins on something.

At this point in my career my virtual shins should be entirely black and blue.

A major benefit to learning software development in this manner is that every line of code you write, you write with purpose. You avoid falling into a trap placed in front of developers by many well-meaning experts – you never get religion. If an expert says you must do TDD or always follow the rules of OOP… well, you do it! Because it’s better. But why is it better? Well, you forget, but it must be better because the smart person told you so!

Getting religion about code is dangerous. It makes you less pragmatic and less open to new ideas. Best practices are only best until something better comes along. How will you know when something better comes along if you don’t really understand why the current best practices are “best”?

I think that’s why I, as the author of a book about object oriented programming, am currently in a study group with some friends (including my co-author, Sam Wan!) trying to learn Scheme and functional programming. After all, sacred cows make the best hamburgers.