leynos: (Default)
I've started journalling again over at Ello.

Since not everyone has an Ello account (invites available from me upon request), I have also provided an Atom feed and a Dreamwidth mirror.

For anyone using Ello, the tooling I used to set up the feed is available here.
leynos: (Default)
I can't type Vee Five (V.V) without it looking like a weird emoticon, hence the katakana.

V.V is an historically significant game for the following reason: Batsugun is the progenitor of the modern danmaku shoot 'em up, and V.V is effectively a rough cut of Batsugun. This is proto-danmaku.

It's quite fascinating to see Toaplan play with the ideas that would come to shape the shooting genre for the next twenty years. It's not just Batsugun. Shades of what would go on to become DonPachi are clearly evident, not least in the primary weapon, which can be switched between a beam and spread shot. The slightly awkward implementation of this transition owes more to Aleste than DonPachi, but I like being able to trace clear routes of progression down the genealogy of the games I play.

Technically, it works. Rather well at that. The Mega Drive version is the closest thing to bullet hell you're going to find on the Mega Drive, and the developers have clearly thought about where they can push things and where not to, so that they play to the console's strengths. I'm looking forwards to playing the arcade version for comparison sake.

It's one of those late Tangen published games, so sadly it's a bit on the pricy side, but I'm sure that won't stop anyone.
leynos: (Default)
Learning two languages simultaneously sometimes gets one confused. The way Ruby and JavaScript treat function declarations is an interesting example:Read more... )
leynos: (Default)
I've made some UI tweaks to the demo message board at http://bbs.df12.net/ following feedback from Angus, Bruce and Scottie.

I'd still like to know what people think of the underlying idea tho. The plan is to have something as easy to set up as an instance of phpBB that will act as a server for a native clients variety of computer platforms and devices. What you see here is a client implemented in JavaScript, but that client could be ObjectiveC running on an iPhone, C++/Qt on a Linux box or .Net on Windows. I also intend to produce a simplified html interface for visually impaired users and for mobile phones.

With regards the threadmap, the rationale behind that is to try and replicate the sprawling discussions that you'd see on Usenet but never really happen on message boards. You tend to either get phpBB style linear threads where deviating from a single thread of discussion is actively discouraged, or Reddit/Slashdot style nested posts which get awkward after a small number of replies and tend to be best suited to short lived discussions.

Of course, there are still a lot of optimizations to be made. Right now there's no support for incremental thread updates, which would be crucial to my goal of 'Usenet as a web service'.

