I really like what Thunderbird does when you type a word like “attachment” or “attached” in a message:

So my six month experiment with Flattr has come to an end. In short, my revenue was a measly €0.42 for €2/month payment. Not worth it.
Flattr was just too much hassle. I’d want it to be able to add pages from an RSS feed, but instead, every page had to be added manually. It wouldn’t even spider your sites to index content. You had to go to the site to find new things to read (I’ve never found a Flattr badge in the wild), and it is really difficult to filter by language and keywords. Worst of all, you have to remember to click on at least one thing a month, otherwise your payment would disappear down a black hole.
Here’s my payment/revenue breakdown:
| Means -> Monthly Flattr amount 2010-10-31 |
€-1.70 |
| Flattr earnings -> revenue 2010-10-10 |
€0.09 |
| Means -> Monthly Flattr amount 2010-09-30 |
€-2.00 |
| Means -> Monthly Flattr amount 2010-08-31 |
€-2.00 |
| Means -> Monthly Flattr amount 2010-07-31 |
€-2.00 |
| Means -> Monthly Flattr amount 2010-06-30 |
€-2.00 |
| Flattr earnings -> revenue 2010-06-10 |
€0.33 |
| Means -> Monthly Flattr amount 2010-05-31 |
€-2.00 |
| Flattr earnings -> revenue 2010-05-10 |
|
| Means -> Monthly Flattr amount 2010-05-04 |
€-0.44 |
| PayPal -> means 2010-05-02 |
€12.14 |
And here’s what was actually clicked:
| Period | Thing | Clicks | Revenue |
|---|---|---|---|
| 2010-05 | We Saw a Chicken … | 1 | €0.20 |
| 2010-05 | Numpty’s Progress | 1 | €0.13 |
| 2010-09 | Numpty’s Progress | 1 | €0.09 |
My blogs might be a bit, um, niche, but I’d expected to have at least broken even.
No action is required on your part. Your video is still available worldwide. In some cases ads may appear next to your video.
Please note that the video’s status can change, if the policies chosen by the content owners change. You may want to check back periodically to see if you have new options available to you.
Under certain circumstances, you may dispute this copyright claim. These are:
I need more information. I want to learn more about the dispute process.
Please take a few minutes to visit our Help Center section on Policy and Copyright Guidelines, where you can learn more about copyright law and our Content Identification Service.
What with the sad loss of Wild East Compact Sounds this summer, my sources of music are now limited. eMusic, bless ’em, have been my source of indie stuff since about 2003. They were cheap, had a fixed price per download, and carried a raft of indie stuff and no major label tat.
Not much longer; got this in my inbox:
So, yeah, the full announcement: major label content, minimum 49¢/track, and variable pricing. Exactly all the reasons I wouldn’t want to use them. Good call, eMusic, for a battered-about subscriber since 2003.
I was initially confused by the pricing. I pay 36¢/track, so I couldn’t see how their promise that “your monthly payments will not change and you will still be able to download the same number of tracks available today, if not more, depending upon your current plan“. Then I see their new menu:
So basically they’re crediting me with a fake $4.48 a month (oh wait; “30 days”, not a month; they so want you to forget to download stuff by making the cycle date change) so I can still get my 35 downloads. Since they hint that there will now be variable pricing, I’ll bet the new stuff will be >49¢, so I really won’t be able to download as many per month after all.
They’re saying that the new pricing will allow them to do a bunch of fun stuff:
We’re also committed to making eMusic a better member experience. We recently rolled out improvements to Browse and Search pages. And we’re hard at work on a host of new features and enhancements including a music locker, which should allow you to stream your music collection from any desktop or mobile device. In addition, improvements to eMusic’s social features, to better connect you with our editors, other members, artists, labels and your friends, are also in the works. We’ve sketched out an ambitious slate, and it will take a little while to get there. We hope you’ll continue on the journey with us.
I don’t want all that social fluff. The MP3s work just fine on any mobile device, so streaming them just adds more crud. I want fixed price downloads, not some half-assed music locker. Where, oh where is Frank Hecker and swindleeeee when you need them?
A little bit of silliness for Thanksgiving:
This took almost no time to put together. The “speaker” is a Tim Hortons cup with a cheap piezo glued to the base. What makes the Arduino sing is the Tone Library running its RTTTL demo sketch, with the anthem itself pasted in from a rather old Nokia Ringtones library.

