Saturday, May 31, 2008



HiBase : A Persistent Functional Programming Environment.


I just heard about webware on the mp3 insider podcast from cnet. Very cool site, with reviews and links to neat new web applications.

It was so funny that the first story was about Folia a social network site for gardeners. Funny because the first big Ruby on Rails website I built, was also a social networking site for gardeners.

I built it in 2006, when Rails was just getting really popular, and the advice that I found was to build a website about something that you're passionate about. is still up there, but I found that doing a whole website just by myself was too big of a task. It's better to have a small team.

Wednesday, May 28, 2008

arduino osc

It would be nice to get the Arduino to talk OSC. It looks like it's tricky because the Arduino doesn't have an ethernet port, like the Make Controller.

Here are some resources that might be useful: Arduino support (EXPERIMENTAL)
Can Arduino send OSC directly to Reaktor etc?
Interfacing PD
[Developers] Arduino + OSC
monomeserial - Get monome to talk to a serial port
SB70 Add device connectivity to your product via 10/100 Ethernet
Procyon AVRlib - C-Language Function Library for Atmel AVR Processors

Good thing I'm learning the Make Controller first, I can get my feet wet, and then later move to the Arduino.


I think I might try to hook up Marsyas and Flash with XMLSocket, and then to the Make Controller via OSC.

I could also hookup Marsyas to neko, and then neko to Flash, but for the high bandwidth data that I'm going to need, I think hooking Marsyas and Flash directly together might be better.

I'll have to research this some more.

Make Controller Kit
Make Controller Ruby interface
Make Controller Flash interface
OSC resources
OSC in C++
OSCPack - a set of C++ classes for packing and unpacking OSC packets.
OSC CNMAT downloads
Guide to OSC Libraries


flosc is a Java server that lets different applications that talk OSC to talk to each other. Also talks to Flash via the XMLSocket class.

Very interesting, but sad that it is written in Java.


The descent of the Phoenix lander was captured by MRO in a picture. Wow, that is some precise camera work.

Later the HiRISE camera on MRO took a picture of the lander on the surface.

prawn pdf

A neat new PDF writing library for Ruby named Prawn.


Analyze your C code with Frama, a Framework for Modular Analysis of C, written in OCaml.

Tuesday, May 27, 2008


Some totally beautiful icon sets. Ok, this has just made me want to totally max out these Flash/haXe applications I'm building with amazing icons.


Making a Taiko From a Wine Barrel. Good idea!

phoenix images


Monday, May 26, 2008


My goodness, it was sure tricky to add a 404 not found page to this one Ruby on Rails application I had. All the help pages didn't seem to work, but adding this to application.rb did:

def rescue_action_in_public(exception)
render :text => 'not found', :status => 404



Cadence - In Western musical theory, a cadence (Latin cadentia, "a falling") is a particular series of intervals or chords that end a phrase, section, or piece of music.



Isomap is one of several widely used low-dimensional embedding methods, where geodesic distances on a weighted graph are incorporated with the classical scaling (metric multidimensional scaling).

A good resource for isomap is at Stanford.


phoenix postcard

Sunday, May 25, 2008



Yay! Phoenix landed successfully on Mars!


An absolutely amazing podcast interview on FLOSS this week with Dan Ingalls at Sun right now.

Subscribe to the FLOSS podcast, they have some very interesting guests on from time to time.


An excellent podcast interview on Software Engineering Radio with Stefan Tilkov on REST.


In Greek mythology, Marsyas was a devotee of Rhea/Cybele. He was a Satyr, a animal-man/shaman figure, usually shown drinking, dancing, playing tambourines and flutes (the instruments of the Bacchic orgy) and sporting with Nymphai.

In some stories, Marsyas challenges Apollo to dueling-banjos, in some, it is Apollo who challenges Marsyas.

xml parser

I'm going to be using the xmlParser class for my XML parsing in C++ that I'm adding to Marsyas.

remote control

