Fred's Home Page

Main
About me
csh is bad
Debian
FredCam
Hardware
Help out
Java-glossary
Job-control
KRoC/Linux
Lambda
Life-stuff
Links
Linux
Mesh
Misc
Music
occam
occam upgrades
occam tutorial
OpenUPSd
Pictures
Programming
Projects (PhD)
Publications
Quick gdb
RAPP
RMoX
Software
UNIX crashcourse
UWG
UWGBuilder
WG / WGBuilder
XDM-Choose
XHPD

Life-Stuff

(some people call these things blogs)

30/12/2007

Nearly the end of 2007! Plodding on with work, still got a small pile of marking to attend to and some exam questions to get written.. Been taking some time out to work on a train simulation framework, to be combined with the RS422 bus, which now has a "train controller" — basically a bunch of input and output ports (which has been sat on the desk since September waiting to be finished..). Do need to solder up the motor H-bridge circuits (for changing track points) and build some sensor circuits soon.. Maybe early in the new year :-).


02/12/2007

December already! Did some more work on NOCC, which is now looking quite hopeful (imo!). Support for trace analysis is mostly there, and started adding support for exceptions in occam-pi — for sequential process use only (avoiding the problem of what happens to processes parallel to an exception).

Put together a new KRoC release, kroc-1.5.0-pre3 (tgz) which is now the merged multiprocessor branch. Carl also got RMoX working with this, although that's not multiprocessor-capable yet (needs the relevant MP startup code adding!). Also found a bit of time to finish off some music, Crystal Worlds (MP3). Now to put some more pictures on the UKCMC website!


12/11/2007

November already, busy busy. More work on NOCC's support for trace analysis (OEP), looking fairly sensible so far! Also updated some of the compiler documentation (need to regenerate the diagram at some point..). KRoC, NOCC, RMoX, jctld, UWG/UWGBuilder and RAPP have now moved to the CSProjects subversion repository (easier public access!). Found a bit of time to update some music, Crystal Worlds (pre6, MP3), almost there with that one I think!

Put together a new KRoC release, kroc-1.5.0-pre2 (tgz), which builds with multiprocessor support by default (well, attempts to auto-detect whether or not it's supported). This is pulling from Carl's "cgr-mp" branch in CSProjects, due to be merged back into "trunk" soonish, but still a few small things to fix! Recently put some more demo programs into the repository, will emerge in the next release.


30/10/2007

Almost the end of October, and a pretty busy one! Got the Sipura boxen all configured and working right now, so all voicemail enabled (including silly messages!). There was a problem with the PSTN line disconnecting after 10 minutes or so, but that's now fixed :-). Caller ID also works nicely. Next stop, Zapateller.. Spent quite a bit of time fiddling around with the KRoC distribution and its repository. The sources have now moved to CSProjects (projects.cs.kent.ac.uk), and the next release (1.5.0-pre2) will be the multi-processor enabled version (soon to be moved back into the main trunk). NOCC is moving over there currently. Put in some hacking time to NOCC as well, working on trace specifications (e.g. to guarantee that a process behaves in a particular way); CSP really helps here! However, it means that the "trace specifications" are really minature CSP programs, rather than strict sets of traces. This has the advantage of [later] enabling the failures and divergences of an occam-pi process to be calculated (by the compiler). Also been doing some related work on escape analysis for occam-pi, although here that could be more readily described as memory reference segregation (and obvious implications for network distribution).

Recently upgraded my PC, all new and shiny now! Got a 24" TFT display (widescreen), which is excellent for getting vast amounts of code on the screen (and good for firefox tabs). Plus a new mobo, core-2 quad (2.4 GHz), 4 gigs of RAM and a GeForce 8600 GT. Not quite got the native NVIDIA drivers working in Linux yet, but the Xorg are doing a decent enough job! One of the really neat things is that I can now run DOSBox with all the old assembly demos (and some not so old ones!) at a sensible speed. Mouse behaviour is a little erratic though..


01/10/2007

Back from a fun walk with the Uni. mountaineering club, though feet a bit sore! (out of practice..). Walked from Wye back to Canterbury, stopping in a pub (or three) for lunch and refreshments. Somebody posted a link to this funny synthetic music video (quite a while ago, but only just got around to watching it).


29/09/2007

Almost the end of September, term started. Now mostly got Asterisk working at home and in the office using the Sipura boxen, with some help from voip-info.org and Dave. Unfortunately the IP link between home and the office is sufficiently lossy to blow most attempts at communication. Might try and solve this at some point, but at least have voicemail working sensibly! Unfortunately the SPA-3000 cannot distinguish between different types of incoming ringing, however, plans are afoot to build something using an Atmel ATmega8 which can. The Sipura passes the call to Asterisk about 2 seconds after ringing starts, so plenty of time to figure out the ring for Asterisk. Hopefully I won't have to hack Asterisk..!

Went up to York Uni the other week for the CoSMoS kick-off meeting. Many interesting discussions had and things learned. Plants, fungi and liquid crystals suddenly seem a lot more interesting :-). Put a few more hours into NOCC hackery, will leave the parser alone for now (it needs a fairly heavy tweak to deal with parsing occam-pi correctly). Also looking towards a 1.5.0-pre1 release of KRoC, which will hopefully work on Linux, FreeBSD, Cygwin and Mac OS X, and also provide for multi-processor support (ack to Carl and Adam).


10/09/2007

Busy busy. Went orienteering the other day for the first time ever, event organised by the Saxons Orienteering Club, quite a lot of fun! (though times were depressingly bad!). Also managed to get the Sipura boxen at home and in the office working nicely, registering with Asterisk and whatnot. Still playing around with it, no sensible trunk call mechanisms setup yet. If PBX is the question, Asterisk would appear to be a good answer :-).


05/09/2007

September, term starting in a couple of weeks -- better get planned for that soon! Got the LEGO train points working with the RS422 bus and neatly computer controlled (interface is crude but functional!). Went with three-wire-controlled H-bridge I found in Chuck's robotics notebook, which avoids any unintentional shorting out of the bridge if the I/O lines wiggle a bit. Turned out a bit larger than I expected on breadboard, maybe time to solder it up! Not got anywhere with the train yet though, busy doing other things for the FIRST LEGO League (Kent) competition, also writing papers. Tinkered a bit on NOCC, really need to cure the occam-pi parser a bit (by providing the DFA with a more substantial backtracking mechanism), mainly because of occam-pi's allowance for declarations in slightly strange places (in the scope of a single ALT guard amongst others). Steadily working towards a multi-processor/multi-core release of KRoC, hopefully before Christmas!


21/08/2007

Finished building the 16-character display device for the RS422 bus and installed it in the office window. Now people can see where I'm at (specifically "office hours" for students in term-time). Will take a photo of it sometime.. The display even seems to work happily on the end of a 10-meter length of CAT5 (most of these devices will work down to about 3.5v, though not ever had the wire long enough to get that much DC drop). Lose about 0.5v over 20 meters at home -- bit of "free" heating I suppose :-). Designed and started building a train-controller circuit, which is a complete hack in order to drive my RCX-enabled LEGO 9v train [missed out on some more track from eBay, grrr...]. This'll drive a bunch of "street lights" to illuminate the track (eye-candy), and time-switch the RS422 bus onto an RXQ1 433.92/433.33 MHz FM transceiver. A similar unit on the train (drawing power from the 9v AC track) will hopefully respond and do the right thing. The train driver is also timed, so it'll only go forwards or backwards in 1.5s chunks (avoiding disaster if it loses contact with the train controller). Interface between this and the RCX is another hack -- closed box with 4 LEDs from the AVR, and an LDR on the RCX's sensor input (should allow for 5 distinguishable levels with very little error), but not written the NQC program yet (trivial). Final parts of the puzzle are sensing where the train is on the track (probably going for LEDs and LDRs, the beam broken by a paddle attached to the train, or some lever nudged by train body as it goes past), and switching train points automatically. Built one of the little huts shown on FreeLUG, tested by hand and works fine, next up is driving it from the train controller. Also been working away on some conference papers, before the submission deadline!


17/08/2007

Been marking resit exams, not particularly encouraging. Most alarming was the lack of assistance requested -- these people are failing, why don't they want our help? Came across a few comical answers, though probably not deliberately so. When asked "name one of the three components of an operating-system kernel", with the expected answers "low-level scheduler", "first-level interrupt handler" or "IPC mechanisms", someone managed to say "code". Well, yes...

After some code-staring, managed to get the Cirrus Logic GD5446 framebuffer driver working in RMoX, mostly. Still only supports that single chipset, but at least it gets access to the video RAM in PCI-land. Slapped the existing framebuffer console onto the front of it, producing this. Next step is a decent font rendering engine! And after that a mouse driver probably. Just to be complex, the PCs PS/2 mouse port pops out as an auxillary interface on the keyboard controller (though not entirely unexpected).


12/08/2007

This blog is partly in response to an email query I received, and partly because I don't think I've said it online yet (although other people probably have). Talking about occam-pi specifically:

What is the need for a relationship between programming languages and process calculi?

Just to set the scene, programming languages (occam-pi, Java, C, ...) are human representations of tasks that we want a computer to perform. The programs created using programming languages do all sorts of things, from ensuring that an electronic toaster ejects the toast after a certain amount of time, to piloting unmanned probes on their journey into space (and less desirable things like making sure missiles hit the right target). Familar to most will be programs such as Microsoft Office or the Firefox web-browser.

