Strict Standards: Declaration of Walker_Page::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/public/blog/wp-includes/classes.php on line 576

Strict Standards: Declaration of Walker_Page::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/public/blog/wp-includes/classes.php on line 576

Strict Standards: Declaration of Walker_Page::start_el() should be compatible with Walker::start_el(&$output) in /home/public/blog/wp-includes/classes.php on line 576

Strict Standards: Declaration of Walker_Page::end_el() should be compatible with Walker::end_el(&$output) in /home/public/blog/wp-includes/classes.php on line 576

Strict Standards: Declaration of Walker_PageDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/public/blog/wp-includes/classes.php on line 593

Strict Standards: Declaration of Walker_Category::start_lvl() should be compatible with Walker::start_lvl(&$output) in /home/public/blog/wp-includes/classes.php on line 687

Strict Standards: Declaration of Walker_Category::end_lvl() should be compatible with Walker::end_lvl(&$output) in /home/public/blog/wp-includes/classes.php on line 687

Strict Standards: Declaration of Walker_Category::start_el() should be compatible with Walker::start_el(&$output) in /home/public/blog/wp-includes/classes.php on line 687

Strict Standards: Declaration of Walker_Category::end_el() should be compatible with Walker::end_el(&$output) in /home/public/blog/wp-includes/classes.php on line 687

Strict Standards: Declaration of Walker_CategoryDropdown::start_el() should be compatible with Walker::start_el(&$output) in /home/public/blog/wp-includes/classes.php on line 710

Strict Standards: Redefining already defined constructor for class wpdb in /home/public/blog/wp-includes/wp-db.php on line 58

Strict Standards: Redefining already defined constructor for class WP_Object_Cache in /home/public/blog/wp-includes/cache.php on line 405

Strict Standards: Non-static method K2::init() should not be called statically in /home/public/blog/wp-content/themes/k2/functions.php on line 34

Strict Standards: Non-static method K2::register_scripts() should not be called statically in /home/public/blog/wp-content/themes/k2/app/classes/k2.php on line 51

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method K2Options::init() should not be called statically in /home/public/blog/wp-includes/plugin.php on line 311

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method K2Header::init() should not be called statically in /home/public/blog/wp-includes/plugin.php on line 311

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method K2::filter_post_comments() should not be called statically in /home/public/blog/wp-includes/plugin.php on line 163

Strict Standards: array_filter() expects parameter 2 to be a valid callback, non-static method K2::strip_trackback() should not be called statically in /home/public/blog/wp-content/themes/k2/app/classes/k2.php on line 483
Lightspeed Blog
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method K2Header::output_header_css() should not be called statically in /home/public/blog/wp-includes/plugin.php on line 311

Strict Standards: Non-static method K2Header::random_picture() should not be called statically in /home/public/blog/wp-content/themes/k2/app/classes/header.php on line 50

Strict Standards: Non-static method K2Header::get_header_images() should not be called statically in /home/public/blog/wp-content/themes/k2/app/classes/header.php on line 35

Strict Standards: Non-static method K2::files_scan() should not be called statically in /home/public/blog/wp-content/themes/k2/app/classes/header.php on line 24

Strict Standards: Non-static method K2::_files_scan() should not be called statically in /home/public/blog/wp-content/themes/k2/app/classes/k2.php on line 349

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 932

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/blog/wp-includes/kses.php on line 933

Jog Blog

I’ve been toying with an idea for a while; a personal challenge of sorts. I didn’t want to mention it here until I was completely certain I would do it, but after an eye-opening event yesterday I’m ready to announce it with full confidence (I realise that I’m being just a little cryptic). So;

I plan to run the Dublin City Marathon this year.

The event that convinced this is a good idea was running 4.5 miles on my first proper training jog. While that seems like nothing compared to the mammoth challenge of 26 odd miles a full marathon requires, I honestly wasn’t sure if I could do it, and achieving my target has given me a huge boost of enthusiasm for running and fitness in general.

