Posts in category: 'Web/Tech'

How Not To Steal User Preferences

Dear Adobe,

Software is only allowed to display a dialog box like this once:

bonehead adobe acrobat dialog

If you insist on displaying this dialog every single time your software launches, your software is officially “stupid”. Eventually I will want to stop using it. Consider placing a “Don’t show this again” check box at the bottom there, please.

Love,

Jeffrey

Update: Hey, it looks like a recent patch to Acrobat Pro fixed this. Hooray!

DialIdol Predicts Call-In Vote Winners

Link: DialIdol.com - Measuring the busy signal

DialIdol is a piece of software you can install on your computer that uses a modem to auto-dial call-in numbers for contest shows like American Idol. The interesting twist is that the software records whether it receives a busy signal each time it calls in to vote. The software then aggregates this information among all its users as a way to predict who will win. The makers of the software claim to have a 97% success rate in predicting the winner of American Idol each week.

Capitalism > Piracy

Link: Frustrating the Pirates

Capitalism, properly applied, will beat the rebels every time.

Google App Engine: Fish or Foul?

We’ve been paying attention to the launch of Google App Engine over the past day and a half and we will continue to keep an eye on it on behalf of our consulting clients. As is often the case with paradigm-challenging products, people often try to characterize the new thing in terms of what they already know. But we don’t believe that Google App Engine is directly competitive with Amazon EC2 today, although it could be in the future. We also don’t believe, as a few people have asserted, that it’s competitive with social networks like Facebook either. Here’s why.

Amazon EC2 is one of the most open platform products in existence today. When you spin up an instance of an EC2 server, you get to make all the choices regarding operating system and software. You log in as root. You can write applications on an EC2 instance using any language and tools you want. You pay only for what you use.

Google App Engine, on the other hand, is a walled garden. In the words of Tim Bray, if you go the App Engine route, particularly if you choose to use Google authentication, you are essentially a sharecropper, working on Google’s farm. You write the application, but Google owns the infrastructure and, more importantly, they own your users.

Ah, you say, but it’s certainly true that closed platforms can be spectacularly successful, at least some of the time. Look at Facebook, for example, one of the most popular walled gardens in existence today. Facebook exerts a great deal of control over what applications running on its platform can do through frequently-changing terms of service and rules enforced in its technology stack. But the difference here is that Facebook asks you to trade off openness and control of your application in exchange for something valuable — its users’ attention. The deal you make with them goes something like this: give me access to your millions of users, and in exchange I’ll adhere to your terms of service and accept your proprietary application framework — I’ll even go so far as to learn the only programming language that you really support well (which in Facebook’s case is PHP).

Google App Engine is neither fish nor fowl. It requires developers to write to their framework without the commensurate benefit of access to a huge built-in audience of users.

Google is providing access to App Engine for free for now, although traffic and storage is limited and we haven’t seen information about commercial licensing, which is troublesome and probably a deal-killer for all but the most trivial applications. It’s true that in many cases “free” can trump “open” or “complete”, but in the case of Google App Engine we believe that “free” won’t make a huge difference. It may attract experimenters and people writing demonstration applications, but virtual hosting (through EC2 or fixed-price virtual hosting providers such as Slicehost) is so close to free today that the “free” part of Google App Engine should not make a difference to anyone who is looking to write a non-trivial application.

