Saturday, 21 November 2009

DEC Legacy Event, April 17th & 18th 2010, Windermere, UK

I am organising a DEC Legacy Event on the 17th & 18th April 2010 in Windermere, UK.

The event's purpose is to bring together people with an interest in the company Digital Equipment Corporation and their legacy of hardware, software and ethos. I am hoping to attract people willing to exhibit their DEC computer hardware and software at the event. There will be tables setup around the main hall on which equipment can be presented.

Whilst the format for the event is still fluid, I envisage that it will involve a mixture of the following:

  • Walkabout sessions giving the opportunity to talk to owners of DEC hardware and to 'have a play'
  • Demonstrations of equipment or software by their owners (languages, applications, games etc)
  • Sit down presentations about specific topics of interest
  • A programming competition (if there is enough interest)
  • Buy & sell hardware, software, relevant items
  • Raffle (with suitably themed items) on behalf of the National Museum of Computing
For more information please visit the webpage at:

Saturday, 3 October 2009

The Home Network

This is when you know it's time to 'consolidate'.

Wednesday, 23 September 2009

Simple Volume Shadowing of the System Disk under OpenVMS

I am not an OpenVMS expert. I had to read the manual a couple of times and consult with the Hoff to get the commands sorted to do this, so hopefully it will save you some time.

Volume Shadowing on OpenVMS at it's very simplest can be used to provide RAID-1 mirroring using two or more locally attached hard drives. In my case I have a single hard drive (DKA300:) which acts as my system and data disk. I wanted a complete hot mirror of this drive in case of hardware failure. I have used two identical drives to do this.

If you are an OpenVMS hobbyist you will have the license required for volume shadowing. You can easily check:

Active licenses on node ORAC:

------- Product ID -------- ---- Rating ----- -- Version --
Product Producer Units Avail Activ Version Release Termination
VOLSHAD DEC 0 0 100 0.0 (none) 16-OCT-2009

You then need to setup the system parameters so that when you reboot OpenVMS your current system disk is included in a shadow set to which another drive (or drives) can then be added. Edit the file SYS$SYSTEM:MODPARAMS.DAT and add the following lines:


A sensible value for ALLOCLASS is 100, but it can be anything from 1 to 255. If you have previously added the box to a cluster this parameter may already be defined. SHADOWING must be 2 to enable shadowing. SHADOW_SYS_DISK must be 1 to enable shadowing for the system disk, and SHADOW_SYS_UNIT defines the virtual unit number which is appended to the virtual drive name DUAx:

You then need to run AUTOGEN to save these parameters. I used the following two commands:


The second command may fail on errors, if this is the case and you are happy to proceed add the keyword FEEDBACK to the end.

This will reboot the system and (hopefully) when it's started up you should see the virtual unit when you run the SHOW DEVICE command:

$ show dev d

Device Device Error Volume Free Trans Mnt
Name Status Count Label Blocks Count Cnt
DSA0: Mounted 0 OVMSVAXSYS 16637880 337 1
$100$DKA200: (ORAC) Online wrtlck 0
$100$DKA300: (ORAC) ShadowSetMember 0 (member of DSA0:)

To add a new member to the volume set use the MOUNT command, like this:


This command specifies the existing system disk $100$DKA300 and the new disk $100$DKA400. You will need to confirm that you want to overwrite the contents of the new drive. The command initiates a copy of the data on the system disk to the new drive. SHOW DEVICE will indicate the copy progress:

$ show dev d

Device Device Error Volume Free Trans Mnt
Name Status Count Label Blocks Count Cnt
DSA0: Mounted 0 OVMSVAXSYS 16637880 337 1
$100$DKA200: (ORAC) Online wrtlck 0
$100$DKA300: (ORAC) ShadowSetMember 0 (member of DSA0:)
$100$DKA400: (ORAC) ShadowCopying 0 (copy trgt DSA0: 43% copied)

After the copy is complete the two shadow set members will contain identical data, so that if one of the drives should fail it can be replaced without losing any data.

I encourage you to consult the Volume Shadowing for OpenVMS manual for more information.

Sunday, 6 September 2009

VAX APL LK201 Keyboard

From the VAX APL Users Guide page 1-3 comes an image of the LK201-EC variant with APL keycaps:

With this image as a reference I designed a set of replacement keycaps for an existing LK201 using the Open Office Drawing tool (source file) and the excellent Simpl APL Unicode Font:

These were printed out using a laser printer on the self-adhesive transparency paper provided as part of the Hooleon Keyboard Sticker Label Making Kit. These were then cut out using a scalpel and mounted on backing stickers which are opaque. A final top sticker adds a textured finish and protects the printed label.This is the resulting keyboard:

