elmarschraml.com

Occasionally updated personal site and blog

Category Archives: Uncategorized

Slides from code.talks commerce

Thanks to everybody attending my talk “Commerce as a Service vs Commerce as a Monolith – 2 Flavors of Hybris compared in Practice” at the code.talks commerce conference 2017 in Berlin.

Feel free to download a PDF of the slides used in the talk:
hybris_monolith_microservices

Images are compressed to reduce the file size; if you’d like a high-res version, or just to talk about any of the topics mentioned, get in touch with me.

Advertisements

Falsehoods Apple believes about professional mac users

In the spirit of great posts pointing out the difference between programmers’ assumptions and the real world (like namesaddresses and time), here’s a more satirical, but sadly true, take on Apple’s new Macbook Pro.

16GB of RAM should be enough for anybody. After all, nobody has more than a handful of browser tabs open. And hardly anybody uses virtual machines. All browsers for testing run on macOS. Application’s memory footprints are not growing.

When you ask professional mac users what their biggest problem with their mac is, they all tell you “I wish my machine was 2 millimetres thinner”.

Shaving off half a pound of weight really makes a huge difference once you have put the computer in a bag, together with its charger and a bunch of accessories.

Every computer user wants a thin-and-light laptop. We should never, for any reason, compromise on thin and light.

Battery life is more important than power, memory or ports. But not more important than a second screen and an extra ARM chip to drive it.

Customers do not care if the brand new computer they paid premium prices for contains outdated chips. I mean, come on, it’s like so uncool to know what a processor is.

Nobody ever forgets to bring along an adapter. And all conference rooms are equipped with mac-specific inputs to brand-new projectors anyway, so you never have to be afraid to be stuck without a way to connect your computer to an ancient VGA port.

Everybody uses Wifi everywhere, even conservative, security-conscious large organisations (i.e. the kind of organisation paying top dollar for custom software development)

Nobody needs Ethernet, since WiFi is always as fast and as reliable as a cable.

When you order a computer, you always know exactly what you will need in the next 2 years, so there’s no need to upgrade. And computers are so cheap you buy a new one every year or so anyway. Especially since setting up a new computer with your applications and configuration is so quick and fun we don’t even provide Firewire transfer any more. All your data lives in the cloud anyway.

A touch surface is just as good as a button. I mean, who touch-types in this day and age?

The cursor keys are hardly ever used, so we can make them any size or shape that makes the keyboard look nice and symmetrical. Symmetrical is, like, super important.

When we switch to all-new ports, within a year or so people will get all-new devices anyway, so that problem goes away really fast. I’ve never seen a peripheral older than a year or two in the wild.

Since everybody has a smartphone, nobody uses cameras any more.

What else would you need ports for besides charging and displays? All data is easily transferred via internet, and a laptop is super ergonomic to use all day without an external keyboard or mouse. Speaking of mice, it’s all about touchpads these days, everybody prefers those over a mouse.

Still complaints about ports? Fine, get a Thunderbolt 3 docking station. Lots of choices for those, and super cheap.

Magsafe was a nice idea, but it turns out it has no practical use, since people tripping over a laptop’s power cable is only a theoretical problem. In practice, you only plug in to charge overnight anyway. Batteries last a long time used that way, no need to ever replace them.

If you’re an apple user, you won’t care if we charge a couple hundred bucks more.

We DO give people choices. You can choose between “no power and no ports”, “3 year old hardware” or “more than 2000 bucks”.

All this is coming from from a position of love, not hate. I’ve been using Macs since before it was cool, and I’m still hoping to again see a “Pro” Mac where Pro means “for Professionals” rather than expensive and fashionable.

Slides from WJAX

If you’ve seen my talk about web application architecture at WJAX 2015, and would like to download the slides, you can download them here:

WJAX 2015 – Mobile, microservices and multichannel.pdf

If you are interested in learning more about some of the topics mentioned, I’ve previously collected a list of blog posts, articles, videos and other resources here:

https://elmarschraml.com/2015/03/25/shownotes-for-my-talk-at-mobiletechcon-2015/ 

