All 30 entries tagged Programming

View all 125 entries tagged Programming on Warwick Blogs | View entries tagged Programming at Technorati | There are no images tagged Programming on this blog

January 21, 2011

AS3 Flash dev in Linux

It is possible to create Flash applications from Linux using only free tools. It’s also easy!

Downloading the Flex SDK

The Flex SDK contains the compiler you’ll be using. Flex is also the name of Adobe’s Flash-based UI library but you do not need to use any Flex components to use the Flex compiler.

You can find it easily by searching for “flex sdk”. At the time of writing the most recent version can be found here:

Older versions can currently be found here: You want to get the “Adobe Flex SDK” rather than the “Open Source Flex SDK” because the Adobe one comes with the debug flashplayer program you’ll be wanting to use for testing.

Using the command-line compiler mxmlc

MXML is an XML schema for laying out UI components, but you don’t need to (and don’t want to) create any mxml files to use the compiler mxmlc.

The executable is in the Flex download in flex/bin/mxmlc. The minimal usecase looks like this:


Which creates a file Main.swf. A minimal might look like this:

    import flash.display.*;

    [SWF(width = "640", height = "480")]
    public class Main extends Sprite
        public function Main ()
            graphics.drawCircle(320, 240, 100);

Generally you will want some give mxmlc some extra parameters though. I generally use these:

mxmlc -optimize=true -output $OUTPUT -static-link-runtime-shared-libraries=true --target-player=10.0.0 -compiler.debug=true

I’ve heard this doesn’t do a great job of optimising, but no reason not to include it really.

-output $OUTPUT
Specifies the filename of the SWF to be generated.

Starting with Flex 4 I get warnings if I don’t include this parameter, and in some projects the application didn’t run at all without it.

Target Flash Player 10 rather than the default Flash Player 9. Depending on the libraries you are using you can omit this.

Generates debug information so you can get line numbers from stack traces. You probably want to disable this when compiling your final release.

You might also want to be aware of:

Flex 4 has an incredibly annoying backwards incompatibility with Flex 3 where embedded fonts will silently fail and no text is rendered. This is one solution to that problem, the other is to add the parameter embedAsCFF="false" to all font embeds in your code.

-frames.frame arbitraryframename ClassName
This is used when you have a preloader. I won’t go into the details of using a preloader here, but when I compile with a preloader I use mxmlc [normal parameters] -frames.frame mainframe Main which compiles and separately.

Testing your SWF from the command line

The Adobe Flex SDK (but not the open source Flex SDK) comes with a debug version of the Flash Player that will show error messages.

It is located in flex/runtimes/player/10/lnx/flashplayer.tar.gz

Note that there should be two versions included: 10.0 and 10.1. I have not been able to get the 10.1 player to output trace statements so I use the 10.0 player for debugging.

After you’ve extracted it, you can test your application from the command line by running

flashplayer Main.swf

Improving build times

You might notice that compiling using mxmlc takes a very long time. This is because it has a lengthy startup time and doesn’t keep anything in memory for future compilations.

There is another tool in the Flex package to help solve this problem called fcsh (the Flex compiler shell). Running fcsh will give you a shell, and typing mxmlc commands into that shell will cache some results for improved speed.

Unfortunately this is a horrible way to work: you don’t want to use a specific shell for compiling, you just want a standalone command that can be run from bash, or from a makefile, or from wherever.

To solve this problem I wrote fcsh-wrap. You use it as a drop-in replacement for mxmlc and it will use black magic to speed up your compile times.

There are also similar scripts available for emacs which I have not used, and hopefully any AS3-supporting IDE will have fcsh support built-in.

Update: if for whatever reason you can’t or don’t want to use fcsh or fcsh-wrap, setting -incremental=true will give you some of the same performance benefits, although it will still be slightly slower.


Speaking of which, what AS3-supporting IDEs are there for Linux?

Obviously you don’t need an IDE because I’ve been talking about the command-line compilation toolchain. You can use any text editor you like: personally I use Sublime Text, obviously the vi/emacs fans will choose to use vi and emacs.

