Fishpool

To content | To menu | To search

Thursday 9 May 2013

HTC One - an unreview, or what could be done better?

Finland is a funny market. Home of Nokia, most interesting devices take a while to actually become available here. Three years ago, I got my Nexus One by help from a colleague based in UK. It served me well - while it had always been pretty short on memory and for a long time had not been too impressive in terms of speed, it had a nice form factor and, even by today's standards, a fairly good display. However, I had been planning to swap to something more up to date for a while.

The Nexus 4, however, still isn't available here. Sure, at times a local retailer might have a few units with a pretty unattractive price, but the value proposition Google gave for the device is unreachable, since they will not deliver it from Germany, France, or UK to Finland. So much for the unified trade region of the European Union..

13050001_1 So, when I first heard of the HTC One, I had not picked up anything as a new device. I had considered a Galaxy S III, but I can not warm up to the imitation-chrome-rimmed plastic design Samsung is so fond of. In sharp contrast to that massive sales hit of the Android world (behind only the iPhone in sales figures), HTC One is a gorgeous design item. Enough has been written about its surface features, I see no point adding to that conversation. To my eye, HTC One wins the physical aesthetics crown among current phones, with the iPhone 5 and Nokia's Lumia 720 coming behind it. Each represents a very different philosophy and executes the details well. Anyway, I'm more of an Android guy, so even if One wasn't so gorgeous, I would not pick an iPhone or Lumia for myself.

But Finland isn't among the first markets for HTC either - heck, often it isn't an early market even for Nokia. In addition, One has suffered several delays, just barely making it to some markets ahead of the Samsung Galaxy S4, which must be its worst rival. So, especially since I managed to crack the Nexus One's screen to an unusable state, I had to resort to foreign help again - always a bit of a gamble with even with unlocked phones, due to the network differences. Since I couldn't locate a device in Germany, it was time to look what UK could deliver. And deliver it did - through Ebay, I received an untouched, still-in-retail-wraps HTC One last Friday.

I have to say it's just as beautiful in real life as it was in pictures. The finish is exquisite, with the aluminum, glass and polycarbonate seamlessly fused together. I would have happily traded 10 grams more mass and a millimeter in thickness for a more powerful battery, which I'm certain is the weakest part of the device, but it's not difficult to come up with a strategy that will take the device through my regular working day. As most reviews have concluded, it's at the top of Android models, if not of all smartphones.

