Saturday, June 27, 2009

Custom Iron-on Decals for T-shirts (or Whatever)

If you have an iron and an inkjet printer, you can make your own iron-on decals. The thermal transfer paper runs about $1 per sheet. This one is supposed to be one of the best.

The easiest way to do this is to use white fabric. Then you can simply scale the picture you want to print and take the mirror image (if getting the orientation correct matters for your image) and print it onto the special thermal transfer paper. Then you press the paper onto the fabric (pre-ironed, so it's smooth) with a hot iron (though not against an ironing board, because an ironing board is soft and the transfer will become distorted... one needs a hard, flat surface).

It's really not that difficult, and making something like this gives a feeling of satisfaction. My first test is shown here. My plan is to custom-design a T-shirt. Maybe with discreet logos on the sleeves.



If you need ideas for designs, check out some of the cool shirts at Topatoco:






Wednesday, June 17, 2009

Synthesizing a word for a set of zero

I felt like making up a word for when you have zero of something. Like if three is a triple, and two is a double, then one is a single, but what is zero?

There's a good generic term for such a word: a tuple. For n=4 and above, all the tuples end in "-uple" (quandruple, quintuple, sextuple,...). Maybe they should be called the "uples". And Wikipedia has an entry for n=0. It looks like this:
0: Empty tuple; Unit
I don't like it much. Since all the other prefixes come from some variant of the Latin word for the number, I decided to start with the Latin word for zero. Of course, the Romans didn't have a symbol for zero. Some hold that the Babylonians were the first to come up with one and that this idea propagated around and eventually the Latin alphabet picked up words for zero in the Middle Ages: cifra and zephyrum. (The English cognate would be cipher.) Therefore, I propose zephle as the zero-tuple. Or else zerple. "Zephle" is probably a more genunine fake tuple, but "zerple" (pronounced as ZEER-pul) is more self-explanatory and fun to say. Zerpledecker bus. Zerple cheesburger. Zerple date. Identical zerplets. See?

Word most likely to be confused for zero-tuple: nonuple. It's when you have nine of something. There's a really long list of such words here.

Saturday, June 06, 2009

Automated self-monitoring

Looking for a way to self-monitor my working habits, I decided to write a script to analyze my notebook file and determine on which dates I had made an entry. Ideally, I ought to be working and making notes on my progress every day.

I decided to grep through the file for datestamps and form something like an ASCII sparkline, indicating whether I had made at least one entry on a given day.

The output for the last couple of months looks like this:
.|.|...|......|...|...||.|..||||....||........|..|..|||.

It looks even more badass displayed on my desktop via Geektool. I am also displaying the actual number of entries for each day immediately below the corresponding sparkline symbol. Admittedly, this contradicts the idea of displaying the information in tiny graphical form. I may eventually switch to something like this:
.|.-...:......-...-...--.:..-::-....::........-..-..---.


This is almost like Benjamin Franklin's system for reinforcing his 13 virtues. Admittedly, I am only reinforcing one virtue now, but I have a few other habits that I have been monitoring with my all-purpose tracking script, and these are ripe for display and correlation with other behaviors.

Friday, June 05, 2009

My 1mm-thick PDA backup system

You may have heard of the "Hipster PDA". It started as a joke that a bunch of notecards could be used like a PDA without all the electricity and technology. Then it caught on. There are elements of this that I like (particularly the creativity and do-it-yourself-ness), but it wasn't what I wanted.

The problem that motivated me: Every once in a while my PDA runs out of charge and/or loses all its data. As everything is backed up on my laptop, this is mainly just inconvenient. But when I suddenly need some vital bit of information that is on said PDA, it suddenly shifts to serious nuisance.

My first solution was to simply print out my calendar (which I keep in the plain text remind format) in 4-up form, fold it up, and keep it in my back pocket. And I found that I liked this because it is often easier to pull out and immediately access the information that I want. (It is particularly useful when going on a trip and having flights, times, hotels, and rental car places all listed on a little rectangle of paper.)

This eventually developed into a full script. This script currently collects the following things into a single text file. 0) The current date, to ensure freshness. 1) The output of my remind calendar, excluding boring things. 2) A little address book. I started by extracting specific contact information for specific people from the OS X Address Book via a little command line program called contacts. Then I wised up and started extracting everyone who has an asterisk after their name, allowing me to easily switch people in and out of my short list. (This is something I would like to automate someday.) 3) Some things that I have hard-coded into the program, including public transportation information, phone numbers for taxis, directions to places that I rarely go to, and business hours for a few places. 4) A tiny calendar. I initially thought of setting this up to grab the last, current, and next months from the UNIX cal program, but then I thought of the ingenious thumb calendar which allows a bunch of months to be compactly fit into a small area. And I realized that I could make my own. 5) And finally, my shopping list as extracted from my todo.txt to-do list.