Process calculi are mathematical representations of abstract machines, that take some input and transform it into output. Unlike simpler mathematics, process calculi typically represent systems of interacting concurrent components -- lots of individual, simpler, machines working together. Wikipedia has a good overview of process calculi, though it is a bit (inescapably) mathematical. The behaviours of process calculi can be particularly complex, for which mathematics becomes a tool to help us understand them.

There is some natural relationship between process calculi and programming languages in the sense that we can write some programs in both. For instance, sorting a list of numbers is something which we can do in both. In fact, theory states that any computation expressible in a process calculus is also expressible in a programming language and vice versa, though for many cases, the transformation will result in something which is too huge to manage or reason about sensibly. Such investigations are typically in the domain of theoretical computer science and mathematics. It is also reasonable to assume that many programmers would have little or no idea of what a process calculus is, or what they can be used for -- their interest is primarily in writing programs to perform particular tasks.

Digressing a bit on computer programming, computers are very general-purpose machines indeed. For instance, there is little reason to doubt that given sufficient hardware, a computer could perform the same tasks as a human brain (essentially being alive). However, we lack sufficient understanding on how to approach programming such things. After all, life is just the result of a biological computer executing its DNA program -- we just have a limited understanding about how that all works; we still can't "design" a new life form from scratch -- e.g. giant winged creatures to comsume airborne pollutants.

So we have programming languages and process calculi, mostly separate. One of the major differences is in expressive flexibility: programming languages are generally designed to allow the programmer a lot of flexibility, or different ways of accomplishing the same task, often in the interests of performance. The down-side is that while the increased expressiveness simplifies programming, it means that we can end up expressing things which don't make logical sense -- "bugs" to most. Unfortunately, discovering and removing such errors is a procedure requiring time, effort and human involvement ("testing"). As time goes on, existing bugs are removed, but upgrades in functionality and fixes to existing bugs may introduce new bugs of their own, so the cycle continues. Generally speaking, the longer a piece of software has been around, the more bug-free it will be, and conversely, people expect new software to contain more bugs than older software.

Such problems affect the majority of mainstream programming langauges, including C, C++ and Java. Other, less mainstream languages, such as Haskell, Prolog and occam have less expressive flexibility, and consequently, programs written in these languages typically have fewer bugs. Haskell is a functional language which, along with other functional languages, have a strong mathematical base (not a process calculi per se, but similar in mathematical purpose). This makes it relatively easy to generate formal proofs of program correctness, as we can guarantee that the action of anything programmed in the language has a well understood behaviour. The same cannot be said of most imperative languages, particularly in the presence of concurrency. Unfortunately, it is not immediately obvious how to go about writing something like Microsoft's Word in a language such as Haskell, nor would most programmers want to.

The occam programming language, and its modern derivative occam-pi seeks a middle-ground, leveraging concurrency as a tool to simplify systems design and implementation, not complicate it. Whole software systems are essentially collections of hundreds, thousands or even millions of individual "mini-programs", or processes, interacting with each other. The CSP process calculus can be used to describe, and therefore mathematically reason about, the interactions of occam-pi processes. This guarantees that the way in which we plumb these processes together is "safe". Individual processes are programmed in an imperative style, so are subject to some bugs (e.g. the incorrect implementation of a sequential sorting algorithm), but at most we will be debugging an individual process -- not an entire software system. And neither does the programmer need to worry about errors arising from badly handled concurrency: the occam-pi compiler enforces strict rules about parallel usage and variable aliasing. On the negative side, enforcing such things requires some restriction in expressive flexibility. However, this is arguably balanced by the fact that we only need to deal with single processes one at a time -- much easier for the programmer, who then doesn't need to know the entire system to understand a single component. As a further advantage, highly concurrent occam-pi programs are readily distributed over large numbers of processors for performance, which is the way the hardware world seems to be heading (multi-processor, multi-core, massively multi-core, supercomputers, ...).

So back to the original question: what is the need for a relationship between programming languages and process calculi? Looking at the above, there is indeed a need, particularly in the light of increasing hardware concurrency and a desire for faster, more efficient, software. My argument would be that if we want to build large software systems which we can understand and maintain, then programming languages based on process calculi are quite necessary. Concurrency is the key to this: it can be used as a design tool to simplify systems implementation (lots of small/trivial programs, interacting to get the job done); and process calculi can be used to mathematically understand and prove properties of concurrent software systems -- so we know the concurrency is right. Getting the balance right between expressive functionality in a language and provability of program correctness is not easy, particularly if we want people to adopt such languages for the betterment of computer software generally. In occam-pi, we strive to get this balance about right.

For further rantings on language deficiencies and concurrency failures using threads-and-locks, see entries for 11th October 2005 and 12th October 2005. As a final point, one can build a CSP-ish model of multithreaded C/Java programs, but it would probably result in a proof stating that the program does do what we intended, but as one possibility out of millions of things which we didn't intend for it to do. I.e., we can prove that it does do the right thing, but can't prove that it won't do the wrong thing. And that last point ultimately dooms many languages, if we want some hope of guaranteeing program correctness.


10/08/2007

Bashed away on the Triton a bit more, came out with TrancePlay1.mp3. Not entirely happy about the ending, but the timing is more or less there.


09/08/2007

Various hacking, paper writing and admin things in progress. Also got a pile of resit exams to mark now :-(. Fiddled around a bit more with the GD5446 framebuffer driver for RMoX, but still no luck. Ought to see if the Cirrus framebuffer driver in Linux works in qemu (as that's the rough basis for the occam-pi implementation). Had a bit of fun the other night with some lambda-calculus, defining a fairly basic Turing machine. Probably not very elegant, but good fun nonetheless. Got hold of a Sipura SPA-2000 VOIP adapter thingy, to play around with VOIP at some point. Need two SPA-3000s to be properly useful though (since these have an FXO connection for the phone network). Once those are setup, it should be simple (with Asterisk) to forward calls between home and the office, make office calls from home and vice versa. Quality of service might be an issue, particularly over broadband (we get about 3100/488 down/up), but there are some smart people here who know about making that work right.


06/08/2007

Into August..! Finally fixed the problems with the RS422 bus 16-character display device -- turns out it was something in the generic RS422 protocol code (C code, that is). Just about ready to burn the AVR and try it out properly :-). Tried to write a Cirrus Logic GD5446 framebuffer driver for RMoX, which didn't quite work as expected, but did at least do something.


31/07/2007

Spent most of the weekend playing around with RMoX, writing a framebuffer console for VGA mode X, so far so good :-). Even manages to restore text mode correctly when it shuts down! Not tried it on the real embedded hardware yet, not sure how the LCD screen will react to being prodded like that (probably fuzzily). Plenty of good VGA programming information on the FreeVGA site. Temporarily gave up on the VESA framebuffer driver -- having looked at a couple of freely available implementations (Linux, NetBSD and Xorg), it seems that the hardware really does want us to do a nice 16-bit real-mode int 0x10 to set the video mode and prod the hardware in other ways. The other route is to go chipset specific (Qemu emulates a PCI Cirrus Logic GD5446, our embedded hardware has an AMD Geode). Also writing some papers, couple of weeks before the resit exams need to be marked..!


23/07/2007

Been hacking around with PHP and SQL a bit more, turning a bunch of similar looking files into something nice and generic (well, not so generic anymore, but the lax type system in PHP certainly helps :-)). Finally got around to watching Enterprise season 3, good stuff :-).


14/07/2007

Interested in doing a PhD in the field of computer-science, involving occam-pi and complex systems modelling? See this page for details. These studentships are part of the EPSRC funded CoSMoS project (with support from Microsoft, who are funding one of the PhDs).


14/07/2007

Back from a fun conference at CPA-2007, where we (Carl and myself) presented some recent RMoX work (paper can be downloaded from this page), which subsequently won best-paper award :-). Keynote speaches from Tony Hoare and David May, so lots of interesting things to talk about! After Adam had presented his occade work, chatted to someone about writing a platform game, and thought back to playing Flashback on Josh's Amiga 500 many years ago -- remembered for the fluidity of its character animations. Planning on sitting down to write a graphical dining-philosophers at some point soon, a step on the way to a nice platform game :-). PGCHE examined and passed, so yay about that :-). Currently having a small play around with Tutka, to see if it can drive the Triton rack nicely. Bought a bunch of new ROMs for this, so poking around with the multitude of new sounds (and there's a lot!).


17/06/2007

All immediate deadlines dealt with \o/. Taking some time "off" (in a sense, still researching and administrative hacking!) -- 'off' meaning irregular meals and distorted sleep patterns ;-). Prodded NOCC around a bit (timers and ALTs), plus generated some more documentation (wiki). Thought about adding passphrase support to the job control software (should just be a case of porting UWG's 'crypto' gadget back again. Triton currently having a rest -- had to send back the ROMs and RAM it came with (as they weren't actually supposed to be part of the item), ordered a few new ROMs and RAM to replace. On extraction of the original RAM, had a rumamge around my old SIMM collection for compatible memory -- stuffed in 3 32MB (at least I think) double-sided 72-pin SIMMs (60ns or 70ns unknown), and the Triton seems to recognise them, but thoroughly untested. Probably need to experiment with the sampling feature to exercise that. Currently writing some software (PHP, blergh!) to aid administration with this year's FIRST Lego League which we're going to hold at the end of November (on both the Canterbury and Medway campuses). Maybe 'campuses' should be 'campi'..? Being reintroduced to the fun times of SQL, at least PostgreSQL is a pretty decent database back-end, with a highly functional administrative tool, pgAdmin. Things here stopped for a while when the VPN routing box's root-disk crashed and burned about two weeks ago -- just a handful of bad sectors it seems, but which unfortunately gobbled up the /etc/ and /root/ directories, as well as some bits of /var/. Spent many hours looking at anonymous inode contents.. Now got a RAID-1 (mirror) disk pair going, should anything like that happen again (wonky disk wasn't _that_ old!). Got held up having to re-flash the BIOS to cope with an 80 GB disk (fun..), followed by a semi-automatic debian 'Etch' install (onto a RAID device).


