Chad Perrin: SOB

29 October 2007

Adobe AIR and the overly defensive Web

Filed under: Geek,inanity,Liberty — apotheon @ 12:47

I just stumbled across this weblog post about how great Adobe is, and how evil Mozilla is for daring to refer to an Adobe product as “proprietary”. After having read the entire ramble, what immediately struck me was the way an Adobe employee just tried to convince everyone that his employer is the Second Coming of Open Source Friendliness while avoiding the key issue to which he was ostensibly responding.

Mike Chambers, the author of the post, objected to this statement from Mozilla’s Prism page:

Unlike Adobe AIR and Microsoft Silverlight, we’re not building a proprietary platform to replace the web.

That’s what set him off on his entire, prolonged gripe-and-brag, apparently. His immediate response, before addressing what was really bothering him, was to correct an apparent oversight:

First, Silverlight and Adobe AIR really are not related at all, and don’t target the same things. As I have said a million times before, if anything, the comparison is between the Flash Player and Silverlight.

Unfortunately for Mike’s point, the quote from the Prism page in no way implies that AIR and Silverlight are the same in any way except in that they’re “proprietary” and attempts to “replace the web”. If you want to take issue with the phrasing, take issue with the “proprietary” and “replace the web” terms used, not some straw man where you assume someone is claiming AIR and Silverlight are just the same thing from different companies. Just as a Hyundai Sonata and a pair of Doc Marten AirWair boots are almost nothing like each other, they are both proprietary attempts to replace modes of travel like crawling around on your hands and knees.

While I’m at it, though, Adobe’s own marketing has identified the capabilities of AIR (or at least its predecessor, Apollo) in a manner that makes it sound stunningly similar to Silverlight. Each uses a VM for what is traditionally viewed as a “web scripting language” to provide desktop-anchored applications that are highly portable (as long as you have the VM and environment installed), granting an ease of installation and use reminiscent of a “package manager” from any of several open source OSes. I fail to see how they are not particularly comparable.

As Mike puts it, the comparison should be between Flash and Silverlight, not AIR and Silverlight — but AIR is being pushed as the Next Big Thing, the fusion of Flash and standard (though not necessarily Standardized) web content that isn’t so easy to achieve using a “traditional” web browser. In fact, the more I think about it, the more it seems like if there’s a point at which the comparison between AIR and Silverlight really fails, it’s the point at which AIR proves itself to be a more comprehensive and direct attempt to replace the web as it currently exists (with a proprietary system).

After quoting the Prism page further, Mike has this to say:

Do you see where I am going with this? You could describe Adobe AIR in exactly the same way (just replace Prism with Adobe AIR and Firefox with Webkit).

Webkit isn’t really comparable to Firefox. It’s more comparable to Gecko, the rendering engine that underlies Firefox. In other words, Mike dismisses Firefox as nothing more than a rendering engine that can be leveraged to provide a desktop-oriented approach to web-delivered applications. It seems he utterly fails to get the point that Firefox is a complete application that provides an interface to web-delivered applications already. The difference with Prism is that it allows one to separate those web-delivered applications into their own discrete desktop windows (off-topic: there’s a nice mixed metaphor for you). This makes Prism more properly a contiguous part of the web browser’s platform, an extension of it more fully into the desktop UI model. He ignores all of this, however, by equating Firefox with Webkit — ironically making the same mistake of improperly comparing software that was the basis for his initial complaint about the Mozilla/Prism take on AIR and Silverlight.

Ultimately, I think Mike is overlooking the fact that there’s a distinct difference in the approach taken by Adobe in the development of AIR and that taken by Mozilla in the development of Prism. The former approaches the web from the realm of the desktop application, and the latter approaches the desktop from the realm of the web application. They may be converging on middle ground, but there are some things that will definitely be done very differently because of these differing perspectives and avenues of approach — such as the degree and manner of browser integration, as well as the manner in which the software maintainers will expect people to write the applications that run via their respective platforms. It’s entirely possible that AIR is capable of much the same thing as Prism (though difficult to tell amongst all the marketing-speak and defensive rants like Mike’s), but from where anyone not actually developing AIR in Adobe’s employ is sitting, it looks like Adobe expects everyone to write AIR applications that are delivered via the web, and Mozilla expects everyone to write web applications while allowing end users to turn them into desktop applications with the click of a button.

