random($foo)

Archive for the ‘Ramble’ Category

Late Night Update

Tuesday, December 22nd, 2009

This past year hasn’t been quite the return to form I’d hoped to have for my blogging. Still, there’s nothing like a near-data loss experience (well, I had good backups, but a drive on my server had gotten royally screwed – I have some Evernote scratchings, but I’ll spare people the details of fighting apt-get/dpkg when your libc6 version breaks perl and then eventually, your entire system) to get one a bit nostalgic, and kicking the tires again. Being laid up in bed with a nasty cold all weekend and staring at a mile-long TODO list probably doesn’t hurt either.

In any case, after I get some stuff done before Christmas, I’ll probably be spending some of the last days of the decade thinking doing some reflection (also, while I first started migrating .plan updates to the web in ’97, and the direct predecessor to my current blog in ’99, my 10-year blogging on rf.net is actually coming up in a few months

(Amazingly, it wasn’t until earlier this year when my old USC links (and email account!) finally got broken. 10 years ain’t a bad run.)

Lessons from Android: Unintended Consequences (or How to Kneecap Your Developer Community)

Friday, September 25th, 2009

An interesting clusterfuck has been brewing within part of the Android Dev Community – how serious of a long-term effect and what ultimate spillover it will have remains to be seen, but I thought it’d be worth gathering some notes about this as it develops. It started yesterday as something, that on the surface, only effected an important, but miniscule percentage of Android users, but that over the course of a day, has blown up into something may actually have potentially long-term consequences on the Android platform as the open mobile platform of choice.

Yesterday, Cyanogen, an Android community developer who maintains the most popular (and arguably best) alternate Android firmware, CyanogenMod, mentioned receiving a cease and desist from Google Legal.
Alternate firmwares (or custom ROMs) are along the lines of the custom WinMo firmwares that enthusiasts have been putting together for years (and in fact, there is at least some community crossover, including some shared forums). I only recently discovered CyanogenMod after complaining to the one Android superfan I know about how slow the Android phone I had was, and it was to me a night and day improvement over the stock firmware – performance went from unusably laggy to downright zippy.

Now, while Google is obviously within their legal rights (the C&D was specifically about redistribution of their closed source components), honestly, I’m rather baffled by this. It just doesn’t make any sense from a practical perspective – these apps are distributed with all the phones that the Cyanogen firmwares can be installed on, and are mostly used by a small set of the platform’s most dedicated enthusiasts (low tens of thousands at most, less than 1% of the Android userbase) – and of course, by a select few hobbyist developers putting in an inordinate amount of time in maintaining the firmwares and supporting those users. Not only is there no upside in attacking this community, but I can’t picture any scenario where there would be a net-positive outcome for Google.

As you can imagine, once word spread about the C&D, a community reaction was inevitable. A petition app was quickly put on the Marketplace (not the worst idea, honestly), and there were a few mentions in the more general tech news, although I haven’t noticed a big splash (say on Techmeme)… yet. That may change soon, I believe, as the fallout is now much bigger than inconveniencing a few “modders.”

Earlier today, Dan Morrill posted an official position statement on the issue. His statement about redistribution of closed source components seemed straightforward enough, but the implications are still unfolding. It turns out that by explicitly outlining the legal boundaries for closed-source components, we learned that not only core parts of the Android experience (like the Google Mobile services and Marketplace app), but also parts of the SDK and other base components are also protected. This news doesn’t just kill custom ROMs, but potentially makes Android as an open source project not viable at all. From Cyanogen’s Twitter stream:

@crazywizdom it’s pretty much like a bare bones linux install without the google bits. no contact sync or anything like that. #

From what they explained to me, you are not even allowed to copy the proprietary applications from your device. #

@gacktoh but you can’t distribute the market app. And it relies on the Google Mobile services anyway. #

I’m trying to get clarification now on what can actually be included. There are things in the SDK that aren’t in AOSP. Very confusing. #

Oh yeah, one last tweet before I violate the don’t-tweet-while-drunk rule. Nandroid is probably illegal. Awesome huh. #

All this woe (that’s counterproductive towards Google’s interest even if weren’t a PR, and now full on developer community nightmare – the custom firmware releases brought steady streams of improvements to tide over the true believers to what has been thus far, a somewhat lacking software product), probably set in motion because some PM got wind of the v1.6 Marketplace app being on the phone and got in a snit, setting the legal wheels in motion. And poof, over the course of a day, a cascade of events leading… who knows where.

Which is not to say that this can’t be fixed. The Google folks (even the legal teams) are smarter and more agile than most – if this is a priority, there are many ways to patch things up, from offering some sort of non-commercial redistribution terms, or having the Android team announce that they’re working with the community to make sure that they’re making it a priority to make sure that custom firmwares can be installed w/o touching the proprietary APKs, or that the AOSP is useful as an end-user installation (both of which jbqueru at least appears to already be moving on).

As it is though, it appears that Google has just shat on it’s biggest enthusiasts, and has given a good cause for those who are supporting Android as an “open” alternative to actively consider how far that openness extends (and realize how ostensibly “open source” Android really is). And of course, it’s a shame that there won’t be any more CyanogenMod builds. Still, this has been pretty fascinating to watch unfold, and should be of interest to anyone managing developer communities or trying to create an “open” platform…

(If you’re interested in following the conversations moving forward directly, the Twitter streams of cyanogen and Android developer jbqueru seem worth following.)

UPDATE: To some degree, this will probably blow over, since over the weekend Cyanogen announced he will continue w/ his work (after developing a new backup procedure to allow backup and re-installation of Google apps and with the inclusion of an alternate marketplace). Still, these are the types of incidents that chip away at social capital and reputation (until suddenly one day, the public no longer gives you the benefit of the doubt and any action taken gets looked upon in the worst possible light) – not to mention the amount of ultimately, pointless (or at least, repeated) man-hours that will be spent engineering a technical workaround to a policy problem.

Random Thoughts on Twitter

Thursday, April 23rd, 2009

With the Oprah thing and the rather bizarre Maureen Dowd interview (ripe for parody), I thought I might as well throw my two cents in.

Actually, this article was actually the one that actually convinced me to write something, specifically this quote:

I used to think Twitter would never catch on in the mainstream because it’s somewhat stupid. Now I realize I was exactly wrong. Twitter will catch on in the mainstream because it’s somewhat stupid. It’s blogging dumbed down for the masses, and if there’s one surefire way to build something popular, it’s to take something else that is already popular and simplify.

To clarify, I think this is fundamentally wrong and completely misses the point. (As an aside, similar things were said about blogging when it started taking off. These comments were also fundamentally wrong in the same way.)

Now, for some context, even though I was a relatively early adopter (my first tweet – I believe it was still called twttr then with a snot-themed logo and a focus on SMS), that’s not to say my own understanding and thinking hasn’t evolved along with the service (and its audience)…

The first time Twitter really picked up on my radar was while I was in London, as it had gotten a fair amount of traction as a cheaper way to text. Along those lines, it took off, again as a “group chat” style tool the next year at SXSW as a way for friends to coordinate in a lighter-weight and less annoying way than Dodgeball. At this time, it was still focused around SMS delivery, although there were some interesting clients starting to pop up. Also around this time (post-SXSW) that the my focus (and others) turned upon looking at Twitter through the lens of ambient awareness (Clive Thomspon did a great writeup writeup last year) and what we began to refer to in conversation as “statuscasting” (a term, which I might have made up, but I assume must have been on the tip of everyone’s tongue). Then there was a big explosion in clients, mashups, and the use of Twitter as a “command line” interface. And, of course, through all of this, Twitter continued to build up steam in the way that social tools do, as waves of adopters and their networks jumped on board. While there has always been the dialectic between semi-private conversation and broadcast/publishing that continues to make Twitter really interesting, the trend arguably has been toward the latter (especially with the “collection” of followers).

Now with some context that hopefully hints at some level of complexity to the Twitter phenomena, here’s where I return to directly smacking down that original quote and offering an alternative interpretation…

Twitter isn’t “retarded blogging” anymore than blogging was “retarded long-form writing.” What blogging uncovered was a “web-native” sort of communication – one focused on links-both hyperlinks and permalinks, temporality (dated posts, reverse chronological order) and decentralized conversation – at first manually since people simply read each other’s blogs (when I started, it all fit on a single list), then later with comments and formalized through trackbacks, pingbacks, and dedicated aggregation tools. It took a while, but I believe that Twitter has revealed a communication style that is native to the “web” today. What is this web? It’s one filled with activity streams – the “social web” and the “continuous partial web,” and one that exists beyond the browser and beyond the desktop – the mobile web and the “widget web.” The ingestion characteristics of these media are focused around intermittent (but constant) bursts of attention and the ability to scan both gestalt and to track details, and the output is about the “in-between times” of other activities. You don’t sit around for an hour writing a tweet. In fact, most people start with time that otherwise would have been spent idling (hence the large proportion of airport complaint messages).

That, I suppose is one aspect of the quote that is right – Twitter is does have more mass appeal because it can take root by fill a vacuum rather than being an activity that requires active displacement (at least to begin with!). The point is that it’s high immediate reward with low incremental commitment. And of course, the innocuousness of that small text box is part of Twitter’s genius…

Now, if there is a better (or different) model, my suspicion is that it’s in finer scoping. Sure geeks like to talk about interop and decentralization (and while that may come as it did for email, it may not (like for IM)), but I think it’s ultimately less interesting than figuring out how Twitter (or a similar type of service/activity) ends up bifurcating or integrating the aforementioned pull between public and private (groups? targeted/typed messages? ).

I think that’s where already see some interesting things like how location services have splintered off, and I think that’s what Facebook is attacking – in the same way that it created a semi-private place for photo and online-discussion activity, it’s trying to do so for tweets as well.

For those that recall, this harks back to discussions on semipermiability (ironically semipermanant, here’s the archive of Joyce’s paper on that), which never really took off (again, a niche that Facebook expanded into, I think).

Well, there’s not much of a conclusion here. This is entitled random thoughts after all. Maybe two last things while I’m here for those who remember the milieu and impetus of blogging… Firstly, my friendfeed, which is currently aggregating my activity streams across over a dozen services, and second, a graph of my blog output over the past few years:

See also:

On Application Development

Tuesday, January 27th, 2009

The other day, Jeff Atwood posted a piece entitled A Scripter at Heart that distinguished programming vs scripting. Simon Willison had a strong (negative) reaction to that, and proposed distinguishing by the term “dynamic languages”. Yesterday Matt Biddulph posted a bit about some of his experiences as a web developer working with Objective-C and the iPhone (some more discussion), and since I’ve been doing something similar this month, I thought I’d throw in my 2-cents (my experience so far has differed from Matt’s), since it also relates to how I veiw the divide of two very different types of programming (systems vs application?).

To preface, like Matt, my background is also primarily as a web developer, although not exclusively – I’ve written my share of Lingo, Java Applets, OpenGL, Shake scripting, Max/MSP and Processing and other stuff. These days I hang my “expertise” hat on web architecture and systems, but I’ve done a fair amount of just about everything on the web side of things including some lower level things like working on Apache modules.

This isn’t to brag (you’ll note no accomplishments of merit mentioned above :) , but simply to give some context of where I’m coming from. Learning Cocoa has been interesting. Of course, first and foremost, there’s the unique feeling of being a newbie again – that awful confusion, but also the excitement and then that somewhat retroactively forgetful feeling of incomprehension at not understanding how something works…

This learning phase may have maybe been more painful that it could or should have been. “Learning Cocoa” encompasses, not just a language (Objective-C) tied intimately to multiple very large sets of libraries (collectively Cocoa, but also CoreFoundation, AppKit, and in my case Quartz, Core Image and CoreAnimation as well as an inscrutable third party API), but also XCode and Interface Builder, each with a myriad number of settings, plists, etc.

While I think that a further discussion of the total lack of context and the bits and pieces of documentation/tutorials that did help me get my bearings may be the topic of another post, I did want to mention that the Apple Developer Documentation did not help me as I would have hoped in terms of orientating myself.

Some more observations:

  • It’s sort amazing how much more work seems to go into accomplishing very little, and how your ambitions scale along with that. I’ve spent more time working on looping some animations and making sure it doesn’t leak memory for example than say the Event SRP, or heck, the entire offline-task system on MyBO. Maybe it’s just my experience so far (biased say with spending a solid week fighting a certain third party SDK while learning the fundamentals), but I can see now why desktop apps haven’t seem to evolved as quickly as web services have. There’s just a lot of slog involved.
  • Note: PyObjc doesn’t make things easier – it’s just … hideous
  • Although… it would avoid Objective-C 2.0′s ridiculous memory handling – there’s garbage collection on the RunLoop, but only in some cases (for explicitly init’d, alloc’d and retain’d objects) but the AutoRelease doesn’t happen in threads, which by the way NSTimer launches, so make some subpools, but be sure not to over-CFRelease lest you cause an ecxeption (and crash) down the line, but good luck w/ MallocDebug if you missed anything and need to track it down… Don’t I have better things to do with my brain cells?
  • Casting through contexts is just out of control. NSImage, CGImage, and CIImage? Really?
  • Get used to writing at least 10 LoC to do what seemingly should be a single easy action (or declaring something in at least two if not more files and sections). Coming from scripting languages, the amount of boiler plate is mind boggling
  • Also, as someone used to CPAN, PEAR, and PyPI, it’s also been interesting discovering how spoiled by the ease of third party libraries and how much less common and more effort it takes. Maybe I just haven’t gotten quite that far yet…
As a web developer, I’ve often complained about the crudity and lack of development and debugging tools, but having dipped my toe on the flip, I guess it’s tough all around. Application development seems to be dense, convoluted and, well, sometimes just plain masochistic.
It’s also interesting that for as many (and there are many) calls there are in the standard Frameworks, how equivalently difficult it seems to be to do anything that you *want* to do (this will be another near-future post where I talk at length about the current state of web “frameworks”).
But, who knows, maybe in a few months I’ll at this post and shake my head and wonder how I could ever be so confused.

A Few Random Observations on Events

Wednesday, January 14th, 2009

As one might expect, I have a few thoughts now and again about “events,” even if I have continued my life as a shut-in so far this year. That being said, some days are more event-filled than others (today for example there’s a dinner, drinks w/ an out of town friend, Larry Lessig’s last SF book reading, and a show I just found out about – all, unfortunately, happening at the same time tonight…).

In any case, it was the last event that I want to write about a bit since it was a bit of a serendipitous discovery, and is a good example at some of the gaps that still exist with event tools.

A couple days ago, I saw a pretty neat video featuring a new Electro Harmonix effects box. This demo was definitely a cut above the average music gear demo (this one is even better). Browsing around today, it turned out that Mark blogged about this video yesterday on Boing Boing, and that an EHX employee ended up posting some more info about the performers, including a link to their YouTube accounts. Their current video is entitled Show on Wednesday! and 10 seconds in, it turns out that it’s in San Francisco (the YouTube profile doesn’t have anything about the location). A quick check on the posting date (yesterday) confirmed that the show is in fact happening tonight.

The reason for this lengthy description of how I discovered this event is because it’s really quite a long (and fragile) chain of serendipitous events (particularly in clicking into the comment thread (which definitely wouldn’t have happened if I had caught this post later in my feed instead of randomly browsing on the site), and then choosing the right YouTube account (of three linked), and then clicking play on their new video to discover that they were local).

Now, of course, as any band of any sort would, they have a MySpace page. Which has a big graphic highlighting their show – and they have their show entered (and a MySpace blog post), so if someone happened directly on there, I guess they could find out about it.

At this point, I had enough information to enter it onto the old red and yellow, where I could continue to add to my copious notes on entry improvements (perhaps the topic of some future post).

Red Devil Lounge Calendar DetailNow, of course, since I’m an events geek, I decided to continue along this trail and the next stop was to the Red Devil Lounge’s site and more specifically, their calendar. It, like most other venue sites, is about par for the course, appearing to be hand generated in Dreamweaver. Interestingly, it does have an RSS feed, generated by a commercial desktop app no less (FeedForAll). The interesting (and somewhat amazing) thing about venue sites is that across the board, they haven’t really changed much in the past decade…

Now one interesting thing about the event is that I got the official title wrong (I didn’t change it on the Upcoming event – one of the things we (and no-one else) ever tackled was multiple representations/ownership of the same event). But, rather than go off on tangents about the minutiae of event modeling (there are a bunch of more interesting coinciding process issues with editing even of canonical entries as well), I did want to point out something that caught my eye.

Pirate Cat Radio‘s official link for the “Baghdad By The Bay Showcase” is actually an Upcoming RSS syndication link of the guy who runs the Baghdad By The Bay show, RICK!. Now, it’s pretty cool that Rick has a somewhat active account that has his radio show schedule (sorry recurring events never got better), but surprisingly, the actual physical show wasn’t listed (score one for Upcoming’s entry-dupe checking).

Now, since I don’t do this for a living anymore (and haven’t for a while now, so I’m out of the loop), so this isn’t really any sort of rigorous analysis, and there are some guys attacking the music side of things much more vigorously (for example, it looks like Rick added the concert to Sonic Living last month, and there’s a heckuva lot of Tour/Ticket related activity), so that area, while still incomplete is actually getting a lot more attention than others.

But I guess one of the things that struck me was how there’s lots of information out there, but it’s not particularly well connected. There are some pretty huge gaping holes and the “serendipity” feels more haphazard than gratifying, and well, it’s all just a lot of work.

Hmm, I’ll just end here. I think I started off wanting to talk more about interactions of calendaring/semi-private/public event planning/interactions and proactive discovery, but this is getting a bit long for a ramble, so maybe next time when the spirit moves me (i.e. when I’m avoiding real work).