But what of the un-review? Here are the things HTC has failed to do a good job with, all in the software installed on the device, as noted over one week of use. Where I've figured out a workaround, that's noted, too.

  • The Power Saver - yes, it has one built in. However, the way it's implemented (as an always-there checkbox at the top of the Notifications panel), it obstructs Android 4.1 from presenting the expanding notifications (which are present only for the topmost item). Those notifications are very useful. So, long-tap on the power saver option until an App Info pop-up appears. Through that, you can kill the Power Saver to recover the notification menu. For power saving itself, I use Llama profiles and a few events I've come up with over time.
  • The Calendar - several dealbreaker presentation problems, such as no weekday info in the daily view, no event labels in the weekly and monthly views (despite plentiful resolution to display small type on the Full HD 4.7" screen) and terribly confusing multi-calendar display options. I replaced it with Google's own Calendar app, hiding the built-in tool. They'll show the same calendars and this swap in no way prevents the lock screen and BlinkFeed from continuing to show calendar entries.
  • The keyboard's auto-complete and auto-correct is really irritating, including that hitting space will complete words but not insert the space. Replaced with SwiftKey, which is a far more competent solution anyway - but I might not have done it, had the keyboard been just that tiny little bit more finished.
  • The Share menu in HTC's own apps, including the browser. Limited to showing only four sharing options, among which HTC's own service and the not-so-great Mail app, all of the tools I use to share content (most notably GMail and Buffer) require extra taps. Chrome does not suffer from the same issue, though, so for browsing, this is easily bypassed. Too bad, because the HTC-customized stock browser is otherwise quite competent, slightly faster, and supports Flash for the few situations where that still is valuable.
  • That Mail app. Sure, it will connect to various mail servers including Exchange and private IMAP servers, but it's not nearly as polished as the GMail app, and all my mail accounts are backed by GMail anyway. This would not be a big deal, except for..
  • The lock screen is able to show weather, upcoming calendar entries, incoming SMS messages and the latest mail headlines - except, it will show the latter from the Mail app only, not from GMail. D'oh. Naturally, some might prefer to not show that potentially sensitive data on the lock screen, but I'd prefer the convenience, if it worked.

While overall I still prefer stock Android to these manufacturer customizations, HTC has improved on a couple of points. BlinkFeed is a nice presentation of news, Facebook and Twitter streams without leading to any undesirable duplication of work so common in these aggregation apps, the People browser that replaces both Android's Contacts app and the stock dialer is pretty good, though it takes some getting used to, and the camera application is a good use of the unique capabilities of the device. Of the major flaws, only the Mail/lock screen issue is something I have not found a workaround for, and it's a stretch to call that issue major. Nonetheless, I hope and expect HTC to deliver an update (perhaps along with Android 4.2) that would address these issues, many of which have been already noted by others, too.

Oh, and the camera? Its 4MP "UltraPixel" direction certainly sets the device apart from the competition. I have not done comprehensive side-by-side tests of it, but it does have good low-light performance (especially considering others, including the Lumia 920, use much longer exposure times and thus suffer from more motion blur, even if their image stabilization were able to eliminate camera shake). Perhaps the color balance could be slightly better. As for the resolution, it's certainly enough for online use, though won't leave much room for crops. Considering no mobile camera apart from the already-extinct PureView 808 can compete with a zoom-enabled pocket camera, let along a DSLR, I think the camera performs where most consumers would need it to. I hope HTC's gamble will pay off, and those same consumers won't be misled by the megapixel wars.

The other stand-out feature, unmatched sound output certainly stands out as well. This is the first mobile device capable of putting out a decent audio stream that I've tried. I doubt music will ever truly sound good at this scale, but at least its recognizable even from a distance. Most importantly, voice output comes clear and loud, so this is by far the best speakerphone ever made. If there's anything I can fault it with, it's this - even the lowest volume setting is sufficiently loud to carry over in a quiet room in a way that might bother other people nearby. I'd like one more setting below it, but headphones solve this with minimal inconvenience.

Monday 29 April 2013

Analytics infrastructure of tomorrow

If you happen to be interested in the technologies that enable advanced business analytics, like I am, the last year has been an interesting one. A lot is happening, on all levels of the tech stack from raw infrastructure to cloud platforms and to functional applications.

As Hadoop has really caught on and is now a building block for even conservative corporations, several of its weaknesses are also beginning to be tackled. From my point of view, the most severe has been the terrible processing latencies of the batch- and filesystem-oriented MapReduce approach, rather than solutions designed on top of streaming data. That's now being addressed by several projects. Storm provides a framework for dealing with incoming data, Impala makes querying stored data more processing-efficient, and finally, Parquet is coming together to make the storage itself more space- and I/O efficient. With these in place, Hadoop will move from its original strength in unstructured data processing to a compelling solution for dealing with massive amounts of mostly-structured events.

Those technologies are a bear to integrate and, in their normal mode, require investment in hardware. If you'd prefer to get a more flexible start to building a solution, Amazon Web Services has introduced a lot of interesting stuff, too. Not only have the prices for compute and storage dropped, they now offer I/O capacities comparable to dedicated, FusionIO-equipped database servers, very cost efficient long-term raw data storage (Glacier), and a compelling data warehouse/analytics database in the shape of Redshift. The latter is a very interesting addition to Amazon's already-existing database-as-a-service offerings (SimpleDB, DynamoDB and RDS), and, as far as I've noticed, gives it a unique capability other cloud infrastructure providers are today unable to match - although Google's BigQuery comes close.

The next piece in the puzzle must be analytical applications delivered as a service. It's clear that the modern analytics pipeline is powered by event data - whether it's web clickstreams (Google Analytics, Omniture, KISSMetrics or otherwise), mobile applications (such as Flurry, MixPanel, Kontagent) or internal business data, it's significantly simpler to produce a stream of user, business and service events from the operational stack than it is to try to retrofit business metrics on top of an operational database. The 90's style OLTP-to-OLAP Extract-Transform-Load approach must die!

However, the services I mentioned above, while excellent in their own niches, can not produce a 360-degree view across the entire business. If they deliver dashboards, customer insight is impossible. Even if they're able to report on customers, they don't integrate to support systems. They leave holes in the offering that businesses have to plug with ad-hoc tools. While it's understandable, as they're built on technologies that force nasty compromises, those holes are still unacceptable for a demanding digital business of today. And as the world increasingly turns more digital, what's demanding today is going to be run-of-the-mill tomorrow.

Fortunately, the infrastructure is now available. I'm excited to see the solutions that will arrive to make use of the new capabilities.

Thursday 28 February 2013

What if movies were designed for free-to-play?

This tweet from Ben Cousins over at ngmoco (looking forward to The Drowning!) got me thinking:

In a response, I said that's true if you consider the entirety of the movie industry (where some people buy everything they watch, while some pirate it - and yet another group pirates the movies and buys a lot of movie-related merchandise), but that on the level of any one movie, if they're analyzed from a free-to-play angle, they're terrible businesses.

I guess that obligates me to write something about how would a free-to-play movie work. Not being very well versed in the details of how movies get produced today, I guess I'm either way off in the deep end, or in an advantageous position to speculate about it. Take your pick, shoot me down in the comments. It's entirely possible it's not even possible to make every movie work as a standalone free-to-play (in which case we're back to something like Netflix as the freemium business model for movies), but since we did figure it out for games, why shouldn't we try to figure it out for movies?