Does that sound the same to you?

A bit further down in Mike’s treatment of the subject, he says:

Adobe AIR is built on top of web standards and can run existing web applications and content. It runs on Windows and Mac (and soon Linux), and it also provides additional desktop functionality.

That really does sound surprisingly like Silverlight. What was his objection to that comparison, again?

Mike informs us, in the last paragraph:

Adobe AIR is not meant to “replace the web”

No, I suppose it isn’t meant to replace the entire world wide web — but it is meant to be a replacement for the traditional web platform UI, the web browser. It may be assumed that, at least for a while, AIR users will also be browser users, but that doesn’t mean it isn’t meant to replace the browser to some non-trivial degree as a platform for web-delivered apps. The browser, to a significant degree, is the web: it’s the central point through which all the HTTP-communicated markup documents are connected to one another. Without that pervasive interconnectedness, it wouldn’t be a web. As useful as they are, tools like AIR and Prism divide up parts of the web into discrete, stand-alone applications, no longer acting as part of the contiguous whole.

Hyperlinks bind pages together into a largely homogeneous single interface. The web is a “web” because it is a single mesh of documents created through an accidental synergy of efforts between individuals. As long as you’re not intentionally constructing “walled gardens” where you can get in, but can’t get back out again, you contribute to that web. Discrete, break-away applications don’t fit that description — so, contrary to what Mike’s trying to push, AIR doesn’t seem to be anything like part of the web. It’s a piecemeal replacement of parts of it. The fact you get your application behavior from the same source — the same server on the Internet, via the same HTTP protocol — doesn’t make it part of the same web, because the web isn’t defined by a protocol or a given server. It’s defined by the interconnectedness of content.

Mike then goes on to finally tackle the issue that’s really bothering him:

So, I guess the thing I found odd was Mozilla appears to be building something very similar to Adobe AIR (which is fine and cool), but somehow it is inherently good when Mozilla does it, and inherently evil when Adobe does it.

No, that’s not what’s being said, Mike — and if you weren’t so damned defensive about Adobe’s “honor” (hah, there’s a funny thought), you might be able to understand that without having to get your nose rubbed in it. What’s actually being said is easily broken down into parts like this:

  1. Mozilla is taking a web-platform approach, while Adobe and Microsoft are taking a desktop-platform approach, or so the marketing materials from Adobe and Microsoft seem to suggest.

  2. Mozilla develops open source software, while AIR and Silverlight are closed source, proprietary software.

If you choose to apply the character of “evil” to “closed source, proprietary software”, that’s you doing so, and not the Mozilla Foundation. Is that clear enough for you?

Of course, I happen to share some of that sentiment, if that’s what you really want to imply, but that’s not really relevant to the topic at hand. The point is that Mike has assigned moral judgments to a simple statement that Adobe AIR and Microsoft Silverlight are similarly proprietary software “products”, both of which are apparently intended to allow the developer to use web programming skills to deliver application functionality to the desktop.

Quoth Mike:

So, is the main difference between something like Prism and Adobe AIR, that Adobe AIR is being primarily developed by a company (Adobe), and that Prism is being developed by Mozilla?

That certainly isn’t the “main difference”, and I don’t think anyone claimed or even suggested it was. As Adobe itself has proven with Tamarin, for instance, a corporation like Adobe can create open source software just as easily as a non-profit foundation. AIR, however, is not open source software — so, in addition to any technical differences, the licensing is also significantly different. That right there is a much bigger difference in the software itself than its point of origin.

Next comes the really funny stuff:

Adobe has been an active supporter of the web development community, of open source, of web standards and of Mozilla (donating the ActionScript virtual machine from the Flash Player (Tamarin)).

I love that “has been an active supporter” comment. Let’s flesh it out a little:

“Adobe has been an active supporter of [. . .] open source [for all of five minutes].”

There. I fixed it for you, Mike.

Mike really seems to be sold on the idea that Adobe is the Great White Hope of corporate support for open source development, and he really seems to want to convince us of the same. I’m not convinced. I’m likely to remain unconvinced until some time after Adobe provides open source versions of its browser plugins.

. . . or, at the very least, provides browser plugins that bloody well work with open source OSes and browsers. Come on, Mike — do you think you’re going to sell ice to penguins?

