By |  | tags:codespringjavarants

I’m going to pick on Spring a lot in this post because it has caused me the most frustration in the last few months, but the same arguments can be applied to many large and ungainly frameworks/libraries. This rant was sparked by trying to upgrade a production application from Spring Boot 1.1 to 1.2. It didn’t work; it didn’t tell me anything useful about why it didn’t work; and the upgrade notes said nothing about the parts of the framework which are now completely broken (hint: ErrorController)....

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...