What's a good free-to-play product design like? A quick summary:

  • A basic version of the product should be available for free. If someone's motivated enough, they should be able to enjoy the full experience without opening their wallet, but they'll have to contribute in some other way. Pirated movies don't count, that's not contributing. Ad support is a weak solution - better than nothing, though.
  • "Basic" doesn't mean low quality, because the free product should be as engaging as the premium version. A low-rez online clip doesn't cut it, it just drives people back to piracy.
  • The bar to spending money should be really, really low and well incentivized. An Amazon $0.99 rental for 24h counts, iTunes store $15 download does not. The incentives still need work, though - ease of access, good recommendations, easy streaming to the big screen are a good start.
  • The upper limit to how much one customer can spend on the product should be high enough to be practically unlimited. Spending more should always result in some additional marginal value.
  • High value customers come in two shapes: those who buy something really expensive once (such as a collector's edition, like Ben was linking to), or those who keep spending, again and again.

In some markets and for some movies, the industry does manage to capture the middle. However, these are not optional points for a free-to-play design. You have to consider all of them, or you're turning away customers. A free-to-play design typically expects a few percent of the audience to pay for their experience.

On the level of basic free edition, the easy suggestion to make is to have each movie be viewable from its own site in exchange for a Facebook Like or a retweet. By doing that, free viewers are contributing viral visibility to the product. As I mentioned above, this should not be a crappy low-rez edition, but a real, enjoyable stream. Done this way, movies would have to have stable, long-term addresses, rather than the marketing campaign sites they now have, but that would be a good thing. Free-to-play is a lot about the long tail, in both volume and time.

That site can sell offline copies as DVD or BluRay for someone who (for whatever their reasons) can't or doesn't want to stream. That may be quaint, but hey, people still buy vinyl, too. It can also rent the movie for streaming to something else than a computer. Clearly, there would need to be several incentives for someone to want to contribute a couple of bucks for the regular edition of the movie, and this is probably the hardest thing to get right. Eg, you could charge for pause function, but that would be a pretty dick move, likely to drive away people who would otherwise enjoy the experience. Perhaps the free edition should only come to play a month after release, until which streaming always costs.

Stuff like comment tracks, making of, etc can be a paid extra. They're made for true fans, and true fans are by definition willing to pay for the work. Some of that stuff can reasonably be priced much higher than it typically is, today.

Selling merchandize and collectors editions are obviously something the site should feature. It should also have exclusive items, such as limited edition access to the production crew. Just look at any of several successful Kickstarter campaigns to see what might a $5000 edition of a movie be packaged with. Today's featured documentary on Kickstarter about the Arab Spring has 10 premier night tickets next to the crew for that price, and another reward for double that (check it out yourself). The Kickstarter rewards are time-limited, but a free-to-play movie should have similar items available for fans throughout its distribution lifetime. They will need to be refreshed. Free-to-play is a service, not a product.

A re-watch would need to have some special features for it, all of which could be paid stuff. This would benefit some movies much more than others - and create an incentive for artists to create more movies like that. I wouldn't mind!

Now, I haven't even tried to run any numbers on this thought experiment, and I don't know where to pull the reference data. According to Box Office Mojo, last year's top grossing movie was The Avengers at $623M US, and on position #100 was The Five Year Engagement at $29M US box office revenue. The same site estimates US ticket prices today at $8.05, so that would mean 78 million US viewers for Avengers and 3.6 million for "5 year". However, those figures probably do not include rentals or online, and almost certainly do not include merchandize, which I would guess is a substantial extra for Avengers (and included in my suggested model above), so basing any comparisons on those data points would be very flawed.

A blockbuster film like Avengers collects most of its revenue very close to the release date, but other movies, like the perennial favorites Sound of Music, The Wizard of Oz and It's a Good Life, or somewhat more recent examples like Pulp Fiction, Inception or The Fight Club would keep racking views and revenue for years, even decades. So, would the Avengers ever get its current revenue as free-to-play? Perhaps not. Would Five Year Engagement? I don't see why not. Would Pulp Fiction or Fight Club, neither of which apparently make it to the all-time top 200 grossing movies on Box Office Mojo be able to generate a billion dollars off their engaged fan base over time? Of course they would.

Are you prepared to deal with a negative test result?

Someone recently asked me, whether he should do a limited-market test launch for a product he knows isn't finished yet, in order to learn more from actual users. A worthy goal, of course. Perhaps you're considering the same thing. I have, many times. Before you decide either way, consider the following:

What do you expect to learn? If you need to see people using your product, throwing it on the App Store won't help you achieve that objective. Better you go a nearby meetup of people you'd like to see using your product, introduce yourself and ask them to test it while you're looking. If you can't take the product with you or need to have an entire team experience the end-user feedback first hand, invite 10 people over for some pizza (either to your office or some more cozy environment) and record the event on video. I promise you, it'll be an eye-opening experience.

Do you have a hypothesis you're trying to verify? Can you state how you're verifying it? Can you state a test which would prove your hypothesis is false? Are those tests something that you can implement and measure over a launch? Awesome! If not, then you need to think harder and probably identify some other way of gaining the insight you're looking for.

Are you just trying to gather experience of something not directly related to the product itself? Such as, you don't yet know first hand how to manage an App Store launch. Well, you could launch your baby -- or you could quickly create another product with which to learn what you needed to learn. This tactic has the added benefit that such side-products are typically simpler, so they're easier to analyze for the understanding you're after.

But most importantly, what will you do if your test comes back with a negative result? Far too often, this hasn't been given any consideration, and when it does happen (as it typically does, if you haven't thought through the process), the response is "oh, the test failed, never mind, we'll just go ahead anyway". Unfortunately, in most such situations, it was not the test which failed. Rather, it successfully proved that the hypothesis being tested was incorrect. This is a completely different thing, and going ahead without changes would be a mistake after such a result. You have to be prepared to make the hard decisions. For example, Supercell killed Battle Buddies after their test launch showed it would not convert enough people.

