Archive for July, 2011


There’s been a lot of talk about WURFL lately and with good reason. On June 6, 2011 I launched ScientiaMobile along with my business partners, Luca Passani and Krishna Guda.  If you’re reading my blog you probably know that I am the author of the popular mobile device detection library Tera-WURFL.  I wrote Tera-WURFL back in 2006, when the world of mobile devices was completely scattered in every direction.  At the time, the vast majority of mobile devices did not support a common set of capabilities, like MP3, MMS or HTML.  Instead, your best bet was to write a terrible-looking, but fairly well behaved XHTML-MP site using very conservative tags.  WURFL solved this problem nicely by accurately matching a visiting user to a device profile that allowed you to serve a WAP page to a Nokia 3360, an XHTML-MP page to a Motorola RAZR and an HTML page to a 1st-gen iPhone.

Since 2006 there have been a lot of changes, particularly in the capabilities of mobile browsers.  Thanks to Apple Webkit, even lower-end phone are able to browse sites without catastrophic rendering issues (still a terrible UX, just not a catastrophe).  With all these changes, however, one thing has remained: mobile device fragmentation.  Device fragmentation means that the capabilities and methods of interacting with mobile devices are constantly spreading in different directions, none compatible with the other.  Technically this problem is driven by consumers, since we always want the next cool feature.  What happens is that manufacturers battle it out in an attempt to be the first to release a device that has an edge over the competition, like Near Field Communications and glasses-free 3D Displays.  The problem is that manufacturers release devices with these features before the industry has settled on a standard for interacting with them.

So what does this have to do with WURFL?  Luca Passani and I have seen the writing on the wall and we realize that this problem of device fragmentation has had some temporary relief by the massive market share by Apple and Android devices, but things are starting to get worse fast.  Every day we are seeing new devices and incomplete software features that make mobile web programming a nightmare!  For example, everyone is very excited about HTML5, but how do you know if the device you’re targeting supports the HTML5 features that you need?  One option is to use a high-level JavaScript abstraction framework like jQuery Mobile.  This is very slick on my super fast Snapdragon-powered HTC Inspire 4G, but how will it work on a typical off the shelf phone?  What about BlackBerry OS 6/7, MeeGo, Symbian^3, WebOS and WP7?  Good luck.

What Luca and I decided to do is to join forces and refocus our full attention on the problem.  In June we publicly announced the merger of the WURFL project and the Tera-WURFL project into a single company called ScientiaMobile (original WMLProgramming message).  Now that we’re on the same team, Luca and I are able to work more closely on the problem of device fragmentation and detection.  In addition to better APIs and more consistent data, we’re bringing some awesome new products to market that will make it easier for organizations of all sizes to get started with mobile device detection.  Right now, we are polishing up a product that has always been near the top of my feature requests:  WURFL Cloud.  WURFL Cloud is something that we’ve been secretly working on for some time and it is now in it’s Beta-testing phase.  We are spending a lot of time to make sure this service is very fast and accurate from day 1 (by the way, you can drop us a line at wurfl-cloud-beta@scientiamobile.com to get your Beta license).  Unlike the standard WURFL APIs, WURFL Cloud is a hosted device detection service that is always updated and maintained by the WURFL Team.

Throughout this process, we have chosen to follow our roots.  WURFL has always been a Free and Open Source project and it still is.  We value our community and are excited to bring WURFL to the next level while keeping it in the public domain.  At ScientiaMobile, in addition to the FOSS APIs, we are now selling commercial licenses and support for our APIs as well.  Under this new dual-licensing scheme we are able to help organizations that are not comfortable with the restrictions of the open source license.

As we say at ScientiaMobile: WURFL has Graduated!

If you’re not familiar with HAProxy, you’re missing out! HAProxy is a very intelligent high-availability reverse proxy that operates all the way up to Layer 7. Unlike Nginx (another good choice), HAProxy is not a webserver, it is designed with only high availability and load balancing in mind. Another great feature is that it’s a lot cheaper than your typical Layer 7 Load Balancer, free :).

There are plenty of good articles out there on HAProxy, but I couldn’t find any Debian/Ubuntu packages for the latest version (1.4.15). The Ubuntu 11.04 repo’s newest version is 1.4.8, but if you want some of the cool new features of 1.4.9-1.4.15, you have to build it from scratch. This process isn’t too painful, but I’ve got a lot of servers to put HAProxy on and I don’t want dpkg / apt-get to freak out and install the old HAProxy in order to satisfy a dependency.

For this reason, I’ve created an Ubuntu 11.04 x64 HAProxy package with TCP Splicing, Full Transparent Proxies and PCRE enabled:

HA-Proxy version 1.4.15 2011/04/08
Copyright 2000-2010 Willy Tarreau <w@1wt.eu>

Build options :
  TARGET  = linux26
  CPU     = native
  CC      = gcc
  CFLAGS  = -O2 -march=native -g -fno-strict-aliasing
  OPTIONS = USE_LINUX_SPLICE=1 USE_LINUX_TPROXY=1 USE_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200

Encrypted password support via crypt(3): yes

Available polling systems :
     sepoll : pref=400,  test result OK
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 4 (4 usable), will use sepoll.

Feel free to grab haproxy_1.4.15_amd64.deb (502k SHA1: 8b2ecf05544e0f6531e50bf40261e0b112db61e9)

You can also grab the sources from here: http://www.stevekamerman.com/haproxy/