Having said that, there were some things about my performance that were less than satisfactory. In the interest of improvement, I’ll go through them in a listular format:

  • I didn’t bring any water with me, due to my own stupidity.
  • I ran about 20 minutes after eating, due to my own stupidity.
  • I was wearing DC skateboarding shoes, due to my own stupidity and lack of owning anything better.

(Feel free to substitute “naivety” for “stupidity” if you’re in the mood to cut me some slack). I thought the shoes would be okay; but about 3 miles in my ankles really started to hurt, so I had to slow down for the rest of the journey. I took 50 minutes in total, which isn’t bad considering it was my first proper run, but in a marathon situation those would be my 50 fastest minutes; at that rate it could take me all day to finish.

So as well as general fitness training (consisting of a heady cocktail of squash, football and cycling) I’m going to need to run more. LOTS more. And for that to happen, I need proper running shoes. There’s a specialist shop in Bray I’ve been heavily advised to visit - they supposedly videotape you running and analyse the playback to determine the right shoe for you. Any decent pair are going to cost over €100 - combined with the marathon entry fee (€60) and milestone training races (€45) it seems proving your worth on the streets of Dublin isn’t cheap. But you can’t put a price on fitness…

Researchers Are Go

I feel a bit like this at the moment:

…because I’ve started a summer research project in UCD entitled Odysseus/ODCSSS (whichever you prefer). The broad research area for this year is “Technologies for Social Connectedness”, which includes some projects focused on social networking. Mine falls into this category; I’m probably not allowed to discuss it openly (too many eager startups out there who would take underlying concept and turn it into the next bebo or facebook!) but I’m pretty sure I’m being vague enough when I say it involves allowing you to identify which friends you’re neglecting and take steps to get back in contact with them. Hey, look at that - I’m contributing to society and human well-being!

Because the project involves visualisation, I’m currently learning the Processing programming language. I was sceptical at first; rather than a language in its own right, Processing wraps Java to let you get graphical applications up and running without the overhead of learning about JFrames, Canvases and Graphics Contexts. I’ve been burnt by this kind of setup before - I don’t see why I can’t just spent a few hours learning the tedious stuff; then I’ll know it permanently and won’t need to bother with the overhead and restrictions of another language-ette.

Most of these niggling fears were eliminated, though, when I discovered you could type something like this:

size(600, 400);
background(0);
for (int i = 100; i < 200; i+=10) {
  for (int j = 100; j < 200; j+=10) {
    stroke(i + j - 75, i - j + 125, - i + j + 25);
    line(i, j, 300+i, 100+j);
  }
}

and get something like this:

Maybe it doesn’t look like much to the casual observer, but anyone who has dabbled with drawing even primitive graphics in Java will tell you that it’s a significant improvement. Even if I end up rewriting most of what I do in “vanilla” Java, I can see Processing saving me a lot of time just trying things out.

So I’ll be in UCD for the next 12 weeks, working on the above. I’ve been asked to keep a development blog to track my progress; and as much as I the thought of being unfaithful to lightspeed blog it’s a neccessity. However, I don’t think posts about hair dye or photos of me drunk would fit very well alongside research journal entries, so this blog will still serve a useful(?) function…

Catastrophic Failure

I have something quite important to talk about (namely this) but it’s going to take me a while to collect my thoughts and explain it properly. In the meantime here’s a cautionary tale about the perils of not backing up your data.

A few months ago my ageing external hard drive started making an odd clicking noise whenever it was left on for too long. Puzzlement grew to worry as I realised my precious data may be in jeopardy - and this particular drive was where my mp3 collection resided. Some of those files date back to the era of Napster, and as such I’ve grown quite attached to them. Since I didn’t have anywhere to transfer the files to, I took the safe route and stopped using the drive until I could safely rescue the data.

Cut forward to April, my birthday - friends from college get me a Network Attached Storage device and two 500GB hard drives (thanks, guys!). Now that I had oodles of delicious hard drive space, it was time to rescue those files. I turned on the drive and quickly copied the mp3s to their new location, watching them transfer anxiously. It was a nail-biting few minutes, but fortunately the transfer finished with no problems. Huzzah! I decided to have a celebratory dinner straight away, and salvage what other files I could from the drive later on.