23/05/2007

Someone stop the world, I want to get off! Mostly been marking exams, deathly boring and potentially insanity inducing. Also been hurridly getting my PGCHE submission into shape, before the University starts breaking down the office door. Final year projects mostly done — some good research-based projects this year :-). Not touched the Triton for a few weeks, it's resting.. Still idly looking for additional ROMs for it; having played with Josh's some time ago, definitely want to get hold of the "trance attack" ROM. Missed the orchestral collection ROM on ebay, but it went for more than I was prepared to part with, so not too grumpy about that! Still looking for a sensible tracker interface for MIDI, best bet might be a windoze based thing — blergh! Recently installed Visual Studio 8 on Windows to play with BT's web21c SDK, in the queue for "things after May".


07/05/2007

All marking done (minus final-year projects). Had another poke around with the Triton and multitrack, came up with TritonPlay2.mp3.


30/04/2007

Spent a couple of hours playing around with the Triton, came up with TritonPlay1.mp3.


29/04/2007

Almost the end of April, and still not really got into PGCHE mode yet.. (but it's next in the earliest-deadline-first scheduling queue). No more NOCC since last blog, apart from a slight fix to a silly parser error; the recursive DFAs needed a moment or two to settle in my mind.. Got one research funding proposal (for on-going and new developments of occam-pi) submitted to the ERC (European Research Council). Turns out they had around 9,000 proposals for their "starting independent research grants" call, of which they expect to fund 200-250 (about a 2% hit-rate..!). Wait and see now.. Finished off the marking for the operating systems (CO527) module, phew. Still got a stack of advanced concurrency scripts to mark, plus a pile of final-year projects. Mostly finished writing a paper for CPA-2007, bending the CR deadline a bit though.. Also got hold of a nice Tascam 8-track digital multitrack recorder, just about getting used to it. But still not found exactly the sort of tracker/MIDI software I want. KMidiTracker is probably the best I've found so far, but it has the occasional habit of locking up.. (not sure whether that's a fault of it or something underneath — the whole PC froze the other day when poking around with MIDI stuff).

Minor Earth tremor in Kent yesterday, which was a bit of excitement. Was downstairs transplanting bits of machines and setting up a new RAID boxen when it happened; only noticable thing was a slightly top-heavy stack of shelving which wobbled from side to side (at about 1 Hz). Worst place to be was Folkstone, where some folk lost bits of their houses.


15/04/2007

Middle of April already.. Steadily switching into PGCHE mode, amongst NOCC hackery and research proposal and paper writing. Got hold of a Korg Triton Rack and spent a bit of time poking around with it. Much fun :-). Definitely much more potential for music than soundtracker, but I do kinda like the traditional tracker interface. Now poking around in Linux for MIDI tools, found this useful page, and had a play around with some.


05/04/2007

Into April and the Easter holiday. Went up to Bristol for a couple of days, saw a bit of Stargate SG-1 season 10, looks pretty good on the whole! (though I partly agree with Grum's comments, on that they maybe should have stopped after season 8 — good sci-fi giggle nonetheless). Did some more work on NOCC, mostly in the compiler infrastructure department. Might be time for a fresh release before too long! Also got around to setting up the RMoX wiki, so yay on that front :-). NOCC development currently counting for some RMoX dev-time. Started looking again at putting multi-processor support into KRoC — defeated last time by some slight bugs in gcc's stack allocation handling. Did some primitive benchmarking on POSIX's pthread_getspecific() call. Comes in at around 12ns (cached best-case) on my 2.4 GHz P4 (non-fancy, non-HT), so using it on rescheduling in the run-time shouldn't be too expensive :-) [only affects certain code-paths, not every kernel entry]. Did a little more housekeeping on various webpages (but not updated rmox.net quite yet..), but got around to putting the job-control daemon software (homepage) on freshmeat.


27/03/2007

Almost the end of term! Been a busy term, but not quite over yet. Module evaluation things next.. Been reviewing papers for CPA 2007, some interesting/exciting things going on by the looks of it :-). Spent a bit of time working on NOCC, now parses the first bit of the CG-tests infrastructure successfully! Doesn't do much with it yet, though. Need to work out code-generation for array-slices next, and then the rest..


23/03/2007

The US patent office do it again: US-7028023 describes a linked list, with extra bits for doing (novel and new) things like a doubly linked list (slashdot article). Doesn't every CS course on the planet count as prior-art? I guess the next step (patent application for them) is a tree structure which has additional pointers for storing different (sub-)tree structures. Oh, that's not a new or novel idea either.. Sad times indeed.


18/03/2007

Into the second half of March; lots of work and lots of training, not so much climbing.. Got the RMoX paper written for CPA-2007, but still got a small stack of papers to review (past deadline now, sorry Alistair..). Looks like there will be some interesting and exciting things for this year's conference :-). Mostly finished setting coursework for the various modules this term, but still got marking. And still another couple of lectures to write (these are the fun ones now!). Been managing to put some time into NOCC development recently, looking good still. Transferred much of the static documentation into the sys-group Wiki (NOCC), but not added much to it yet. Mostly fixed PLACED PORT arrays now, which is nice. Currently restricting port addressing to be multiples of the sub-type size, not sure whether that makes complete sense on all architectures.. Might have a play with static barriers next, with the compiler figuring out for itself which sub-processes should be enrolled on a barrier.


01/03/2007

Ping, March. Still writing lectures, setting and marking coursework. At least much of it is a one-time large overhead.. Also hacking out a paper on the RMoX USB device-driver infrastructure (mostly Carl's work) for CPA-2007. Extended-deadline++ in a couple of hours..


19/02/2007

Tick, another weekend goes by. Almost entirely spent writing lectures slides, again.. Got the first batch of operating-systems coursework out of the way, next lot submitted this Tuesday. Also need to set the third part of this stuff for Tuesday (next on the TODO list). Followed by marking of the advanced concurrency coursework. Set some more coursework for this too -- a fairly hacky (but much fun!) Java transputer virtual machine (which reads in Intel hex-format transputer bytecode files). Uses JCSP to do the inter-JTVM wiring, although the supplied version is in single-transputer-mode [I've been writing the bytecode files by hand... minus checksum calculation]. Also the first CS assessment I'm aware of (at Kent) which has a qustion starting "Reverse engineer ..." ;-).

Found an hour during the week to poke the RS422 16-character display device. It seems to be receiving something at least now, and I even got a response out of it once, but something isn't entirely happy! Didn't drag out the oscilloscope yet though. Wrote a cheap shell script for building images for the Arduino board (they tend to call them 'sketches'); less Makefile editing..


12/02/2007

Operating-systems coursework submitted, now marking it.. This is supposed to be a blog, not a rant ... but suffice to say I'm midly scared by the disparity in our 2nd year students' programming ability. Compared with a few years ago, there's also a higher incidence of questions of the form "what's a 'command-line'?", which is also a bit worrying. Spent most of today (yesterday) hacking out a program to help with marking, seems to hold water :-). Next dollop of courseworks for advanced concurrency incoming Thursday, and still got Friday's lecture to write.. NotEnoughTimeException.

Spent some time in the lab over the weekend and progressed the 16-character display device. Now got a free-standing ATmega8 on the breadboard, which drives it correctly. Hooked it up to the RS422 bus, but nothing obvious happening there yet! The test device on the bus responds correctly though, which is good; probably trying to use a blown-up MAX487 or something.. Next step is to drop the oscilloscope on it and compare bit-patterns with the test device, which is receiving stuff correctly. Finally cracked the problem of burning bootloaders for the Arduino NG board using their parallel port programmer hack and UISP; turns out I needed to set the fuse bits to something other than the factory default..


06/02/2007

Almost another all-nighter.. Quick scribble and bed. Almost done with exam questions now, switching over to writing lecture slides for the advanced concurrency module. Deadline looming for the operating-system coursework (demonstrated by a rapid increase in the number of anonymous questions and email queries). Another thing to draw graphs of when I get a moment or two.. :-). In the odd slack hour here and there, been building a 16-character scrolly display device for the office. Much along the same lines as my existing RS422 hardware, but using an Arduino NG board (with an Atmel ATmega8). This now works, and have successfully assigned the blank board here at home with a LUN and extracted the device ID, etc. This uses DLR2416 4-character display devices. Gave up (temporarily) getting the 12-character AT90S8515 device to work -- program went in ok, but doing broken things. Don't think it's misassembled, but need to disassemble the binary and compare with my sources.. This new 16-char one is written in C.


30/01/2007

