Monday, June 30, 2008

masala




Hopefully I get to try out for Masala next week. They're a local afro-cuban/brazilian drumming group here in Victoria. I've seen them perform twice, and they totally rocked out. Cross your fingers for me!



survey



rails




A couple interesting looking Rails plugins:

named fixtures exporter - This plugins can export/display fixtures with belongs_to/has_and_belongs_to_many relations using fixtures names instead of foreign key id.

Google Ajax Libraries API - Implements the Google AJAX Libraries API as a Rails plugin.



Sunday, June 29, 2008

baroque




On July 1st, Canada Day 2008, I'm going to first be listening to whales at the lab, and then going to the Canada Day Baroque Concert on Mount Tolmie, here in Victoria BC.

From the website:

"Two, free, hour-long, open air baroque music concerts celebrating Canada Day on Mt. Tolmie, 2 p.m. and repeated at 3:30 p.m. Program: Bach Double Violin Concerto in D minor; Corelli Concerto Op.6, #8; Grosso, Geminiani Concerto Grosso "La Folia"; Handel "Water Music" excerpts. 100 chairs available or sit on the rocks. This concert is presented by the Island String Players Society (the Victoria Chamber Orchestra)"

Nice.



ghosh




I'm listening to Masala Mix on CFUV, the campus radio station at UVIC.

Sudakar just played a really nice piece by Bikram Ghosh, he's a tabla player. Highly recommended.



air



map




Interactive Linux Kernel map. Very neat, perhaps we should do one for Marsyas?



Thursday, June 26, 2008

jerk it




Download the Jerk It video by Thunderheist.

You

must

watch

this

video.



flac





To get FLAC to compile on Mac OSX:

./configure --enable-static --disable-asm-optimizations --disable-shared

Otherwise you get a very odd error:


gcc -dynamiclib ${wl}-flat_namespace ${wl}-undefined ${wl}suppress -o .libs/libFLAC.8.2.0.dylib .libs/bitmath.o .libs/bitreader.o .libs/bitwriter.o .libs/cpu.o .libs/crc.o .libs/fixed.o .libs/float.o .libs/format.o .libs/lpc.o .libs/md5.o .libs/memory.o .libs/metadata_iterators.o .libs/metadata_object.o .libs/stream_decoder.o .libs/stream_encoder.o .libs/stream_encoder_framing.o .libs/window.o .libs/libFLAC.lax/libFLAC-asm.a/bitreader_asm.o .libs/libFLAC.lax/libFLAC-asm.a/cpu_asm.o .libs/libFLAC.lax/libFLAC-asm.a/fixed_asm.o .libs/libFLAC.lax/libFLAC-asm.a/lpc_asm.o .libs/libFLAC.lax/libFLAC-asm.a/stream_encoder_asm.o -lm -install_name /usr/sness/lib/libFLAC.8.dylib -Wl,-compatibility_version -Wl,11 -Wl,-current_version -Wl,11.0
ld: .libs/libFLAC.lax/libFLAC-asm.a/bitreader_asm.o has external relocation entries in non-writable section (__TEXT,__text) for symbols:
FLAC__crc16_table
bitreader_read_from_client_
/usr/bin/libtool: internal link edit command failed
make[4]: *** [libFLAC.la] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2




rre



rescue




rescuing exceptions in Ruby.

What I needed was to find out what exception was being thrown, I did this with:


begin
raise 'A test exception.'
rescue Exception => e
puts e.message
puts e.backtrace.inspect
end




Tuesday, June 24, 2008

fw






Tascam FW-1804 - This is what we are using to digitize the orca recordings. I'm trying to figure out how to simultaneous record S/PDIF for our DAT drive along with 8 channels of audio from our two banks of audio cassette recorders.

I'm using orcarecord from Marsyas.




Monday, June 23, 2008

neash/xinf




I'm working on porting SWHX to Linux, it looks like it's almost there, I got the first demo program to run.

Some other longer term possibilities for doing something like Adobe AIR, but open source are:

neash - The "neash" library provides a compatibility layer to allow haXe programs to target both neko and flash9, giving both web browser and stand-alone support. The API follows the flash9 API very closely to allow easy porting from existing code. The neko implementation currently makes use of the NME library, which in turn uses SDL.

announcing neash - A blog post.

xinf - Xinf (Xinf Is Not Flash) strives to provide a unified SVG-oriented API for graphics programming in haXe. Using Xinf, your application can run on Adobe's Flash Player (Version 9 up), our own 'Xinfinity' runtime, and (with limitations) on standards-compliant web browsers like Mozilla Firefox - from the same source code.



flash debugging trick




A little trick I learned when debugging some Flash in haXe:

I had an event callback that looked like:


function mouseDownListener (e:MouseEvent):Void {
trace("e=" + e.target.name);
}


Which would give me the name for the object that I clicked on. It would just give me a name like "instance15" which wasn't very helpful.

It's easy to make it more readable, just set the name of the Sprite when you create it:


drag_icon = new Sprite();
drag_icon.name = "drag icon"; // sness - For debugging, very handy.
well.addChild(drag_icon);




hippo






HippoHX is a layer on top of SWHX to help with developing Flash applications on the desktop.



crackle






Sadly the creator of the CrackleBox, one of the first alternative music interfaces, has just died.



diy



orl






Organic Responsive Landmark - 15,371 individual fibers 65 km of fiber optics. The Cloud is located in downtown Florence just outside the Fortezza da Basso.

Sweet, I really enjoyed Florence, and this could have only have enhanced my visit.



midify






Midify - This tiny board lets you add a MIDI port to just about anything. Can be installed directly into a GBA, GBA-SP, DS or DS Lite, or with some extra parts you can interface it with other devices.



six



Sunday, June 22, 2008

evolve




Women are screwing up human evolution by going out with the "Bad Boy".

I heard a really insightful analysis about why great women go out with bad guys on CBC yesterday, by a woman psychologist and writer. She said that it's because girls see all these roles layed out before them when they're growing to be a woman, these stereotyped societal roles, and just say "No!". They also see the good guy as boring, and the bad boy as exciting. I found this analysis very illuminating.




Saturday, June 21, 2008

lua




lua - Quite an interesting new programming language.

Learn

more

programming

languages.



(This week was Ruby, Javascript, Flash, haXe, XHTML/CSS and C++ for me.)


Yes, XHTML/CSS is a programming language, and if more programmers thought of it as an actual programming language, we would have a better web.



bug.gd




bug.gd is a social web site that you can submit bugs and have other people help you answer them. Very smart.



karmetik




Karmetik Collective - music, robotics, software. Very cool.



Friday, June 20, 2008

marsyasx




I just learned about MarsyasX today from Gustavo. MarsyasX is a new version of Marsyas 0.2 that supports video as well as audio. Sounds neat.



responds to mp3



To allow a client to download an MP3 file from Rails:

First, download the mime-types gem:


gem install mime-types


Then, register mp3 as a Mime type in environment.rb:


Mime::Type.register 'audio/mpeg', :mp3


Then in your "respond_to" block, add a handler for mp3 files. Redirect the user to the location of the file you want to download.


def show_recording_audio_file
@recording = Recording.find(params[:id])
@audio_file = @recording.audio_file
respond_to do |format|
format.html # index.html.erb
format.mp3 {
redirect_to @audio_file.public_filename
}
format.xml { render :xml => @audio_file }
end
end


You could also send the file directly:


send_file RAILS_ROOT + "/public" @audio_file.public_filename + ".mp3"


swfupload



rep




Bokardo has an article about 5 ways to improve reputation systems which is from Boxes and Arrows, On A Scale of 1 to 5

Take aways:

1. List the behaviors you want to encourage and those that you want to discourage
2. Be transparent
3. Keep your reputation system flexible
4. Avoid negative reputations
5. Reflect reality

Framework:

1. Who is doing the rating?
2. What, exactly, is being rated?
3. If people are being rated, what behaviors are we trying to encourage or discourage?




Midfield General (Official) - 'Disco Sirens'

Midfield General - Disco Sirens (Calling In Sick Remix)

Thursday, June 19, 2008

