Category Archives: Collaboration, Content, Community

The Associated Press Discovers Tagging

The Associated Press is floating the idea of creating a tag taxonomy that would provide metadata about their news stories to automated crawlers.

Setting aside the fact that this would appear to be an attempt at creating their own niche set of copyright regulations, I’d be surprised if the AP will even be able to pull this off, since they can’t even be bothered to include bylines on most of the stories they syndicate to their member organizations through their traditional distribution channels.

Matt Mullenweg: “WordPress Themes are GPL, too”

Link: WordPress › Blog » Themes are GPL, too

One sentence summary: PHP in WordPress themes must be GPL, artwork and CSS may be but are not required.

I don’t see this doing much to calm the shitstorm over commercial WordPress themes (missives from attorneys seldom do); it definitely draws a line in the sand and clarifies something that had been a subject of debate among the WordPress developer community. At the same time, it would be nice if the WordPress business did more to support commercial plugin and theme developers (whether the code is GPL or not shouldn’t matter) rather than just providing the occasional blog link or issuing/refuting fatwas.

Testimony to the New York City Council on Intro 991, Proposed Legislation for Open Data Standards

Link: Testimony to the New York City Council on Intro 991, Proposed Legislation for Open Data Standards

Beyond a permissive regime around the availability of data, the City will also need to allow companies to make a market, and to charge, for the value-added services they build on top of the public platform. Certainly, companies should not be charging for the mere redistribution of the data, but they should be permitted — indeed encouraged — to build user-friendly front-ends, interesting “mashups,” innovative analyses, and inventive integrations of the platform’s data.

My buddy Andrew rocks the NYC city council on open data. He brings up a couple of red herrings (like SOAP and the notion of open data == open source which nobody outside of Planet Microsoft is actually confused about) but all in all, this is terrific work. I would love for somebody to lay the same kind of smackdown on the SFMTA board.

Teaching This Fall


Big news! The University of Victoria‘s program in Business, Management and Technology has asked me to teach a class. This will commence in September of this year and will be repeated in January 2010 (assuming I don’t totally cock it up). The course I’ll be teaching is Web Design and Management I, a very basic and not-very-technical course covering how the web works.

This is an distance learning course taught through the university’s Continuing Studies division, so I’ll be doing the teaching from my office in San Francisco (and our other projects and the consultancy won’t be affected).

Google vs. the “Tyranny of Data”

Link: Should Design Be Held Back by a Tyranny of Data?

The Times’ “Bits” blog today chased the two-month-old story of Doug Bowman, who left Google for Twitter in March. Bowman’s story wasn’t particularly remarkable aside from the fact that he has a great reputation and was expected to have quite an impact when he joined the big G in 2006, and the fact that he was fairly vocal after he left Google that, to his surprise, he wasn’t able to have as much of an impact as he would have liked.

I don’t have any direct knowledge of Bowman’s situation, but it shouldn’t be difficult for anyone who’s worked for a technology company like Google (and I’ve worked for two, and turned down offers from two more) to see the big-tech company dynamics at work here. It’s quite possible that the problem started the day the Google recruiter called him, promising him he’d be able to bring a new discipline to Google, spin up his own team, and “have a huge impact” on millions of users. I hate to be cynical about this, but it’s vanishingly unlikely that anyone brought in to work at a company with thousands of employees and years of established history is going to have any kind of material impact on that company unless they are brought in as a C-level executive (and even then, just maybe). And it may not be the case that “having an impact” is the thing that someone should be shooting for in the first place. To me, it seems to reduce one’s career to a series of video game achievements and sets aside the notion of teamwork and team success. I generally question the credibility of any recruiter who uses it to pitch their company to me as a prospective place to work. If you’re a technologist, you should, too.

I didn’t want to let this go without a few comments on the way the writer, Miguel Helf, approached this story. When you’re writing about something that’s two months old, the expectation in the newsroom is that you’ll add something new to the story. If there isn’t any actual new information, an inferential leap of some kind will usually do. So in this case, Helf makes “data” the villain, pitted against the hardworking, sensitive artist who really just wants to make the world a better place. This is, of course, a narrative framework used by all kinds of writers to make their stories more interesting, but for this story it really clouds the truth and does a disservice to both Google and Bowman (both of whom, I’m sure, felt like they were doing the right thing). Is there a place for a talented visual designer within a large company? Certainly. Is Google the kind of place for a talented visual designer to do his best work? Maybe, maybe not, although I’m guessing a lot hinges on your professional and artistic aspirations (particularly if those aspirations are in line with Google’s minimalist aesthetic). Should the managers of a multi-billion dollar business rely upon data analysis to determine whether the changes their designers propose are sensible? Well, duh. Bowman himself, in his farewell-to-Google blog post, even says “I can’t fault Google for this reliance on data”. So there’s an unfortunate, imagined tension between two schools of thought going on here that is mostly made up by the Times writer, Helf.