Almost the end of January. Still writing lecture slides and exam questions, pushing free-time out of the way a bit :-(. Just spent a couple of hours doing battle with WebCT, and now beginning to lose patience [incidently, their web front-page fails to mention what the product actually is..]. Never liked it much anyway due to its blatent failure to work right on my desktop. In principle it's a fairly straightforward and useful thing: teaching/learning environment accessed via a web-browser ("e-learning"), [wonder how long that'll take to reduce to "elearning" ..]. What totally kills it is an over-engineered front-end, attempting to run Java applets for no particularly good reason and things like that. Works pretty soundly with Internet Exploder and Windows XP; no great suprise there, although it is incredibly unresponsive (maybe my 2.4 GHz P4-HT isn't modern enough for it). Anyway, an older version of WebCT had this useful feature where one could import questions, although the format was incredibly grotty (but made pleasant with a bit of XML and XSLT). Similar functionality appears to be missing in the new version of WebCT, although after asking some people and grinding through some web-sites, turns out that it can import stuff -- provided you stick it neatly into a (semi-proprietary format) ZIP-file. But it doesn't appear to support the old question format -- well, that's unclear, the documentation is not technically helpful, and neither was the error message it gave me. Digging deeper, it turns out that it should be able to import questions from a format defined by IMS. Getting hold of said specs (or rather examples of questions with which I can tweak the XSLT) is another hurdle, requiring registration and some semi-personal details to be fed to IMS. The switchboard can have those calls. Anyway, now the zipfile is downloaded, and zipinfo hints it might have what I'm looking for in it, so off to do that, or bed. Giving a talk to school pupils in the morning.. I'm sure that to most teachers/lecturers/etc. WebCT is fine; to the computer-scientist, I'm not so sure. Bottom line, moodle.


16/01/2007

Into term, and a lot of teaching. Off to the Medway campus later, assuming I can find my way through Medway; a lot of roundabouts there. Many hours spent writing lectures and exam questions, still going, becoming numb. Also nearly time to set some coursework. Started teaching the advanced concurrency module, based around the occam-pi language; so far so good :-). More work, less waffle. Read up a bit on DCC, looking for ways to make my lego train more intelligent; home-brew is possible, but would result in a somewhat messy train I think!


04/01/2007

Steadily approaching the start of term, lots of time spent planning lectures and things like that. Still got to write a bunch of them however. Attempting to fix some of the content of the operating-systems module; students said there was just too much last year, and I'm inclined to agree. Though the module content hasn't changed much (operating-systems seem to evolve slower than other software), it's still fairly low-level, while other modules are heading higher-level. Picked up the LEGO Star-Wars II for the XBox, looks like a fun game :-). Also got Need For Speed Most Wanted, looks a bit better than Underground 2. On hacking, tidied up some of the front-end handling in NOCC and got all (I think) of the occam-pi (so far) reductions and grammars into a language-definition file; similar for MCSP and the RCX BASIC parser too (though these are substantially less developed).


01/01/2007

Woo, 2007. Happy new year all! :-). Had originally planned to descend on a random party in Canterbury, but nothing came up, so had a quiet one at home! Quite a few people did similar it seems, not completely suprising given the weather. More NOCC hacking undertaken, mostly tidying up the front-end of the compiler a bit (putting more stuff in the language definition file(s) and less stuff in the C code). Still a bit more to go. On the hardware front, still no joy with getting the 12-char-display device working right.. Did build another RS232/RS422 bridge, so should be able to prod it from the PC (and maybe add some internal debugging code, still got loads of flash left..). Just need to solder up a relevant serial cable for it. Speaking of which, promised someone I'd make them a serial cable for some strange hardware, so ought to do that sometime.. Also got 15 days to write exam questions, so ought to get on with that too, boo :-(. Looks like it's going to be another term of just-in-time lecture slides as well.. Some of the compiler work is currently counting towards RMoX development, funded by EPSRC; Carl's been busy working on the PCI core, which is now mostly there! USB support next, since the PC/104+ dev-kit we've ordered has some of this on it. Still waiting for that hardware...


30/12/2006

Back from the doing the Christmas thing, much fun and merriment. Got some more Futurama DVDs, plus picked up season 2 of the Galactica series; still making my way through these. Been spending some time working on NOCC (new occam-pi compiler), though it's possible we'll choose a different route for a new production compiler -- still not completely made my mind up about this.. I like C and I understand it, my Scheme is not as solid (though it's a fairly "accessible" language). Seems likely I'll end up implementing some basic functional language inside the compiler at some point, reinventing the wheel a bit, but building wheels is fun :-). In the compiler itself, got basic PORT handling working and some support for EXTERNAL declarations (though these are slightly different from external declarations supported by occ21 as the memory requirements now include an 'adjustment' and the workspace size includes parameters). Also putting in some support for reading language definitions from text files (as far as these work sensibly). Mental note: don't go to sleep with bread in the bread-machine, it goes soggy.

Spent a bit of time producing a WT flyer to wave at students in lectures; it's good for you :-). If I had the time, would combine this with an assembly demo.. Something along the same lines might be a route into an OpenGL OpenGL programming experiment (got the book and the hardware now); still need to import Damian's OpenGL bindings from the Transterpreter into KRoC via SDL. Pondered a bit about a UWG binding for OpenGL too, though it doesn't appear obvious how these things can be embedded into other X11 windows. Also pondering about getting the Caller ID unit working again -- ordering some CMX603 chips which can produce the bitstream containing the CID and other (call-waiting) data. Exiting caller-ID unit doesn't get the signal when the ADSL modem is connected -- not sure why this is, possibly noise from the PCI ADSL modem intefering. At some point I'll get around to checking the attenuation of 10+ MHz signals by the ADSL microfilter (and hopefully figuring out what's actually busted here)..

On the hardware side, got a RS422 device with 3 SLR2016 (4-char LED display w/ integrated logic) built. Plan is to stick it on the office door somehow, more interesting than a post-it note! Damn thing doesn't quite work right yet though.. For some silly reason it looks like the SRAM in the AT90S8515 is getting trampled on. Finished building a programmer for the Arduino board, which appears to work correctly. Had to patch AVRDUDE to get it to program raw EEPROM files right, ardude-5.2-fred1.patch.


20/12/2006

Trying to take a day or two 'off' -- also need to go do some Christmas shopping, real soon. Wired up the SLR2016 display board, but it complete failed to work right for some reason ;-). Oscilloscope shows some slightly unexpected behaviour from the program; added some debugging LEDs, more tomorrow (today!). Found an hour or two to fiddle around on a new tune, Journey's End (no imaginative name came to mind yet). Also getting around to watching the end of the Firefly series, pretty good, shame they canned it..


14/12/2006

Been fiddling around with some of the hardware stuff, using the Arduino boards I've got. This is basically an Atmel ATmega8 AVR (8-bit RISC microprocessor) with a FT232R USB serial UART interface. The AVR comes with a bit of bootloader logic (from the Arduino folk), making it pretty simple to use the AVRDUDE programmer. Also first experience of C programming on an AVR device -- not too bad, but I think I prefer assembler generally (for these small 8-bit devices at least). Got most of the old programmer code implemented in C and talking to a revised 'sermond' (the old hacky one which got re-written..). That'll at least provide something for programming other AVR devices (in assembler); just enough pins on the ATmega8 to manage programming other ATmega8's, without resorting to a collection of latches.. Next trick is to get an AT90S8515 (or its new incarnation, the ATmega8515) driving a bunch of SLR2016 LED displays (and stick it on the office door or somesuch). After that, some hardware to control the LEGO train (image/png) around the office.. :-).


12/12/2006

Into December now, but still feels like Autumn, just a bit more wet. I think we broke our planet a bit :-(. Shame that we lack nearby inhabitable planets and some means to get there.. Some thinkgeek and amazon stuff arrived, together with a PS/2-USB keyboard converter from dabs. Now back to using my trusty old IBM MF-II, though the Sun one had the appeal of extra keys and a very light action. Fixed some of the text wrapping issues on the UWGIcon gadget (UWG). Released new versions of rapp (0.2.0) and rappd (0.2.0) (webpage), to go with new releases of UWG (0.2.0) and ubuildinit (0.2.0). The RAPP client now appears to handle multiple sessions on the server quite happily, and hasn't blown up too horribly yet. Here's a pretty screenshot of it in action. Also re-engineered the other person gadgets for UWG: UWGPaul, UWGSteve and UWGKarim. Still don't have a photo of Karim -- are you out there mate? Updated the subversion copy of UWGBuilder to work with the new UWG, but haven't made a fresh release yet -- still wanting to put some more functionality in first..

Currently recovering from a busy weekend, mostly a WingTsun (EWTO website - European WingTsun Organisation, IWTA website - International WingTsun Association) seminar, plus the UKC mountaineering club Christmas meal on Saturday night (aborted about 10:30pm due to 7am alarm the following day); think I ate something bad at some point, insides not excessively happy. But, and after several years of training (and on my birthday), received my WingTsun 1st Technician from the hands of Grandmaster Keith Kernspecht :-).


27/11/2006

Nearly the end of November already.. Definitely getting a bit colder now (== more heating). Just finished a fairly intense hacking session on RAPP, including a pretty new explorer thing (image) -- well, nearly pretty. The UWGIcon gadget needs a bit more work, like wrapping text and transparency, but functional for now. Also hacked out a "UWGMVLayout" gadget for allowing the user to drag gadgets around; icons on a panel in this case. That currently does outline dragging, simpler for the time being :-). Various fixes to the RAPP server too, both client and server should now be able to handle multiple sessions without falling apart too horribly. Minor problem spotted with initial output from the rapp control module, one block of data overtaking another.. (easy fix though!). Restored "UWGFred" and "UWGDave" gadgets, previously in WG.

Finally got new lab machine up and running, with a Gainward Geforce Bliss 7950GT, albeit the 256MB version, but that's still plenty :-). Apparently it'll drive 2560 x 1600 onto a monitor, shame I don't have anything capable of that. 1600x1200 on one monitor and 1400x1050 on the other will do for now. Also can do GL stuff on both heads at the same time, bonus! Only thing left now is to get an adapter to connect my nice IBM MF-II keyboard, with a PS2 plug, into the new Dell, with only USB sockets. Could always transplant a keyboard controller, but that sounds like hastle and keyboard death, so nope. Currently using a 120-ish key Sun keyboard; no right control key...


