A post in a blog

<![CDATA[I rarely mention other blog posts, but this one caught my attention:

Just Ideas.

The quote that I specifically liked was:

“A kid that dies from a bad case of diarrhea in the third world would pleasure 60 year-olds with heart disease for the chance to become a 60 year-old with heart disease getting pleasured by a young boy.”

humour, humor]]>


Silly Linux

<![CDATA[Sometimes Linux is downright counter-intuitive. I have SSH command line access to my server and I wanted to rename a directory. Now I know that cp is used to copy files so I try rn. No luck. So I think perhaps they are being nice so I try rename. This seems to work. But the file is not actually renamed. When I type the command on its on it says call: rename from to files. Nice but not useful. After a quick search I find out how to do it: you need the move command. Well to be precise the mv command. After a moment’s thought it does make sense but it is not intuitive…

Unix, Linux]]>


Aber, Aber, Aber…

<![CDATA[I went with Julia to Aberystwyth to university on Saturday. Six hour train journey. Aberystwyth is nice except for the one hill the university sits on top of.

university, Aberystwyth]]>


Pimsleur’s German steps up a notch…

<![CDATA[Well I'm now on unit 3 of German II (i.e. the 33rd lesson in total) and it's definitely moved up a gear. It has finally mentioned "du" the informal version of you (which even if you never say it you certainly need to recognise) and nearly every thing you say has "interesting" grammar as well as new vocabulary

(By interesting I mean things like subordinate clauses and modal verbs which play with word order).

And of course I have to sing praise to Pimsleur again… which of course I always do since it really is amazing. 🙂

German, Pimsleur]]>


Sonic Mega Collection Plus

<![CDATA[I found a cool little PS2 game recently, Sonic Mega Collection Plus. It's a collection of Sonic games from the Mega Drive/Genesis and Game Gear, including Sonic The Hedgehog (for each), Sonic 2, Sonic 3, Sonic & Knuckles, Sonic Spinball, Sonic Chaos, Sonic Blast, Sonic Drift, Sonic 3D and Dr. Robotoniks Mean Bean Machine (for both).

For anyone who likes Sonic it is well worth getting. There are a few notes first though.

It does include Knuckles in Sonic 2 and Sonic 3 & Knuckles, but they must be unlocked.
The Game Gear games are single player (emulating two Game Gears that could link up would have been fun).
The unlockable non-Sonic games are interesting but not really worth going to the hassle to unlock.

It would have been nice to have the Master System versions of Sonic and Sonic 2, but you can't have everything.

Sonic, Sonic the Hedgehog, Knuckles, Tails, Sega, games, video games, Dr Robotnik]]>

Languages, PHP, Programming, Technology, Web Programming

Playlists in Windows Media Player

<![CDATA[Windows Media Player will only play .m3u playlists two levels deep…

You can include a playlist inside another playlist and it copes fine. If you include a playlistsinside a playlist inside a playlist, the innermost one doesn't get played.

Why do I tell you this? I decided to try and create a Pimsleur-style CD for Finnish. But to save on effort and increase modularity everything is done in bits and joined together with .m3u files. Since Windows Media Player can't cope with the nesting though, I had to write a PHP to dump them all in one file (I'm expecting to hit a limit on the amount of songs in a playlist soon).

By the way a .m3u (playlist) is really complicated… it's a list of URLs seperated by newlines…

music, Pimsleur, Finnish, Windows Media Player, playlists, m3u]]>


Code generator update

<![CDATA[The PHP Code Generator now handles docblock style comments properly as well as method keywords.

For static, abstract and final keywords, if one is present in any definition of a method it will in the output. For visibility keywords the mthod will have the “most public” specified.

See my previous code generator post for more info.

PHP5, OOP, code generation, design patterns, Singleton]]>


Pimsleur Russian

<![CDATA[Pimsleur really does rule. After trying the first lesson of Russian, a language I have no previous experience in, I can confidently say Pimsleur is great. If you want to learn another language find out if your local library has the Pimsleur course in it first.

Actually I think Pimsleur should make the first lesson of all the courses freely available on their website or something. I really think that people are skeptical about how useful they could be and a lot would be convinced after trying them.

On a rather insignificant note, I think Russian is easier to pronounce in general than German.

Russian, Pimsleur]]>


Antique SNES?

<![CDATA[I was in a computer game shop today. It's own of those places that does trades and has a lot of preowned stock. Much to my surprise they have a second hand Super Nintendo with one game for the same price as a GameCube with 4 games! Admittedly the one game was Legend of Zelda but still…

Zelda, Nintendo, SNES, GameCube, games, video games]]>


PHP code generator online

<![CDATA[I've just finished a very early version of the PHP code generator I mentioned a while ago. The code for it is rather messy at the moment so I'm not releasing it, but a web form is available to demonstrate it:

PHP Code Generator

At a simple level it takes class fragments you define and includes them in the file. The only fragment defined at the moment is Singleton. To include it you would use:

//cg fragment=Singleton&className=MyClass

Running the generator on just that basically just returns the Singleton fragment with the specified class name. The clever part is it correctly assembles code based on multiple fragments as well as using the code in the file itself. This means if you define MyClass in the file and give it some other methods, these will remain in the generated code.

You can also add code to methods defined in fragments and they still remain, providing you follow a few rules. Only certain fragments will allow code to be added to their methods – they will have //Code Start and //Code End lines. Anything you add between these will remain – all other code will be stripped when the code regenerated.


Any comments between methods will be removed – with the exception of docblock comments. Comments inside methods are treated like any normal line – they must be inside //Code Start ... //Code End.

At the moment support of visibility keywords and static is a little dodgy. The method should have the properties in it’s first definition.

A methods parameters however will be the same as the last definition. For example the Singleton defines a constructor with no parameters. If you then give it parameters it will keep them.

At the moment the opening brace for a method must be on the same line as the function declaration (i.e. it doesn’t support “one true brace”). This should be easy to fix, but it means methods must be defined like:

function myFunction() {

A little bit of cleverness

Although I’m not going to reveal exactly how just yet, there is a small bit of markup supported in the fragments allowing bits to be dynamically defined. To see this generate a Singleton and then add a parameter to it’s constructor (and regenerate). The Init method magically has the same parameters.


This is very early and very untested with regards to complicated scripts. Any odd behaviour, feel free to let me know. 🙂

PHP5, OOP, code generation]]>