Gmail is such a terrible email interface. My IMAP connection failed in mid-send, so I thought "that's fine, I'll just check the web interface". Except I cannot, for the life of me, determine if the email was ever sent. I see it there -- in the inbox, in some weird conversation mode -- but it's entirely unclear if it's sent. It doesn't appear in the Sent folder, at least, and the conversation is marked to suggest that at least one of the entries (unspecified which) is a draft.
Ok, fine, so I just go and send it with the web interface. Problem solved, right? Except I get no response to my email, and it *still* doesn't show up in my Sent folder.
What is so wrong with the tried-and-true "show your emails in chronological order" interface perfected over the last thousand years?
Be a good citizen and go to the Google Suggestion page, check "Switch Conversation View on or off" on this page, type in your email address, and click Submit. The internet will thank you for it.
-david
Gmail's "conversation" feature is inscrutible
OFX FITIDs: Not as permanent as you might think
While working on some bank import engines for Expensify I found I was getting duplicates. Naturally I assumed I was screwing things up, but despite a full sweep through the code I couldn't find any bugs. The only theory I could come up with was the <FITID> attribute was changing on a given transaction. But that's impossible, right? From the OFX spec:
"3.2.3 Financial Institution Transaction ID <FITID>Yep, sounds pretty permanent to me. Except it's not. In fact, it's quite common for the FITID to change, at least for US Bank . I'm guessing it changes as the state of the transaction changes -- only the last two digits appear to change.
An FI (or its Service Provider) assigns an <FITID> to uniquely identify a financial transaction that can appear in an account statement. Its primary purpose is to allow a client to detect duplicate responses. Open Financial Exchange intends <FITID> for use in statement download applications, where every transaction (not just those that are client-originated or server-originated) requires a unique ID."
Anyway, this is probably just a random bug with US Bank, right? Not according to this forum.
Ugg. What a pain. How hard is it to just follow the rules and make a truly unique identifier?
-David Barrett
Christmas Wish: ServerSide JavaScript
For Expensify I'm finding that I can't avoid coding in half a dozen languages simultaneously. At any point in time I will have active windows in C++, PHP, HTML, JavaScript, CSS... and... English. Half a dozen. Anyway, it's a nuisance and I'd like to consolidate.
In particular, I don't like how I generate and manipulate HTML in two places, with two different languages: PHP and JavaScript. PHP spits out a bunch of HTML, along with a bunch of JavaScript to manipulate that HTML via the DOM. It generally works OK, but I'm finding that I generally end up writing the same code twice. Not exactly, but enough to be annoying.
Consider the case of a dynamic page, like a web-based email reader. Something where there's a ton of data that is transformed into HTML in some sophisticated way. There's a range of ways to do it:
Web 1.0 way: Read everything into PHP memory, process, output into static HTML with links.That works fine, except every time you do anything you need to ask the server to regenerate the page. Which leads to:
Web 2.0 way: Read everything into JavaScript memory, process, output into dynamic DOM.This lets the browser do everything locally and avoid asking the server unless it's really necessary. But it has a downside: when the page loads it's completely blank while the JavaScript does its thing. (Similarly, if the browser doesn't support JavaScript, it's just dead.)
As a result, I'd like is some combination of the two where the same code and execution engine is used on both the server *and* client. Then the process would go like:
1) Server reads everything into server-side JavaScript memory
2) Server generates HTML DOM according to whatever logic
3) Server serializes the entire state of the page -- both the HTML DOM as well as the JavaScript VM -- into a big HTML/JavaScript blob.
4) The browser deserializes this blob straight into the HTML DOM and JavaScript VM -- without any big "onload" handler that builds the page from scratch.
5) The exact same code that was initially used by the server to generate the page is used by the browser to manipulate that page.
Make sense? So rather than having two sets of HTML modification code (PHP to generate it, JavaScript to manipulate it), have just one set of code that is run on both the client and server.
And to top it all off, if the browser doesn't have JavaScript, it'll still get a fully-formed HTML page.
In this model, the programmer wouldn't even think of "generating an HTML page with associated JavaScript". Rather, you'd think of building a page up using a series of JavaScript, CSS, HTML, database, and other resources, and then just calling "document.serializeToBrowser()" or something when the page is in a state that you want to send to the user.
Does something like this exist? I see lots of stuff up on Wikipedia, but none of it quite fits the bill.
-david
Pirates of Amazon. And IMDB. And Last.fm...
A while back I mused about creating an index of all content and then linking to pirated copies when available. I suggested copying IMDB, but some clever pirates came up with an even better idea: just layer their tools *overtop* IMDB. And Amazon. And pretty much anybody who already maintains a structured index of all content. Brilliant!
Review: Kill Bin Laden
Not the most creative title, but then again, it's not written by the most creative guy. Rather, it's written by the guy who was literally given those orders: go into the mountains of Tora Bora and kill Bin Laden. Bring back a thumb as proof.
I first learned not of the book, but of the controversy of the book ever being written. See, officially, the Delta Force doesn't even exist. I know, the name sounds so Hollywood, and the notion of a secret elite military organization that swoops around the world in -- get this -- black helicopters, ya, it sounds crazy.
But it also happens to be true.
So when the secret commander of honest-to-god super-soldiers goes on to recount a first-hand experience of a battle that, officially, they took no part in -- people who prefer those secrets be kept were justifiably upset.
Despite that (or even because of that?) it's definitely worth a read. Indeed, I'd suggest you stop right now and go pick up the book. Kill Bin Laden. Hard to forget that title.
For the rest of you, I'll summarize as follows: Kill Bin Laden is a single book that tells two stories.
First and foremost is a story of how utterly bad-ass the Delta Force is. In a matter of days, precision airstrikes, a dozen Delta soldiers, and a ragtag group of bickering Afghani mercenaries accomplished what the Soviet Union failed to do with tens of thousands of highly-trained soldiers: evict Bin Laden and his soldiers from Tora Bora. The enormity of that success can't be overstated.
But the second, more poignant story is the complete failure to catch Osama Bin Laden, despite having him boxed in from all sides to a tiny ten-mile square -- and covered day and night with total air superiority.
There are many, many fascinating components of each of those stories, but I'll only mention two here:
On the good side, I had no idea what a game changer it is to have people on the ground.
When watching CNN, I sorta got the idea that targets are selected by satellite view, conveyed to the pilots, programmed into the bombs, and then dropped. It all seems handled from such a distance. But in practice, the constant drumming of remotely-targeted bombs as small as grenades up to the massive Daisy-Cutter had almost no effect. They were so dug in, and so well concealed, they were completely untouchable.
But the moment a Delta operator got into position, that changed. Bombs that previously struck harmlessly on the mountain sides started dropping straight into tunnel entrances and hardened bunkers. After every hit, people would scatter and reveal more tunnels and more targets. With nothing more than what they could carry on their backs, this tiny crew of Delta operators turned the Air force from an impotent noisemaker into a devastating machine for precision destruction, literally overnight.
It's an amazing transformation to read in the book. But even more amazing is the futility of it all. After all, the mission wasn't to destroy their compound. The mission was to catch Osama Bin Laden. And by that measure, the mission was a complete and utter failure.
It's hard to convey the anti-climactic end without reading the book. But our guys were just getting up to speed -- finally gaining and holding ground (unlike the Afghani soldiers who just raided every morning and came home for dinner every night, regardless of whether they won or lost) -- when Al Qaeda surrendered and all our Afghani allies just sorta gave up and went home... with Bin Laden disappearing in the confusion.
There's this great scene where our Delta operators are still high atop the barren, snow-laced mountains, looking for targets that would never appear, just refusing to give up despite every living person in the area -- friend or foe -- having left long ago.
And I think that's what makes the book so great. It's not a celebration of might. It's not even a finger-pointing exposé. It's simply a retelling of what happened, warts and all, from the only person in the world who was in a position to know.
Sure, mistakes were made. Some of those mistakes probably allowed Bin Laden to escape. But the only way to learn from those mistakes is to know what they were, and this book is the only authoritative book on the subject.
How to execute code whenever Back button is pressed?
So I'd like to execute some JavaScript every time the page loads, regardless of whether it's from a new visitor, or click of Reload, or a click of Back, or whatever. However, I'm finding Back to be particularly tricky. Here's the test code:
<html>Nothing fancy there, should pop an alert box every time right? Wrong: click on the link and then click Back, and the alert doesn't show. (At least, not on Ubuntu 8.04 Firefox 3.) Odd.
<body onload="alert('Hello world!');">
<a href="link">link</a>
</body>
</html>
Even stranger, it *does* show if you include a large (~100KB) external script:
<html>But try it with a small (~4KB) external script and it stops working. The mystery deepens.
<head>
<script type="text/javascript" src="jquery.js"> </script>
</head>
<body onload="alert('Hello world!');">
<a href="link">link</a>
</body>
</html>
The only explanation that makes sense is there must be some kind of delay when the page loads for the Back button to trigger the onload event. Too small a delay (too small a file to load) and it doesn't work.
Any ideas how to reliably execute code on every load, including Back? I'll use the jQuery trick for now, but I'm concerned that it won't always be reliable.
Update: Curtis figured it out: It's due to fancy Firefox caching rules. There are several criteria that go into whether the page is reloaded each time, one of which is whether there's an "unload handler". Turns out it wasn't the *size* of including jQuery, it was due to jQuery setting an unload handler. Anyway, of the many solutions, the easiest is to simply set "Cache-Control: no-store" (or "no-cache", if HTTPS). Thanks Curtis, mystery solved!
Review: Everything Bad is Good For You
For reasons I don't understand, people love to hate. Democrats love to hate Republicans, Christians love to hate Atheists, VI hates Emacs, etc. But the one thing people of all walks of life seem to jointly hate is how the modern way of life is gradually corrupting the moral and intellectual fiber of their fellow man.
I think Idiocracy gave the most condensed (and entertaining) presentation on the topic, essentially arguing that stupid people reproduce faster than smart people, and because everybody is getting stupider, there's a global "race to the bottom" where the intellectually meek inherit the earth.
But this notion was refined and socially reinforced well before that movie came onto the scene. For as long as I've known, I've been surrounded by people who make dire predictions and cynical extrapolations of today's trends, with the inevitable conclusion that humanity's end is just a choice between Nevil Shute or Aldus Huxley. More or less destructive, but with mass stupification taken for granted.
That pessimism, that general hatred of the new and wistful longing for better times, never sat well with me. After all, the only reason the "new" came to be was because billions of people individually and as a group chose to make it so. It's hard to believe that generations would labor endlessly to actively worsen the world and squander their mental capacities.
So at risk of engineering my own "scenario fulfillment" I was drawn to Everything Bad is Good For You -- a book making the outrageous claim that, shockingly, humanity's toil is paying off. Yes, it sounds incredible, but what if people *weren't* getting stupider, and in fact all these brilliant information innovations were in fact contributing to a global rise in intellect?
I expect the top rejection of the book amounts to the carefully researched rebuttal: Sounds too good to be true. Watching TV doesn't rot your brain? Playing video games doesn't erode your morals? You mean education and self improvement could actually be fun? Heaven forbid!
But that's precisely what the book argues -- quite compellingly. It's the sort of thing that seems so obvious when you read it, it's truly refreshing.
Indeed, it's such an obvious conclusion, I don't even know what to say about it.
And perhaps that's its core weakness: it's got no punch. It has no "call to action". As a meme, it lacks any sort of virulent property that would convince people to convince others.
Somehow, conventional wisdom has adopted the opposite of this book's conclusion. But how to turn that around? Or, is it even necessary?
After all, this "sleeper curve" will continue whether or not people acknowledge it. And I'm not sure if acknowledging it explicitly will make it happen any better or faster.
Similarly, even after reading it, I'm not sure what advice to take from it. How do you "learn" from a book that seems so common sense (even if that sense is far from common)?
So it's a bit of an anti-climax for me. Good stuff, reassuring, but it leaves me with a sorta "ya, so now what?" feeling.
Why are future user interfaces so lame?
What is it with futuristic user interfaces being so pointless? Whether it's g-Speak or Microsoft Surface (even the spherical one), all the applications are absurd -- after years of touch screen technology, everybody *still* shows off that stupid photo-organization application.
Seriously: when is the last time you dumped a bunch of pictures in a pile and manually sorted them? I honestly don't know if I've done it once in my life; this isn't solving a problem I have. Every time I see that application I think "you *still* haven't figured out anything useful to do with that thing?"
Everybody is trying so hard to become the next-generation UI that they've forgotten a critical lesson: *this* generation of UI is really pretty good. It's refined through thousands of iterations of tweaks and real-world experimentation.
Take the multi-touch fad that has generally fizzled out. Honestly: how often do you use multi-touch on your iPhone? At the end of the day, most actions work perfectly fine with one finger: just because you *can* use two fingers doesn't mean doing so adds any value.
So I'm going to go out on a limb and predict that the user interface of tomorrow is going to look a helluva lot like the UI of today. And that's because the UI of today looks an awful lot like the desktop of yesterday.
The key is continuity: making small, gradual steps from what you know to what you don't. And all these fancy "next generation operating systems" keep managing to stay in the distant future because everyone else is too busy living in the now.
Which reminds me of a surprising lesson I learned when moving from Windows XP to Ubuntu (Vista was the last straw). And that lesson was just how awesome the command line is, and how just splitting the window in VI as needed is so much more powerful than managing a bunch of stupid windows.
Indeed, the lesson was all the "advances" in UI technology provided by generations of Windows have actually *reduced* my productivity. But like the boiling frog, I just never noticed.
At the end of the day, most data is not amazingly beautiful 3d graphics projected in a virtual cave environment. Most of it is really boring: rows of numbers, to do lists, log files, email. Most of it is text. And I don't see that changing anytime soon.
So I'm looking forward to the UI of the future. But I bet the primary mode of interaction will still be a keyboard, and it's amazing feature will not be sorting piles of random photos, but sorting, processing, and generating text and numbers in amazing ways.
Personally, I'm hoping for LCARS.
-david
When did Agile become so Rigid?
I really dislike the term "agile development". I'm fine using "agile" to describe people or teams. But using it to describe a methodology seems to completely miss the point. You wouldn't say a gymnast uses an "agile technique". You'd just say the gymnast "is agile".
So articles like "When Agile Projects Go Bad" sorta confuse and grate on me.
You'd never read an article titled "When Agile Gymnasts Fall" because it makes no sense; a gymnast who falls is -- by definition -- not very agile. Similarly, an agile project that fails due to a lack of agility is rather paradoxical. (Though there are many other ways to fail than by lacking agility.)
But this isn't just a problem of semantics. Rather, I think this is symptomatic of a broader problem in the agile movement: it doesn't frickin' work. To borrow from my good friend Lao Tze:
You can't learn agility by reading and following. You become agile by doing, failing, changing, and doing again. The most agile people I know read the fewest books on it. Similarly, I don't know anybody who's seriously studied the subject of agile development techniques gotten the least bit better.
So here's my advice: if you want to be agile, put down the book and just start making it up as you go. If what you're doing isn't working, try something different. If what you're doing works, try cutting out a step and see if it still works -- or even works better. Repeat.
You're certain to make wrong steps. You're certain to encounter failure -- indeed, failure will likely be your steady state.
But eventually you'll figure it out, and every once in a while it'll work out great.
Welcome to the world of agility. No reading required.
- David Barrett
ThePirateBay passes 25M simultaneous peers, leaves iTunes in dust
I know there's a dearth of real-world data on piracy, but here's a dash: the Pirate Bay recently passed the 25M mark in terms of simultaneous peers. Here's the data itself, from TorrentFreak:
Date Peers (M)
11/01/2006 1
11/01/2007 6
09/21/2008 15
11/01/2008 20
11/15/2008 25
That's interesting, but it looks much more compelling graphically:

So the rate of real pirates seen by The Pirate Bay has increased by 25x in just over 2 years. (As for how meaningful this data is, it's suggested that TPB tracks about 50% of all torrents.)
Anybody care to guess whether that 20:1 ratio of illegal to legal downloads ratio is going? Might it be more like 100:1 today? The growth of piracy over legal downloads is just staggering.
-david
Tribler. Almost so cool! What I would do:
So I finally made it through to the Tribler website and I think it's *almost* really cool. Don't get me wrong, I installed the app and it seems to do interesting stuff. But I think they're biting off more than they can chew. Basically, I'd layer the content-acquisition experience as follows:
Social: The experience of sharing and learning about new contentTribler tries to vertically integrate the entire stack, and they do a decent job, but it's just too much for one application. It's like coming out with Prodigy today and trying to complete with "The Internet". If Tribler came out before ThePirateBay then it'd be something. But then it'd be called Kazaa.
Index: Determining who has a given piece of content
Transport: Getting content from somebody else
No, instead I think they should do something less. Indeed, the whole brilliance of BitTorrent was that it *didn't* do it all. BitTorrent does nothing but standardize transport, which enabled a huge diversity on the upper layers. Doing *less* than Kazaa is what made BitTorrent succeed.
So if BitTorrent is on one side, and Kazaa on the other, what should Tribler do? I'd say stick with the old saying "only innovate one thing at a time" and just integrate the index into the transport layer, and then call it day. Leave ThePirateBay and everyone else to figure out the social layer, recommendation engine, and just focus on getting rid of the tracker. How?
I think they should create a tool where you can type in the SHA1 sum of any piece of content,* and it'll download it. That's it. Nothing more. Think of what kind of interesting applications could come about if the recommendation engines and such didn't have to host torrent files, and didn't need to take on the risk of trackers!
* In practice it'd probably be a SHA1 sum of a list of SHA1 sums.Because really, search engines like TPB only make sense when "what we have" is a small subset of "what you want", and when there is no general consensus on what a "good" copy of each thing is. In this environment, you literally need to "search" for something you want.
But in practice, TPB has pretty much everything, and for each thing there's usually one version that pretty much everybody uses (ie, the version with all the seeds). So there's usually little "searching" involved. More often than not, just type in the name of what you want, pick the one with the highest number of seeds, and you're done.
Given this reality, it probably makes more sense to ditch the unstructured search interface and go to a structured "table of contents" indexing "all music" and "all movies", with the "best" version of each one given front and center. Then you just click a "p2p://<sha1sum>" link and your client connects to the cloud and pulls it down. (And all the recommendation engines would just layer atop that.)
Accordingly, TPB shouldn't copy Google: they should copy IMDB. Create a comprehensive library of all content, and provide one recommended copy of each (or maybe a selection of encodings: iPod, HD, etc).
As for how to manage spam and such, again, embrace reality. In theory, anybody could post a good copy of anything, and nobody is more trustworthy than any other. In practice, there's usually one guy who is the uber-fan of a particular type of content, and that person posts all the good stuff. Why not just explicitly recognize that uber-fan by making him moderator of the corresponding ThePirateIMDB wiki-like page for that band/TV-show/movie/etc. Then you stop moderating content on a piece-by-piece basis, and start moderating on a curator-by-curator basis. That uber-fan needn't be the one to post all good content (though in practice he probably would); others could recommend content to him and he'd sift through and find the good stuff.
Anyway, that's all just dreamy "what I'd do if I were a megapirate" talk. Somebody's going to do it, and it probably won't be me. I highlight it to make it clear that this is inevitable. If this scenario frightens you, then your instinct is right: be afraid. The future is coming, and if it's not to your liking, then now's the time for some deep introspection because there ain't nothing you can do to stop it.
Tribler == Another nail in the coffin for copyright
The weak link in BitTorrent from a piracy perspective has always been the torrent sites. They're the last centralized holdout vulnerable to attack from copyright enforcers (though those attacks have so far been futile). Regardless, that vulnerability seems to be on the demise with the latest release of Tribler, which includes totally decentralized tracking ability.
I've long said copyright's days are numbered, and tools like this just make that number smaller and smaller. Sure, copyright will still be enforceable on major customers like movie studios, satellite radio services, and other entities with a large financial and physical presence -- large enough to be worth defending, and worth attacking.
But Joe Plumber will be given an increasingly free hand to ignore copyright with impunity. Whether that's morally right or wrong isn't the issue. It's simply true, and more true every day.
In other news, I'm particularly interested in learning more about Tribler's "Give-To-Get" algorithm. (The website is slammed right now, so I'll have to check it out later.) I'm hoping/assuming it takes a less paranoid stand than the standard "tit-for-tat" algorithm BitTorrent employs, recognizing that the universe doesn't reset at the end of each download.
In short, if we share data via tit-for-tat, I only give you data if you also immediately give me data. If you don't have any data for me, or if you give it to me slowly, then I'll withhold my data from you. In a sense, data is like currency.
This is a brilliant model that allows for the protocol to succeed in scarce network conditions with different implementations: it protects each user from wasting data on users who don't respond in kind.
But it also makes downloads go unnecessarily slow in an abundant network situations because you can only download (on average) as fast as you can upload. And because uploading is generally constrained to about a quarter your download speed, that means you can only generally download about 25% as fast as you could otherwise.
Now, BitTorrent gets around this with "seeds", who volunteer data without asking anything in return. With enough seeds, anybody can download at full speed. But seeds undermine the whole notion of tit-for-tat.
Indeed, the easy availability of seeds suggests that the whole assumption of tit-for-tat -- the scarce network environment -- is wrong. Somehow, lots of users are more than willing to give away their bandwidth for free, without any obligation to do so.
Now, there are clever design decisions that encourage this: most torrent clients automatically begin seeding once you finish your download, some tracker sites monitor "seeding ratios" (the ratio of data uploaded to data downloaded), etc.
But the point is: despite there being no technical requirement for people to seed, people still do so, in huge numbers, and don't care.
Which brings me back to the original point: if this is "true" about the universe, then tit-for-tat is non-optimal. It's like wearing a stillsuit in a rainforest.
So the question is: what *is* optimal. And the answer is: upload when it's *cheap*, not when it's expensive. Let me explain that:
Tit-for-tat makes you upload at the same time you download. But the act of uploading actually makes you download slower. Even worse, because downloading fast requires uploading fast, then the faster you download the more download capacity you're spending on uploading. The upshot is even were it not for the asymmetric upload/download bandwidth ratio, tit-for-tat makes you upload when bandwidth is the most expensive. Tit-for-tat takes a scarce bandwidth environment and makes it *worse*.
The alternative is to wait until the download is done and the upload later, when your network is idle (such as when you are watching the thing you just downloaded). This way when you download, you download as fast as possible without wasting time uploading. And when you upload, do it in a way that minimizes its impact upon the user who is volunteering the bandwidth.
Doing this, however, requires trust else people will download without ever uploading. That trust is very difficult to enforce against people's wills. (Even tit-for-tat suffers from BitThief problems.)
But the very fact that seeders are in such large supply in a tit-for-tat model shows that users are generally willing to donate their bandwidth voluntarily. As such, even though there's no way to force people to upload, people still do it anyway. If you make it more convenient to just "do the right thing" than try to fight the system, then people will just go with it and everybody wins.
Hopefully Tribler does this. Once the website comes back, we'll see.
Isn't there a better way to save lives than a Golden Gate suicide net?
I'm not pro-suicide. But $40-$50 million dollars + $78K/year to build a net under the Golden Gate Bridge in order to dissuade just a few dozen jumper a year seems outrageous, on so many fronts.
First, anybody who actually does jump is probably pretty serious about killing themselves -- serious enough that they'll find some other way. So probably the most absurd part is it being a completely stupid and pointless plan on its face that will probably end up saving zero lives.
But ignoring that -- after all, I'm willing to endorse symbolic plans on occasion -- the price for this meaningless gesture is astronomical. $40 - $50 *million* dollars? To encourage only 39 jumpers a year to go somewhere else? Who can possibly suggest it's a wise expenditure of money, especially in this economic climate, to spend over a *million dollars* to stop just *one* jump a year?
To put that in perspective, if we kept that same money as cash, we could spend over $100,000 per jumper per year for the next century. We could hire 50 full-time-people to just stand there, 24/7, and watch the bridge -- perhaps talking down anybody who looks like they might jump -- until 2108. Even just investing $50M dollars at a 5% interest rate would earn $6.5 *billion* dollars in 100 years.
Even if it were "only" the $78,000 per year maintenance fee (that's right, once built, it needs to be maintained), that's like $2000 per jumper per year. Even that "paltry" amount could be better spent saving actual lives, or even just hiring another full-time member at a suicide prevention line.
So the cost is outrageous and simply indefensible, especially given it will completely fail to accomplish its objective. But on top of this, the Golden Gate Bridge is a historic landmark that probably brings in billions of dollars a year in tourism to San Francisco. We're seriously going to be some huge frickin' ugly net under it? What kind of effect will that have on tourism or even our international reputation?
Who is in charge of this boondoggle of a plan, and is there any time to breathe sense into the process? I'm down with spending money to save lives. But this is just such a ridiculous waste of money it's infuriating.
-david
Note to Movie Studios: Don't Fight the Future
What should the movie studios do to avoid a fate similar to the major music labels?
The labels mined and salted the fields of digital music such that commercial success was impossible. Their legacy will be intractable resistance to and wholesale destruction of the commercial music industry, effectively sending it back to the stone age.
What should the movie studios do differently? To be certain, they're starting off on an equally self-destructive course, as this RealDVD episode shows. But what other card do they have to play?
All I can think of is convenience and a superior experience. For example, I know how to download pretty much any movie or TV show, but I still rent movies and series's all the time from Blockbuster just because it's way more convenient. Likewise, I go to movies all the time because I am a sucker for the big screen.
The only meaningful asset the movie studios have is people don't absolutely despise their existence and wish them dead. (The music labels were never so lucky.) I wonder if they'll realize how valuable this asset is before it's lost, and if they realize how quixotically battling the future one RealDVD at a time earns them absolutely nothing while eroding the popular support they utterly depend upon to survive.
- David Barrett
A nation united in opposition of its leaders
Isn't it really surprising how much people hate this $700B bailout bill?
I read a report there was near unanimous opposition among constituents -- so much opposition that websites were crashing under the volume. I thought this was probably bull, but when I went to call Barbara Boxer I found her voicemail full. On her website there's a special note that the contact form might not work due to high volume. Her alternate number is full. Diane Feinstein's number is busy.
(Here's a helpful page showing California Senator contact info.)
Is this level of true grassroots opposition unprecedented, especially given that both Republican and Democratic Party leaders support it unequivocally?
Personally, I agree with the masses. America is going bankrupt and I'm much more concerned about another $700B of debt -- especially when I have zero confidence it will actually accomplish its intent of rescuing the economy -- than waiting to see what happens and letting the market sort itself out. And now that they're trying to sweeten the deal by trowing in tax cuts? Have we completely lost our minds when it comes to fiscal responsibility?
Furthermore, the defense is just absurd. Granting that there are probably really good arguments for it, given that this whole episode was triggered by irresponsible lending, can't we find some other defense than "this is needed to let people borrow money to buy homes"?
Regardless, it sounds like the masses' opposition might have tapered off given the stock market crash, so who knows. Maybe we'll get bailed out, whether we like it or not.
-david
Voting for the loser is no excuse
The other day I read a post on a mailing list lambasting the current state of the union (specifically how both candidates are shirking their jobs to run for office) and saying, essentially "it's not my fault, I voted Libertarian". I've heard that a bunch of times in a variety of forms, so I had to respond as follows:
"If you're advocating a policy change to prevent active senators, legislators, governors, and so forth from campaigning while on the job, I think you'd have many supporters from all sides. We need more of that constructive discussion.We're all equal participants in this process. We all share equal responsibility for its results, both the good *and* the bad. if you dislike like those results, don't vent: rally some friends and make a difference. Because if you don't, somebody else who thinks otherwise will just rally their friends, harder.
But it's not helpful to bash the status quo and then claim you're not responsible merely because your party consistently loses at the polls.
If you're a US citizen, then you're responsible for the result of our political system, whether or not your guy won. Voting for the loser doesn't excuse you from the results of the process. It just means you're doing a shitty job."
My Internet != Your Internet
So I'm debugging this SOAP protocol and having a certain problem: me and a vendor are submitting the "exact same" request but getting different responses. Furthermore, each of us repeatedly get the same response to our requests, but never get each other's.
At this point I realize that we have different meanings of "exact same". In my mind, "same" means "the bytes that go over the wire are identical". In their mind, "same" means "the objects being serialized have the same data". The difference there, of course, is the manner of serialization. Different request serializations produce different responses. Same != Same.
This made me realize that we all have different notions of how the internet works. I'm a low-level guy so I think in terms of bytes, whereas others think in terms of higher level protocols. I think there are benefits and detriments to thinking on every layer, but the most important thing is to identify when you're thinking on *different* layers.
Furthermore, it's caused me to wonder what I'm missing out on by thinking of the internet as a series UDP/TCP flows. What magical wonders are happening at the IP layer that I'm just overlooking? How does BGP *really* work? What are the actual differences between 802.11 a-g? I have no idea.
But I bet there's going to be a lot of exciting developments happening at these lower layers as programmable radios become commonplace and the average Joe can suddenly whip up a new wireless protocol from scratch.
Similarly, what's going on at those higher layers? I've heard of microformats and semantic data and agent programming and the like. It all sounds dreamy. But maybe I should be considering them in a more practical sense?
Regardless, back to the present. It's always an interesting to discover that the common ground you think you share isn't so common after all. My notion of the internet is not necessarily your notion, so beware.
Expense Reports (and a Million Bucks) for Those Who Hate Them
Expensify isn't so much a labor of love as it is a retaliation against paper expense reports.
Don't get me wrong: making business purchases doesn't phase me. I'm fine buying tickets, renting cars, booking hotels, and generally getting things done on my own credit card. But the process of getting paid back is just so excruciating.
I'm not sure which is the worst: keeping track of the receipts, typing it all in, waiting to receive the check, or actually depositing it once I get it. The whole experience is so bad it blurs together into a general morass of pain. It's so bad I find myself just paying for things out of pocket because that's preferable to the torturous process of getting reimbursed.
This has been the case for years, and as I clawed my way up the startup circuit, I always rather assumed the big companies had some magical solution that made it all easy. Well, they don't. It's horrible from top to bottom, and what few corporate card solutions exist are targeted squarely at the big guys. I've got news for you: there are 25 million businesses in the US today, and 24 million of those have under 20 employees. That means 97% of the market is has been neatly overlooked, leaving the rest of us in expense report hell.
Well, I'm proud to say that all that ends now. Expensify is the corporate card for everyone else, the expense report service that not only pays you back faster, but pays you back *more* -- and does so without the grueling pain we've all come to associate with the words "expense report".
In case you don't already know, Expensify uses electronic payment cards to enable one-click expense reports. Every purchase you make with the card we give you is billed back to your regular credit card -- there's no new monthly bill, and you keep all your frequent flier miles. Come back to the site at any time to print out full expense reports (including receipts: just scan them in with our iPhone app or email them to receipts@expensify.com using any cameraphone), or type in your manager's email address and we'll mail them a PDF and bill them for the amount of the expense report, crediting it back to your credit card. No checks to cash, no days to wait, we'll just instantly pay off your credit card when your boss approves the report.
Anyway, you might have heard we launched last week at the TechCrunch 50 and Wow. What a response. We were cautiously optimistic that people would like it -- we were unprepared for how much people would absolutely *love* it. We pitched it over 150 times, and everyone was ecstatic. One guy even gave me a hug as thanks for how much time we were going to save him. I think he had a tear in his eye.
All this enthusiasm has really highlighted to us just how big a problem we're solving, and how important it is that our launch go smooth. So as much as it pains me, we've decided to slow things down a bit and put some extra testing and polish into the site, and to send out our cards in smaller batches than initially anticipated. We'll still send them out on a first-come first-serve basis, and once we're through the backlog our plan is still to get cards to your door within a week. But we're going to take our time with these first batches to ensure the highest quality experience possible.
That said, we want to thank you, the TechCrunch crew, and most importantly all the many, many people who spoke with us at the TechCrunch 50 and gave us such kind words of support and encouragement -- not to mention voted us 2nd place winner of the Demo Pit over a hundred other companies. And what better way to give thanks than with cold hard cash!
That's right, from this moment on, the next 1000 users who sign up will get $1000 in free purchases. That's a cool million dollars of Expensify service we're giving away for free to you, the early adopters, the TechCrunch readers, and the fledgling group of Expensify fans who make it all possible. So sign up today and get in line for your Expensify card and $1000 of zero-surcharge purchases. Your card will be in your mailbox before you know it, and your dread of expense reporting will soon be a distant memory!
Thanks again to Jason Calacanis, Michael Arrington, and the entire TechCrunch 50 crew for putting together a fantastic venue and the best launching pad that anybody could ask for. These guys did a fantastic job, under difficult circumstances, and I can't wait to see what they cook up next year. With any luck, Expensify will be there!
- David Barrett, Founder, Expensify
It's Alive! Expensify: One-Click Expense Reports
Well, the word is out: Expensify is live and taking orders for our one-click expense report service. I'll have more to say in a bit, but for the moment I'll let Travis Kalanick (our advisor) do the talking:
"Expensify is launching at TC50!
Who here has a bag of stale receipts sitting in their closet? Receipts that long, long ago should have made it into some expense report. . . of course to get there, you would have had to organize that big bag of receipts in chronological order, affixed and taped each of them to a separate blank sheet of paper, gotten some excel sheet or web-form and done a few hours of data entry. Of course, you’d also have to remember what was discussed at that steak dinner in Denver (it was with customers. . .yeah, I’m sure it was), and then list their full names and titles. The list of headaches stretches for miles. . .Taxi receipts not filled out, separating room charges from room service and hotel Internet, old faded receipts that are illegible. .. the list goes on and on.
So I think we all would agree that there is one word that is synonymous with doing expense reports. .. PAIN.
So much pain that it takes up to 45 minutes per $1000 of expense reporting. For employees with expense-prone job descriptions (there are 50 million of you in the US: salespeople, office managers, small-business owners) that comes to 30-40 hours a year. That’s a week’s worth of vacation, or a week more of actual selling to hit your quota.
The pain for many of the less expense-disciplined among us, hits us in our pocket book. Some estimates are that 5% or more of all legitimate expenses never get reimbursed because of receipts that get lost, and expense reports that don’t get filed (referring to that bag of wilting receipts above).
Expensify wants to change that
Expensify’s Company Mission: Empower small-business employees, independent contractors and sole proprietors with easy tools for PAINLESS expense reporting.
Expensify accomplishes this with 3 main Expensify components:
1) Expensify expense card – a card that you use to make expense purchases. You top-up Expensify card with your existing credit card. The card makes expense categorization a breeze, and allows Expensify to automatically fill out expense reports.
2) Receipt capture and upload – take pictures of your receipts and upload with either Expensify’s iPhone application or with simple email attachments from your phone or PDA.
3) Expensify Dashboard – Expensify automatically associates the receipt images with the expense card entries. You’re only a few clicks away from a completed expense report. Submit digital expense reports to your boss or client (via email) or print out and send physical expense report.
So now you’re saying, this is all way too easy. Expense reports done with only a few clicks, submitted before I even get back to the office from a trip. No more lost receipts or expense report hell??!! How much does Expensify cost?
Identical to PayPal pricing on an existing credit card, Expensify charges 3% of transactions made to the Expensify expense card.
How can you justify Expensify cost?? If Expensify saves even one receipt in thirty from getting lost in the shuffle, the extra reimbursements means Expensify pays for itself! We also know that time is money, and the time you save not dealing with expense reports should add to your overall quality of life
And remember, Expensify charges ARE reimbursable expenses!!
So how do I get started?
Step 1 – Register at Expensify.com
- Enter email address and password
- Verification email sent to you
- Sign up for Expensify expense card
Step 2 – Set up iPhone/PDA for receipt image capture
- iPhone users: Install iPhone application for quick uploading of your receipt images
- Other phones/pda’s: Email photos to receipts@expensify.com
Step 3 – Impatiently wait for your Expensify expense card to be mailed to you
- Should be delivered in one week
You’ve now been EXPENSIFY’D!! Enjoy easy no-hassle expense reporting!
Thanks for checking us out. Give Expensify a shot, let us know what you think, and don’t hold back. .. feedback for the product, venting over previous expense report nightmares, just sound off. .. . and thanks for getting EXPENSIFY’D!!
Travis Kalanick
Expensify Advisor and happy customer"
A great quote from Travis: "David thought it was a good idea, but when I started digging into the data, I determined it was a *great* idea." Thanks for the intro Travis, I'll follow up in a bit once I have some free time -- the next flood of TechCrunchers are on their way!
Vote for Adam
Adam Frisk is an awesome P2P engineer and a major contributor to both Limewire and now Littleshoot. He's trying to put together a panel at SXSW -- go sign up and vote for him today!
