Doom, gloom and failure.

Since it is now 3 to 6 months since the implants were placed in my jaw, I went yesterday for them to cut open a portion of my gum again (albeit a significantly smaller bit than last time) to expose the implants. Unfortunately when the consultant came to unscrew the cap which covers the top it became apparent that one of the implants had not “taken” and was just spinning in the socket they had drilled for it. As a result the implant had to be removed, and I’m now left with a hole which has been packed by some crazy medical material.

The other implant is fine and exposing that one went to plan. I’m now left considering whether to re-try the implant route (which will now involve referal to yet another hospital and a bone-graft operation) or to have a “reversible bridge” (which can be removed if I later decide to retry the implants). Having spent the best part of 5 years undergoing this treatment I am very disappointed it failed like this. I am now leaning to the bridge option as it will most likely take a month rather than another year, or more, of treatment although it will probably be less robust and may fall off in years to come.

I saw my third year project tutor this morning and had a productive discussion with him about the likely technical difficulties which may arise giving my presentation. As a result I went to see one of the system programmers who suggested that I e-mail the unix help address and requested a project account which can be allocate a small port range I can use to run my projects listening server on the undergraduate server and connect to it from both my Laptop (which will be running Windows, for the purposes of the presentation) and the provided Red Hat system. This sounds really promissing.

Development as always is progressing, but perhaps not quite as quickly as I would like. As I am now pouring almost all of my free time into the project there is not much I can do to speed things up. That said, I am more-or-less on my (revised) schedule for implimentation and am confident about having it complete in time for the presentation.

Project Management and Revision Control

I quite like trac and use it for “managing” (for well defined values of managing) the various projects I work on (I’m currently using subversion for version control and so trac makes logical sense as it was designed to work with subversion, although other version control backends are now supported).

Recently a former student at Warwick, Peter Ellis, gave an interesting talk on managing projects based upon his experience working in industry. During his talk he alluded to liking the bazaar revision control system. Bazaar is a distributed system, as opposed to subversion and the older cvs systems which rely on a central repository.

Personally I could not see the advantage of distributed versioning over centralised and could not get my head past the idea the distributed versioning would result in a horrendous mess of different version distributed all over the place which were completely out of sync.

Seeking further enlightenment, I spoke to some of my peers at Warwick who were using a distributed versioning system for the project they were working on. They pointed out that as the version control is distributed every checkout is in effect also a repository. This allows the same work flow to occur offline as online with all of the changes to the repositoy pushed upstream when it is more convinient (i.e. an internet connecting is available). As a result many changesets can be applied to the local repository, which is desirable when multiple major alterations are being made to a project. With subversion this would not be possible without a connection to the central server due to its concept of a single ‘Working copy’ when offline.

The only downside I see to switching to bazaar (or a similer versioning system) is that my use of trac’s bug tracking/milestone management and wiki, negate the benefits as I have to have an internet connection to use them. While I could live without the Wiki as I can just store text files inside the repository with the same contents (in fact the wiki was initially populated from text files containing various ideas I’d had, when I started using trac) I cannot do without the bug tracking and milestone management.

Looking around on the internet I found a couple of promising looking bug tracking systems designed to be used with distributed revision control systems, such as Bugs Everywhere and artifacts. Tracker for ruby also looked quite nice, until I realised it was using SQLlite which, although it stores its data in a single file on the filesystem, uses a binary format which is unlikely to place nice with most (if not all) versioning systems. Both Bugs Everywhere and artifacts are written in Python. I was unable to get Bugs Everywhere to run under Windows, and artifacts seems to run but spaffs out a lot of warnings if not being run within a darcs repository.

As a result I am sorely tempted to write my own bug/milestone tracking system in Perl (using only standard libraries, nothing from cpan, so it should just-work™ on most systems with Perl out-of-the-box™). The obvious criteria (besides just-working™) being a text-based storage method such that adding/removing & updateing bugs is easilly diff-able (for the revision control system), completely usable offline, allowing the grouping of bugs for milestones and reasonably attractive to use (whilst being command-line driven and avoiding the use of ncurses for the purpose of compatiblity, see below). Ideally the fields (priority/summary/milestone etc) would not be pre-defined so the user can create what is needed depending on the project (e.g. in an personal project ‘assigned to’ would be completely redundant as there is only one developer, me).

