Monday, November 28, 2005

MicroTrack driver released

On 21 November, version 1.2.0 of the MicroTrack driver was released. The following is an excerpt from the readme file, which indicates those changes from version 1.1.5. Sheesh, with the amount I write about it, anyone would think I actually owned one of these devices. Still, I can see from the site logs people are coming here for info, and I so hate to let you all down. :-)

New Items:
- Level meters display levels when playing back files
- Level meters operate in REC PAUSE mode for easier level setting
- Audio inputs can be heard in both REC PAUSE and REC modes (analog inputs only)

New User Interface Items:
- Reboots the unit when a CompactFlash card is inserted
- Pop-up menu appears if the user tries to power off while recording
- All input controls are active during record or record pause to allow easy real-time adjustment of levels

Other Enhancements:
- Improved performance of Input and Headphone level controls when held down
- FFWD or REW no longer cause the timer to flash the time "00:00:00" when engaged
- "Record time available" in main screen counts down from the lesser of space available, or 2GB file limit
- Remaining record time is calculated accurately when recording from S/PDIF input
- Several improvements to HOLD button functionality:
- Stops phantom power from turning on and off
- Works if booted from card reader mode
- Continues to work if file was closed because of max file size or media full

This driver is still considered beta, so it to be used at your own risk, etc. etc.

At this point there are very few improvements left to make to the unit, so I will only report on dramatic news. Auto-splitting files at the 2GB limit seems to be the most significant issue remaining.
Friday, November 25, 2005

You Should Hear...

Here are a few things I'm currently listening to. I guess they are sorta reviews. Don't expect them to be new albums, just good ones.

Explosions In The Sky: The Earth Is Not A Cold Dead Place
Lovely instrumental guitar music that reminds me of Dif Juz and Tortoise, except it's different from either of them. They've got five other albums I have not heard. They're from Texas, home also to the wonderful Midlake. Comparisons to Godspeed! You Black Emperor are idiotic. This is much less mannered and juvenile.

Sufjan Stevens: Come On Feel The Illinoise
Absolutely his best album yet, and one that enough other people have raved about that I almost feel it's pointless commenting further. I must say that there is a repetitiveness to his songs from album to album that worries me. Now that this is out I cannot listen to the last two records; they sound like distant shades of greatness. Then again, the same thing happened to Cocteau Twins for over a decade and they just got better and better until Blue Bell Knoll. But look, "Casimir Pulaski Day" makes me cry and everything else here is fantabulous. So sell his previous records and buy this one.

Ulrich Schnauss: A Strangely Isolated Place
Both his albums are lovely but live he just hid behind a laptop and played too loud. Huge romantic swelling electronic music with a retro feel and an obvious love of Sky Records.

Blue Aeroplanes: Cavaliers
Well, it's not as good as their early stuff but a darned sight more honest than the major label releases. This sounds less like the previously rambling shambling poetry dance rock'n'trad group and more like than a solo project. Maybe it isn't really any good at all. But I likes it!

Japan: Tin Drum [extended]
Their final album and my favourite, packaged together with some nice b-sides. The 12" version of "Art of Parties" is one of my favourite songs ever, but every track here is atmospheric, groovy, or sing-along-able. Dynamic fretless bass playing? Check! Cool oriental Oberheim sounds that are not cheesy? Check! Smooth Sylvian vocals? Check! Percussion all over the place? Check! Perfect production? Check! Crypto-Maoist imagery? Check-mate!

Arcade Fire: Funeral
I am almost bored of this but "Rebellion (Lies)" is godlike. So is "Neighbourhood #1 (Tunnels)". "Sometimes we remember bedrooms, and our parents' bedrooms, and the bedrooms of our friends." Brilliant. Canadian.

Susannah Kelly: Demo
That's my beloved. And, no, you can't have a copy. And she'll get all shy when she reads this, even though it's at the bottom of the page. :-) Sweet, honest, woman-next-door pop music with a slice of soul and a groove too. Deserves an audience.
Friday, November 25, 2005

Seven Days Photos

Here are a few photos from the Seven Days of Everything performance, which I originally wrote about on 25 September and followed up on with links to reviews on 05 October.

These photos are from 19 September. The first is a poster for the event, out on the streets of Temple Bar. The next two attempt to show some of the bricolage that was incorporated into the stage.

Saturday, November 19, 2005

The Prisoner LiteTM

This BBC article announces the return of the TV programme The Prisoner as a Sky One remake with no Patrick McGoohan, no use of the brilliant Portmeirion location, and no "arty feel", though it will take "liberties with the original". That's the sort of pun that someone with a mind and a certain insight might come up with, but here it seems to be just happenstance.