Left Hand Side:

Right Hand Side:

I've also uploaded a short video to YouTube demonstrating how you interact with VAX APL V4.0 using this keyboard together with a VT320 terminal.

Wednesday, 12 August 2009

Embedding the SimPL APL font on a web page using Cufón

I came across Cufón a while ago whilst browsing the excellent nettuts+ website.

Having started coding in APL I was wondering about the best way to present developed code on my blog. One option is to use my java transcoding technique to load my Soliton Sharp APL code into jEdit (my favourite editor) using my custom character set transcoder to convert the custom eight-bit ASCII encoding used by Soliton into standard Unicode APL characters.

Cufón allows you to embed any arbitrary truetype font or fonts into a webpage via javascript and then use the font directly within the html by replacing a standard html tag. You can either download the utility or use their website to process a truetype font located on your hard disk to generate a javascript file containing your selected truetype glyphs. The generated file in this example is simpl_400.font.js (see code below).

I chose the excellent free font created by Phil Chasney called SImPL to embed within this blog.

The code required within the head tag of this page to embed the font is very simple:

<script src="" type="text/javascript"></script>
<script src="" type="text/javascript"></script>
<script type="text/javascript">

The results can be seen with the following APL characters above ASCII location 127 in the SOLITON-APL encoding:


and an example of some APL code:

[0] z←mbrt1
[1] rrz←(0.1×⍳21)−1 ⍝ array from ¯1 to +1 stepsize 0.1
[2] iiz←(0.1×⍳21)−1 ⍝ array from ¯1 to +1 stepsize 0.1

[0] z← cmplsq ⍵
[2] ⍝ Function: Complex Square
[3] ⍝ Perform a complex square of the argument ⍵, returning array r,i in z
[5] r←⍵[0] ⍝ extract real part into r
[6] i←⍵[1] ⍝ extract imaginary part into i
[7] rn←(r⋆2)−(i⋆2) ⍝ real result
[8] in←r×i×2 ⍝ imaginary result
[9] z←rn,in ⍝ z is array of real and imaginary results

Saturday, 8 August 2009

DIGITAL and Alpha Powered Logos

I created a couple of high-resolution logos for DIGITAL and Alpha Powered from existing sources with transparent backgrounds as PNG files that someone might find useful! Below are two scaled images - be sure to use the links above to get the full resolution version.

Retrochallenge 2009 Summer Challenge Entry

I participate in retrochallenge - a convenient excuse to utilise retro technology for a month. For the summer 2009 challenge I coded up a fractal generator in VAX Macro-32. You can check out the challenge blog at I produce this blog on my main website because it is created using ALLIN1 on the VAX by a set of scripts I created for my winter warmup 2009 entry.

One of the images I produced has been used by the competition organiser for the winners mousemat. It can also be ordered in t-shirt format from cafepress.

The above image is also available at 4800x4800 resolution, which shows the recursive nature of the image much more clearly.

Friday, 7 August 2009

Transcoding AVCHD into DVD and Web Formats using the Command Line under Linux

I needed a way of transcoding output from my Panasonic HDC-HS300 into a DVD and web viewable format under linux. There are webpages out there that tell you how to do it, but I had to edit some of the scripts to perform this task automatically from the command line.

I've created two scripts, and which can be downloaded in the archive convert-mts.tgz. The scripts unpack into a bin directory.

In order to use the scripts you need to ensure you have the latest version of mplayer installed. My version reports:

MPlayer SVN-r29328-4.3 (C) 2000-2009 MPlayer Team

so I would suggest this version or later. The packaged version in the OpenSUSE 11.0 repository is not recent enough - I downloaded the latest source code using subversion and built it locally. The following commands download the latest version, configure and build it to /usr/local. The mplayer binary can then be found under /usr/local/bin so the last command ensures that you pick that version up in preference to a pre-packaged version that might be installed under /usr/bin for example.

