Wed Feb 4 15:09:05 GMT 2004

Someone makes an obvious discovery about Bayesian filtering the very long way round and it warrents a BBC News article. Geeze. No wonder these worms find enough stupidity to spread.

Update: Yes, I know it's the POPFile author. Doesn't mean that he's not being an idoit. He could just have opened the Bayesian db to check which words had a high positive value. Probably the BBC journalist had something to do with the crapness however.

Sun Feb 1 11:30:36 GMT 2004

Christ, it's been a long few days. I haven't even seenn one of my house mates since Tuesday and, if she didn't leave washing up to be done, I wouldn't even know if she were alive.

So, Wednesday was band night in dB's. Sound teching again, but this time with ear defenders which work really well. The control position in dB's is about 5 meters from a speaker stack that is pointed straight at you and it's nice not to be deaf afterwards.

Thursday was East Meets West, the Indian Society variety show. Gary has a fairly long post about it. Turns out that they has no stage crew and were just praying that it would work out or something. Either that or they expected stuff to shuffle into place on its own. So, with a couple of hours notice and a couple of phone calls we got 4 Dramsoc people to run the stage.

And I would like to point out that we were flawless. Even though we usually found out about a scene change about 5 minutes before it happened. Some people may complain that we missed a chair, but 13 were counted on, 13 people were on stage and they were one short. Fourteen were counted off. Go figure.

They overran and were kicked off at about midnight. The strike only took about one and a half hours because they got away with having parcan bars and there was no lift involved. Usually when striking we have to break everything down into lift-sized chunks which takes ages. Though I didn't really grasp exactly how much of a pain this was until now.

Last night was ChiSoc. This show was going to be an utter shambles from the start. Organisation seems be an alien concept here. They overran by about three hours because all their scene changes took 10 minutes or so.

It's not that they were big scene changes at all, but it took 10 minutes to figure who was going on next. All this was sorted about by shouting a lot of shouting in (I believe) Cantonese over the comms.

They also shouted "Fire!" a lot when talking. I didn't figure out what this meant to them.

And it seems that they killed one radio mic, has no stewards and thought the powerloc distro (415V, 600 amps) was a good place to keep bottles of water.

Mon Jan 26 22:31:33 GMT 2004

At least I'll never have the chance to fuckup this badly. (You hope!)

