Search Results for: feed

growing up

For a long time, whenever I did something that I thought was interesting, I would write it in an article.

I don’t write as much as I used to. Not because what I’m doing is not interesting, but because it’s taking a lot longer now to complete the interesting jobs, now that they’re basically full projects and not just little snippets here and there.

As an example, we’re doing some interesting work over in the KV WebME project. The most recent is an upgrade to image galleries allowing the gallery layouts to be defined using templates, instead of saying “you want layout 1, or layout 2?”. This work is then also used in the products plugin to let people sell images in their online stores.

There are a number of bits in that project that deserve full posts themselves, but as I basically commissioned the piece and got others to do the work, it’s no longer mine to describe. For me, the cool little tricks are now just a smaller part of a bigger picture.

The bigger picture right now is 20eu.com, where you can create your own online store within literally minutes for only €20 (compare that to the “free” getting business online project, which doesn’t have an e-commerce aspect).

It’s now harder for me to write about, because there are no longer single cool aspects that I can point to that can be re-used by other people.

I was walking to work today with Conor (an employee), discussing stuff along these lines, and these points stood out:

  • In the beginning, I was a programmer, and every task had something new to me but nothing I could write about that would interest experienced programmers.
  • After a few years, I was a good programmer, and I did less tasks, but they were larger, and there were often aspects to them that were brand new, so I ended up being one of the first to build them (it helps that my field is Ajax, which is basically new-born).
  • And now, I’m tired of being just a programmer and have started branching into managing other programmers. I’m more interested now in getting full projects done than in the nitty-gritty.

Unfortunately, this means there is less to talk about that is even vaguely techie. I feel like I’m shifting focus into marketing and project management.

Ick!

On the plus side (for me), it means that eventually, I’ll have enough resources that I can get the projects done that I’ve always wanted to do.

So, I plan on starting to write about the business end of my work.

Don’t worry – I’ll categorise it correctly, so if you’re only interested in my PHP or Linux posts, then just change your reader settings to only read from those RSS feeds.

Graham Coxon at the Barbican

Bronwyn and myself went to the Barbican, London, on Saturday to watch Graham Coxon perform.

We both enjoyed the event. Bronwyn was excited to meet friends she had only spoken to online. Well, she’s been excited for the whole of the last week, but it’s all related!

London is big.

The weather was ok for the Friday and Saturday while we were wandering around taking in sights and sounds. We visited the National Gallery, and were handed a sheet saying a candle-lit baroque concert would be happening later, but it clashed with our previous plans.

Arrived at the Barbican. Bronwyn didn’t see any of her friends. We said we’d meet up around the bar, so that’s where we went, and sat opposite it.

We were there about five minutes when I spotted a huge amazing monstrosity of a drum-machine, Felix’s Machines. You have to see the videos of that thing!

As I stood there, Simon from Resigned (also the admin of the Graham Coxon forum) noticed me and waved to get my attention – ah, that’s where they are! We joined a group of Coxon fans.

We had two hours, so we gently infused ourselves thanks to the bar, with some opting for chips and complaining that you shouldn’t need to buy fish&chips just to get some chips (as a vegetarian, I agree wholeheartedly with this, and not just through a hatred of waste).

The show was to start at 8, so we headed down and got our seats.

Simon had thoughtfully gotten us row G (haha – G for Graham. very good. ahem…), which had a walk-space directly in front of us, meaning we could stretch our legs and walk to the toilets without stepping on people’s heads.

Bronwyn decided a new piece of policy was to be created henceforth: when purchasing tickets, people should be measured for height, and really tall people should be confined to the back of the auditorium.

The band came out and the place became loud with cheers.

The sound engineers didn’t do the best job in the world. The band played brilliantly apart from a few minor hiccups, but some of the sound problems were distracting.

When Graham spoke, it was difficult to hear. I was afraid that his singing would be the same, but when he sings, he crouches close to the microphone, and when he talks, it’s like he’s unaware the mic is there.

Some of the songs were technical, involving a lot of finger-picking. An example is Sorrow’s Army. Graham started out on that one, then Robyn Hitchcock joined in a few bars later. Robyn’s guitar, though, was louder, so it drowned out Graham’s playing. This was pointed out independently to me by Simon later on, so it wasn’t just my ears playing tricks.

There was a feedback problem later on at the beginning of one tune, which was quickly and cheerfully quelled and restarted.

One of the three female singers was very loud at points. I didn’t like that – it was like she was stealing the spotlight.