You should test often and early. You should gather market data to support significant further investments of time or resources to any development you're undertaking. But you should also be prepared to take any necessary actions if the tests you're running show that your assumptions were incorrect, and the product doesn't work the way you intended. Those are not easy decisions to take, if you're invested into the product, as most creators would be. Think it through. A launch is not a test.

Tuesday 5 February 2013

Arbitrage as a game mechanic

Reading this rather amazing story about cross-border arbitrage, I could not help but think about how it applies to game design.

Here's how the arbitrage math adds up. The ferry costs approximately $275 round trip, and gas is about $8 a gallon in Sweden, which, if we assume our car gets around 30 miles per gallon, gives us $435 in expenses. Throw in food, lodging, and other miscellaneous costs, and the total should come in around $600 or so. Remember, diapers costs more than twice as much in Lithuania as they do in Norway, so we only need to buy that much to break even.

If in the real world it's possible to entice enough entrepreneurial activity from a neighboring country to make the supermarkets of south Norway run out of diapers, imagine how powerful arbitrage opportunities are for game design. It can do everything:

  • Increase play frequency, as you need to come often to exploit recurring opportunities
  • Drive explorative gameplay, as more and more players search for new kinds of arbitrage
  • Incent specialization, because to exploit arbitrage, you need to focus on a particular activity
  • Drive expected lifetime up, as leaving the game means leaving value on the table
  • Drive lifetime value up, because in a free-to-play game, longer play time means more opportunities to buy
  • Drive virality up, because players have incentive to find both supply and demand for their particular arbitrage skill

Many of these factors apply even to a single-player game that simulates market activites. Look no further than the classics of market games, David Braben's Elite (1984) (or Star Trader, which preceded it by a cool 10 years). However, the forces really come to forefront when applied to a social game where the arbitrages don't need even need to be programmed in, as long as the design doesn't eliminate their possibility. Players will probably discover them.