Other facets still need some hammering out. For example, post deletion—I'm thinking of having users able to mark a post as deleted (if the moderators of a particular board have that feature enabled), but only moderators will be able to delete a post or thread outright (or recursively 'prune' part of a thread). Again, I'm keen to hear what you think.
leynos: (Default)
I can't really blame Internet Explorer for being strict about JavaScript. I would too. Firefox on the other hand seems amazingly lax about malformed script. I'm actually going to side with Microsoft here. A run of JSLint (handy command line version: http://whereisandy.com/code/jslint/) on main.js reveals a slew of embarrassing errors—missing semicolons, reserved words used as hash keys, etc. IE is now happy with it.

The BBCode parser I borrowed required similar treatment. I may well return this to its author with the applied tweaks once I have also written some tests for it (an excuse to learn a JavaScript unit test framework).

On the other hand, I can't really forgive IE8's insulting mangling of CSS. It's fixed now. But srsly, what in Zod's name is this all about:

<meta http-equiv="X-UA-Compatible" content="IE=edge">?

(From HTML5 Boilerplate)

I'm told that it still doesn't work in IE9, and I despair.

On the gripping hand, the demo version of my site is now up at: http://bbs.df12.net/ hosted on my funky new cheap as chips VPS. (I can't even begin to pretend that I can afford Heroku's cheapest paid hosting).

And you can now create threads! (Tho if you created an account before, you'll need to re-register as this is a different database).
leynos: (Default)
I've done a little bit more work on my client/server web forum, and I'd like to hear your thoughts.

A copy is running online at: http://stark-sunrise-626.heroku.com/

You can see the source code at: https://github.com/leynos/converse

If you can trivially break it, please let me know.

What is it

The idea is to ultimately build a web forum with proper separation of concerns between the client and server. The initial implementation uses a client written in Javascript and a server in Ruby, but any conceivable combination should be possible (a native client for Android and iOS would seem the next logical step). The two talk using a pseudo-RESTful API (pseudo, because it uses JSON instead of XML).

Right now, all that works is a single thread view. The top pane is the thread map and the bottom pane is the messages. Ultimately, there will be multiple boards with multiple posts, but this is the prototype as it exists just now.

Some bits you may (or may not) care about

The server is written in Ruby using Sinatra, with a CouchDB database. All of these elements are new to me, so I'm learning this as I go along. Similarly, I'm a novice at JavaScript in many ways.

The thread map is drawn using the cross-browser Raphael library, so it should work in IE as well (it did last time I tested it).
leynos: (Default)
In January 2010, four reporters from America's National Public Radio bought a share in one of the mortgage backed securities that came to be known as a toxic asset. They did this to give their listeners a greater understanding of the causes of the credit crunch.


The headline video gives a potted history of the housing crisis and the decline that ultimately lead to the death of their purchased asset.

The following link lets you see on a month by month basis, beginning December 2006 up to the collapse of the asset in September 2010, how the failure of people's mortgages ultimately led to the failure of the financial instruments that banks had over invested in in the years leading up to the credit crunch.


Over the course of the asset's decline, the reporters spoke to various people who had contributed to the asset's initial value and ultimate collapse. The story encompasses tales of optimism, sorrow, greed and fraud; illustrating the real complexity of the whole appalling affair.
leynos: (Default)
Today I've been trying to get my head around CouchDB. And yes, when you finally understand it, it is alarmingly simple.

CouchDB is one of those newfangled NoSQL databases. Specifically, it's a document store. This initially left me scratching my head, since it has no tables and no schemas. Records in CouchDB are a collection of arbitrary key value pairs.

The key to understanding how to make use of this all would appear to be views. Views are analogous to indices in an RDBMS. They are composed of two JavaScript functions—map and reduce. This is already getting into scary functional programming territory and you can see me glancing around for the exit at this point.

It's actually not that bad. Map takes a document as its parameter and emits a key value pair. This pair is then inserted as a leaf in a search tree. (Specifically a B-Tree). Every time you create or update a document it is passed to the various view functions to update these views.

The important thing here (the bit that I took my time getting my head around) is that the key in this pair need not be unique within the view. You can also then query these views by key. This gives you your entity relationships.

The reduce part of the view gives you the aggregate functionality of an RDBMS. The number of employees grouped by city, to use the archetypical example. Reduce takes a collection of values and returns a single value. These values are then stored in the branches of the search tree to accelerate future aggregate queries on slices of the keyspace.

There are also validation and transformational functions, but those are a bit more straight forward. What I hope I've noted down here is the answer to the question I was asking myself this morning, "How are you supposed to use a NoSQL database?"
leynos: (Default)
Michael Eng sent me an interesting link yesterday to a fledgeling web site which has set about the task of cataloguing the various locations around the world that may be of interest to the travelling videogamer. The fact that most of these so far are in Japan says a lot, but isn't surprising.

It's tempting to say that one cannot be a videogames otaku without to a certain extent also being a weeaboo, but the same could be said of many interests. It's pretty hard to be a serious doll collector, for example, without your interests becoming inseparably linked with Japanophilia.

There just seems to be more people in Japan willing to take that extra step from making their interest a personal thing to something overtly public. Compare Game Focus in London with Super Potato in Tokyo:

[Game Focus] [Super Potato]

The two are directly comparable I believe. Game Focus is situated in the closest thing to Akihabara that the UK has and as far as shopping experience goes, they are among the best you'll find within these shores. That being said it's hard to imagine Game Focus being well known even in the UK outside of Greater London.

It's not just confined to retail—I can't really imagine an 8-bit cafe or a chiptune bar with a Dreamcast dev kit taking pride of place being commercially viable propositions in the UK.

The number of British arcades worth the name has dwindled dangerously close to zero. They still exist but the are generally nothing to be proud of, whereas pride seems to be the driving motivator behind many Japanese game centres.

It's not that I have an animosity towards my own country but it just seems to me that it's pretty hard to be interested in games without Japanese gaming culture comprising a large part of that interest.
leynos: (Default)
Seven years ago, Irem released a 3D platform adventure on the PS2 named Disaster Report (I'll call it Disaster Report, its US name, since that's the version I played but you may know it as Zettai Zetsumei Toshi or the name under which it was released in the UK, SOS: The Final Escape). What made Disaster Report special was that it was a survival horror game without monsters or guns. You see, Disaster Report is set on an artificial island which has been struck by an earthquake and is now sinking. Playing the role of a young reporter newly arrived on the island, your objective is to reach safe ground, navigating collapsing buildings and avoiding flooding, whilst avoiding death by dehydration. Along the way you partake in a little investigative journalism, exposing politically motivated cost-cutting which has resulted in sub-standard building practices on the island.

As a game in and of itself, it's difficult to fault Disaster Report. However, it was sadly let down somewhat by the limitations of the PS2's 3D hardware. Not overly so, but frequently enough that you felt that the developers had been straining to deliver their original intentions.

Two sequels later, and Irem are delivering a new iteration for the PS3:

(Best viewed at 720p). Hopefully, the above demonstrates why I might be interested in this follow-up.

leynos: (Default)
If you're still not clear on what credit default swaps or collateralized debt obligations are, or why these are bad things, now's your chance to find out:


You've probably heard of the Khan Academy by now, but I'll just chip in and give it my recommendation. It's a set of accessible lectures on maths, science and economics delivered via YouTube. They cover roughly from early high school through to early University (there's a primary school level maths course too though).

I've been working through the biology course, as having studied physics and chemistry at school, that's an area where my knowledge is sadly lacking.
leynos: (Cooking Mama)
Recipé time again. This is a synthesis of a number of different recipés for this dish I found dotted around the web. I've tried it several times and it works really well (as I'm sure Ruth will happilly testify). Especially if one is feeling under the weather.