On the far left of the stage, Max Eastley was playing the Arc. At most points in the concert I couldn’t hear anything of what he was doing. Only in quiet songs with only one or two other instruments.

When the songs got loud, they got very loud. Graham was unintelligible at some points as he tried to sing above the sound of the other instruments.

Apart from these gripes (and they’re minor – Bronwyn doesn’t agree with any of the above points), I enjoyed the concert.

I think the only tune I didn’t like was the ending of Caspian Sea, where the band appeared to get stuck in a rut, repeating the same bar over and over and over.

I liked how the music was not perfectly in-tune or perfectly rhythmic, but was just a little off here and there. This gave the music a more natural and “used” feel, like an old rickety piano which is played when the pianist is surrounded by friends – you feel like he’s playing personally to you and it’s not a surgical procedure.

The concert was basically Graham’s latest album, The Spinning Top, with a few extra old songs played at the end.

One of the things I like about this album is the finger-picking. Graham has recently been trying to increase his finger-picking skills, inspired by his love of old blues and folk. His interest in Nick Drake really shines through in the singing, and Bert Jansch (of Pentangle) in the playing.

In a lot of the songs, there is not just one finger-picking “voice”, but two. This could be seen obviously at the concert where Graham was playing one finger-picking riff and Robyn was playing another, yet they meshed nicely.

Overall, I enjoyed this concert and if he does it again with another album, I’m sure we’ll be going over again.

Goodbye Gary, and thanks for the memories

tribute image from Penny Arcade

Gary Gygax, who engineered a large part of my teenage years, is dead.

I started playing Dungeons & Dragons when I was perhaps 13 or 14, when my parents surprised me one christmas with a box-set of the Basic edition. Almost immediately, this became a hit, and a troupe of players was formed in school.

I’ve lost contact with the players over the years, but their names were Neil, Sean, Brian, Tiarnan, Anto and Gavin.

What D&D gave to me was an imagination and companionship. Once a week, I was able to escape from the drudgery of being an outcast and transform into someone else.

After a while, I transferred to AD&D (Advanced Dungeons And Dragons – an entirely new set of rules) 2nd edition. This was pivotal – the rules were more complex, but that didn’t matter, as the accompanying stories were so much more fascinating. I would buy (and in some cases, steal, to the amusement of the police – they expected young criminals in Tallaght to be stealing cars or mugging, not stealing books to feed a voracious imagination) manuals, read the rules, but study the accompanying short-stories and excerpts.

The goal of AD&D is not to beat up orcs, steal their treasures and amass a huge value in XP. As a dungeon master, I tried to reward the players for playing their roles passionately more than I’d reward them for the various atrocities they committed on the rapidly endangered bad-guy species in our make-believe world.

Through the game, I came across wonderful gems such as Margaret Weis and Tracy Hickman’s Dragonlance books – which would go on to be hugely popular. I always fancied myself to be a little like Raistlin/Fistandantilus – a weakling outcast who had big potential inside. Unfortunately, Raistlin was also a little, well, evil, but no-one’s perfect! His brother Caramon was a bit of a dweeb. Sorry if I mangle names a little – it’s been twenty years since I read the books!

The antics of Tasslehoff Burrfoot were sometimes annoying – the Jar-Jar Binks of the Dragonlance world. But it was fun to read the events of Fizban The Fabulous – an addle-brained sorcerer who would turn out to be very very important (and also turned up in another unrelated series by the same authors, as “Zifnab”).

Eventually we would go on to play other games such as Vampire: The Masquerade and the over-complicated but realistic Warhammer Fantasy Roleplay. We would always go back to A&D, though; nothing could beat it.

Gary, if there’s a heaven for gamers and dungeon masters, I hope you’re in it, enjoying a pipe with the great sage Elminster.

php.ie in Dublin

