Vendor Lock-in & Open Source Lock-in

Vendor Lock-in; Heard this term before at a big company from a co-worker deciding to use a technology. Didn’t know wtf he was talking about at the time… now I do. I’ve seen the term thrown around a lot by Open Source zealots, using it as a negative for not using open source alternatives. I like my vendor, thank you very much.

…well, I did… then I didn’t… now I do again.

Macromedia made a better product to do my desktop apps while still allowing designers to play; Flash. I was using Director, and it took longer to do things, was less flexible once you picked a development path, and couldn’t have designers working with the same files.

Since 2001, I made the switch 100% to Flash, both design & coding, desktop & web applications.

Something weird, however, happened in 2004… actually 2 things. First, Macromedia released Flex; I know it was released earlier than that, but it didn’t really pick up steam till a few months before 1.5 was released. Secondly, MTASC, the open-source Flash compiler came onto the scene. We’ve had Kinetic Fusion & JGenerator in the past, but nothing made such a profound impact to the community like MTASC did.

Flex came and went for me. I purchased the CD, installed it, went through a couple tutorials, laughed at the sales guy who called me, and really got confused. Why would I ever want to develop this way? Why do I need a server, etc. Then, I started seeing some more blog entries from Macromedia employee’s pop-up; Iteration::Two kept talking about it, and I noticed a lot of Macromedia employee activity on the Flexcoders list. So, I bought the CD again.

I “got it” the 2nd time.

However, I started to see an extremely uncomfortable pattern. During the same time, a lot of announcements were made about Flash 8, none of them seemed to solve the problems developers were having with Flash. Mike Chambers availed a lot of the FUD, but I still didn’t feel 100% better. All the while traffic continued to rise on the Flexcoders list, and the Macromedia presence was strong. Additionally, you could see them actively requesting feedback from customers, even on a 1.5 product. I looked at the price of Flex, and payed attention to some purchasing decisions made while I was at BellSouth.

Things started to click. Debating on this blog, email lists, and through instant messenging conversations, things made even more sense. The more clarity I received on Macromedia’s projected direction for Flex, the more worried and frustrated I had become.

Why was Macromedia focusing on the enterprise customers? Granted, I really saw the potential for getting them involved in our line of work, empowering traditional web programmers to do the same type of work us Flash Developers had been doing. But we Flash Developers still had many challenges to overcome… where was the focus? They had taken a break from the desktop initiaitives, cool, but… we’ve been using your product for years, we’ve evangelized the use of Flash, and an awesome community emerged from that. Why aren’t you actively trying to solve our needs? We’re paying customers, too.

Meant jack. The more I developed with Flex, the more I realized, at least for my type of work (large programming projects, heavy on the back-end, more than likely to have more than 1 developer), this was the future. Sort of.

I, like everyone else, failed to see how I, as well as any company I worked for, could afford such a product. Apparently, however, people were buying Flex and using it. I didn’t work for a big company though, nor intended too. I didn’t mind getting contracted out, but as an employee, um, no.

Only a few of us stuck with it, while the rest clearly saw it wasn’t priced in their market, and left. I however, couldn’t. There was just something “right” about Flex, and I HAD to use it; I could tell this was my future, this is where I needed to be. But how? HOW!? Flash by day, Flex by night… this wouldn’t work forever.

So, I just bided my time and hoped. It only got worse. I suddenly realized that the components in Flex were actually extremely improved & re-factored Flash MX 2004 ones… and they were old, too. Huh? Why didn’t we Flash Developers get these? We would of paid for this.

The cold shoulder I continually recieved at Flexcoders didn’t help any either. Even if I toned down the slang, spoke clearly and articually while still keeping my passion in the craft, I could feel like I was unwanted and not taking seriously.

This pissed me off, big time. I was seriously contemplating punting Macromedia altogether. I tried gathering community support for Flex from the Flash community, but failed since I didn’t effectively convey the value that Flex brought a lot of application developers, even those not working on large projects. That only made it worse, because the price became even more of a hindrance. Even those who did see the value couldn’t convince their customers.

With extreme bitterness, I longed for Sparkle; suddenly, I wanted to be the best .NET & Sparkle developer to ever live, half out of spite. You want to treat this as just business? Fine. I dropped Director like a ton of bricks, and I’ll drop Flash too.

The announcement of AS3 & Flash Player 8.5 for Flex first, Flash second was the nail in the coffin.

…then parts of the vision were shared.

That won me back. The new licensing for Flex Builder 2 generated SWF’s as well as the approachable price point made it work.

By then, however, plans were already in motion. I had no choice; I couldn’t handle Flash any longer for the work I was doing; it was frustrating. It does what it does well, but I needed something different for the code side; FAME wasn’t doing it; while fast, it wasn’t intuitive yet.