15/11/2006

Back from another fun weekend with the mountaineering club in the lake district; managed to drive the minibus without any accidents \o/. Didn't get any climbing in over the weekend -- far too wet and nasty! Good walks on both days, Saturday got a bit insane, wind taking out peoples legs from under them, somersaulted through the air, etc. Few more weeks until the final trip this term. Monday night went climbing at Herne Bay high school (now our regular haunt on Monday nights I think, still waiting for the sports centre's wall to be "fixed"), fantastic night's climbing by all accounts; Dave and myself seemed to be doing route after route (with me falling off more of them!). Some good naturals-only routes done too. Managed to get a serious hacking session in Tuesday, probably about 12 hours worth over the afternoon, evening and early hours. Fixed a bug with the passphrase mechanism in UWG's UWGCrypto gadget (now working happily), and got the RAPP client + server doing basic user authentication (based on signed message digests using public/private key pairs). Takes a little while to collect the required entrophy for the random generator when generating keys, so might put a progress bar or something in this (assuming libgcrypt, from the GnuPG software, supports this -- I guess it does, it seems to be pretty flexible, though its use of S-expressions makes me want to bang my head on the desk a bit!). General auth code is nice and fast however :-), but I'm not attempting to encrypt traffic itself (ssh and https do that job well enough). Bit more on this tonight, after writing up some CO523 lecture notes; had to spend some time re-learning some of this stuff (though that was, sadly, fun!). It's maybe a shame that it can be hard convincing students that logic/maths is useful (and fundamental to CS).. Proving things about Java is a long way from the logic learnt; Haskell's a bit nearer, but still some distance. And we don't teach type-theory or lambda-calculus much currently (despite these being quite fascinating, certainly the untyped lambda calculus).


06/11/2006

Monday evening. Hello September \o/. Long weekend -- Saturday spent at a TG WT seminar, much fun, much learnt, and in case there was ever any confusion, Master Andrew is indeed 'master' :-). Sunday spent mostly hacking RAPP things, server got a whole raft of updates, client not so many. New config file handling amongst others, seem to be moving over to XML style config files -- not too hard to parse and pretty flexible (as much as 'resolve_config()' allows anyhow). Starting to put cryptographic support into the RAPP client, using UWG's 'UWGCrypto' gadget. Monday night (tonight), climbing at Herne Bay, managed my first proper indoor lead, yay, and then did another which was harder and fell off. Mental note (for chopping MP3 files): a 100 minutes does not an hour make. But interesting selection nontheless. Recently got that new 'Slither' film on DVD, good laugh generally, bit turgid in parts. Also got the [weak] trilogy of 'the fast and the furious', '2 fast 2 furious' and 'fast and the furious: tokyo drift' -- definitely good viewing for anyone into silly car stuff! Finally, thanks to Jim Moores who got me Steven Wolfram's "A New Kind of Science" (book) -- a fantastic journey of insight and intrigue. Speaking of fantasic journeys, set new high scores on 'Pro Pinball: Fantastic Journey' (modest) and almost a new high score on 'Pro Pinball: Timeshock!' [XBox], a whopping 2.2 billion there (trying to beat 2.3).


30/10/2006

Back from a fun weekend in the Peak District with the mountaineering club. Fairly wet walk on Saturday, climbing on the Sunday. Spent the week mostly working on various things, not much coding got done. Started refactoring the RAPP server-side code, into something a bit easier to cope with. Some small protocol changes in progress. Also started filling in supported gadget properties in UWG's gadget-definitions XML file.

Now Halloween, woo, no trick-or-treaters visited; just as well, only really got breakfast-bars at the moment! Having a night off mostly, silly Halloween kung-fu stuff tomorrow. Old UPS's battery may finally have died, so got a new (and a bit bigger) APC UPS (one of the smart-UPS jobbies). Currently running apcupsd to drive it (well, just monitor at the moment); pondering how to integrate with openupsd. Might end up having it suck on the apcupsd status file to start with..


24/10/2006

Almost the end of October already :-O. Settled down with final-year projects now, minus one RAPP group. On that score, started refactoring the server code over the weekend, looking a bit better now -- less of a complex mess anyway. Also fiddled around UWG a little while ago, added a 'UWGIcon' gadget, intended for desktop style things. And finally fixed the FreeType2 font integration, more or less -- things at least get rendered half sensibly now! Not sure my fg-blend-to-bg algorithm is ideal, quick, nor sensible, but it seems to do the job.. At least it generalised text drawing in UWG :-). And there appears to be a freely available LCARS font from lcarsdeveloper.com, yay! Got thinking about a new round of LCARS style gadget and automatic (content based) layout of things [which is how the stuff we see in Star-Trek appears to work]. Managed to find a few hours over the weeks and finished off a new tune, Final Step 2 (7:11, MP3). Apart from those things, lots of admin and research-related goings on. Ran out of log-book, again. Not much progress on research-hacks, apart from RAPP, but things queueing up there. Thinking about progress for the new occam-pi compiler. Although functional paradigms may be better for general tree transformations and validations, something still attracts me to using C to implement it (probably from having mostly programmed in C..). It's also explicit -- unless the abstraction is clean, I'm against having languages hide things (suffered by Java, C++; not by occam, Prolog).


02/10/2006

Into October already.. Spent some admin time sorting out final-year projects (seem to have collected quite a few this year). Two groups doing things with RAPP which should prove interesting. Fiddled around with UWG and the rapp client + server so that they build on Solaris -- and seem to work ok! Fixed a few bugs along the way. Phill pointed me at an interesting article on an Intel 80-core future (slashdot article). On the subject of user-interfaces, came across an article on the future of GUIs. Currently digesting an MSc dissertation, paused for a creativity break and updated some music (final step 2 (pre3)); close to completion I think..


24/09/2006

A weekend of mostly hacking :-). Did some more work on UWG's UWGTiledArena gadget, result is still a bit lumpy, but heading in the right direction. Also went through all the UWG gadgets to generalise font-handling code (to support using FreeType2 in the not too distant future). Started re-thinking how the `LCARS' gadgets might look/work, after running across lcarsdeveloper.com. Some other small changes to UWG and RAPP so that they build on solaris -- seems to work, RAPP client successfully talked to the Linux server and did stuff :-). In an idle moment on Thursday (while waiting for a large pile of debian updates to install) put together a graph showing the pi-cluster status. Soundtracker got broken briefly, but resolved thanks to a better-than-what-I-had-installed version in Debian; churned out a updated tune, Final Step 2 (pre2). Also been poking around with NOCC over the weekend; now uses the new multiway synchronisation instructions to support MCSP, a CSP-like language. Some of this stuff made its way into a presentation given at CPA-2006.


22/09/2006

Back from CPA-2006, a thoroughly enjoyable and informative conference. Mostly been poking around with NOCC and UWG, with almost-a-tile-gadget taking shape (trying to recreate dune-2 style games again). More bugs added to the KRoC to-do list...


12/09/2006

Into September already. Almost ready for the CPA 2006 conference (starting this weekend). Term starts in a couple of weeks, mostly the same deal as last year (majority of the teaching in 2007). Should give me some time this year to finish some long outstanding things.. Still trying to recruit an RA for my EPSRC project; undoubtedly looking for someone who wants the job, rather than the money (which isn't a huge amount sadly). Lots of time put into UWG and RAPP recently. Picked up the rapp.uk.net domain, with the intention of putting something public facing there at some point (another domain for those silly people at the 'domain registry of america' to try and take off me; my registrar is quite capable of reminding me to renew, thanks!). Reminds me about contacting the post-office to stop all the crap that falls through the letterbox too, most of which ends up unread, de-penned and in the recycling bucket.


29/08/2006

Spent a weekend of hackery on RAPP, UWG, UWGBuilder, with a raft of new releases (freshmeat-ed), and slightly unrelated, NOCC. Got most parallel combinations of multiway synchronisations synching right now, next up, alternation -- run-time is in place, so shouldn't be too hard. Left it last night (a.k.a. very early this morning) with the compiler generating something that looked reasonable. Now time to see if it works! Also time to put some ingredients in the bread machine. Also linked in the job control daemon page -- it appears to have been working mostly fine on our cluster for a couple of months now :-). Came across this BBC news article; unbelievable the extent to which beaurocracy has maimed common-sense.. though that's nothing new.


25/08/2006

Did some exam marking for the CO527 (OS + arch) module. Thankfully at least a few students did better this time around :-). Came across an interesting article on dark matter, also fixed the BBC news links in my rawdog config; they seem to keep moving them around.. At long last mostly tidied up the UWG autoconf stuff, maybe not perfect, but better than what it was. Debian control transferred to Dave to rebuild the packages. Might finally get a release of UWGBuilder out this weekend! Still got a few things that need sorting in it, but it's mostly happy. And another release of RAPP (client+server) queued (also with fixed autoconf stuff).


18/08/2006