. . .

I don’t know why I’m continually surprised when employees of massive, market-dominating technology companies like Microsoft, Oracle, and Adobe spout this kind of defensive obfuscation. These corporations want to have their cakes and eat them, too: they want to leverage proprietary technologies for effective vendor lock-in toward the goal of increased market dominance, but employees like Mike still want everyone to see the corporation as the warm and fuzzy teddy bear of openness.

I can understand how one arm of the organization might be pursuing its usual “burn the village to save it” tactics while another is making honest attempts to extend welcome and aid to open source development projects. That’s entirely comprehensible, within the realm of the massive, bureaucratic collections of people with often conflicting agendas that get lumped together under the banner of a single corporate masthead. What gets confusing is the willingness — even eagerness — of employees of such corporations to attempt to use the friendly behavior of small, uninfluential (within the corporation’s power structure) divisions to justify the predations of the larger, market dominance oriented divisions that are busily pursuing a Final Solution to the “problem” of competition in the market.

It would be sickening if it weren’t so risible.

24 October 2007

expression vs. construction: how to think about programming

Filed under: Cognition,Geek,Writing — apotheon @ 12:04

Justin James had this to say in his weblog post, The programming paradigm needs an update:

It is all coming together for me now, the conscious understanding of what I really dislike about programming. I got into programming because I like solving problems, but solving problems is really only a small fraction of the work. The rest of it is giving exact, precise details as to how to perform the tasks that solve the problems. It is like painting the Sistine Chapel by putting a seven-year-old boy on a scaffold and dictating to him every stroke you want him to make. It is ridiculous.

Back when I flirted with WYSIWYG web design software for a year or so, I started running up against a similar wall in my enjoyment of the craft. I had many of the same issues with web design that Justin seems to be having with programming — it was tedious, micromanaging work, starting with doing a broad sweeping overall design, then having to subdivide into parts to fix the initial generated code to make it actually do everything I needed. I found myself wondering what I’d ever found to enjoy about web design.

One day, I had to do a fair bit of web design work on a machine that didn’t have Dreamweaver installed. I cracked open Notepad and got to work. Guess what happened:

I enjoyed myself!

I discovered that the major hurdle in my way is that I was treating the process of web design as something akin to bricklaying — I created a grand design document, I threw together sections of wall mechanically and largely automatically, then I fit individual bricks into the spaces to tie it all together. Tedious, really. When I just used an empty text editor as my page, I could compose the code I needed rather than constructing it. Not only did it become something more like finely detailed art, as though writing a character-driven tale with the plot as something that emerged naturally rather than being hammered into the reader at every turn, as opposed to some kind of boring civil engineering task, but the end result ended up being much higher quality, better suited to the specific task I needed to accomplish. The end result got better at the same time that my enjoyment grew.

I had up to that point never used an IDE for any actual programming — I had always just used a bare text editor. I later picked a few up and played around with them for a while, but they never actually accomplished anything any more quickly for me, and worse yet they tended to crush my enjoyment of coding. I never really made a specific, direct connection to the situation with using a WYSIWYG HTML editor before today, and the effect wasn’t nearly as dramatic and notable because I never spent as much time with an IDE as I had with Dreamweaver, but now that I think about it I suspect much the same thing was going on.

Perhaps the problem Justin is experiencing is in large part because he progressed from vi to IDE, rather than from vi to Vim (or nvi, or whatever advanced successor to vi he’d prefer). The IDE culture that has grown around Java’s and Microsoft’s shared domination of much of the software industry turns programmers into manipulators of automated assembly lines, rather than masters of a craft. I think the key problem here is in how we think about programming: when using all those code generation tools to produce masses of scaffolding into which we’ll insert library calls and class APIs, we think of programming as a rote exercise in rearranging pregenerated blocks of reusable atomic substructure; when we break open a powerful text processing application like Vim and start with a shebang line or header includes, then proceed to typing the first instance of a function or class definition, we are actually thinking in the programming language. It’s more like writing a sonnet — structured and guided by rules of a sonnet’s composition, but in some ways more an artistic expression than a step-by-step execution of the instructions for building a suspension bridge.