Update: Here’s the code, such as it is. It’s just the Tone/examples/RTTTL code with the tune data pasted in. I’d been programming Arduino for about a year, so that was a semi-major achievement for me:
It’s nice to revisit old code and find it was written by a friend, Brett Hagman of Rogue Robotics.
as posted on the forum:
Just got my Uno after finding semi-permanent projects for two previous Duemilanoves. Upgraded to Arduino 0020. After rebooting, and power cycling the Uno, there’s still no serial port for the Uno.
The board is noted under Linux, which reports an unknown device with ID 2341:0001. On my MacBook (10.6.4), System Profiler lists:
Code:
Communication Device:  Product ID: 0x0001  Vendor ID: 0x2341  Version: 0.00  Speed: Up to 12 Mb/sec  Location ID: 0x24110000  Current Available (mA): 500  Current Required (mA): Unknown (Device has not been configured)
There are no /dev/tty* or /dev/cu* devices that correspond to the device.
So, Netflix Canada launched today. As a (fairly) loyal Zip.ca subscriber, I was worried, but to be honest, I can do without putting DVDs in the mail every week. Since we can watch Netflix on the Wii, I thought I’d sign up for a trial month.
I tried to find things I’d want to see. Netflix is drawing blanks. I took my list of 30 movies I have queued at Zip to see how they compare. It’s not so good:
| # | Title | Zip.ca | Netflix |
| 1 | A Single Man | ✓ | ✗ |
| 2 | The Dish | ✓ | ✗ |
| 3 | Becoming Jane | ✓ | ✗ |
| 4 | October Sky | ✓ | ✓ |
| 5 | Playtime | ✓ | ✗ |
| 6 | The Commitments | ✓ | ✗ |
| 7 | The Cove | ✓ | ✗ |
| 8 | Storytelling | ✓ | ✗ |
| 9 | Jay And Silent Bob Strike Back | ✓ | ✗ |
| 10 | Princess Mononoke | ✓ | ✗ |
| 11 | Kiki’s Delivery Service | ✓ | ✗ |
| 12 | Whisper of the Heart | ✓ | ✗ |
| 13 | Salesman | ✓ | ✗ |
| 14 | Festival Express | ✓ | ✗ |
| 15 | Fat Girl (A ma soeur!) | ✓ | ✗ |
| 16 | Adam | ✓ | ✗ |
| 17 | Micmacs (Micmacs à tire-larigot) | ✓ | ✗ |
| 18 | A Chorus Line | ✓ | ✗ |
| 19 | This is England | ✓ | ✓ |
| 20 | Crumb |
✓ | ✗ |
| 21 | The Harold Lloyd Comedy Collection | ✓ | ✗ |
| 22 | Old-Time Banjo Styles | ✗ | ✗ |
| 23 | Learning Mountain Dulcimer | ✗ | ✗ |
| 24 | Animation Greats! | ✗ | ✗ |
| 25 | Black Cat, White Cat | ✗ | ✗ |
| 26 | Northfork | ✗ | ✗ |
| 27 | Leningrad Cowboys: Total Balalaika Show | ✗ | ✗ |
| 28 | The Turning Point | ✗ | ✗ |
| 29 | Winter’s Bone | ✗ | ✗ |
| 30 | Hum Dil De Chuke Sanam | ✗ | ✗ |
| Available | 70% | 7% |
The unavailable titles at Zip are ones they know about, and will try to find. Not surprisingly, all of them are also not available from Netflix. The only ones I could watch at Netflix are October Sky and This Is England. And would you credit it, but didn’t the DVD for October Sky just arrive yesterday …
Look, I know it’s early days, but Netflix needs to get a bunch better in the next 30 days. Oh, and it could do with some CanCon – it’s very weak there.
There were some flaws in the post HSV colour cycling LED on Arduino. This does much more what I wanted:
/* HSV fade/bounce for Arduino - Stewart C. Russell - scruss.com - 2010/09/19 Wiring: LED is RGB common cathode (SparkFun sku: COM-09264 or equivalent)     * Digital pin  9 → 165Ω resistor → LED Red pin     * Digital pin 10 → 100Ω resistor → LED Green pin     * Digital pin 11 → 100Ω resistor → LED Blue pin     * GND → LED common cathode. */ #define RED                9 // pin for red LED; green on RED+1 pin, blue on RED+2 pin #define DELAY              2 long rgb[3]; long rgbval, k; float hsv[3] = {   0.0, 0.5, 0.5 }; float hsv_min[3] = {   0.0, 0.0, 0.4 // keep V term greater than 0 for smoothness }; float hsv_max[3] = {   6.0, 1.0, 1.0 }; float hsv_delta[3] = {   0.0005, 0.00013, 0.00011 }; /* chosen LED SparkFun sku: COM-09264  has Max Luminosity (RGB): (2800, 6500, 1200)mcd  so we normalize them all to 1200 mcd -  R  1200/2800  =  0.428571428571429   =   109/256  G  1200/6500  =  0.184615384615385   =    47/256  B  1200/1200  =  1.0                 =   256/256  */ long bright[3] = {   109, 47, 256 }; void setup () {   randomSeed(analogRead(4));   for (k=0; k<3; k++) {     pinMode(RED + k, OUTPUT);     rgb[k]=0; // start with the LED off     analogWrite(RED + k, rgb[k] * bright[k]/256);     if (k>1 && random(100) > 50) {       // randomly twiddle direction of saturation and value increment on startup       hsv_delta[k] *= -1.0;     }   } } void loop() {   for (k=0; k<3; k++) { // for all three HSV values     hsv[k] += hsv_delta[k];     if (k<1) { // hue sweeps simply upwards       if (hsv[k] > hsv_max[k]) {         hsv[k]=hsv_min[k];       }        }     else { // saturation or value bounce around       if (hsv[k] > hsv_max[k] || hsv[k] < hsv_min[k]) {         hsv_delta[k] *= -1.0;         hsv[k] += hsv_delta[k];       }     }     hsv[k] = constrain(hsv[k], hsv_min[k], hsv_max[k]); // keep values in range   }   rgbval=HSV_to_RGB(hsv[0], hsv[1], hsv[2]);   rgb[0] = (rgbval & 0x00FF0000) >> 16; // there must be better ways   rgb[1] = (rgbval & 0x0000FF00) >> 8;   rgb[2] = rgbval & 0x000000FF;   for (k=0; k<3; k++) { // for all three RGB values     analogWrite(RED + k, rgb[k] * bright[k]/256);   }   delay(DELAY); } long HSV_to_RGB( float h, float s, float v ) {   /*      modified from Alvy Ray Smith's site:    http://www.alvyray.com/Papers/hsv2rgb.htm    H is given on [0, 6]. S and V are given on [0, 1].    RGB is returned as a 24-bit long #rrggbb    */   int i;   float m, n, f;   // not very elegant way of dealing with out of range: return black   if ((s<0.0) || (s>1.0) || (v<0.0) || (v>1.0)) {     return 0L;   }   if ((h < 0.0) || (h > 6.0)) {     return long( v * 255 ) + long( v * 255 ) * 256 + long( v * 255 ) * 65536;   }   i = floor(h);   f = h - i;   if ( !(i&1) ) {     f = 1 - f; // if i is even   }   m = v * (1 - s);   n = v * (1 - s * f);   switch (i) {   case 6:   case 0: // RETURN_RGB(v, n, m)     return long(v * 255 ) * 65536 + long( n * 255 ) * 256 + long( m * 255);   case 1: // RETURN_RGB(n, v, m)     return long(n * 255 ) * 65536 + long( v * 255 ) * 256 + long( m * 255);   case 2: // RETURN_RGB(m, v, n)     return long(m * 255 ) * 65536 + long( v * 255 ) * 256 + long( n * 255);   case 3: // RETURN_RGB(m, n, v)     return long(m * 255 ) * 65536 + long( n * 255 ) * 256 + long( v * 255);   case 4: // RETURN_RGB(n, m, v)     return long(n * 255 ) * 65536 + long( m * 255 ) * 256 + long( v * 255);   case 5: // RETURN_RGB(v, m, n)     return long(v * 255 ) * 65536 + long( m * 255 ) * 256 + long( n * 255);   } }Â
I notice that TheSource.ca has the BlueLine PowerCost Monitor at a good price. I also notice that the PowerCost uses 433MHz wireless, for which you can get a 433MHz Receiver Shield for Arduino. People have used this to receive data from home weather stations.
It’s just a smop before I have my own network-connected meter now …
Pretty much everyone tries the RGB colour cycler when they get their first Arduino. This variant cycles through the HSV colour wheel, though at fixed saturations and values.
Code:
// HSV fade/bounce for Arduino - scruss.com - 2010/09/12
// Note that there's some legacy code left in here which seems to do nothing
// but should do no harm ...
// don't futz with these, illicit sums later
#define RED 9 // pin for red LED
#define GREEN 10 // pin for green - never explicitly referenced
#define BLUE 11 // pin for blue - never explicitly referenced
#define SIZE 255
#define DELAY 10
#define HUE_MAX 6.0
#define HUE_DELTA 0.01
long deltas[3] = {
5, 6, 7 };
long rgb[3];
long rgbval;
// for reasons unknown, if value !=0, the LED doesn't light. Hmm ...
// and saturation seems to be inverted
float hue=0.0, saturation=1.0, value=1.0;
/*
chosen LED SparkFun sku: COM-09264
has Max Luminosity (RGB): (2800, 6500, 1200)mcd
so we normalize them all to 1200 mcd -
R 1200/2800 = 0.428571428571429 = 109/256
G 1200/6500 = 0.184615384615385 = 47/256
B 1200/1200 = 1.0 = 256/256
*/
long bright[3] = {
109, 47, 256};
long k, temp_value;
void setup () {
randomSeed(analogRead(4));
for (k=0; k<3; k++) {
pinMode(RED + k, OUTPUT);
rgb[k]=0;
analogWrite(RED + k, rgb[k] * bright[k]/256);
if (random(100) > 50) {
deltas[k] = -1 * deltas[k]; // randomize direction
}
}
}
void loop() {
hue += HUE_DELTA;
if (hue > HUE_MAX) {
hue=0.0;
}
rgbval=HSV_to_RGB(hue, saturation, value);
rgb[0] = (rgbval & 0x00FF0000) >> 16; // there must be better ways
rgb[1] = (rgbval & 0x0000FF00) >> 8;
rgb[2] = rgbval & 0x000000FF;
for (k=0; k<3; k++) { // for all three colours
analogWrite(RED + k, rgb[k] * bright[k]/256);
}
delay(DELAY);
}
long HSV_to_RGB( float h, float s, float v ) {
/* modified from Alvy Ray Smith's site: http://www.alvyray.com/Papers/hsv2rgb.htm */
// H is given on [0, 6]. S and V are given on [0, 1].
// RGB is returned as a 24-bit long #rrggbb
int i;
float m, n, f;
// not very elegant way of dealing with out of range: return black
if ((s<0.0) || (s>1.0) || (v<0.0) || (v>1.0)) {
return 0L;
}
if ((h < 0.0) || (h > 6.0)) {
return long( v * 255 ) + long( v * 255 ) * 256 + long( v * 255 ) * 65536;
}
i = floor(h);
f = h - i;
if ( !(i&1) ) {
f = 1 - f; // if i is even
}
m = v * (1 - s);
n = v * (1 - s * f);
switch (i) {
case 6:
case 0:
return long(v * 255 ) * 65536 + long( n * 255 ) * 256 + long( m * 255);
case 1:
return long(n * 255 ) * 65536 + long( v * 255 ) * 256 + long( m * 255);
case 2:
return long(m * 255 ) * 65536 + long( v * 255 ) * 256 + long( n * 255);
case 3:
return long(m * 255 ) * 65536 + long( n * 255 ) * 256 + long( v * 255);
case 4:
return long(n * 255 ) * 65536 + long( m * 255 ) * 256 + long( v * 255);
case 5:
return long(v * 255 ) * 65536 + long( m * 255 ) * 256 + long( n * 255);
}
}
The different resistor values are to provide a limited current to the Triple Output LED RGB – Diffused, as each channel has different requirements. The 165Ω resistor is actually two 330Ω in parallel; I didn’t have the right value, and this was the closest I could make with what I had.
Had a bit of a clear-out yesterday. I dropped off
at Free Geek Toronto. I’d heard about them from Colin at Mappy Hour, the monthly(ish) OpenStreetMap event. They have a very neat warehouse, and are definitely doing the right thing in getting surplus electronics either to people who need them, or properly recycled. On the (lengthy – 2 hours from the Junction to home, grr) drive back, I even heard a tiny CBC radio spot about them. Shame that the announcer almost said “old electronics crap” instead of “old electronics gear”, though …
I just built a new linux box to replace a bunch of the stuff I just threw out. It’s a small and quiet MSI 6676-003BUS with a fanless Atom 510 processor. It plugs straight into the HDMI of the TV, and remote work is done with VLC or SSH. To cut down clutter, I’m using a cheapo Logitech® Cordless MediaBoard Pro for PLAYSTATION®3, which works just fine as a keyboard and mouse with a generic $10 bluetooth USB adaptor.
… you need to set a password — even a trivial one — on the Ubuntu Remote Desktop settings. OS X won’t connect to your remote desktop if you don’t set a password.
That is all.
This is what NBC sounds like in Canada. I guess it’s okay to have a message, but no need to get all Yankee Hotel Foxtrot about it. I snipped off the obnoxious taco ads; NBC is so ad-infested that they have to wedge them in their videos.
I was trying to watch a Molly Lewis video, but it failed. Guess they forgot the WW in the web …
The PointyURL for this site is http://⇘⥮.⇒.ws.
(thanks, Rob)
I’d hoped to have a working demo in here, but WordPress doesn’t like the <canvas> element, so here are a couple of static screendumps:

I wrote a routine in JavaScript that recursively rewrites strings of instructions, then interprets them as a simple turtle-like language to draw on the canvas. In my copious free time, I’ll release it as a simple web app that you can play with these L-systems. But you can do some fun stuff here until I get it written.
(for more details, see Appendix C of H. Peitgen and D. Saupe, Eds. The Science of Fractal Images, New York: Springer, 1988.)
Okay, so what’s this, just given its content warnings:
You must be at least 17 years old to download this game.
Frequent/Intense Profanity or Crude Humor
Frequent/Intense Sexual Content or Nudity
Frequent/Intense Mature/Suggestive Themes
Frequent/Intense Simulated Gambling
Frequent/Intense Cartoon or Fantasy Violence
Frequent/Intense Alcohol, Tobacco, or Drug Use or References
Frequent/Intense Realistic Violence
Frequent/Intense Horror/Fear Themes
?
Sounds pretty nasty, eh? Definitely not something for the kids.
Wrong; it’s an ebook reader (specifically i2Reader). Just ‘cos Apple can’t control the content that you read on it, it slaps warnings all over it and makes you feel like a pariah just for looking at it.
I took the glyphs of an overused generic font, and subjected them repeatedly to the modern equivalent of stereotyping: rasterized them, then autotraced the bitmaps. As a side effect, all the character heights were lost, so everything’s the same size.
Truetype: MeltdownHorrid.zip
Truetype font: PoorFish.zip.
This is the first one I’ve done that hasn’t needed a printer or scanner. I exported the template to a single image (chargrid.png), then hand-wrote the characters using my graphics tablet on a new transparent layer in Gimp.
Again, the spacing needs work.
File: GrubblyScrub.zip
This isn’t quite right yet – characters aren’t encoded correctly, and it’s not quite as monospaced as it should be, but it has some nostalgia value. It’s the screen font used by the Amstrad CPC.

Font: CPC-0.9.zip