Back from the ICECCS-2006 conference, hosted by Stanford University. Despite all the hoo-hah regarding airport security in the UK, the traveling wasn't too bad. Though I still hate long-haul flights -- maybe I should get a little laptop for hacking-on-the-go.. Recently had a little play with Python, generating a new version of the RAPP multi-client chat application. Didn't get much sleep on the plane, so might get over the jet-lag fairly quickly.. still feels a bit like midday to me (though it's really the evening now). Saw "mission impossible 3" on the plane -- quite good I thought! The pre-screen reviews from two American chaps were quite funny. And discovery-channel++, unfortuantely didn't get a chance to visit the discovery shop in Palo Alto.


09/08/2006

More work on multi-way synchronisations, with real PARs this time. Getting quite complex in the compiler, but neatly contained within its own bit of code and parse-tree nodes. Compiler currently works out, based on alphabets, which processes in a PAR should be enrolled. Got held up by a slight problem with PAR space allocation, the usage data-structure ended up floated to the top of workspace, which is mostly fine, except that the run-time expects it to be at offset zero ... (hence 'successor workspace' ..). Safe to let it float provided that it has the real successor workspace is pointed at inside the usage structure (NOCC-specific ENDP), but maybe want to fix it at offset 0 anyway.. (easily done by having it use some low workspace). Spent a couple of hours over the weekend generating some fresh music (Odd Ditty - pre1), mostly under construction - bit faster than usual, plus some attempt to use those higher frequencies (most of my tune attempts lean towards the lower end of the spectrum, maybe it's my headphones..).


08/08/2006

Looking for an RA position in Computer Science ? One 3-year post now advertising at the University of Kent (Canterbury campus) in the Department of Computer Science. The work relates to the RMoX operating-system, in an EPSRC funded project to develop a concurrent component "took-kit" and design tools for building embedded operating-systems using PC/104 modules. Feel free to contact me if you have questions/etc. relating to this post.


07/08/2006

Mostly done with papers for CPA-2006, did promise Ruth a bit of hacking time on the CPA paper database, PHP book at the ready. Adam posted an interesting link to execution in the kingdom of nouns (aka Java rant). Put some time into getting the new multi-way synchronisation instructions together -- to support anything from interleaving (1 of m), through arbitrary numbers (n of m, or the Santa Claus problem), up to full-sync (m of m). The clever trick being to get the implementation right without losing control of complexity -- we allow processes to simultaneously offer multiple synchronisations, but only select one (the "ALT" in occam/occam-pi). The data-structure diagram for a fairly simple case already looks like a regular tube map.. It does, however, avoid run-time memory allocation (which was previously needed for per-process, per-barrier wait-queue structures). Now an evil piece of code in the new occam-pi compiler. Will carry on working on that thisevening, before moving onto a presentation for the upcoming ICECCS 2006 conference. Will hopefully get to see a bit of San Francisco while I'm out there. And happy birthday Dad :-).


01/08/2006

August already.. Still grinding on with various things. Matt posted a link to this interesting article on programming (rather, on becoming a programmer). Interesting not least because Richard Bornat came to Kent and talked to us about it a while back. Some of the implications of this stuff, particularly for computer-science recruitment, are interesting.


26/07/2006

Almost at the end of July, eep. Had a couple of days "off" (mostly hacking). Some more progress made on UWG, RAPP and UWGBuilder. Now spending time doing papers and edit-stuff for the CPA 2006 conference -- including some updates to the NOCC compiler (which also compiles CSP now, sort of). England seems to be suffering with the heat somewhat this year, especially Kent. Temperatures reaching 30 Celsius over the last couple of days, urk :-(. Computers don't really help the situation much.. In fun moments, made some musical dittys, organ thing (pre1) and one step ditty (pre1).


06/07/2006

Into July, almost a week.. Did a summer-school "taster session" for the University today (yesterday), which went down mostly well I think :-). Tried out a concurrent-ish bubble-sorting algorithm on volunteers, good giggle and I think (hope) it got the point across about complexity -- certainly some intelligent comments from the audience. Didn't have time to go through my lambda-calculus slide, unfortunately.. Another unfortunately, spent until 8am Tuesday morning writing the slides, now got a slightly confused brain; keep thinking it's Friday tomorrow (today), but I'm pretty sure it's Thursday.. Sleep patterns also not very good due to the insane heat we've been experiencing down in the south of England recently. Tuesday was the hottest day of the year so far I think (32 degrees, ouch). Engineering opportunity for a massive slightly-transparent solar panel, floated in the air using balloons or similar, providing some shade and generating electricity to power air-con units below. Or find a bunch of nice tall buildings to stretch it between.. In spare moments, been doing more to UWGBuilder, that now has a home-page. Almost ready for a release, but just a couple of things I'd like to tidy-up first; still a fair way from completion, but getting there..


29/06/2006

Mostly finished CPA 2006 paper, now onto reviewing some other papers. To this end, played around with NOCC some more (the compiler that implements the MCSP language, ish). As soon as the replicated-seq is finished, can start getting benchmark data out of it... A crude benchmark puts the new multi-way synchronisation instructions in the run-time at 392 nanoseconds for a complete synchronisation of 2 uncontended processes. Really want a bunch of benchmarks that cover numbers of processes and level of contention (overlap of processes) -- good excuse for a 3D surface plot if nothing else :-). That 392 is probably horribly over-estimated, as it includes 1/10th of writing 'report' down a pipe (hence the need for some counted sequence..). Also fiddled around with UWG some more, bits and pieces for gadget updates. UWGBuilder slowing heading towards something useful too -- can now type something in the property box and have the gadget updated. Only got string properties updating currently; colours would be useful (beyond the preferential ones in the config), colour selector thing... Once it can export XHPD files and other properties are dealt with, will probably make an initial release. Editing code and stuff like that will be the next nugget (bit more complicated in this version since the code goes in-line).


26/06/2006

Mostly been working on UWG (0.1.5 released), now looking fairly fluffy :-). Also been working on the new incarnation of WGBuilder, a screenshot of which can be seen here. Several parts of the builder now work ok, but most is incomplete. Got the majority of UWG gadgets into the new-style gadget database. Next steps are to allow property updates from the properties box and export-to-xhpd -- that'll make it useful for generating RAPP interfaces if nothing else :-). Code isn't as complex as the previous version, but still expecting a good 50k lines. Next up is some more work on RAPP, will probably attempt to publish something on this in the not too distant future (and see how the reviewers respond to it!). Pondered some more on the new occam-pi compiler, which is now compiling CSP-ish programs happily, mostly. Still a fairly primitive language, so not terribly useful for anything practical at the moment (it was intended for playing, however). Paper for Communicating Process Architectures 2006 under construction ...


18/06/2006

Did more work on the pi-cluster job-control system, now on its own web-page here. Software now running across the cluster and seems to be pretty much intact :-). Started working on a paper for CPA 2006, initial paper submission deadline tomorrow... Also been doing quite a bit of work on micro-WG (UWG), now have menus working sensibly. Started porting WGBuilder over to UWG, so far so good! Should actually be a bit simpler this time around, now that there are no C++ problems to get in the way :-). The general design of the system seems to be somewhere between object-oriented and aspect-oriented, but not quite either. "Solution oriented" might be appropriate..


05/06/2006

Into June.. Been spending a lot of time recently writing a job-control thing for the pi-cluster. Currently looking pretty neat, though a bit more fiddly than expected. Currently has the ability to list, suspend, resume and renice processes in a cluster-type environment, with some fairly sensible mechanisms to identify jobs. Things which are currently lacking (and should be dealt with before a 1.0 release) include starting/killing jobs and fault-tolerance mechanisms -- some of the needed bits for making it fault-tolerant are in place, mainly done by having more than 1 central server and allowing hosts/users to fail-over into different ones when connections go stale. The user-end of it support interactive-mode (with libreadline) and a RAPP client mode, which is a bit experimental, but what's currently working can be seen here. Also does plain old command-line mode for use in scripts and things. In other things, been to some BBQs (now that it's mostly summer) and tinkered around in soundtracker some more.


23/05/2006

Some more time goes by.. Released KRoC 1.4.1-pre4 the other day, but mostly only works on Linux. Crashes horribly on Suse and Fedora distributions. Recent subversion checkins to ccsp should (maybe) fix some of the problems. Created a new branch to play around with the broken stuff in.. Someone posted a link to an interesting page on cockroach controlled robots; something you don't see everyday. Palgrave Macmillan sent me this link to some research findings about what now motivates people now to go University. Think I'd mostly agree with what they found -- less academic more 'for a job' (aspiration). The dependance of students on 'spoon-feeding' is probably the most annoying thing, attributed mostly to the changes in pre-university teaching (to meet targets, rather than educate individuals, it seems). The almost laughable result at this end is when students don't submit coursework claiming "I didn't do the work because it was too hard" or "I didn't know how to get started". To which the general response is "did you think about asking for help?" (from peers, from the lecturers, from the newsgroups, from the anonymous questions thing), followed by glum looks from the student.. On more fun things, Adam posted some links about continuations in Java, why we might want them and some more (older), continuations in Mono (which seems to be heading towards CSP-style semantics, much like the stackless Python that inspired it), and some other related continuation links ( Apache Cocoon, conccurency in Scheme in JavaScript). The general idea of continuations appears to have come from the Scheme world. C's setjmp/longjmp provide something half-way to continuations, except that the whole stack state is not preserved, meaning that you can continue to something still live in the current stack, but not anything that has returned past its setjmp. Although if you end up doing that in C, and aren't implementing a micro-scheduler or similar, probably best to look for a language that does it more cleanly (or use a language that provides the sort of concurrency abstractions you want, like occam-pi). Got around (again) to ordering a new DVD drive for the Xbox; last replacement didn't last very long. The drive arrived today, now installed and working -- tested out by taking my shiny Audi TT for a spin in Need for Speed Underground 2 (official page).


14/05/2006