One imagines that there is no point to this venture whatsoever. Want a premise for a paranoid thriller? Come up with your own instead of stealing from the best of the past, you troupe of lazy dimwits.

Damien Timmer is to be the executive producer and Bill Gallagher the writer for eight episodes next year on Granada. "Be Seeing You?" Er, no, not this time.

For good info on the original programme, visit The Unmutual. For those of you who are too young or just terminally underinformed, The Prisoner was a bizarre sequel of sorts to Danger Man (Secret Agent Man in N. America) which ran for 17 brilliant, baffling, and completely compelling episodes on ITV from 1967. It was one of the three best television shows ever.

"The butcher with the sharpest knife has the warmest heart."

Thanks to Shay for the tip.
Saturday, November 19, 2005

"But isn't Kennedy already dead?"

Jonathan Weiss has made a feature-length film of J.G. Ballard's 1970 "condensed novel" The Atrocity Exhibition, hardly the most filmable book ever written. And now it is available on DVD in PAL format, or at least it might be as of January 2006. It's all a bit difficult to comprehend, and the web site, which demands 3.6MB of data to render a single page, certainly sets some sort of new record for lack of usability.

I would not have known about this except for receiving an email from Filmfreak Distributie in Amsterdam, apparently due to my1 article on the book, published back in 1993 as part of The Electronic Labyrinth, a study of hypertext fiction that has been used as a textbook in many courses around the world. (Yeah, there's lots about me you don't know.)

In any case, the DVD is 25 euros and contains a full-length commentary from Ballard himself, who is hip to the film-maker's interpretation. Eventually I'll get a copy and let you know what I think. As a massive Ballard fan for a quarter of a century you know I'll be in full critical mode!

And sometime I'll tell you the story of how my friend Chris and I got the film of Crash made.

1 I say "my" because I've effectively forgotten which parts were written by Christopher Keep and which by myself. It's a nice feeling.
Saturday, November 19, 2005

The Funniest Things You Will Ever Read (Third Sitting)

Welcome to another dozen joys from sites that contain stupid newspaper articles, bad typos, crackpot ideas, religious mania, and other silliness. There will also be a Woody Allen quotation, though why, I do not know. And yes, I still have more, so stay tuned.

"Never again will you have to choose between having sushi or having a USB memory drive." But what, no wasabi? Go!

An amusing and useful timepiece. Go!

Man whose lover got pregnant using semen obtained through oral sex can sue for emotional distress — but not theft. Go!

Sid is no longer a cookie monster? All joy is being sucked from children's entertainment. Go!

Yahoo is using us to predict the market. Think about this one carefuly and realise that someone somewhere is getting rich off us idiots. Go!

Beer and seaweed sustain missing boater. Personally I prefer saki with my seaweed, but this guy was hardly in a position to be picky. Go!

Celebrity sheep meets NZ leader. Go!

Man signaled turns during chase. Idiot. Go!

The Exorcist in 30 seconds, re-enacted by bunnies. Certainly saves time at the video store. Go!

Dog ends gunman's plan for shooting rampage. This link summarises the original at The Globe and Mail, for which you will have to pay. Go!

Them Mac users sure is smart. Go!

Technical review of juvenile felis catus. An old joke but still a good one. Go!

Not only is there no God, but try getting a plumber on weekends.
-- Woody Allen

Tuesday, November 08, 2005

World Premiere Of Tactile Surface

I will be appearing live this Friday 11 November at 8pm with John Galvin in our world premiere as Tactile Surface. We will be performing "Tectonic Plate I", an improvisation for guitar, cigarette lighter, and controlled amplification.

This is part of the first Mamuska night of the season, held for the first time at Daghdha's new headquarters, the former Church of St. John's of the Cross in St. John's Square, Limerick. A Mamuska is an unusual evening of experimentation and creativity, incorporating film, dance, performance art, theatre, music, and more. The friendly atmosphere has always brought out the best in people, both performers and audience, and this week should be no exception.

Anything can happen and probably will. Admission is free, so there is no possible excuse for your absence if you are on this continent or within light-speed transport distance.

Daghdha Dance Company is Ireland's leading contemporary dance company. Davide Terlingo is the coordinator of Mamuska. Thanks to all for their support.
Monday, November 07, 2005

The Funniest Things You Will Ever Read (Part The Second)

