Noticeably fewer people at last night’s meetup, on account of the crap weather.
Introduction to Node.js
There are a number of features that make the platform popular. Firstly, it’s incredibly fast in terms of development and runtime, according to a couple of developers I spoke to. Applications can spawn new processes and run them concurrently. Node.js also has APIs that allow code to interact with the hardware, ports and sockets.
Deploying and Changing Code
Slightly different from the subject I posted on my site yesterday, as I thought this was about automated deployment. This was actually Matthew MacDonald Wallace’s little rant on the importance of testing code properly before deploying it on producion systems, and thereby not causing problems for the sysadmins. Several useful tips were given here:
* Every change to the system should be documented. This provides an audit trail and enables any problems to be traced more efficiently later.
* Testing code fully before deployment is possible by simulating the production environment using virtual machines.
* Make sure the system is scalable, or at least capable of handling unexpected loads quickly.
* There are also open source solutions for change and configuration management: Puppet and Chef. I’ll look more into those when I get the time.
Finally, there was a quick explanation of the ‘DevOps’ concept: having developers and system administrators working together in the same team, which apparently makes life so much easier.
AAA Game Engines
Ian Thomas gave an overview of AAA game engines, their architecture, and how they’re used. Basically the game engine is a platform, in the sense developers can keep re-using it.
According to Ian, almost every games development firm has its own engine, and almost all engines are coded in C++, the reason being memory management is critical to ensuring the game runs efficiently, and to avoid memory fragmentation.
The game engine’s architecture includes a platform abstraction layer, which interprets between the engine’s system calls and the APIs for whatever games console. Porting an entire game to another console should be a simple matter of modifying the one layer, and not the rest of the code.
Interestingly, almost all games with graphics since the 1980s are created with the following:
* Game Objects: The characters in the game, and perhaps a few other elements in the environment. From the programming perspective these are simply aggregators of smaller data objects provided by the game engine.
* Static Geometry: The environment in the game, which is loaded and unloaded during runtime as required.
* Heads Up Display (HUD): A static layer on the interface, which displays variables, or representations of the variables during runtime.
UPDATE: Rob Duckett has made the Node.js presentation material available here: http://robinduckett.github.com