Tag Archives: tucs

A personal history of TUCS

After three years in the job, I’ve finally relinquished the role of President of the University of Tasmania Computing Society (better known as TUCS). The years I spent as President spanned the last year and a half of my time at uni, and the first year and a half outside of that life — it’s something that’s been a pretty constant thread over the past few years, and it’d be a shame if I didn’t take a moment to dwell on my time in the role.

My first year representing TUCS was 2008: I’d come back to uni having attended my first Linux.conf.au in Melbourne, fresh with the knowledge that it would be held in Hobart the following January. The previous computing society at UTAS, the Internet Developers Society had elected to change its name at the previous year’s AGM, and with that new start, I decided to run for the exec of the society. I didn’t really have any aims at the time I ran, save for making the Uni computing community closer to the Open Source movement that I knew and loved at the time.

It was with that that I decided to organise the first of the TUCS Tech Talks. It was a talk by myself on introductory Python. I think I spent the best part of two weeks writing, tweaking and rehearsing that talk, and learning how to get screen recordings going. To my astonishment, the talk was amazingly well-recieved: the room was packed, lots of questions were asked. But much more than the success of my own talk, what astonished me was that people at the barbecue after the talk were telling me about how they wanted to present their own. And a few weeks later, so it was. And the following semester, we had talks every other week, on topics ranging from StarCraft strategy to iPhone development — the advent of tech talks at TUCS exposed a strong enthusiasm for sharing knowledge with others, and it brought our society into great stead with students, staff and the broader tech community in Hobart.

It was at the end of that year that I nominated as President, and happily, I was elected so. And when January rolled about, Linux.conf.au came to our home campus. Whilst TUCS wasn’t really involved with the event as much as I’d have liked, I did spot an opportunity for TUCS to contribute a small part — we ran a barbecue for student and hobbyist delegates to LCA as a way to help our members to engage with the rest of Australia’s tech community. This ended up being the first Unprofessional Delegates’ Networking Session, and it’s an event that I have continued to run at LCA ever since — for the 2012 conference in Ballarat, we brought the UnPDNS format back to the format that we ran for the first time in 2009, and the mood was as good this year as it was in 2009. It’s an event that I’m proud of starting, and the event happened because TUCS members contributed so much to getting that first UnPDNS organised in 2009.

Our Tech Talk schedule improved substantially that year, too. We had the first of our talks from then-Ph.D student, Jonathan Adamczewski on development for PS3 devices. He’s presented almost every semester since then, and his topics have been both diverse and exceedingly in-depth on whatever topic he chose to cover — my personal favourite was a talk showing how “Hello World” programs actually work on Linux systems. We also had the first of our talks by Paul Fenwick — that year, he packed out the tiny seminar room we were using for tech talks with his fascinating insight into the info you could glean from the Facebook API.

The other great discovery that arose from the talks series at TUCS was our frequent series of Lightning Talks — once per semester, students came to share three minutes of whatever insanity they decided they wanted to talk about. We’ve had talks on everything from Alex Berry’s experiments with the postal service; to self-devised esoteric programming languages; to buyers guides for headphones. These talks turned out to be a lot more fun than I could ever have hoped for, and they’ve been a great show of the minds that the society has attracted over the years.

And so it was that last year, I found myself away from Hobart on a very frequent basis, and I came to the conclusion that I couldn’t contribute to TUCS on the level that I had in previous years. Though I tried to give up the post last year, with nobody to replace me, I found myself in situ for a third year. The time I did have to contribute to the role of President last year was spent finding and preparing suitable replacements to come on board the next year. Thankfully, new members with huge amounts of drive started to appear — we ran end-of-semester events for the first time since 2009. We ran an end-of-year Quiz Night, which was a huge success for the society, and showed that the society had strength and enthusiasm to continue on for years to come.

