Older blog entries for Michael (starting at number 28)

Long time no Advogato. Oh well. It's one of those things that's easy to put off then forget about once you get out of the habit.

What's changed? Well, I don't spend much time on SWARM these days. I've moved on to more OS research rather than low level processor stuff. I'm just back from FPL'01, where I presented a poster on my reconfigurable processor architecture. seemed to go down well, and had fun in Belfast.

Now I'm trying to write a simulator for the OS stuff in Python. I've only just learned Python, and I'm quite impressed. The simulator is essentially a list manager, so doing this sort of thing in Python is great.

Not done much on the OSS front I'm afraid. I did some hacking on VTWM to add GNOME compliance ;) I mailed off the source to the VTWM maintainer, but I doubt it made it into the source tree. I doubt there's much need for GNOME functionality in VTWM (I don't even use it, I just wrote it to prove a point :). I also wrote some XChat scripts (I've become an IRC user, sorry...) to implement part of the WimpCTCP stuff. At the moment clients that support the FACE CTCP can get my face image (it should return a 16x16 by 4 bpp grey image) and some other info, but I've not figured a neat way of using Perl/GTK from XChat scripts so that I can generate a face window. Anyway, what is there is up on the XChat scripts site. Not really rocket science I'm afraid.

Anyway, I'll try to keep this up to date for a while :)

Codewise I fixed numerous bits in SWARM. Matt, one of my fine office mates, is starting work on an embedded systems project. As part of this he's interested in writing a small RTOS aimed at the ARM, so he's using SWARM as his initial test platform. Over the weekend I added IRQ/FIQ support. All it really needs is some form of timer and it should be enough for a small multitasking OS to run on it.

This is actually of some use to me, as I'll need to use an OS at one point. I'm thinking of using Nemesis as my starting point. Wish me luck :0)

Oh, and I ache today as I fell quite a bit whilst snowboarding yesterday (it was on a dry slope I should point out). Had been doing quite well until yesterday - guess it was overdue pain.

Okay, okay, so my diary entries have been a bit spartan to say the least. Today some fun bits:

  • My DES source code is here.
  • Some nice humour for you to read: Red Meat, Snail Dust, and Bad Tech (though thank goodness Bad Tech finished its Matrix parody - too long).
  • Music madness: new albums out from Blur and U2. Bought the former, the latter will have to wait. The live CD with the Blur SE is cool.
  • Read, if you haven't already, Lingua::Romana::Perligata. Has a coolness to usefulness ratio of way more than one, and also has a point.

Phew. Anyway, SWARM work today - I need to get more done on the copro front. My office mate, Cheese Boy, is starting to learn ARM assembly, so is using SWARM now - useful feedback and feature requests ahoy.

Saw Blur play live on ...Later (BBC live session program hosted by Jules Holland) where they played "Music Is My Radar", "Girls and Boys", and "Song 2". I wasn't that impressed with the single of MIMR, but live it sounds really good. Need to get my hands on Graham Coxon's new album. His first was good, but not something to listen to repeatedly. Apparently the second one is better and more accessable.

For the LettuceHead groupies out there, Adam and I played at the Halt bar last Saturday, and managed not to be thrown out (though we did go under false names just in case...). We played "Their Goes God" by Crowded House and "Misshapes" by Pulp.

Today's gratuitous mention: Hi Neil!


Fixed the bugs in my DES implementation (with some much appreciated help from John) - so now it works correctly. I'll put both the naive version and the optimised version on the web at some point.


Managed to get my software implementation of DES down to have a cycle count per block of 3.3% the naive implementation, and a key setup time 40% of the original. Optimising code is fun :-) By the same BOE calculation I used before, my implementation would achieve a theoretical 2.8 Mbytes/sec on a 1GHz processor. There are no 64 bit values used at all in this implementation now. I ran it on a real StrongARM and the speedup is very noticable.

More PhDs

Congrats to Ian who has submitted his draft dissertation and is heading of to work for Altera next week.

25 Oct 2000 (updated 25 Oct 2000 at 23:39 UTC) »


Been, amoungst other stuff, optimising my DES implemenation today. The key setup time has tripled at the moment (though I have an idea how to get that down), but the number of cycles taken to process a 64 bit block is down to 12% of the original. This was achived by a mixture of static preprocessing, preprocessing the key setup, removing most uint64_t values and using two uint32_t values where possible (my target plaform is the ARM, so 32 bit operations are a Good Thing(tm)), and applying some human optimisation to the bit permutations. So far this has been just using C - I've not needed to use any asm - I've managed to express everything I want so far in C.

Next a little more optimisation of the C version, before I try and apply hardware to some parts of the algorithm (mainly the bit swizling). I have two hardware versions in mind - one a plain partial hardware/software implementation, and one which uses partial evalution to put the key into the round calculations.


Managed to half the key setup time. I've completely removed 64 bit values except as the inputs to the algorithm. By a BOE calculation, it can now process about 0.8Mbytes/sec on a 1GHz XScale/StrongARM, but that's not including cache-misses. Not particularly impressive.