Whilst it would be nice to use BASH(and associated “standard” unix utilities) to write this, I think this would be a bad idea for two reasons 1. It does not solve the not working on Windows problem (I’m completely side-stepping cygwin here on the grounds that my laptop, which is my primary development machine, has ActivePerl installed for my third year project, but not cygwin under Windows) and 2. I can forsee this getting quite complex should I wish to add more nifty features (a stand-alone webserver for a web-interface would be nifty(if somewhat excessive!), for example) as which point BASH may prove insufficient and the project ends up depending on BASH and Perl whereas I might as well have chosen Perl in the first place and only have one dependancy.

Of course, even starting this project depends on me getting sufficiently far ahead with my third year project to set aside a day or two to write most of the code. The whole idea may end up on my stack of nifty projects that never get properly started, along with all the other projects I’ve been shelving there since my GCSE days.

On the topic of project management, I work Saturday mornings at Startin Tractors and often come home feeling that I’ve worked solidly for 5 hours and achieved nothing. This morning I made an effort to ensure I worked away at the bug list for the system I wrote and closed the tickets as I fixed them. As a result I returned home having commited 9 changes to subversion (as I avoid commiting broken code, on principle, this suggested that 9 problems were fixed), closed 4 tickets (however some items are, of course, considered to minor to ticket, like changing the wording of a dialogue) and opened 5 new tickets. Although a net increase in open tickets I came away felling I had accumplished a lot in the time due to the amount of activity showing up in the trac timeline.

Incidentally, looking at the timeline I can determine exactly what I was doing at any given point of the morning. I can tell, for instance, that the first fourty minutes of the day were spent fixing a bug in the “latest arrivals” facility whilst the last hour was spent (desperately!) fixing a critical bug in the caching system which caused the entire edit feature to die horribly whenever a change was made to an existing piece of machinery.

Life, The Universe, CompSoc and third year projects

It’s been quite a while since I’ve written anything on my blog. To a great extent I’ve just been far too busy (this hasn’t changed, but being back at Uni there is noone watching me from behind to see if I’m not working) and during the holidays I do not get the oportunity to use a computer much outside of work due to a lack of time.

Three important things have happened since my last blog entry;