Of course, my own contribution as President over those years did not a society make. The execs who I served with over the years made the society great. The treasurers, Michael Ford, Luke Hovington and Matt D’Orazio all helped make sure that the society was profitable every year I was involved, and keeping on top of grants from the Union. Matt, along with Tim Nugent made sure that the LAN parties that IDS had run for years before continued on well into the TUCS era. Luke Hovington, our tireless sysadmin, kept our old box alive on duck tape and twine, and is overseeing the transition to a new server box with Matt. And Eloise Ducky, who went from being the squeaky year 11 student who showed up on societies day in 2009 to being the person whipping me and the rest of the society into shape as 2011 came to a close.

And so, my term in charge of the society has come to an end — I feel that my hope of creating a community in which students could share their love of computing with others was met; along with keeping the society as bridge between students and university staff, and the IT industry more broadly. They’re goals that a Computing Society at a university should hold at the forefront of what they do, and I think it’s the reason why TUCS is held in high regard.

I hope the years that I spent in the society have changed it for the better — it’s been a lot of hard work, but it’s work I’ve enjoyed, and it’s a role that I’ve greatly relished filling. And thanks to all of the TUCS members who elected me to the role in the first place, but saw enough in me to re-elect me to the role for the following two years. I hope you think it’s been worth it.

Whilst I wasn’t the first President of the society, I was the last. The AGM last year removed the roles of President and Vice-President in favour of holding two Co-Presidents’ offices. I’m sure Eloise, along with Ben Lea will fill these roles with great enthusiasm and with the goal of making the society the best it can be for its members (take care of my baby for me, OK?). Whilst I’m staying on in the executive as a general representative for the rest of this year, it’s going to be interesting to not be in charge of the place.

Photo credits: Adam Harvey, various photos by myself.

Cocomo: An experiment in metaprogramming in python

Friday saw the second edition of the UTAS Computing Society Lightning Talks, if you haven’t seen them already, I highly recommend that you check them out — this semester’s were at a very high standard indeed, and I wish I’d printed out more certificates for good talks :). My talk was a demonstration of using metaprogramming in Python, though that’s not what it seemed to be about.

An introduction

I went to the Apple University Consortium’s Cocoa Workshop at the University of New South Wales in February of this year, it was a heap of fun, and we learnt heaps whilst there. One of the key distinguising features of Cocoa is its use of verbose English method and attribute names, the idea being that each line of code should make a reasonable amount of sense when read aloud, hence:

NSString *str = [[NSString alloc] initWithString @"Hello World!"]

does indeed allocate memory to hold a string object, and initialises the newly-allocated memory with a string containing “Hello World!” (this code is highly redundant!). Supposedly such a naming scheme allows coders to write code that is easily maintainable by the original coder, and easily learnable by people who pick up the code for the first time.

On the other hand, my friends, collectively known as Maclab (named after the room at UTAS we inhabit) have developed a rather unique vocabularly, which in particular involves replacing as many words as possible with either ‘thrust’ or ‘fork’, so “Thrustingly thrust the forking forker” is not an uncommon utterance amongst my friends. If this is indeed their usual mode of conversation, then Cocoa’s way of identifying methods and attributes is not necessarily going to be a particularly intiuitive one. So, clearly, we need a version of cocoa that meets their needs.

The setup

So, conveniently, Apple provide a comprehensive version of the Cocoa API, thanks to the PyObjC project. We can therefore use the Python bindings for Cocoa facilitate our new version of Cocoa. Since Cocoa has a very consistent naming scheme, we can simply perform string replacement to translate from our maclab language to the standard cocoa language, using a routine somewhat like this:

 def translate(inp): ''' Translates an input string from key language to value language ''' for i in LANGUAGE: if i[0].islower(): inp = inp.replace(i, LANGUAGE[i]) inp = inp.replace(rtitle(i), rtitle(LANGUAGE[i])) else: inp = inp.replace(i, LANGUAGE[i]) return inp def rtitle(i): return i[0].upper() + i[1:] 

Here, LANGUAGE is a dictionary, with keys in the language code will be written in and values being the target language (in this case, Cocoa). There’s not all that much of a sophisticated nature going on in here. Now that we have a method by which we can translate our attribute accesses, we can get to the meat of the the code.