Soupe à L'oignon

Serves 2, Preparation time: 60 mins (approx)


  • Two saucepans (one with a lid)
  • Knives
  • Measuring jug


  • 1 kg of medium sized onions
  • 2 OXO cubes disolved in 1/2 litre of hot water
  • 1/4 litre of white wine
  • 3 cloves of garlic, finely chopped
  • 1 bay leaf
  • 15g butter (approx)
  • 2 tbl spoons olive oil
  • salt
  • pepper
  • brandy/cognac
  • Accompanyment:

    • Two part-bake rolls
    • Grated emental cheese
    • Worcestershire sauce


  1. Peel and cut the onions in half, then cut the halves into strips roughly 8mm wide
  2. In one of the sauce pans, heat the olive oil and butter until melted
  3. Add the onions to the oil, season with salt & pepper and cover.
  4. In the other saucepan, bring the stock and white wine to the boil along with the garlic and bay leaf
  5. Add around 35 ml of brandy to each pan
  6. Turn the hob under the stock down to low, but keep the other one on medium/high.
  7. Stir the onions thoroughly every 5 mins, re-covering afterwords. Add a little water if they start to stick, but not too much. The aim here is to part fry, part steam the onions.
  8. When the onions have clarifed and browned slightly, add the contents of the other saucepan.
  9. Turn off the heat, re-cover and let the flavours combine for a few minutes.
  10. Heat the part-bake rolls according to instructions.
  11. When they are ready, split them in half and cover the open halves with emental, seasoned with a few drops of Worcestershire sauce.
  12. Return these to the oven until the cheese has melted.
  13. Serve.
leynos: (Default)
I've been in the process over the past few months (very sporadically, I might add) of writing a project planning tool. It still doesn't do much yet, but it's at the stage now where it will produce a simple functional Gantt chart (with an NSDate based model and view). (There are also some ugly drawing glitches).

I'm initially targeting Linux (using GNUstep), but ultimately, I aim to maintain versions for Windows and Mac as well.

You can download the source from http://bitbucket.org/leynos/gantt.app

Anyway, I'm kind of looking for some input as to where I should take this application. I have some ideas, but I'm not really sure which to give priority.