Today, Ken Guest and I manned the PHP.ie stand at the first IWTC conference. It was also our own first conference. We learned a few things.

  • Have something to give to people. Almost everyone that turned up to the table wanted to take away one or more of Damien Seguy’s plush ElePHPant toys we had on the desk. They were really just there for decoration, but we did give some away (luckily, my son Jareth already had one put aside!).
  • People want to join, so provide something solid which allows people to feel they are joining something real. We ended up having to ask people to join the IE-PHPUG mailing list. Next time, maybe a small form to fill in would be cool – some people might not want to join a mailing list and are more interested in occasional information.
  • There are a few companies out there that are interested in recruiting PHP writers, and active PHPUG members have a greater chance of getting their feet through the door than people who simply claim they know PHP.
  • There are a lot of people out there that have not heard of us! I spoke to two PHP writers from Techwest in Galway who guessed there might be a PHPUG, but didn’t know for certain – there are about 50 PHP developers in Galway, they said. Coming across us in the conference was a good way to open up to a more national network. Hopefully, they’ll be joining the mailing list tonight, and next month will have the first Galway PHPUG meeting, along with the Cork, Dublin and Monaghan meetings (yes, I insist on calling my monthly drinkfest an Official PHPUG Meeting).
  • Next time, bring a few extension cables – there were no sockets where our table was, and my poor lappie’s power ran out very early just as I was going to show some of my stuff to someone!

Some ideas, then, to improve the PHPUG network. I’m just putting the ideas out there, and hope that some feedback will come of it.

  • Actively push for content on the php.ie website. At the moment, it has the barest of content, and looks “un-lived-in”. We need to improve that and provide a vibrant first-stop for people interested in learning about PHP and the Irish community.
  • Built up a network – we need to know what companies use PHP developers, what companies are looking for PHP developers, and we also need a way for these companies and potentially employees to find each other.
  • Maybe each month, we could have a “spotlight” feature on selected members of the community. I’ve been told that there are 120 or so people signed up to the mailing list. I know perhaps 10-15 of them by name and casual IRC meetings. It would be great to get a bit more information about them – how/why they learned PHP, what interesting projects they’ve worked on, what they’re doing now, what current PHP thing excites them.
  • The plush elephants were a hit. Maybe badges and/or t-shirts for the next meeting? I think we might need to think about finance. I’m willing to throw what little money I can spare at this, as PHP is what I work at and a vibrant community is pretty much essential for my own work.
  • Competitions! PHP|Architect recently started running coding competitions. It would be interesting to do this ourselves as well.
  • Debates would be cool as well. I have my own opinions of what frameworks/libraries are good in PHP. It would be great to hear other people’s opinions, and to try provoke a lively comparison which would eventually provide us with a short-list of “essential” frameworks.
  • And to keep us a bit more broad-based, it would also be interesting to know what other languages people rate, and how they compare with PHP. I talked today about how I had found some applications easier to code in Java, for example, and it would be great to know what people’s opinions are about when PHP is the right language, and when some other language should be used instead.

In all, today was fun. I talked to a lot of cool people, including Romans Malinovskis, who showed me his in-house library (“A-Model”, I think he called it [update: A Module]). I listened to Sean Hanley‘s talk on Agile Web Development, which described the economic reasoning behind the “release early, release often” philosophy. Afterwards, we held the first combined Dublin/Monaghan PHPUG meeting in Eddy Rocket’s (I had a coke, and Ken had a burger and malt).

I’m looking forward to doing it again!

ANN progress

Last week, I posted a list of goals for my neural network for that weekend. I’ve managed most of them except for the storing of the network.

Didn’t do it last weekend because I was just plain exhausted. After writing the post, I basically went to sleep for the rest of the weekend.

demo (Firefox only)

The demo is not straightforward. Usually, I create a demo which is fully automatic. In this case, you need to work at it. In this case, you need to enter an image URL (JPG-only for now), a name (or names) for a neuron which the photo should answer “yes” to, and similar for “no”, then click “add image”.

The network then trains against that image and will alert you when it’s done. The first one should complete pretty much instantly. Subsequent ones are slower to learn (in some cases, /very/ slow) as they need to fit into the network without breaking the existing learned responses.

I’ve put a collection of images here. The way I do it is to insert one image from Dandelion, enter “dandelion” for yes and “grass,foxtail” for no. Then when that’s finished, take an image from Foxtail and adapt the neuron names, then take one from Grass, and similar. Over time, given enough inputs, I think the network would train well enough to learn new images almost as fast as the first one.

Onto the problems… I spent all weekend on this. First problem is with the sheer number of inputs – with an image of 160×120 size, there are 19200 pixels. With RGB channels, that’s 57600!

So the first solution was to read in the RGB channels and change them to greyscale – a simple calculation – that cut the inputs by two thirds.

Then there was the speed – JavaScript is pretty fast these days, but it’s nowhere near as fast as C, Java or even Flash. If a loop runs for too long, an annoying pop-up appears saying “your browser appears to have stopped responding”. So, I needed to cut the training algorithms apart so they worked in a more “threaded” fashion. This involved a few setTimout replacements for some for(...) loops.