I’ve heard it said many times that the fun programming involves solving new problems, rather than just solving the old problems all over again. This is why smart programmers usually end up wanting to work in AI, or otherwise pursuing new avenues of applying and expanding their understanding of computational theory. I’ve seen some, however, who are just as happy to construct CRUD (Create, Read, Update, Delete) applications that are a thousand times as good as the standard Java CRUD app. I, too, am not terribly bored by solving old problems in a slightly different way to suit my own preferences. I think the difference for the bleeding edge problems is not necessarily that they’re problems nobody has solved before, just as real, original, good poetry can still be written in iambic pentameter and about the ages-old topic of lost love. Rather, the difference is in the tools that are used. Because bleeding edge problems cannot be solved with code generators and other tools that just rearrange blocks of commonly used code, the programmers “flex” their brains and have to really think in the language they’re using, composing something of an artistic expression of the problem domain in code. You can do that with any kind of problem — even a largely typical CRUD application. Enjoyment of the craft is not limited to solving problems nobody’s considered solving before. I think that usually just doing a better job on an old problem than anyone else has because you don’t let yourself become constrained by the code generation tools available to you is all that’s needed.

Instead of thinking about how to rearrange big blocks of functionality to get the solution you want, think about the problem itself and how to solve it in your programming language of choice — and maybe even think about which language can best be used to express the problem (and its solution) in this particular instance. I find that the best tools for that are those tools that make editing code exceedingly fast and easy once you’ve mastered them to some degree of competency without masking the language you’re using behind automated operations like class builder functionality in your IDE. I’m talking about tools like Vim, of course.

I think this is also part of the reason that daycoders tend to like their Javas and C#s and other verbose, repetitive, pattern-bound, IDE-requiring languages, while the really eccentric and brilliant hackers in the open source community tend to prefer their Lisps and Perls (and Rubys and Pythons and Haskells and Erlangs) and other succinct, flexible, powerful, dynamic languages that don’t lend themselves to IDE abstraction (but, instead, lend themselves to tools like Vim and EMACS, aka Esc Meta Alt Ctrl Shift): one is for people rearranging pregenerated chunks of functionality to solve a business need quickly but not necessarily well, while the other is for people solving problems they personally want solved — and solved as perfectly as possible for their particular needs. One set of languages is the toolset for assembly line work, and the other is the artisan’s carefully chosen set of tools for a craft.