These dozen items are not necessarily jokes, but are very funny if you look at them the right way. Those that aren't funny are at least revealing of something of human nature. If they are neither funny nor revealing then there is something wrong with a) my selection techniques, or b) your brain. More to come!

A rabbit called "Moon Cake" who balances food on its head. Go!

No, I do not want to know what "average finished hair meal" means. But remember: "You are what you eat read on the internet." Go!

"You could say the Rapture index is a Dow Jones Industrial Average of end time activity, but I think it would be better if you viewed it as prophetic speedometer." Well, that is so much clearer, thank you. Must say I bust a gut thinking that the French no vote on the EU constitution has downgraded the chance likelihood of The Antichrist appearing. Go!

"Virtual agents don't complain when they revisit the same sites and don't have to be paid like real people hiking the mountains." Hold on a minute... people hiking mountains get paid? Go!

Grotesque and horrid things kids do to each other. This huge site has spawned an offensive, peurile, and hilarious book. Go!

This is what happens when a bored Christian lego-loving priest gets his own web site. Go!

Dogs in elk. Really. No sort of a joke but amusing if you are a dog lover. Or an elk lover, I suppose. Go!

"Fat, green, musty-smelling nocturnal parrots, which cannot fly but can climb tall trees." Well, what frickin' good are they then? Go!

"There are many advantages to getting an autopsy." Maybe so, but I think I'll wait just a little bit longer. Complete with "graphics". Go!

Build your own 1,500,000 Volt Tesla Coil. Just don't blame me if you die. And you will. Die I mean. Not a joke. Go!

"State constitution may protect Bigfoot." This was in Nebraska. Unfortunately the page has vanished.

Margaret's Honey. This is beyond my understanding, but then again, I'm on dial-up. Go!

Sex without love is an empty gesture. But as empty gestures go, it is one of the best.
-- Woody Allen "Love and Death"

Thursday, November 03, 2005

Two Photos From August

A friend of mine noticed this perspective but I managed to take the shot. :-) Actually it took a little digital help in order to capture more detail. This was part of an intriguing multi-lingual Scrabble game on 21 August 2005. Anyone whose native language was not English was allowed to use the dictionary: we had Japanese, Italian, and German. I sure hope these were my tiles -- otherwise I was cheating!

The view on 13 August 2005 from (a different) friend's room out over some lovely oil storage drums. These are still active and should they ever blow, they will take a large community of student dwellings with them. It's a little unsettling. The building in the background to the left has the most intriguing geometry; I was compelled to sketch it and I'm not much of a visual artist.
Wednesday, November 02, 2005

Javascript Oblique Strategies

A little while back I posted my Python programme for generating random Oblique Strategies. Well, for fun I thought I'd whip up a quick Javascript implementation for this site.

Check out the sidebar. Every time a page loads you get a new strategy. This is likely far too many: I recommend one a day unless you are being very very creative.

Otherwise you may just explode.

This version uses only my own strategies, not those of Brian Eno. I thought that would be more personal. :-)
Wednesday, November 02, 2005

Javascript Implementation Of Recent Comments

In my search for ways to make the information on this site more timely and accessable, I came across the so-called Farrago Recent Comments Hack. It does some pseudo-magical stuff with Blogger tags, but I thought I could go one better by encapsulating the code in a proper class, providing comments, and enhancing the code for readability. Plus I made it work with my chosen date format and have made it easier for all of you to do the same.

Once you have read how the original works, follow these steps to use my enhanced version. I do assume you know something about what you are doing here. This is not for those unfamiliar with their template.

1. The following is the Javascript which does the processing. There are two ways of using it.

a) The preferred way is to save it as its own text file, with a name like "rc.js" and then upload it somewhere you have space on the web. Link to it from the header of your template with a line like: <script type="text/javascript" src=""></script>

b) If you don't have external storage, put this code in the header of your template, wrapped in script tags. To be explicit, this line goes first: <script type="text/javascript" language="JavaScript1.2">, then the code below, then finally this line: </script>.

OK, here's the code.

Blogger Recent Comments

Based on the Farrago Recent Comments Hack v1.03
(c) 2004 Ebenezer Orthodoxy

Statement: I would GPL the code if the original author would.
Mods by: Robin Parmar