Helf’s inferential leap that he uses to keep the story viable is the notion “crowdsourcing,” a buzzword which I’m sure he has devoted a brain cell to, but isn’t really applicable here. Google doesn’t crowdsource much, if anything (since it doesn’t have to — it can generally buy or crunch whatever data it might need). The story as Helf tells it doesn’t actually have anything to do with crowdsourcing. What Bowman objects to is relentless bucket-testing (the process through which a big web property introduces a change on a trial basis, measures the impact, and then implements the change more broadly or rolls back the change based on the responses of consumers). But I think that even focusing on bucket-testing misses the point. In a big technology organization there will always be someone down the hall who objects to what you’re doing, and you’ll always spend a significant amount of time driving consensus. In some cases this is a good thing, because so much of what we do hasn’t been done before by anyone, and we want to make sure we aren’t making expensive mistakes. But there’s obviously a point where it can paralyze an organization, and it’s certainly not the case that that environment brings out the genius in everyone. Those people generally go to work for startups, as Bowman did.

Let’s Talk

Just realized I hadn’t replaced the “Book Now” widget after moving this blog to new (virtual) hardware over the past week. It’s back up now, so if you want to grab some time to talk about work-related stuff, click the link and let’s set up some time.

The Book Now widget is a neat idea and I’m hoping more people use it — it’s a handy alternative to a big consulting engagement in those situations where all you really want to do is talk to me on the phone for a half hour or whatever.

Facebook To Let Others Play In Its Stream

Link: Facebook To Let Others Play In Its Stream

If true, this could be huge. It looks like the premise is that third-party developers will be able to get access to Facebook data (including photos) through new APIs.

This could make Facebook much less of a walled garden and give them a more compelling competitive response to services like Twitter.

Thoughts on Oracle/Sun

Interesting quote about the Oracle/Sun acquisition from

“Acquisitions have strengthened Sun’s position in the enterprise storage and business integration software markets, but have not positively affected the company’s business or financial profile.”

To put that another way: Sun has been attempting to achieve incremental successes at a game that nobody else really wants to play anymore. (I really liked another quote from this piece: Sun blamed “inconsistent profitability” for their downfall. I love “inconsistent profitability” as a euphemism for “losing money”; I hope I never have to use it with a straight face, but I’m prepared to if necessary.)

Some more thoughts on this:

1) Everybody’s touting the fact that “Oracle gets MySQL” in this deal. Sure, OK, there is the MySQL technology and the MySQL commercial licensing and support business. MySQL is generating revenue, but not the kind of revenue that’s interesting to a company the size of Oracle. My prediction is that Oracle’s sales force will do something dumb like treat MySQL as an entry-level product in hopes of upselling customers to the real (expensive) Oracle product, which won’t work because the kinds of organizations that want MySQL aren’t the kinds of organizations that want Oracle.

2) Ultimately the open source thing inoculates the MySQL product from a lot of potential corporate evil, which is one of the points of the open-source exercise in the first place. Open source means that if things get too onerous, the community can more or less take its ball and go home if it wants. And this is already happening; MySQL is already being forked (by independent companies like Percona as well as internally within Sun via the Drizzle project). Percona is usable in production today, but Drizzle is not (because that project got started more recently and is aiming at a more ambitious gutting and rearchitecture of the MySQL code base rather than incremental patches and improvements). Still, it is fair to say that if you are looking for the most advanced/optimized MySQL distribution today, you won’t get it from Sun, and I wouldn’t expect that to change under the Oracle regime.

3) A bigger meta-problem: Oracle has always had a serious problem with developer community relations and developer usability of their products. If they were to invest in one area to make this acquisition go more smoothly, it would be this — there are enormous bang-for-the-buck opportunities for them here. (I say this because of Oracle’s historical track record with managing its developer platforms as well as the visceral fear and outright revulsion I’m hearing today from developers after we got wind of this news.) It might have been possible for Oracle to mine the MySQL community for help here if this deal had materialized a year ago, but it seems like a lot of the principal MySQL community folks have either moved on from Sun or gone over to projects like Drizzle.

4) I do think the acquisition makes sense on some levels. There may be a good synergy with Oracle and Java, although Java was never an interesting business from a dollars and cents perspective and I don’t expect Oracle’s stewardship of the language to change things that much.

5) Many more junior- and mid-level salespeople in Silicon Valley are going to be without jobs in six months.

6) No clue what Oracle’s going to do with Sun’s hardware business, but it doesn’t really seem synergistic (and it screws up some of Oracle’s flagship partnerships with companies like Dell and HP). My guess is that they’ll shift it into some kind of maintenance mode.

7) Meanwhile, I am wondering whether HP shouldn’t pursue its own MySQL acquisition. I don’t know if there’s a “there there” in a potential HP acquisition of (for example) Percona, but if Oracle is going to compete with HP on hardware, HP should be prepared to compete with Oracle on databases and applications.

8) It’s interesting that an acquisition of this magnitude can take place without so much of a mention for what it might mean for Microsoft. I think that this can be looked at as a barometer of Microsoft’s relevance for enterprise computing.