And if you’d like to talk about any of these topics, I’m always happy to talk shop on Twitter (@elmarschraml), via email or whenever we meet in person.

Slides from my talk at MobileTechCon 2015

Thanks to everybody attending my talk “Mobile, Microservices und Multichannel – warum Web-App-Architektur sich ändern muss” at the Mobile Tech Conference 2015 in Munich.

Feel free to download a PDF of the slides used in the talk:
MobileTech2015 – mobile, microservices, multichannel (images compressed)

Images are compressed to reduce the file size; if you’d like a high-res version, or just to talk about any of the topics mentioned, get in touch with me.

“Shownotes” for my talk at MobileTechCon 2015

In the tradition of podcasts providing a list of links to things that were talked about, here’s a few pointers for further information about some of the topics I mentioned in my talk titled “Mobile, Microservices und Multichannel – warum Web-App-Architektur sich ändern muss” at the Mobile Tech Conference 2015.

Html5 browser support:
http://caniuse.com/

Mobile hybrid apps
https://signalvnoise.com/posts/3743-hybrid-sweet-spot-native-navigation-web-content

Single-page applications:

Twitter pedaling back on SPA
https://blog.twitter.com/2012/improving-performance-on-twittercom

 

Microservices

List of presentation slides from microxchg.io conference
https://gist.githubusercontent.com/sebeichholz/a107d81d4cc0bf0327de/raw/c8632c21b543c28319d84300810385f29257cd46/gistfile1.txt

Netflix on microservices:
http://techblog.netflix.com/2015/02/a-microscope-on-microservices.html

The twelfe-factor app:
http://12factor.net/

 

New approaches to architecture

Reactive manifesto:
http://www.reactivemanifesto.org/

 

airbnb on isomorphic apps:
http://nerds.airbnb.com/isomorphic-javascript-future-web-apps/
http://nerds.airbnb.com/weve-launched-our-first-nodejs-app-to-product/

 

Eric Sink on Zumero:
http://ericsink.com/entries/announcing_zumero.html
http://erikej.blogspot.de/2014/04/shop-talk-with-eric-sink-zumero-for-sql.html

 

Dropbox APIs presentation from Nordicjs 2014

 

Middle end:

http://blog.getify.com/what-exactly-is-the-middle-end/

 

InnoQ on self-contained systems
https://www.innoq.com/de/links/self-contained-systems-infodeck/

 

Tools

Facebook BigPipe:
https://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919

 

Compoxure:
https://www.npmjs.com/package/compoxure
View story at Medium.com
http://dejanglozic.com/tag/compoxure/

 

Introduction of React native:

 

Packaged apps:
Dropwizard http://dropwizard.io/
Spring boot http://projects.spring.io/spring-boot/
docker.com

 

Facebook on Apache Thrift:
https://code.facebook.com/posts/1468950976659943/under-the-hood-building-and-open-sourcing-fbthrift/

 

Log Aggregation:
http://brewhouse.io/blog/2014/11/04/big-data-with-elk-stack.html
http://www.sixtree.com.au/articles/2014/intro-to-elk-and-capturing-application-logs/
https://www.graylog.org/

 

Distributed tracing:
Twitter Zipkin https://blog.twitter.com/2012/distributed-systems-tracing-with-zipkin
Google dapper paper: http://research.google.com/pubs/pub36356.html

 

Hystrix circuit breaker:
Intro by Netflix: http://techblog.netflix.com/2012/11/hystrix.html
Tutorial by InnoQ: https://www.innoq.com/de/articles/2014/08/hystrix-artikel/

 

Twitter finagle:
https://blog.twitter.com/2011/finagle-a-protocol-agnostic-rpc-system
github: https://twitter.github.io/finagle/

 

Netflix Chaosmonkey etc:
http://techblog.netflix.com/2011/07/netflix-simian-army.html

 

Best blog on all things javascript and ES6:
http://www.2ality.com/

 

Web components:
tech site: http://webcomponents.org/
implementation: https://www.polymer-project.org/0.5/

 

Why Apple bought Beats? Beats me.

