Ian's Software

This page is an index of various bits of software I've written in my spare time. Most of this software is released under the BSD Licence, and source is hosted on GitHub.

This website was generated from README.md files hosted on GitHub using my own GitHub Readme Website generator.

Released Software

Web Sites

Games

Utilities

Code for Hardware Projects

In Development

Abandoned Things

SuccessWhale

SuccessWhale is a web-based Twitter, Facebook and LinkedIn client written in PHP, MySQL and JavaScript. It’s a multi-column client that will work just the same in any browser – even IE6. (And as far as I know it’s unique in that respect.) You can also use it while on networks that block twitter.com. It’s free to use by anyone, has no advertising, and source code is available right here on GitHub under the BSD licence.

Visit http://successwhale.com to try it out!

Features

  • You can add as many Twitter and Facebook accounts as you like, displaying data from each, and you can choose which to post to every time.
  • SuccessWhale has a multi-column view, which can be scrolled through if you want more than will sensibly fit on your screen. Many columns are available for each Twitter and Facebook account you register, including ones that combine notifications from all your accounts.
  • SuccessWhale is integrated with my Twitter pastebin, Twixt. Enter a reply longer than 140 characters into the box in SuccessWhale, and it will be shortened automatically using Twixt. SuccessWhale also displays the contents of Twixt posts inline, and expands short URLs.
  • You can use SuccessWhale from places where twitter.com and facebook.com are blocked. To do so, you’ll have to log in from a computer that can see the sites first, then click “Accounts” in the top-right and create yourself a SuccessWhale account. You’ll then be able to log in using that password from any computer.
  • You can maintain a "banned phrases" list, which will hide tweets containing certain phrases — great if you’ve got too many friends that spam their Foursquare check-ins to Twitter.

Screenshot

Successwhale 2 Screenshot

Status

SuccessWhale is complete, released software. Its latest stable version is 2.0.2, and work is underway on the 2.1 branch.

http://successwhale.com runs v2.0.2. http://test.successwhale.com runs v2.1.1.