That doesn't mean it's trivial to fully exploit that capability, though. For example, I don't think we ever really explored the arbitrage mechanics fully in Habbo Hotel, even though the system is full of player to player trading, rare items, well-hidden nooks and crannies, and whatnot. The most important feature missing in Habbo Hotel is rich support for specialization. RPG style games bring specialization through character classes and skills, resource management games through directing players to invest their earned resources in a particular type of activity, and so forth. The game mechanic should reward specializing, by making it possible for a player highly capable in a particular section of the gameplay to trade that capability with others for the skills or resources provided by another type of specialization. Don't reward being a generalist, or allow maximizing all stats.

Tuesday 1 January 2013

A review of 2012 and a look into the future

Happy New Year! I've done the traditional review and predictions thing here for the past few years, and it's that time again. This time around, it's really difficult for me to see the big trends, having been heads-down in start-up building for most of the year. On one hand, that's of course a problem; if I can't describe what's going on around us, how can I know where to head? Yet, most startup decisions really have very little to do with this level of thinking -- once a rough vision is in place, it's more about finding the right people to execute that vision with and not a lot about what are other people doing. So, I haven't really spent enough time putting these thoughts in order, but it'd be a shame to skip this chance.

On the recap side: I predicted that the Euro crisis would continue to play out, that governments would try to regulate Internet, that Facebook would continue to dominate but the "gatekeep net content" stuff would fail, that we'd see a lot of rise in enterpreneurship (would it be safe to call 2012 the year of Kickstarter?) and that we'd see a completely new class of social games, and I'm very happy to see good friends at Supercell emerge as the early leader there. Well, I was pretty vague a year ago, so it's easy to claim I'm a good prognosticator :). I can't make a call on the data-driven medical stuff, not having really followed developments there, though I suppose at least 23andme's massive new funding counts. From earlier stuff, motion controls are now on high-end televisions, though the applications are still pretty raw.

Then there's the personal recap that's far too close for me to summarize it well. 2012 has been a year of change, learning and growth. The chronological highlights: ending a good period at Sulake, using all that I learned there to help several very cool startup teams accelerate on their path to success, helping my spouse get her own startup movingfounding another startup with a great team and most importantly, witnessing and guiding our daughter learn new stuff every day over her second year.

What's in the future? I remain especially bullish on two very large, very disruptive trends - the custom healthcare I already wrote about earlier as well as custom manufacturing (whether 3D printed or otherwise). For sure, 3D printing is advancing really fast right now, and it's reasonable to expect some devices come out of hobbyist-tinkerer labs and prototype studios to regular homes and offices. However, it's not just 3D printing but all kinds of digitally driven manufacturing from custom shoes and jeans to customer-specified patterns or designs on everything. With laptop vinyl skins, tableware and lampshades done, what's next?.

While these deliver value in different ways, they're driven by the same trends powered by digital technology and data. Computing is no longer just computing. Ultimately, we're only a few short years away from Neal Stephenson's Diamond Age. Okay, perhaps not the nanotech, but most other stuff for sure.

Looking at my past predictions, I've been far more focused on the pure computing stuff before. On that note, we're still in the middle of the platform disruption. Though touch computing has clearly taken a leading position in application development, we're still missing a capable standard platform. iOS is capable but proprietary, HTML5 is still not fully here, Android is grabbing market share but at a massive fragmentation cost, and so on. I haven't seen this many new languages and frameworks pop up all over the place since the early 90's. What's going to be the Windows 95 and Visual Basic of this era?

Wednesday 12 December 2012

A marriage of NoSQL, reporting and analytics

Earlier today, I mentioned querymongo.com in a tweet that fired off a chat covering various database-related topics each worth a blog post of their own, some of which I've written about here before:

One response in particular stood out as something I want to cover in a bit more detail that will fit in a Tweet:

