Intern report - biz site reboot and prototyping library added to Turbulenz
I’m Shaan Malik and did an internship at Turbulenz for 4 months, between my 3rd and 4th year studying Computer Science and Maths at Imperial College, London.
When applying for internships, the thing that struck me about Turbulenz was their Quake WebGL Tech demo (a more recent tech demo). It was beyond what I thought was possible with HTML5 and WebGL, given the handful of WebGL demos I’d seen prior to that, and so it piqued my interest. I figured getting to use a game SDK as well as seeing how one was made wouldn’t be a bad way of spending an internship.
It also involved picking up more libraries than I’d ever worked with before, including: Bootstrap for a CSS grid layout, Sass as a CSS extension to making writing the styling more concise, jQuery for bits of DOM manipulation, and tornado.template as a python templating system.
Of course, there was a purpose to using all of these libraries: Being a business site, cross-browser compatibility was a priority, but it was something I quickly confirmed was challenging to do. The CSS in Bootstrap and the JavaScript in jQuery having been tested in multiple browsers went some way to alleviating these sorts of problems. Using a templating system allowed me to write some python to generate html snippets for things like the section navigation above each section on a page. All that needed to be specified were the section names in a list, and the script would handle some things automatically, like generate i.d’s for hashlinks, and surround the active section with a div tag and a class so it could be highlighted in the CSS. This saved having to write some HTML by hand, as it would’ve been error-prone and tedious to change by hand, and also paid off when I needed to make quick changes coming up to the release date for the site.
A nice thing is that, when I say I worked on making the site, people assume I did the design work too, which I don’t always have to correct them on. But seriously, the reason it looks as good as it does was because of the keen eye of the designer (Thanks Ben!).
My next project, dubbed “Protolib”, involved designing an API to prototype games, by presenting a simple interface that provides several functions to let you perform basic actions like playSound, loadMesh, draw3DLine, etc. The purpose was that it should allow for writing shorter game code, and be faster to learn than the full SDK, by handling some necessary setup code internally.
Of course, before I could start, I needed to figure out how to do all of the things Protolib needed to do using the SDK, and so I just started writing a sample app and tried adding an example of each feature I would need to put into Protolib. In hindsight, I’m lucky for the team’s good humor when I was still getting my bearings, because I was so focused on figuring out the SDK that I didn’t pay any attention to how odd my sample started looking. It involved a tree orbiting above a wooden floor, which disappeared when you pressed space.
I did eventually produce a neater sample while finishing off the Protolib API, with (lots of) advice from Adam Langridge on the game team. The purpose of this final sample was to demonstrate how to use Protolib, showing as many features in as few lines as possible, without sacrificing readability. The intention was that by studying the sample, a developer could quickly figure out how to use Protolib. The final sample was < 200 lines, and included logic for a basic camera controller. With help from James Long on the game team, I refactored the game code into a particular structure which allowed me to handle the game update loop externally from the game code, which simplified the game code further.
To finish off the project, Adam suggested running an office 1 hour game competition: to make a game in Protolib in an hour, with a Wario-ware theme. Since I hadn’t any experience in game competitions, I went for something simple that I could expect to complete in an hour, and went for comedy over substance. The goal was to “Push Coneman off the roundabout”, as I recall writing, and the controls were alternating the Left and Right arrow keys as fast as possible, which made the roundabout spin faster. Almost everyone that played it found it hysterical, which was of course exactly what I was going for.
In all, what was most worthwhile was the experience of working in a team, and getting into the habit of discussing potential solutions to problems, just to gain feedback. I also learnt (too late) that when it comes to refactoring and writing documentation, it’s really not a good idea to just use a text editor (Vim). As I leave to venture forth into the fourth year of my degree, I’ll miss playing Trials Evolution on game nights, which was also a lesson in how to make bugs entertaining rather than frustrating (the sound of a guy screaming while falling off his bike, stuck on a loop after you finished a track is a feature!). The work environment is great, and it was a great introduction to working in the Software Industry, but was most useful in that it showed me how far I still have to go.