rnt




A really good blog rant by Steve Yegge called Rhinos and Tigers. One of his points that I really believe in is "Learn New Languages". The last few years I've been learning with and using lots of new languages, and it really has made me a better programmer.




galvanic






The galvactivator is a glove that senses changes in skin conductivity response, which is related to your arousal level.

So cool!

I read about this when reading a paper in the Computer Music Journal by Mark Feldmeier and Joseph Paradiso called "An Interactive Music Environment for Large Groups with Giveaway Wireless Motion Sensors".




compile




How to compile haXe.



swhx



SWHX on Linux



I've made a little progress in getting swhx running on Linux.

SWHX is a really cool alternative to Adobe AIR, and lets you make a Flash application that runs on your local machine. It works by running a Neko process that launches and controls a Flash player on your local system.

It runs on Mac OSX and Windows, but not yet on Linux.

It was a little tricky to find out how to just compile it, so here's what I learned.

First of all, install it like normal:


haxelib setup
haxelib install swhx


Then get the source code from svn on Google Code:


svn checkout http://screenweaver-hx.googlecode.com/svn/trunk/ swhx


Change directory into the sample projects directory and copy the 1-basic to 0-verybasic


cd samples
cp -av 1-basic 0-verybasic
cd 0-verybasic


Replace the App.hx file in there with something more recent:


// App.hx
class App {
static function main() {
// initialize ScreenWeaver HX
swhx.Application.init();
// create a 400x300 window with title "My Application"
var window = new swhx.Window("My Application",400,300);
// creates a remoting server
var server = new neko.net.RemotingServer();
// create a flash object inside this window
var flash = new swhx.Flash(window,server);
// set the HTML attributes of this flash object
flash.setAttribute("src","ui.swf");
// activate the Flash object
flash.start();
// display the window
window.visible = true;
// enter the system event loop (will exit when window is closed)
swhx.Application.loop();
// cleanup SWHX properly
swhx.Application.cleanup();
}
}


Compile and run:


haxe compile.hxml
neko app.n


You should then get a box with a red square in it.

libpcre.so.3




If you try to install the haXe libraries on Fedora with:


haxelib setup


you might get an error about libpcre.so.3 not being found. To correct this, just symlink your /lib/libpcre.so.0 to libpcre.so.3, like this:


ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.3


And reload your libraries with:


ldconfig -v


You don't have to download that Debian version of libpcre, they just unilaterally chose to rename libpcre as version 3 for some reason, and because so many people use Ubuntu, it's starting to creep into common usage.









Wednesday, June 18, 2008

pngwriter




pngwriter - A sweet little C++ library for quickly writing PNG files. Nice.



wtop




wtop is like top, but for your web server:


wtop

req/s avg min max 3xx 4xx 5xx slow
----------------------------------------------------------------------------------------
home 0.20 126 26 .........* 543 -- -- -- --
landing 12.60 62 0 @*........ 1319 1.20 -- -- 0.07
search 0.93 597 92 **........ 1764 -- -- -- --
signup 0.20 285 22 @*.......* 1415 -- -- -- --
css 1.63 9 0 #......... 294 0.40 -- -- --
image 3.40 2 0 #......... 192 0.40 0.07 -- --
js 1.63 46 0 @*........ 471 0.67 -- -- 0.03


Sweet.


sketch




Sketching in Code by A List Apart.

I'm a big believer in massively iterating. Start small, show people what you got, and improve. Rince and repeat.

Make sure you use a source control management tool like git, and tag the code each time you get something working, so that if you don't like the direction you went in the last couple hours (or days), you can just zip back to a previous version that worked.

I also like to do this with one host that I look at things on, and then push out the latest version to another server, so that your users can always see the latest good version, and not see your current working copy.



silver selkie




Check out my friend Katrina's website Silver Selkie Studio. She's really cool, a funky lesbian who lives up in Powell River and designs jewellery, art and fibre.



Tuesday, June 17, 2008

sprout




sproutcore - develop rich web applications with Javascript. Looks neat.



c



latex




