About

Humboldt Solutions Ltd. offers custom software development and consultancy. Contact us on info@humboldt.co.uk to find out how we can help.
View Adrian Cox's profile on LinkedIn

Archives

MD evReader for iPad

Download on the App Store

The iPad app we’ve developed for Royal Holloway University is now in the app store. The MD evReader helps people with macular disease (MD) to read eBooks using the eccentric viewing technique. Eccentric viewing involves a person trying to see by making use of the peripheral, rather than central vision. The technique is like trying to see ‘out of the corner of your eye’ and can be a useful way of enhancing visual tasks such as reading. The app scrolls text, one line at a time, with the speed and direction of scrolling controlled by a track pad on the iPad screen. Large fonts can be used and the text can be presented onto a digital TV screen via HDMI.

Development required overcoming a number of technical challenges to ensure steady performance while rendering large fonts to two screens simultaneously.

Building Bespoke Mobile Software

As mobile apps have taken off in consumer applications, it’s become more difficult to build an application for a customer to use in-house. Many new platforms have launched without an easy way for an in-house developer to release bespoke software to their customer, and tracking the start of the art can take time. Here’s an overview of the current options:

iPhone / iPad

The devices are certainly popular. iOS is what everybody wants, and Apple now offer two methods for an in-house app: enterprise distribution, and the Volume Purchase Program. As the Volume Purchase Program is only available in the US, I’ll skip over it.

The iOS Enterprise program requires our customer to join the developer program, and then sign the app with their own key. This puts extra workload on to the customer, though it can at least be outsourced to a corporate app store such as Appaloosa. There’s no requirement to submit the app to Apple, so bug fixes can at least be pushed out quickly.

Popularity: 5/5 Waterproofing: 0/5 Developer Ease: 4/5 Customer Ease: 3/5

Android

Apart from a few locked down devices, Android is the closest to the freedom of desktop operating systems. No bureaucracy required, good development tools, and a wide range of hardware. Some of the hardware is even waterproof. If you’re deploying to a large enough number of devices, then a corporate app store may help, but there’s nothing stopping you from simply placing the file on an internal web server.

Popularity: 4/5 Waterproofing: 4/5 Developer Ease: 5/5 Customer Ease: 5/5

Windows Embedded Handheld 6.5

Windows Embedded Handheld allows us to develop applications using .NET, and an administrator can place them on the device with no requirement for approvals. A few years ago, this was the default, with good tools and rugged, waterproof devices available. Unfortunately, the OS and the available hardware are showing their age, and Microsoft don’t give much confidence about the roadmap.

To add insult to injury, the development tools require Visual Studio 2005 or 2008 Professional, and Visual Studio 2010 Professional does not come with downgrade rights. This makes the entry fee for development very high.

Popularity: 0/5 Waterproofing: 5/5 Developer Ease: 3/5 Customer Ease: 4/5

Windows Phone 7

The initial release of Windows Phone 7 required all applications to be distributed through the public Marketplace, but Microsoft now support Targeted Application Distribution. Apps distributed through this method still require certification, but do not appear in public searches. The app is available to anyone with the private URL. Provided that the app connects to an authenticated service, this is a minor problem.

This leaves us to jump through the certification hoop and may delay release of bug-fixes, but it puts little workload on our customer.

Popularity: 2/5 Waterproofing: 1/5 Developer Ease: 4/5 Customer Ease: 5/5

Windows 8 Tablet

This isn’t here yet, and signs are mixed. For Metro apps on PCs, administrators should be able to manage app installation:

In addition, enterprises can choose to deploy Metro style apps directly to PCs, without going through the Store infrastructure. For Windows 8 Beta, IT administrators can use group policy to permit Metro style app installations, as long as the apps are signed by trusted publishers and the machines are joined to the domain

For Windows 8 tablets, we don’t know yet. We know the consumer position:

Consumers obtain all software, including device drivers, through the Windows Store and Microsoft Update or Windows Update.

Steven Sinofsky’s use of the word consumer may be significant.

Blackberry

While Blackberry is neither trendy nor waterproof, it is a straightforward platform for deployment of corporate software.

Popularity: 3/5 Waterproofing: 1/5 Developer Ease: 4/5 Customer Ease: 4/5

fsync() Across Platforms

When an application writes a file, the data does not become permanent immediately. The write operation first moves the data into the operating system cache in RAM, where it is vulnerable to system crashes and loss of power. The second step is the transfer to the hard disk, which normally has write caching enabled. The disk acknowledges the data straight away, but keeps it in the disk write cache which is still volatile memory. The data is now safe from system crash1, but is not safe from loss of power. On a modern disk, this may be 16MB or more of data in unknown state.

As performance enhancements in ext4 have made committing data to disk a contentious issue, I’ve written a note on how different platforms handle data consistency.

Continue reading fsync() Across Platforms

  1. Ignoring some worst case scenarios.

The Mystery of ProxyPassReverse

The mod_proxy_ajp module for Apache has many advantages over mod_jk for connecting a Tomcat server to an Apache front. For me, the crucial advantage was the ProxyPassReverseCookiePath directive, which allows me to map the session cookies of a Tomcat web application (other than the root application) into the root of a virtual host.

Unfortunately, many tutorials contain misleading advice, and recommend this pattern for the ProxyPassReverse, which will break if the web application issues a redirect:

ProxyPass /jspdir ajp://localhost:8009/jspdir
ProxyPassReverse /jspdir ajp://localhost:8009/jspdir
Continue reading The Mystery of ProxyPassReverse

Wrapping a Native Library with Maven

I recently converted a large project to build with Maven. The project contained both C++ and Java code, and produced a web application, a standalone server application, plus a number of small command line tools. The project used a large number of open-source Java libraries, and Maven tamed these easily. The native C++ library proved harder, and this is the approach I took.

The code snippets below are part of a complete example that builds a tiny Java/C++ application under Linux. This should port easily to other Unix-like platforms, and may provide some help to performing the same task under Windows. The example is available in tar.gz and zip formats.

Continue reading Wrapping a Native Library with Maven