When I returned to my room, belly full and mind at ease, there was an unholy sound coming from the hard drive (I had forgotten to turn it off). I wish I had had the presence of mind to record it so I could show you how badly the drive was mutilating itself, but my first priority was making sure no explosions occurred. After turning off the drive, I took it apart to perform my autopsy.

Melted Hard Drive

Notice the melted plastic.

Hard Drive near the bin

Now, notice the close proximity of the drive to the bin.

Seems it’s dead… which is a shame, but also a wake up call. Stuff physically breaks sometimes! With this abrupt and jarring loss as a catalyst, I finally got around to burning a backup of all my important files (college work, web design projects, etc.) It spanned three DVDs, totalling about 12GB of data - who knew I had so much important stuff!

Com-Pugh-ter Science

Disclaimer: non-Computer Scientists may want to avoid reading this; it contains opinions of a geek-oriented nature, and pedantic discussion of data structures. You have been warned.

This Tuesday I return to college from a 2 week break. Things had been pretty much non-stop since I got back in January (hence the lack of updates) and since I don’t expect it to be any less frantic from when I’m back (what with me having 5 weeks to code a Real-Time Strategy Game), I decided I’d try to get as many of my assignments done over the break as possible. Despite making that commitment, I managed to spend the first 2 days of it furiously coding in Java, despite the fact that I’m not even using Java in any classes this semester.

I had read about Skip Lists a while ago, and thought the break was a perfect time to implement one. Skip Lists maintain several sorted lists of data; the lowest level has a link to every item, like a normal Linked List, and each higher layer has progressively fewer, allowing you to “skip” a number of elements in a traversal. If you’ve passed the object you’re looking for, you go back one link and drop down to a finer-grained list (The original paper on the subject explains things much more clearly than I can). Because of the need to maintain several lists, Skip Lists use more memory to provide faster access; but as any NASCAR driver or amphetamine junkie will tell you, it’s all about the speed.

I wanted to make sure my code was neat, so I downloaded and ran both Checkstyle and FindBugs on it (FindBugs is actually developed by the same guy who invented Skip Lists, Bill Pugh). Sure enough, FindBugs found several situations where crashes could potentially occur, such as not checking if method arguments were null. It also found a few glaring errors, which would have taken much humming, hawing, pondering and noggin-scratching to fix. In short, it saved me a LOT of time, and that was just in writing one class. I’ll certainly be coming back to that plugin…

While using Checkstyle definitely improved the quality of my code, it certainly wasn’t as pleasant an experience. Straight from the start it gave me dozens of misleading warnings, because it wasn’t set up to work with generics. it was asking me to insert a space before and after every occurrence of ‘<’ and ‘>’, which is fine if they’re being used as arithmetic less-than and greater-than; not so helpful when they’re specifying a generic parameter. I came across this bug filed in the Checkstyle bug tracker, which contains fixes.

So, where’s the finished product, you ask? Right here. It implements the Collection interface, so it can be used in place of any other Collection. I’m pretty proud of it; it’s clearly written and well documented. It’s also probably the only code I’ve ever written that’s immediately useful to someone else :P

(To anyone who waded through this post without knowing what I was talking about: first, why? and second, here’s something a little more entertaining)

The Dog Whisperer

Cycling to college today, I noticed a dog circling a car on the road, barking furiously. Before my mind could get carried away with flashbacks from Cujo, I got close enough to see that it was actually barking at another dog in the back seat of the car. The woman in the car was clearly distressed, as she couldn’t drive away in case she accidentally hit the dog. “Wow, what a predicament” I thought to myself, and cycled off.

I actually did cycle by; but I stopped and got off my bike further down the road, and walked back to help. I wasn’t sure what I was going to do; if the dog became unruly, did I wrestle it to the ground until the trapped car could make its escape? As it turned out, all it took was a few shooing motions and a stern “gerroutofit!” to convince the dog to calm down. The woman rolled down her window, thanked me, and drove off.

