Posted in Books, iOS by Dan on November 9th, 2011

AppillionairesAppillionaires is a new book by Chris Stevens about the mobile apps gold rush. I received my copy from Amazon yesterday and within a day I’d finished it, which, if nothing else, is testament to its readability.

Stevens’ credibility on this topic comes from his first-hand experience as a successful publisher of interactive books for the iPad. Early in the book he draws on this experience to articulate the seductive appeal of a new world of possibilities for independent software developers.

Overnight we were a global sensation – newspapers and blogs all over the world were hailing us as the future of publishing. Watching the money roll in and the download statistics rise became a minor obsession. There’s something wildly captivating about viewing your successes through the microscope of modern analytic software. Second by second, hour by hour. It provides the kind of statistic fetishism where viewing download graphs by geographical region or time of day becomes an opportunity to self-indulgently wallow in your accomplishment.

Appillionaires focuses exclusively on the iTunes App Store and the iOS platform. The Android Market is mentioned only in passing and other stores not at all. This doesn’t detract from the book though as, in terms of paid app sales, the iTunes App Store is still a long way ahead of the competition and it’s not an unreasonable assumption that successful strategies there will translate to other similar platforms.

The first third of the book reviews how we got to where we are today. The Apple worship is kept to a minimum and the company’s missteps in the mobile phone market are covered along with its successes. In particular, and in contrast to recent revisionist histories, Stevens doesn’t gloss over the failure of the first iTunes phone, the Motorola Rokr. He also reminds us that third-party apps were not part of the original iPhone offering. Steve Jobs was apparently reluctant to open up the platform to outside developers and at first it was only through the reverse engineering efforts of the jailbreak community that programmers were able to target the device.

Following the history lesson, the meat of the book is the five case studies of independent developers who have earned serious amounts of money from the App Store. As you work your way through these chapters it becomes clear that the book isn’t really about mobile apps, it’s about iPhone games. This is my one major criticism of Appillionaires. Games are a huge part of the mobile app revolution but they are arguably the least interesting part. The book gives honourable mentions to a couple of novelty entertainment apps (iBeer and Pull My Finger) but there is no space devoted to productivity apps, or location-aware apps, or any of the tens of thousands of actually useful apps that are making things just a little bit more convenient for millions of people every day. If just one of the gaming case studies had been dropped in favour of something from some other part of the App Store it would have presented a more complete picture.

There are several points that recur in most or all of the gaming case studies:

  • Developers of successful apps have usually released several largely unsuccessful apps before they hit on the winning formula.
  • Successful apps rarely become successful straight away. Sometimes they go through several versions, refining the formula until it starts to gain traction with app buyers.
  • Successful developers pay attention to small details and don’t settle for “good enough”.
  • Successful iPhone games use control systems that are well adapted to the platform, with intuitive touch gestures.

The final section of the book is devoted to business considerations. Stevens discusses how independent game developers are competing with, and being acquired by, the likes of EA, how the vast majority of developers are losing money on app development, and the threat of patent trolls such as Lodsys. This section aims to disabuse the reader of the notion that the Appillionaire outcome is common or even likely. Throughout the book it is made clear that luck plays a large part in which apps become successful. Also, through the choice of examples from the frontier days of the iPhone platform, Stevens gives an impression that, aside from talent and hard work, success was also partly due to being in the right place at the right time and that that time may already have passed.

This is a book that is grounded in reality. The success stories are enticing but the app developer path is frequently portrayed as a form of gambling with many more losers than winners. The gambling analogy is apt. In most forms of gambling if you look beyond the players you’ll find that the real winner is the house. The genius of Apple’s ecosystem is that developers have been convinced to play cards in a poker room with a 30% rake.

Programming the Semantic Web and Beautiful Data

Posted in Books by Dan on June 27th, 2009

As I’ve mentioned previously, I’m a big fan of Toby Segaran‘s book Programming Collective Intelligence. It introduces several cutting-edge algorithms for building intelligent web applications through a well chosen set of compelling example programs . A different author might have made the book a dull, overly mathematical ordeal but Segaran manages to inspire the reader to find ways to apply these exotic techniques in their own projects. I was therefore interested to discover that he has since collaborated on two new books that will both be released in July.

Programming the Semantic WebFor Programming the Semantic Web, Segaran has teamed up with Colin Evans and Jamie Taylor. I was unable to find a table of contents for this book but the publisher’s blurb suggests that it will follow the same pragmatic, hands-on formula that worked so well for Programming Collective Intelligence:

With this book, the promise of the Semantic Web — in which machines can find, share, and combine data on the Web — is not just a technical possibility, but a practical reality. Programming the Semantic Web demonstrates several ways to implement semantic web applications, using existing and emerging standards and technologies. With this book, you will learn how to incorporate existing data sources into semantically aware applications and publish rich semantic data.

Programming the Semantic Web will help you:

  • Learn how the semantic web allows new and unexpected uses of data to emerge
  • Understand how semantic technologies promote data portability with a simple, abstract model for knowledge representation
  • Be familiar with semantic standards, such as the Resource Description Framework (RDF) and the Web Ontology Language (OWL)
  • Make use of semantic programming techniques to both enrich and simplify current web applications
  • Learn how to incorporate existing data sources into semantically aware applications

Each chapter walks you through a single piece of semantic technology, and explains how you can use it to solve real problems. Whether you’re writing a simple “mashup” or a maintaining a high-performance enterprise solution, this book provides a standard, flexible approach for integrating and future-proofing systems and data.

