nick.recoil.org

mythRecommend

I’ve pushed my beta code for mythRecommend to Github. It’s a system which allows you to subscribe to a source of regular TV recommendations, and have those recommendations automatically get translated into concrete recording schedule for a MythTV system.

Once a recording has been made, the recording schedule is made dormant, so it will not clutter your existing schedule list as time goes on. You can decide if you would like to turn that recommended program into a permanent schedule or not, and reinstate it if desired.

I hope to add more feed parsers as the code matures, but as things stand there is only one written, specifically for The Guardian here in the UK.

Thoughts on parsing iPhone archives

I’ve just put a little article up on the Tactotum blog about the possibilities of processing your automatic iPhone backups to create a giant database of all your phone calls and SMS messages.

Scripting MythTV

At the end of June, I gave a short talk to the London Ruby Users Group on some code I’ve been working on to enable me to interface with MythTV on a programatic level. MythTV is Open Source software which allows the recording and playback of TV on a Linux box, turning it into a PVR. I use this at home to record TV from Freeview.

MythTV has a web interface written for it in the form of MythWeb, and it allows decent remote interaction with the system. It is also my main mode of interaction when trawling for interesting programmes to record. It’s much more convenient to use a keyboard and mouse to navigate, rather than a remote control. This is especially true here in the UK, where there are many Freeview channels that could contain content of interest.

Creating a pleasant API

However, if you’re looking to play around with integration, and prototype some ideas you have to help you navigate and interact in different ways, you’re not going to have an easy ride. There’s no single clean implementation of the functionality you can access in any one language. PHP drives the main MythWeb code, but it also mixes in some Perl to access some fairly major functionality (downloading/streaming the recorded programmes). There are also Python bindings within the MythTV codebase, but I’m not aware of anything substantial built on top of them, and what is implemented is mainly concerned with metadata.

The main functions I wanted a MythTV integration library to offer were the ability to list what had been recorded, obtain a thumbnail for that recording, and to be able to stream the data to you. This was achieved in the 0.1.0 release. Now we’re up to version 0.2.0, it now supports listing of EPG data, and creation/editing of recording schedules. This paves the way for experiments in automatic scheduling of recordings. There are many potentially interesting sources of TV reviews to scrape. For instance, if you like what The Guardian has to say about Television in its Watch this section, then extracting the titles from that page, and feeding them to ruby-mythtv is easy.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  require 'ruby-mythtv'
 
  # Connect to the server
  mythbackend, mythdb = MythTV.connect(:host => 'mythtv.localdomain',
                                       :database_password => 'password')
 
  # Find matches on our search term, and limit the results to 5 matches
  programs = mythdb.list_programs(:conditions => ['title LIKE ?', "%Bruce Parry%"],
                                  :limit => 5)
 
  # Take the first program match, and convert it to a recording schedule
  new_schedule = MythTV::RecordingSchedule.new(programs[0], mythdb)
  new_schedule.save
 
  # Signal the backend of recording changes for our recording schedule entry
  mythbackend.reschedule_recordings(new_schedule.recordid)
 
  # Let the backend resolve matches
  sleep(1)
 
  # Enumerate the list of pending recordings, find ours, and check for any conflicts
  pending_recordings = mythbackend.query_pending
  conflicts = pending_recordings.find { |p| p.recordid == new_schedule.recordid &&
                                            p.recstatus_sym == :rsConflict }
 
  # If conflicts is empty, then all is good. If it is populated, then action needs
  # to be taken, such as bumping the priority, or removing the clashes....

Ruby-mythtv is present both on Rubyforge and Github. Major release versions will be present on Rubyforge, and development versions will be present on Github. This method allows me to push out code which I consider functional, but not necessarily finalised. Release early, release often, as the saying goes, and this is all the more relevant when forking projects and sharing ideas is central to the way Github works. There’s nothing worse than code which is “almost there”, languishing in your “I really should finish it” folder, destined never to see the light of day.

Low-power embedded hardware

A chap at Smoke and Mirrors, where I’m doing some Freelance work, is creating a system to bridge between video routers and a web-based status page. Most of the suites within the building are plumbed in via fibre-optic KVM connections, and depending on the schedule, different video processing systems can get presented in different rooms at different times. All it takes is a change on the routers.

Although complex, this enables the most cost-effective use of each system, marrying the functionality needed to the number of physical people required to attend the session for any given day. There is a large variation in price and functionality with certain high-end systems, so you always want to try and get maximal use from the systems you have chosen to invest in.

He’s looking at using one of the boards from the wonderfully named Acme Systems from Rome. The idea is to communicate with the video router via its RS-232 serial interface, and retrieve an ASCII representation of the current router configuration. It’s a fascinating area of software AND hardware as glue. A physical device which will run some bespoke code to bridge information from one system into another.

pico-itx_board

In related news, I’ve also received my Artigo Pico-ITX kit and am now a proud owner of the tiniest system running Linux that I’ve ever seen. It also seems to play happily with the DVB sticks that I had stability issues with on the older Mini-ITX M10k board.

The fan is noticable in a very quiet room, but as soon as there’s anything else to be heard, it’s drowned out, so it’s not quite suitable for your bedroom. They do a fanless system, but it’s half the clock speed. Installing it was done over PXE from my Mac, using the Ubuntu netboot downloads.

AppleTV & Ubuntu hacking

I’ve finally enabled SSH on my long dormant AppleTV, and am integrating it into my DVB / Rails / Beanstalk / MySQL system for processing data. I’ve used the Patchstick image available from atv4windows. I ended up unpacking and dd’ing the image from the Mac, but the process remains exactly the same. I now have Perian, ssh and a slew of other things enabled, and all I need now is to attempt the hack to get composite output working. I’ve yet to take the plunge and replace my old CRT with an LCD TV.

Incidentally, for anyone looking to figure out the ssh username and password for your freshly enabled ssh daemon, they are both frontrow, and that user has passwordless sudo privileges.

I also had a minor breakthrough with my x86_64 Ubuntu 8.04 machine. I have a Zyxel G-202 Wireless USB stick, to keep the number of trailing wires to a minimum, but I kept getting an error saying:

1
zd1211rw error ioread32(CF_REG1): -110

Which was exceedingly unhelpful. I eventually tried disabling hi-speed USB from the BIOS, and rebooted to find it sprang into life immediately. Great! What was even more strange that when I rebooted and reset the BIOS back to enable USB 2.0, the G-202 kept working. I’m unsure whether this is due to the device not being cold booted, and I’ve yet to see if it stops working after I power the system off, but so far so good, and I don’t need to resort to NDIS.

Flickr photostream

nick.ludlam posted a photo:Used the "instant" look, with a little bit of red gain added.nick.ludlam posted a photo:As manipulated by my iPhone app, using the cross-process "look"nick.ludlam posted a photo:nick.ludlam posted a photo:Testing out Mill Colour with a self portrait after a 5k run.This effect is using a large amount of desaturation, and a very high contrast "Look" set.nick.ludlam posted a photo:nick.ludlam posted a photo:A few of us went out for lunch to Wagamamma during the Yahoo open hack day.I also tweaked the image a little using my new iPhone app that I've written for The Mill, called Mill Colour. Available soon on the app store!nick.ludlam posted a photo:Stupid helicoptersnick.ludlam posted a photo:nick.ludlam posted a photo:She performed in a small event at Ray's Jazz Cafe in Foyles bookshop, London. One of the tracks had an amazing Cello & Accordian instrumental intro. If only the iPhone recorded video...

Delicious links