For Sublime Text, you want to install the ActionScript 3 package through this package manager.

For gedit, you can get AS3 syntax-highlighting support from here.

In terms of actual IDEs, there seem to be two choices. They both have a pricetag attached, but I believe they are both free for students or for development of open source projects.

IntelliJ IDEA is a Java-focused IDE, but the Ultimate edition comes with AS3 support. Comes recommended by Daniel Cassidy.
FDT is a Flash-focused IDE. Looks worth checking out but I have no personal experience of it.
FlashBuilder is Adobe’s product. It is essentially an Eclipse plugin. Correction: FlashBuilder is no longer available for Linux

Useful AS3 libraries

This isn’t Linux-specific of course, but I think it’s relevant and useful to mention these here.

I was going to go into detail about why these are useful, but for the purposes of saving time I will just give you a list:

Game frameworks:
FlashPunk (Use this one! Also use my branch, it generally has a few more bugfixes and features than the official version.)



Sound effects:

Misc. utility functions:

Statistic logging:

Embedding your Flash application in a webpage

Again not Linux-specific but someone mentioned that this would be useful information to include.

I tried to embed the cross-browser SWF embed code into this post but it screwed up. Have a look at the SWFObject documentation (the “static publishing” section): you only really need step 1. Doing steps 2 & 3 as well will let you detect whether the user has the right version of Flash installed.

Note that the SWF is embedded twice (for different browsers) so if you change its filename or its size, you need to change that in two places.

And that’s it!

I think that’s everything that you’ll find useful. I’ve been making Flash games in Linux for over a year and a half now and I’m really happy with the tools available. Hopefully you will be too!

If anything here is unclear or you’re having trouble getting it set up, leave a comment below or send me a message on Twitter.

November 02, 2010

SQL issue using GROUP BY and ORDER BY together

I am having an issue with SQL not behaving as I expect it to. (MySQL 5.1.41 although it shouldn’t be relevant.) I am hoping I’ve missed something really obvious but I just can’t see it at the moment, hence blog post.

I am dealing with submissions to a node with some data.

CREATE TABLE test (time int, nodeid int, data varchar(50));

| Field  | Type        | Null | Key | Default | Extra |
| time   | int(11)     | YES  |     | NULL    |       |
| nodeid | int(11)     | YES  |     | NULL    |       |
| data   | varchar(50) | YES  |     | NULL    |       |

time is the primary key for purposes of this explanation
nodeid is a foreign key
data is some information associated with a submission

INSERT INTO test (time, nodeid, data) VALUES (1, 1, 'ONE');
INSERT INTO test (time, nodeid, data) VALUES (2, 2, 'TWO');
INSERT INTO test (time, nodeid, data) VALUES (3, 3, 'THREE');
INSERT INTO test (time, nodeid, data) VALUES (4, 4, 'FOUR');
INSERT INTO test (time, nodeid, data) VALUES (5, 1, 'FIVE');
INSERT INTO test (time, nodeid, data) VALUES (6, 2, 'SIX');
INSERT INTO test (time, nodeid, data) VALUES (7, 1, 'SEVEN');
INSERT INTO test (time, nodeid, data) VALUES (8, 3, 'EIGHT');

| time | nodeid | data  |
|    1 |      1 | ONE   |
|    2 |      2 | TWO   |
|    3 |      3 | THREE |
|    4 |      4 | FOUR  |
|    5 |      1 | FIVE  |
|    6 |      2 | SIX   |
|    7 |      1 | SEVEN |
|    8 |      3 | EIGHT |

Node 1 has three submissions: ONE, FIVE, SEVEN
Node 2 has two submissions: TWO, SIX
Node 3 has two submissions: THREE, EIGHT
Node 4 has one submission: FOUR

We want to show the submissions, most recent first:

SELECT time, nodeid, data FROM test ORDER BY time DESC;
| time | nodeid | data  |
|    8 |      3 | EIGHT |
|    7 |      1 | SEVEN |
|    6 |      2 | SIX   |
|    5 |      1 | FIVE  |
|    4 |      4 | FOUR  |
|    3 |      3 | THREE |
|    2 |      2 | TWO   |
|    1 |      1 | ONE   |

But now we want to show only the most recent submission for each node, so we try:

SELECT time, nodeid, data FROM test GROUP BY nodeid ORDER BY time DESC;
| time | nodeid | data  |
|    4 |      4 | FOUR  |
|    3 |      3 | THREE |
|    2 |      2 | TWO   |
|    1 |      1 | ONE   |

That’s not what we want! The most recent submissions are 8, 7, 6 and 4.

Among other things I have tried:

SELECT time, nodeid, data FROM test GROUP BY nodeid ORDER BY MAX(time) DESC;

(returns first submissions ordered by last submission time)

SELECT MAX(time), nodeid, data FROM test GROUP BY nodeid ORDER BY MAX(time) DESC;

(returns first submission data but last submission time)

SELECT time, nodeid, data FROM test GROUP BY nodeid HAVING time = MAX(time) ORDER BY time DESC;

(returns only one result)

SELECT time, MAX(time) timemax, nodeid, data FROM test WHERE time = timemax GROUP BY nodeid ORDER BY time DESC;

(error: can’t use aggregation functions in WHERE clause)

Is there anyone who can help me out and suggest how to get the result set I need?

March 25, 2010

Avoiding the Visual C++ Redistributable Package

Visual Studio is a great IDE. Unfortunately the C++ compiler is horrible. Among other things, under the default settings a compiled application won’t actually run out of the box on a large number of computers.

This is because of the “Visual C++ Redistributable Package” which must be installed to run applications compiled from Visual Studio. This behaviour is nonsensical to me, but nevertheless it is there and must be worked around.

There are the solutions that I know of:

Don’t use the Visual C++ compiler

This is my solution, but then I do my development from Linux anyway. MinGW is an implementation of the GCC compiler suite for Windows, and creates executables that don’t rely on invisible Microsoft dependencies.

It may or may not be possible to use an alternative compiler from within the Visual Studio IDE. I can’t find any references for it, but I have heard (though not tested) that it is possible to set up a project that uses a makefile to build.

Code::Blocks is probably the best alternative IDE to Visual Studio. They also provide a download package which includes MinGW.

Include DLLs with executable

This is what Microsoft calls a “private assembly” and what I call “putting the DLLs in the application directory”.

The files you need will be in C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\ (or equivalent) on a computer with Visual Studio installed. As well as the three DLL files msvcm90.dll, msvcp90.dll and msvcr90.dll, you will also need the manifest file Microsoft.VC90.CRT.manifest.

Copy these files to the directory containing your executable and include them with your download.

Use an installer

I’ve not done this myself, and for a lot of the people I expect to read this, it will be overkill. So not much useful advice to give here, other than to read this blog post to see the options. Does anyone have a “how to create a ridiculously simple installer” guide?

Get end users to install the Visual C++ redistributable package

For Visual Studio 2008 SP1 this is downloadable here: other versions are similarly available from the same site.

Once installed, your application will run on that computer, but obviously this is not very convenient for the user.

Statically link the Visual C++ libraries into your executable

This is potentially problematic if you are using other libraries: all the DLLs you are using must have been compiled under the same settings. For example, the precompiled builds of SDL for Visual Studio are apparently incompatible with this. So you may have to get your hands a bit dirty to get it to work (or you may not). To do this, go to:

Project -> Properties -> Configuration Properties -> C/C++ -> Code Generation -> Runtime Library -> change to “Multi-threaded [Debug]” instead of “Multi-threaded [Debug] DLL

You need to change this in both debug mode and release mode.

Microsoft strongly recommends you not do this, as security issues cannot be patched if the library code is statically linked into your executable. (Sidenote: interestingly, putting the DLLs in the application directory doesn’t have this problem, because if you have a more recent version installed that will be used instead.)