So the long-rumored acquisition of Beats by Apple has been confirmed, with press release and all. Which tells us precious little, except “Beats is awesome” and “Music is really important to us”.

So why did Apple buy Beats?

Let’s look at possible reasons why companies buy other companies, and see if the beats deal makes sense if looked at it this way, and makes sense specifically for Apple

 

Growth

Ben Thompson at Stratechery  thinks that Apple’s share price can only be justified by growth, and they need to buy a cool line of high-margin accessories. Which is interesting, but in my not-so-humble opinion wrong:

Apple’s stock has a P/E ratio of 15 – i.e. the company is valued at 15 times their current annual profit. Which is not terribly low, but definitely not a level where you need crazy growth to justify it. For comparison: Google’s P/E is 30, Facebook is at 80, and Amazon is at a whopping 500. In other words: nobody would buy Facebook’s or Amazon’s stock if it promised to make as much profit as it’s making now forever. But Apple? They return a solid 6.7% of profit on the invested capital – that’s more than e.g. super-high-risk (that country that just went broke and stiffed it’s lenders, remember?) long-term greek government bonds . And Apple’s valuation is more in line with some steadily profitable, but not exactly growing, companies like IBM (P/E of 12.5 ) or Microsoft (P/E of 15). In other words, in order to justify its stock price, Apple has to grow as much as Microsoft. No need to buy a headphone maker for that.

 

Price

If a company is up for sale at a good price, it can be worth buying it just to take advantage of the low price, and possibly sell or IPO it later.

Since beats was not a public company, i.e. not traded on a stock exchange, we don’t know how much other companies would have paid for it. Luckily there were some publicly announced financial transactions around Beats: HTC bought a significant stake in beats  in August 2011 at a valuation of 600m, then sold half of that stake again  in Jul 2013 at roughly same valuation, and sold the other half in September 2013 at a valuation about $1 billion. There’s also some quasi-official information about an investment by Vivendi in 2013 Vivendi which valued the beats company at $1.6 billion.

Which would point to a reasonable valuation somewhere around $2 billion – which means the beats aquisition was definitely not a bargain.

 

Profit

Gruber at daringfireball thinks it’s a straightforward combination of profits, assets and people. Let’s start with profits.

In 2011, beats had about  $50 million of revenues. They “tripled revenue” in 2012, but while switching to manufacturing the headphones themselves (before that, beats was a pure brand – they did not actually make anything, just promoted the beats brand. The beats headphones were made and sold by Monster cable (yup, that company behind ridiculously overpriced cables), and Monster cable paid beats a percentage of sales for the right to put the beats logo on their headphones).

According to privco.com, in 2012 beats made a$67 million profit on $1.1 billion of revenue, which would point to a fair value somewhere around $1 billion. Fastcompany thinks they might have had $ 1.5 billion revenues in 2013 – good growth, but not the kind of exponential growth possible with software companies. Manufacturing means that growing revenues also require more capital, and lead to higher risks, so privco.com thinks beats was overvalued.

And the streaming service? It’sreally young – beats only bought it as “Mog” in 2012 for a price somewhere around $10 million, and apparently has only about 100,000 registered users, so it’s not a significant source of revenues or profits. Even if every single one of those subscribers was paying 10 bucks a month, and continue to do so for 10 years in the future, the total lifetime value would be less than 5% of the purchase price of beats.

Overall, the beats aquisition would have been expensive for anybody – and Apple definitely does not need the cash flow. Neither are they desperate to invest – they have shown to be quite happy sitting on a huge pile of cash.

 

Assets

Another possible reason to buy a company is to get into a new line of business, to buy instead of building your own.

Now Apple certainly does not need to enter the headphone business, and headphones make little sense as an adjacent business. In fact, with the ipod hi-fi, Apple has shown in the past that they are perfectly capable of making audio gear, but at the same time that it’s not a good business for them. And while Apple has frequently bought companies for their technology, skills or as add-ons to their existing business lines, they have never bought a company for their brand, or to get into a new business.

How about the streaming service?