Oh, and via /., Joel has written an article on writing resumes. And this is a few weeks after I submitted mine to him! (Not kidding, he's writing about submissions including mine.)

Sat Jan 24 17:07:51 GMT 2004

I was pleasantly surprised to come across a stall giving away free cups of instant coffee today. Instant coffee manufacturers are always welcome to solicit my custom with free stuff seeing as how I've never purchased instant coffee in my life and don't intend to.

(As far as I'm concerned, coffee exists primarily for its caffeine content and is best expressed as an expresso. Good tasting coffee is rare and never found as a cup of anything that started out looking like powdered turd.)

As I was sipping the free cup of tongue crematingly hot sludge my eyes slipped down to the sign advertising free decaffeinated coffee.

It goes without saying that it went into the bin with my hand following a smooth arc after an aborted initial motion towards my mouth.

How can there be enough flavor flummoxed fools on the planet buying this ungodly example of utterly missing the point, to make a market for decaffeinated coffee?

And while I'm ranting...

An open letter to Stephen Fry:

Dear Mr Fry,

The command of language and humor, demonstrated in your book, is almost flawless.

However, I must protest that the book would be immeasurably improved by omitting the entire chapter given to graphically describing a small child fucking a horse.

Thank you

Fri Jan 23 20:54:55 GMT 2004

Next week, (more for my reference than anything else)

Thu Jan 22 08:06:09 GMT 2004

I've put the source to the suexec code which runs the Union server here

And, before I forget, here's a patch for PHP 4.3.4 which fixes permissions on uploaded files in sticky dirs (or dirs with ACLs in my case).

And I knocked together Kiss or Miss for the College RAG (charity fundrasing) week, last night. Still needing a little work. The idea is that people can donate to get their score bumped up :)

Mon Jan 19 21:52:01 GMT 2004

Back in contact with the world again... photos from Friday night. Listening to: Cats, reading: The Hippopotamus.

And talking of cats, we got a leaflet through the door from the local vets saying "Have you seen Humphrey, our practice cat?". Wouldn't it suck to be a vet's practice cat? Any time someone's unsure how to do something - you get it. Imagine being neutered .. repeatedly :)

Thu Jan 15 19:19:18 GMT 2004

The program for CodeCon 2004 is up.

Wed Jan 14 19:05:08 GMT 2004

Can I suggest that the 100 most often misspelt English words[via Keith] are, in fact, misspelt in the dictionary and that if a word is commonly misspelt then it reflects badly on the word, not the people?

Mon Jan 12 20:39:09 GMT 2004

Phew. The union server upgrade kind-of went to plan. Would have gone more smoothly if I had known the correct default gateway. However, one thing really did mess me up: MySQL.

If you remember just never to use the minus charactor in the name of anything mysqlish, then it's a good little database. But if you do, oh dear. I've filed several bugs about this and the MySQL developers are arguing about how valid the minus sign is, the code certainly has no idea.

mysqldump generally gets quoting correct - except when it comes to the minus charactor at which point CREATE TABLE stops working. Now, when you're importing hundreds of tables you don't see the little error message shoot by with all the status messages (even in `quite' mode). But it turns out that you need to add the --quote-names option to the dump in order for it to do CREATE TABLE correctly. Which is a huge bodge to start off with, because (almost) everything else works fine.

But wait until you get a minus sign in a database name. Now, not only does it not restore the database correctly, it actually errors on the USE statement and goes spewing tables into other databases. And even if you quote the database names, MySQL still can't handle it. At this point I just changed minus to underscore and said bugger it.

Also, openssh 3.7 and onwards can't to PAM support correctly, so I'm sticking to 3.6.1 for now.

Fri Jan 9 21:34:30 GMT 2004

While I'm posting I might as well point out this link via Wes to a PDF on the marks on euro notes that machines recognise as bank notes. That's another great piece of work by Markus Kuhn.

Fri Jan 9 21:05:31 GMT 2004

Spent all day configuring the new mail servers at DoC. Some useful Exim snippets for future reference are below.

Oh, and someone dug through a very important London backbone fibre this morning which took IV off the face of the net.

This weekend is going to involve a few trial runs of the Union webserver move that I'm doing on Monday for real.

Virtual hosting

domainlist local_domains = @ : cdb;VHOSTCONFIG
# Vhost routing
vhost_aliases:
  driver = redirect
  allow_fail
  allow_defer
  domains = cdb;VHOSTCONFIG
  data = ${lookup{$local_part}nwildlsearch{${lookup{$domain}cdb{VHOSTCONFIG}}}}
  file_transport = address_file
  pipe_transport = address_pipe
  no_more

Spam Checking with spamd

spamcheck_router:
  driver = accept
  # ! already spam AND ! already scanned AND from offsite AND !SMTP AUTHed
  condition = "${if and { {!def:authenticated_id} {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}} {!eq {$received_protocol}{local}} {!match{$sender_host_address}{^(146\.169\.|155\.198\.4\.76)}} } {1}{0}}"
  transport = spamcheck
  no_verify
## Spam Assassin
spamcheck:
    driver = pipe
    command = /usr/sbin/exim -i -oMr spam-scanned -f "${if eq {${sender_address}}{} {mailer-daemon} {${sender_address}} }" -- ${local_part}
    transport_filter = /usr/bin/spamc
    home_directory = "/tmp"
    current_directory = "/tmp"
    # must use a privileged user to set $received_protocol on the way back in!
    user = exim
    group = exim
    log_output = true
    return_fail_output = true

SMTP AUTH over TLS using Kerberos via PAM

# SMTP AUTH Settings (see also Authenticators at the bottom)

auth_advertise_hosts = *
received_header_text = "Received: ${if def:sender_fullhost {from ${sender_fullhost} ${if def:sender_ident {(${sender_ident})}}} {${if def:sender_ident {from ${sender_ident} }}}} \n\t by ${primary_hostname} ${if def:received_protocol {with ${received_protocol}}} \n\t ${if def:tls_cipher {(tls_cipher ${tls_cipher})}} ${if def:tls_peerdn {(tls_peerdn ${tls_peerdn})}} (Exim ${version_number} ${compile_number} (DoC)) \n\t id ${message_id} ${if def:authenticated_id { \n\t from user $authenticated_id}}"
plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${if pam{$2:${sg{$3}{:}{::}}}{yes}{no}}
  server_set_id = $2
#  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}

login:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  server_condition = ${if pam{$1:${sg{$2}{:}{::}}}{yes}{no}}
  server_set_id = $1
#  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
Wed Jan 7 13:40:26 GMT 2004

IV now sports a brand new "JanieBox" at the top right (or possibly somewhere random if your browser doesn't do CSS very well).

I'm getting the data from here (or more specifically from here). I've probably got the code wrong, but if you want to point it out to me the code is here

Oh, and it's doing the US Dollar to British Pound exchange rate, for those who hadn't guessed.

Mon Jan 5 17:21:34 GMT 2004
New kernel local root problem

Hitting all current (inc 2.6) kernels. Get 2.4.24

http://isec.pl/vulnerabilities/isec-0013-mremap.txt

Sun Jan 4 17:47:15 GMT 2004

I read three [1, 2, 3 all via IP, via Keith] very good essays by Michael Crichton this morning. Now Crichton has written a couple [1, 2] of fairly noddy books recently. They weren't bad, but I couldn't help thinking that they had been written in order to become a film script (worked for one of them).

But his essays are top-notch (and is DDT seriously not carcinogenic?). I have to be a little concerned about number three because, although I know many moronic environmentalists, I have to wonder if things wouldn't be a lot worse without them. Painful as it is to say. But they really cheered me up in contrast to all the "They did what? The morons" stories.

Fri Jan 2 14:43:02 GMT 2004

This could be a Stage Scan with a light on, right?

screenshot

I know the real thing isn't translucent like that, but it makes things clearer in the visualizer.

(p.s. If you're not a member of Dramsoc you probably don't understand this post)

Tue Dec 30 11:27:36 GMT 2003

Lython [via LtU] is a Lisp like frontend onto Python. Now I've been meaning to write one of these for sometime, good that someone has at last. For example:

# -*- lisp -*-

(def foo (a)
     (print "one")
     (print "two")
     (* a 5))

(def bar (b c)
     (* b c))

(def cat (file)
     (:= f (open file))
     (f.read))

(print (foo "test"))
(print (bar 5  5))
(print (cat "/etc/passwd"))

(and, yes, it can do simple macros)

Firstly, the Clueless Anti-Whitespace Morons might be a little happier but that's unimportant. Mainly Lython has the ability to become the standard Lisp-like-language that Lisp has needed for a long time. As much as ANSI Common Lisp is a good (if huge) standard it still leaves far too much platform specific stuff undefined. The kind of stuff that makes code actually useful. And Lython has all the Python libraries to draw upon.

Now Python just needs to get it's basic language features working. Even in 2.3 this still doesn't work:

def a(x):
  x = 0
  def b():
    x += 1
    return x
  return b
Pinging

Since Keith requested it, my build script now pings blo.gs. Due to the (cack-handed) nature of the way I do things it might `bounce' a little (e.g. update more than once for a single update) but blo.gs already seems to dampen that.

Mon Dec 29 16:19:31 GMT 2003

Ah, you've got to love the post-Christmas sales. In fact, I'm loving them to the tune of:

The soundcard is a little odd, but it's got the best audio quality of anything in its range that I could find a review for.

And god it sounds good. Only slight problem - I've had to remove most of the 128Kbs (and below) mp3s from my playlist. Use FLAC people!

Sun Dec 21 10:39:56 GMT 2003

Well, the Xmas carnival passed off ok. I lasted about 22 hours before sitting comatose in the bar. I must be getting old, I've done better than that before. (Then again, Gary's really old an he managed ok :)). Link to photos will happen at some point.