Deployment section on MSDN for VS2008
Visual C++ blog on the subject
Blog post covering this from a more installer-y perspective
More information about static linking issues

February 06, 2010

Visual Studio + STL containers = poor performance

A fun fact that I discovered when developing my physics engine Large Polygon Collider last year: the STL containers that Visual Studio uses are by default offensively slow.

There are three solutions I know of:

1. Use another compiler such as GCC

MinGW is an implementation of the GCC compiler suite for Windows.

It may or may not be possible to use an alternative compiler from within the Visual Studio IDE. I can’t find any references for it, but I have heard (though not tested) that it is possible to set up a project that uses a makefile to build.

Code::Blocks is probably the best alternative IDE to Visual Studio. They also provide a download package which includes MinGW.

Another advantage of switching compiler is that you avoid another issue of Visual Studio: you need to ensure that someone running your application has the Visual C++ Redistributable package installed. But that is another rant for another time.

2. Use another STL implementation such as STLPort

STLPort is an alternative STL implementation. Performance-wise, it should beat the Microsoft implementation, even after fixing that as described below.

3. Change the idiotic Visual Studio behaviour

There are a couple of obscure macros that you must define to disable the runtime safety checks which cause the agonising slowness:

#define _SECURE_SCL 0

You should set these in the project settings, under pre-processor definitions (and make sure to do it in both debug and release mode). Don’t ever do it from a header file unless you’re certain that file will always be included first. So the new set of definitions should look something like this:


I also put this in an always-included header file:

#ifdef _MSC_VER
    #if( _SECURE_SCL != 0 )
        #pragma message( "Warning: _SECURE_SCL != 0. You _will_ get either slowness or runtime errors." )

        #pragma message( "Warning: _HAS_ITERATOR_DEBUGGING != 0. You _will_ get either slowness or runtime errors." )

Which will give you warnings if the macros aren’t defined.

The reason those warnings talk about runtime errors is because of the catch related to this solution:

If you link with another object/library with those macros defined differently (i.e. the default), you may get runtime errors. The gorey details as descibed in this comment are as follows:

These are the rules that you must follow when modifying _SECURE_SCL and _HAS_ITERATOR_DEBUGGING:

  1. They must be consistently defined within each translation unit (i.e. a source file and all of the header files that it includes). For example, you can’t include a Standard header, alter _SECURE_SCL or _HAS_ITERATOR_DEBUGGING, and include another Standard header.
  2. Translation units that are linked into the same binary (executable or DLL) must have identical definitions of _SECURE_SCL and _HAS_ITERATOR_DEBUGGING. For example, linking one .obj with _SECURE_SCL==0 to another .obj with _SECURE_SCL==1 into an .exe or .dll is bad. For another example, linking several .obj files with _SECURE_SCL==0 into a .lib, and then linking an .obj with _SECURE_SCL==1 against that .lib into an .exe or .dll is bad.
  3. Binaries that pass STL objects between each other must have identical definitions of _SECURE_SCL and _HAS_ITERATOR_DEBUGGING. (They must also be both retail or both debug.)
My (not necessarily 100% accurate) summary of those rules:

You must have the same settings across your entire project and in any libraries you statically link to. Dynamically linked libraries should be fine unless they use STL containers in their public API.

The error message you get if these rules are broken will be beautifully unhelpful and even misleading: so be on your toes.


MSDN page on checked iterators and _SECURE_SCL
MSDN page on debug iterators and _HAS_ITERATOR_DEBUGGING
Blog post discussing the implementation of _SECURE_SCL and _HAS_ITERATOR_DEBUGGING. Comments discuss the runtime error issue.
Video about STL Iterator Debugging and Secure SCL

December 19, 2009

Topsy Turvy

Writing about web page

Last weekend I made the game Topsy Turvy for Ludum Dare 16. It’s a one-button platformer with gravity switching, and it’s HARD. Here’s the post-mortem:

What went right:

  • The concept. I’ve had the idea in my head for a while, and I’m very glad that I used the competition as an excuse to make it rather than forcing myself to think of a game idea inspired by the theme. And the game ended up pretty much how I imagined, so that’s good too.
  • Inkscape as level editor. AS3 has some rather lovely XML-parsing abilities, so reading the SVG file was surprisingly simple. It’s very much hard-coded to the specific output that (my copy of?) Inkscape generates, but it should be fairly easy to fix if it ever stops working.
  • Abstract graphics. I am not an artist, so I decided to save time and just draw everything out of lines. I think the results fit the game fairly well, even if they’re not actually good.

What went wrong:

  • The goal. I added the collectables to provide an incentive to get to the more difficult areas and also as extra landmarks for getting your bearings. Unfortunately, with time running out and no win conditions implemented, I made the decision that you would win if you could collect all of them. In hindsight, I should probably have added a level exit instead.
  • Difficulty. The game is ridiculously hard. I knew I wanted to have some areas which would be tricky to get to, as a challenge, but when the goal became “collect everything”, those areas suddenly became non-optional.
  • First day motivation. I wanted to have all the basic game mechanics done by the halfway point, but I was just procrastinating like crazy. I’d come to the conclusion that it just wasn’t technically interesting enough to hold my attention, but then on Sunday morning I added death and respawning. Suddenly my game idea was in front of me and I could start constructing devious routes through the level, and I spent the rest of the day excited by it.
  • The name. It actually changed name twice between starting and submitting, and I’m still not really happy. Currently thinking about maybe renaming it “Jump-Zap-Flip”.

Lessons learnt:

  • Get death/respawn implemented earlier in future
  • Think of a win condition as part of the design process
  • Don’t make ridiculously hard challenges required to complete the game

May 16, 2008


April 24: Today I completed my project report.
April 25: Today I helped write and record a short audiodrama.
April 26: Today I went round David’s with James W and played Worms.
April 27: Today Hennell told me how he accidentally got the internet to send someone thousands of dollars worth of flowers.
April 28: Today I learnt how to write games in Flash.
April 29: Today I mocked Tanya for playing Minesweeper for hours, and then even more when she displayed a total lack of understanding of the basic game mechanics.
April 30: Today I spent hours looking for one stupid little bug.
May 1: Today I watched Once Upon a Time in Mexico with Tanya and she loved it.
May 2: Today Jon and Ellie came round for a games night.
May 3: Today I started making a very simple Flash game.
May 4: Today our house was invaded by Christians.
May 5: Today I did not much of anything.
May 6: Today I juggled in the beautiful weather.
May 7: Today I was busy with revision lectures, discussing fourth year project ideas, a strange film and a console social. But none of it was memorable enough to mention here.
May 8: Today I went to the IGDA meeting in Leamington, where there was cheap alcohol.
May 9: Today I began making yet another physics-based game.
May 10: Today the game began to vaguely look like a game.
May 11: Today the WGD library conspired against us in every way imaginable, and Jen had her birthday party.
May 12: Today Leigh and I decided that we needed to just pick a project idea for our fourth year group project, and that as we were the ones doing the picking, we should do an awesome 3D physics engine with pluggable components.
May 13: Today we found some more people for our group, who unsurprisingly weren’t that keen on the idea of doing a hardcore physics engine.
May 14: Today the internet went down and it made everything sad.
May 15: Today I began revision.
May 16: Today I updated this for the first time in almost 5 months.

Vaguely inspired by a scene from Into the Wild, which I found to be an amazing and beautiful film.

December 12, 2007

One month of good, bad and ugly

The Good: (all programming stuff, apparently)

  • Me and Sam made a buggy game called Clockspider for the 48 Hour Game Making Competition. And then Sam rewrote it to be way less buggy (zip file with exe).
  • I made another game that’s still a work-in-progress, but that I think has loads of potential. It’ll bend your mind! (Java applet). Mostly, it just needs more levels and more stuff to go in the levels.