I just got a remote control for my computer, and it is so sweet. I don't have to get up to adjust the volume between each podcast, and I have it all hooked up to MPlayer, amixer and Enlightenment.

I decided to get the Microsoft Media Center Remote, it hooks up via USB to your computer, and is well supported under Linux. It has a very nice ergonomic button layout and feel in your hand, which is the most important thing.

Under Fedora 8, you first need to get the atrpms yum repository installed. To do this, you first import the atrpms keys:

rpm --import

and then put the following lines in /etc/yum.conf:

name=Fedora Core $releasever - $basearch - ATrpms

Then, you install lirc with yum:

yum install lirc lirc-lib lirc-lib-devel

and install the module into your kernel:

modprobe lirc_mceusb2

Then, get this file and copy it to /etc/lircd.conf:

After this, you start lircd:

/etc/rc.d/init.d/lircd start

To have it automated at startup,

1. Add the below to /etc/modprobe.conf

alias char-major-61 lirc_mceusb2

2. Set the service to start on boot:

/sbin/chkconfig lircd on

To check to see if your remote control is working, and what buttons correspond to which symbols, type:


When you press buttons on your remote control, you'll see something like:

siddhidatri 144 [~] % irw
000000037ff07bed 00 ChanUp mceusb
000000037ff07bec 00 ChanDown mceusb
000000037ff07bec 01 ChanDown mceusb
000000037ff07bec 02 ChanDown mceusb
000000037ff07bf1 00 Mute mceusb
000000037ff07bf1 01 Mute mceusb
000000037ff07be9 00 Play mceusb
000000037ff07be9 01 Play mceusb
000000037ff07be9 02 Play mceusb
000000037ff07bf1 00 Mute mceusb
000000037ff07bf1 01 Mute mceusb
000000037ff07bfe 00 One mceusb
000000037ff07bfe 01 One mceusb
000000037ff07bfd 00 Two mceusb
000000037ff07bfd 01 Two mceusb
000000037ff07bfd 02 Two mceusb
000000037ff07bfc 00 Three mceusb
000000037ff07bfc 01 Three mceusb

To get MPlayer to listen to your remote control, enable LIRC support when you build it:

cd MPlayer-1.0rc1/
./configure --prefix=/usr/sness/mplayer --enable-lirc
make install

To get other programs, like eesh from Enlightenment to listen to your remote control, use irexec. You configure irexec by adding definitions to this file.

My current ~/.lircrc looks like:

button = VolUp
prog = irexec
repeat = 1
config = amixer -c 0 -- sset Master playback 1+
button = VolDown
prog = irexec
repeat = 1
config = amixer -c 0 -- sset Master playback 1-
button = ChanUp
prog = mplayer
repeat = 1
config = volume 1
button = ChanDown
prog = mplayer
repeat = 1
config = volume -1
button = Mute
prog = mplayer
repeat = 0
config = mute
button = Pause
prog = mplayer
repeat = 0
config = pause
button = Home
prog = mplayer
repeat = 0
config = pause
button = Skip
prog = mplayer
repeat = 0
config = seek 1000
button = Replay
prog = mplayer
repeat = 0
config = seek -1000
button = More
prog = mplayer
repeat = 0
config = osd
button = Rewind
prog = mplayer
repeat = 1
config = seek -10
button = Forward
prog = mplayer
repeat = 1
config = seek +10
button = Play
prog = mplayer
repeat = 1
config = play
button = Stop
prog = mplayer
repeat = 1
config = quit
button = Enter
prog = irexec
repeat = 0
config = /bin/zsh -c 'xscreensaver & ; xscreensaver-command -activate'
button = Clear
prog = irexec
repeat = 0
config = xscreensaver-command -exit
button = Guide
prog = irexec
repeat = 0
config = /bin/zsh -c 'eesh -e "goto_desktop 1" && eesh -e "goto_area 0 0"'
button = RecTV
prog = irexec
repeat = 0
config = /bin/zsh -c 'eesh -e "goto_desktop 3" && eesh -e "goto_area 0 1"'
button = LiveTV
prog = irexec
repeat = 0
config = /bin/zsh -c 'eesh -e "goto_desktop 3" && eesh -e "goto_area 0 0"'
button = DVD
prog = irexec
repeat = 0
config = /bin/zsh -c 'eesh -e "goto_desktop 0" && eesh -e "goto_area 1 1"'