[The only thing that I would like to get on there that I haven't figure out yet is a ruler, along the edge. This will likely require monkeying with PostScript or something.]

Here's the pared down script:

#!/usr/bin/perl -w

$fname="/Users/Surly/remind.txt";
open(INFO,$fname);
@lines = ;
close(INFO);
$outfile="hpda.txt";

open(OUTFO, ">$outfile");

$datestamp=`/bin/date "+%y%m%d"`;
print OUTFO $datestamp;


$i=0;
while($lines[$i])#assuming we initially have a numbered subtitle
{ $rem=(($lines[$i]=~/^rem/)|($lines[$i]=~/^REM/));
$pass=((($lines[$i]!~/^[;#\n]/)&$rem)&($lines[$i]!~/growlnotify/));
$pass=$pass & ($lines[$i]!~/boring/);

if ($pass)
#ignore comments and growlnotifys and commands and only pass REMs
{$lines[$i]=~s/^rem //;$lines[$i]=~s/^REM //;
$lines[$i]=~s/ msg/:/;$lines[$i]=~s/ MSG/:/;
print OUTFO $lines[$i];
}
$i++;
}

print OUTFO "===contacts=========\n";
$a1=`contacts -H -f "%n %mp %wp %hp" Cleo`;
$a1=~s/-/./g; print OUTFO $a1;
$a1=`contacts -H -f "%n %wp %op" Popeye`;
print OUTFO $a1;
$a1=`contacts -H -f "%n %mp %e" Betty`;
print OUTFO $a1;
$a1=`contacts -H -f "%n %mp %wp %op %a" Snidely`;
$a1=~s/\n\n/\n/g; print OUTFO $a1;
$a1=`contacts -H -f "%n %mp" "*"`;
$a1=~s/-/ /g;print OUTFO $a1;
$a1=`contacts -H -f "%n %mp %a" God`;
$a1=~s/\n\n/\n/g; print OUTFO $a1;

print OUTFO "===random stuff====\n";
print OUTFO "The Hamburglar's place: Practice, practice, practice, and take a left.\n";
print OUTFO "Library: open until 8pm.\n";
print OUTFO "===thumb calendar=====\n";#thumbcalendar.com
print OUTFO " Su Mo Tu We Th Fr Sa JUL (31)\n";
print OUTFO " Su Mo Tu We Th Fr Sa SEP (30)\n";
print OUTFO " 01 02 03 04 05 06 07\n";
print OUTFO "01 02 03 04 05 06 07 08 09 10 11 12 13 14\n";
print OUTFO "08 09 10 11 12 13 14 15 16 17 18 19 20 21\n";
print OUTFO "15 16 17 18 19 20 21 22 23 24 25 26 27 28\n";
print OUTFO "22 23 24 25 26 27 28 29 30 31\n";
print OUTFO "29 30 31\n";
print OUTFO " Su Mo Tu We Th Fr Sa JUN (31)\n";
print OUTFO " Su Mo Tu We Th Fr Sa AUG (31)\n";
print OUTFO "===\@shopping========\n";

$fname="/Users/Surly/todo.txt";
open(INFO,$fname);
@lines = ;
close(INFO);

$i=0;
while($lines[$i+1]){$i++;}

while($i>=0)
{ $pass=(($lines[$i]!~/^x /));
$pass=$pass & (($lines[$i]!~/\@office/));
$pass=$pass & ($lines[$i]=~/buy/);
$pass=$pass & ($lines[$i]!~/\@online/);

if ($pass)
{$lines[$i]=~s/ \@shopping//;
$lines[$i]=~s/^buy //;
print OUTFO $lines[$i];
}
$i--;
}

close(OUTFO);

Thursday, June 04, 2009

The Surly Teabag Consumer Report on the Last.fm subscription

So I wanted to play a particular album. It looked like it was playable from last.fm (under their current you-can-play-any-streamable-track-3-times-for-free policy) but that seemed to entail clicking each and every one of those little play buttons. I wanted to stream a continuous set of songs so I could work without interruption. So I anted up the 3 bucks for a one-month subscription to last.fm. My conclusion is that it is worth it, but first some details:

The last.fm playlist creator has a very clicky interface. What I wanted was just to click on something near the album and put the whole thing in a playlist. But there seems to be no option for that. So you've got to find every song you want to hear and click on it a couple of times to get it on the playlist. At least dialog boxes can be dismissed by hitting the return key. Before you can play a playlist, it needs at least 45 playable tracks by 15 different artists, so be prepared to do a lot of clicking.

Now the good news. It is freaking awesome: I discovered a bunch of new songs that I loved, so I went out and bought them. This is probably the most efficient way to track down those elusive tracks that I want to listen to over and over. Thank you, last.fm.