The implementation

To achieve the new API, we need to use a technique that I will call proxying. This involves the use of objects whose sole purpose is to intercept attribute accesses and calls to an underlying object. In this case, the point of intercepting the calls and accesses is to perform translation from our new objects to standard Cocoa objects. In Python we can do this by overriding the standard attribute access and call methods.

First up is __getattr__, the attribute accessor method — for this, we are passed a string; the name of the attribute that we’re looking for, which we translate, and then attempt to access upon the method on the underlying object (in this case, self.__u__). There is one slight hitch: in certain cases, we may not want to translate the attribute name. This is true, in particular, of the attribute that represents the underlying object. Hence we provide a REAL_ATTRS list, for which we use the default __getattr__ method for. This results in code that looks something like this:

 def __getattribute__(self,name): if name in REAL_ATTRS: return object.__getattribute__(self,name) else: new_objectname = "self.__u__.%s" % translate(name) new_object = eval(new_objectname) return CocomoProxy(new_object) 

Notice that we use eval to perform the lookup? It turns out that __getattr__ doesn’t work universally, whereas . notation does — so we use that for less failover.

Being able to call methods on the objects is important, but slightly more difficult — we want behaviour to be maintained, so we need to make sure that proper Cocoa objects are passed as arguments, rather than the Proxy objects that you may have originally dealt with. We can do this with Python’s argument unpacking — we build up a list of arguments, and unproxy them as necessary:

 def __call__(self,*a, **k): new_a = [i.__u__ if type(i) == CocomoProxy else i for i in a] new_k = dict( (translate(i), k[i].__u__ if type(k[i]) == CocomoProxy else k[i]) for i in k) return CocomoProxy(self.__u__(*new_a,**new_k)) 

We may also need to deal with iterators. This can be done using a standard generator function, thusly:

 def __iter__(self): for i in self.__u__: yield CocomoProxy(i) 

Finally, there may be legitimate reasons for extracting Cocoa objects, these include printing strings, so we provide an accessor method called no_really:

 def no_really(self): return self.__u__ 

And that’s the entire implementation! The final thing we need to do is provide a pre-proxied version of the base module for Cocoa. Let’s call it GypsyMagic.

The payoff

So now that we have a working bridge from Maclab English to Cocoa English, we can take this sample code that puts some stuff into an array, and then prints it:

 import AppKit hworld = AppKit.NSString.alloc().initWithString_("Hello, World!") arr = AppKit.NSMutableArray.alloc().init() arr.addObject_(hworld) arr.addObject_("Boop!") for i in arr: print i 

And write it in the far more palatable:

 from cocomo import GypsyMagic hworld = GypsyMagic.OGMouthWords.subsume().makeGogoWithMouthWords_("Hello, World!") arr = GypsyMagic.OGForkableTrinketHolder.subsume().makeGogo() arr.thrustinglyThrustForker_(hworld) arr.thrustinglyThrustForker_("Boop!") for i in arr: print i.no_really() 

If you’re interested in seeing how it all fits together, see Cocomo’s website.

The Week in Review…

Time for me to enumerate a few things that have happened of late (in reverse order of occurrence, naturally), since it now seems like the time to do so.


I handed in my Computer Science term project today, which, I suppose means that my academic year is now complete. I’m fairly happy with how the semester’s progressed, every unit that I studied (including the two that I chose on a whim) has been excellent, which is more than I can say for previous semesters. Analysis (Real analysis to be specific) was absolutely fantastic, and I’ll be doing my best to enrol in the follow-up functional analysis unit (I’ve had it suggested to me by several people, and I’m convinced), and it’s certainly made the maths major I’m now enrolled in seem like a very good idea.

As far as I can tell, exams went well, but I won’t know for certain until results are released next week (I’m very confident with my two maths units, Graphics is a different story (though I don’t recall doing as badly as the lecturer claims the class as a whole went)).