Saturday, May 24, 2008


1/2 stick of butter = 1/4 cup

I'm making white bread this morning, from a recipe in my Julia Child's book. Wish me luck!

Friday, May 23, 2008


Future Audio Workshop

Wow, super cool interface!

Also, Interview: New Virtual Instrument Maker FAW Talks Usability and Design

Both sent to me by Neil Burroughs, a fellow graduate student in George Tzanetakis' lab.

as3 cook

Actionscript 3.0 cookbook excerpts, and code. Probably won't buy, but looks pretty decent.


Audio Anecdotes - A way cool series of three boks about audio and computer audio. We have a copy of Volume I and II in the lab, and I am seriously considering buying a copy for myself.

I love books.


unit c++

git sf


openssl debian

About how the debian openssl fiasco happened. Instructive.



Joi Ito's has a new look. Nice and clean.

version control

Bram Cohen's opinions on version control. Some good ideas in there.


The 8th International Conference New Interfaces For Musical Expression (NIME2008) program has just been annouced.


Thursday, May 22, 2008


cue points in audio with Flash.


Tracking the Progress of a Playing Sound in Actionscript 3.0.

From the Actionscript 3.0 Cookbook, which I might just need to purchase. I love the Actionscript 3.0 manual I have, and the cookbook might be a nice addition.

i'll be gone

An amazing video for I'll be gone. Check it.

Wednesday, May 21, 2008


Peak is an audio editting program, used by one of my collaborators for annotating music. Nice interface.

Spear (Sinusoidal Partial Editing Analysis and Resynthesis) is an audio visualizer, available for Mac and Windows.

Too bad there's no Linux version available.

cantillation font

It looks like the standard Microsoft Arial Unicode MS font supports cantillation marks. You can get it from


A great online resource for learning Cantillation.

fedora kernel

I need to add a small patch to my kernel, so under Fedora 8 you can do this by:

yum install yum-utils
yumdownloader --source kernel
rpm -ivh kernel-
rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel.spec

Another good resource is CustomKernel on the Fedora Project Wiki.


One of my new collaborators at UVIC is Daniel Peter Biro, he's writing a new piece for piece for solo viola, three voices, seven instruments and electronics for Vancouver New Music, how cool is that?

Tuesday, May 20, 2008


Cantillation of the Tanakh

(reading of the Bible in Jewish traditions)


Yay! Webmonkey is back. I have good memories about Webmonkey, from the prehistoric days of the web. Glad it's back.



A very useful text to speech synthesizer from Bell Labs. Nice.

git sf

git sf


Vote for Sarah Atwood at Mahalo VLOG Idol, she's the host with most.

Check out her really cool epsiode on Mahalo about how to Hula dance.

And a very cool wordpress blog name, @w00d, how awesome is that? Major geek-cred there.

Monday, May 19, 2008


REST - Representational state transfer
Architectural Styles and the Design of Network-based Software Architectures - The original REST document, a thesis by Roy Thomas Fielding


REST Web Services - The best description I have ever seen of REST. Finally, an article that puts REST into plain english and gets rid of the Ruby on Rails fanboy REST hype.


arduino and music

Where to buy the Arduino, in Canada, this is RobotShop
DIY MIDI controllers using PIC microcontrollers and Basic Stamps
MIDI Control at Make magazine
MIDI Output
diy midi drum triggers
Arduino to MIDI for a drum controller
Arduino Playground


flash and processing

Processing is an interesting and exciting extension to Java that lets you do complex visualizations quickly.

I'm doing lots of Flash right now, and it looks like there are ways to get Flash and Processing to talk to each other.