I bit the bullet; if you can’t beat ’em, join ’em. So, I started looking at companies that WERE using Flex. Some were appealing, some weren’t. After a week unplugged in Canada, and 4 weeks of being unemployed, I finally struck a phat deal; I could sit at home coding Flex all day with minimal trips to the office; say, once every 2 weeks or more when needed.

Off. The. Chain. What could be better?

So, while tying my career to Macromedia has had it’s pre-emptives (goodbye Director), and forced changes (uh… hi Flex… again), I’ve worked through it. I keep reminding myself this isn’t personal, it’s business, there are stockholders to please, and we have a future to mold. I re-invented myself, hopefully shared the light with as many others as possible, and have tried to positively expose the technology to the masses.

I now understand Vendor lock-in.

Now, on the flip side, Open Source I feel locked me, as well. Certainly lead me on, that’s for sure.

Nicolas Cannasse is a bad ass. The guy created a seriously cool tool which empowered an entire legion of others to exploit Flash in an open source world. The results are continually amazing.

I suddenly was a lot more productive; I was no longer being punished by making tiny code changes only to have to wait minutes for just a tincy change in code. My workflow, while changed, took me out of my comfort zone, and I learned about new tools, new ways to develop, but still used a lot of my existing skillset I’ve honed for years. Cool!

Then, Nicolas takes a 90 degree turn that no one expected. Not only is he not going to support ActionScript 3, but he wants to create a new language.

“Uh… but… dude, I was kind of hoping that I wouldn’t be tied to FlexBuilder 2 costing thousands of dollars because I could use MTASC. Shit… anyone know OCaml?”

Options are funny things. People want them, but don’t always use them. I’d argue a lot don’t. I’d even go so far as to say a lot of the freedoms Americans have in this country are not utilized, but take them away, and their’s hell to pay.

I find the same thing with open source. The “option” exists for most of the projects, depending on the license obviously, for you to not have to wait on any company, and build your own, needed changes to the software, and release it back to the community, legally.

How many could actually do that? I love PHP, but I don’t know C. If I hate PHP 4’s handling of XML, and I bitch on the list requesting a new API be built, or a wrapper be built around the current API, I’d probably be told to put up, or shut up; go write it myself. “Uh, no, how about I pay you to.”

Same with MoveableType. I HAD to learn Perl, though, for if it I didn’t, my webhost would shut down my blog as the spambots were using too much bandwidth. If I didn’t find a way to stop it, the admins would, at the very least, forcefully remove commenting from my blog. Wow, I’m neat, I “fixed” open source software, and thus participated in the revolution. I guess. To me, I felt I was fixing something, vs. improving it… and that was only because ANOTHER open source plugin, a Captcha test, didn’t even work. This isn’t fun, I don’t enjoy this, my efforts do not feel fruitful.

So, while the “illusion” of open source was placed on MTASC, it’s really not, maybe license wise, but not in the “anti-vendor lock-in” spirit; OCaml programmers are, as I’m now finding out, not necessarely in high numbers.

Yet another nail in the coffin for me to HAVE to use Flex.

…AND, proof that you can be locked-in to open source as well.

I’m still a prisoner of MoveableType. I need control of my own blog, but don’t have the time to install something like, WordPress, which is PHP based which gives me enough knowledge to at least take a more active role in improving (or fixing) things. But, my theory is, if it isn’t broke, don’t fix it. I’ve been burned too many times screwing with something that didn’t work, and my blog isn’t checked into Subversion.

At least with the open source, I had a choice; go back to a vendor, or start learning haXe.

I like Macromedia. I like Flash. I like Flex. I like a lot of Macromedia’s other products, and I feel a lot of them I can still evengelize to others. I have learned valuable lessons, though, about what I feel is vendor lock-in, as well as not talked about dark side of open source software, open source lock-in.

This whole article could actually be a farce, one could argue. If I were a real developer, I could go learn something else. Sure, I could, I learned Perl (2 lines), PHP, Lingo, Visual Basic, JavaScript, HTML, mySQL(enough to be dangerous), and CSS on my own. I could easily go find a career in .NET, I feel, or even C, albeit lucrative, since I find I’m more akin to client development than server. That would render the entire “vendor lock-in” the spouting of an inesecure developer, fearful for his career, utilizing a hollow phrase in self-defense of using open source.

So, sure, I could go learn Ruby on Rails… but, Flex & Flash are fun! I don’t mind being locked-in if it’s fun. People who use the prison metaphor; like the Matrix. You don’t even really realize you’re in a prison.