Had to reboot a keyboard today. I think the microcontroller inside had got confused, and the PC it was attached to refused to acknowledge it until I powered off the machine (rebooting it didn't help).

Installed GNAT (the gnu Ada compiler) today - scary. I got flashbacks to when I was being taught Real Time Systems in Ada.

Learned how to use a diablo.

Oh, and I forgot to say congrats to adamd who submitted his PhD dissertation last week. He now seems to have a perpetual smile on his face :-)


Still got a broken DES implementation. Tried various kludges to see if I could get it to work with the test vectors I'd found, but to no avail. But it has the correct timing properties, which is what I'm interested in, so for now I'll just go with what I've got (pressing deadlines...).


iain: Placebo dull? I guess Brian Malco's voice is something you like or hate - forages I couldn't stand Brett Anderson's voice, but eventually came round. I don't think Placebo qualify for boring though. When I say them live the other week the momentum of the show was really good. It dipped a bit with too many slow songs strung together, but came out tops again finishing with Pure Morning, Taste in Me, and Nancy Boy.

On a side note, Lettucehead will hopefully be playing on Saturday - nothing spectacular, just an open stage affair, but it'll be good to play again.


Hmmm. Fixed itself - this, of course, just means it will go wrong again. Went through our second power-supply unit too - I think being continuously plugged in to power the camera overheats the wee things. Now our second camera is without power.

23 Oct 2000 (updated 23 Oct 2000 at 22:25 UTC) »


Yeah, yeah - DES is old news, but I wanted to start simple, so DES it is. I've written a naive DES implementation, optimisation comes next, then the software/hardware hybrid. Then something more whizzy like Rijndael.

But... there's always a but isn't there? I have got my DES implementation to a stage where:

D(E(x)) = x

However, when I run the test cases I've found on the web, they don't show the correct ciphertext for a given plaintext/key combination. I've got a feeling that it lies in the bit ordering - all the documentation starts with the LSB on the left - but they continue this notation down to the hex values - to decimal five would be written in hex as A - because the binary is 1010. I'm confused. I can't really find documentation to back up this suspition, but the blank key with the parity bits every eigth bit is written 0x0101010101010101, rather than 0x8080808080808080 as I'd expect.

I'll try munging some things tomorrow to try and fix it, but as I'm doing it as an academic exercise - i.e. I need the general alg, and something which will do D(E(x)) = x, but I don't need to interface with other DES software, I think I'll leave it if there is no obvious solution. Perhaps I can call it D35 :-)


Generally I try and keep it just coding up here, but seeing as Kid A generated so much traffic on here, I thought I'd add a couple of recommendations. First is Black Market Music by Placebo and the second is Showbiz by Muse. Saw Placebo live last weekend in Glasgow. Really good show. The album is more pop than there last album (which I think is the best they've done). Muse are new to me, but I keep seeing them live on tele and they're really good.


The webcam is broken, but I've just not had time to look into the why yet - been too busy.

18 Oct 2000 (updated 18 Oct 2000 at 23:35 UTC) »


Dipped my fingers into the messy world of ad hoc distributed sys admin today. I got using my NetBSD enabled shark so much (see previous episodes for details :-) that I wanted to mount my home space there. Being a largish dept we have a central place for such things. However, to access this a machine needs to be "trusted" by the dept. The first stage of reaching this was teaching master about both NetBSD and sharks.

Master is what we use as a centralised point of configuration for (almost) all our unix boxen (it originated from cl.cam.ac.uk, but came up Glasgow via a couple of people we hired from there). Master is responsible for distributing standard files (such as those in /etc), tools (our version of arch), setting up the automount maps etc., and it does this for a hetrogenous collection of machine types and Unix types. Anyway, breaking this would not make me popular.

Thus I spent a while understanding how a NetBSD machine is setup (who stole tcpd? :-) on both ix86 and the sharks. I then compiled up the correct version of essential binaries for both platforms (e.g. rdist), secured the boxes with hosts.[allow|deny] and inetd, plus all the other magic the department requires, and distilled it all into master, along with the documentation of what I'd done.

And it looks like it works. The proof will be when I come in tomorrow morning and the nightly dist has happened with no errors. Now adding a new NetBSD box to the dept should be real easy.

Now I can go back to real work...


All seemed to go well with master - phew!

Went juggling with Greg -- first time in an age I've been. Good fun.


Lazy weekend. Spent yesterday getting new trainers and looking for knee pads, but failing to find any. Today I regretted not getting knee pads, as I'm buised all over after today's snowboarding lesson. Ouch. Now I'm off to grab a sandwich and go see Billy Elliot with my better half. Tired (though probably not as tired as adamd is at the moment...).

Upgraded my network card to 100 Mbit. Had to tell Kudzu to "F*ck off, I know better than ye!" The driver for the card that RedHat uses by default hangs our network - it drives the line constantly, something that is not good on an ethernet network :-) But by using the de4x5 driver rather than the default tulip one, and a bit of documentation reading, I was able to get it up and working.


Started work on the site. The html is at home, but I'll try and put it up on G141 at some point tomorrow. It's bare - submissions will be needed :-)


Bah. Need to write documentation before putting it on the web. :-( Give me a day or so...

19 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!