While it's fair to say I don't think MongoDB's query syntax is pretty in the best of circumstances, I do agree that at times, given the right kind of other tools your dev team is used to (such as, when you're developing in a JavaScript-heavy HTML5 + Node.js environment) and the application's context is one where objects are only semi-structured, it can be a very good fit as the online database solution. However, as I was alluding to in the original tweet and expounded on in its follow-ups, it's an absolute nightmare to try to use MongoDB as the source for any kind of reporting, and most applications need to provide reporting at some point. When you get there, you will have three choices:

  1. Drive yourselves crazy by trying to report from MongoDB, using Mongo's own query tools.
  2. Push off reporting to a 3rd party service (which can be a very, very good idea, but difficult to retrofit to contain all of your original data, too).
  3. Replicate the structured part of your database to another DBMS where you can do SQL or something very SQL-like, including reasonably accessible aggregations and joins.

The third option will unfortunately come with the cost of having to maintain two systems and making sure that all data and changes are replicated. If you do decide to go that route, please do yourself a favor and pick a system designed for reporting, instead of an OLTP system that can simply do reporting, when pushed to do so. Yes, that latter category includes both Postgres and MySQL - both quite capable as OLTP systems, but you already decided to do that using MongoDB, didn't you?

Most reporting tasks are much better managed using a columnar, analytics-oriented database engine optimized for aggregations. Many have spawned in the last half a decade or so: Vertica, Greenplum, Infobright, ParAccel, and so on. It used to be that choosing to use one might be either complicated or expensive (though I'm on record saying Infobright's open source version is quite usable), but since last week's Amazon conference and its announcements, there's a new player on the field: Amazon Redshift, apparently built on top of ParAccel, priced at $1000/TB/year. Though I've yet to have a chance to participate in its beta program and put it through its paces, I think it's pretty safe to say it's a tectonic shift on the reporting databases market as big or bigger as the original Elastic Compute Cloud was to hosting solutions. Frankly, you'd be crazy not to use it.

Now, reporting is reporting, and many analytical questions businesses need to solve today really can't be expressed with any sort of database query language. My own start-up, Metrify.io is working on a few of those problems, providing cloud-based predictive tools to decide how to serve customers before there's hard data what kind of customers they are. We back this with a wide array of in-memory and on-disk tools which I hope to describe in more detail at a later stage. From a practical "what should you do" point of view though -- unless you're also working on an analytics solution, leave those questions to someone who's focused on that, turn to SaaS services and spend your own time on your business instead.

Tuesday 6 November 2012

Do yourself a favor when looking for an Internet connection, stay away from Elisa Viihde

This post is a local public service announcement for my Finnish friends. I'm sorry if this comes off as whining - I just want to document this publicly, and, as you might notice, I'm a bit annoyed. Although I tried to do some research into this before subscribing to my Internet connection, and even asked my Facebook connections about it, I never realized ahead of time what a piece of crap Elisa Viihde is as a service. So, as a warning to others: learn from my mistake, don't touch this thing with a ten-foot pole.

Our apartment building has what apparently is a fiber optic link to Elisa's network, so their service (under either Elisa or Saunalahti brand) is the default choice, unless I want to depend on 3G only (which, given the number of Wifi devices in our household, would not be very reasonable). Since Saunalahti seems to max out at 50/10 Mbps, and Elisa Viihde was advertised as 100 Mbps, plus it comes with a cloud DVR solution that got a few not-negative references, I went the latter path. The package is a Cisco VSDL2/Ethernet router with a .11n Wifi base station and an Elisa-branded set-top box manufactured by Pace, plus of course the actual net connection, delivered through Ethernet (despite the fact our connection panel actually has fiber links coming up to the apartment, too).

The net is not 100 Mbps, it's 100/10. Might be a minor detail, but it's well hidden in their brochures. Okay, still presumably faster than the next alternative. It's more expensive, too, by €10/mo.

So, what does that buy in terms of TV services?

Simply, the worst set-top box I've ever had the displeasure of using. The piece of crap spends 1-2 minutes simply turning on, if it's been off for more than a couple of hours. It never responds to remote button presses in less than a second, and frequently takes 5-10 seconds to do so. If you mistakenly think it didn't see the remote and press again - it buffered all that, and does several things in a sequence. Irksome as hell. However, it doesn't stop there. It also crashes or freezes randomly, and does not recover without pulling the plug on its power.

Apart from the set-top box, you might expect the service itself to be pretty good. I mean, it does look good on paper: iPhone, iPad, Android apps for controlling the recording schedules, a web site for doing the same, ability to view recorded shows on a PC or with an iPad in addition to the living room (via the above box, when it works), 5 TB of online storage ("2500 hours", in standard def DVB, at least), and a few other bits and pieces.