Why am I mentioning this? Because I would have stopped straight away to help out; but I found myself thinking, as I often do in these situations, that maybe the person has the situation under control. Maybe I’m going to make a massive tit out of myself by offering to help where no help is needed. A good example is from a few weeks ago, also on my cycle to college. I was cycling along the N11 behind a girl, who as it turns out was also cycling to UCD. As we both pulled into the front gate and came to the security kiosk, a car sped by at the junction in front of us, forcing us to brake suddenly. I managed to stop without much trouble, but she pulled too hard on the front brake, performed an impromptu stoppie/endo and landed back on her bike awkwardly, dropping her bag in the process. I was already cycling away when I noticed what had happened, and by the time I had decided I should go back and check if she was ok, she had gathered her things and rushed off.

So I’m making a rather late new years’ resolution - to stop second-guessing myself and offer help to strangers whenever I suspect they need it. And if I end up offering to help an elderly woman cross the road, and she tells me to piss off… well, that’ll just make for an interesting blog entry :)

Graphs and Statistics

When titling the previous post, I wasn’t sure how many ‘m’s to include. I wanted a feeling of trailing off, but didn’t want to overdo it - “what’s a usual sort of number to use in this scenario?” I thought to myself. Being a nerd geek cyberdude, I consulted Google, and immediately lost my original trail of thought when I discovered that the number of results for the regular expression “Hm*” was inversely proportional to the number of ‘m’s chosen. For non computer scientists/turing machine enthusuasts, this means that every time you add an ‘m’, the number of search results drops - quite sharply, in fact. Having made this obscure and asinine discovery, I tried to think of a way of making it blogworthy…

The green line is the actual values, and the orange one is an exponential regression, apparently (Anyone who correctly identifies where I’ve used the three colours here before gets a million points). I had to wrestle with OpenOffice furiously to make the graph - someone with actual skills probably could have put it together in under a minute, but I’ve probably created about 3 files in 2 years of having OOo so it took me slightly longer than that. As in it’s now 4am. Oh dear.

Another thing I noticed was that even though the amount of ‘m’s was decreasing, Google would always find something no matter how many I added in. After a while I was obsessed, I had to find a “Hmm…” no one had typed before! Eventually I did - I had to make the link tiny so it wouldn’t break wordpress:

Hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

At least next time they crawl my blog, I’ll be able to say I’m number 1 on Google for something.

Until Donal uses cunning SEO techniques to overthrow me.

Since we’re on the topic of pseudo-maths and blog matters, here’s a graph I drew (in mspaint) of how my time was spent over the Christmas break:

Sleep~30%; Work~33%; Halo 3~28%; Other~9%

Blogging is included in the “Other” section, along with eating and watching Arrested Development - I hope this helps you understand why updates were sparse…

Hmmmmmmm…

Lately my computer has been making an odd humming noise. It starts and stops in a regular pattern, coming and going sporadically throughout the day. I spend a good chunk of my time sitting at this computer - and as I don’t find the idea of slowly being driven mad particularly attractive, I set out to exorcise the phantom buzz.

The noise sounded distinctly like something resonating with some other thing - since the hard drive is the main moving part in a computer, I started there. I swapped my two drives hoping this would align some obscure computer-chi and magically fix the problem. After reassembling and turning on the computer, I gave it 10 minutes in which to stay quiet - huzzah! Not a peep. Noticing the tower was still on the floor, I slotted it back into the desk… and predictably, almost immediately, the hum returned.

So how do I fix this problem? Get a rubber desk, so any vibrations passing through it are nullified? While it would be quite a talking point, I set about finding a slightly more elegant way to disrupt my computer’s internal grumblings from rubbing my desk the wrong way.

Just minutes later, I hit upon this inspired solution:

Computer sitting on a packet of mints

Who knew a packet of mints had so many uses? Not only that, but:

Computer sitting on a packet of Microsoft mints

Aww, look at it, snuggling up to the “Microsoft Vista Compatible” sticker.