Music streaming is booming, and the larger players like Spotify would probably be crazy expensive to take over at current tech valuations. On the high side, Beats is thought to have only 200.000 subscribers  (compared to, say, Spotify’s 10 million), and most of those come from a marketing deal with a major provider. Which might still be a good base for another company wanting to get into the music streaming business.

But of all the world’s companies that might want to get into streaming, Apple is probably the least in need of buying an existing streaming service – they already have the tech tech experience, the distribution and the record label deals. Now a successful streaming service would probably have to support Android, and using the beats brand might be a convenient way to not have to support Android with anything Apple-branded – but Apple has shown in the past (think iTunes on windows) that they are perfectly willing to be on rival platforms if it makes business sense.

 

People(“Aqui-hire”)

Another reason to buy a company is to get the founders on board, for their unique talent or connections. Now Dre and Jimmy Iovine certainly are industry insiders. But again, Apple does not need an in with the music industry. And an aqui-hire is usually something along the lines of “really large signing bonus”, not several billions. The deal is simply way too expensive to make sense this way.

 

Synergies

Another common justification for a merger is “synergies” – i.e the combination of two companies being worth more together than separately. Which is usually about fixed cost overheads (needing e.g. only a single accounting department) or market power – not something that’s applicable to beats.

Are beats and Apples as a combined company worth more than separately? Maybe a little bit – there are opportunities for joit marketing, distribution integrated into apple stores, hardware bundles, and the like – but nothing you couldn’t do as a limited-area partnership without having to buy the company outright.

German site neumusik.com thinks it’s about industry contacts, the streaming service, and “wearables”.  Again, those are nice things to have (except headphones as a prototype for wearable computer thingies? come on.), but nowhere close to being worth that much money.

 

Financial shenanigans
Sometimes a deal seems to not make sense, until you notice some completely unrelated financial fundamentals. E.g. for a while Yahoo’s stake in Alibaba was worth more than the whole of Yahoo, or Pfizer wanting to buy AstraZeneca simply in order to invest money outside the US for tax reasons.
So maybe beats has better licensing deals with the music labels? That would certainly move the needle for Apple, seeing how they pay more than $3 billion a year to the record labels. If beats has a licensing deal that is only 10% cheaper, that would nicely amortize the purchase price.  Well, it’s possible, but unlikely. It’s unlikely that the much smaller beats would get a better deal than Apple with its huge, market-dominating iTunes store. Plus, record labels have non-stupid lawyers – most likely any licensing deal beats has would have a takeover clause that voids exactly the advantages mentioned in the event of a sale.

 

Desperation

It happens that a company is bought because it has something another company desperately needs at any price. Think e.g. Google having to buy the whole of Motorola just to get some ammunition for the mobile phone patent wars. Or Instagram threatening Facebook’s hold on its target demographic to the point where it safer to bascially throw money at them to make the threat go away.

The only thing like that beats has I can think of is “coolness with young people”. Apple is old, mainstream and established by now, and in danger of losing it’s counter-culture underdog coolness. Whereas beats has massive brand presence with teenagers.

That might be a factor, but I sorely hope it’s not. For me, beats represents everything negative Apple is frequently falsely accused of. Beats is a  lifestyle fashion fad instead of offering premium products, is using distribution and advertising instead of making a better product. The beats brand is built on glamour and celebrities, rather than standing for something.

Now there are some signs that Apple is starting to think about the lifestyle, luxury and fashion aspects of its brand – things like hiring people from the fashion and luxury industry. But I’m hoping that that’s about some specific aspects, like the retail experience. Overall, if Apple should have bought beats in order to become more like beats, it would be a quite radical departure for them.

 

Stupidity

Sometimes mergers happen for the simple need to do something, and the inability to find any other good way to invest profits. But Apple management is simply too smart to throw money away just to do anything. And if they wanted to get rid of  excess cash, all they’d have to do is increase dividens, or put more money into the already existing huge share buyback program (essentially distributing profits to the shareholders).

They do need a new product line – but compared to, say, reinventing the cell phone industry, headphones are boring, and not a big enough market to move the needle. And streaming? Well, it’s 2014 – it would be pretty crayz to want to get into the content distribution industry at a price tag of §3Billion

 