svn checkout svn:// mplayer
cd mplayer
svn update
./configure --prefix=/usr/local/
make install
export PATH=/usr/local/bin:$PATH
The script is used to convert your HD video into DVD quality, suitable for directly burning to a DVD (for example using my command line tools described in a previous blog post). It contains the following commands:
rm -rf dvd/*
mkdir dvd
for f in *.mts
echo $f
mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=720:576,hh
arddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=55
000:keyint=15:aspect=16/9:threads=4 $f -ofps 25 -fps 50 -o dvd/`basename $f .mts
`.mpg -demuxer lavf >>`basename $f .mts`.log 2>&1 &
Once you have this command on your path, cd to a directory containing the files you wish to convert (which have the extension .mts) and run the command. Note that with the Panasonic Camcorder you can copy the files directly off the camera - you don't need to use the Windows utility provided. It will create a sub-directory called dvd and proceed to convert all the .mts files into DVD format. It creates a log file for each of the converted files giving any output or error messages.

Note the ampersand on the end and the wait command - this script is multi-threaded and will utilise all cores on a mult-core processor. I did some experimentation with versions of this script and found that on a machine with a decent amount of memory the most efficient way of transcoding the videos was to spawn off all the transcode commands at the same time, even when transcoding several tens of mpeg. On my quad-core machine this command completes the process almost exactly four times quicker than processing the command sequentially.

The only disadvantage of spawning all the transcodes at once is that you might impact other processes on the box (I noticed that video streaming would be interrupted for example). You could always use the nice command infront of the call to mencoder to run it at a lower priority, giving preference to existing tasks.

The provides the appropriate command line arguments for generating a video size 360x288 - it creates a directory called web and places the transcoded video files there.

rm -rf web/*
mkdir web
for f in *.mts
echo $f
mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=360:288,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=1250:vbitrate=625:keyint=15:aspect=16/9:threads=4 $f -ofps 25 -fps 50 -o web/`basename $f .mts`.mpg -demuxer lavf >>`basename $f .mts`.log 2>&1 &

Automatic Video DVD Creation under Linux using command line tools

Doing DVD creation properly is a pain. Firstly, you have to master a GUI creation tool. Secondly, every DVD you create seems to involve too much manual work. Wouldn't it be nice if you could just throw a load of mpeg files into a directory and run a couple of commands.

I couldn't find anything out there to fit the bill, so I rolled my own. You can download everything you need in dvd-create.tgz

The prerequisites are the dvdauthor, cdrtools and MPlayer packages. Use your linux distros' package manager to ensure they are installed and up-to-date.

Unpacking dvd-create.tgz gives you a directory dvd-create. Within the directory are three main control scripts:, and

Start by copying the mpeg files you want on your DVD into the dvd-create directory. The files will appear on the DVD in alphabetical order, so if required rename (or numerically prefix) them so that the directory listing shows them in the correct order. Then use the script to process the mpeg files, generate a dvd.xml control script for dvdauthor then run dvdauthor to create the DVD structure within the subdirectory dvd.

rm -f dvd.xml dvd-body.xml
chapter=$(( 0 ))
for f in *.mpg
echo " " >> dvd-body.xml
chapter=$(( $chapter+1 ))
cat dvd-head.xml dvd-body.xml dvd-foot.xml > dvd.xml
dvdauthor -o dvd -x dvd.xml
The second step is to burn the generated DVD structure to a DVD using the script. If you dvd device is not located at /dev/cdrom you will need to edit the script to use the appropriate device.

growisofs -dvd-compat -Z /dev/cdrom -dvd-video ./dvd/

The last step is to test the DVD you've just created using the play script, This fires up the mplayer media player to view the contents of the freshly created DVD.

mplayer dvd:// -dvd-device ./dvd

How quick was that!

Monitor your ADSL Connection for Outages & Uptime

I had the misfortune of choosing demon as my ISP and for the first couple of months managed to exceed my fair use policy and experience extended outages. In an effort to document my issues I wrote a couple of scripts on a NetBSD box that monitor the connection and automatically create a graph using gnuplot of the uptime.

The scripts are driven by a crontab script:

$ crontab -l
@hourly /home/msw/router/getstats
5,10,15,20,25,30,35,40,45,50,55 * * * * /home/msw/router/
5,10,15,20,25,30,35,40,45,50,55 * * * * /home/msw/router/
0,15,30,45 * * * * /home/msw/router/

Every five minutes the script attempts to ping one of the demon nameservers using its' IP address:

TIME="`date +%C%y%m%d%H%M`"
/sbin/ping -c 1 > /dev/null 2>&1
if [ "$?" == "0" ]

This generates a line in the LOGFILE which looks like this:

200907091945 1
200907091950 1
200907091955 1
200907092005 1
200907092010 1
200907092015 1
200907092020 1
200907092025 1
200907092030 1
200907092035 1

where the first number is the date and time and the second number is a '1' if the ping was successful, or a '0' if it was not.

The script turns these numbers into a nice graph with the help of GnuPlot then puts the resulting jpeg onto the local apache webserver:

sleep 30
export PATH=/bin:/sbin:/usr/pkg/bin
export RS=/home/msw/router
export HTDOCS=/usr/pkg/share/httpd/htdocs
export STATS_FILE=$RS/ping-stats.txt
export JPG_FILE=ping-stats.jpg
export SHARE_DIR=/usr/local/archive
export HTTPD_DIR=/usr/pkg/share/httpd/htdocs
cp $STATS_FILE $RS/ping-stats-copy.txt
gnuplot $RS/plot-stats.gnuplot > $SHARE_DIR/$JPG_FILE

The gnuplot script plot-stats.gnuplot that works the magic:

set terminal jpeg large size 1024, 600
#set terminal dumb
set title "Demon Internet HomeOffice 8000, hostname: waldo"
set lmargin 10
set rmargin 10
set tmargin 5
set bmargin 8
set xdata time
set format x "%d/%m"
set xlabel "Date, 2009" offset 0,-2
set ylabel "ADSL Status"
set yrange [-1:2]
set ytics 0,1,1 ("Off" 0, "On" 1)
set mxtics 6
set timefmt "%Y%m%d%H%M%S"
plot "/home/msw/router/ping-stats-copy.txt" using 1:2 with lines title
"Status at `date`"
#set title "ADSL status" offset 0,-10
# - generated on %Y%m%d %H%M"
show title

Then once every 1/4 hour the script pushes the stats up to my remote web host (assuming the connection is up of course!)

cp /usr/local/archive/ping-stats.jpg /tmp
cd /tmp
cd public_html
put ping-stats.jpg

The end result being this lovely image:

Java/Swing Mirrorbow Remote Control Program

I wrote an application a while ago that I thought would be worth sharing with the world - it's a Java/Swing Application to drive a
Mirrorbow Ethernet IO Interface. I use the interface to control the power to a number of computers and peripherals in my attic, both to make remote operation possible and also to physically isolate them from the mains supply when not in use. I noted a while back that the VAX and Alpha both drew significant power from the mains even when the power supply switch was turned off.

The application looks like this when running:

You simply click on the button to toggle the power. The application mirrors the information displayed in this Swing panel on the built in LCD display of the mirrorbow:

The application is configured using an XML file:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

I tried to make the implementation as generic as possible. The source code, compiled classes and Windows/Unix command line scripts can be found in

The unit all this controls was hand built using a equipment box, eight IDC connectors, a relay board bought off ebay, a 12 volt power module extracted from a plug in adapter and a mains lead:

Tuesday, 14 July 2009

VAX Macro in the 21st Century

My good friend and work colleague Andrew Beacock posted a recent blog update with some very nice formatted code which turned out to be a Javascript based syntax highlighter by Alex Gorbatchev which you can find at Seeing as how I couldn't sleep after about 5:30 this morning, I thought I'd follow Alex's excellent instructions to create a new syntax highlighter for VAX Macro. I'd previously created a VAX Macro mode for jEdit and it was fairly straightforward to cut and paste the opcodes, macros and operands.

The syntax highlighter script file can be found here: Your source code must have open and close angle brackets converted into their html ampersand escaped equivalents. Just add this to your installation of Syntax Highlighter then you can call upon it to format you code, such as in this example.

Friday, 26 June 2009

OpenVMS distros...

I managed to secure a large collection of OpenVMS distribution media from a University Lab who no longer wanted them - a large box arrived with what must have been about 20 boxes of shrink wrapped software - mostly quarterly updates of the Software Product Library, but also including a Compaq branded distribution of OpenVMS itself, and also one branded HP (7.3.2 for VAX and Alpha).

I had sold a few of the SPL packages without really looking in them and the remaining were still shrink wrapped until this evening when curiosity got the better of me. I'm glad I did, as you can see from the pictures the HP and Compaq OpenVMS packages contain a very nice CDROM case. The HP one is branded HP OpenVMS, the Compaq one Compaq OpenVMS.

I also had a copy of Netscape Enterprise Server from 1998 that I opened up, and you can see the contents. It was amazing to see so many 'modern' terms described in a product that is now 10 years old, although I can't say I liked the look of server-side Javascript that much! This box contains Windows NT and Unix versions, including Digital Unix 4.x which I happen to have running on my DEC AXP 3000/600. Possibly too much of a coincidence...

Wednesday, 29 April 2009

NetBSD, BBS and VAXen...

NetBSD intrigues me. It runs on like a zillion platforms, and has supported VAX hardware for a lot of years. After several failed attempts I finally got my VAXstation 4000/90 to netboot. A triumph of bloody minded configuration. The problem is that the documentation, whilst very good, is out of date and doesn't quite get you far enough. So I thought I'd add my brief information to the mix.

First up, if you're serious about making this work then you'll need another platform to run NetBSD on which is easier to install from. For this read: doesn't require netbooting. I had my hand forced by my recent agreement to host the Retrochallenge BBS. The tarball that I was given wouldn't compile up under my SuSE 11 linux box without some serious hacking (within the nitty-gritty of the terminal-based IO code) so I enlisted the help of my aging but still solid Dell Inspiron 7500 laptop as a new host. The choice of the platform was driven by thee criteria: I own it already, it is small and it consumes little power. My wife is a little frazzled with my hardward collection. That covers the first two. Our electricity bill is obscene (but on a par with the neighbours). The Dell laptop consumes 15 watts when idle. I consider this very reasonable given that it will have to be on 24/7.

Anyway, the bit I was missing when netbooting the vax was that you need to have a custom DHCP server to tell the target VAX where it can find its' root NFS mount. This means turning off the DHCP server in your router and turning on the dhcp server on a suitable box - in this case my Dell 7500 which now runs all the time.

My dhcp.conf file looks like this:

# Setting DHCPD global parameters
allow unknown-clients;

ddns-update-style ad-hoc;

# Set parameters for the subnet.
subnet netmask {
default-lease-time 604800;
option subnet-mask;
option domain-name-servers,;
option domain-name "";
option routers;

host aleph {
hardware ethernet 08:00:2b:34:4d:6f;
option root-path "/export/aleph/root";

host mirrorbow {
hardware ethernet 00:04:a3:00:00:00;

host netfs1020d {
hardware ethernet 00:c0:ee:d5:6c:ae;

host xpsgen2 {
hardware ethernet 00:12:3F:D1:CA:46;

The host entry aleph is the VAX. The name aleph comes from a VAX connected to a cluster I worked with when I worked for Cyberscience Corporation between 1991 and 1993. I'm sure a wikipedia search will throw some light (well I thought this, but maybe not. The name aleph comes from a computer featured in the classic/cult TV show Blakes-7. There were three nodes in the cluster named after computers in Blakes-7: orac, aleph & zen). Host mirrorbow is documented in my other post about the Java/Swing controller app I use, netfs1020d is my Kyocera FS-1020D connected to the network and xpsgen2 is the Dell laptop I'm using right now.

I mention all this because it took several aborted attempts at net installing NetBSD on a VAX before I hit this piece of knowledge (a quick email exchange which, by its' very nature might not have happened).

Thursday, 26 February 2009

Sun Java SE JRE/JDK 1.6.0 Update 12 Available for Itanium (IA64)

Sun have just released Update 12 of the 1.6.0 Java SE JRE and JDK for Linux and Windows Itanium (IA64) platforms.

The installation packages can be downloaded from the main Update 12 download page here.

It installs and runs successfully on the Debian 5.0 IA64 port.

Netbeans 6.5 on Itanium (IA64) Debian 5.0

Netbeans 6.5 installs and runs successfully on a Debian 5.0 Itanium distribution.

Debian 5.0 on Itanium IA64

Debian 5.0 was released on February 14th, 2009. I believe it represents the state-of-the-art linux distribution that supports machines based around the Itanium processor family. Other distros including SuSE, Red Hat and Fedora are at least one major release behind with an IA64 based port.

I installed Debian 5.0 on my HP ZX6000 workstation which has two 1.3 GHz Madison-class Itanium 2 processors, an Ultra SCSI 320 storage backbone and 16GB of RAM. The installation was via a DVD image downloaded by Bittorrent (took about 7 hours to download the complete image). The installation was painless, and even initially could be driven via a serial terminal connected to the console port.

I have tested the distribution for two days and so far it has been flawless. It works out-of-the-box with both an ATI 7500 PCI video card and the originally supplied ATI Fire GL AGP graphics card.

Well done DEBIAN! Please keep up the good work...

msw@zx6000:~$ uname -a
Linux zx6000 2.6.26-1-mckinley #1 SMP Sat Jan 10 19:19:15 UTC 2009 ia64 GNU/Linux

Sun Releases Java 6 JDK on Itanium

25th February 2009

After an announcement earlier last year that Sun and HP had teamed together to produce a fresh version of the SUN Java JRE & JDK, and a somewhat longer than predicted wait, a version is finally available.

The release notes are here. It can be downloaded by following the Java 6 Update 11 download link.

The latest version is Java 6 Update 11, although information on the Sun website indicates that an Update 12 version will be available shortly.

I downloaded the JDK and installed it on my recent Debian 5.0 installation, which is running on a HP ZX6000 2 x 1.3 Ghz Madison based box.

The JDK appears to be working correctly, and has been used to run various test programs, culminating in Netbeans 6.5 (see separate post).

Well done HP and SUN!