In other (though slightly Uni-related) news, TUCS (The UTAS Computing Society) had its Annual General Meeting for 2009 last week, and as well as discovering the joy of barbecued* Woolworths’ Quantity Burgers (they’re excellent, really!), I was elected society president for 2009. The rest of the exec are also a truly awesome bunch of people, so the future certainly looks bright.

TUCS T-shirt

TUCS has run some excellent events in its inaugural year: our tech talks were, in general, wildly successful, amongst other things. Thanks to that, we’ve become what appears to be one of the most active societies on campus. I’ll be doing my best to make sure that we can replicate, or even better that next year. (If you’re a speaker, or know any good ones, and would like to give a talk, let me know!)

In related news, we also took delivery of some particularly awesome TUCS-Branded T-Shirts just after exams — we’re particularly happy with how that went and will probably do it again next year.

(*I will definitely be approving funding for a new barbecue for the society… the current one is truly dreadful)


Last week-ish, I had dinner with some members of the Linux.conf.au organising committee. Though much of what was discussed must be kept under wraps (it’s thoroughly exciting, I promise!), I can tell you that the conference is shaping up to be most excellent, and if you haven’t already booked your ticket, I suggest you do so as soon as possible!

That is all for me for now, more news as it comes (I hope!)

TUCS Tech Talk Photos

TUCS Tech Talk #1, originally uploaded by Christopher Neugebauer.

As I mentioned previously, TUCS had its first tech talk on Friday (delivered by myself, on the topic of Introductory Python), this is the first opportunity to show off photos from it. I was rather impressed by the turnout (there are a few people off to the side that can’t be seen in the frame).

TUCS Launch (Tech Talk etc)

TUCS had its launch event yesterday, which consisted of a Barbecue, membership drive, and tech talk.

The Membership front was fairly successful, given that we managed to sign up somewhere in the order of 7 new members (which is not bad given how late in the semester it is, and that we weren’t offering Alcohol at the event :)), hopefully we can get a few more before the end of the semester, as it would be nice to get some people who aren’t part of the “usual crowd” to join in.

The main reason for this post was that I delivered the tech talk, on the topic of Introductory Python. Overall, I think it went fairly well, although I mistimed the talk such that I had to completely miss one section of the talk (which is a reminder of my debating days… but let’s not get into that). Anyone who wants to comment on my talk (except for the sections where Bruce crashes — I already know about this) is quite welcome to — it’s available in its entirety at Google Video

The day was quite successful. Here’s hoping that TUCS can keep getting stronger!

TUCS Launch

Friday was our the first meeting of the new UTAS Computing Society Executive, which incidentally, was the first under our new name (TUCS). Since then lots of progress has been made:

  • We launched our new Website, www.tucs.org.au.
  • We began planning for the launch day for the new society, which is scheduled for Friday, May 2. We’re having a barbecue, and performing a membership drive (since we didn’t do that at the start of the year, in order to get the new society in order).
  • Started a new series of Tech Talks. I’ll be giving the first one on introductory Python, and we’re planning on making this coincide with the society launch.

All in all, it’s a somewhat exciting time to be doing Computing-related stuff at UTas (here’s hoping it stays that way!)

Goodbye, IDS; Hello, TUCS!

Today was the AGM for the UTas Internet Developers’ Society. Other than the usual blather that occurs in AGMs for these sorts of things, we’ve approved a change of name to TUCS (or rather the Tasmania University (union) Computing Society). For the moment this name change is purely cosmetic (as we really haven’t done that much in the way of Internet Development for as long as I’ve been at the Uni. The new name (in my opinion) reflects the membership, and the aims of the society a lot better.

One item of Business that I raised was the upcoming Linux.conf.au 2009, which you probably already know by now is being held at the University of Tasmania in Hobart. It’s been resolved that the Society establish better ties with the Free Software/Open Source Community (in Tasmania, in Particular with TasLUG) with the intention of better promoting Free/Open Source software amongst the student and staff body in the leadup to the conference; and I ran for the executive (successfully) on that basis.

Here’s hoping it’s a successful year for the society (which now has a cool name!)