By |  | tags:codelinuxrpmruby

Note: The examples in this post were ripped out of a real production project, simplified and renamed where appropriate. I have not tested them in their current state.

I recently did a bit of work to package a simple static website as an RPM to make it easier to manage versions and deploy automatically. The site is built with Jekyll and gem dependency management is handled by bundler. I ran into a few challenges using bundler from the...

By |  | tags:codespringwebapps

Note: All the code here is licensed under the Apache License version 2.0.

Update: The information and in this post has been adapted back into the Getting Started Guide. I recommend reading the guide, as it is more complete and easier to follow.

For the last few weeks I’ve been using Spring Boot to build a REST application for an internal service. I started with the Getting Started Guide and built it up from there. Once I got the application in the g...

By |  | tags:codemheg-5interactive-tv

Note: All code examples in this post are licensed under a BSD style license.

There are a few players in interactive television in the UK, each using different technology to build interactive experiences. Freeview and Freesat both use profiles of MHEG-5 as the programming language and runtime environment. MHEG-5 is a fairly unusual language in that it uses an event-based programming model, with all state declared outside the scope of the events.

As far as programming languages go, MHEG-5 makes a developer’s life difficult. There are no symbolic names so we have to refer to everything by an integer object ID. There are no data structures, so arrays have to be implemented manually by iterating on the object IDs and being very careful about where to stop. Links, the functional blocks of imperative code, can fire asynchronously and have no local state so care must be taken to avoid race conditions. There are only a few basic library calls, referred to as “resident programs”, which enable basic string manipulation and limited interac...

By |  | tags:codempeg

Note: All code examples in this post are licensed under the GPL version 2 (or later). My code is a derivative work of OpenCaster.

Playing out MPEG transport streams is a fairly complex affair. At the office, we have our o...

By |  | tags:codespring

A few weeks ago I had a go at implementing a familiar kind of application using some new tools. The basic structure should be well known to most developers:

  • Receive something to process
  • Do something with it
  • Send the result somewhere

This basic structure pervades the software industry and naturally, there is a vast swathe of reinvented wheels for managing the control flow, often multiple implementations in the same company.

I was building a new application with this structure in Java to consolidate a process that used two similar applications down to just one, reducing complexity along the way. The existing apps implement file system polling for input and FTP and SOAP calls for output. As I was doing exploratory work, I ha...