Yeah well, this is the real world, and I don’t know C or OCaml… and Flex and Flash are fun, so… what can I do? Make the most of it. At least I can depend on Macromedia (and soon to be Adobe) being around longer than my quick forray into the open source world. Not a good first experience for me, and certainly makes vendor lock-in a good thing vs. a bad… for me, anyway.

XMLHttpRequest vs. XML vs. URLLoader: API Comparisons

Trying to go for the jugular here. AJAX utilizes XMLHttpRequest class for its asyncronous communication, Flash Player 5 – 8 use XML class, and Flash Player 8.5 utilizes URLLoader (and friends). Let’s compare the things that are different. Request headers, for example, are very similiar for all 3.

Aborting the Call

XMLHttpRequest has abort. XML does not. URLLoader has close which effectively does the same thing.

Syncronous & Asyncronous (everyone freeze vs. I’ll get back to you)

XMLHttpRequest has the ability to be syncronous or asyncronous. XML & URRLoader do not, they are always asyncronous.

Event Handling

XMLHttpRequest has a onReadyStateChange event that fires when the loading state of the object has changed, at which point the developer will check the readyState property to determine which of those 5 different states it has changed to (uninitialized, loading, loaded, interactive, complete).

XML has 2 events, onData and onLoad. XML, if created as an instance, is always initialized. XML is either loading XML to and from the server, or it’s not, via the loaded property.

URLLoader has 7 events for various states & times of the loading operation.

Return Data

XMLHttpRequest gets its text response data in the responseText property.

XML gets its text response data as the first parameter to the onData event, at which point you handle it, or parse it, set loaded to true, and call onLoad with a true as the first parameter.

XMLHttpRequest gets its xml response data as the responseXML property.

XML, as it is an XML-DOM object already, is ready to be accessed by DOM methods as soon as the onLoad method fires with a true as the first parameter, meaning the data was successfully downloaded & parsed.

XMLHttpRequest gets browser responses via the status property.

XML doesn’t; you have to parse them from onData. There are some common return values found in the XML.status property.

URLLoader gets an httpStatus event.

URLLoader’s complete event is complex, however, in that different requests could of been made (a simple HTTP request, a binary stream you intend to parse, a GET/POST action that will have URL encoded variables attached, or waiting to get raw XML). Each request operation has a class to handle the common operations for each.

Conclusions

The fact that both XMLHttpRequest & URLLoader have abort functionality makes them much better than XML. Not being able to abort requests wastes bandwidth, as well as server-processing. Additionally, I have yet to see a conclusive report on how much bandwidth is being saved/added to a web application from going to a many small requests/responses with fewer page refreshes model vs. a few large request/responses with more page refreshes model.

While I peronally cannot see a reason why you would ever want to intentionally have code block, thus locking not only your script running, but also your GUI, I do know a lot of developers who do. XMLHttpRequest scores a high mark via this boilerplate aspect in the ability be syncronous or not.

XMLHttpRequest & URLLoader both score high marks in having the ability to see the http status code, where you can’t (natively anyway) with XML.

URLLoader I think wins here merely from the fact that you know what the heck is going on. The myriad of events, with the information each event object contains, gives you a lot more context to what is happening with your request. Knowing when it’s done downloading, when you’ve got a piece of data that’s started to download, being notified of an http status code, getting an ioError when she blows up, getting an open event when the data has started to download (after the data you have sent is done sending), getting more than 1 progress event for longer loads with a current and total amount of bytes, if known. No one wants to know about securityErrors, but they are there.

XMLHttpRequest has you continually check a property on each status change; that in itself doesn’t really give much context as to what is going on, and you must investigate this yourself with code vs. being told.

XML? It either works or it doesn’t, and you have sparse tools to know what really happened.

If I had a choice, I’d choose to use URLLoader to do asyncronous loading of data on the web.

Sources

Web 2.0: I make it, but don’t use it

I think I’m using Web 2.0 wrong. I’m really feeling left out, and am starting to feel I’m either not as much as a geek as I thought I was, am doing something wrong, or am just being a late blooming user.

What I do use

I use very few web apps compared to what’s available in my daily and weekly routine. I use Fullasagoog & MXNA to read blogs. I consider both to have some forms of web applications in that both have various ways to see and control data through visualizations.

I use Flickr everytime I have new pictures, whether emailing from my phone, or from cameras we have.

I link to Wikipedia a lot.

I turn JavaScript back on in Firefox, and use Google Maps when I’m heading somewhere new; usually once every 2 weeks.

If I need to bypass a stupid sign up page, I use bugmenot.com. If I need a fake email if bugmenot doesn’t work, I use mailinator.com.

What I don’t use

Everything else is a website, not a web application. One could argue when I utilize a dynamic element on a form when purchasing airline tickets online, that’s it a web application, but I’d disagree; it’s just a really well written form in an airline website; 1 integral part to the site, not a standalone application deployed via a the browser.

