Chaz6's Blog

Saturday 12 June 2010

Website status

Due to circumstances outside my control my old web server has been taken offline today. I knew of this a few days ago and arranged for an account with Unfortunately they still have not set it up yet, so until then my website will be offline. If you are looking for resolv.conf you can get a copy from Please use this in future.

Friday 22 January 2010

Naming convention for software deployment

When it comes to organization, I am incredibly anal. I like things to be properly sorted and organized. When deploying software, you need to decide where to store the installation files. Usually it will be on a file share within a domain, for example:-


Now comes the question of how to organize the folders within. Let us use the example of Adobe Flash Player, which is offered as two versions. One is an activex plugin for IE/MSHTML and the other is a NPAPI (Netscape) plugin used by browsers such as Firefox. It is distributed as two MSI files - install_flash_player_10_active_x.msi and install_flash_player_10_plugin.msi. One gripe I have is that it is not clear from the filename exactly which version it is, nor is it on the website. For the purpose of this example I shall use the fictitious version "".

I came up with the following variables, the last being my personal favorite.

Adobe\Flash Player\ActiveX\
Adobe\Adobe Flash Player ActiveX
Adobe\Adobe Flash Player\Adobe Flash Player ActiveX
Adobe\Adobe Flash Player ActiveX\Adobe Flash Player ActiveX
Adobe\Adobe Flash Player\Adobe Flash Player ActiveX\Adobe Flash Player ActiveX

What naming convention do you use?

Friday 20 November 2009

New Google IPv6 addresses for Europe

Previously Google advertised addresses from 2001:4860:a005::/48. Since today they have switched to 2a00:1450:8001::/48 (IE-GOOGLE-20091005 aka Google Ireland Limited) 2a00:1450:8001::67 2a00:1450:8001::68 2a00:1450:8001::69 2a00:1450:8001::6a 2a00:1450:8001::93 2a00:1450:8001::63 2a00:1450:8001::13 2a00:1450:8001::53 2a00:1450:8001::11 2a00:1450:8001::12 2a00:1450:8001::64 2a00:1450:8001::65 2a00:1450:8001::66 2a00:1450:8001::71 2a00:1450:8001::8a 2a00:1450:8001::8b 2a00:1450:8001::93 2a00:1450:8001::63 2a00:1450:8001::67 2a00:1450:8001::68 2a00:1450:8001::69 2a00:1450:8001::6a 2a00:1450:8001::8a 2a00:1450:8001::8b 2a00:1450:8001::64 2a00:1450:8001::65 2a00:1450:8001::66 2a00:1450:8001::71 2a00:1450:8001::63 2a00:1450:8001::67 2a00:1450:8001::68 2a00:1450:8001::69 2a00:1450:8001::6a 2a00:1450:8001::93 2a00:1450:8001::69 2a00:1450:8001::6a 2a00:1450:8001::93 2a00:1450:8001::63 2a00:1450:8001::67 2a00:1450:8001::68 2a00:1450:8001::85 2a00:1450:8001::76

For the full list, I maintain a spreadsheet.

Tuesday 3 November 2009

Google over IPv6

Google has several websites that are available over IPv6. Unfortunately, unless your ISP's DNS server is on the Google whitelist you are restricted to IPv4 (except for, even if you have IPv6 connectivity from a tunnel provider such as SixXS or Hurricane Electric.

There are two ways around this:-

1. Change your DNS server to one that is white-listed by Google. Both SixXS [1] and Hurricane Electric [2] provide servers for their users.

2. Manually add the addresses to your hosts file (/etc/hosts or %WINDIR%\system32\drivers\etc\hosts). I maintain a list of the addresses at [3].

[2] 2001:470:20::2
[3] or

Friday 25 September 2009

DVB-T in Denmark with Linux

Recently I acquired a cheap USB DVB-T receiver for the purpose of mucking about with the TV stream here in Denmark. I had little success with it on my laptop running XP, but that is probably because the supplied software is pretty rubbish, and it didn't help that the laptop only supports USB 1.1. My target system is an Athlon 1800XP running OpenSUSE 11.1.

The device (EC168) does not have a native driver available, either in the default kernel or the kernel from the Kernel_HEAD repository, so I had to obtain it from and compile it by hand, which was a simple task. I installed the driver and added the prerequisites to /etc/sysconfig/kernel. Upon restarting I was greeted with success:-