Update: In his post on this, Matt says “I would not be surprised if this moment is for Drizzle what Movable Type changing their licensing was for WordPress, even though in this case they’re both Open Source.”

About CodeIgniter

I think I’ve mentioned here before that I picked up PHP at the beginning of last year. Almost immediately I started doing projects for clients with it. Aside from the very infrequent bug fix to and my VSLive demos, I hardly did any C# coding last year.

As I was coming up to speed on PHP, there was something about it that I (and many others) found maddening. It drove me crazy that three different PHP developers could come up with the same solution to the same problem in three different ways, and the fact that there are (for example) at least three database libraries to use PHP with MySQL wasted a ton of time. I’ve become a big fan of database abstraction layers over the past few years; in particular, Active Record and model-view-controller (MVC) appealed to me, although I was dispassionate about having to learn a whole new language like Ruby to get it, particularly after having just learned PHP. So in short, at the end of last year I found myself shopping for some kind of PHP framework.

I researched PHP frameworks a bunch on a project for an entertainment industry client back in December, creating prototype versions of their existing web site in both CakePHP and CodeIgniter. CodeIgniter was far and away the winner of the bake-off (particularly after it received the endorsement of my former Yahoo! colleague Rasmus Lerdorf).

CodeIgniter is nice because it makes the patterns for putting together applications obvious, but unlike other MVC frameworks it’s not doctrinaire. You can name stuff (like database tables and controller classes) whatever you like; it even lets you eschew the use of models completely if you want. I like this because it reduces complexity at the cost of the “separation of concerns” that MVC aficionados tout; I suspect that purists will be offended by this but I find it to be liberating.

CodeIgniter has a lot of other higher-level niceties — dozens of libraries and helper classes, including such as a session management library, parsers for various kinds of data, even an abstraction layer on top of image-handling libraries. There’s provisions for extensibility, but there’s no crazy plug-in API or anything — writing your own libraries is as easy as writing a class and writing your own helper is as easy as writing a function.

Getting stuff out of the database using CodeIgniter’s modified active record implementation is pretty simple too. After loading CodeIgniter’s database class library, you can write queries like this:

$query = $this->db->get_where('people', array('id' => 449587));

You can also add where clauses, sort conditions and so forth:

$this->db->select('first_name', 'last_name');
$this->db->where('id', 449587);
$this->db->order_by('last_name, first_name');
$query = $this->db->get();

It’s possible to chain all these conditions together on a single line, but I prefer putting them on separate lines for readability.

There are tons of other ways to get data using CodeIgniter’s ActiveRecord implementation, but you also have full SQL queries if you need them:

$query = $this->db->query('SELECT id, first_name, last_name FROM people');

Ultimately, get_where() is the naive case, and certainly the most commonly-used in my code anyway — I can’t think of a other framework in any other language that enables you to be this productive with data with a single line of code.

So I’m basically using CodeIgniter every day now, and the plan is to use CodeIgniter for all our PHP projects in the future, including Facebook applications. We’ve already done one Facebook app using CodeIgniter and that project went pretty well. We also used CodeIgniter for the Tinypug customer innovation platform that we just released yesterday as an open-source project.

Why Well-Run Developer Programs Matter

Outstanding post over at TechCrunch with a great roundup of comments on the state of the mobile developer ecosystem.

The original premise was that mobile developers were blowing it by focusing exclusively on the iPhone (which seems plausible) and not on developing for Nokia (which seems far-fetched, at least for North American developers).

It’s amazing how many of these comments (particularly the negative ones pertaining to Nokia and Palm) correlate directly to elements of the platform manifesto I wrote after leaving Yahoo in 2006. Bad support and indifferent community management, charging usurious fees for access to the platform, favoring big established companies (also known as “picking winners”), providing half-baked tools and libraries, and an inconsistent technology story on the part of incumbent mobile platform providers created a cavernous opening for Apple and they are exploiting it masterfully. And Apple succeeded in establishing iPhone as a developer platform even though 1) the iPhone still doesn’t have a whole bunch of consumer features that were considered to be must-haves (like a physical keyboard, removable storage, the ability to shoot video and send/receive MMS messages, etc.) and 2) the developer learning curve for iPhone is psychotic if you’re not already building OS X software using Objective-C (the cul-de-sac of modern programming languages).

When I ran developer programs at eBay and Yahoo (and elsewhere) I got a reputation for being a pain in the ass because I wouldn’t shut up about getting the details right. I’m like this because when I approach platform products and developer outreach, I focus on the one resource developers have that they can’t make more of (which is time). I imagine that there are a million developers using and relying upon what I’m about to release, and I think hard about what it means when a large percentage of those developers can’t figure out what I’m trying to provide for them for whatever reason. I mentally multiply the amount of time that might be lost by the number of developers in my audience, then subtracted an estimate of what the issue would cost to fix. Ninety-nine percent of the time, I’d do whatever it took to polish down the rough edges.