The Bad:

  • I had to do a progress report for my third year project, which at that point was behind schedule and still seemed hopelessly ambitious. It took ages and was generally demotivating.
  • My student card (used to access the Computer Science building) and my bank card (used to access my money) were, for different reasons, cancelled. Both are now sorted out, however.
  • I still haven’t gotten my loan, although hopefully it’s now working its way slowly through the system towards me.
  • There was an essay that I found myself totally incapable of doing. That made me feel useless and pathetic, and I’m choosing not to think about the fact that since I didn’t do it, there are two others to do for the start of next term, instead of one.

The Ugly:

  • I got some poi for Christmas. Poi, as we all know, are girly and rubbish unless set on fire and spinning very quickly. The problem is that they’re also kinda fun.
  • I played Singstar at a Game Design social.
  • I’ve been asked to be a flowergirl at Jon and Ellie’s wedding.

October 05, 2007

Extreme Busyness

I am far too busy to write this entry, since I really should be in bed sleeping, so that tomorrow I can be up at/before 8:00 in the morning for the third day in a row.

But the world needs to know of my horrific struggles (and apparently I need to further avoid being productive and/or refuse to get sensible amounts of sleep):

  • By the weekend of the 13th, I need to have a complete Java game framework and an absolute beginner’s guide to programming (with games) written. If I don’t, then I let Warwick Game Design down and our first event is a terrible flop and it will all be my fault. P.S. join Warwick Game Design! We’re going to have an introduction to game making event and other cool stuff very soon, and it definitely won’t be a flop.
  • Within a week, the project specification for my horribly ambitious third year project needs to have been started, finished, and shown to my supervisor who is quite nice but I think already has a bad (but probably fair) impression of my work ethic.
  • I have an Assassins’ Guild website to make but the old webmaster let the site stop working completely and has now disappeared off the face of the earth. P.S. join the Assassins’ Guild—it’s great fun and I have so many stories from it. The idea is that you get assigned a target and are given their name, their course and where they live. Then you track them down and kill them with a water pistol or some more creative weaponry if you so choose. Of course, you have someone targeting you at the same time, so watch out for anyone looking suspicious.
  • I have a house full of people which means that I’m incapable of being remotely productive while I’m there.
  • I’ve bought a bike, which my leg muscles are already attempting to kill me for.
  • There’s no nearby supermarket and I have yet to even have the time to go shopping anyway.
  • I have been among the many caught out by the incompetence of the student loans company, by which I mean that I realised yesterday that I never applied for mine. I’m also very close to my overdraft limit, which temporarily reduced itself for no good reason at all.
  • I haven’t even had time to do any juggling other than at the juggling society meeting. And I’ve already lost one of my new juggling balls. P.S. join the Juggling Society! We can teach you many very cool tricks.
  • My laptop arrived, which you’d expect to be a good thing, but when I first booted into Windows, I got this screen. Of course, that wasn’t really so surprising. Ubuntu got hit by a particularly nasty bug, but thankfully someone else had found and posted a solution for me, so it didn’t require hours of work to fix.

May 25, 2007

My programming projects

I have several programming projects at the moment that I could work on:

Kraken prototype

There’s a game-making competition on the theme of Ocean Odyssey that VGDSoc is involved in. One of the ideas suggested was a game where you play as the Kraken, destroying passing ships.

I liked the idea, but wasn’t sure controlling a Kraken was feasible – tentacles are fairly deformable, and that’s always seemed quite complicated. So I made this prototype and decided that not only was it feasible, it was also damn cool.

Unfortunately, the competition needs to be done in XNA, which being a Microsoft thing, won’t run on Linux. Also, the competition culminates in a 48 hour session which is right in the middle of my exams…

Operation Meltdown

I want to polish off one of my games before the end of term, and since Operation Meltdown works (although isn’t yet very game-like) and Blobber was way too ambitious and is full of bugs, the decision was quite easy.