Summary

Usually there is one big reason for buying a company. In the case of Apple buying beats, I simply don’t see it. Forced to come up with a reason, I’d have to go with “for the cool brand” – but as previously mentioned, I would hate for that to be right. Or maybe there is some financial result that is worth more than 3 billion – I can’t see that, and if that should be the case, quite possible nobody outside Apple knows.

Javascript I love you, but you need to clean up your mess

We are finally reaching the point where dropping support for IE7 is pretty much a given, and the time when IE8 support can be dropped for even conservative audiences draws nearer. So we can finally join the brave new world of fully dynamic rich client applications written in cross-browser supported standard javascript. Well, not quite so fast…

Modules

Too many global functions pollute the global namespace, and your code becomes a mess, so after coming up with an only slightly less messy object structure, you decide to use a module system. Except javascript has no module system. Luckily, some people created substitutes. There’s AMD/require.js, or commonjs on node which you can use on the browser using browserify. Or you roll your own. Or the language itself will introduce a module system with the next version. Of course, any library you use may use either of those solutions, or none at all, and may or may not play nice with your choice. Anybody reminded of the Java logging situation, and what a joy that is?

Language

JS is a mess. So everybody clean it up and extends it in his own way. Until ES6, which might clean that up once it’s ratified and widely supported, some time in 2016 or 2017. In the meantime, you can use some ES6 features, and transpile to ES5 using Traceur. Or use Coffeescript and compile to JS. Or TypeScript, which is almost like some parts of ES6.

Templating

How many ways does one need to say “Take this text file, add code/params/data according to the keywords present in the text, and have the outcome be HTML”? According to the javascript world, at a minimum a choice of Jade, Handlebars, Mustache, Underscore templates, EJS,… – and those are just the ones most frequently seen in the wild.

JQuery

I love Jquery, and so does anybody who ever had to do DOM manipulation without it. And at least DOM manipulation is an area where everybody seems to have come to the same conclusion, which is to use JQuery rather than Prototype, Dojo or whatever else was briefly popular. So since everybody uses JQuery, you might also use it for utility functions, handling Ajax calls, providing UI components, and so one. Or not, or just for some of those. So for every kitchen sink query adds, any project might now do it the standard javascript way, the jquery way, or use some other library.

New Flavors of the month

So you found out that Jquery makes it really easy to add cool effects and do dynamic changes, and all was good. Then you added so many of them, that pages had several hundred lines of spaghetti code, and that was unmaintainable. So people came up with Backbone as a way to structure applications, and you rewrote your site, which was a lot of work, but was good. And then other people became more ambitious, and created Ember and Knockout and Angular, and now you’re tempted to throw away your 6 months old rewrite, and rewrite again.

It’s hard to promote Javascript (and when I say Javascript, I really mean the whole JS/HTML5/CSS/Client-sideMVC/browser-as-real-application-platform shebang) as a valid development platform as long as the platform is a rapidly moving target.

In the long term, betting against Javascript is usually an error, and I look forward to using cross-browser EcmaScript6 with a common stack of stable libraries. In the meantime: learn, experiment, prototype, promote and use the brave new Javascript world for the most compelling use cases.

(Post was inspired by somebody else’s decision to needlessly re-implement an existing, pretty conservative web application with AngularJS – something which the techie imp sitting on my left shoulder would just love to do, while the business imp sitting on my right shoulder cries…)

What the ipad is good for – a real-life review after a year of owning one

This is not an ipad review – there’s little doubt the ipad  is the best tablet on the market.
Rather, I’m trying to answer the question “Do I need or want a tablet at all?”, a.k.a. “Is there really a gap between smartphone and laptop?”.

The answer:
It’s the two-seater convertible sportscar of computers: It cannot do everything my laptop does, and there is nothing it does that the laptop could not. But the things it does do are just more fun with it.

Disappointments:
Text entry is really annoying. Even if you split the keyboard, so you can actually reach all the keys with your thumbs while holding it at the edges. Forget answering emails; just entering a url when browsing the web is annoying enough that I use bookmarks heavily, something I don’t do on any other machine. I’m pretty sure I even type faster on my iphone. A note-taking machine the ipad is not, to the point of seriously considering getting a stylus and handwriting app.