A few more weeks float by.. In the process of exam marking at the moment, mostly boring, but needs to be done I suppose. Not actively taking part in the AUT action, largely because I'm not in the union, yet.. Totally agree with the point they're trying to make however. Reminds me of that song, "you won't get me I'm part of the union, ...". Apart from exams, mostly adminstration and research. Currently got the KRoC system in bits all over my virtual-desk(top)s. Attempting to re-work the way run-time kernel interfacing is done to speed things up a bit -- appears to be working too, until something segfaults horribly. Got the basic commstime down to 37ns on my 2.4 GHz P4 (non-HT), without inlining. With inlining things got faster, did see 18ns at one point, but fallen away from that again -- at the level where slightly different code-generation can have a significant impact (+/- 20%) on the reported times. Much of the fiddling around is to support multi-processor scheduling in the not too distant future, given that these flash dual-core P4s are beginning to appear on the desktop (and in servers). Also been fixing various bugs (as have other people, thanks!), so the next (1.4.1-pre4) release should be somewhat better; Adam found and fixed a particuarly unpleaseant memory-leak with the blocking syscalls mechanism -- mostly my failure to write some linked-list code properly (built a nice list, then threw it away..). The department finally got around to re-skinning its website; much more visually pleaseant, even if still lacking in usability a bit. Summer is definitely upon us, with the office temperature reaching 29.0 degrees on Friday.


24/04/2006

Monday.. Spent the weekend doing some administrative things :-( and hacking :-). Fiddled around with RMoX's VGA driver so that it can now go into "mode X" (320x240, 8-bit indexed palette). Will probably need to use the generic (but run-time type-checked) MOBILE.CHAN mechanism to pass control channels back to the application. Currently just fills up the screen with various pixels. Played around with CIF-ifying a bit of RMoX (for wrapping chunks of Linux driver code mainly); almost works. Manages to start ok and print out some debugging stuff, then crashes from a wonky address; debugging required. Added Adam's start on a PCI driver (written in occam-pi). Also poked around with UWG a bit, would like to get the popup-menus and main-menu thing working before too long (these tend to be useful..). Also had a deeper look at Peri Hankey's Language Machine, which required building the D front-end for gcc (gdc). Built more easily than expected, but some uglies from not having it installed in the regular place. Wrote a hello-world program in D :-).


21/04/2006

Back from the EuroSys-2006 conference, altogether excellent. Lots of interesting folk there, and some very interesting work. First journey on the Eurostar (train that goes through the concrete tunnel under the English channel), pretty efficient really! Only gripe was not being able to change my ticket for an earlier one on the way back, but not Eurostar's fault (ticket was booked via another agency). Ended up sitting around in Brussels train station for 2.5 hours, did have a book to read fortunately. Bought some postcards, but due to the insane queue in the Belgium post-office, couldn't get stamps. Seems that unlike the UK, regular shops over there do not sell stamps -- which would be really useful. There was a stamp machine, but out-of-order. Back in the UK now, sifting through accumulated email.


11/04/2006

Tuesday.. Released a new version of KRoC (1.4.1-pre3), bit transient at the moment -- only i386/Linux will work right; i386/cygwin, PPC and Sparc busted for the time-being. However, it does now have Mario's "pony" network infrastructure in it (mostly free of memory-leaks we think). Also added some contributed software to the distribution. Read up on Google's thread caching malloc, as a potential replacement for KRoC's existing slab allocator. Not entirely unlike what I've got in-progress for the next iteration of the slab allocator, except that it's more intelligent with threads. Probably need to finish mine off and do some performance benchmarks before passing judgement on it :-). Started making my way through the "Sliders" series, forgot how good that was!


10/04/2006

Another weekend goes by! Spent most of today sleeping, probably more than 12 hours in 24 :-). Fiddled about with the KRoC distribution some more, experimentally/provisionally put in Mario's "pony" package, which does the communication over networks thing (usefully, allows mobile channels to be moved around between network nodes; mobile processes later). Damian posted an interesting link to some highly parallel chippage (1024 8-bit units and a PPC), presented at the San Jose embedded systems conference. Also read up a bit on Intel's new "Core" microarchitecture, which appears to be pretty interesting. On graphics, someone pointed me at Linux's FBUI (frame-buffer user interface). Don't think it's quite ready to replace X11 yet, but some good points about software bloat and the need to get rid of it (this being one of the motivations for RAPP and friends).


06/04/2006

More KRoC hackery, mostly tidying up the run-time calling convention. Commstime still looking pretty efficient, though it could probably go faster.. :-). Read up a bit on Intel's Virtualisation Technology, looks pretty interesting. Probably a good place to get RMoX started on modern PC platforms (once we've exhausted qemu!).

Picked up a fairly decent book on parallel programming, M. Ben-Ari's Principles of Concurrent and Distributed Programming; a few pages in is "The challenge in concurrent programming comes from the need to synchronize the execution of different processes and to enable them to communicate.". Some thoughts that ring entirely true with the communicating processes approach, built around Hoare's CSP, embodied in languages such as occam-pi and in APIs such as JCSP and CIF. Hopefully we can mature some of these technologies to a point where people actively want to use them, not resort to them because of the deficiencies of threads+locks. The book does talk about this type of concurrent programming quite extensively, but from one of the other language facets (of Promela).


03/04/2006

More KRoC hacking over the weekend. Got commstime down to 34ns on my non-hyperthreaded 2.4 GHz P4, and down to 17ns on the hyperthreaded pi-cluster machines (3.2 GHz P4). Still a bit more tidying up to be done in the run-time/interface, but probably not going to make commstime any faster now. Multi-processor code slowly on the way, figured out (mostly), but more code required. New DVD player doing well so far, steadily progressing through some star-trek series :-). Also thinking about interesting parallel computing problems to solve on the cluster using occam-pi; something GRID-ish maybe.. Also read about some UK supercomputing on the BBC site.


01/04/2006

Term over! Back to some research for a while (and finishing off some long overdue things). Four suggestions for final-year projects dispatched the other night, see if anyone takes them up this year :-). Some group projects organised around RAPP, also gave the web-page a bit of an update following a brainstorming with Dr. Dave.

Started looking seriously at multi-processor support for KRoC. It's been done before for various architectures, but the trick is to do it without blowing away efficiency. Also to support multiple architectures.. (Sparc/Solaris and Linux/PPC probably before others, since I've got access to multi-processor hardware for these). Looking at implementing something based on Vella et. al's batch scheduler (PDF), generally processor-cache friendly. The required support for locking processes to processors finally arrived in Linux, with 'sched_setaffinity' and friends :-). In other research things, Adam produced a system and page for occam-pi enhancement proposals, which has now absorbed the entries on my occam-pi compiler extensions page.


26/03/2006

One more week of term left, all teaching done, time for module evaluation stuff. Been busy getting Mario's stuff working for KRoC, which is nearing completion now. Fixed a few outstanding bugs here and there too. Updated the XHPD documentation to include "newgadgets" and special commands (mostly used by RAPP things). Added some more gadgets to the list on the UWG page (got created a while back).


19/03/2006

Got around to fixing some outstanding occ21 bugs in the KRoC distribution, put together KRoC 1.4.1-pre1. Someone posted this curious link, amusing reading, but sound like good arguments to me! Mostly gave up on the XBox's ability to play DVDs -- slightly injured disks upset it a bit too much. Ordered a new DVD player..


13/03/2006

End of weekend (aka early Monday am). Been a while since I wrote anything down here.. Just about keeping up with writing lectures, probably takes the best part of a day to put an hour lecture together (from scratch). Hopefully next year will be a bit easier :-). Having to write a multiple-choice quiz thing at the moment; wasn't ever my favourite method of assessment, but after a bit more research into this it might not be so bad. Found some useful information (besides the usual pedagogic textbooks) on the web here, here (PDF), here and here. Undoubtedly there's a lot more out there too which I haven't seen (yet). The main trick appears to be in writing questions and answers that force students to learn. Writing knowledge-based questions is easy; writing those that require comprehension on the part of the student are harder.

Research conveyer-belt moving along, albeit slowly at the moment. Fiddled around with KRoC a bit, some people running into strange segfaults -- notably RedHat users, though I think the problem's more specific than that (e.g. version of libc or gcc). The existing run-time has gotten slightly bloaty, what with the variety of features that it now supports. Might be time to look at some kind of auto-generated run-time (which would certainly improve confidence in its correctness). Only need a few concurrency primitives at the very bottom; many others (including ALTs, barriers, ...) could be built on top. Few more weeks of teaching then I'll probably take a harder look at this.

Amongst other hacking, got RAPP (remote applications) working a bit more. Also added rapp and rappd as freshmeat projects. Picked up a few subscribers! Getting basic updates from the server-to-client and actions from client-to-server is mostly working (if a bit simple); currently playing around with dynamically creating and destroying bits of interfaces (e.g. USB information as devices come and go, or something like that). On the server side, the only supported "session engine" is the single-shot external one -- just executes some program which talks XML to the client at the other end (via rappd). The persistent session engine needs more work (first application to roll off that will be a multi-client chat jobby). My original motivation for RAPP was to separate application logic from GUI control (the two do not go well together in most cases; parallel languages work well, but they're a bit thin on the ground -- occam-pi bindings for RAPP under construction..). But it turns out that the separation at this point might be quite useful for other reasons; one of our undergrads on placement at Sun wrote some interesting stuff in his blog. The current RAPP client is UWG (micro window gadgets) based, which gives it the fluffy star-trek "lcars" gadgets amongst other things (e.g. file-system abstraction). On the file-system abstraction stuff, probably worth taking a look at the GnomeVFS library; certainly for "http://" and "ftp://" flavour URIs. Existing VFS layer provided by UWG will do for now however :-). Had a chat with Dave the other night about fun things to do with RAPP. Turns out that a UWG client might not be the endpoint -- could abstract inside UWG for drawing primitives, allowing UWG gadgets to be viewed on whatever. We were mainly thinking of VNC-type displays, but web-browsers would also do the job (with a bit of Javascript). Of course, the further you get away from the server, the more latent interaction becomes; but that's the accepted price for not having a real RAPP client I suppose ;-). More hacking to be done on that over the Easter break (now called the "spring vacation" by the University, who de-theologised the term/holiday names for some reason..).