For a conference I'm thinking of going to, they want a submission in ACM proceedings style, and I'm doing it in Latex.

Some good links:

Latex Tutorial
Latex backing files - For ACM style
sig-alternate howto
latex style
ACM Proceedings templates



latex




For a conference I'm thinking of going to, they want a submission in ACM proceedings style, and I'm doing it in Latex.

Some good links:

Latex Tutorial
Latex backing files - For ACM style
sig-alternate howto
latex style
ACM Proceedings templates



victoria jazz




You can get tickets for concerts at the Victoria Jazz Fest at:

Ticket Outlets - Jazzfest International

VICTORIA JAZZ SOCIETY
Suite J, 727 Johnson St.
(250) 388-4423
Toll Free 1-888-671-2112

LYLE'S PLACE
726 Yates St.
Service charges may apply
All prices include GST
No refunds or exchanges

MCPHERSON BOX OFFICE AND ITS OUTLETS
Royal Theatre & Tourism Victoria Visitor Info Centre
Charge by Phone 386-6121
Toll Free 1-888-717-6121
Online http://www.rmts.bc.ca




write



auto



Monday, June 16, 2008

ardunio



firefox




Tomorrow is Firefox day! Please download Firefox and help set a world record.

Here's a Field Guide to Firefox 3.



tzosdclock




tzosdclock is a cute little OSD (on-screen-display) clock for Linux.



github




I just signed up for github. I'm going to try hosting a project on there, to see how it goes. Most of my projects are at SourceForge, but I like that github supports git so well. I've got no huge problems with svn, but I do think that git is better tech.



utc migrations




Interesting, in the latest version of Rails, the migrations are now in UTC, not a simple series of incrementing integers.

Less likely to conflict, but less pretty.



stp




Stephen Travis Pope websites:

HeavenEverywhere Music
FASTLab Inc.



poster



multitalk




New presentation software called multitalk.



Friday, June 13, 2008

discrete




I'm going to be using Discrete-Event System Simulation in a course in the fall. Sounds neat!



Thursday, June 12, 2008

static types




Damien Katz had an eiphany about static types. Some great comments.



oorp




Object-Oriented Reengineering Patterns collects and distills successful techniques in planning a reengineering project, reverse-engineering, problem detection, migration strategies and software redesign.

Available as a free PDF as well, nice.



kiczales





Yesterday Gregor Kiczales came to give a talk in the Computer Science department here at UVIC. It was the talk he gave at OOPSLA last year, and was just fascinating.

He talked about Lucy Suchman, and how her research goes into sociological analyses of user interfaces, and I really connected with those ideas. I really need to read her book Human-Machine Reconfigurations, the small excerpts that he presented resonated strongly with the way I view the world.

He also talked about Brian Cantwell Smith and his book On the Origin of Objects. Some interesting ideas here as well, I was reminded strongly of semotics, with signs and signifiers, and how meaning is constructed by each of us.

He also talked a bit about Aspect-Oriented Programming, objects and Mylyn.

Too bad that it's all in Java, I've done some large projects with Java, and I just don't find it a very satisifying environment to work inside. I much prefer something like Ruby or Python, and I've been having a lot of fun with ECMAScript languages, like haXe, Flash and Javascript.





Tuesday, June 10, 2008

xosd




I was using tzosdclock for displaying the time in the corner of my screen. It uses xosd.

I used it in my .lircrc like this:


begin
button = Back
prog = irexec
repeat = 0
config = /usr/sness/bin/tzosdclock -fn '-*-helvetica-bold-r-normal-*-34-*-*-*-*-*-*-*' -tc black -oc white -ft "%I:%M %p" -ha right -os 10
config = killall -9 tzosdclock
end


This worked great, but I found that I was limited by the fact that I couldn't use large truetype fonts, so I switched to urxvtc running a little Ruby program:


#!/usr/bin/ruby

while(1)
date = Time.now.strftime("%I:%M %p")
printf "#{date}\r"
$stdout.flush
sleep 30
end


And started it on startup with