[ 11.488833] dvb-usb: downloading firmware from file 'dvb-usb-ec168.fw'
[ 11.565348] dvb-usb: found a 'E3C EC168 DVB-T USB2.0 reference design' in warm state.
[ 11.580194] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[ 11.736297] DVB: registering new adapter (E3C EC168 DVB-T USB2.0 reference design)
[ 11.923407] DVB: registering adapter 0 frontend 0 (E3C EC100 DVB-T)...
[ 11.980465] ieee1394: Host added: ID:BUS[0-00:1023] GUID[001106664566a90d]
[ 12.202109] MXL5005S: Attached at address 0xc6
[ 12.217079] dvb-usb: E3C EC168 DVB-T USB2.0 reference design successfully initialized and connected.
[ 12.232312] usbcore: registered new interface driver dvb_usb_ec168

The next step is to scan for channels. The opensuse package "dvb" contains large number of frequency files, organized by country.

scan /usr/share/dvb/dvb-t/dk-All > ~/.dvbrc

This is not necessary, but useful to work with some applications and is an easy way to check that things are working. If no channels are found you may need to use a better ariel.
Luckily I live in a place with a very strong signal so the supplied indoor antenna works perfectly. It is worth noting that the frequency file may be out of date. For example, where I live in Aalborg there is a multiplex on 810MHz run by Boxer, and this frequency is not in the file. I suggest consulting the organization responsible for managing allocation of frequencies in your country.

My intention is to stream the multiplex onto IP, and the best software for this is getstream from I also applied this patch to enable streams to be viewed over IPv6. A copy of my configuration can be obtained here. I split each programme into a separate stream, and apply the EPG data (PIDs 0x10, 0x11, 0x12 and 0x14). You can also stream the entire multiplex at once using the special PID 8192.

There is another project for streaming DVB to IP called DVBlast. Unfortunately it does not seem capable of supplying streams over HTTP as well as UDP/RTP.

Another useful tool for checking your streams is TSReader. There is a free "lite" version available, as well as paid options.

Screenshot 1
Screenshot 2
Screenshot 3
Screenshot 4

DK Multiplex 1 Stream Information (Before November 2009)
DK Multiplex 2 Stream Information (Before November 2009)

DK Multiplex 1 Stream Information
DK Multiplex 2 Stream Information
DK Multiplex 3 Stream Information
DK Multiplex 4 Stream Information
DK Multiplex 5 Stream Information

Wednesday 10 June 2009

IPv6 Reverse DNS on

I have 2 IPv6 (AYIYA) tunnels from SixXS to my network, both of which are provided by the Nordic ISP Phonera. The tunnels terminate at 2 different PoPs - Copenhagen, Denmark and Oslo, Sweden. This provides some redundancy and has been useful in the past when one of the PoPs has had a problem.

In order to provide reverse DNS resolution for the tunnel subnets, I need to provide the address of my DNS servers. Given that I have 2 DNS servers, 2 tunnels and 2 DNS suffixes (in two different TLDs for resiliency) that gives a total possibility of 8 domains:-

I make use of because the domain is reachable with an IPv6-only resolver, unlike my own domain which is hosted with Gandi as they do not yet support IPv6 glue - even with an out-of-bailiwick server.

However, the zones are currently not reachable by an IPv6-only resolver, because Phonera's DNS servers are only reachable over IPv4 (which serve In addition to my IPv6-only name servers, I make use of the free DNS services provided by Unfortunately, they do not currently support secondary zones with IPv6 masters, so I have to maintain two copies of the zone files - one on my local servers, and one on GratisDNS.

Update: I no longer use because the domain appears to have expired and I have not been able to get in touch with the operator.

Sunday 28 September 2008

How to build Qt WebKit trunk as a static library

Add the following to WebKit.pri:-
CONFIG += staticlib

Run WebKitTools/Scripts/build-webkit --qt --release

Copy WebKitBuild/Release/JavaScriptCore/libJavaScriptCore.a to WebKitBuild/Release/lib/libJavaScriptCore.a

Remove WebKitBuild/Release/lib/*

Use the following qmake config:-
CONFIG(release):WEBKITBUILD = $$WEBKITDIR/WebKitBuild/Release/lib
CONFIG(debug):WEBKITBUILD = $$WEBKITDIR/WebKitBuild/Debug/lib
message(Using WebKit Trunk at $$WEBKITDIR)
message(Using WebKit Build at $$WEBKITBUILD)
QT -= webkit
LIBS = -lQtWebKit