Wednesday, December 31, 2008

uvic rocks

Wow, the UVIC library has this great program called Gear2Go, where you can borrow video cameras and audio recorders overnight for school projects.

Two of the things I'm going to borrow to do a better video of SOMba are the Sony DCR-HC62 MiniDV and the D&M PMD620 Professional Handheld Recorder

Tuesday, December 30, 2008

Sunday, December 28, 2008

The Middle Show: The Great Ronald Jenkees

STS9 Collab - Using their drums to jam with!! FUN!




My dear sister Melissa gave me an OLPC for Christmas! Sweeeet! It's a great little machine, the best part is that when the backlight on the display is powered off, you can view the screen in light. This means massive battery life. It was perfect on the train down from Courtney to Victoria, I had Emacs fired up and was browsing through the source code of Marsyas.

OLPC Links:

Activated Upgrade
Autoreinstallation image
Getting a developer key
Hacking your XO
Test Network Configuration
Anaconda Kickstart
Hacking the XO at
Hacking Sugar
Hacking the OLPC XO Laptop - Part 1: Initial Setup
OLPC upgrade
Upgrading the XO
How to check the OS and firmware versions
Clean-install procedure - I had problems with olpc-upgrade, so I just did a fresh install and it worked great. I went from version 656 to 767, and it was a huge change, and for the better. Now the power button suspends the laptop. Much better.
OS images
JFFS2 - Journalling Flash File System version 2. Interesting, it says that it's journalled, but on my old 656 install, a forced powerdown caused the OLPC to wait for a long time as it checked the file systems.
Release notes for 8.2.0.


Overclock your OLPC from 433MHz to 566MHz. Um, probably not a good idea, but interesting.

Saturday, December 27, 2008

OLPC Mission, Part 2: The XO Laptop, design for learning

OLPC == rocks. Sugar == way too slow.

Solution: rewrite in C.

Saturday, December 20, 2008


For doing a screencast in Linux, definitely use "recordmyscreen" and not "xvidcap". I tried xvidcap recently on Fedora 10 and had weird hangs all over the place. It looks like it's xcb that is causing the problem, but there's no real way to fix it.

So just

sudo yum install recordmydesktop -y

and then to record your desktop just go:


and you're done. It saves the file as ogg, which uploads to YouTube just fine.

Now I'm trying to find a good Linux video editor program. Cinelerra just takes .mov files as input, and doesn't like the .mov files that ffmpeg converts. I'm trying LiVES, but it's a little wacky, and takes forever to import video. Kino also is the suck.

We need something simple and better. Not a lot of transitions and stuff, just a simple way to make videos from multiple sources.

Harmonic Metalaphone on Reactable

Thunderheist - Little Booty Girl

My current favorite song in the world.

completely random

I think that celebrity collage is pretty close to random:

another try



SOMba - Co-creative music generation by tracking dancers - Part II - from Camera

SOMba - Co-creative music generation by tracking dancers


Adobe releases AIR 1.5 for Linux.


Cool, it looks like OpenGL is making a rebound against DirectX. That is good.


A rant against stdio. Hmm, interesting.

concurrent haskell

agile git

old web


In computer science, currying, invented by Moses Schoenfinkel and Gottlob Frege, and independently by Haskell Curry,[1] is the technique of transforming a function that takes multiple arguments (or more accurately an n-tuple as argument) in such a way that it can be called as a chain of functions each with a single argument.



How man Coq programmers does it take to change a lightbulb?
Are you kidding? It takes 2 post-docs six months just to prove that the bulb and the socket are both threaded in the same direction.

More like this at Lambda the Ultimate.

Thursday, December 18, 2008

tricky part 2

Also had to do some symlinking as it couldn't find my moved vamp .h files:

sudo ln -s /usr/sness/sv/include/vamp-hostsdk /usr/include/vamp-hostsdk
sudo ln -s /usr/sness/sv/include/vamp-sdk /usr/include/vamp-sdk
sudo ln -s /usr/sness/sv/include/vamp /usr/include/vamp


I was having major issues installing sonic-visualiser from source. The problems arose because I wanted to compile my own rubberband and vamp plugins, and the lame qmake installation that sonic-visualiser uses couldn't find them.

To get around this, I just installed rubberband and vamp with yum:

yum install vamp-plugin-sdk-devel vamp-plugin-sdk rubberband rubberband-devel -y