Firstly, I guess, would such a tool be of use to anyone?

I want to create something that makes time allocation easy and something people can do without thinking about too much.

If you don't use a project management tool for planning your projects at present, what is it about current PM tools that you find gets in the way or makes them unsuitable?

Stuff I hope to include would be resources (with address book integration), deadlines, dependencies, estimates and actuals, burndowns, kanban, sprints (however those might be represented),
weighting and chronological notes.

I'd also like to eventually include client/server based collaboration and plugin based integration with various issue tracking systems. This all sounds a bit ambitious just now, but you've got to start somewhere.

Anyway, looking forward to hearing your thoughts on this.


Jul. 17th, 2010 01:03 pm
leynos: (Default)
Spent 20 mins in the O2 shop trying out a Samsung Wave. I know it's not an iPhone, but it's a good £300 cheaper, and it does most of the iPhone type things that I need. The screen is also quite beautiful and very readable - I downloaded an eBook of Dracula to test that out.

I'll wait and see if a Bada SDK for Linux makes an appearance. Ideally, Samsung should make a phone with the same form factor running Android, but Bada does seem to hold its own as a phone OS.
leynos: (Default)
Right, I've seen too many Makefile tutorials that were clearly written by people who have been smoking copious amounts of skunk, so I'm going to post this in the hope that it will make life easier for anyone else writing a small C or C++ project.

It works with GNU make, but I'm sure most BSD people will already have their shit together anyway. Strangely, most of this came from the pmake FAQ, specifically, this chapter.

Here goes:

CFLAGS          = -Wall -I/usr/local/include
CPPFLAGS        =
LIBS            = -lfoo -L/usr/local/lib

PROGRAM         = myapp
OBJS            = main.o bar.o baz.o qux.o etc.o

$(PROGRAM)      : $(OBJS) 
    $(CXX) $(OBJS) $(CXXFLAGS) $(LIBS) -o $(PROGRAM)

include Dependencies.mk

Dependencies.mk :
        $(CXX) -MM *.cpp > Dependencies.mk

.PHONY          : clean
clean           :
    rm -f $(PROGRAM) *.o

Anything in bold and italic means "your stuff goes here", so your executable name goes under "PROGRAM" and the names of your object files go under "OBJ", corresponding to the names of your object source files.

Stuff in "CFLAGS" applies to C source only, "CXXFLAGS" applies to C++ only and "CPPFLAGS" is for preprocessor flags.

For C source only, of course, you would use "$(CC)" instead of "$(CXX)"

I anticipate that, for the C/C++ stuff at any rate, I won't have to make any real changes to this Makefile. At least until I start having multiple source directories.

Cheers to [livejournal.com profile] brucec for corrections and [livejournal.com profile] spacelem for the suggestion of using gcc -MM.
leynos: (Default)
Apparently, Raquel Welch recently wrote a rather negative opinion piece in the Telegraph about the oral contraceptive, which is 50 years old this week. I'll leave it to a a couple of readers of the Guardian to explain what the pill actually meant (and means) for women:

"It was worth it! Reproductive choice, the power to say no in a relationship, the right to choose. An end to the shame and lifelong burden of an unwanted pregnancy, including poverty, secret adoptions, abortions, unnecessary early deaths. I will never forget my mother, born in 1925, tell of her anguish every month of her married life waiting to find out it she had made it through another 28 days unscathed. She had four children that she did not want. For those who want children, the possibility of timing them. The family of choice, not necessity."

The fantasy of moral decline is just that. One cannot deny human nature. What the pill brought about was a measure of equality that has been missing for the duration of history.

"There was always promiscuity - but it was the men who had all the fun. Now women, for the first time in human history, get to call the shots."
leynos: (Default)
In a year's time, pretty much every mid-level and upwards mobile phone will be running a Unix-derived or Unix-like OS. We've got the iPhone OS and Android already, based on BSD and Linux respectively. Then there's Nokia/Intel's MeeGo, Samsung's Bada and HP/Palm's WebOS, all based on Linux. And Research In Motion, the makers of Blackberry, have acquired the realtime UNIX vendor QNX.