However, you can not watch a recording while its still broadcasting, or in fact until about 10-15 minutes after the scheduled broadcast time. Forget about timeshifting, in other words. Or pausing TV. Oh yeah, you could pause, by plugging a USB stick or portable hard drive into the box. Er, what's that 5TB of online storage for? Besides, if I want to timeshift onto a local device, my Samsung TV has a much more tolerable UI and response and is also capable of that same thing. I don't want that. I mean, this is what the online service is supposed to do for me, right?

Oh, and sometimes the recordings aren't actually recorded. They'll show up in the browser, "this or that, 60 minutes", but when you try to watch it, it'll be 50 seconds of the ending titles of the show before, and that's it -- not what you actually wanted to see. Now, I may be spoiled by the rich recording capabilities of my previous solution, a PC running MythTV, but this is just ridiculously bad. No DVR is this stupid. Keep your old DVR box. It's probably prettier and/or easier to hide than the round white blob, anyway.

Oh, but there's the cloud video on demand rental, too! Never mind the price, typically 6€ per movie (making two movies a month more expensive than the just launched Netflix service). Or that the selection, while perhaps slightly better in the movie catalog side than that of Netflix Finland, is still not great (nor does it have any TV series back catalog, like Netflix). Or even the fact that its search sucks ass, and the browser shows every movie twice (once as standard def, another time as HD), so you're scrolling twice as much as you're supposed to. No, the by far most aggravating fact of it is, that if you happen to watch movies, oh, I don't know, in the evenings after your kids go to bed, it probably will not get through the viewing without sputtering to a halt.

You might think I'm exaggerating, but I'm not. They gave some promotional vouchers for the movie rentals in subscription welcome package, so we've tried it a few times. EVERY time, at approximately 22:30 (so somewhere between halfway and the end, if you begin around or somewhat after 21:00, as you might) first audio drops out, then the video starts breaking up, and then the movie just halts. After three such experiences and following some guidance from Elisa's tech support (such as, bypass the comes-with-the-package router and plug your Ethernet uplink straight to the set-top box, etc), I've learned that the problem will go away 15-20 minutes later, but in between, don't even try to continue with the movie. Hey, movies are designed to be watched in two parts, right? That's why they have an intermission in the theaters, too? Er... they don't?

The same problem affects all IP-delivered HD channels, too. While I can't completely rule out the possibility that it's the set-top box which just decides to crap out every evening at 22:30, my own experience building and operating Internet services leads me to suspect the fine folks running Elisa's data centers (hey, guys, long time no talk) simply have decided to run their backup scripts at prime time, have no monitoring for service quality, and overload their backbone capacity. Genius.

Top this off with a customer service which responds to questions, complaints, technical support requests etc with a 3-4 day delay, and you have what I would call a perfect package. Welcome to the market, Netflix. I'll forgive your lack of recent titles in the local catalog. At least your service is integrated directly to my TV (Samsung Smart TV, as noted previously), is also available over all the same mobile devices and shows me what I chose to watch in hi-def without forcing me to go in tech troubleshooting mode in the middle of every movie. You're SO going to win Finland.

Now, to find a way to cancel this subscription..

Saturday 1 September 2012

Make Amazon EC2 control go faster

Do you run enough EC2 systems to care about the time it takes to start one or check its status, but not enough to justify an account at Scalr or RightScale to manage them? Do you care about automating instance management? Are you working in a team where several people need to provision or access servers? If so, consider this quickstart to a better way of setting up you cluster. Apologies for the acronym soup - blame Amazon Web Services for that.

  1. Turn on IAM for your AWS account, so that you can create an account for every team member separately. While you're there, I'd also recommend you turn on Multi Factor Authentication (MFA) for each account. You can use Google Authenticator (Android or iPhone) to provide you the MFA tokens, even if you're not securing your Google account with it. Thanks, Tuomo, for pointing that out, I had thought MFA depended on keyfob tokens.
  2. Don't leave IAM yet. Go to the Roles tab and create a new Role (I call mine InstanceManager) with a Power User Access policy template.
  3. Move on to the EC2 management console and create a new instance. It has to be a new one, you can't associate this awesome power with anything you have already. For practice, use the Quick Launch Wizard -- I'll go through this step by step.
  4. Name your instance. I call mine Master. Lets assume you already have a Key Pair you know how to use with EC2. Choose that.
  5. Choose the Amazon Linux AMI 2012.03 as your launch config. Hey, it's a decent OS, and if you like Ubuntu better, you can repeat this with your favorite AMI later once you know how it works.
  6. Choose Edit details on the next page of the wizard. We'll do changes in several places.
  7. Make the Type t1.micro, you don't want to do much more than manage other instances on this one so it doesn't need a lot of oomph. I would recommend turning on Termination Protection to avoid a silly mistake later on.
  8. Tag it like you wish
  9. If you're using Security Groups (warmly recommended!), choose one which has access to your other servers.
  10. Here's the important bit: on the Advanced Details tab, choose the IAM role you created earlier (InstanceManager, if you followed my naming).
  11. No need to change anything in the Storage config. Click Save details, then Launch.