The design choices that Google made with this product are pornographically good news for Python developers, who now have their own dedicated application server and a way to build web applications using their language of choice. This may well put Python on the map (as the second language of choice alongside Java, PHP and C#) as one of the Languages That Matter. But it’s also important to remember that consumers don’t use Python (or any other programming language), they use applications. In this respect, Google App Engine is one of many Google products that seems to have been created with technologists, as opposed to consumers, in mind.

On the consulting side we’ve been getting a ton of inquiries from customers regarding strategies and tactics for virtualization on platforms like Amazon EC2, and we’re in the process of adding a formal software development practice dedicated to supporting Amazon’s EC2 and S3 products. That doesn’t mean that we wouldn’t support something like Google App Engine if a client asked us to and there was a good reason to, but for the reasons we’ve described here, we’d prefer to take a wait-and-see attitude towards this and carefully weigh the drawbacks and limitations before devoting serious time or development effort to the platform.

All that having been said, we still believe that Amazon has missed an opportunity by positioning EC2 as a developer product as opposed to a hosting product. If the Google App Engine product were to make a dent in EC2’s momentum, we’d recommend that Amazon provide better support for multi-server scalability scenarios. Amazon recently started moving in this direction with the release of new features intended to give administrators the ability to assign IP addresses and machine instances to specific data centers, but providing explicit support for an adaptive clustering package like Scalr would give EC2 a vital edge, particularly for professional applications.

Congratulations Amy

Congratulations to Amy Harmon for winning the Pulitzer prize for explanatory journalism for her amazing series on genetic testing.

We became acquainted with Amy when she did a story on a conference I host on The Well many years ago, back when she was still reporting for the LA Times. It’s terrific to see someone who’s as hard-working and smart as Amy get the recognition she deserves.

TechCrunch 50 vs. DEMO: Feh to Both of You

Link: You only get to lose your virginity once

However, I can’t imagine that I, as an entrepreneur, would choose to roll out my product at either conference. They’re both shitty deals for entrepreneurs. At TechCrunch50 there are 50 products. At DEMO there are 70. Since they’re happening the same week, at best I’m one of 120.

Dave Winer nails it. I’d take it a step further, though: I say, death to all dog-and-pony-show conferences that pointlessly pit startups against each other in a rabid scramble to appease “influencers”.

Missing the “Home” Button in Firefox 3

I just downloaded and installed Firefox 3 beta 5. The first thing I noticed was that they did away with the Home button (and when you run Firefox 3 and Firefox 2 on the same Mac, the home button goes away in Firefox 2 as well).

I’m sure this change was discussed and debated before it went in. I’m sure that somebody thought it was more logical to have your home page be “just another bookmark.” But this change is going to cause more confusion than it will resolve; I contend that it won’t help a single user. It certainly won’t save much useful real estate on the toolbar (there’s plenty of room for the home button if you nudge the URL box over a few pixels).

Having no home button will cause users like me more annoyance since we’ll have to re-add the home button back to the toolbar on every machine we use.

More importantly, though, this change will really just disintermediate Yahoo, since Yahoo gets a bunch of traffic from deals with telecoms and ISPs that set users’ home pages to Yahoo by default. If a user’s browser doesn’t have a home button at all, that user will be forced to navigate using search (which on Firefox is set to Google by default) instead of hitting the home button.

Update: The speedy and perceptive Mike Beltzner chimed in to say that this was a change that happened in earlier betas of Firefox 3 and has been reverted in beta 5, so it should no longer be an issue. If you’re like me and you installed an earlier beta, you can resurrect the home button using the toolbar customization menu.

Mono’s “Usability Disaster” and Platform Discovery Optimization

Seeing this post from Miguel about a major cock-up pertaining to the developer download experience in Mono made me think about the platform companies we’ve been advising.

Companies often trick themselves into thinking that every developer who discovers their stuff will automatically do whatever it takes to use their stuff. But developers actually make very calculated cost-benefit choices about what technologies they want to adopt — in a world in which time is at a premium, doing nothing is always an option. If developers feel jerked around or not fully supported, they’ll turn their attention elsewhere. Certainly there are some developers who will slog through anything to get to what they want. But ultimately developer adoption is a numbers game; in our experience a sizable percentage of developers who encounter a platform will abandon it without adopting if the developer discovery experience isn’t fairly solid.

We advise our clients to own their platform discovery process from the
first pageview to the time a developer performs a download, and to
test this flow frequently. We generally recommend against permitting any part of the developer discovery process to be owned by a third party. A good example of this is Sourceforge — what they provide in terms of hosting and presence does not make up for their horrible user experience and very unfortunate practice of showing advertisements for competing products at the very moment the developer is about to hit the download button for your product.

One of the consulting products we
provide for clients with existing platform products is a developer
discovery analysis. The idea here is to go through the process of
getting up to speed with a technology platform, and then provide
recommendations to the platform provider (our client) as to what they
can do to optimize the process of developer discovery. Often the
recommendations we make are things that the client knows should be
fixed, but often our recommendations are enough to motivate them to
actually fix the problems.

This is a fairly quick way to get very detailed feedback (with screen shots, written recommendations for remediation, etc.). For start-ups that aren’t quite to the point where they can afford a product manager, it’s a cheap way to get a quick dose of help in the area of platform product management and developer user experience optimization.

Speaking at VSLive SF

I’ll be speaking at VSLive San Francisco the first week of April. This time around I’ll be giving three talks:

  • Creating Facebook Applications Using .NET
  • Data-Driven ASP.NET Ajax (an updated version of the talk I gave in New York last year)
  • Creating iPhone Applications with ASP.NET

If you’re going to be in town for the conference and want to set aside some time to get together and chat (particularly if you’re interested in getting some consulting help) please leave a comment.

StubHub Scrapers

Link: Hannah Montana Tickets on Sale! Oops, They’re Gone

"[Hannah] Montana tickets, whose face value is $21 to $66, have been resold on StubHub, on average, for $258, the company says, and that is without taking into account StubHub’s 25 percent commission (10 percent paid by the buyer, 15 percent by the seller). None of the proceeds from the resale of tickets at inflated prices make their way back to Ms. Cyrus.

Some ticket brokers are so certain of their ability to get hold of desirable tickets that they confidently advertise tickets on these exchanges even before tickets go on sale to the public.

How do they do it? An intriguing explanation is that brokers use specialized software to make multiple online purchases of tickets, circumventing the four-ticket-per-customer limit that the rest of us must abide by."

This in many ways sounds like a replay of eBay’s early days as a platform five years ago, when the company was compelled to create a web service API with its own terms and conditions as a way to regulate rogue developers who were writing eBay applications by scraping HTML from the site. Now, StubHub (an eBay company) is running into the same thing; it can’t be a coincidence that StubHub doesn’t have its own web service API.

Static on the Dream Phone

Link: Static on the Dream Phone

"Verizon announced last month that it will open its network to ‘any application and any device’ by the end of next year.

But while Verizon’s pledge sounds promising, the language in which it is couched makes me wonder whether Verizon understands what a true open platform looks like. The announcement states that ‘the company will publish the technical standards the development community will need to design products to interface with the Verizon Wireless network,’ and that ‘devices will be tested and approved in a $20 million state-of-the-art testing lab.’ It’s not yet clear what standards developers will need to follow to write applications that work with both the device and the network, and who will control those standards.

This is not ‘open.’ It’s just a little less closed. A true open platform like the Internet doesn’t have certification of trusted devices or applications. Developers get to do anything they want, with the marketplace as their only judge and jury."

Tim O’Reilly in an op-ed in today’s New York Times makes the argument that if a developer has to ask permission to write an application on a given platform, that platform isn’t really open. This notion is one of the ten principles for platforms that I laid out in 2006 when I started Platform Associates.

As companies attempt to reap the benefits of open platforms, I’m seeing more and more situations where companies release fake open platforms — attempting to benefit from the momentum of platforms without performing the necessary activities to become an actual open platform. In Verizon’s case, one wonders what they think that "any device and any software" is supposed to mean.

Unfortunately for them, fake platform companies are also missing out on the benefits. When I’m engaging with a company that wants to provide a platform, I try to keep it positive and emphasize the benefits to openness, rather than focusing on the horrible credibility problems that happen when you say you’re open but really aren’t. For example, a lot of big companies hire teams of business development specialists to trawl for partnership opportunities. What if these opportunities simply came to you? Similarly, most companies (even very large ones) have difficulty performing all the engineering work necessary to keep every kind of customer happy. What if you gave customers the ability to do this work themselves? And so on, and so forth.

Platforms that use the term "open" without actually being open do so at their peril, but they’re also missing out on huge opportunities.

Pruning

I’m doing some heavy year-end pruning of my blog reading this week. Much of this is time-managment (both Approver and the consultancy have experienced big upticks in the past month and are taking more of my time). But the pruning is also informed by a desire to spend time on more quality stuff. So, blogs comprised mostly of links to other blogs without explanation or commentary are mostly going in the bit-bucket. Ditto for corporate blogs that don’t actually talk about the company’s products (one of my consulting clients is an offender here). And blogs that haven’t been updated in over a month are out the door, too. NetNewsWire has a neat feature that turns the name of the blog poop-brown if it hasn’t been updated in a while, which makes this kind of pruning easier.

Does “Open” Really Help Developers?

I’m doing some more research on the GPhone/Open Handset stuff today. For the second week in a row, Google is evangelizing a new, "open" platform, with the promise that openness will inherently be easier to develop applications on, create a better consumer experience, and eventually solve world hunger.

Specifically, the Open Handset folks seem to be asserting:

  1. Today’s mobile platforms aren’t open.
  2. It’s a big problem that mobile platforms aren’t open.
  3. Making a platform that’s more open will foster more and better applications for mobile.

Assertion #1 is just not true.

Assertion #2 is true, but only in the sense that not being able to see at night is a problem. Unlike a lot of closed vs. open technology conundrums, "mobile" isn’t a big monolithic platform controlled by one malevolent overlord, at least not at the application layer. They’re several platforms controlled by a gaggle of overlords, some of which are less malevolent than others.

Assertion #3 is completely false, at least based on what we’ve seen so far. It must be false because there already are mobile platforms (both Linux and Windows Mobile) that enable developers to create applications without the intervention of the carriers.

Just making something "open" does not contribute to developer productivity. In fact, openness can hinder developer productivity, since it forces developers to contend with a large number of use cases that aren’t relevant to them, and it enables the platform provider to get away with cop-outs like "you can change the source code to make it do whatever you want" and "we realize our documentation isn’t great, but the source is our canonical reference".

And Java (which the Open Handset platform will be based on) is certainly not the highest-productivity development environment out there today (and I know a lot of Java developers who will agree with me there).

I’m not saying "openness" is "bad". I’m just saying that Google is assigning attributes to the notion of openness that don’t make sense. One gets the impression that this project is being done by a certain type of open-source developer for a certain type of open-source developer.

Google Makes Its Entry Into the Wireless World

Link: Google Makes Its Entry Into the Wireless World

"John O’Rourke, general manager of Microsoft’s Windows Mobile business, said he was skeptical about the ease with which Google will be able to become a major force in the smartphone market. He pointed out that it had taken Microsoft more than half a decade to get to the stage where the company now does business with 160 mobile operators in 55 countries around the world. ‘They may be delivering one component that is free,’ he said. ‘You have to ask the question, what additional costs come with commercializing that? I can tell you that there are a bunch of phones based on Linux today, and I don’t think anyone would tell you it’s free.’"

At first glance this quote looks like some spin put out by the incumbent to defend their business, but at second glance it makes you say "yeah…we’ve had open phones for a while now. What just changed? Is it even material?"

Google’s campaign to perform competitive jujitsu using the malevolently humming light saber of openness is nice and all, but it’s a fact that I can write an application for my Windows Mobile phone today without having to pay anyone any money or ask anyone permission. (I don’t think the same is possible for my wife’s RAZR.)

Update: Looks like Om Malik shares my skepticism; he’s asked some even more incisive questions.

Wanted: Flickr Drupal Integration

The state of Flickr integration with the content management system Drupal seems a bit chaotic at the moment. It looks like there are a few Drupal/Flickr modules with minimal functionality, but none of them seem like they’re being actively maintained at the moment. It seems like the various authors are looking to combine their efforts and create One Flickr Drupal Module to Rule Them All, but until that happens, there’s no obvious good choice for adding Flickr to a Drupal site.

I want users of a Drupal site to be able to enter their Flickr IDs in their profiles, then to have the system display thumbnail galleries of only the photos that have a specific tag (or a set of tags) — no point in having my happy hour photos syndicated to my daughter’s school site. The "Flickrhood" module is supposed to do the profile integration and photo fetching, but it doesn’t filter by tags (and, at any rate, I wasn’t able to get the module to run on the Drupal installation I’m supporting).

Are there other Drupal modules I’m missing here, maybe one that uses a photo-hosting service other than Flickr or one that isn’t listed on drupal.org for some reason?

Google and Friends to Gang Up on Facebook

Link: Google and Friends to Gang Up on Facebook

"On Thursday, an alliance of companies led by Google plans to begin introducing a common set of standards to allow software developers to write programs for Google’s social network, Orkut, as well as others, including LinkedIn, hi5, Friendster and Ning, according to people briefed on the plans. Those people asked not to be named because they agreed to keep the alliance’s plans confidential."

We’ll see what this looks like when it emerges, but whaddya wanna bet that the "standard" they come up with walks and talks like Facebook’s API yet is every so slightly different (and incompatible) with Facebook’s API?

And how is LinkedIn supposed to factor in here, I wonder, with their famous opposition to the notion of an open platform?

I’m still willing to accept that this initiative is getting lost in the NY Times’ muddled inability to do a decent and technically accurate story on Silicon Valley technology, but it really sounds Google is trying hard to turn "openness" and "interoperability" into the new "embrace, extend, extinguish" here. Which, if successful, would be quite a feat.

Update: A second-day story on this quoted Joe Krause on behalf of Google. From this one could deduce that Google’s entry into the "open but not Facebook" cabal will be the relaunched JotSpot, whenever they get around to re-launching it.

Update: Marc Andressen has more about this on his blog. I wish he’d posted this yesterday instead of letting everybody get half of the story via TechCrunch. Marc’s post clears things up a bit but I’m still interested in seeing what the bits look like. It seems like this is more an attack on Facebook’s proprietary markup language than anything else. Memo to interoperable social network cabal: there is no such thing as a platform that does not use some kind of proprietary semantics to map out its feature set. You’ll find yourself doing this as well if you haven’t done it already.

Side note to web marketers, PR mavens and evangelists: if you want to ensure that there is an elevated level of confusion associated with your launch, one sure way to accomplish that is to provide an exclusive leak to TechCrunch prior to your public launch. I know it’s virtually impossible to get on TechCrunch unless you give them a scoop, but there’s a cost associated with making those guys your media leak of choice. To put it another way, no product launch has ever failed because the product didn’t brief TechCrunch about it a few days ahead of time.

Update: Michael Arrington’s headline on this today says "checkmate!" which is of course nonsense since the game isn’t even half over, OpenSocial hasn’t even produced anything yet and Facebook could of course join at any time if they wanted. His commenters mostly seem to agree.

Saul Hansell of the NY Times has some less hysterical thoughts on this; he points out that "LinkedIn has also said it may ask for a revenue share from those who
create applications for its network. And haggling over money, no doubt,
will slow down the deployment of many social applications." No kidding. This is my main concern about the path that LinkedIn is going down. Having to ask permission to build an app and then provide a revenue share isn’t a platform; it’s the definition of a walled garden. AOL was successful at this for a while in the 1990s because they were able to bring a mass audience when nobody else could, but these days, that dog won’t hunt, monsieur.

Songbird is for Developers

Online music aficionados may be familiar with Songbird, a promising music player that sports extensibility, skinnability and all-around open-source goodness. Built on the Firefox code base, the player is in development now, but it’s open to hackery by third-party developers — you can create extensions (just like Firefox extensions), user interface skins and more.

Songbird launched their developer site this morning. My consultancy, Platform Associates, participated in the launch, providing content strategy and content development, but the majority of the work was done by Songbird’s own terrific team. Great job, guys! This will really help developers discover the product and help to make it better.

Comcast Blocks Most Bittorrent Traffic

Link: AP Tests Comcast’s File - Sharing Filter

"In two out of three tries, the [bittorrent] transfer was blocked. In the third, the transfer started only after a 10-minute delay. When we tried to upload files that were in demand by a wider number of BitTorrent users, those connections were also blocked."

Here’s yet another reason why Comcast and the rest of the cable TV mini-monopolies will never get a dime of our money. The reporter tested Comcast’s bittorrent-blocker by trying to download a public domain file — the Bible — from computers in several locations. They discovered that Comcast is blocking bittorrent. While they’re not blocking it everywhere across their network, the block is implemented at the protocol level, which means that if you want to use a Comcast cable modem to share a video you shot or a song you wrote using bittorrent, you’re out of luck.

I wonder what happens when game developers and others start adopting bittorrent more broadly to distribute demos and patches? I’d also be interested to know the technical details of how bittorrent gets blocked — it seems like it would have to be something that bittorrent clients could defeat if they knew more about what’s going on.

I hope Comcast loses a bunch of customers over this.

Blackberries Create Phantom Vibrations That Are Systematically Driving People Insane

Link: Is That Your Phone or Your Imagination?

"In certain circles, the phantom vibrations are a point of pride. ‘Of course I get them,’ said Fred Wilson, a managing partner of Union Square Ventures, an early-stage venture capital firm based in New York. ‘I’ve been getting them for over 10 years since I started with the pager-style BlackBerry.’"

Database Queries with Windows Powershell

I haven’t done a serious learning project for a while so this week I decided to play around with Windows Server 2008 and PowerShell. I’ll post some thoughts about Server 2008 soon (at first glance it looks terrific once you get past the fact that IIS is now a "role" instead of something you install). But I wanted to post a PowerShell example first because I wanted to do something with it that I couldn’t find information about anywhere — specifically, perform a database query and dump the contents to the console. (Later we’ll get fancy and dump it to HTML or send it somewhere via email, etc.)

PowerShell can invoke any .NET object, so I knew it was possible to do database stuff with a PowerShell script, but I couldn’t find any examples anywhere, so here’s what I cooked up via trial and error.

The first step is to create a database connection:


[system.reflection.assembly]::LoadWithPartialName("MySql.Data")
$cn = New-Object -TypeName MySql.Data.MySqlClient.MySqlConnection

The syntax to load a .NET assembly in PowerShell is pretty awkward; couldn’t they have provided a Get-Assembly cmdlet? (I suspect that thousands of PowerShell users have already written that one already.) Also, you have to know the assembly name of your ADO.NET provider (which, for MySql, is "MySql.Data," not "MySql.Data.MySqlClient," which was my first guess). The thing to remember is that loading an assembly is syntactically different than including a namespace even though the objective is sort of the same.

Fortunately this is the only part of the process that I didn’t get right the first time, and I had it resolved after a few minutes of experimentation.

I should mention that I’m using the MySql data provider because we use MySql on Approver.com, but you can obviously use any ADO.NET provider you want here. This assumes that your ADO.NET provider is installed in the GAC; if you need to make an explicit reference to an assembly in the file system the syntax is different.

Next, open the database connection:

$cn.ConnectionString = "SERVER=localhost;DATABASE=mydb;UID=xxx;PWD=yyy"
$cn.Open()

If you want, you can check the value of $cn.State here to make sure it worked. Then execute the query:

$cm = New-Object -TypeName MySql.Data.MySqlClient.MySqlCommand
$sql = "SELECT ID, FirstName, LastName FROM Person LIMIT 50"
$cm.Connection = $cn
$cm.CommandText = $sql
$dr = $cm.ExecuteReader()

ADO.NET programmers know that there are lots of ways to do this that require fewer lines of code, but I like to assign everything out explicitly using properties of the ADO.NET Connection and Command objects.

Finally we iterate over the results and close the connection:

while ($dr.Read())
{
    write-host $dr.GetInt32(0) " " $dr.GetString(1) " " $dr.GetString(2)
}
$cn.Close()

This is not too different than what a C# developer is accustomed to, particularly reading out the data. I like that you can just pass a big list of values to write-host without having to explicitly concatenate or convert to strings here. PowerShell figures out what you want to do and does the right thing.

On Approver.com we have a bunch of utilities that we use to monitor system health and site activity (like how many people registered that day, whether people are discovering and using certain features of the site, etc.). Every web site should crunch these numbers frequently (otherwise you have no idea whether the work you’re doing matters to your users).

I think I’m going to eventually migrate our various statistical and maintenance utilities to Powershell. The power of the .NET framework combined with the convenience of script is going to come in handy for a lot of stuff.

Next Page »