It looks like Processing isn't quite as suitable for GUIs as Flash.

Sunday, May 18, 2008


Miller Puckette is the creator of pd as well as a number of other software projects. There is documentation available for pd. He also has a book out called Theory and Techniques of Electronic Music, with online and PDF versions available.

Check out the Pd Repertory Project which aims to provide patches that can run selected pieces of the live electronic music repertory using the Pd program.

Also, a nice interface for an analog synth. I'm doing a lot of thinking about music interfaces lately.

hydra vs. dragon

The Hydra versus Dragon coding competition.

Emacs has long been able to have multiple people editting the same document.


Removing the Big Kernel Lock from the Linux kernel is proving to be a big problem, and this means big issues for real-time code. Interesting.

I have an RT kernel on this laptop, but periodically there are weird hangups when using mplayer, so I am currently using the vanilla Fedora 8 kernel.


Mmm, I'm baking bread again this weekend, it's in the oven rising. It's taking a while because it has a lot of Spelt and Kamut in it.

I was interested in what is the optimal bread rising temperature, and it seems like 30C (86F) is the best rising temperature, but it can be as low as 80F and as high as 105F.

Here's some helpful links:

Care Of The Rising Dough
Bread Baking 101 : Part 1: Let the Dough Rise
Bread Baking Guide

Following wikipedia led me to:

relict - The term relict is used to refer to surviving remnants of natural phenomena. In biology a relict is an organism that at an earlier time was abundant in a large area but now occurs at only one or a few small areas. The distribution of a relict is characterized as endemic.

c++ xml

Wow, there are a ton of XML C++ parsers and writers out there. All the way from the massive Xerces and Expat down to tiny ones like tinyxml. For one of my current projects, writing a graph visualizer for Marsyas, I want to use something tiny for writing XML.

Some links:

Simple C++ class for XML writing

CodeProject - Simple C++ class for XML writing
XMLIO - nestable C++ XML parser/writer
XML Programming with C++

TinyXML - TinyXML is a simple, small, C++ XML parser that can be easily integrated into other programs.
Arabica C++ XML parser toolkit

Friday, May 16, 2008

data flow

Flexible event scheduling for data-flow audio processing a paper by George and Neil.


Real-time audio and music processing frequently requires actions to be taken relative to a number of different control rates such as audio sample rate or sensor inputs. These processing systems frequently use schedulers to manage this complexity. The design of a flexible scheduling system must avoid limiting the types of actions or the range of control rates available. Abstracting time and events from the underlying scheduler provides a high degree of flexibility for designers of processing networks. Marsyas[4] is an open source software framework for analysis, retrieval, and synthesis of audio signals with specific emphasis to Music Information Retrieval applications. The Marsyas scheduler uses these abstractions to provide a highly extensible scheduler.

mixman dm2

A Linux Alsa MIDI device driver for the Mixman dm2(TM) virtual turntable device.

Nice. We have one here at the lab, I want to try to get it running with Linux.


Manage Apache Download Speed And Traffic Limits With mod_cband - Slow down your apache with mod_cband - Will be nice for testing the Orchive FFT mp3 file downloads, to make sure they work over slow connections
apxs - APache eXtenSion tool - Used by mod_cband to talk to apache.


SonicVisualiser - A very interesting C++ with Qt application for looking at sound files with a variety of different analysis methods. Overlays all the different analyses on top of each other. I learned about this from reading the proceedings of ISMIR 2006
rubberband - an audio stretching library used by SonicVisualiser.

fresh fedora

Installing Freshrpms yum on Fedora 8:

rpm -hiv
rpm --import

Thursday, May 15, 2008

Don't use "flash" for a controller method name

In Rails, don't use "flash" for a controller action name

This one bit me in the ass today. I was getting some crazy weird errors:

/!\ FAILSAFE /!\ Thu May 15 11:26:01 -0700 2008
Status: 500 Internal Server Error
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.sweep