// our class
function RecentComments() {
// options to change
this.displayAmount = 10;
this.displayTemplate = '<li>[name]:<br/>[title]</li>';
this.displayPre = '<ul>';
this.displayPost = '</ul>';
this.displayLink = true;

// properties
this.comments = new Array();
this.title = '';
this.itemurl = '';

// methods
this.SetTemplate= rcSetTemplate;
this.SetAmount = rcSetAmount;
this.SetLink = rcSetLink;
this.SetPrePost = rcSetPrePost;

this.SetTitle = rcSetTitle;
this.SetUrl = rcSetUrl;

this.SortDate = rcSortDate;
this.AddComment= rcAddComment;
this.Display = rcDisplay;

// this line uses my date converter method
this.DateConvert = rcDateConvert;

// comment out the previous line and uncomment the
// next line to use original date format
// this.DateConvert = rcDateConvertDefault;

// or write your own and insert it

// simple property setters: these are used by process
function rcSetTitle(x) {
this.title = document.getElementById(x).innerHTML;
function rcSetUrl(x) {
this.itemurl = x;

// these are used by user to customise
function rcSetTemplate(x) {
this.displayTemplate = x;
function rcSetAmount(x) {
this.displayAmount = x;
function rcSetLink(x) {
if (x==0) {
this.displayLink = false;
} else {
this.displayLink = true;
function rcSetPrePost(x, y) {
this.displayPre = x;
this.displayPost = y;

// date format converter
// insert your own here depending on the format you use for comment dates
// this one converts from:
// 01 November, 2005 16:35
// to:
// 11/01/2005 16:35:00
function rcDateConvert(dt) {
var s = dt.split(' ');
var d = s[0];
var m = s[1];
var y = s[2];
var t = s[3];

var MonthHash = new Array();
MonthHash['January'] = '01';
MonthHash['February'] = '02';
MonthHash['March'] = '03';
MonthHash['April'] = '04';
MonthHash['May'] = '05';
MonthHash['June'] = '06';
MonthHash['July'] = '07';
MonthHash['August'] = '08';
MonthHash['September']= '09';
MonthHash['October'] = '10';
MonthHash['November'] = '11';
MonthHash['December'] = '12';

// trim off comma
m = m.substring(0, m.length-1);

return MonthHash[m] + '/' + d + '/' + y + ' ' + t + ':00';

// default converter: does nothing
// use if your comment date format is:
// mm/dd/yyyy hh:mm:ss
function rcDateConvertDefault(dt) {
return dt;

// given a date string this returns a sorted representation
function rcSortDate(strDate) {
strDate = this.DateConvert(strDate)

var d = new Date(strDate);

var day = '' + d.getDate();
if (day.length==1) {
day = '0' + day;
var month = '' + (d.getMonth()+1);
if (month.length==1) {
month = '0' + month;
var hour = '' + d.getHours();
if (hour.length==1) {
hour = '0' + hour;
var min = '' + d.getMinutes();
if (min.length==1) {
min = '0' + min;
var sec = '' + d.getSeconds();
if (sec.length==1) {
sec = '0' + sec;
var sortDate = '' + d.getFullYear() + month + day + hour + min + sec;
return sortDate;

// adds to global comments array
function rcAddComment(title, url, id, a, datestamp) {
var author = a;
var expt = '';
var st = '';

// grab content of our hidden layer containing all items
var html = document.getElementById('comm' + id).innerHTML;

// strip out whitespace
while (html.indexOf("\n") > -1) {
html = html.replace("\n", "");
while (html.indexOf(" />") > -1) {
html = html.replace(" />", "/>");
while (html.indexOf(" <a/>") > -1) {
html = html.replace(" <a/>", "<a/>");

var htmll = html.toLowerCase();
var pos1 = htmll.lastIndexOf('<br><a></a>posted by');
var pos2 = htmll.lastIndexOf('<br><a></a><a></a>');
var pos3 = htmll.lastIndexOf('<br/><a/><a/>');
var pos4 = htmll.lastIndexOf('<br/><a></a><a></a>');
var aoffset = pos1 + 6;

if (pos3 > -1) {
pos2 = pos3;
if (pos4 > -1) {
pos2 = pos4;
if (pos2 > -1) {
pos1 = pos2;
aoffset = htmll.lastIndexOf('<a><b> </b></a>');
if (aoffset == -1) {
aoffset = htmll.lastIndexOf('<a><b></b></a>') - 1;

if (pos1 > -1) {
author = html.substr(aoffset+15, html.length-1);
expt = html.substr(0, pos1-4);
} else {
expt = html;
expt = expt.replace(/(<([^>]+)>)/ig, "");

if (expt.length > 50) {
expt = expt.substr(0, 50);
if (expt.lastIndexOf(' ') > -1) {
expt = expt.substr(0, expt.lastIndexOf(' '));
expt += '...';
expt = expt.replace('"', "\"");
expt = expt.replace("'", "\'");

author = author.replace("<A ", "<a ");
if (!this.displayLink) {
author = author.replace(/(<([^>]+)>)/ig, "");

// build a template string of HTML
st = this.displayTemplate.replace('[name]', author);
st = st.replace('[title]', '<a title="' + expt + '" href="' + url + '#c' + id + '">' + title + '</a>');

// prefix with date for sorting purposes
st = this.SortDate(datestamp) + st;

// accumulate on our array

function rcDisplay() {
// most recent comments first

if (this.displayPre.length >0) {

for (i=0; i<10 && i < this.comments.length && i < this.displayAmount; i++) {
var s = this.comments[i];

// strips off date prefix
s = s.substr(14, s.length-1);

if (this.displayPost.length >0) {

2. Depending on the comment date format you use, you may need to provide your own conversion method. This class works with the original Farrago format and my format as well. If you know a bit of Javascript it's pretty easy to extend, following the code example here.

3. Edit your template to put the following in the sidebar where you'd like the comments to appear. Your formatting may be different, but it'll be pretty darned similar. This whole block is wrapped in tags to ensure it only appears on the main page, because it produces an empty list on item pages and a misleading list on archive pages.

<!-- START RecentComments 1.05 -->
<h2>recent comments</h2>
<script type="text/javascript" language="JavaScript1.2">
var rc = new RecentComments();
rc.SetTemplate('[name]: [title]<br/>');
rc.SetPrePost('', '');
<span id="comm<$BlogItemNumber$>" style="visibility:hidden; position:absolute;">
<script type="text/javascript" language="JavaScript1.2">
<span id="comm<$BlogCommentNumber$>" style="visibility:hidden; position:absolute;">
<script type="text/javascript" language="JavaScript1.2">
rc.AddComment(rc.title, rc.itemurl, '<$BlogCommentNumber$>', '<$BlogCommentAuthor$>', '<$BlogCommentDateTime$>');
<script type="text/javascript" language="JavaScript1.2">
<!-- END RecentComments 1.05 -->

4. This example shows how the various options can be set from directly in your template code, so that you do not need to directly edit the Javascript file. There are four methods called in the first script block above. But you may be just as happy with the defaults.

rc.SetTemplate() sets the template string for each entry in the comment list. The placeholder "[name]" will get filled by the author's name, and "[title]" with the title of the post. The default is <li>[name]:<br/>[title]</li> which sets up each comment as an HTML list item.

rc.SetPrePost() takes two string parameters containing the HTML you want to be written before and after the comment list. The default is <ul> and </ul>, again for a simple list implementation.

rc.SetLink() takes the number "0" to turn off author links. Otherwise, by default, the author's name will link to their page.

rc.SetAmount() takes a number up to 10 indicating how many comments to display, 10 being the default.

So, in the example above we have changed the default code from an HTML list to a simple sequence of lines seperated by line breaks. We have turned off name linking, and set the maximum number of comments to 5.

Following the Javascript, the tag section performs some magic. Remember that everything within a Blogger tags gets repeated for each of your posts. It is a loop construct. The first invisible span prints out the item (that is to say, the article) title with its own special ID.

The Javascript following this sets the title referencing that ID, and sets the URL using the appropriate blog tag.

Then we use a similar trick to grab the comment info. Blog tags loop over each comment, set in its own invisible span. The following Javascript associates the title and URL we already set with further details from the comment.

The final section, outside the Blogger tags, simply calls a method to display the results.

Note: I do not recommend you change any of the code in this section.

6. Once you have saved your template with these changes, and republished the site, you should have a lovely list of the most recent comments made to your blog. Note that mousing over the title reveals the first characters of the comment.

All is not perfect however. I have discovered that some comments seem to be ignored by this list, presumably because they are for articles too old to be on your main page. But altering the tags to access these would result in every article in your entire blog being included in invisible spans on your home page. The resulting slowdown is likely not worth it.

Think of this as "recent comments on recent articles" and you have the right idea!

Post any ideas for enhancements here. My regards to the original author, who did a great job of hacking Blogger code. My contribution is only to make this more understandable.

Addendum: 2006.03.17
I have made the explanation in section 4 a bit more explicit and added in the complete text of sections 5 and 6.
Wednesday, November 02, 2005

Two Pictures: Limerick

I've noticed this site has been rather graphics-free for a while. People like pictures. To remedy this obvious disparity, here are a couple of similar photos taken 5 September 2005.