Then copied their pkgconfig .pc files somewhere:

mkdir save-pkgconfig
cp /usr/lib/pkgconfig/* save-pkgconfig

Then removed the original packages:

rpm -e vamp-plugin-sdk-devel vamp-plugin-sdk rubberband rubberband-devel

Modified the prefix line in the .pc files:


Name: vamp-sdk
Version: 1.3.0
Description: Development library for Vamp audio analysis plugins
Libs: -L${libdir} -lvamp-sdk
Cflags: -I${includedir}

Copied these files back to the pkgconfig directory:

cp *pc /usr/lib/pkgconfig

And compiled sonic-visualiser.

Wednesday, December 17, 2008

Monday, December 15, 2008

flash debug

Debug and standalone versions of Adobe Flash Player.

Saturday, December 13, 2008

pulse audio

Pulse audio sucks. I just installed Fedora 10 and it was totally not working with either MPlayer or Marsyas, so I just took out all of the pulse audio nonsense:

rpm -e pulseaudio-libs pulseaudio-libs-glib2 pulseaudio-module-gconf pulseaudio-utils pulseaudio-module-x11 pulseaudio-core-libs pulseaudio-esound-compat pavucontrol libcanberra xine-lib-pulseaudio gstreamer-plugins-good gnome-settings-daemon alsa-plugins-pulseaudio gdm control-center gnome-applets totem-gstreamer libcanberra-gtk2 pulseaudio gnome-session orca totem gdm-user-switch-applet compiz-gnome plymouth-gdm-hooks totem-nautilus gnome-session-xsession totem-xine totem-mozplugin gnome-panel

Come on Fedora guys, get with the program and get some audio that actually works.


The basics of threads.


Macros in Clojure. Gotta learn Clojure one of these days.


Writing a game in Python with Pygame. Looks like a really nice API. I did a bunch of coding in Python for SOMba, and really enjoyed it. Python pretty well rocks.

I did a lot of the coding in C++ as well, with the C++ API in Marsyas, which also rocked.

Next week will be all haXe and Ruby on Rails.


distcc - a fast, free distributed C/C++ compiler

Friday, December 12, 2008

lisp + ruby + jvm

Calling Clojure from JRuby. This is where we start seeing some neat things happening. Calling Lisp code from Ruby inside the JVM with all those Java libraries. This is sweet.

Tuesday, December 09, 2008

Saturday, December 06, 2008


latex symbols. i heart latex.


jQuery in Action - A new book on jQuery. Want have.


alien comet

An alien comet might be in the solar system. That totally rocks.


I recently had a situation where I needed to screenscrape data from a website. I did it in Ruby with wget, which worked super well.

wget with --post-data rocks

wget --post-data="thingy=#{id}"

Turned out that just doing this didn't work, it had some kind of validation code that it was POSTing as well. To figure this out I used the excellent Tamper Data plugin for Firefox, which let me see exactly what data was being POSTed to the website.

It was then just a matter of using Ruby to scan through the page to get the data I wanted and output this as a .csv file.

cat map

web analytics

acid test

Opera 10 alpha aces Acid3 browser test

Nice. I use Opera and Firefox for my daily browsing, Opera for reading large amounts of information, it's tabbed browsing totally rocks.




Finally a good Objective C book.

So many languages, so little time.




More reasons why CouchDB rocks.



Get some love for Python 3000.


Statistics vs. Machine Learning.

After CSC 589 this year at UVIC, I finally understand Bayesian statistics. It's actually quite simple, and totally cool.


Friday, December 05, 2008

bear hoods


very small drums

One potential application for graphene (sheets of graphite only one or several layers thick) is as a resonator in nanoelectromechanical systems, in part because of the high ratio of stiffness to mass. However, the formation of large-area films of exfoliated graphene and manipulation of the graphene flakes are experimentally challenging. An alternative is to use a related material, graphene oxide, in which the graphene film is chemically modified with oxygenated substituents. Robinson et al. rapidly deposited graphene oxide platelets onto glass by spin casting along with rapid solvent evaporation, which formed ultrathin continuous films. These films could then be chemically reduced, and despite being as thin as 4 nm, could be released from the substrate by being dipped into basic solution. They could then be suspended onto substrates patterned with circular holes (between about 3 and 7 ?m in diameter) in order to form drum resonators. Laser interferometry revealed that these membranes resonate in the radiofrequency range and have quality factors up to 4000, which is comparable to those of diamond oscillators and exceeds typical values for graphene oscillators (10 to 200). This increase relative to graphene reflects the enhanced adhesion of graphene oxide to glass surfaces through surface oxygen groups. -- PDS

Nano Lett. 8, 3441 (2008).


Thursday, December 04, 2008

yes - The API for, Develop applications using radio now playing information gathered from thousands of broadcast and online stations



A podcast about programming Clojure.


Another person is stopping developing with Rails.

All good points, especially about the gems, which are not-well-thought-out, and the community problems. Also, I would add that the dramatic changes between releases also really suck.

But I'm totally going to keep developing everything in Rails, it fits perfectly into the plans I have for websites, and really does have some sweet syntax sugar. Mmmm, syntatical sugar... Tastes good.

moon and venus

Wednesday, December 03, 2008

Tuesday, December 02, 2008

Annie Hall



What Your Computer Does While You Wait. Interesting analysis of the Core 2 architecture.

amazon security rules

ai in games

Bots Get Smart - New uses for AI in computer games.

Interesting, Jonathan Schaeffer is one of the coauthors.

AI Landscape



ipe - is a drawing editor for creating figures in PDF or (encapsulated) Postscript format. It supports making small figures for inclusion into LaTeX-documents as well as making multi-page PDF presentations that can be shown on-line with Acrobat Reader.

Excellent program. Suggested to me by Dr. S. Ganti.

Saturday, November 29, 2008


Jericho - is believed to be one of the oldest continuously-inhabited cities in the world, with evidence of settlement dating back to 9000 BCE. Woah.


The Wurm Glaciation. This was the last glacial period.

Orca Song 2008


On File Systems - Current thoughts on Linux filesystems.



Sweet, Linux on the iPhone. Nice.


Good editors aren't better or worse, just different. Totally. People's brains just think different, so find the editor that fits the way you think the best.

My brain fits Emacs the best, although over the last 10 years it's been a combination of me making Emacs fit me better, and me changing my brain to fit Emacs better. I'll be using Emacs when I'm 90.


This is very cool, a GUI that changes based on the users skill level.

Totally the future. The interface should adapt to you as you learn it better. Emacs has a function where if you enter the full command name with M-x, it tells you the keys that could be used to type it, this adaptive interface is the next step in this.

Friday, November 28, 2008



mmm, Intel Core i7. Pretty.


An interesting article about how bitfields are not as cool as they seem. I never thought about it this way, interesting.

Wednesday, November 26, 2008

Justice vs. Simian - We Are Your Friends

D.A.N.C.E - Justice



last yelle for tonight, i promise.



more more more


Saw this on xlr8rtv. rock.


Processing 1.0 - The first non beta version of Processing has just been released. Sweet.


JS-909 - Drum machine in Javascript

Monday, November 24, 2008


A dilithium star this year, that's all she wrote. I just don't have time for a Hat Trick try this year. But I do have
the bragging rights that I only started one character and ascended her. My favorite, a Chaotic Female Elven Wizard.

Had 4 unused wishes left.

Man Nethack is sure simple compared to Slash'em, which is my prefered variant now.


total lol irl.

Rachmaninov - Piano Concerto no. 3 (Cecile Licad) 3/6

Watch for when the lights go out and she keeps on playing for a minute. That is deep knowledge.

Bruce Lee plays ping pong with nunchuck.flv



Covariance matrix
Math in Ruby
Matrix in Ruby
Matrix multiplication

I found that Ruby was very nice for doing some statistics with a Gaussian classifier:

covariance_matrix = Matrix.diagonal(var_x,var_y)
inv_covariance_matrix = covariance_matrix.inverse
determinant_covariance_matrix = covariance_matrix.determinant

Friday, November 21, 2008

sweet ruby goodness

Wow. Great tip here:

>> "%.2f" % 45.4324234321421
=> "45.43"

>> "[%s]" % "Hey you dirty old ruby, put me in brackets. NOW!"
=> "[Hey you dirty old ruby, put me in brackets. NOW!]"

For more complex substitutions, pass the arguments as an array:
>> "[%s] And a number:%.1f" % ["Hey you dirty old ruby, put me in brackets. NOW!",43.4323]
=> "[Hey you dirty old ruby, put me in brackets. NOW!] And a number:43.4"


minimal apis

old old old

Gobekli Tepe: The World?s First Temple? - 11,000 years old, crafted and arranged by prehistoric people who had not yet developed metal tools or even pottery.

We are old.


Art and code.

Code == Art.


The Opposite of Momentum - About problems with Ruby.

Yes. Definitely. I love Ruby and program all my scripts in it, plus all of my websites. But I'm learning Python and encourage people to learn Python instead of Ruby.

Kids, learn Python. And Ruby, if you have the extra brainpower.

Ruby is prettier, but Python will win.

gcc hacks

GCC hacks in the Linux kernel - The Linux? kernel uses several special capabilities of the GNU Compiler Collection (GCC) suite. These capabilities range from giving you shortcuts and simplifications to providing the compiler with hints for optimization. Discover some of these special GCC features and learn how to use them in the Linux kernel.


Sounds Like Bach - Essay on music by Douglas Hofstadter

Thursday, November 20, 2008


Alchemy - is a research project that allows users to compile C and C++ code that is targeted to run on the open source ActionScript Virtual Machine (AVM2). The purpose of this preview is to assess the level of community interest in reusing existing C and C++ libraries in Web applications that run on Adobe Flash Player and Adobe AIR.


CS 294-5 Great Algorithms. Cool.


33 exact string matching algorithms.

Check out the Horspool algorithm. He's from our department!

Monday, November 17, 2008

MC Chris - Nrrrd Grrrl music video

MARSYAS Genre Meter

so. totally. cool.

and this is from 2001!

got to do this in Qt.

zeroes and ones

Zeros and Ones, a course I am taking in January. Knuth rocks.

Sunday, November 16, 2008


Introduction to Dynamic Programming.

source control

Use source control like you would use save points in a videogame. Excellent analogy.

Friday, November 14, 2008




3d Wii Application

This is a small program which utilizes the Cwiid API to detect the x, y and z coordinates of an infrared light source. The intent was to make something which could demonstrate the posibilities of using the wiimotes in this alternative manner. Usually the wiimote uses an IR source to determine if it has moved positions. What this program does instead is uses the wiimote as a stationary sensor, which detects the position of the IR source. In addition, by using two wiimotes, it's possible to determine the depth of the IR source as well.


liblo API.


WiiOSC is a tiny Linux program to use the Nintendo Wii Controller as a control device for music programs.
It sends out the Wii data as OSC messages to a port of your choice, and can receive OSC data to turn on LEDs or the rumble.

love. it.

I'm using it in SOMba, my samba music generator program for dancers. Might rewrite it to more closely match what I need, but it's pretty awesome as it is.

tender tub



Strasheela is a highly expressive constraint-based music composition system.


hadoop is a software platform that lets one easily write and run applications that process vast amounts of data.

It's like MapReduce from Google, but how Yahoo does it (which probably means not as good). But it's part of Apache incubator, which is very cool.

Hadoop at wikipedia
is a dataflow programming environment for processing very large files.

CouchDB is also now in Apache incubator.
CouchDB at wikipedia.

This came from me researching a class I taught recently at UVIC on Functional Programming.

Charming Python: Functional programming in Python
Functional Programming HOWTO in Python
Ocaml - I couldn't figure out the OCaml logo, but the class figured out that it looked like a Camel. lol. droll lol.
From Monoids to Monads

Zwölftonwerbung - Twelve tone commercial


Thursday, November 13, 2008

Wednesday, November 12, 2008

14 second boot


synth - Sound synthesis using haXe targetting Flash 10. All the sourcecode is GPLed, sweeeeeeet!

Monday, November 10, 2008


fuck yeah sharks. this takes the lolcat meme to a whole different place.


For a course that I'm taking, CSC 546 : Operations Research

omnet docs
OMNeT++ in a Nutshell
omnet user manual
omnet API

zeros and ones


getc and termios
while getchar


select() is your friend.



MarLPC - The best part of this app is that it takes Open Sound Control (OSC) messages as input. It uses Qt to do this, and is a little funky, but not in a good way. I'm looking to do something similar with liblo instead.


wiimote + osc. Uses cwiid. Sweet.

Central Molecular Zone

Sunday, November 09, 2008



A mouse that measures Galvanic Skin Response.

rain music

A wall that makes music when it rains:

Thursday, November 06, 2008


I was having big problems with 'pdftotext' producing wacky characters that were making life difficult when I would edit the file. The trick is to set the encoding to ASCII7:

pdftotext -enc ASCII7 file.pdf

I added a line to my .zshrc with the following alias

alias pdftotext='pdftotext -enc ASCII7'

Tuesday, November 04, 2008


Emilia is 35 years old and is a choreographer and has her own
modern dance company. She has been commissioned to produce a new
dance piece for the opening of the newly refurbished Chisenhale
Dance Space in London. She wants to incorporate new media and
music into the performance, and has decided to use the SOMba system
to make the music for the dancers.

She first contacts a local Brazilian musician, Ayrton, to obtain
music for a few different types of samba rhythms. Ayrton provides
her sheet transciptions of these rhythms for each of 10 different
Brazilian percussion instruments. Aryton has a large collection of
percussion instruments, and records samples of each of them for

Emilia then uses the SOMba system to generate audio files for each
of the parts in the samba rhythms, using the transcribed music and
the recorded samples, both provided by Ayrton. She then uses the
SOMba system to produce a Self-Organized Map of the audiofiles.
She then tries out the different SOMs by using the graphical SOM
browser in the SOMba system. The first few maps she produces do
not fit in with her desired choreography, so she generates SOM maps
until she finds one she is happy with.

Emilia then choreographs and practices with the dancers in her
dance company, trying out different dance techniques, and different
timings for when the dancers show and hide their infrared glowing
orbs. The performance is a rousing success, and Emilia is invited
to Berlin to stage another performance.


Keti is a new music composer based in New York. She currently has
writers block in writing a new piece of music to be performed at
the Julliard School. Keta is at the stage of having a variety of
musical motifs that she is happy with, but is having trouble
putting all these pieces of music together into a unifed whole.

She first creates audiofiles of the various motifs in her score,
breaking these motifs into small one bar measures. Some of the
motifs are rhythmical, some are melodic segments and some are
environmental sounds. She then uses the SOMba system to create
three different Self-Organizing maps, one for rhythm, one for
melody, and one for the environmental sounds.

She then loads up three different instances of the SOMba GUI
browser, and starts placing the icons at different points in the
three different self organizing maps. She adjusts the volume of
each of the clips on the screen, and moves the clips around until
she finds a pleasing arrangement of sounds.

She then takes her 8 sound orbs and puts them on the floor of her
studio apartment, in roughly the places that she had on the
graphical user interface. Keti then moves around space, moving
audio clips slightly to produce exactly the timbres and
juxtapositions of music she is interested in producing.

Somewhere along this process she has the realization that she could
produce this music in real time, on stage by moving the sound orbs
herself. She develops her symphony now with this idea in mind.
When she performs it, the audience is initally shocked by the
composer moving around the stage, but soon begins to appreciate it,
and the performance ends to thunderous applause.

Sunday, November 02, 2008

(Rock Paper Scissors)^2



Awesome, I love it when my work is already done: wiiosc, is a tiny Linux program to use the Nintendo Wii Controller as a control device for music programs. Excellent, one step closer.

Saturday, November 01, 2008

flash osc

Flash and OSC. I think I am going to do this in haXe, but it might be a lot of work.


I'm setting up the wii mote on Linux to do my project for CSC 589 here at UVIC. Here's some useful links:

cwiid - a collection of Linux tools written in C for interfacing to the Nintendo Wiimote.
ubuntu wii
Sending simulated mouse events using uinput
wiimote driver
Control X.Org cursor with Wiimote
Tracking Your Fingers with the Wiimote

I personally found the cwiid project to work the best for me. The other big project, libwiimote is cool but doesn't seem to read the IR sensors correctly, and that's what I need.

I'm currently extracting code from wmdemo to have a small little program to send out OSC messages for the data for the IR leds on the wiimote.

Now, with two wiimotes I can track 8 dancers in real time for my SOMba project. It is gonna be sweet.

Friday, October 31, 2008

Wednesday, October 29, 2008



Introduction to Computer Programming with MATLAB Lecture 9: Spectral Analysis



GNU Octave - Functions and Scripts
sawtooth wave in matlab
Reading data files into matlab
highlevel.m - Loading and saving data in matlab

%This file demonstrates the bahvior of LOAD and SAVE

clear all % Clear all variables
x = 5; x2 = 10; % Create x and x2
save xdata x % Save only x into xdata.mat
clear all % Clear all variables
load xdata % Load xdata.mat
whos % Note that x is back
x2 = 10; % Recreate x2
save xdata x* % Now save using a wild card
clear all % Clear all variables
load xdata % Load xdata.mat

MATLAB code for test tone synthesis, selection, and all-pass filtering



Executable Octave Programs

#! octave-interpreter-name -q -f # comment

plotting in octave

x = (-10:0.1:10)';
y = sin(x)


Phasor (sine waves) - at wikipedia
Phasor - At mathworld




CSC 485-eh? - System Infrastructure Design & Construction Techniques


TeX live - is an easy way to get up and running with TeX. It provides a comprehensive TeX system with binaries for most flavors of Unix, including GNU/Linux, and also Windows. It includes all the major TeX-related programs, macro packages, and fonts that are free software, including support for many languages around the world.


Monday, October 27, 2008


This weekend was a major baking weekend, I made my usual mega multigrain loaves, with spelt, kamut, sunflower seeds and sesame seeds. Then, on Sunday I made white bread with seasame seeds on top and a batch of kaiser buns. Then in the evening I made possibly the most intense brownies ever, with triple chocolate, sweetened condensed milk caramelized layer, and an icing layer with chocolate chips and extra cocoa, all of this then dusted with powdered cocoa. when i was cutting it this morning i was kind of blown away. any takers?

Friday, October 24, 2008

Nerd Porn







pronuncation vs. enunciation

"Pronunciation" refers to which sounds one says and what stress patterns one uses. For example, does the pronunciation of data resemble "d-at-uh" or "day-tuh"? Is the pronunciation of formidable more like "FORmidable" or "forMIDable"?

[Accuracy in pronunciation is a complex topic, for in America, the only authority, the only standard, is usage.]

"Enunciation" is an old fashioned term. When it was in vogue, is referred to saying sounds correctly. Mumbling, slurring, and lisping were examples of poor enunciation.

Thus, one could enunciate a word poorly but pronounce it accurately, or enunciate it well but pronounce it inaccurately.

Wednesday, October 22, 2008


function deepObjectCopy(obj:Object):Object {

if (typeof obj != "object"
|| object instanceof Button
|| object instanceof TextField
|| object instanceof MovieClip) {

// display object (return reference)
// or non-object value (return value)
return obj;

var copy;

// define copy object type
// Boolean, Number, and String objects can be defined
// as objects with a base value (and can be given properties)
// class valueOf used to retrieve base value
if (obj instanceof Boolean) {
copy = new Boolean(;
} else if (obj instanceof Number) {
copy = new Number(;
} else if (obj instanceof String) {
copy = new String(;

// for other objects
} else if (obj.__constructor__) {

// if a clone method exists, use that
if (typeof obj.clone == "function") {
copy = obj.clone();

// make sure the copy is of the same type
// in case clone was inherited
if (copy.__proto__ == obj.__proto__) {
return copy;

// if no clone or clone was not a valid
// use object's __constructor__ to create copy
// if exists; assumes no required parameters
copy = new obj.__constructor__();

// __constructor__ will not be available for
// Array and Object instances defined in shorthand
} else if (obj instanceof Array) {
copy = [];
} else {
copy = {};

// copy object properties
for (var p in obj) {

// only copy properties unique to object
// assumes all properties enumerable
if (obj.hasOwnProperty(p)) {

// deep copy the property being assigned
copy[p] = arguments.callee(obj[p]);

// return copy
return copy;

Add a copy() function to Flash.

Sunday, October 19, 2008

Saturday, October 18, 2008

Friday, October 17, 2008

Friday, October 10, 2008


Extract the sourcecode from a Flash .swf file with Flare. Nice.

selection algorithm

Selection algorithm - In computer science, a selection algorithm is an algorithm for finding the kth smallest number in a list, called order statistics.


Expected value
statistical review - Excellent resource
Variance sum law
PDF - Probability density function - For continuous functions
PMF - Probability mass function - for discrete distributions

Wednesday, October 08, 2008


I must go see Thunderheist here in Victoria:

November 19, 2008

Victoria, CA
Venue: TBA

Tuesday, October 07, 2008

tex tex tex

Watch out if you are using pdflatex and you have a weird unicode character. pdflatex won't like it.

If you are as unlucky as me to have it in a section heading, it will get written to the .toc file, and even when you fix it in your file, pdflatex will still not work. I learned this the hard way.

Sunday, October 05, 2008

Public Enemy vs Benny Benassi - Bring The Noise Remix (Pump-kin Remix)

Mason vs. Princess Superstar - Perfect (Exceeder)

Princess Superstar - Perfect

nethack tournament

Oh noes, I don't think I'll have much time to participate in this years Nethack tournament. Still, I need to ascend at least an Elven Wizard just to keep my name in there. Won't be a hat trick this year.

cheat magit

magit cheat sheet


M-x magit-status

Status Buffer

l show history buffer starting from head
L show history buffer starting from a specified point

b check out a different branch
B create and check out a new branch
d compare working tree with specified branch

m manual merge
M automatic merge

R rebase / continue to rebase

F pull
P push
p show a buffer with push/pull command transcript

g refresh
s add a file to the staging area
i ignore a file

S move all hunks of all diffs into the staging area
U unstage all hunks

In a hunk

s stage hunk
u unstage hunk

c pop up a buffer to write the change description
C-c C-c to commit the staged changes

History Buffer

RET show more info about the commit
l use commit as starting point of the history buffer
R revert selected commit in working tree and staging area
P apply current commit in the normal way
C switch your current working tree to the commit
. mark current commit
= diff marked commit and current commit
x soft reset to current commit
X hard reset to current commit



Hands on with the Dell Inspiron Mini 9. Interesting. I like those tiny laptops, but my fingers are too big. I need to implement that muscle listening system that I've been meaning to make. Someday, when things are less crazy.

I am just one human being, after all.

Even with all that alien energy.


Conkeror Installation - Conkeror is a totally rad browser that uses Emacs keybindings. Too bad it's implemented in Javascript and not Lisp, and could use more Emacs integration, but still amazing.


magit - A Emacs mode for Git. Nice.


A rosetta stone for UNIX. Nice. My favorites are Linux and IRIX.


Build an MP3 decoder in Haskell. Warped but cool.

iphone pocket guitar


the XO abides - XO continues, despite major problems with the OLPC. Open source always wins in the end.

tetris tiles


Friday, October 03, 2008

Wednesday, October 01, 2008


Wow, sexy scrollbars in HTML.

Tuesday, September 30, 2008

pretty pretty iphone


python 1


The Bellic School of Management Training. As in Nico Bellic from GTA IV.



2s complement. For my CSC 111 lab that I'm TAing.

bad code smells

maintainable CSS


Higher-order shell - How UNIX commands in scripts are like higher-order commands in functional languages like Haskell.

By the way, I was volunteering at ICFP 2008 (International Conference in Functional Programming) last week, and got to meet many of the luminaries in functional programming. Some smart people there, let me tell you.


I'm going to be presenting a talk at a workshop coming up:

The Many Faces of Multimedia Semantics
It used to be called Robust Multimedia Learning in Broad Domains.

Monday, September 29, 2008

navaratri 2008

Navaratri One: Kali

Begins tonight. Om Kali Namaha!


I've just switched over to haxe 2.0. It seemed to be quite an easy switch, not much seemed to break, and now I have default arguments in the variable list, which makes porting AS3.0 code so much easier.

Friday, September 26, 2008


Android documentation
Getting started with Android
Android FAQs
Installing the Android SDK - The API is Java
Developing and Debugging Android - You use Eclipse as the SDK
Hello world app with Android


import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
TextView tv = new TextView(this);
tv.setText("Hello, Android");

Android uses ALSA for audio
Android media API

Recording audio with Android:

Start recording:

recorder = new MediaRecorder();
ContentValues values = new ContentValues(3);

values.put(MediaStore.MediaColumns.TITLE, SOME_NAME_HERE);
values.put(MediaStore.MediaColumns.TIMESTAMP, System.currentTimeMillis());
values.put(MediaStore.MediaColumns.MIME_TYPE, recorder.getMimeContentType());

ContentResolver contentResolver = new ContentResolver();

Uri base = MediaStore.Audio.INTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);

if (newUri == null) {
// need to handle exception here - we were not able to create a new
// content entry

String path = contentResolver.getDataFilePath(newUri);

// could use setPreviewDisplay() to display a preview to suitable View here



Stop recording


Location-based Service APIs

locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getCurrentLocation("gps");

How to Program Google Android