eesh -e "goto_desktop 3"
eesh -e "goto_area 1 0"
urxvtc -fn "xft:Bitstream Vera Sans Mono-100" -geometry 8x1-0+0 -bl -b 3 +ptab -rv -e sh -c 'clockr.rb'


Which worked even better. Now I just switch to that desktop, which has aumix in text format, and the clock, and looks like this:




Stockhausen




We got talking about Karlheinz Stockhausen today at work. I remember reading some of his works when I was at Pearson College, and listened to a number of his works.

I'm now looking for a series of essays he wrote on electronic music, if anyone has any pointers, leave them in the comments below.



evolve




E.coli make a big evolutionary leap to metabolize citrate. A really neat little story.



marsyas making waves




Marsyas, the framework that I'm working with to do Music Information Retrieval is being used by Charlotte Curtis in her Google Summer of Code project. Check out her blog posts about it.




audacity label tracks




Label Tracks in Audacity. Will be the model for a new Flash application I'm creating.



dm2



Right beside my desk is:



The mixman dm2. I have it hooked up to my Linux box. Sweet.


love




A woman marries the Eiffel Tower. Hmm, perhaps I should marry Emacs.




Monday, June 09, 2008

280




280slides - Cool web based presentation software.



rev




Rev - is an event library for Ruby, built on the libev event library which provides a cross-platform interface to high performance system calls . This includes the epoll system call for Linux, the kqueue system call for BSDs and OS X, and the completion ports interface for Solaris.

Not quite cross-platform enough, but very cool nonetheless.



ctheory




ctheory - "One of the three leading intellectual electronic reviews in the world..."
-Le Monde



rest




REST - The short version



blend



flash audio - sample exact



bead sort




Bead sort - using physics to solve sorting problems in O(sqrt(n)) time. Wonder if it could be done quantum mechanically in O(1) time?



16th tones




The Carrillo Tone Piano is a recording with a prepared piano that can play a scale with notes separated by 1/16th tones.



flash audio




I'm writing some Flash9/haXe code to generate audio on the fly in Flash.

This one blows my mind, a TB-303 implemented in Flash. And it sounds kick-as.

How cool is audio programmming?
Play the tiny drum machine!
how to make actionscript 3 play generated pcm wave data
Dynamic Sound in Actionscript 8.5 - from Robots w/Lasers
SoundWriter



markov and semiotics



Sunday, June 08, 2008

lol




A very funny Firefox plugin : AmIOnMySpace.com - This plugin will alert you if you accidently stumble onto MySpace.com, and take you back to the site you came from.

Need.



zsh sleep and background




To sleep for 2 hours and then rsync a file to the server, so that it'll upload after I go to bed, in zsh:

(sleep 2h && rsync -avP file.avi n:./) &



mozilla




A great screencast of the new features in Firefox 3. Firefox 3 has some very cool new features.



Friday, June 06, 2008

hide gmail header



Stylish is a great plugin for Firefox that allows you to change the appearance of websites.

What I needed it for was to autohide the Gmail header, with the new "Google Labs" link, it overflowed onto two lines on my small screen with my large fonts.


Dual x0xb0x Demo

x0xb0x Mod Final Prototype Video 1

The making of x0xb0x

MIREX 2008




MIREX 2008 - Music Information Retrieval Evaluation eXchange (MIREX 2008).



ARAX



menubar




My little Cantillion Flash application is starting to become a real program, it now needs a Menu Bar for all the commands.

I'm going to be implementing this in pure haXe/Flash, toolkits are for the weak. lol.



Thursday, June 05, 2008

make



servo




Quick guide to Servo motors



safe fonts



5 salts



machines



no photoshop




Why 37signals doesn't use Photoshop.



yeti




yeti is an ML style functional programming language, that runs on the JVM.

Neat and wacky!



indetermine



rack




Not sure if I should use:

Ruby on Rails
Rack
GNU microhttpd

For the new project I'm working on.

Rack: a Ruby Webserver Interface
Rack SPEC
Rack docs

I'm going to start with Rails, and then hopefully go with microhttpd.


uhttpd




GNU libmicrohttpd is a small C library that is supposed to make it easy to run an HTTP server as part of another application.



Wednesday, June 04, 2008