The Artistic License box to control the MAC600 worked fine, though we ran it off the Pearl in the end. I need to write a better control interface (e.g. one that doesn't require you to input a seq of funcs for each of pan, tilt and color). To that end, PyGTK, glade and PyGtkGLExt work really well.

I'm off home today as well. Yay Xmas break.

(In other news; can you possibly think of anything worse than Slashdot Singles?. And I'm not kidding, OSDN is really running this complete with "First emails: What to say".)

Tue Dec 16 22:36:03 GMT 2003

I like Artistic Licence a lot. Partly because they make some really cool stuff, but mostly because they sent me one of these for free.

(Yes, you too can get a positive mention on IV by sending me free hardware)

One of those, for people who don't know and can't understand the link, is an Art-Net to DMX converter. DMX is the serial protocol used for controling stage and event lighting and so I can now control this from a Python script.

So I'm frantically coding in whatever free time slots I can find so that I can use it to control a pair of MAC 600s on Friday.

Of course, like all good tasks, I don't get to test it until until the day of the event.

And on the frontpage of the manual, it reads:

This product is for professional use only. It is not for household use. This product presents risks of lethal or severe injury due to fire and heat, electric shock, ultraviolet radiation, lamp explosion and fall.

:)
Snippets

While I'm thinking about it, a couple of Python snippets that I'm always looking for.

Dumping an exception is:

try:
    ...
except:
    traceback.print_exc ()

And running an interactive console looks like:

import threading
import rlcompleter
import readline

readline.parse_and_bind("tab: complete")

glock = threading.Lock ()
input_has_glock = 0
exit_event = threading.Event ()

def worker_thread ():
	# lock glock when running

if __name__ == "__main__":
        import __main__
        worker = threading.Thread (target = worker_thread)
        worker.start ()
        c = code.InteractiveConsole (locals=__main__.__dict__)
        c.raw_input = locking_raw_input
        c.interact ("Starting interactive control...")

Site Map
/Root
     AlternateThe Weird and Wonderful
          BacklinksWhat are backlinks
          John GilmoreWhat's Wrong with Copy Protection
     ArchivesBlog Archives
          OneArchive 1
          TwoArchive 2
          ThreeArchive 3
          FourArchive 4
          FiveArchive 5
          SixArchive 6
          SevenArchive 7
          EightArchive 8
          NineArchive 9
          TenArchive 10
          ElevenArchive 11
          TwelveArchive 12
          ThirteenArchive 13
          FourteenArchive 14
          FifteenArchive 15
          SixteenArchive 16
          SeventeenArchive 17
          EighteenArchive 18
          NineteenArchive 19
          Twenty Archive 20
          Twenty OneArchive 21
          Twenty TwoArchive 22
          Twenty ThreeArchive 23
          Twenty FourArchive 24
          Twenty FiveArchive 25
          Twenty SixArchive 26
          Twenty SevenArchive 27
          Twenty EightArchive 28
          Twenty NineArchive 29
          Thirty Archive 30
     PhotosPoor People Caught on Film
          Jack and the Beanstalk Jack and the Beanstalk
          RIP ScanResults of a Stage Scan Fire
          YosemiteYosemite National Park
     ProjectsIncomplete things from the lab
          Seagull's BaneLinux Automounter
          bttrackdBitTorrent Tracker
          CAPTCHACAPTCHA CGI script
          ConservConsole Serving
          DeerparkUsing Tor with Firefox/1.1 (Deerpark)
          DNSFixFixing DNS
          XoversXTA Crossover Control
          IAFSArchive Org Storage
          JBIG2JBIG2 Encoder
          VerifyPGP Key Verifier
          MaxFlowMaximal Flow in Python
          PyBloomBloom Filters in Python
          pyGnuTLSPython wrapping of GnuTLS
          SxmapApache SuEXEC Map
          HellardUnion Server Notes
     RecordingsFree recordings
          ICSM ChoirSt Paul's Church
     SchoolAncient School Stuff
     WritingsWho knows
          Cap SystemsCapability Systems
          IntroIntroduction to me
          SupremaJMC2 Group Project
          MP LettersLetters I've written to my MP
          SoundSound With Dramsoc
          SyncThreadingThe wonders of user-land threads