Monday, December 24, 2007

Where did Installer go in Leopard?

My Macbook crashed hard for the first time last night, and a few things got bolloxed up. For one, my fonts were and are still knackered - opening the Font Book application shows 0 fonts, even if I tell it to add fonts. Adding fonts it tells me not to add causes it to use more and more memory until the allocator won't give it anymore and it dies (around 1.6 gigs at this stage).

Another problem is that file associations got nuked. Fair enough, I can rebuild those as I run into them... but when I tried to apply a patch to NeoOffice, I'm told:

There is no default application specified to open the document "NeoOffice-blah.pkg".

Well, that's a bit strange, so I google and find that I need to use /Applications/Utilities/ for these. Great! Or not great, because the file is MISSING. I see similar problems on forums (what would we do without them? well, without the ones with actual answers anyway), and people generally recommend the poor user to reinstall via "Archive and Install" which supposedly keeps your user files/settings.

Before I made such a serious commitment to dig myself deeper in the shite, though, I did another quick google and found that as of OS X version 10.5 "Leopard", the Installer application is now located in /System/Library/CoreServices, along with a horde of other utilities.

So to others encountering this problem, DO NOT REINSTALL before checking there. It's unlikely that the program has let itself out the back door into the night. It's probably right there, hiding under your bed.
Don't be too hasty to reinstall your OS - there's usually a reasonable fix out there... Now if I can only find my font fix...

Tuesday, November 13, 2007


This very good read takes the form of responses to answers on the C++ FAQ Lite. The author makes no attempt to hide his contempt for the language, and for well-explained reasons (for example, that the C++ grammar is actually undecidable and thus parsing it can sometimes have bizarre results).

I'd recommend this to anyone caught in the popular grip of C++, rather than finding out (or being caught in denial) about the pain awaiting programmers of any level. Hint: lack of garbage collection, extreme, multi-pronged lameness of templates and not-exactly-encapsulation feature heavily.

Personally, I've been working in Java for the last while anyway, but I've promised myself I'd get into (Smart)Eiffel for a while now, which seems like a much, much simpler and unambiguous language with garbage collection, a decent string class and no poxy operator overloading, and still reasonably efficient in the general case, compared to C++. Also, the D programming language may be worth a look, which seems to have some good built-in string handling (but no multiple-inheritance. Meh?).

Friday, November 09, 2007


Everytime I try a backward somersault or handspring, I chicken out as soon as I start to fall back... like so:

How are you supposed to override that annoying reaction?

Thursday, November 08, 2007

Mac an Leabhair... the Macbook

Another fairly large skip in blogging activity... so, as part of my scholarship funding, IRCSET allow first year research students to buy a computer and put the tab on their expenses account, to the tune of €1500. Naturally, I arranged things so the computer and components came to €1490 or so - almost a bin-packing problem, but easily approximately solved.

The Macbook, a 13" white one (why pay 200 quid just to have it in black? pfft.... that'd only absorb heat and burn your err... legs, anyway) with a 2.16ghz Core2 Duo, 2 gigs of RAM (the most I've ever had in a machine before was a sad 512 megs) and a 160 gig hard disk (for research... and anime and music... not porn. Fine, for porn - are you happy now?).

Unfortunately, it came with two problems:

  1. The lock the sales guy sold me over the phone, which he assured would fit my machine, didn't fit the machine. In fact, it damaged the side of the case while I tried to gently fit it to the Macbook's lock slot.
    This is kind of an understandable mistake - it looked almost exactly the same as another lock that did fit, and I didn't see anything on the Apple website about which lock fits which machine.
  2. The version of OS X, which the salesman assured me would be 10.5 "Leopard" when I specifically asked him (and the previous salesman on the phone), turned out to be 10.4 "Tiger". Not that Tiger was bad, I was still delighted with its performance compared to my Windows XP, Ubuntu XFCE/Gnome and Mandriva KDE experiences. It was ridiculously fast, smooth and yes, things "just worked", to appropriate a shitty phrase.

So, for a couple of days I tried to get in touch with the sales guy, who seemed to suddenly go on annual leave, then I eventually got on the phone with another agent in Apple Education, who, when I called her for the second time 5 minutes later, told me an install disc for Leopard was on its way and I could keep the incompatible lock for which they had already sent out a compatible replacement, both without charge.