It’s used by around 80 people — including myself — as their main Twitter and Facebook client, and a number of sites around the internet have used the source code to integrate SuccessWhale into their own sites. As far as I’m aware it has no bugs, but if you find any or would like to request any new features for the next version, you can contact me on Twitter (I'm @tsuki_chama) or via the Issues page on GitHub.

Libraries

SuccessWhale depends on many libraries, including twitteroauth, the Facebook PHP SDK, Php dotenv, jQuery, the jQuery Form Plugin, the jQuery BlockUI Plugin, the jQuery Impromptu Plugin, the jQuery Force Redraw Plugin, the jQuery breakly Plugin, the jQuery "put cursor at end" Plugin, and the PHP Simple HTML DOM Parser. (Certain parts of the SuccessWhale download are thus licenced under the MIT licence, which is compatible with the BSD licence that SuccessWhale itself uses.)

Thanks to...

This description is from the GitHub project ianrenton/successwhale. Full source code is available there.

Successwhale API

Homepage: https://github.com/ianrenton/successwhale-api

This package provides API functions for the "SuccessWhale" social network client (currently supporting Twitter, Facebook and LinkedIn).

This code is under heavy development. It will form the core of the SuccessWhale version 3 web interface, the Android client OnoSendai, and hopefully a number of other apps as well.

SuccessWhale's main selling point is that it provides customisable, blended feeds from across a user's social network accounts -- for example, you can create a feed that combines "mentions" from two of your Twitter accounts with "notifications" from Facebook.

In providing an API for SuccessWhale, I am opening this system up for others to use -- for example to build mobile apps. (Now that TweetDeck has been discontinued, very few mobile or desktop apps offer any kind of cross-service feed merging.)

The API is a Ruby application built on Sinatra and Rack. It comes in a handy Heroku-flavoured wrapper. This is my first time writing Ruby, so I'm sure there are many inefficiencies -- patches, bug reports and constructive criticism are all welcome.

For test purposes, I will host this application at https://api.successwhale.com, running on the SuccessWhale beta test (http://test.successwhale.com) database. This may not always be available, and I will almost certainly break it regularly.

Important Info

Installation

If you want to run the SuccessWhale API on your own server, this section is for you. (Before you start, bear in mind that you can't talk to the main successwhale.com database if you run your own copy of the API code -- you'll need to bring your own database.)

First of all, install the dependencies. If you don't have ruby and ruby-gems installed on your computer, you'll have to get them first. I recommend "RVM" for managing your ruby environment.

With those installed, git clone this repository into a directory on your computer. cd into the directory. Run gem install bundler if necessary, then bundle install to install all of the SuccessWhale API's dependencies.

You will then need to set up a mySQL server. (That's all we support at the moment, but if you'd like to fork the code and add support for something like postgres, I would love to pull it in.) A query to populate the tables is included as setup.sql. (This structure will probably change in the run up to the release of SuccessWhale 3, so be prepared to migrate by hand if you store important data in the DB as it currently stands.)

Next, rename sample.env to .env and fill in the values inside. If you haven't already, you will need to create an app on all the services (e.g. Twitter and Facebook) that you want to use, and make a note of the access tokens so that you can enter them in .env.

Twitter needs read/write permissions, and access to your direct messages if you want to see them within SuccessWhale. Facebook needs the following permissions for full functionality: status_update, read_stream, publish_stream, manage_notifications, offline_access.

Your SuccessWhale API is now ready to run. You can run a development instance with Foreman (foreman start) or push it to a Heroku instance with the environment vars you set (heroku create, git push heroku master, heroku plugins:install git://github.com/ddollar/heroku-config.git, heroku config:push).

This description is from the GitHub project ianrenton/successwhale-api. Full source code is available there.

Can I Call It...?

"Can I Call It...?" is a simple script for checking if the name you'd like for your new, shiny project has already been used by somebody else.

It uses project data from Github, SourceForge, Ruby Gems, PyPI, Maven, Debian and Fedora. (Only Github repositories with >5 watchers (stars) are considered 'significant' enough to worry about.)

It was written by Ian Renton. Source code is available under the BSD licence.

This description is from the GitHub project ianrenton/canicallit. Full source code is available there.

A Thousand Words

"A Thousand Words", a community site where users post short stories inspired by user-submitted pictures. Made for my wife, but it never took off.

Beware, "my first PHP" quality code lies ahead.

Install on Heroku

  • Set up a MySQL database somewhere
  • Run:
    git clone https://github.com/ianrenton/athousandwords.git
    cd athousandwords
    cp sample.env .env
  • Edit .env in your favourite editor
  • Run:
    heroku apps:create
    heroku config:push

Since Heroku is read-only, uploading pictures involves adding them to the repo, committing it and pushing it. It would be nice in future to support automatic upload to Amazon S3 or something.

This description is from the GitHub project ianrenton/athousandwords. Full source code is available there.

Daily Promise

Whether it's chores, diets, jobs or simply finding time to relax, Daily Promise will help keep you in check!

This is the code that powers the http://dp.onlydreaming.net website.

The code is licenced under the BSD licence. More details at http://dp.onlydreaming.net/about

Beware, "my first PHP" quality code lies ahead.

Install on Heroku

  • Set up a MySQL database somewhere
  • Run:
    git clone https://github.com/ianrenton/DailyPromise.git
    cd DailyPromise
    cp sample.env .env
  • Edit .env in your favourite editor
  • Run:
    heroku apps:create
    heroku config:push

This description is from the GitHub project ianrenton/dailypromise. Full source code is available there.

Twixt

A simple PHP flat-file pastebin for Twitter.

Ever started replying to someone on Twitter, knowing as you did it that there's no way you could fit it all into 140 characters? Did it drag on into two, three, four tweets, cluttering up everyone's list? Twixt can help.

Having done just that several times, I was after a simple, disposable way of putting more than 140 characters up somewhere on the internet that I can link from a single tweet. Thus, I created this simple PHP script. Give it a block of text, and it'll generate you a unique web page and grab you an is.gd short URL for it.

You can try it out at http://twixt.successwhale.com, or download and run it on your own web server.

If you'd like to run this from your own server, you can get the source code here on GitHub. To run it, you'll need a web server that can run PHP, and the directory the script sits in must be writable by whatever user you run your web server as.

API

Twixt also provides an API for use by applications such as my own SuccessWhale. To use it, simply provide it with a properly URLEncoded “tweet” argument, for example:

http://twixt.successwhale.com/index.php?tweet=Hello%20World

Twixt will return an HTTP 302 redicrect to the text-format output page of is.gd's “shorten” API, which will be either an HTTP 200 OK containing the shortened URL, or an HTTP 500 Internal Server Error containing the error message.

If you prefer not to use is.gd, you can also supply the raw parameter with value true, like so:

http://twixt.successwhale.com/index.php?tweet=Hello%20World&raw=true

This will return either an HTTP 200 OK containing the URL, or an HTTP 500 Internal Server Error containing the error message. This URL will not be shortened, so it will be based on the path on which you are running twixt, e.g. http://twixt.successwhale.com/1.htm. You can then pipe this through a shortening service of your own, if you like.

Status

Twixt is currently at version 1.2.

Twixt is mature, released software, and as far as I know there are no major bugs that affect it. If you find any bugs or would like to request any new features, please add an issue on GitHub.

This description is from the GitHub project ianrenton/twixt. Full source code is available there.

Marvellator

"The Marvellator" is a simple PHP script that generates random, bizarre or possibly worrying comic book titles, usually in the style of "The Amazing Spiderman", "Incredible X-Men" etc. I think the most horrifying prospect it's generated for me is "The Adventures of Tiny Rorschach" -- even more horrifying because it actually exists. (Thanks Frankie.)

Naturally, this has nothing to do with Marvel Comics in any way (please don't sue me).

You can use the Marvellator at http://marvellator.onlydreaming.net

This description is from the GitHub project ianrenton/marvellator. Full source code is available there.

War Of The Roses

War of the Roses is a 2D strategy/roleplaying game set in the world of my (otherwise pen-and-paper) Changeling game. It is written in Java 1.5, and currently uses PlanetCute tiles for its graphics. It is very early on in development - there's only one level, for example, and lots of bugs - but it's improving almost daily.

Issues with this application are tracked here on Github. Please report any issues you find, and request new features!

Instructions

Downloads

You can download the game as an executable JAR file.

This description is from the GitHub project ianrenton/waroftheroses. Full source code is available there.

Crap Terminal

It's like HyperTerminal, but not shitty and annoying!

This is a Java app, written for JRE version 6. It requires RxTx, a free serial comms library for Java on Windows, Linux, Mac & Solaris. RxTx is not packaged with this application - you can grab the latest binaries here. (The zip contains an INSTALL file which explains where to put everything on each platform. You must do this before running CrapTerminal.)

Changelog

  • 3 (1 Oct 2010): Backported a bunch of changes from Iridium9601Sim. Ported it to use RXTX not JavaComm.

  • 2 (26 Feb 2009): Fixed the printing-one-character-every-two bug, Added ability to send.

  • 1 (21 Aug 2008): Initial release.

Download

This description is from the GitHub project ianrenton/crapterminal. Full source code is available there.

Iridium9601Sim

This is a specialised version of CrapTerminal, created to make it easier to pretend to be an Iridium 9601 satellite modem. Buttons have been added for sending frequently-used strings, and inappropriate options have been removed.

It is important to note that this is not an automated program that behaves like a 9601 - it is simply a basic terminal app with some buttons added to send common 9601 message strings, and a button to send a file's worth of binary data as the contents of an incoming data packet.

This is a Java app, written for JRE version 6. It requires RxTx, a free serial comms library for Java on Windows, Linux, Mac & Solaris. RxTx is not packaged with this application - you can grab the latest binaries here. (The zip contains an INSTALL file which explains where to put everything on each platform. You must do this before running Iridium9601Sim.)

Executable download (Iridium9601Sim.jar)

This description is from the GitHub project ianrenton/iridium9601sim. Full source code is available there.

Facefinder

Facefinder is a quick script I wrote in my lunch hour that makes a page of the names and faces of everyone I work with, to help new starters figure out who everyone is.

It comes in two varieties, a PHP script and an ASP page for Microsoft Office Sharepoint Services (MOSS) 2007.

I apologise profusely for the use of tables - I couldn't find a way of rendering it nicely in both IE and Firefox/Chrome/etc. without them!

Using the PHP Script

  • Download the PHP version from GitHub.

  • Unzip the contents, and put them on a web server that can run PHP. (I've tested it on Apache and IIS with PHP 4.something.)

  • Add photos of everyone in the photos/ directory, in the "Firstname Lastname.ext" format. JPEG, GIF and PNG are supported. Ideally, crop them to a 300x300 square, but at least resize them to 300 by something. (If you need to batch resize, I recommend IrfanView for the job on Windows boxes.)

  • Navigate to http://yoursever/facefinder/index.php and see the result!

Using the MOSS 2007 page

  • Download the MOSS 2007 version from GitHub.

  • Unzip the contents, and put them in a document library on SharePoint.

  • Load the page in your web browser, and see the result!

  • If you don't see anything, maybe SharePoint doesn't have a proper list of users in it. On our intranet we pull the list from Active Directory as a nightly job; this is configurable somewhere within the Site Services admin panel.

  • If you see names but no pictures, none of the users has a picture set. On our intranet we get users to set their own pictures via their "My Site", but if you don't use "My Sites" you'll have to find another way of getting them in.

Troubleshooting

I've never tried deploying these outside of our intranet, so for all I know it might fail completely for you. Hopefully it doesn't, but if it does, leave a comment below or e-mail me and I'll see if I can help you out.

This description is from the GitHub project ianrenton/facefinder. Full source code is available there.

Gunboat

Gunboat is a slow-paced 2D shooter written in Java and JoGL. It is far from finished, but you can try out the current development version anyway.

Downloads

Gunboat requires Java 1.6 and JoGL. Install Java as usual, and make sure the JoGL binaries (.dll files for Windows, .jnilib for Mac OS X, .so for Linux) are on the system path. (You can just put the libraries in the Gunboat directory if you like.)

Download Gunboat itself here, and unzip it anywhere you like. Run "java -jar dist/Gunboat.jar" to run the game. Gunboat.bat (Windows) or Gunboat.sh (Mac) will do this for you.

Online Version

I have done some work on an online browser-based version of Gunboat. (Requires Google Earth plugin.) However, it's in its very early stages (you can't shoot, there aren't any enemies...). I'm not sure if I'll continue with it - one on had, level design has suddenly become very easy! On the other hand, ick, Javascript. Source code for it is here on GitHub.

The rest of this page largely refers to the offline version, as it has many working gameplay components that the online version does not.

Gameplay

In Gunboat, you are a small ship tasked to defend your harbour against an attacking Navy. You can move freely around, and enemy ships will arrive in the harbour in waves. (Sometimes, allies will arrive to help you as well.) You must defeat all the enemies in each level to progress.

Your ship always appears at the bottom middle of your screen. Around it is a coloured ring, which represents your health. This will contract and change colour from green to red as you take damage. Attached to the right side of your ship is a British flag, representing your ship's alleigance. Allies may have other flags, and enemies will always have a different flag to yours. Every ship has both a flag and a health ring.

At the top of your screen is your HUD. On the left, your weapon loadout is displayed. The yellow reticle represents your currently-selected weapon, though you can have up to 5 in each slot. On the right, your speed, heading and radar are displayed. Speed and Heading are fairly self-explanatory. The radar has two modes that you can switch between. The default shows a map of the entire harbour, with other vessels appearing on it. Red are enemies, yellow allies, blue crates, and the green dot is you. The other radar mode, which you can toggle to at will, is a close-in radar. This only shows ships close to you, and thus gives higher detail. "Up" on this radar is in front of your ship, as opposed to the map view, where Up is always North.

Controls

The game is played with both keyboard and mouse. The controls are:

  • Move Mouse: Aim

  • Mouse Buttons: Fire Primary (Left) / Secondary (Right) Weapon

  • WSAD: Change speed / heading

  • Q: Switch primary weapons

  • E: Switch secondary weapons

  • R: Switch radar modes

  • C: Switch camera angles (Follow, Above, Bird's-Eye, Bridge)

  • H: Show/hide HUD (Might be useful on machines without 3D acceleration.)

  • N: Give yourself a Nuke (Cheat mode for testing only. Has no icon. Like a homing missile but faster, more agile, instakills, infinite ammo.)

Ship Types

  • Frigate (e.g. Type 23): This is the player's ship, although you will encounter this ship many times as both ally and enemy. It is fast and normally quite weak, and can carry a wide range of weapons. Yours has specially reinforced armour, so it has much more health than normal.

  • Marine Landing Craft: These tiny vessels are very fast, and sneak in close to their targets. Their machine-gun is weak, but left unchecked they can do considerable damage. They are easy to destroy.

  • MCMV (e.g. Sandown class): The Mine Countermeasure Vessel is frequently found accompanying larger fleets. It is weak and poorly-armed.

  • Destroyer (e.g. Daring class): These large vessels are tougher than frigates, and have multiple weapon mounting points. They usually have a combination of guns, torpedoes and anti-air weapons.

  • Aircraft Carrier (e.g. Invincible Class): Aircraft carriers are huge, heavily armoured and largely unarmed. Their strength lies in their ability to launch aircraft. A mixture of anti-air and anti-surface weapons is advised for taking out a carrier.

  • Landing Platform Dock (e.g. Albion class): Much like the carrier, the LPD's strength lies in the smaller vessels that it can launch - in this case, landing craft. It is also more heavily armed and armoured than a carrier.

  • Battleship (e.g. HMS Vanguard): Relics of a bygone age, these vast ships were designed to take on other battleships on the high seas. They are slow and unmanouverable, but have lots of armour and have lots of weapon mounting points. (These are boss-type enemies!)

  • Supply Ship: Supply ships are weak and unarmoured, and usually drop interesting pick-up items. Be warned, though, they usually come with a powerful escort!

  • Submarine: (e.g. Astute Class) Submarines lurk below the surface, attacking with torpedoes, anti-ship and anti-air missiles. Specific weapons are required to take out submarines, but they are lightly-armoured.

  • Helicopter (e.g. Lynx): The helicopter, a slow but manouverable aircraft, is generally used to drop depth charges.

  • VTOL Aircraft (e.g. Harrier): The VTOL (Vertical Take-Off and Landing) aircraft is fast and manouverable, and can launch anti-ship missiles, anti-air missiles and torpedoes. However, it has very limited ammunition.

  • Standard Aircraft (e.g. F35): These aircraft can only be launched from carriers. In addition to a limited supply of missiles, they also have a minigun. They are extremely fast, but not very maneuverabe.

Weapons

  • Vickers 4.5-inch Mark 8: The standard frigate deck gun, this weapon fires quickly and does a fair amount of damage.

  • Vickers .303 Machinegun: This tiny weapon does little damage and has a very limited range. It fires very quickly, but is extremely inaccurate. It can hit aerial targets as well as surface ones.

  • Twin QF 5.25-inch Mark 1: This is essentially the same as the 4.5-inch gun, except that there are two barrels per mounting point.

  • Twin BL 15-inch Mark 1: One of the highest-caliber naval guns ever put into service by the Royal Navy, this weapon fires slowly but over a long range, and the projectiles are extremely damaging. Not much survives a hit with two 15-inch rounds.

  • Naval Laser Prototype NDEW-1: This experimental direct-energy weapon fires rapidly, has a long range, and deals a lot of damage. However, over-use of this weapon will cause it to explode and damage your ship!

  • RGM-84 Harpoon Missile Launcher: This weapon, standard equipment for frigates, fires anti-ship missiles. They are slow, but turn in mid-flight to hit the nearest enemy ship. They deal extreme amounts of damage. This weapon has limited ammunition.

  • Tomahawk Missile Launcher: This weapon fires bigger and better missiles. They are faster, more manouverable, and cause more damage than their standard variant, but with even more limited ammunition.

  • Sea Wolf Missile Launcher: This is the anti-air equivalent of the standard anti-ship missile launcher. Its missiles move and home faster, to keep up with flying targets.

  • Naval Railgun EMG Mod 0: Though not particularly damaging and with an average fire rate, this weapon's strength is that it hits almost instantly, so there is no need to lead the target.

  • Standard Torpedoes: Torpedoes are slow and damaging, much like anti-ship missiles, except that they do not home on a target. Their strength is that they can hit submerged targets such as submarines as well as surface ships.

  • Sting Ray Homing Torpedoes: Homing torpedoes sacrifice some of their warhead space for their homing mechanism, and thus deal less damage.

  • Depth Charges: These weapons are dropped near your ship rather than fired, and they do not move. They only hit submerged targets - however, any submarine that gets lured onto the depth charge is instantly destroyed.

  • DS 30B 30mm Anti-Air Gun: This is the standard anti-air weapon. Much like the 4.5-inch gun, it fires quickly and deals moderate damage.

  • Flak Cannon: This weapon deals extreme damage to airborne enemies. However, its rate of fire is very low.

  • Phalanx CIWS: Not strictly a weapon, the Phalanx will not shoot at enemies. Rather, it is an automated turret that will shoot down any enemy missiles within a certain radius of your ship. It only lasts a limited time.

  • Shield Generator: An experimental device, the shield generator creates an electromagnetic force-field around your ship. It deflects all incoming projectiles, but it only lasts for a very limited time.

Other In-Game Items

  • Health Crate: Sometimes enemy ships will drop health crates when they're destroyed. Steer your ship over these crates (marked with a red H) to restore some of your health.

  • Weapon Crate: Enemy ships with interesting weapons may sometimes leave their weapon behind in a crate. (Supply ships drop random weapon crates.) Steer your ship over them to pick up the weapon, and add it as an option in either your primary or secondary slot.

This description is from the GitHub project ianrenton/gunboat. Full source code is available there.

MusicMan

Work on MusicMan has been discontinued, as a friend of mine has a far more capable player in the form of Morrigan, and it is probably easier to port the features I would like to see than continue writing my own client from scratch.

MusicMan is a cross-platform music player and library organiser. It supports multiple music directories, each of which is recursively scanned to build your media library. Your library is synchronised with the actual files on disk each time you start MusicMan. It also supports mass ID3 retagging and dynamic searching (iTunes-style), where entering a search term reduces your current playlist to only the songs that match your search.

MusicMan is early alpha software. Lots of things (e.g. playlists, Shoutcast) don't work yet. However, please try it and submit any bugs you find or features you would like to see on the issue tracker for this repository. I've not yet put the source code anywhere that people can easily commit to, but if you feel like adding/fixing things in the meantime, send the source back to me and I'll merge it in.

MusicMan requires Java 6, and runs on Windows, Mac and Linux. It is released under the terms of the BSD licence. It uses the free MP3SPI, JLayer and JAudioTagger libraries.

You can download MusicMan here (Extract ZIP, run MusicMan.jar)

This description is from the GitHub project ianrenton/musicman. Full source code is available there.

RPG Dice Roller

This is fast becoming my traditional "learn a new language by coding this" script: a dice roller for tabletop RPGs. This time, I'm learning wxPython!

Written in Python 2.5 and wxPython 2.8, though it might well support earlier versions.

Current systems supported: Old WoD (all editions), nWoD, Exalted, d20, 7th Sea, L5R and Shadowrun. Feedback / suggestions of new systems to include are appreciated!

Use at your own risk, may make the world explode or various lesser symptoms (such as being eaten by a CR3 Dire Badger).

New in version 0.3-20080522

Free Entry mode (under Miscellaneous) added. Thanks to aefaradien for suggesting a better way to do this. Input is sanitised, but there's still no real error handling so Free Entry probably falls over if you try anything too tricky.

New in version 0.2-20080521

All seems up and running and bug-free. GUI looks nicer. Couple of things in the code could use tidying up, and there's no real error handling.

New in version 0.1-20080520

Can't actually roll dice yet, but the data structures and whatnot are in there. How enterprisey. GUI works but is ugly.

This description is from the GitHub project ianrenton/rpgdiceroller. Full source code is available there.

RPoL Thread Reformatter

This script takes a downloaded thread from RPoL, and reformats it into something reasonably tidy for importing elsewhere.

Written in Python 2.5, doesn't require any external libraries. To use it, find an RPoL thread, click "D/L" at the top right. Keep the default options, and request the download. Take the page it produces and save it (File > Save As... or whatever) in the same directory as the script as input.html. The script will produce an output.txt (it's not a full HTML page, hence TXT not HTML).

Use at your own risk, may destroy the universe amongst other symptoms.

This description is from the GitHub project ianrenton/rpolthreadreformatter. Full source code is available there.

Type X29

"Type X29" is an experiment: a 1D bullet-hell shooter. Although enemies and bullets may move in two dimensions, your ship is confined to a single line, meaning that dodging enemy fire becomes not just a matter of quick reactions but of strategically destroying enemies in advance to give you enough space to move between their shots.

The game is very early in its development phase - I've literally only spent a few hours on it over a couple of days. None of the artwork, gameplay etc. is final, and as yet there is no real goal other than surviving as long as possible. Eventually there will be lives, weapon upgrades, bosses and all the rest. But for now, see if you can beat my record of 114 seconds!

You can play Type X29 here. It requires the latest version of Java and a plugin for your browser.

Screenshot

Type X29 Screenshot

This description is from the GitHub project ianrenton/typex29. Full source code is available there.

Telegraph Fantasy Football Team Picker

This script picks the optimum team for the Daily Telegraph's Fantasy Football game, combining player stats with online injury lists. Useful so that people like me, who know nothing about football, have a chance! Note that it is only as good as the data it has access to, so it's probably a bad idea to change your team according to its suggestions within the first few weeks of the season - wait until it has more data before trusting it.

THIS SCRIPT IS NO LONGER WORKING. Since the 2012-2013 season, the Premier League Fantasy Football website has been changed to allow no access to the game stats without being logged in. This team picker will be offline until I find a work-around for this.

Jose Mourinho in "Not Really Superior to Robot After All" Shocker!

08-09 Fantasy Football results prove famous football dude not really all that much better at this than inanimate lump of silicon!

This description is from the GitHub project ianrenton/telegraphfantasyfootballteampicker. Full source code is available there.

Premier League Fantasy Football Team Picker

This script picks the optimum team for the Premier League's Fantasy Football game, combining player stats with online injury lists. Useful so that people like me, who know nothing about football, have a chance! Note that it is only as good as the data it has access to, so it's probably a bad idea to change your team according to its suggestions within the first few weeks of the season - wait until it has more data before trusting it.

THIS SCRIPT IS NO LONGER WORKING. Since the 2011-2012 season, the Premier League Fantasy Football website has been changed to allow no access to the game stats without being logged in. This team picker will be offline until I find a work-around for this.

This description is from the GitHub project ianrenton/premierleaguefantasyfootballteampicker. Full source code is available there.

Cobb's Quay Weather

Cobb's Quay in Poole Harbour has a crappy Flash-only front-end to its weather station. My "Cobb's Quay Weather" page grabs the data files behind the Flash, and displays the important bits with minimal formatting, e.g. for mobile browsers.

Made for a friend of mine who couldn't get the Flash interface to work from his phone.

You can see the current weather at Cobb's Quay by visiting http://www.onlydreaming.net/files/weather/cobbs.php

This description is from the GitHub project ianrenton/cobbs-quay-weather. Full source code is available there.

Sea Battle

Sea Battle is a casual 2D real-time strategy game inspired by Warzone 2100. In the game, you must research components and build ships from them at a frantic pace in order to out-gun the computer-controlled enemy player. You win by destroying the enemy base, and of course you lose if the enemy manages to destroy yours.

Screenshot

Sea Battle Screenshot

Play Sea Battle now!

Sea Battle is available in various forms, all of which require an up-to-date Java runtime. The applet form ("Play online now!") is unplayably slow on some OS & browser combinations -- if this includes yours, please download the game for your platform instead.

How to Play

First off, select your difficulty level and hit Start Game. Easy difficulty is selected by default -- this setting dhould be beatable once you have a little practice, or first time if you get the hang of the game quickly.

Once you're into the game, the right-hand side of the screen contains your build and research options. You start with no ships, so that's where you'll want to begin.

Each ship is constructed from four components - Hull, Weapon, Engine and Radar. You can see the tech tree for each on the right, mostly in grey. You are given the first of each for free, which are currently displayed in yellow.

Better hulls have more health, but they are also slower to move and slower to build. Weapons have varying damage levels and fire rates, but in general the later ones are better. Engines increase ships' speed, very important for the larger hulls. Radars set the weapons' range (outranging your enemy will be a big advantage).

You'll probably want to begin by building a few of the most basic ship, in order to fend off the enemy while you research and build better things. Clicking on the "Build" button in the bottom-right builds one ship of whatever configuration is currently shown in yellow. You can click it multiple times to fill up the build queue.

While your ships are building, pick some components to research. This is done by clicking on a grey box -- it will turn green for the duration of the research. Once complete, it will be white -- available, but not selected. You can click white boxes to turn them yellow and select that new configuration.

By this point, the enemy will be throwing some ships at you. Your base is at the bottom of the game window, where your (blue) ships are appearing. The goal of the game is to destroy the enemy base at the top of the screen, but first you have some ships to deal with. Left-click on your ships to select them, then left-click again somewhere else to set their destination. You can also drag a box to select multiple ships. Right-clicking at any time cancels selection.

To begin with your ships will be evenly matched, but the enemy never stops researching, and neither should you. Having the technological edge is the key to winning the game.

The best research / build priorities, and advanced tactics on the game field, are up to you to discover!

Development Status

Sea Battle is currently at version 0.3. It's playable and enjoyable, but there are a few tweaks that will be required before it can be properly released as v1.0.

The development of Sea Battle was documented as a series of blog posts.

Licence and Source Code

Sea Battle is released under the terms of the BSD licence. Source code is included with each platform-specific download above, and you can also grab the source code here on Github.

Bugs and Feature Requests

If you find a bug or would like to request a feature for a future version of Sea Battle, please use the Issue tracker for this Github project.

This description is from the GitHub project ianrenton/seabattle. Full source code is available there.

"Minesweeper 2.0"

A semi-realistic minesweeping game.

Having spent far too many hours playing Minesweeper on Windows machines, I figured I'd write a game that bears some resemblance to actual mine-sweeping.

Your vehicle is a remote-controlled minesweeping vehicle, with various attachments and various ships to protect depending on the difficulty level you're playing on. Head to Help -> How to Play... for a three-minute tutorial that explains everything you need to know.

Screenshot

Minesweeper 2.0 Screenshot

Downloads

Download version 2.0.5 (89KB JAR)

Requirements

Minesweeper 2.0 requires the Java 6 runtime environment, which you probably have already. If not, you can get it from here. Once that's installed, just double-click on the downloaded JAR file and it should run.

Bugs and Features

As far as I'm aware there aren't any bugs in this game, but it never really got tidied up and given a nice interface so it's not the greatest-looking thing in the world.

Issues with this application are tracked on Github. Please report any issues you find!

This description is from the GitHub project ianrenton/minesweeper-2.0. Full source code is available there.

raspberrytank

Program(s) used to control a Heng Long RC tank using a Raspberry Pi. For more information on the Raspberry Tank project, go to http://bit.ly/raspberrytank

rt_http

rt_http is a tank control program with an HTTP server built in (using mongoose). It takes commands in a specific format on its port as HTTP GET requests, and uses them to control the tank. It also reads data from an ultrasonic rangefinder and compass module over I2C.

You can compile it by running "make" in its directory, assuming you have make installed. You also need libpthreads, and kernel modules for I2C if you intend to use the I2C devices. It should build mongoose automatically, if not, run "cd mongoose && make linux".

You need to run it as root so that it can talk to the GPIO pins. ("sudo ./rt_http")

It was designed for use with the Web UI, though you can probably figure out how to use it without :)

web-ui

web-ui is the frontend for rt_http. It renders a web page that includes the tank's video feed, plus buttons with Javascript that sends the appropriate commands to rt_http, and the readings from the sensors.

The web UI comes in two flavours - a laptop/non-touch flavour where tank commands are activated by holding the mouse down on an icon, and a phone/ tablet flavour where you just click an icon then click Stop to stop. (Touch devices tend to do a "right-click" action when you click-and-hold, so this form of interaction doesn't work very well there.

You can run it with any web server such as lighttpd. If your document root isn't /var/www, you'll need to edit the directory that rt_http writes its sensordata.txt file too.

Old Stuff

henglong_test is a program to exercise the tank's drive motors in sequence.

rt_ssh operates each of the tank's primary functions via text entry, e.g. "W" followed by "Enter" makes the tank move forward a bit. Designed to be operated over SSH.

This description is from the GitHub project ianrenton/raspberrytank. Full source code is available there.

Local/Remote Markdown Website Renderer in Ruby

A small application which renders a text-editor-like tabbed web interface, where each tab is generated from a local or remote markdown file.

Uses Redcarpet to transform each file using GitHub Flavoured Markdown, and jQuery UI Tabs with the dot-luv theme to render the tabs.

Both the application as well as the local markdown files (in markdown/) are contained within the same git repository. You can also supply a set of remote markdown files which will be fetched by the application. This is primarily designed to build a website from multiple README.md files from your GitHub projects.

Using this application on Heroku

To make immediate use of this project one only needs to execute the following commands:

    git clone git://github.com/ianrenton/github-readme-website.git mywebsite
    cd mywebsite
    heroku create --stack cedar mywebsite
    heroku addons:add redistogo:nano
    git push heroku master
    heroku open

Other ins-and-outs

  • To run the application locally: foreman start
  • The list of remote markdown files to fetch is stored in web.rb.
  • The template file exists in views/index.erb and can be modified to your liking.
  • Redis is required to run. Provisioning RedisToGo on Heroku will make it work seamlessly, but if you want to run the app locally you will either need to run your own Redis instance (apt-get install redis etc.) or open .env and supply the URL for another Redis instance.

This description is from the GitHub project ianrenton/github-readme-website. Full source code is available there.