Launching Sorcy.org
May
2010
Today I’ve launched sorcy.org, which is a site holding various music and musical experiments I’ve been working on since the beginning of last year. So far I’ve put up a compilation of songs I made last year, and I’ll be putting up some more stuff from this year later on (as I bring them to completion :P).
I would say that most of the tracks up there aren’t that good, and I realise that, but I like every single one of those tracks. I won’t release something unless I like it in some way. Some of the tracks are full songs, and other tracks are more short ideas or experiments.
At about the beginning of last year I decided to more seriously start teaching myself how to compose and produce music. Before that, over the years I had always dabbled, but I had never actually put in a lot of time to try to create some music.
The hardest part has been trying to discipline myself to actually study some music theory, and last year I ended up mostly experimenting around on my own. At the start of this year I started taking some music lessons, but I’ve had to cut those off due to work and other commitments. I still have the main course book, so I’ll probably keep trying to work through that on my own.
That said, there are many artists who I like who have had no formal music training at all, so I’m not convinced that learning this stuff properly is the only way to go. I think a lot of it is still just practice, practice, practice, which is why I’ve been trying to spend more time actually producing stuff with a goal to release it at some point.
As for gear (or, instruments?), I started with a MIDI keyboard I’ve had for some time and a lite copy of Ableton Live which I got with my soundcard. Later on I also bought myself a BCR2000, not just because tweaking knobs is fun, but also because looking less at a screen and listening more to the sound is good. Recently, I bought myself a Launchpad, which should not only be useful for Ableton Live stuff, but also hooking into the interesting experimental tools the Monome community have come up with.
At this point I consider myself to be very familiar with Ableton Live, so I’m ready to upgrade to the full version. I’m currently tossing up as to whether to get the standard edition, or the suite edition. Both are expensive, but the suite is more so. They also have boxed editions which once again cost more, but also include more stuff.
I’d also really like to get Max4Live which is essentially the new Max/MSP, but integrated with Ableton Live. It’s a visual audio programming environment, that has shared lineage with the open source Pure Data software. I really want to get more into sound design, and writing my own effects. There are also a whole lot of monome and launchpad patches for M4L popping up.
I’ve been somewhat slack the past few months in terms of working on my own tracks, but I was busy with the music classes. I’m going to be getting back into it now, and hopefully you’ll see some more tracks go up on sorcy.org. I have two in progress, but they’re not really complete enough to release.
Linux.Conf.Au 2010 Day One
Jan
2010
Got up bright and early and headed off to the first day of LCA 2010. First up, was the conference opening, which included a hilarious and entertaining introduction video, which introduced the conference, New Zealand, and Wellington.
After all the usual notices and information of the opening, we had morning tea, where there were some nice custard/fruit pies.
Next, I went to the Open Programming Languages miniconf. The first talk was about Haskell, “and all the things it doesn’t let you do”. It was an okay basic introduction to the language, but the speaker had too much information on his slides, which he skipped by a bit too fast (and which he didn’t read out either!). I hope that this brings more people to actually try out language, as in my opinion is one of the major very different languages that everyone should know.
After that, was the Gearman talk. Gearman is a distributed job system, which has tons of language bindings. It’s simply used for running a whole bunch of tasks, in parallel across a bunch of workers. There’s also a mysql module, which exposes an SQL interface to the whole system (which is totally crack)
There was an annoying power-cut during the Gearman talk, apparently they cut the power to try solve some audio interference issues on the video stream. Auxesis and I was quite angry at this, because they did it with no warning, cutting of the speaker mid-sentence. I’m sorry, but I paid a fair bit of money to be here, and I feel that the organisers should prioritise towards the people who are actually attending the conference in person. There was a related matter towards the end of the day, where a speaker couldn’t come to one of the sessions, so we ended up having a free-for-all discussion. One of the A/V guys came in bitching that we should be talking into the microphone, because the people on the stream were complaining. I’m sorry, but the people on the stream are not paying anything to watch the stream, and they are free to drop into the IRC channel and start their own conversation.
Next we moved up to the Distro Summit miniconf, and we watched the vcs-pkg talk, which was about how to standardise patch management across distributions. There is currently a problem in how to approach managing distribution-specific patches, as well as fixes which are waiting to be merged upstream, across multiple upstream branches and multiple distro branches, and multiple distros themselves. This project originated from Debian, but they’re very keen to work with other distributions to arrive at a common solution - to encourage different distributions to share features or fixes.
We went across the road the the Felix cafe to have lunch. I ate what was probably one of the most delicious burgers I’ve ever had, a Wagyu beef burger. We started talking about the problems of integrating language-specific package managers (Python Eggs, Ruby Gems, Lua Rocks, etc.) with distro package management systems (which is also what the up-coming talk at the Distro Summit miniconf was about).
The talk at the Distro Summit miniconf was from a Gobolinux developer, talking about how they approached integrating language-specific packages into their distro package manager. What they’ve done, is they write wrappers over the top of language-specific package managers, and defer dependency/version handling to them as well. So, you can have distribution packages which depend on language-specific packages, and they will be installed using their respective language-specific package manager. This apparently works really well, but there are issues with reverse dependencies (ie. how can ruby-gtk depend on gtk+?). This is a problem I’ve often thought about, but haven’t arrived at a good solution. I think it’s good that Gobolinux have taken an initiative to actually try a solution, which, while not perfect, gives us a focus point of discussion.
Moving back to the Open Programming Languages miniconf, the next talk there was An Intro to PyPy, which was an interesting overview of what the PyPy project is. It started out as a Python interpreter written in Python, but has since evolved into a very generic tool for converting a subset of Python (RPython) into lower-level code (C, CLR bytecode, JVM bytecode). PyPy allows you to separate the language implementation, from the back-end generators, from the “language feature” generators. The sort of language features you can just “plug in”, include JITs, GCs, and various threading implementations (STM, message passing, normal threading).
Then Rusty took the stage to give us a talk about his experiences with Talloc, and how it has affected the design of his code. He started off by emphasising, that if you’re not working close to the hardware, and you’re using C, then you’re probably using the wrong language. Talloc is a tree-based memory allocator. It allows you to allocate memory based off existing allocated pointers. By doing this, you’re organising all your “objects” in memory into a tree structure - which means you can easily clean up: freeing a parent will free all of its children. Additionally, to aid with cleanup you get the ability to hook up destructors to pointers. Rusty was explaining that the use of Talloc has changed the way that his code is structured, and it makes it easier to spot bugs earlier (ie. when two “objects” seem to depend on each other). The other cool thing is that you can generate a graph of all the “objects” in memory, which is very cool for visually spotting memory leaks.
After this, it was time for the lightning talks.
The first lightning talk introduced Mercury, which is a vaguely Haskellish, statically typed, function, pure language - but it uses a slightly different typing system so it’s not as monad-heavy. It’s also been out for around 15 years now, so has a fairly mature implementation.
The next interesting lightning talk was an introduction to the Disciple language and its DDC compiler, by Erik. It’s a language that’s a fork of Haskell, but has various extensions to the type system that fix some of Haskell’s type issues, as well as reducing the amount of monadic code you need to directly write. Erik highly recommends that people interested in this stuff read Ben Lippmeier’s thesis about this.
Someone got up and was talking about how compilers and programs these days have grown too big, and maybe we need to take a step back and cut out some of that approach by taking more radical approaches to our programming languages. The suggestion was to look more into concatenative languages, in particular Joy, but also including Forth, Cat and Factor.
Finally, Tim Ansell got up to announce that he and Richard Jones have been discussing about the possibility of hosting a PyCon in Sydney sometime this year. He put out a call for volunteers/interest, and it’s very early times at the moment, but I’m hoping this will go through. I volunteered to help out a bit with the organising committee, as well as the possibility of using Zookeepr (the system that powers the LCA website) for it as well. There was a PyCon held in NZ recently, and it apparently pulled in over a hundred people, so hopefully a Sydney one would be able to pull in even more.
Pre Linux.Conf.Au 2010
Jan
2010
Flying out today, I had to wake up extra-early at 4:30am in order to make the trains to the airport. The night before, I had done my online check-in, so once at the airport all I had to do was check in my bags - and as Qantas has a separate queue for online check-ins, this was really fast. They even printed me out a proper boarding pass (you print your own and bring it with you). Totally going to do that in the future as well.
I managed to meet up with James Purser, as well as some other LCAers who were on the same plane. We had a bit of a chat about Google Wave, its problems, and the cool stuff that people such as James are working on (ie. federation, and the upcoming new Python wave robot APIs).
The flight was mostly dull, as flights are, but I started reading Charlie Stross’ “Halting State”. I figured I should read it soon, as it’s near-future sci-fi, and one of the events described in the books has apparently recently actually occurred. So far, it’s a fantastic book, but I’m not that far into it yet.
Arriving in Wellington, ended up in a shuttle bus with some other LCAers, though while they were only going to the U-stay, I was going further as I was going to stay with friends (i386 and auxesis). There was a hilarious moment where some woman wanted to be dropped off from the shuttle at a particular spot, and the shuttle driver just stopped in the middle of the road! People started honking their horns, and we created a traffic jam that was backed up as far as the eye could see. There was a maori builder in the house, laughing his arse off about it as well.
Once I got to Brandon Street, where my apartment apparently was, I quickly realised that while the apartment documents that i386 had forwarded to me had the code to open the box where the keys to the apartments were held - it did not actually specify the room number. This was on the envelopes containing the keys, which had been picked up by i386 and auxesis (arriving the day before). I never enabled global roaming on my phone, and with no local sim, I had no way to call them to come down - so I stood in the street, found some wifi, and bitched at i386 on IRC, which fortunately worked.
The apartment we have is fantastic, it’s clean, it has a nice big kitchen, bathroom and laundry - and the lounge area is huge, and has very, very comfortable suede leather couches. The wifi situation is a bit poor, we can only access the apartment’s hotspot, which is stupidly overpriced - but we have some ideas on how to fix this situation.
After going to the conference venue to register, we discovered that there was a Belgian Beer Cafe/Bar on block next to our apartment. We went there and had totally delicious beers and food. I had venison sausages, and for desert Belgian waffles. To go with the waffles, I also had a cherry beer (Kreik), which was delicious.
Then we came back to our apartment and talked into the night.
Borderlands Browse Source Released
Nov
2009
I’ve just put up the source code for Borderlands Browse up onto launchpad, here: http://launchpad.net/borderlands-browse
I’m releasing it under the BSD license - I would have GPL’d it except that one of the components I’ve used isn’t GPL compatible. You can also file bugs and stuff at the launchpad project page.
I also released a new version today which fixes some internal issues, which should make it a bit more reliable in getting connected.
Borderlands Browse
Nov
2009
I’ve been playing the excellent new game Borderlands recently, which is an FPS/RPG hybrid. One thing that really annoyed me (and others) however, was the built-in server browser. Co-operative play is one of the major fun points of this game, and finding a server to play on is currently a nightmare. The built-in browser lacks filtering, and does not display countries or latencies. Also, it seems to miss many servers.
I managed to track down a neat little command line tool called gslist, which is an open source game server query tool. It took me a while to work out the right combination of arcane command line parameters in order to actually get a list of games out of it. Using a command line tool like this, under windows, is pretty unwieldy - especially if all I want to do is quickly find a game and hop in. In addition, I couldn’t get gslist’s ping functionality working, so I couldn’t filter games out by latency.
So, I decided to write a Borderlands-specific frontend to gslist in C#. I chose C# because this is only useful on Windows, and because C# apps are trivial to deploy on Windows. The result is Borderlands Browse. I’ve had a few people test it already, and they tell me it works well. One thing to keep in mind, is that you should be logged into GameSpy within the game for it to connect to servers (ie. don’t logout in-game, just hit escape to get out of the online menu). If you just end up at the main-menu, chances are that either you weren’t logged in - or the server didn’t let you connect for some reason (firewall, full server).
Interesting things I learnt during this project:
Storing settings for your app is as easy as going into your project’s Properties folder, and into the Settings.settings file, defining your settings in there, then simply using Settings.Default.YourSetting throughout your app.
ClickOnce deployment is awesome for quickly being able to churn out an installer (with self-updating capabilities!) out of a .net app. Though working out the right parameters (especially when you’re not running IIS or a site with frontpage extensions) can be tricky.
I’ll post the source up once I get around to working out a license and maybe doing a bit of a cleanup.
