I've accepted a job today at Sagentia as a software engineer. Unfortunately this meant turning down a dream job at Last.FM simply because it would have required a 1.5 hour commute each way. I'm confident that I'll be just as happy at Sagentia, though!
It's been a while since I messed around with .NET (probably over a year now). I figured I'd been messing around with Java quite a lot and should broaden my skills so I decided to make a quick application in C# to get my AudioScrobbler information and display it (nothing too complex). The result can be seen here. However, I'm a Mac user so I figured I'd try the application running under Mono on OSX. I hadn't really used Mono before but I assumed it wouldn't have a System.Windows.Forms implementation, I was wrong! As you can see here, it's not perfect by a long short, but it's definitely working!
This is fairly exciting because, in some ways, C# is a more powerful language than Java (it has delegates, properties and "out" variables). However, I think these could easily be abused to make bad OO software. With Java you are forced to design your software in a more OO style. E.g. if you need to return multiple results from a method, you'd make an encapsulating method. With C#, you could be lazy and use multiple "out" variables. I'm also not sure I like the ability to alias namespaces in C#, you could alias "System.Console" as "pinecone", then your code could be filled with "pinecone.WriteLine(...)", which could be pretty confusing. C# also does not force filenames and filesystem structures based on class names and namespaces, which could lead to messy organisation of code. Anyway, I'm still learning the ins and outs of .NET and for now it's quite exciting.
The last thing remaining on my ToDo list (which had been there for a considerable amount of time as a low-priority task) was to implement GZipping in SlXHTTPd. Well, it only took about 9 minutes in total (a fairly easy task!)... This is quite an important task for me as during my time at Jagex, the company CTO refused to let me implement GZip even though it would have reduced their bandwidth usage by an incredibly large amount (his excuse was that it would be slow despite me putting together tests proving otherwise). Anyway, during my testing for SlXHTTPd it's pretty amusing to see that it managed to GZip a 1.48MiB directory listing down to 30KiB! I've added limits so that it won't try GZipping anything other than text and it won't GZip files over 5MiB in size (as this would take a long time to do).
I've been busy adding more monitors to things (I can now tell how many SlX Scripts have been compiled, their compile times, what they compiled to etc). I randomly did a code line count and believe it or not.. it ended up as this:
Using my new graphing tool, I decided to write a StorageMonitor that monitors file systems on whichever systems I run my programs on. It can be seen Here. I have added functions to the graph datasets that allow me to calculate the line of best fit (via linear regression) along with predicted X and Y intercepts. This allows me to calculate when the file system is going to run out of space. See the image for an example.
I figured out how to do anti-aliasing with Java2D (no, it's not rocket science, merely enabling an option). Anyway here is an image of a graph with anti-aliasing enabled. Smooth!
So today I added the SearchEngine Logging. It's pretty useful and is implemented against an interface so the logger could potentially log to a file, printer... anything really! As you can see, the search times are pretty impressive! They get shorter and shorter the more the SearchEngine is used due to the way the JVM works. Anyway, I consider this to be as good as my implementation for Jagex and just as feature-complete (aside from some stupid score weighting I did at Jagex based on whether search terms appeared in close proximity to each other when they were not included in a phrase).