If, ten years ago, you'd told me I could not only buy an off-the-shelf UNIX based palmtop, but that I'd be spoilt for choice, I'd have assumed you were daydreaming.
leynos: (Cooking Mama)
Well, several secrets actually.

The key to the texture is onions. Lots of them. Chopped up into very small pieces and shallow fried in a saucepan with the lid on over a low heat for 40 minutes or there-abouts. Allow at least one medium sized onion per serving, more if you can.

I stopped using cream in my kormas some time ago. I found that the best combination is five desert spoonfuls of Lidl low fat (1.5%) yoghurt and one tin of coconut milk. This should yield enough korma for three hungry geeks. Don't pay more than a pound for a tin of coconut milk—the best place to get it as at an Asian grocers, e.g. Accha on Morrison Street.

To give a korma a liitle "bite", a worthwhile addition is kewra water. This can also be had from an Asian grocers. Use about a tablespoonful. Failing that, a tablespoonful of brandy will do at a pinch.

I haven't gotten around to trying to make Korma paste from scratch, but I find that Patak's Korma Paste produces great results. Hey, even the mockney pratt uses it, so they must be doing something right.

Any more suggestions are welcome.
leynos: (Cooking Mama)
Ruth had some guests over yesterday whom we owed dinner, so I got to try out some of my cooking experiments on them (mwahahah). Since one of the guests is vegetarian, we figured it would be easier just to cook one dish instead of two. For some reason, I thought it would be a good idea to attempt making pasta from scratch. So of course, I turned to Google which yielded this suggestion. Sounds easy enough I thought. Of course, I would also need some vegetarian pasta dough, and a sauce of some kind to go with it. I suggested carrot and orange soup as a starter, which everyone liked the sound of.

The shitake mushrooms came from Thai@Haymarket, but pretty much any Chinese/south east Asian supermarket will have them. The rest of the vegetables came from Tattie Shaws, undoubtedly the best green grocers in Edinburgh. A helpful gentleman had recommended Valvona & Crolla's double zero pasta flour but, sadly, they were out, so I had to make do with Allinsons Very Strong bread flour. Valvona & Crolla were also a bit limited in their selection of vegetarian cheese (no romano), so I went with a light Scottish dairy cheese for the sauce instead.

For making ravioli, I picked up a ravioli press from Lakeland.

I try to avoid kitchen gadgets to begin with, as I like to learn how things are done by hand first, but in this instance, I was grateful for the speed afforded by an electric whisk for kneading the dough, as it took me a few goes to get the ravioli out of the press correctly. By the third try, the press was turning out perfect little pasta parcels. It seems the answer is to cover the thing in flour. Actually, it can't be stressed strongly enough how essential a flour duster is for this task.

As a quantity guide, the linked pasta dough recipe makes enough for one ravioli tray and one tray does two people.

This was also my first experience of using a food processor—Ruth had a Braun stick blender in her cupboard that had seemingly gone unused, but worked perfectly. I'm now sold on the value of these things, so I will look into obtaining one for myself.

I served the pasta with steamed asparagus (again, mad propz to Tattie Shaws). Everyone was pleased with the meal, a huge relief as my estimate of preparation time was way off. One of Ruth's guests had brought her signature lemon drizzle cake, which I'd heard a lot about and definitely didn't disappoint.

Now that I know I can make pasta, it feels that another one of life's little mysteries has fallen by the wayside. The whole experience was definitely a little exhausting though. Next time, I think I will split the preparation over two days if possible.
leynos: (Default)
From a New Statesman article someone linked to:

'"The university admissions system", he writes, "is biased in favour of private education and against the state schools." If students were admitted strictly on A-level grades, the top universities would take in about 30 per cent more poor students than they do and about 30 per cent fewer from the private schools.'

Okay, so why is this the case? Is it that the Universities are, in the case of two applicants with equal grades, using the applicant's school as the deciding factor? Surely the answer then, is simply to make it illegal to use this in the consideration and to have it blanked out on the UCAS form received by the admissions staff. (After all, whether someone went to a state or private school tells you little other than how well off the parents are). Or am I missing something?


leynos: (Default)

January 2015

456 78910


RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 19th, 2017 05:07 am
Powered by Dreamwidth Studios