The instance will come up like any other, you'll probably know how that works. If you're used to something else than Amazon Linux, this one expects you to log in as ec2-user, and you can sudo from there to root. Set up your own account and secure the box to your best effort, since this one holds the keys to everything you're running on EC2.

Now, why did we do all this?

  1. Log in. With a regular account, no root, no keys copied from anywhere else.
  2. Type ec2-describe-instances to the shell.
  3. Witness a) fast response b) with all your instances listed. a) comes from running inside the AWS data center, and b) is the IAM Role magic.
  4. Rejoice how your teammates will not need to manage their own access secrets. You did secure the master account and SSH to this box, right?
  5. Try to launch something else. Yup, it all works.

Setting up the IAM Role and associating one to an instance through the command line is somewhat more involved, so this is much easier to do from the web console as above. The IAM docs do tell how, but I wasted an hour or two getting my head wrapped around why the console talked of roles, but the API and command line needed profiles (answer: the console hides the profiles beneath defaults). If you wish to have your own applications manage pieces of the AWS infrastructure, and hate the hoops you have to jump through to pass the required access keys around, IAM Roles are what you're looking for, and you'll want to read up on the API in a bit more detail. Now you've been introduced.

Wednesday 30 May 2012

Evolution of database access - are we making a full cycle?

10gen's new massive funding round ($42M, great job guys) for MongoDB development, monitoring and support services has again caused a cascade of database-related posts in my Twitter feed and elsewhere. Many of these seem a bit one-sided to me, I think it would be good to look at where we came from before we decide where the future will take us.

SQL is built from the concepts of set theory. It's great when you're accessing aggregates, intersections, subsets, and so forth. It was developed for a real need: earlier databases forced a key-by-key API on people who were not necessarily as interested in individual records as they were in collections of those records. SQL also supports manipulation of individual records, but that's not at all where its powerful features reside.

Early databases stuck an SQL interface on record-based storage systems, which then continued to evolve to support various kinds of indexing and partitioning strategies for higher performance. These turned out to be much more reliable and easier to manage than most contemporary alternatives (such as files, horror), so applications began to be built on top of a database accessed via SQL. Many such applications were really using the database for storage of individually managed records, thus using only the least-powerful features of SQL.

Along came ORM tools, designed to hide the boring SQL bits from the application developer, whose interest was in manipulating and displaying individual records. Sadly, since ORM lives between the application and the database, changes on either side would still need to be manually reflected on the other - which is why "SQL makes developers unhappy, and MongoDB does not". The lesson here is very simple: if your application manages individual records, such as users, products, orders, etc, develop it with technologies which make record manipulation easy, and allow easy evolution of the record schema. MongoDB is great at this. It also scales well and is pretty easy to manage. It's not the only one of its kind, but it's good at this in a way most row-based SQL databases (MySQL, PostgreSQL, Oracle, MS SQL, etc) will never be.

But SQL is still great at set theory. Reporting, analytics, etc still need aggregates more than record-by-record access to data. MongoDB is dreadful as a back-end for complex analytics (a sub-standard MapReduce interface is not a solution). Its storage model is designed for real-time access and memory-resident objects and thus is really un-optimal for truly large scale data storage. Any data for which the primary use case is aggregate reporting or complex analytics, such as event metrics (like what we do at Metrify.io) needs something else in addition to records. Columnar engines with SQL query frontends are a much better fit. They'll compress massive data sets to much smaller storage requirements, thus improving the aggregate performance over terabytes, scale query execution over cores and nodes (thanks to dealing with much larger, thus easier-to-split data set at once), and retain a business analyst interface that is much friendlier than an object API.

I do agree on one part of the NoSQL idea: for record-by-record application models, SQL is an unnecessary middle-man. Just don't forget there are other models, too.

- page 1 of 24