Also played around with XSLT some more. In a discussion about whether certain things were possible, someone pointed me at a link to an XSLT Turing-machine, so yep, those things should be possible :-). Also found some ZX-Spectrum games that I should play sometime (ah, those were the days!). Played around in SoundTracker some more, churned out some fresh music (Oddments pre1), looking for something a bit more orchestral this time.


24/02/2006

Another interesting week, started off neutral, finished at both extremes. Still writing lectures, but only another 8 or so to go! (project week coming up, which will be mostly lecture writing I think, and maybe some research too :-)). For some reason, ended up having a conversation with someone in the lab about the deficiencies of Java (not deficiencies of OO this time, but that's fun too). The two things that came to light are: 1. timers in Java can go off up to about 10ms before you expected, which breaks some algorithms that assume the clock will have past the timeout when it wakes up; 2. spurious wakeups, now documented in the 1.5.0 API (Object), but somehow not in the 1.4.2 API (Object). They claim it's not a bug, I'm not convinced ;-). More to the point, I suspect there's vast reams of Java code out there that could be (and probably have been) broken by this "feature". Someone posted an interesting link to guinness ice cream, which sounds kinda tasty. Whilst preparing lecture slides, ran into some interesting web-pages with pretty pictures of linux desktops and a history of windows. In other code, collected up a few more KRoC bug reports, to be looked at soon (mostly the compiler generating "internal inconsistency" errors). Got some more of the MCSP code in NOCC working right -- multiway syncs still looking safe :-). Also put some more time into UWG and RAPP, now have something close to working the way I want it to; bit more hacking required.


11/02/2006

Well into February now.. still busy. Damn XBox just crashed again, and I was doing quite well on one of the LEGO Star-Wars levels (droid factory). Seem to be a couple of places in the game where it hangs. Still, better than a burning XBox. Someone posted a link to the register's public speaking advice, slightly untraditional approach.

The University have now migrated most users over to Sun's communication express mail-system (can still IMAPS so not totally bad). Shame the web front-end lacks support for (open) PGP/GPG. About time the world started taking this stuff more seriously..

Still writing lectures and exam questions, almost reached critical. Took a break to do some hacking -- started putting some "debugging trace" support into KRoC. The idea being that the run-time will report what's going on do some daemon, and debugging clients will connect to that. The daemon will deal with the fun stuff of turning addresses into meaningful names (basically tracking processes and channels as they come and go). Gave a talk to the systems research group on the new occam-pi compiler, slides available here. Time to do the washing up..


29/01/2006

Another week floats by, mostly writing exam questions and lecture/seminar slides. At least I've now got a nice set of introductory slides for the new occam-pi compiler :-). Still need to write more lectures though.. and papers/journal-articles. Going to be a busy February too I think :-|. Missed the deadline for the ISMM-2006, gah, but will have a nice/solid paper for the following year. Fixed the subversion machine at last, new disks in; RAID1 configuration this week sometime.

General rant at TV stations with adverts for turning up the volume during adverts; most irritating.


22/01/2006

Still missing the KRoC subversion repository -- machine had come back ok (ish), but one of the disks started failing. Got two replacement disks for it to run in RAID1, will probably shunt the root partition over to RAID too (on its own disk at the moment). Slightly slow process, but things should be back up and working sometime this coming week :-). Did some more hacking on nocc, mainly for handling CSP-like things -- generates code correctly for some things, breaks horribly for others (in debugging-mode at the moment). Implemented some of Peter's multiway-sync stuff in KRoC's run-time kernel, appears to work happily, bar missing locks and b0rked priority handling. In the preperation for some CO527 coursework, played around with SPIM a bit more (and a quick reminder of MIPS assembler). Replacement DVD drive for the XBox installed and working, yay :-). At last, managed to watch Batman Begins uninterrupted, and some others that didn't play right before (Torque, silly film, but good for post-pub). Also been working on KRoC's new memory allocator a bit -- getting closer, need to hurry up, do benchmarks and ready a paper for submission! Updated the anonymous question handling software a bit, yummy Perl script getting bigger.. Got pointed at a discussion of occam/occam-pi on the Lambda the Ultimate weblog (programming languages weblog). Nice to see some happy comments about occam-pi, although changing the name would probably help to remove the traditional, and completely wrong, view of occam (of a redundant language for the Transputer).


14/01/2006

Finally released KRoC 1.4.0 (for Linux/i386, FreeBSD/i386 and Cygwin/i386). Experimental support for Linux/PPC, Solaris/Sparc and Linux/MIPS. Subversion updates may have to wait a while -- power glitch this morning took out the machine hosting the repository, will wander in tomorrow and fix that probably.. Time to work on papers for a bit now.


13/01/2006

Another week almost over, busy busy. Did a bit of hacking on nocc, but the need to write lectures suddenly preempted it (along with various other bits). Fixed a slight bug with forked mobilespace in KRoC; just one more thing I'd like to get fixed then 1.4.0 _will_ appear! (actually got a couple more small tweaks to go in before release). Discovered an annoying issue with ASP.NET -- some sites appear not to return a 'Content-Type' header, but do manage other 'Content-' headers; instead just having it in a <meta> tag in the returned HTML. End result is it causes my apache2 proxy to record a content-type of 'text/plain'; resulting in a pretty screenful of HTML in the browser.. Don't think it's apache's fault though, I wouldn't expect it to go rummaging through potentially binary data looking for meta tags (unless there's a way to tell it to in such cases, that I've not found yet).


10/01/2006

Term in progress; relevant courses start tomorrow (today really I suppose..). No lecturing this week though, offset by more later in the term. Ran into some fun Windows vs. Linux stuffs (eWeek article). Trying to demonstrate that windoze is just as good on old hardware as Linux. The parameter space is so large that you could probably create a benchmark to produce whatever result you like... Although I've got a shiny black PC case with window, was looking at some funkier transparent cases (froogle). Which reminds me, need a new CPU fan or cooler-wotsit (noise). Did some more work on the MCSP portion of nocc, can now parse fun things like "SYSTEM (rope,party) ::= (rope -> SKIP) [] (party -> CHAOS)". Sensible code-generation still a little way off.


08/01/2006

Some more nocc hackery. Been playing around with compiling CSP-like programs (well, just parsing to start with..). Also pondering about using the compiler framework to compile a BASIC-like language into RCX byte-code for the LEGO Mindstorms RCX. Will see how this goes -- hopefully it will be more beginner-compatible than NQC (I always thought that was simple, until I tried to teach it to a bunch of 6th-formers). I started programming using BASIC, and so did many others of my generation (when things like the ZX Spectrum and Amiga were must-haves for geeky teenagers). Don't see why it shouldn't still be good for teaching basic programming -- sure, it's an ugly language and doesn't encourage good programming practice, but as a starting-point it'll do nicely. Also been preparing for term, which starts this coming week; plenty of fun lectures to write. Operating-systems, concurrency and introductory-computing this term :-).


06/01/2006

More hacking on the new occam-pi compiler. Added support for verifying signed compiler output with a public key -- appears to work ok :-) (also incorporated information from the .xlo/.xlb into the hash, so attempting to subvert stuff that way won't work). Got built-in PROCs and FUNCTIONs working a bit more reliably (with parameters and stuff); built-in functions are still a bit hacky.. Put in some of the ALT parsing bits, needs a fairly non-trivial grammar to cope with leading declarations though. On functional programming, this interesting link was circulated on a departmental list. Saw that LEGO have presented their next-generation mindstorms stuff, looks like cool kit -- mainly for the CPU and programming, the sensors/motors/etc. look a bit chunky.. (wired article, original slashdot posting). Also read about some cool new lensing stuffs (i.e. bending light).


04/01/2006

Woo, 2006! Happy new year planet :-). Got the new allocator for KRoC mostly working now -- just a few fine-tunings to be done. Won't get merged in until 1.4.1-pre1 however. Nobody's complained about KRoC 1.4.0-final2 yet, a few updates have gone into it and 1.4.0 proper will appear soon. Think the world will just have to live with nested mobiles not quite working properly at the moment.. Did some more work on nocc, now managing to sign a digest of the compiler's binary output using libgcrypt. A fairly nice library for cryptography stuff I think, although the use of Scheme-ish S-expressions make me twitch (these are probably quite efficient at storing arbitrary data structures though). Could do compiler transforms using these, that might keep some of the functional programmers happy :-). Phill pointed me at an interesting article on Sony's DRM (and why it is an utter nuisancenuisance). Sure, piracy is a problem, but there's got to be better (and more socially compatible) ways to deal with it..


30/12/2005

Churned out KRoC 1.4.0-final2, which will become 1.4.0 proper unless anyone reports any significant problems. Now time for some NOCC hacking. Pondering some serial-ATA disks and controller for the PC, although more CPU, memory and better graphics would probably be a wiser approach.


29/12/2005

Christmas m