Beautiful DataToby has clearly been keeping himself busy because he’s also found time to co-edit the latest installment in O’Reilly’s Beautiful Code series. In 2007 the original Beautiful Code book presented an eclectic mix of 33 essays about elegance in software design and implementation, each written by a different well-known programmer. The success of this anthology has resulted in O’Reilly issuing three companion volumes in 2009: Beautiful Architecture, Beautiful Security and the forthcoming Beautiful Data: The Stories Behind Elegant Data Solutions (edited by Toby Segaran and Jeff Hammerbacher).

Beautiful Data follows the same format as the other books in the series, with each chapter authored by different expert practitioners. One of these chapters covers the making of the video for Radiohead’s House of Cards single, while another is about data processing challenges faced by NASA’s Mars exploration program.

Clearly I haven’t read either of these books because they are not available yet, so I can’t make any informed recommendations, but they do both look like they could be interesting.

SICP – The most divisive book in Computer Science?

Posted in Books by Dan on May 28th, 2009

Structure and Interpretation of Computer Programs (universally referred to as SICP) seems to be mentioned whenever people are discussing the great/classic/essential Computer Science books. It typically generates a mixed response. Somebody recently sent a copy (anonymously?) to Python creator Guido van Rossum, apparently as a comment on his supposed ignorance (incidentally, this is an incredibly arsey thing to do). It seems that SICP is a real love-it-or-hate-it kind of book. Depending on who you listen to, it’s either a mind-bending classic through which true enlightenment can be achieved, or it’s dull, obvious and poorly written. The distribution of the reviews for SICP on Amazon (UK) is striking:

Amazon SICP reviews

If you haven’t already read it, you can decide for yourself. The whole thing is available online. I didn’t get very far the one time I started to read it. I quickly got bored with the introductory stuff, but I intend to give it another go sometime. I’ve seen several people recommend the associated video lectures, which may be a better entry point.

Java Power Tools

Posted in Books, Java by Dan on October 13th, 2008

I’ve been keen to take a look at John Ferguson Smart‘s Java Power Tools since I first found out about it.  Fortunately, it has just been added to the ACM’s online books programme so, as an ACM member, I’ve been able to read it online.

The book consists of 30 chapters, each dedicated to a different development tool.  Build tools, version control, continuous integration, testing, profiling, static analysis and issue-tracking are among the topics covered.  For most tasks, more than one option is presented.  For example, the book covers both Ant and Maven, and JUnit and TestNG.  All of the tools covered are open source and freely available.

Java Power Tools

Some of the chapters will only be of interest to beginning Java developers.  I imagine that most Java professionals already know how to use Ant and some kind of version control system.  On the other hand, the book also introduces some tools which are not so well-known, so you are sure to find something useful here.

CVS and Subversion are the version control options demonstrated.  I can’t help thinking that Git (or even Mercurial) would have been a better choice for inclusion than CVS.  Usage of distributed version control systems is growing whereas CVS has effectively been supplanted by Subversion.

Elsewhere there are no such omissions.  The author covers four different continuous integration servers: CruiseControl, Continuum, LuntBuild and Hudson.  This is probably overkill.  I haven’t used LuntBuild, but I would quickly dismiss CruiseControl and Continuum in favour of Hudson.  It would have been sufficient to cover Hudson and one other.

The coverage of testing tools is particularly thorough, and is probably the most useful part for experienced developers.  Not only does it cover JUnit 4 and TestNG, but it also goes into some detail on a variety of related tools, such as DbUnit, FEST and Selenium, and performance testing tools including JMeter and JUnitPerf.

I found the chapter on the JDK’s profiling tools to be useful and there is also a chapter on profiling from Eclipse, but nothing on the NetBeans profiler.  This is my only real gripe with the book.  Three of the chapters are Eclipse-only with no alternatives offered for users of other IDEs.  One of these is the chapter on the Jupiter code review plug-in.  ReviewBoard might have been a better choice.

All-in-all though, this is a substantially useful book.  At 910 pages it covers a broad range of topics without skimping on the necessary detail.  There are dozens of ideas for improving and automating your software development processes.

If you want more information, Meera Subbarao at JavaLobby has also reviewed Java Power Tools.

Real World Haskell

Posted in Books, Haskell by Dan on September 2nd, 2008

The book Real World Haskell by Bryan O’Sullivan, Don Stewart, and John Goerzen, will be available to buy from November.

The content is also freely available online already and is well worth a look if, like me, you are keen to learn more about developing actual useful programs with Haskell.

I first mentioned Real World Haskell last year. At the time I also highlighted GHC’s LGPL problems as an obstacle that could potentially discourage the wider adoption of Haskell. It seems that some progress is being made on that front. At present though, GHC will still statically link to GMP, which means that developers who distribute GHC-compiled binaries are distributing “derivative works” as defined by the LGPL.

Free Genetic Programming Book

Posted in Books, Evolutionary Computation by Dan on April 7th, 2008

I just spotted this on  The authors of a new book called A Field Guide to Genetic Programming have made it available for download in PDF form free of charge.  Weighing in at around 200 pages, it looks like a reasonably concise introduction to the topic (unlike some of the huge and hideously expensive GP books you can buy on Amazon).

This is good timing for me because I’ve recently started hacking together a GP example application to include in the next release of the Watchmaker Framework for Evolutionary Computation.  So I can catch up on a bit of background reading to make sure I’m doing things sensibly.  Watchmaker is a general purpose evolution framework, intended to address the full range of evolutionary algorithms.  I’ve been claiming for a while that you can use it for genetic programming, so I thought it was about time I demonstrated this.  I’m not aware of anybody having used Watchmaker for GP so far.  I’d love to hear from anybody who has done so.

Genetic programming is also covered in an accessible way in Toby Segaran’s excellent book, Programming Collective Intelligence, which includes GP examples in Python.