10 Points to the first person who comments about how open source mints would have done the job twice as well and been free to boot. And by “10 Points” I mean, of course, a swift but firm kick to the genitals.

I Can Has LOLs?

I couldn’t allow a whole month to go by without a blog post - not that 29 days isn’t also shocking, but because I happen to know that one month is the precise amount of time it takes for a blog to die of malnutrition; and I’ll be damned if this one is ready to join its brothers and sisters up in blog heaven.

Even though I’m on a strict time limit here, administering vital prose to Lightspeed Blog through an IV drip, I’ve still managed to cook up something of unimaginable mirth for you, my faithful readers, to enjoy. I have a history of making odd facial expressions in photographs, and this Stephen’s Day in Club 92 was no exception.

So, without further ado or pleonasm, I present to you: LOLEugene - The next great internet meme.

Liz Has A Flavour?

Invisible Bitch Slap

I can has internet notoriety?

I was apprehensive at first using the word “drunkennesses” - it’s clearly more than a little made up. A quick googling later though, I was reassured that not only was it in common use… it’s even in the Bible?!

I promise to update more, internet, once my life goes into the adrenaline-fuelled interest explosion I just know it will in oh-eight. And if not, at least there’ll probably be a few more pictures like the above by Tuesday morning…

(If you were puzzled, perplexed or even outraged at the above, I should explain that it’s a homage of sorts to something called LOLCats. But really, if you sincerely don’t know what a LOLCat is by now you’re not very good at the internet. What are you doing on my obscure blog? That’s like hiking up Mount Everest before you learn how to cross the road. Go watch Salad Fingers before you do anything else.)

Intermission

I know what you’re all thinking: man creates blog; posts a few times, gets bored; blog fades into obscurity. Yes, many a valiant internet wordsmith and his digital narrative have suffered this wicked fate - but not I! Or my blog, for that matter. The skinny is thus: I’m extremely busy. However, with the aid of <h3> tags, I will bring you quickly up to speed with minimal verbosity.

NWERC

we didn’t do very well, but it was still a great trip. Plus I saw the sunrise for probably the first time ever:
Sunset

Computer Science Karaoke

was heaps of fun.

Karaoke

Expect further update shortages…

Better Late Than Never

I’m writing this entry on a bus on the way to UCD - if I can manage to find an unsecured network and post it while the bus is at traffic lights I’ll be rather pleased with myself :D

I meant to write about this sooner, but anyway: this weekend I’m off to Utrecht, Holland to compete in NWERC 2007. It’s a regional qualifier for the ACM ICPC. This is the first year any university in Ireland has entered a team (or so I’m told), so it’s “kind of a big deal”.

Why me, you ask? Well, it’s party because I competed in a programming competition in UCD last summer, but also partly because the whole thing was sort of under the radar. Only six people expressed an interest in being part of the team, of which three were finally chosen. The entire school of Computer Science got an email about us last week though, so maybe I’ll have some stiffer competition to qualify next year :P

We’re staying in a hotel with the charming name of “Van der Valk Biltsche Hoek”, which looks quite nice; the website was all in Dutch though, so we may have reserved 4 car parking spaces for 3 months for all we know. Half way though the booking process we were presented with the following choice:

More Person Room!

We managed to figure out that “kamer” means “room”, but were stunned to discover that “meerpersoon” means… “more person”. What the hell is a ““more person room”?! We booked them since they were the same price as standard, and I assume if it turns out we don’t like the “more people” provided we can tell them to take a hike.

We’re going over on Friday at about 3pm, and arriving at 6ish. Those are local times; seems it doesn’t take 3 hours to fly a few hundred kilometers. Even more strangely we’re leaving at 7 on Sunday and getting in to Dublin at 7:30! Holland is ahead, or behind, or something. My brain isn’t designed to process time zones; just thinking about the International Date Line makes me nauseous.

I realise this is all of questionable interest to anyone else… I’ll make it up with some funny youtube videos soon, I promise. In fact, here are some dudes trying to act like ninjas when they are quite clearly not ninjas:

I can only hope that video gives the above article clarity and context :)