Another JS problem had to do with the <canvas>. There is no “getPixel()” yet for Canvas, so I get to rely on getImageData which returns raw data. According to the WhatWG specs, you cannot read the pixels of a Canvas object which has ever held an image from an external server. So, I needed to create a simple Proxy script to handle that. (just thought of a potential DOS for that – will fix in a few minutes)

Another problem had to do with the network topology. Up until now, I was using networks where there were only inputs and outputs – no hidden neurons. The problem is that when you train a network to recognise something in a photo based on the actual image values, you are relying on the exact pixels, and possibly losing out on quicker tricks such as combining inputs from neurons which say “is there a circle” or “are there parallel lines”. Also, networks where all neurons can read from all inputs are slow. A related problem here is that it is fundamentally impossible to know exactly what shortcut neurons would give you the right answer (otherwise there would be no need for a neural network!).

So, I needed to separate the inputs from the outputs with a bunch of hidden neurons. The way I did this was to have a few rules – inputs connect to nothing, hidden neurons connect to everything, outputs connect to everything except inputs.

The hope with this is that the outputs would read from the hidden neurons, which would pick up on some subtle undefinable traits they spot in the inputs. So the outputs would be almost like a very simple network “overlaid” on the more complex hidden neurons.

Problem is – how do you train these hidden units in a meaningful way? I’m still working on this… Right now, it’s based on “expectation” – the output neuron, when it produces a result, is either right or wrong. If the neuron is then to be trained, then it tells the hidden units that it relies on what output it expected from those units in order to come to the correct conclusion. The hidden units wait until there have been a number of these corrections pointed out to them, then it adjusts accordingly. (two thoughts just occurred to me – 1; try adjusting the hidden neurons after every ‘n’ corrections (instead of at arbitrary points), and 2; only correct a hidden unit if the output neuron’s result was incorrect.)

Another thing was that there is no way of knowing how many hidden units are actually required to have the network produce the right results, so the way I get around this is to train the network, and every (hidden units * 10) cycles, if a solution has still not been found, add another hidden network. This means that at the beginning of training, hidden units will be added pretty regularly, but as the network matures, new neurons will be added at rarer periods.

I’ve caught the ANN bug. After spending the weekend on this, I still have more ideas to work on which I’ll probably do during the week’s evenings. Some ideas:

  • Store successful networks after training.
  • Have a number of tests installed from “boot” instead of needing them to be entered manually.
  • Disable the test entry form when in training mode.
  • Work some more on the hidden unit training methodology – it’s still way off.
  • Allow already-inputed training sets to be edited (for example, if you want to add “rose” to the “no” list of “grass”).

I think that a good network will have a solid number of hidden neurons which do not change very often. The outputs will rely on feedback from each other as well as those hidden units. For example, “foxtail” could be gleaned from a situation where the “dandelion” is a definite no, and “grass” is a vague yes, along with some input from the hidden units approximating to “whitish blobs at the top” (over-simplification, yes, but I think that’s approximately it).

update It turns out the network learns very very well given just two neurons to learn – I’ve managed to get the network to learn almost every image in “dandelions” and “grass” with only 4 hidden units and 2 output neurons.

letter recognition network

Last week, I wrote a neural network that could balance a stick. That was a simple problem which really only takes a single neuron to figure out.

This week, I promised to write a net which could learn to recognise letters.

demo

For this, I enhanced the network a bit. I added a more sensible weight-correction algorithm, and separated the code (ANN code).

I was considering whether hidden inputs were required at all for this task. I didn’t think so – in my opinion, recognising the letter ‘I’ for example, should depend on some information such as “does it look like a J, and not like an M?” – in other words, recognising a letter depends on how confident you are about whether other values are right or wrong.

The network I chose to implement is, I think, called a “simple recurrent network” with stochastic elements. This means that every neuron reads from every other neuron and not itself, and corrections are not exact – there is a small element of randomness or “noise” in there.

The popular choice for this kind of test is a feed-forward network, which is trained through back-propagation. That network requires hidden units, and each output (is it N, it it Q) is totally ignorant of the other outputs, which I think is a detriment.

My network variant has just finished a training run after 44 training cycles. That is proof that the simple recurrent network can learn to recognise simple letters without relying on hidden units.

Another interesting thing about the method I used is how the training works. Instead of throwing a huge list of tests at the network, I have 26 tests, but only a set number of them are run in each cycle depending on how many were gotten right up until then. For example, a training cycle with 13 tests will only be allowed if the network previously successfully passed 12 tests.