I finally got it to the stage where it contained the bare essentials of a game the other day. Then I packed it into a JAR file and it broke. Apparently you can’t read from a directory in a JAR file the same way you’d read a directory on the filesystem, so my code to load all the images in a directory broke. Okay, so I thought, I’ll do a check for that and get the directory listing another way. And I did, and it worked, so I tried uploading it.

And then it broke again when you ran it as an applet. The code was opening the JAR file containing itself and reading through the entries, but you can’t do that from an unsigned applet because you can’t read from the local filesystem. In the end, I just removed the applet version from the website; I’m not sure anybody would want to play it in applet form anyway.

Javascript for Mark

This one has the benefit of me getting paid if I do it. But it wouldn’t be as interesting as some of the alternatives, and it involves Javascript and maybe some Ajax too. I should probably do it just because I said I would ages ago and never did, though.

ezConvert for phpBB 3.0

With the release of RC1 of phpBB 3.0, I took a look at the conversion system. It assumes you have database access to the forums you’re converting from, so I’d probably have to bend it quite a bit to get it to convert from ezBoard.

The alternative is to keep it as a module in the Admin Control Panel, which is probably what I’ll do. But even though it wouldn’t require a total rewrite, I’d want to pretty it up before releasing it like that, so either way would be a fair amount of work. Probably not something I do before the exams, then.


The Web 2.0 start-ups must be mocked! And they must be mocked at the very latest by next April Fools Day.


Blobber is retired from development, probably until I start my third year project which will probably be a physics simulator. Because after failing to make Blobber work, trying something more complicated is the ideal plan…

May 17, 2007

I like numbers which don't have an odd prime factor

I must have walked more than 6 miles last Friday – to and from campus twice with heavy things like my PS2 and my juggling stuff, and into Earlsdon for Jen’s party and back (and I later dreamt that I walked there and back again to climb a tree). And also spent 3 or 4 hours in the middle not being able to sit down, while teaching people to juggle and falling off a unicycle (not both at the same time – falling off a unicycle requires both hands for flailing purposes).

The party was good. There were some great scenarios, like “shoes tell lies and socks tell the truth” and “boys are friendly and caring; girls are cold and mean”. And I had fun making a tiny card out of paper (with an envelope too) after Jen commented that several of her cards had the same general image on them. Of course, talented artist that I am, my card design was obviously greatly superior.

I spent a lot of Sunday trying to fix my Gallery installation after what should have been a simple 2 minute change instead broke everything. Wanting to move the directory it was installed in, I should have disabled the URL Rewrite module before doing anything. Like it said in the FAQ which I didn’t read until too late. And so, wanting to avoid having to undo and redo something exceedingly simple, I made my life ten times harder by ploughing on anyway.

It also didn’t help that I was confusing the data directory and the code directory. I ended up installing a newer version and pointing it at the older version’s data, but it seemed to get confused by the URL Rewrite module, which refused to work, and stopped everything else from working also. The moral of this story is to read the documentation before you start doing something, not during.

A lot of today has been spent reading this thread in its entirety. Time well spent.

New blog location

After a hiatus of several years, I’ve started blogging again at

My website

Looking for more information about Alan Hazelden? Follow me on Twitter or go to my website.

February 2023

Mo Tu We Th Fr Sa Su
Jan |  Today  |
      1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28               

Search this blog

Blog archive


Most recent comments

  • Knife game: No actual cutlery involved. A single player starts with the "knife" by clasping his or h… by Noyb on this entry
  • My friends and I have taken to this one very silly game lately that's probably altogether too insula… by Ian S. on this entry
  • Great, thanks for those! That first one I would know by the name of Wink Murder, usually with a sing… by on this entry
  • I don't know the names for these games, so I'll make them up: Sniper. Randomly choose who is the sin… by zep on this entry
  • I recommend checking out Project Sprouts from Luke Bayes. It makes obtaining and configuring the fla… by Duncan Beevers on this entry


RSS2.0 Atom
Not signed in
Sign in

Powered by BlogBuilder