It’s heavy (note: speaking of my ipad 3 here – the new air is much better in this regard), and has sharp edges, both of which makes it uncomfortable to hold for longer reading sessions. The screen size is nice for letter-sized pdfs, but it’s not a kindle replacement.

It’s unusable in direct sunlight. Well, not entirely unusable, but definitely unpleasant. Even on the highest brightness setting, the screen looks washed out in bright sunlight. Combined with the glare of the glass cover, forget about websurfing on the balcony.

It’s large, heavy, fragile and expensive. Not really a mobile device, in the sense of using it on the go. More like a mobile device in the sense of a computer that’s easy to take along to use somewhere else.

I expected to use it as a second display for my laptop, using the AirDisplay/DisplayPad app. Unfortunately, it’s a really cool idea, but it doesnt really work. The ipad display looks weird next to my Macbook pro, with different brightness and color temperature; the screen looks fuzzy at non-retina 1024×768 resolution, and it’s just small enough that I have to resize most windows before moving them over. And it’s relly laggy – I never expected to play video, but just dragging or scrolling a window is juttery and laggy to the point of being usable, but no fun.

File transfer sucks. I don’t want to open itunes and sync the ipad just to transfer a file from my laptop to an ipad app. It needs a usb port for transferring files from a usb stick yesterday. Unfortunately, apple’s philosophy of “never let the end user see the evil filesystem” guarantees that will never happen. App developers deal in two ways: either access the user’s dropbox account, or add an FTP-via-Wifi server mode to the app. Both works, but it feels hacky to jump through that kind of hoops just to transfer files from my laptop to the ipad lying next to it.

Pleasing:
The display looks great. Really, really great. Photos look awesome, coming much closer to showing full details than a regular computer screen, and text looks perfectly sharp.

Battery life is long enough not to worry about it.

It retains the feeling of the iphone, of not being a computer, but an appliance that just works. No crashes, no spinning beach ball, no drivers, no installers, no nagging update messages.

Surprising:
It’s not a big iphone. The set of apps I use on the iphone and on the ipad barely overlaps. On the iphone it’s mostly real mobile apps – things you need quickly, use for a short moment, and that depend on your location – like finding the nearest ATM, looking up a subway timetable, or whiling away the train ride with a few quick levels of a puzzle game like cut the rope. On the ipad, it’s much more of a sit down and take your time mode, I’m more likely to edit the pictures from the latest trip in iphoto, or play monkey island for an hour.

It’s one of those products that computer-illiterate people somehow manage to use. To an IT professional, it’s a little more pleasant to use than Windows or Android. To a non-geek, it’s the difference between being able to use it instantly, and maybe being able to use it, with lots of learning and worrying. I couldn’t even say why, but some tech products just have that effect. Take facebook, for example – to me, it’s just another mediocre website, but to any airhead teenager it’s somehow possible to use facebook, while being lost on any other website. All I know is that if some random guest needs to access the internet at my place, they’ll be stumped by my mac, but be able to use the ipad. And even my father, who’s as far from a tech enthusiast as you can get, took naturally to swiping through an album of pictures, without even realizing that he was holding a computer.

Usage:
So what is it actually good for?

A really mobile computer.
My MBP is more like a desktop – powerful, full-featured, but heavy, and cumbersome to pack or unpack, needing a power supply, mouse, etc. The ipad is something you just grab and go, and it’s small and light enough to just throw it into any bag you’re carrying, rather than needing a dedicated laptop bag. It’s great for taking along on trips, surfing at the local coffeeshop, keeping yourself entertained on train rides and the like.

A video player
The girlfriend and me like to watch tvshows at night, which we miss when, say, we’re on vacation in a foreign city, and looking to relax after a day of sightseeing. I’m not gonna pack a heavy, expensive laptop just for that, but an ipad is just fine. Note that if what you’re looking to watch is not on itunes, you’ll have to go against the grain of apple’s world. AvPlayer is really good at playing anything without having to re-encode it for ipad, and comes with it’s own ftp server, so you can upload any file directly without having to got the add to itunes library/add to files/sync/delete from library route.