And it turned out the only problem was that I had created a "def flash" method in my controller. I was making a Flash player, so this is probably DHH's way of getting back at people who use Flash instead of AJAX. I'm on to you, DHH. ;)

Wednesday, May 14, 2008


The main mod_cband site appears to be down, but you can get it directly from the mod_cband page on sourceforge.


Flash standalone player fails to load content via HTTP - On slow connections, The Flash player can sometimes fail to load Flash content. Good to know.

slow it down

Slowing down a web connection to test Flash loaders - Apache mod_cband sounds great to me.

tdd in haxe

hxspec is a package to help do TDD (Test Driven Development) in haXe.


A little gotcha that just got me: Flash won't apply a ColorMatrixFilter to an image larger than 2880 pixels in width or height. I found an article that talks about a way around this, namely, you draw into a new BitmapData object.



qmake manual. Need to learn this one as well.


RtAudio - RtAudio is a set of C++ classes that provide a common API (Application Programming Interface) for realtime audio input/output across Linux, Macintosh OS-X and Windows (DirectSound and ASIO) operating systems.

We're using this in Marsyas for our audio engine. Looks nice, especially the new version 4 callback API, instead of using blocking calls for audio.


Matrix at wikipedia
Vectors at matlab
Column vs Row Vectors

"The dimensions of a matrix are always given with the number of rows first, then the number of columns."

Interesting, I always think in x first and then y, but for matricies, you specify rows (y) then columns (x).

GTK+ / Gnome Application Development

Tuesday, May 13, 2008


private unit

I'm interested in testing private member functions and variables in C++ classes for the unit tests I'm writing. I found a couple articles about this:

Unit Testing Of C++ Classes
How to unit test C++ private and protected member functions?

Monday, May 12, 2008


Virtual tables - Used in C++.


Impedance extends the concept of resistance to AC circuits.


dynamic languages strike back, the latest blog rant by Steve Yegge.


Tree Listening. An experiment where they hook up sensors to trees, and turn the things they sense into music. Beautiful.

unit testing c++

Building projects with Ruby on Rails made me a TDD (Test Driven Development) convert, and now that I'm working with C++, I just need to be doing unit testing with C++. Marsyas, the library that I'm working with has regression testing but doesn't yet have unit testing. I'm evaulating different testing frameworks.

A great resource that evaulates all the C++ testing frameworks is Exploring the C++ Unit Testing Framework Jungle by Noel Llopis. It's a well written article that goes into great depth about the different frameworks. After reading it, I am leaning toward CxxTest.

Dr. Dobbs Journal has an excellent article about CxxTest.

Here is a page listing all the C/C++ testing frameworks.


Sunday, May 11, 2008



Rough transcript of John McCarthy answering questions for a class.

web 2.0

Explaining web 1.0, 2.0 and 3.0.

I'm waiting for web 3.1415 myself.

victoria festivals

Festivals in Victoria this summer.

One that I'm looking forward to is VEMF, the Victora Electronic Music Festival. I want to get my stuff together to perform in 2009.


Places to buy electronic parts in Canada.

It looks like and Digikey might be my best bets for buying components.

Now, I just have to figure out what to build first. Something simple, from plans that someone else has made, so I can get my feet wet again. I miss the smell of solder and the feeling of building circuits, can't wait to get started again!

Saturday, May 10, 2008


Structure and Interpretation of Computer Programs, a so so cool video lecture series at MIT by Hal Abelson and


openspace + voice

I was at a really interesting performance at Open Space here in Victoria recently.

First of all, Kathy Kennedy led us around the city on a soundwalk. This was a different kind of soundwalk though, because each of us carried a FM radio around tuned to the local campus radio station which was broadcasting some ambient drone music.

Kathy was also broadcasting a signal on a little pirate radio transmitter that she had setup on top of the building. As we walked around the streets, our radios would randomly pick up the two stations, sometimes flicking briefly into other stations. People looked at this crowd of strange people carrying radios and humming with curiosity.