FT232R




FT232R - The Serial to USB converter that is on my Ardunio board.

It's going to be very interesting to compare the Make Controller and the Arduino controller. The Make Controller has built in Ethernet (and USB) and talks via OSC, and the Arduino is simpler and just talks via USB. The Arduino is less than half the cost as well.

I think they both rock.



rock on




I just got my Make Controller Kit to turn on it's LEDs with Linux.

One thing they don't mention very prominently is that mchelper doesn't work with USB mode under Linux. You need to use Ethernet to control it instead.

This seems to be due to no support for USB CDC. Hopefully someone fixes this soon.



midi



radiodrum



I just got some code running on Linux that reads the output of the Radiodrum alternative music controller. It reads data right from the MIDI port, /dev/midi1 and outputs the values to stdout.


#include <sys/soundcard.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define MIDI_DEVICE "/dev/midi1"

int main(void) {
unsigned char message[4];

int byte1, byte2, byte3;
float s1x, s1y, s1z;
float s2x, s2y, s2z;

int s1whack;
int s2whack;

// first open the sequencer device for reading.
int seqfd = open(MIDI_DEVICE, O_RDONLY);
if (seqfd == -1) {
printf("Error: cannot open %s\n", MIDI_DEVICE);
exit(1);
}

// now just wait around for MIDI bytes to arrive and print them to screen.
while (1) {
read(seqfd, &message, sizeof(message));

byte1 = message[0];
byte2 = message[1];
byte3 = message[2];

s1whack = 0;
s2whack = 0;

if ((byte1 == 160)&&(byte2 == 1)) {
s1whack = 1;
}
if ((byte1 == 160)&&(byte2 == 8)) {
s1x = byte3 / 128.0;
}
if ((byte1 == 160)&&(byte2 == 9)) {
s1y = byte3 / 128.0;
}
if ((byte1 == 160)&&(byte2 == 10)) {
s1z = (byte3-14.0) / 128.0;
}
if ((byte1 == 160)&&(byte2 == 2)) {
s2whack = 1;
}
if ((byte1 == 160)&&(byte2 == 11)) {
s2x = byte3 / 128.0;
}
if ((byte1 == 160)&&(byte2 == 12)) {
s2y = byte3 / 128.0;
}
if ((byte1 == 160)&&(byte2 == 13)) {
s2z = (byte3 -14) / 128.0;
}

printf("%f %f %f\t%f %f %f\n",s1x,s1y,s1z,s2x,s2y,s2z);

}
}





spitzer



antimatter



query variables in haXe




This one took me quite some time to research:

What I wanted to do was to have a way to pass a variable in a haXe script that I'm compiling down to Flash 9. There are a bunch of ways to do it, but the one that fit my needs the best was FlashVars.

To pass in a variable into your haXe/Flash script, you just need to either embed the parameters at the end of the URL, like this:


<embed src="testpassvariables.swf?test1=la">


Or use the FlashVars variable name, like this:


<embed src="testpassvariables.swf"
FlashVars="test1=la">


You then access this variable in your haXe/Flash script with:


trace("p=" + flash.Lib.current.loaderInfo.parameters.test1);


If you are running in the standalone Flash player, it doesn't look like you can pass in FlashVars, so you need to do something like:


if (flash.Lib.current.loaderInfo.parameters.test1 == null) {
trace("standalone and undefined");
}




prefuse




Flare from prefuse is an amazing animation library built on Flash. This link about Fizix might be useful in getting it running with haXe.



Tuesday, June 03, 2008

midi



convert




Converting MIDI to Hertz and back again.



neume




Neumes are the basic elements of Western and Eastern systems of musical notation prior to the invention of five-line staff notation. The word neume is a Middle English corruption of the ultimately Greek word for breath.



paradigmatic




Paradigmatic analysis is the analysis of paradigms embedded in the text rather than of the surface structure (syntax) of the text which is termed syntagmatic analysis.



Monday, June 02, 2008

ui



ircam




Expressivity in Music and Speech

EMUS

This conference is where a paper I'm helping with is going to be presented.



Sunday, June 01, 2008