A photo album
Want to show pictures to someone, without him having to be at his computer? The iphone screen is too small, a laptop to cumbersome, printing the pictures too annoying – the ipad is perfect as a photo screen.

A web appliance
Want to quickly look up the weather? It’s available the instant you open the cover, no booting necessary, or even sitting down. And wasting some time on hacker news is much more pleasant with an ipad on the couch, than a laptop at a table.

A games console
I didnt really want to get an ipad to play games – I really don’t need a new and better way to waste time. But it’s really great at playing games that are not just quick 5-minute-games as on the iphone. Genres that requires a joystick or d-pad still don’t work well (I really wonder why nobody has produced a gamepad accessory for the ipod connector?), but for adventures, RPGs or board games it’s pretty perfect. For someone like me, who does not like to play games sitting at the desk (feels too much like work), and doesnt own or want a dedicated console, it’s great to play the occasional game. Playing, e.g. a traditional RPG like Avadon using your fingers while sitting on the couch is pretty great.

An ereader for tech books
It’s too large, heavy and expensive to use it the way I use the kindle, i.e. the always-with-me library. But it’s great for reading letter-sized PDF files of tech books. O’reilly sells some cheap ebooks, but reading them on the screen is not so comfortable. On the ipad, I can now read them on the couch.

Paper replacement
Anything that is basically a stack of paper can be replicated by the ipad. Think sheet music, real/fakebook for musicians, recipes, etc. So if you have the ipad with you, you’ll never again think “If only I had that with me”. It does not seem useful at first, but the advantage is that “paper” on the ipad takes up no space or weight, so if you have your ipad with you, you have all paper-pased resources with you. I remember a trip to Amsterdam to see friends, where we were sitting round a campfire, had a guitar, and felt like singing some songs, but nobody knew any by heart, and nobody had lyrics or chords with him. Now I have. It’s also great for board games. My girlfriend and me like to play boardgames, but since we don’t live together yet, it seems like the game we want to play is always at the other’s flat. If I take the ipad, I have Settlers, Chess and Carcassonne always with me. It’s not that it’s better to play there, it’s more like I’m gonna have the ipad with me anyway, so I’ll have Carcassonne with me too, without having to carry anything extra.

Bite-size information
As mentioned, it’s too uncomfortable for reading novels, but it’s pretty much the perfect client for Instapaper. Or looking through that presentation from last week’s conference. Or even reviewing your own slides while on the subway to the venue where you’re about to give a talk.

How to compete with Google in Search

To google something has become a verb. Google search is the overwhelmingly largest source of traffic for many sites. Google’s market share in most markets is higher than its competitors combined.
Google has brand identity, search quality, technological quality, and page speed down pat.

So how would you compete with Google search? (Not that google search is bad, but a little friendly competition is always a good thing, and it’s interesting from as a thought experiment).
Frontal assauls (doing the same thing as google, but trying to be better) like yahoo and MSN have hugely failed. In fact, dominant market positions are seldom eroded by frontat assaults, but rather by changes in market demand. The reason why Microsoft has lost so much influence to Apple is not that Macs have replaced windows (globally, Mac OS still has a tiny, if profitable, niche of the PC market), it’s that the market demand shifted so that the whole category of PCs became less relevant since the introduction of smartphones and tablets. Likewise, if ebay sales decline, it won’t be because somebody builds a better auction site (network effects are just too strong for that), but because somebody invents a better way to sell stuff than auctions (like the ability to sell used books back to amazon).

So what are Google’s weak points?
– google does not trust humans -> it cannot use e.g. a human-generated catalog
– google is the no.1 target for spammers, the same way windows is the no.1 target for malware -> a smaller rival might be unnoticed/not worthwhile for spammers, and therefor be able to offer better quality, at least for a while
– google sucks at / has no customer service. That is a good thing, cost-wise, but also keeps people away that require more hand-holding.
– google is run by engineers, so it under-values things like design, and other emotional, touchy-feely topics.
– google is huge, so serving small niches is not interesting.
– google does not understand multiple meanings of a word (for eample, “go” could mean the game, verb, or programming language) – although that is probably the kind of hard compsci problem that google is best at solving