Firstly, I’ve had surgery on my mouth to remove two of my existing teeth and have implants placed into my jaw which will, when healed in 3 to 6months time will support four false teeth in their place. I am missing a significant number of teeth (which I’ve never had) and the problem seems to be genetic – my mother has a large number of teeth missing as did her father. The ongoing appointments for this are proving quite disruptive and I an ending up missing lectures quite regularly at the moment (co-incidentally the lectures always seem to be for the ‘Compiler Design’ course, dispite me missing them on different days and at different times.

Secondly, The deadline for handing in my third year project specification was last Thurday. While I managed to hand in the required work before the deadline, the work I handed in contained a number of errors which I should have spotted. The main reason for this was that I made a mistake and overwrote the latest version of the specification with an older version which ment I then had to waste a lot of time recovering the newer copy. Had this not happened I would probably have had an extra 3-4hours to spend on getting it right and would not have rushed and handed in an erroneous version.

Finally, Over the holiday I have reached the conclusion that CompSoc, as a group of people, suck. The ideas on which CompSoc is founded, as an academic society who provide support, guest lectures and tutorials for people who like computers are great and like a number of people in CompSoc I simply love computers, however CompSoc is increasingly being taken over by two types of people. One of these is the gaming types, whose sole interest is playing games at every opportunity and are of the opinion that anyone who doesn’t want to play games all the time is not worthy of being in the society. The other group are the type who simply moan all the time about everything. They seem to complain for the sake of complaining and are completely unwilling to do anything productive to fix the problems they moan about.

I for one am sick to the back teeth(well, sick to what back teeth I have) of people moaning and bitching at people needlessly. This is the reason I have left, and do not intend to return to, the #compsoc irc channel on their irc network which is where all of the active members tend to spend their time. Since leaving #compsoc I have noticed no unjustified moaning occuring in any of the other 13 channels I am in on CompSoc’s IRC network. The thing that really gets to me is people bitching non-stop about things which other members have put a significant amount of their time and effort into and get nothing in return. Members have no obligation to take part and do stuff for CompSoc, like the website, the IRC bot, helping manage the servers and setup LANs the least they could expect is not to be bitched at constantly for something they have given time and effort for, entirely volunterially.

There was a suggestion that the Warwick Linux User’s Group could part from CompSoc and form its own society. This idea was quickly shouted down as, among other things, it might spell the end for CompSoc. I’m not sure that this would have been a bad idea. If the LUG had left, at least CompSoc might have been forced to get its arse in gear and stop being the ‘gamers and bitchers’ society.

If it weren’t for my multiple obligations to the society and the fact that I know a grand total of about 0 people outside of CompSoc I would seriously consider having nothing more to do with them. Thankfully the LUG, which has not had any of these issues, is continuing to move in the direction it was 2 years ago with semi-regular tutorials planned and maintaining the social atmosphere of their meetings. Had the LUG left CompSoc, it would have been a much better society than that which CompSoc has become.

Language, Language, Language

I’m yet to settle on a final language to write the core of my Bot in. This is both advantageous and a hinderence. It means that I’ve not committed myself to a language, which at a later stage will prove to be insufficient or extreemly difficult to use for the intended task. Conversely it means that, at the moment, I cannot write any final code and I’m rewriting portions of the same code in various languages while I try out the options.

Initially I looked at Python as the inbuilt structures (lists, dictionaries etc.) lend itself to easy storage of socket information and trivial implimentation of buffers. I had recently been having a go at rewriting it in C++, which is proving to be much harder than it first looked.

While randomly browsing the web, I began looking at various language’s benchmarks on the great language shootout I observed that (as you’d expect) Python, Perl, $other_interpreted_language < java, mono(C#), $semi_compiled_language (by which I mean it's not compiled to native code, but rather runs through a VM or similar) < C, C++, $compiled_language. No surprises there. The core (and security module) of the Bot are going to spend most of their time pushing data (strings) between the various sockets. Ideally they want to do this as quickly as possible to keep the overall performance of the Bot as good as possible (hence why I was looking at C++). While I was (virtually) pitting various languages against each other I found the D is actually comparable, performance-wise, to C and C++. This impressed me, I was expecting it to be slower, more comparable to C# and Java due to the garbage collection and other features it shares with them.

After browsing the D website and other community sites linked from there I found that D aims to be, essentially, C++ with garbage collection and dynamic memory allocation. The Wiki4D has many more usefull links to community websites. This D tutorials page also looks like a good place to start with learning the language.

To quote its website, “Mango is a collection of D packages with an orientation toward server-side programming“. It includes, among a lot of other suff, a socket class. This could be very useful, at least initially while poking the D language even if I drop D in favour of something else or end up writing my own socket library.

Well, at least I’ve got something else to procrastinate over for a few more days ;)

Planet 3YP

Chris Lamb has set up a website, called Planet 3YP, which is “an aggregate feed of University of Warwick Computer Science third-year project blogs”. It looks good, although it only has 2 projects on there at the moment. Hopefully some more people will signup (I’ve just sent off my project’s details to him) and we will get some interesting information reading about each other’s projects.

The shiney hardware I ordered hasn’t been delivered yet today, but due to yesterday being a bank holiday may not come until tomorrow. I hope it arrives before I return to Coventry tomorrow evening even though I probably won’t have an opportunity to actually install it all until after the exams.

At home, bored…

I’m currently at home (supposidly) revising for my exams. I foolishly thought if I didn’t bring my desktop computer with me I might actually do some revision, as a result I’m sitting here on my laptop, which struggles with openttd, writing blog entries. Fun.

On the plus side, I’ve had my braces removed, after over 2 years of wearing them, since the Othodentisty people at Glenfield Hospital have finished pulling my teath around and decided that they want to move onto the next stage of treatment. I’ve now got removable retainers for 3 months, after which they’ll be cutting bits of my mouth open to put implants in.

I had some interesting thoughts about my third year project in the shower yesterday. Most of them are either unfeasable or just plain crack-headed, but I noted them down anyway. They’ll give me some interesting points to discuss in my report, at least.

Oh well, I’ve got to go and move some paint tins from the barn to the garage before my dad gets back. Riveting Stuff.

Random thoughts on my 3rd year project

core has facility to determine which plugins it can talk to, and which not.
security module requests notification of all un-registered sockets.
core by default accepts all, and can be told to by default reject (a la USE”-*”) and have a list of accepted sockets.

security levels how?

message structure:

{message id}{source?}{destination}{replyto}{message}