I agree with Justin, that languages like Lisp can be difficult for many programmers. Lisp is in many ways inherently recursive, requiring one to really grok recursion to use the language to anything even approaching its full potential — and recursion is just the beginning with Lisp. On the other hand, dynamic languages in general need not be so difficult. Ruby, for example, is one of the most dynamic of widely known languages, and yet it’s one of the easiest to grasp. In fact, while I’ve long understood what the map operator in Perl does and have explained it effectively to others who, despite years in the Perl biz, never quite grokked it, I always had to think about it for a few minutes every time I used it to remember the specifics of how it’s used — but working with iterator blocks (such as when using the Array#collect method) in Ruby has provided me with a greater understanding of how language constructs like map work at a deeper, more intuitive level, and Perl’s map operator (as well as its grep operator, for that matter) is second nature to me in a way it never was before. Perhaps better yet, in many ways Ruby acts as a simplified (yet more flexible and rich) Java for the Java daycoders, as it’s a really solid object oriented language that nonetheless eschews much of the repetitive scaffolding and cruft necessary to perform even the simplest tasks in Java (or C#, or C++, et cetera).

In short, I’m not sure we really need to move more toward “intentional languages”. I think the key is that programmers must be able to express their intentions in the languages they use — which requires thinking in the language, and not treating the language as bricks and mortar which must be manhandled into place. A (good) programming language is a language — a means of expressing oneself — and not just a pile of raw materials. If you can’t use a programming language as an actual language, you’ll find it very difficult to express the problem domain and its solution, just as it’s difficult to express one’s intent elegantly by tearing pages out of books on your shelf and attaching them to form a new book.

21 October 2007

A Day in the Life: On the other hand, the xkcd ninjas were cool.

Filed under: Geek,Humor,Liberty — apotheon @ 03:55

Yesterday morning I did a little content updating on the Copyfree website. In particular, I completed writing enough content for the copyright page so that I could remove the parenthetical “more text forthcoming” note from the bottom of the page. I also started on something about the international implications of the site’s general content, but haven’t decided where to put it on the site yet. After that, the SigO and I headed out to run a couple errands. She got insoles for her boots, and I got new laces for mine. Specifically, I got fifty feet of OD green 550 cord that I would later cut into bootlace-length sections (and melt the ends so I’d have pseudo-aglets). 550 is the best bootlace material I’ve ever had — just one more benefit of my Army experience (an episode of otherwise somewhat mixed benefit). We also picked up a couple of trashy professional fanfic books, just for the joy of having something quick and brainless to read before November starts.

That afternoon was the first meet-and-greet gathering for the Fort Collins 2007 NaNoWriMo group. We collected at La Dolce Vita, a coffee and gelato shop in town. People talked at each other. It seems like nothing really “official” got done, but the whole point was for people to meet each other, I guess.

By the end of it, the SigO and I had made arrangements to go shooting at an outdoor range in the next town (also the next county) over with one of this year’s NaNoWriMo participants. After that we got dinner at a local Japanese and Korean take-out place, got some organic nog (technically “egg nog” is redundant, since “nog” means “egg drink”) headed home, and settled in for the evening.

While home last evening, I decided to compare a background color on a temporary web page I had made to the background color at Copyfree, and had a bit of a surprise: it was broken. The error message it gave me on the screen was one that seemed to indicate that I had either screwed up the eruby binary I had in the cgi-bin or had screwed up the code in the page — in every single page of the site, that is. I hadn’t touched the eruby binary in months, though, and the site was working just fine when I left home that morning, so something else had to be up.

Just to be safe — because it never feels good to call tech support and, halfway through the conversation, admit that I just realized I’d done something stupid and it’s all my fault, I’ll fix it, thanks — I spent some time checking out everything I could think of to make sure it was all still present and in last remembered working state. I even tried swapping out the eruby binary for another one copied from another webhosting account temporarily, just to see what would happen. Nothing changed, nothing got fixed. I called tech support at the webhost.

My first question was “Have you guys changed anything on this server in the last ten or twelve hours?” In the course of discussion, the grunt-level tech support guy mentioned that Rails had been upgraded that day. A light bulb (really more of a single light emitting diode, but close enough) flared to life in my noggin. I decided to let the guy go through all his tech support script and try all his standard tech support tricks to see if he could sort out what was going on. He stepped away from the telephone (put me on hold) a few times to confer with others and/or look things up, or whatever it is webhosting tech support flunkies do when they put me on hold. I had to re-explain what I was doing (using eruby for markup-embedded Ruby web development, and not using Rails at all — it’s not even set up on the webhosting account), because of course most of these guys are probably not exactly web development and Unix-like server platform experts. I mentioned the idea that had come to me when he mentioned they’d upgraded the Rails version: that I thought they might have also upgraded the Ruby version and/or the FastCGI version, and as such I might need to rebuild my eruby binary. He sorta glossed over that, probably because he didn’t know what I was talking about.

Finally, he ran out of steam and suggested that I submit a ticket, because he thought the problem might have something to do with a missing Rails configuration file. I thanked him, made some kind of comment about how I was going to try rebuilding the eruby binary before I submitted a ticket for higher-tier tech support, and signed off. I rebuilt the eruby binary and, voila, everything suddenly worked. I decided to be nice, and called back to tech support to let someone know there what the problem was, how their Rails upgrade had precipitated the problem with the eruby binary (since nobody told me anything was being upgraded), and how I had fixed it, so they would have a ready answer for anyone else that called with the same problem. I’m not convinced the guy I talked to knew what I was talking about.

This morning, I got up at the insane (for a weekend, especially) hour of seven in the AM. I packed up my Glock 22 (.40 S&W caliber — “22” is a model number in this case, not a caliber) and got ready to go. The SigO and I were in the living room, about at the point where we decided what jackets we’d want out of the closet, and I opened the front door to see what the morning weather was like. Big, quarter-size “flakes” of sodden snow were dumping out of the sky. It was clear enough to see for driving without any real difficulty, and the snow was melting the moment it hit the ground, but wow. I called up the guy we were meeting at eight in a McDonald’s parking lot before proceeding to the range, since I knew he didn’t have my number yet to cancel if that’s what he wanted to do, to ask if he still planned to go shooting.

He told me that the IPSC competition that was scheduled for today on a different range down there had been canceled, but he was still planning on going. In fact, he was already in the McDonald’s parking lot. The SigO decided that if I was hardcore enough to want to go shooting in what amounted to fluffy sleet, she’d go, so I said “We’re just about to leave to meet you there.” We jacketed up (a bit more warmly than we’d originally planned) and headed out, getting to the parking lot at McDonald’s at eight, pretty much down to the second. We went shooting.

The weather was clear in that area, luckily. The wind, however, was bitter. Counting wind chill, the weather was definitely somewhere notably below freezing. That really does a number on pistol accuracy at 25 yards, and firing a .40 in that temperature with no glove on my trigger hand hurt, dammit. Still, I at least got more shots in the paper than off it. It’s not a target I took home to admire later, though. It went in the trash. My advice: don’t go shooting in wind chill below freezing. Just don’t.

At some point after getting home, Ogre sent me a link to the Richard Stallman Debate entry at the Yale Political Union weblog. For the most part, it was pretty much what I would have expected from a bunch of politically ignorant yahoos in a prestigious Ivy league American university confronted with the very left-leaning software licensing politics of the founder of the Free Software Foundation.

Amidst hisses and applause, political activist Richard Stallman–standing barefoot behind a podium, sporting a wild beard and playing with his long, shaggy hair–discussed what he terms the “conspiracy” of companies against the consumer Wednesday night.

That sounds like a ridiculous thing to say, but if you examine the words for denotative meaning (and ignore the unnecessary connotations), Stallman’s actually exactly right about that. Recording industry, motion picture industry, and software industry corporations are in fact colluding (to varying degrees of organizational solidarity, but certainly with fully conscious intent) to bend the law to their purposes, which involve inducing the buying public to purchase entertainment and software media under the most onerous and coercive circumstances they can contrive. They’re not looking for customers — they’re looking for captive consumers. They’re trying to erode the doctrine of fair use away to nothing, strengthening the corporate benefits of copyright law both on the books and in courtroom precedent, increasingly applying post-purchase notification tactics in lieu of explicitly agreed contractual terms, playing entrapment games on the Internet, suing the most unlikely of (often innocent) victims (twelve year old girls, mothers of two, elderly grandmothers, and even the dead) to create a pervasive climate of fear amongst its customers, managed to equate copyright infringement with theft in the popular perception despite the fact they are two distinct and very different violations, and — as the cherry on top — insulting and even damaging law-abiding customers by delivering the contents of distribution media with DRM included. That sounds like a conspiracy against the consumer to me.

The part where it all falls apart is about the same place it always all falls apart, of course:

The Union heard rms rage against DRM–see the minutes for the blow-by-blow–and went on to agree with him, to the surprise of many, passing the resolution “Resolved: Digital Restrictions Management should be Illegal.”

Poppycock. DRM shouldn’t be illegal. It’s insulting, technically pointless except as a form of spiteful vengeance (it certainly won’t save anyone delivering DRM any money or help them make more, especially since it doesn’t even begin to slow down “piracy”), and potentially harmful, but should not in and of itself be illegal. On the other hand, neither should circumventing DRM be illegal, unless there is a contractual agreement between seller and recipient, explicitly extended and accepted, existing prior to delivery of the covered content, provided with full disclosure of the presence and nature of the DRM measures in place and prohibiting circumvention efforts. Of course, in that case, you might as well just try to contractually bind people in that manner to pretend the legally inviolable DRM measures exist, rather than actually include them with the media.

Anyway, my point is that of all the evils perpetrated by organizations like Apple, the RIAA, the MPAA, and the MPA (among many others), DRM is not the one that should be made illegal. Stupidity should be painful, to be sure, but there’s no ethical reason to enforce that painfulness by law. Just let market forces (the economic equivalent of evolutionary pressures) administer the punishment.

On the other hand, the xkcd ninjas were cool:

But before he could even take the stage, Mr. Stallman’s way was blocked by a squad of ninjas (Picture 1, Picture 2) reenacting an XKCD webcomic.

I don’t think I’ve ever seen ninjas outside of anime and comic books with cleavage before this.

Older Posts »

All original content Copyright Chad Perrin: Distributed under the terms of the Open Works License