Ideas for competition:
– give me LESS, not more, results (but probably not from a huge human-generated index – that idea failed with the first iteration of yahoo…). E.g. when searching for reviews, google gives me spam and shops (yuck) and reviews from the big newspapers, what I want is 5 blog posts from people like me who have bought and used it, or a link to a great site like kenrockwell or dpreview for cameras)
– serving a single, canonical result. A lot of times, when I search google, I’m looking for something specific – say, the download link for a certain program, or the website of a known organization. Google is pretty good at finding that, but also gives me a lot of results I do not want, which sometimes leads to unwanted results (for example, there were some cases where, due to clever SEO, people looking to download the VLC video player got sent to sites that charged for the download). Finding those canonical links would be labor-intensive, but maybe you could farm it out on the cheap on amazon’s mechanical turk?
– serve a niche very well (flight search or weather are separate category from general internet search, what else can be served by a non-general search site? (technorati for blogs failed…)
– do something sales/service-intensive, e.g. a service where you need to sign up local small businesses. Needs a large salesforce, and therefor large investment, but e.g. yelp has done that successfully.
– rank pages by reputation / social links. For example, when evaluating some product or technology, it would be great if, instead of wading through a sea of marketing drivel, I could get all the links posted by people who follow people who I also follow on twitter, or articles written by somebody whose writing I previously flattered or saved to instapaper. Sort of the holy grail of the internet, apart from being a massive privacy headache.
– better, complex tools for slicing and dicing data, not just finding facts (cf. Wolfram Alpha – which launched hugely mispositioned as a google search competitor, but is actually great at certain specialized tasks)

My experience with pair programming

It spreads knowledge about the codebase
Since two people worked on the code, two people know intricately how it works, and can fix bugs in it without first having to spend time to learn the inner workings. Yeah, I know, in theory everybody should be familiar with everything, but in time-constrained practice you often have the same people fix bugs who wrote the code, keeping the others from getting to know the code of a feature. But even if only the people who wrote it know the code, if it was created by a pair, you already have two people who know it.

It spreads good practices
Even if you keep up with news about tools and practices, you can never know everything. Almost every time I pair, I learn something new – e.g. some eclipse keyboard shortcuts, a firefox add-ons for debugging, or a useful library class.

The code is better
You rarely write sloppy, “good enough for this one time” code – after all, the other guy will see what kind of code you write, and you don’t want to be embarrassed. And if you do, the other guy will point it out and correct it.

The design is better.
Two people have more ideas than a single person. If both are competent, they will agree to throw away the bad ideas, and combine only the good ideas of two people. As for APIs, two programmers think of different use cases, and make sure the API can handle them.

It avoids being stuck.
A lot of time is wasted when you’re stuck – situations where you’ve tried pretty much everything, and still can’t get your design or implementation to work. A second person will bring a fresh pair of eyes (and brain) and often think of exactly those things that you forgot. Or, in a case where you painted yourself into a corner, and have secretly felt that you should throw your efforts away as sunk costs and try a different approach, he will prod you to finally do just that.

It’s exhausting
I can program solo for long stretches of time, but when doing pair programming I usually take a break after two hours max. Paired sessions are much more intense, since they move faster, since (see above) you’re never stuck.

It’ only suitable for certain occasions
It’s a total waste to use two highly-qualified programmers to do simple, well-defined and understood tasks – examples: Defining a web form, setting up the base configuration for a project, or fixing selenium tests. It’s great, in short, for anything that is hard and new.

It’s expensive
A pair of programmers does move faster than a single programmer, but not twice as fast, so you spend more programmer time on a piece of code when doing pair programming. You do gain all the advantages mentioned above, though – so if it’s worth it really depends on the kind of work you do. In my experience, it’s best for integrating new developers in a team, and for anything that involves designing/implementing an API.