It would be cool to do this as more of a performance piece, perhaps we could spread out through the downtown, meeting up randomly, music interleaving. The radios were interesting because the buildings would distort the signal, but the other stations on the dial did interfere with the experiment. Perhaps we should do it with a less populated frequency on the dial? Perhaps there would be people walking around who would be transmitters, and others who would be receivers?

Could we do this with digital media? Live singers? Try to find where the singers are performing by using your own radio to locate their transmitter, and then as more people find the singers, the louder the amplification would be?

Later that night Christine Duncan gave us a wonderful performance of her 8 octave vocal range, with clicks and barks and whoops, poetry and music combined. Hexaphone, or rather four members of Hexaphone also performed a variety of works.

One of my favorite was a performance of a John Cage piece where two performers would play a game of chance, in this case, Snakes and Ladders, and the game board was mic'd and amplified just below the point of feedback. Very fun and reminded me of John Cage's work with the I Ching.

Friday, May 09, 2008



power spectrum

I've been working with the PowerSpectrum code inside of Marsyas, and this led me to read up about Spectral Density on Wikipedia. The PowerSpectrum calculates the Spectral Density of a Spectrum inside Marsyas.

This led me to the very interesting topic of Colours of Noise. I'd heard of white noise and pink noise, but never of Green Noise, or Azure Noise. Wow, my mind has just been blown.



download xv
xv jumbo patches
xv jumbo patches readme
Download Jasper - necessary to get those xv jumbo patches working

Thursday, May 08, 2008



Needed to examine a coredump with gdb for the first time in quite some time today.

Such a big change going first from Ruby for the past two years, to Actionscript 3.0, where you need to compile, to C++, which feels pretty gritty!


Working with Makefiles. It has been a while, and I needed to brush up on how to declare and use variables:

To declare:

LIBS = -lpng -lfreetype -lpthread -lasound -lmad -lvorbisfile

To use:

tutorial: tutorial.o
g++ -O3 -Wall -fPIC -o tutorial tutorial.o /usr/sness/marsyas/lib/libmarsyas.a /usr/sness/lib/libpngwriter.a ${LIBS}


flash 9 audio


SoundWriter is a neat little ActionScript 3.0 library that lets you create your own sound files for Flash 9 on the fly.

Flash SoundTransform

Something I just ran into with Flash: If you want to change the volume of a Sound object, though the SoundChannel you get when you press play and then through the SoundTransform object, you have to instantiate a SoundTransform object and apply it to your SoundChannel, like this:

mySoundTransform = new SoundTransform;
mySoundTransform.volume = 0.5;
mySoundChannel.soundTransform = mySoundTransform;



Lessons in Electric Circuits - An online book that teaches electric circuits.

Tuesday, May 06, 2008


Fireface 800 and it's manufacturer RME on Wikipedia.


Runtime errors in Flash 9.

I was stumped for quite a while this afternoon about the error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Flash5$/mouseMoveListener()

I just turned out that I had redeclared a variable inside the new() constructor, like this:

class Zoomer extends Sprite {

private var box:Sprite;
private var dragleft:Sprite;

public function new() {

var dragleft = new Sprite();

function mainMove (e:MouseEvent):Void {
dragleft.x = e.stageX;


That var shouldn't be in there, it should look like this:

class Zoomer extends Sprite {

private var box:Sprite;
private var dragleft:Sprite;

public function new() {

dragleft = new Sprite();

function mainMove (e:MouseEvent):Void {
dragleft.x = e.stageX;



The Stribe is a really neato controller for music with 1024 invididually addressable LEDs and using softpots for control. All plans are available from the inventor, Josh Boughey. Nice.


fcomponentshx - a GUI library for haXe, targetting Flash 8 and Flash 9.



Get the SWHX source code.

Monday, May 05, 2008

flash tutorial

A Tutorial for ActionScript 3, talks about the differences between AS2 and AS3.


getBytesLoaded is not in ActionScript 3, it was removed. Instead use URLLoader and the bytesLoaded property.