Now migrating to Zohar Res Novae. Subversion and Trac are down and should be back up in a few hours.
News from “that” place.
Whoa, it sure has been long since I wrote on this blog. Let’s fix that, shall we?
*Ahem* This is Jean-Francois Roy, live from Montréal-Pierre Elliott Trudeau International Airport. Tonight we have a special program, with exciting news about my various projects, and more! For a recap of what my summer projects are, have a look at Summer game plan.
Airport?
That’s right, I am leaving tomorrow today for beautiful San Francisco to assist Apple’s yearly Worldwide Developers Conference. In short, this is the most exciting week of the year for all Mac developers, with probably over 3000 of us converging on Moscone West convention center for sessions, labs, thematic lunches and evening fun in downtown clubs.
I thought it would be entertaining to post some pictures of where I currently am. After all, I am showing my geekiness by doing an all-night pre-WWDC coding marathon. Unfortunately, I only have my cell phone’s digital camera at my disposal, so these won’t be the greatest pictures ever. In any case and without further ado:

A table, some power, energy drinks. What else can you ask for?
Riven X
Truth be told, I have neglected Riven X these past 2 months. Between World of Warcraft, Longinus (the name of my World of Warcraft DKP and raid statistics system) and my summer internship at CHUL, I simply have not had the time to work on it seriously.
However, Riven X will be my priority at WWDC, as far as my projects are concerned. There are several components in my engine that need improvement, and I will take full advantage of Apple’s engineers in the various labs to address known issues. Stay tuned for more!
Longinus
Ah, so much to say about this. The project has become a lot bigger than I originally anticipated. Its objective is now to be a generic raid statistics tracking system as well as a generic (meaning extensible) item distribution system. An IDS is basically a method by which a guild distributes items that drop during raids to participating members. Alexstraza Dragon Riders uses slightly modified English auctions for example, while Trinity uses a zero-sum-based system.
There are two major components to Longinus.
The first is a World of Warcraft interface AddOn (thus written in Lua and XML) which handles gathering data during raids (such as player deaths, connection and disconnect events, joined raid and left raid events, boss fights (duration, outcome)) and in-game IDS functionality (for example, running an auction in the case of my guild).
The second is a Django-powered Python web application. Right now it only handles basic administrative functionality (officer checkout and commit), but I will eventually add public views to browser and consult raid statistics and all that good stuff.
The basic cycle of operation is as follows: an officer makes a data checkout. This essentially exports data the in-game AddOn required to function properly from the online database to a Lua file World of Warcraft will load (in WoW jargon, a saved variables Lua file). That checkout exists in the database and has a UUID, checkout timestamp, checkout officer, commit timestamp and commit officer (the latter two are of course initially NULL). There is no limit on the number of concurrent checkouts.
The officer then uses the in-game AddOn during raids for as long as he or she wants. However, after 3 days, Longinus will remind the officer, at most once per day, to commit back the data to the online database. When the officer does so, essentially by submitting his checkout saved variables file in a simple web form, the web application merges and updates the data in the database with the information from the saved variables file.
I’d like to finish by point (again) at the Trac wiki for Longinus. It’s got some interesting stuff, particularly the wowsv Python module, which not only loads Lua files (or Lua code as string data), but also serializes Python collections back to Lua code.
Wrapping up
Because Andrew is tired, I am going to wrap this entry now. Besides, I don’t have much else to report at this time. This was Jean-Francois Roy, for /dev/klog, in Montréal-Pierre Elliott Trudeau International Airport.
I am a big fan of Firefly and Serenity. So I chose the title scene at the beginning of Serenity to make sample bitstreams for my internship presentation. I realize I may be violating some copyright laws by posting these files, however they are short and the scene contains screen text for the various people who worked on Serenity. A fair trade, I say.
The source material is the Serenity widescreen DVD, title 3 of the main feature, which has a duration of 00:05:17.86. The MPEG-2 video elementary stream has a bit rate of approximately 5900 kbps and a resolution of 720 by 304 (2.53:1). The AC-3 audio elementary stream has a bit rate of approximately 340 kbps and 6 channels (5.1 layout).
The first file is a high-quality encode using the main profile. The characteristics are as follows:
Video
Bit rate: 2000 kbps (CBR mode)
Resolution: 720 x 304 (2.35:1)
Frames per second: 23.98 (NTSC FILM)
Encoder: x264
Coding tools: main profile, level 5,1, B slices (max one), CABAC, trellis, intra-picture 4×4 analysis, hexagon ME pattern, two pass
Audio
Bit rate: 192 kbps (CBR mode)
Channel layout: stereo
Sampling rate: 48000 Hz
Encoder: FAAC
Coding tools: low complexity profile
Download the Serenity high quality clip (82.31 MB).
The second file respects the DMB specification in terms of coding tools, bit rate and resolution. It gives a feel for what people may expect to see on their cell phones, PDAs and other mobile devices within a few years. The characteristics are as follows:
Video
Bit rate: 300 kbps (CBR mode)
Resolution: 320 x 128 (2.35:1)
Frames per second: 23.98 (NTSC FILM)
Encoder: x264
Coding tools: baseline profile, level 1,3, intra-picture 4×4 analysis, hexagon ME pattern, two pass
Audio
Bit rate: 96 kbps (CBR mode)
Channel layout: stereo
Sampling rate: 48000 Hz
Encoder: FAAC
Coding tools: low complexity profile (does not respect the DMB specification, but no free HE-AAC encoder is available on Mac OS X)
Serenity_dmb_300.mov (15.19 MB).
This entry is in French because it mainly concerns Université Laval people.
En plus de mon rapport de recherche, j’ai dû écrire un rapport de stage et une présentation orale pour l’Université Laval. Cette dernière c’est déroulée hier avec plus ou moins de succès. Disons que j’avais beaucoup de contenu… beaucoup trop. Mais bon, je n’étais pas certain du niveau technique adéquat auquel l’Université s’attendait, alors j’ai visé vers le haut.
Voici donc mon rapport de recherche en format PDF (signature électronique) et ma présentation orale en format PDF (signature électronique).
Update May 24: Added Amendment 1 and corrected a sequence diagram.
Update May 22: I have added a GPG digital signature.
Update May 21: I have corrected a few mistakes in the research report.
I finished writing my research report for my winter 2006 internship at CRC a few days ago. It’s a rather lengthy document that covers the project I worked on, Digital Multimedia Broadcasting, H.264 and MythTV. It’s available from this blog in PDF format (digital signature) and is covered by the Creative Commons license.
On a related note, I will be posting some sample movies using H.264 video coding and AAC audio coding that comply with the DMB specification, to show what kind of quality we’re really talking about.
It’s long past time I wrote a little bit in here. Truth be told, I’ve been extremely busy these past 3 weeks, finishing my internship at CRC and writing my research report. But all that is coming to an end now, so let’s talk about what’s coming up, shall we?
- Summer internship: I’ll be doing some web programming this summer for the CHUQ, a high-visibility medical research center affiliated to my university. I’m really happy to have gotten that one, and I’ll most likely be able to work at home for extra convenience.
- Riven X: Work on Riven X has pretty much stalled for the aforementioned reasons. As soon as things have died down a little bit, I’ll pick up the pace again. My first objective is to come up with a solution to the MPEG-2 Audio Layer II decompression problem, which I will discuss in greater detail in an upcoming entry. Beyond that, my mid-term goal is to have first playable done by the time WWDC 2006 comes around. Although I still don’t know whether I’m going or not (it all depends on the WWDC student scholarship), if I do end up going, I want to have as much stuff done as possible to make full use of the expertise that will be available to me there.
- libblp: I’m going to update libblp sometime in the (not too distant) future to clean up its API and add BLP2 support. This is partly motivated by the next item.
- Develop a better DKP system for my World of Warcraft guild: World of Warcraft has been my time killer for a while now, and I’m interested as much in its technology as in its gameplay. My guild, Alexstraza Dragon Riders, uses a somewhat custom-made DKP system which is pretty much entirely manual right now and in my opinion is wholly inadequate. In any case, I’m planning the development of a DKP system that will use the same basic mechanism as the one we’re currently using (DKP auctions, essentially), but is a lot easier to use, both on the raid leader side and on the client side, and has other interesting features like a web component and a useful GUI. I’ve just started the design work, but I expect to have more to say about this project in the future.
Although one is never certain about the future, this is probably the gist of my summer.
I’ve been back home since late Saturday, however as you can imagine I since had to take care of a lot of things. Unpacking isn’t even done, but right now my priority is finishing my internship report. Once that’s done (I expect that to be tomorrow), I’ll come back and talk about the state of things for Riven X.
As they say, it’s good to be home.
Zohar went dead this morning and I haven’t been able to reach someone home yet to figure out what’s going on. Things should get back to normal this evening.
Incidentally, my internship was extended late last week and will end Friday April 28th. I’ll use this extension primarily to write my research report, which is nice because I’m still being paid ![]()
Zohar (my Subversion and Trac server) will be unavailable tomorrow (well technically, today, April 6th) morning due to a scheduled power outage back home. My family couldn’t tell me the reason for it, but that’s that.
Everything should be back up by the evening, and of course /dev/klog will remain available.
I know Core Media is late (according to my own deadline), but family visited last weekend so I couldn’t land as many hours as I wanted into the audio code (the last part missing).
I committed a mostly functional RX::CardAudioSource tonight. I didn’t test very small looping sources yet, but I don’t expect I’ll even encounter those so it can wait. Otherwise, I’m pretty happy with the performance of the audio engine and will begin work on RXSoundGroup tomorrow. That class basically manages one or more RX::CardAudioSource instances so that you can stop, start and fade in or out a set of sources at once. This is the direct representation in the Riven X engine of SLST records.
After that, I’ll need to add SLST record loading to RXCard and implement the relevant opcodes. Hopefully I’ll get this thing out the door by the weekend ![]()