There are still a few small details I’d want to be sure about before pronouncing this test an absolute success, but I’m very happy with it.

Next week, I hope to have this demo re-written in Java, and a new demo recognising flowers in full-colour pictures (stretching myself, maybe…).

As always, this has the end goal of being inserted in a tiny robot which will then do my gardening for me. Not a mad idea, I think you’re beginning to see – just a lot of work.

update As I thought, there were some points which were not quiet perfect. There was a part of the algorithm which would artifically boost the success of the net. With those deficiencies corrected, it takes over 500 cycles to get to 6 correct letters. I think this can be improved… (moments later – now only takes 150+ to reach 6 letters)

jareth the artist

Jareth is always suprising me with his drawing skills. Usually, there is a point to them – he would draw a wineglass on a table with himself standing right next to it, looking at it. He draws all humans like Blue from Fosters Home For Imaginary Friends, except for his sister Boann, who he draws like a small sitting human. It’s fascinating.

Here are some of his recent creations.

  • Boann got a toy laptop from her uncle Mick (my brother). Jareth has drawn himself playing with it, in the hope that his drawing will come true.
    Jareth playing with his sister’s laptop
  • Not sure why the bowl says “Dog” – we have two cats, but no dogs. But impressive for a 3-year-old to do this anyway!
    Jareth feeds a dog…
  • He’s drawn a scene like this one a few times before. From left-to-right, it’s my fridge/freezer, microwave (with something cooking in it) and stove (with something cooking on it). I think it was a hint that he was hungry.
    cooking
  • His latest – looks like him riding a bike, but not enjoying it too much.
    riding a bike

Last night, I was considering whether to try interest him in architecture or engineering when he gets to that age – if he’s this attentive to detail at 3, imagine how he will be at 18?

update – 15:38

Just caught him in the act. Here he is drawing two people. I presume one of them is me (holding an umbrella???) and the other is Bronwyn.

p8080050.jpgp8080052.jpg

PS: KFM 1.0 was released over the weekend – get it!

charity links

Got tagged by Ken. The idea here is to have a growing list of charities to raise awareness of their existences. You add your own favourite 5 to the end, and tag 5 other people. I don’t know that many charities, but I’ll add Christian Blind Mission, Vincent De Paul, and the Drop Inn Ministries.

I know that’s only 3, but then – I don’t have much experience of them. The Vinnies were were helpful while I was growing up in Tallaght, Dublin, during the impoverished 80s. CBM is an international charity which I’ve helped with their website, and the Drop Inn is a charity which provides cheap second-hand clothes, books, etc.

I have no idea who to tag – I have no social life, and those that I would tag appear to have already been done!

back to work

I’m sitting in the office after a two week’s (it was only two weeks??) paternity leave to get the new arrival suitably acclimatised to this world.

At least, that’s the official word. We fathers all know, though, that paternity leave is about taking the brunt of the kid’s frontal assault on this domain, while the mother learns not to vent her anger every time the sprog demands feeding.

I hope the house is still standing when I get back.

I’ve learned yet again how useless a father feels for the first few weeks. Even though I spent 48 hours a day taking care of the kid, and the mother, and the kid’s brother, that somehow did not seem to be enough.

Bronwyn is a very stubborn girl, which makes some things difficult for people that need to live around her.

For example, she insists that Boann will be breastfed, as Jareth was, despite the experience that she gained from Jareth.

For me, that means holding a screaming hungry child with no way of satisfying it, whenever Bronwyn is too busy (or just not interested enough) to feed her. That can be very stressful. Especially at 3am. Especially when Jareth is also screaming for attention. Especially at 3am.

I’ve been up since 4am, which is when Jareth got me out of bed. I don’t mind that. At least I’m out of the house for a while, even if my nose is bunged up and my fingers are freezing.

Right – finally, I can get some work done without having to stop every five minutes to “hold the baby” (that’s what baby chairs are for!).

/me starts building a list of stuff that needs taking care of.

KFM watchers, I hope to be back to normal working order later on, now that Boann’s first two weeks are finished.

 

I love them, really, but don’t tell them that.

rabbit fix

Ever hear the adage “going at it like rabbits”? Well, I’m sure you can agree that even rabbits can get a bit “damaged” every now and then. Well, fear no more! New Scientist is reporting a solution to the all-too-common problem of your rabbits not breeding correctly.