That just leaves the slight damage on the case from the weird lock, but I'm pretty impressed by their helpfulness, especially compared to Acer, who I dealt with when one of their firmware updates killed my old laptop's flash BIOS (those useless assholes charged me over €300 to replace the entire motherboard, because they apparently have no mechanism to recover from flashing the BIOS with an image from an 'incompatible' revision of the same motherboard model. The Taiwan guys sent me a text file describing some Phoenix BIOS "bootblok" recovery procedure, but either that wasn't implemented or the Official-Acer-Repair-Shop-Off-The-Naas-Road-Dublin-12 engineers were ripping me off).


Wednesday, October 10, 2007

grub got your goat?

GParted decided to balls up before finishing a move and resize job where I wanted to decrease my oversized swap partition from about 4 gigs down to 1.2 gigs and increase the size of the partition I used for storing big media files (immediately next on the disk).

So I was left with a slightly knacked partition table and decided to burn a proper GParted livecd which also contained a program called Testdisk. This was able to rebuild the partition table (although it disturbingly seemed to think the drive had 16 heads every time I loaded it, and complained that either this setting was wrong or the disk layout was crazy until I changed it to 255... every time), but at some point I managed to overwrite the MBR as well by picking the wrong option.

Attempts to reconstruct the GRUB bootloader's MBR claimed success, but actually trying to boot from the hard disk resulted in just a cursor flashing indefinitely. No message from GRUB, even.

Eventually, I found that the instructions I'd been following didn't tell me enough and that making the bootloader was a bit more involved than just:
"root (hd0, 1)
setup (hd0)",
and certainly more difficult than just running "grub-install /dev/hda2", which wasn't at all happy.

In the end, I started copying an entry from my boot partition's old GRUB menu.lst and replacing the now-inaccurate drive references:

The final sequence of commands to fix the thing was something like this:

root@gparted:~# grub
[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> root (hd0,1)
grub> kernel /boot/vmlinuz-2.6.20-16-386 root=/dev/hda2 ro quiet splash
grub> initrd /boot/initrd.img-2.6.20-16-386
GRUB Error 16: Inconsistent filesystem structure
grub> setup (hd0)
[snip a few lines of blah followed by "success"!]
grub> quit

root@gparted:~# reboot

The "error 16" line when I tried to set up the initrd threw me, but after running e2fsck on the partition at least twice I decided it was just GRUB being a bollox and went ahead with it. GRUB's own filesystem mini-tests suggested things were okay anyway. So after rebooting everything was ok.... although once I logged in, I ran a command called "update-grub" which may be Ubuntu-specific. This seems to have incorrectly specified the root partition, but we'll see...

So anyway, try that more verbose tactic before executing GRUB's setup command, if you run into a similar problem.

Thursday, October 04, 2007

swiping a computer

After a few days of limbo, having started my postgraduate course in DCU, I still wasn't able to get into the secure(ish) research bay. Nagging to the school office did no good, so I went to the Estates office in person against the recommendation of the school secretary. Handily, the lass in the Estates office swiped my card, noted that I hadn't had privileges to open those doors added and dragged the equivalent permissions onto my set - all of 2 minutes' work.
Then I went back to my desk, without having to wait for someone to let me in like an orphan boy, and waiting around for someone to set my nicked (from someone who hopefully wasn't using it anymore) crappy Pentium III PC to allow network logins.

I'm going to assume that this amount of hassle, bureaucracy and poor inter-department communications is a normal thing.

Saturday, September 08, 2007

fantasy... reality. fantasy... reality.

LOS ANGELES (Reuters) - Vanessa Hudgens, the star of the wholesome, made-for-kids TV movie hit "High School Musical," apologized on Friday for a nude photo of her on the Web and Walt Disney Co. said it was sticking by the performer.
"I'm devastated because I have an 8-year-old for which I now have to have an explanation," said another Los Angeles-area mother, Rosie Konkel. "She's always looked at this character as a very smart and proper young lady."

Here we have a problem. That is, these people seem unable to distinguish between the character played by an actress, and the actress herself, who has her own, (almost) private life. For example, just because the character is an unrealistically good, innocent girl does not imply that the actress playing her should be the same. That's why it's called "acting".
This seems like a fundamental division - character and actor - which should be understood by even young children, yet some adults can fail to grasp it.
I heard that an actor who played a rapist in "Fair City", the crappy soap opera, was spat at on the streets and threatened for his 'crimes'. Which is bloody ridiculous - do these people think all TV is a fly-on-the-wall recording of real life? How could they possibly fail to separate the character from the actor?

Maybe you should be forced to take an IQ test before you turn on your TV.

Friday, August 10, 2007

/etc/init.d/me status --not-too-verbose

Amazing what finishing college and quickly walking into a full-time job does for your free time. In the sense that it almost totally erases it. But I'm alive, anyway. And the job is okay, writing a testing utility for ATM controller software. Whee.

Handily enough, one of the guys I made friends with at work introduced me to the Sportslink snooker club in Santry, so I've got a chance to practice some proper snooker and improve a little, rather than bang my head off the wall on my own.

At the moment in my fragments of spare time I'm sleeping, watching the X-Files and very slowly learning three languages (Eiffel, AutoIt v3 and Chinese). Verrrry

Tuesday, June 26, 2007

grid projectoring!

I was pretty impressed by this new product called Pluribus - presumably from the Latin motto that appears on American currency meaning "From one comes many" (probably also on a counterfeiter's t-shirt). So, it uses a webcam or something to dynamically adjust its configuration to split a single video stream over any number of projectors to make a bigger, better quality image. And apparently you can just plug projectors in and plonk them down anywhere and it'll do the stuff automatically.
Good idea! I'm sure it'll be approximated in open-source form to use your standard webcam, if Pluribus turns out to be expensive...
Here's a nice shot showing the boundaries of each individual projector's display...

Monday, June 04, 2007

the vacuum of "just-finished-college"

It's over. It's over. It's over. Takes a little while to really sink in, but now that I've finished my degree in Computer Applications (and what a truly fun degree it was!) at DCU, I'm free to do all those things I planned to get into during college but never had the time.
But I still haven't really done any of it, except for starting to learn Eiffel. Anyway, I'll have to get cracking before I find a job, or I might never start on it.

Just in case anyone is interested in a (not very)proof-of-concept program where you can train the TD(λ) players against either other temporal difference learners or against random players and view the plays made in a single game, I've put up the windows/linux binaries here.

Sunday, May 27, 2007

gcc as a cross-compiler

I've been following the steps outlined on Patrice Mandin's site to set up a cross-compiling version of gcc-3.3.3 that will produce outputs for the m68k-atari-mint target. I'm not running MiNT, but this seems to be the closest thing to building an Atari TOS compatible binary.
What I don't understand is the amount of work necessary to do so. I first have to compile an oldish binutils with a native x86 linux target, then start using that binutils to build the same version of binutils, this time for the 68k Atari target... then build the entire gcc-3.3.3 for x86, and then again for 68k. Jesus.

I thought the whole idea of a modular compiler design was that it wouldn't cost too much to implement a new target machine - just a separate backend that can be plugged into your existing compiler, that accepts intermediate representation code from the frontend and produces assembly specific to the target machine which it can assemble and link.

So why do I have to recompile binutils and the entire gcc twice each? This doesn't seem right.
But then, I don't know much at all about gcc - perhaps there are other, much easier ways of accomplishing the same goal.
Please comment if you know anything about adding new backends to gcc!

Saturday, May 12, 2007

Postscript looking manky?

Since I got my nice new cheapo network laser printer set up in Linux and Windows, I've noticed a problem when printing some Postscript documents from Linux. The pages will look fine on screen, but some fonts won't be sent to the printer (or something) and it will use a proportional font (e.g. Helvetica)'s character spacing with Courier instead, a fixed font, which results in totally uneven and sometimes overlapping characters horizontally. I read somewhere that Ghostscript has much more fonts than Postscript, so perhaps not all the font data is being sent to the printer and this is the problem.

I scratched my head for a while, trying different viewers and the like, but eventually stumbled, completely accidentally on a fix which works for me, although results in massive bloat:

Run ps2ps on the postscript file. This is supposed to 'optimise' the postscript file somehow, but so far has resulted in them increasing in size for me, and looking weird on screen... however, the printer output is absolutely spot on. It just seems to convert everything into image data... which is a lame fix, but suits me for printing.

I'd appreciate it if anyone else knows more about this and maybe a better solution!

Tuesday, May 08, 2007

more exams

Another set of exams coming up. This time, I think I'll fall back on the tactics I used in 2nd and 3rd year - just reading as much as possible, then using mnemonics to memorise lists of keywords to remind me of notable elements in each subject.
I'm not sure if I'll use Pauker at all for this - my exam performance in semester one this year was much worse than last year (68% average compared to 81%...??), probably because I was biting off too much to chew. The flashcards route needs more experimentation for general study.
Anyway, this time there are only three exams, one of which (Compiler Construction 2) is almost a gimme (although I thought its predecessor was a great exam and only ended up getting 63% or something on the paper, so I'll have to be wary), one of which should be alright given a bit of care and attention (Real-time Embedded) and one of which will require a bit more work since it's so bloody abstract (Z).
That said, JM seems really decent so I don't think he'll fuck us over on the exam.
Just have to stop procrastinating now...

Friday, May 04, 2007

birthday +/-

Had a nice birthday yesterday, to a large extent because I finished and submitted my project documentation (on time). Looked pretty good too.
Then balanced it out by having a massive row today... logically.

Also, when I got home yesterday evening, my Firefox 2 had somehow lost the session with about 20 tabs open... which was frustrating, so I gave Opera a go... seems so much better than Firefox - much smaller memory/CPU footprint and faster response times, as well as some handy mouse gestures and that speed dial thing. It's pretty impressive! And looks like it works fine with SCIM...: 我想吃一点人东西。

Wednesday, May 02, 2007

finally some improvement!

I had an epiphany (love that word) last night while trying to sleep, and came upon an idea that seems incredibly obvious now, so I guess I was stuck in a mental rut for a while. Need to raise the temperature when that happens, or something...

Anyway, my agent was spending all its time choosing illegal moves and being punished by the environment which trivially rejected those moves until it returned a valid one. However, since I'm using a neural network as a function approximator for the TD(λ) agent, making 1000 illegal moves followed by one valid one isn't a great way to learn - the backpropagation for the many illegal moves not only slows the whole thing down, but much worse, it results in so much network noise that the reward for a good move seems to get drowned out, as one of my lecturers in DCU helpfully pointed out a few days ago.

So last night I realised that not only was training on illegal moves a waste of time, but more importantly, since illegal moves are well-defined, I could just have the environment tell the learning agent which moves are legal (by passing in an array of booleans, one for each action... false for illegal and true for legal). Then the agent devalues the illegal moves and pays attention to the valid moves instead... although this could have been implemented better. In fact, everything could do with a lot of refactoring - it's too coupled to add proper unit tests for some of the behaviour.

Anyway, I implemented this and now the agents train against each other at a rate of almost one game per second on my machine. Not blazingly fast, but enough to get the following modest result in enough time to do a demo hopefully:

score before training: 76%
score after training: 88%
Success: 22 tests passed.
Test time: 886.09 seconds.

That was for 100 evaluation games against two random players, followed by 500 training games against other TD(λ) players, followed by another 100 evaluation games against randomers. It's probably not totally accurate as it's learning even against the first random player, and also because random players don't play to win, so it's almost a different game!
Still, it's an encouraging result... actually the first encouraging result. Bit of a happy birthday present really...

Wednesday, April 25, 2007

boltzmann in action selection

I've been replicating across some of the functionality of my TD(lambda) bridge player project into Java to test in Tyrrell's world. Last night, I fixed a kind of obvious bug that had slipped me for a week or so and made it work hopefully properly, at least for the TD(0) case.

The performance in Tyrrell's world wasn't all that great though, so I started decreasing the softmax temperature parameter to make it a bit more greedy... here's an interesting result:

with temperature ~=0.8:
Steps: 255 Sexed: 0
Steps: 11 Sexed: 0
Steps: 263 Sexed: 0
Steps: 274 Sexed: 0
Steps: 211 Sexed: 0
Steps: 257 Sexed: 0
Steps: 253 Sexed: 0
Steps: 251 Sexed: 0
Steps: 254 Sexed: 0
Steps: 307 Sexed: 0
Steps: 428 Sexed: 0

with temperature=0.14:
Steps: 391 Sexed: 0
Steps: 392 Sexed: 0
Steps: 393 Sexed: 0
Steps: 393 Sexed: 0
Steps: 392 Sexed: 0
Steps: 391 Sexed: 0
Steps: 394 Sexed: 0
Steps: 391 Sexed: 0
Steps: 394 Sexed: 0
Steps: 391 Sexed: 0
Steps: 392 Sexed: 0
Steps: 393 Sexed: 0

I'd have thought survivability was random if you did practically nothing, but I guess not? Anyway, that's obviously a bit too low.

Monday, April 23, 2007


Well, that was one hoor of an assignment. We were basically given a month's extension - I had it practically finished except for the extra CALL tile handling - function prologue (callee-save and copying formals) and epilogue (restoring callee-saves and setting up return value) when it was originally due, and left it on hold until a few days ago.

Actually getting CALL working even half-properly was a total headwrecker. The documentation was shit, and there are still unexplained issues that I don't understand - for one, incoming parameters get copied into temporaries that are never referenced... instead, what look like older temporaries are used. Sob.

Monday, April 16, 2007

czt -> community Z tools

Here's a tip for anyone who needs to put a Z specification together quickly.

Never, ever, ever, ever, EVER use CZT. It is the most frustrating, dog-slow piece of shit software package I have used in my life, without exaggeration. With jEdit it's just unstable and crashy enough to warn the user away immediately.

As a plugin for Eclipse, it starts out nice, then after about one page of simple Z schemas, it parses the buffer repeatedly on every single keystroke, even if you tell it not to in the configuration page. It throws syntax errors on things that look right according to any examples of Z I have ((i,j) of a natural x natural type referenced in an axiomatic definition).

It started out in a promising fashion, and the output through latex looks nice, but now I'm in a position where I don't understand the errors it's giving me (after the unbelievable 3 minute delay every time I make a change (ie: hit some keys)) so I can't even convert what I have to tex and work on that directly - I have to delete all of the code that causes errors as quickly as possible so it will parse the buffer successfully.

Never, ever touch this stinking pile of pain. It's just not worth it.

Saturday, April 14, 2007

reinforcement learning with function approximation

This is much harder than I thought. I've got a series of tests (not very modular at all - they're split into only two source files and cover test-first unit tests and empirical performance measures) which examine the components of the system in some way... the neural network seems to be functioning reasonably, although it's less accurate than I'd expected for pure numeric output, unless I format the output as a binary string again... annoying.

Not sure now whether to have the TD net represent its estimated values like this or keep it as an expanded sigmoid for now.

Here's its performance just now on a 30-room random walk test - there are two actions: 0 is left and 1 is right. All rewards are 0 except when entering the terminal state (furthest room to the right) which gives a reward of +100. I kind of expected much better performance ages ago, but I guess it's harder to get these systems right than I thought. Although it completes the task in 15 moves a few times (the minimum amount), it often goes wrong.
learningRate: 0.5
steps taken on run 0: 697556
action 0 chosen: 91.2195%, action 1 chosen 8.78051%
steps taken on run 1: 67
action 0 chosen: 38.806%, action 1 chosen 61.194%
steps taken on run 2: 99
action 0 chosen: 42.4242%, action 1 chosen 57.5758%
steps taken on run 3: 121
action 0 chosen: 43.8017%, action 1 chosen 56.1983%
steps taken on run 4: 115
action 0 chosen: 43.4783%, action 1 chosen 56.5217%
steps taken on run 5: 27
action 0 chosen: 22.2222%, action 1 chosen 77.7778%
steps taken on run 6: 15
action 0 chosen: 0%, action 1 chosen 100%
steps taken on run 7: 35
action 0 chosen: 28.5714%, action 1 chosen 71.4286%
steps taken on run 8: 19
action 0 chosen: 10.5263%, action 1 chosen 89.4737%
steps taken on run 9: 17
action 0 chosen: 5.88235%, action 1 chosen 94.1176%
steps taken on run 10: 17
action 0 chosen: 5.88235%, action 1 chosen 94.1176%
steps taken on run 11: 15
action 0 chosen: 0%, action 1 chosen 100%
steps taken on run 12: 15
action 0 chosen: 0%, action 1 chosen 100%

Sometimes it gets stuck in some weird state (local optima?) and never really learns anything. At this point, the action selection policy is just the action with the best estimated value unless the two actions appear worth the same, in which case it's a 50/50 tossup, or the epsilon-greedy function chooses a random action with probability 0.08.

I'm thinking the next step is to implement a softmax action selection method and maybe another test.. or, I dunno, actually carry on with the functional requirements of the thing. Time runneth short.

Tuesday, April 10, 2007

Bin Ankh

This was on the pavement on Gardiner Street, near my apartment in stabsville, Dublin 1:

I wonder how it came to be...
And while I'm at it, here's a nice one from DCU. Nice!

Japan, America and pacifism

Tangentially, tacked on to this post about consumer robotics in Japan is a very interesting discussion on the degree of pacifism in Japan since WWII, movements (or lack thereof) of American politics over the last 50 years and wherever the rambling trail leads. Read it!

Sunday, April 08, 2007

software for truly lame people: WhiteSmoke

I got an ad from FreshDevices in my email today, and instead of deleting it like 99.9% of the other ones, I had a look and saw mention of a program called WhiteSmoke.

The ad text read:
Write like an English pro using this software. With full-text analysis solution, convert simple English sentences to become more sophisticated automatically.

This premise raised my ire pre-emptively, since if the "simple" English sentences communicate the correct meaning, surely making them artificially "more sophisticated" is either distorting the meaning or at best, fluffing out concise text with superfluous padding. In a sense, de-optimising the text.

So I had a look at the site and found pretty much what I expected.

He was very interested in our product line, however, he has some issues with our priceing.

He was very interested in our innovative product line, however, he has some significant issues with our pricing.

How does it know whether the product line is innovative, and is it even relevant? Obviously the assumption is that you would always refer to your products as "innovative" whether it is or not, but this just makes the word optional and eliminatable (okay, that's probably not a word, but it should be...).

Ignoring the fact that it corrects the obvious typo in "pricing" (which should be done by another single-purpose tool anyway) it also adds the modifier "significant". This is all clearly in the name of making simple text sound more formal and "clever", but I have two issues with this:

a) People should be able to do it themselves without changing the meaning inappropriately
b) This clearly changes the meaning inappropriately.

If someone doesn't speak enough English to write in an academic tone, they can get by with what they have and use a dictionary/thesaurus to get the meaning across. And a native English speaker has absolutely no excuse to even consider using this thing. Using an automated tool to make your writing look "clever" is the very opposite of clever. It's akin to having a voice filter on your phone that transforms your speech into a different accent (Cockney Skank to marbles-in-the-mouth Rupert). The whole concept is utterly lame and anyone caught buying such a tool should be whipped. Whipped!

Monday, April 02, 2007

TD(lambda) and bridge

I've been doing another all-nighter working on my final year project - a neural-network based TD(λ) reinforcement learning bridge player... I say that, but really I've been hung up on implementing the bridge game model. It's as complex as I worried it would be - that is to say - fairly difficult. And I can't just go to sleep (unless it's for 2 hours... hmm....) as I'm due to demo something at 11:30am - 7 and a half hours from now. Eeehhhh, right. 真不好.... all I have so far is some confusing code and a limited-scope set of testcases. Sleep is sounding better and better!

Sunday, March 25, 2007

dodge this....

Apparently NASA is researching the effects of high-speed collisions of tiny meteorites on the moon's surface. The concept is pretty disturbing, since some of the rocks are travelling at up to 35 kilometres per second when they hit the ground. At those speeds, a spacesuit isn't going to stop you from being turned into a smear instantly... so how are we going to survive in space?
As NASA explains it, you might dodge a bullet but still get caught by its shrapnel. Among the questions they want to answer: Are you more likely to get cut off at the ankles by debris spattered along the horizon, or hit from above by material on high, ballistic trajectories?

Wednesday, March 21, 2007

consequences of blind faith

BBC: Indonesians jailed for beheadings

This really makes me wonder how people can possibly be that vicious and remorseless. This guy and his two friends beheaded 3 schoolgirls because they were students at a Christian school, as revenge (or something) against the Christian community for some previous violence against Muslims.

How could their made-up rubbish (religion) be more important than the lives of innocent civilians? He said at the sentencing that he didn't care about going to jail either, demonstrating a total absence of remorse.

As far as I see it, religion offers only the "blind faith" needed to murder innocents in the name of God and brotherhood. This is the same kind of conditioned psychotic mentality exhibited when fanatical Muslims burned down embassies and basically violently wrecked the place over those Muhammad cartoons. Idiots.

The old Christian phrase "love of money is the root of all evil" is inaccurate. I think the correct one should be "blind faith in religion is the root of all evil", because it allows apparently normal people to dehumanise and then horrendously butcher and murder other civilians.

Friday, March 16, 2007

China's new property law

A quote from a Chinese net user on the new property law passed in this year's "National People's Congress", which turned up on the BBC's news site.

"With the property law, finally, I won't be afraid of losing my bicycle. If I lose it, if it is still in China, it still belongs to me according to the law."

Sarcastic bastard. I love it!

Saturday, February 24, 2007

scim + firefox 2

Firefox 2 and 1.5 as distributed by Mozilla are linked against a different version of libstdc++ than the binary distributions of the SCIM input method. I think. Anyway, whatever way it's done, Firefox crashes immediately on startup - running it from the command line produces this output:
/usr/lib/firefox/ line 131: 2198 Segmentation fault "$prog" ${1+"$@"}
I encountered this problem before and worked around it by specifying xim as the GTK input method module... but this meant I couldn't use any input methods.

So it happened again today when Firefox updated itself to, and I happened upon a much nicer workaround:
sudo vim `which firefox`
then add:
a line before "moz_pis_startstop_scripts()".

This allows me to use SCIM in Firefox 2. Happy days...!

careful now... DOH!



Anyway, I did pretty shit in my fourth year semester one exams - worse than any other semester since I started the course in 2003. I think my average is about 67%, but I can't be sure until I get my Cryptography assignment marked... looks like I only scored 67% on that paper as well, though. Unnnh...

It's weird - I walked out of most of the exams thinking "I nailed that!", but nope. This means I need an average of 75% or better on my three subjects and final year project to get a first class honours degree. Usually I'd say "no problem, I keel you. Badges? We don't need no steenking badges!" but after last semester I dunno what to think - seems like my level of understanding sense was pretty inaccurate...

Friday, January 26, 2007

post-exam stress syndrome

After two weeks of exams and a couple of 4 hour sleep nights in a row, I guess it's natural to be absolutely exhausted. Still, I think all of them went okay except the Graphics fiasco, which was a kick in the face for a lot of us.

Still, as long as I passed it, I can hopefully make up for it with the other stuff... I keep telling myself how I'll work more efficiently in semester two. I'd better...

In other news, this is great reading. In fact all the articles are cleverly written (and where does he find the stuff..??)

It is also important to remember that Glen and Sophie are characters in two separate productions. Hey, it's the magic of post production. Glen then sits down to talk to another new character about Sophie. This is where the seams are really starting to show, as Glen obviously is in a barracks in the middle of the jungle, while the man he is talking to is in an office, in different lighting, and in a different movie. This guy then hires someone to rescue Sophie.

Friday, January 19, 2007


Think Dublin drivers are shit? Try this guy...

Tuesday, January 16, 2007


Automatic translation tools are very useful, but it seems clear that there's still a lot of improvement that could be done in the area.

For example... go to google translate.

Enter "Let's drink tea.", select English to Korean and translate.
Paste the result ("차를 마시자.") in to the box and translate back to English.

Surprisingly, the outcome is "Drink the car." What? Right...
It might be a good idea not to be organising any tea parties in Korean using translation tools to communicate for the time being...
Japanese isn't so accurate either: translating "I like to drink tea" to Japanese and back to English yields "I like the fact that brown is drunk". Firstly, that stuff should be solid or you should be seeing a doctor, and anyway, I don't want anybody drinking my brown. That goes straight in the jar under my bed.

Update 4th February 2011

  • Now translating "Let's drink tea." to Korean and back results in "Janhaja tea". Eh.

  • The Japanese round-trip for "I like to drink tea" is now accurate.

It's a pity I didn't save some more bad examples of which I compiled quite a few, to see how the state of the art (assuming Google Translate is reasonably representative of this) has advanced in the last four years.


exams exams exams. We got the easy one first, so I spent about 3 days reading and making notes for it and was pretty well-prepared. Now I have just over one day to prepare for the graphics exam which is almost certain to be much more difficult.

Firstly, our software patterns & metrics exam is clearly structured - past papers online for the last few years are all "answer 3 out of 5 questions, each question on a well-defined area of the course: design patterns, architectural patterns, metrics, estimation and testing". That's the whole course. Easy peasy.

With the graphics course on the other hand, we'll be asked to answer 3 out of 4 questions from about 10 different areas... which means we have to study everything. Lame!

Tuesday, January 02, 2007

athbhliain faoi mhaise!

Happy new year! I did basically nothing on mine (I felt so lame that I went out for milk at 00:10 to wish a security guard and cashier a happy new year).

Thrilling stuff...