After taking a blog survey, I’ve just been made aware of a plethora of media hosting services I had no clue about, nor why I should care.

Grokster, MySpace, etc. don’t appeal to me. I get invites, but ignore them. I’ve signed up for LinkedIn, and maintain most of the connections I get, but receive no ascertainable value for my time spent.

I used Del.icio.us once, but my Firefox bookmarks work just fine, and if someone blogs about a link, posts it on a mailing lists, or emails it to me, and I feel like I’d like to reference it later, Control + B, done.

I used Ning once, even signed up to be a beta tester & developer, but quickly lost interest; I didn’t get it, and as any typical user would do, gave it 10 seconds, and left. I then did what a curious developer would do, and gave it 2 more chances. Still didn’t get it. Left.

Google’s RSS reader was annoying; like, some things didn’t refresh the page, so I didn’t really know if something had happened. Sometimes my back button worked, other times it worked for really weird things.

I’ve yet to see the point of getting Gmail. While my manager from a past job made an extremely good case for it, Outlook Express, patched, works great in sorting mailing lists, and my delete key kills Spam dead. Again, mailinator solves the need of a seperate email, and I found out I accidentally have a Yahoo! one from a Yahoo! account I forgot I had.

The mashups from Google Maps and Yahoo Maps, while awesome from a geek standpoint, do me no good. You think I’m going to remember what was what, and where to find it? Unless Real-estate sites that I’d probably use once in my lifetime put them on their sites, which Yahoo! allows, then maybe I’d use it. That’s a very short window of opportunity for them.

Confused About Web 2.0

I have read Tim’s original defintion of Web 2.0, as well as the compare and contrast followup.

Hoping one of the good AJAX & Web 2.0 bloggers, Jonathan Boutelle could answer my dilema via a real-world application. After reading Jonathan Boutelle’s blog entry about MindCanvas, I became extremely frustrated reading the site. Nothing told me how to use the product. Oh yes, there was plenty of info about it, but no link. No text on the site, that I found, said anything about it being in beta, and thus making this site really not in my best interest to be viewing with false hopes. I managed to pacify my frustration from the context of his blog entry.

Everytime I read an O’Reilly blog I get more confused and frustrated. There is this assumed thing about the industry that I just don’t get. I mean, I’m a geek, aren’t I supposed to be ahead of the user curve by 2 years, and they 2 behind? I feel like I’m with the users on this one; I don’t get it.

Apparently, now the technology I have been using in my career suddenly empowers me to create Web 2.0 experiences and applications as well. While reading these nebulous definitions of what Web 2.0 is, I still respect the opinions since the majority of what I’ve read comes from competent individuals, and as such, I’ve tried to let things play out over the course of the last few months to see if I can use some early hindsight on the debates, discussions, and new web applications that are put under the new moniker of Web 2.0 to see if some true context would happen. I’m really trying to keep an open mind on this.

It didn’t. At least, not for me.

Stranger Context

I read the supposed leaked memo from Bill Gates, which I haven’t gotten confirmation on if it’s legit, but read it just the same. So far it’s the only thing that makes sense business wise. I use Word; it works, I don’t want to change. I usually upgrade, by accident, every 3 versions. So, it’ll probably be accident again; I won’t find it installed, or I will, but it’ll be a link to Windows Live, which has a free, 1 year subscription to “Word Online”. Ok, so I just have to use it in a souped up version of IE. Whatever, as long as it works.

In terms of capability, I really liked Scott Barnes take on the whole mess.

However, reading Ryan’s latest entry, I was extremely confused. The desktop, with some network aware applications, is my life; how could it be ending? Without desktop applications, I’d be f00ked.

Don’t get me wrong; I’ve read plenty of blogs where old-skoolers remember the jumps from client to server, and server back to client; using the metaphor of a pendulum to basically show how things are swinging back to the client again in the industry currently.

Conclusions

So, I guess, bottom line, I’m confused on why I don’t use as many web apps as people are apparently using. I’m confused on what is defined as a Web 2.0 web application; what is the criteria, and how much desktop is allowed into the picture? How do non-Microsoft entities expect to really capture that desktop experience with the use of browser extensions?

Maybe I do use Web 2.0 and don’t know it… I certainly don’t get it, though. I’d much rather have occasionally connected, desktop agnostic applications that could utilize net connectivity when it’s available. Like Microsoft’s SmartClient or whatever new incarnation of Macromedia Central ends up being.

Browsers suck for developing software; only reason I survive is because Flash Player actually works. Maybe I should just go learn C and crawl in a hole until this whole thing blows over and I can use some real, working hindsight.