New Hosting
April 29th, 2009Over the past month or so I’ve been having some hosting issues – my cats would attack the server, some how it would get unplugged, etc. So now I’ve switched everything over to hosting at Mediatemple.net, which seems pretty awesome so far. So here’s to no more downtime, 404s or 500s and hopefully instead we’ll get some 808s. *cheers*
I updated my gcc formatting php script.
March 24th, 2009A while ago I wrote a script that formats gcc output to link errors back into TM. I updated that script with support for warnings and added some cool looking construction theme colors for the errors and warnings. Have a look see.
WordPress Auto-Update Script For A Linux Server
March 16th, 2009I wrote a little update script for my server to auto update my wordpress installation and figured it might help some other people as well. To use it you simply supply as arguments to the script three things:
1. the directory where your wordpress install lives
2. the name of the backups you’d like to create for that directory
3. the version of the wordpress install you’d like to upgrade to
For example, on my server I use this command to update my wp version:
sudo ./updateWordpress.sh /path/to/wordpress/installation efnx 2.7.1
[enter password]
[watch output]
done!
Here is the code to my script:
DIR2UPDATE=$1
NAME=$2
VERSION=$3
echo "Beginning update of $DIR2UPDATE to version $VERSION..."
if [ -d wordpress_svn ]
then
day=`date | cut -d" " -f3`
tme=`date | cut -d" " -f4`
hour=`echo ${tme} | cut -d":" -f1`
fileday=`ls -lh | grep wordpress_svn | cut -c 37-39`
filehour=`ls -lh | grep wordpress_svn | cut -c 40-41`
if [ ${fileday} != ${day} ]; then
echo "SVN directory not up to date, [ file's date ${fileday} != today ${day} ] deleting and updating"
rm -rf wordpress_svn/*
cd wordpress_svn
svn co http://svn.automattic.com/wordpress/tags/${VERSION} .
else
if [ "$filehour" != "$hour" ]; then
echo "SVN directory not up to date, [ file's hour ${filehour} != now ${hour} ] deleting and updating"
rm -rf wordpress_svn/*
cd wordpress_svn
svn co http://svn.automattic.com/wordpress/tags/${VERSION} .
else
echo "SVN directory is up to date, skipping update"
cd wordpress_svn
fi
fi
else
echo "Creating new svn directory and checking out version $VERSION...";
mkdir wordpress_svn;
cd wordpress_svn;
svn co http://svn.automattic.com/wordpress/tags/${VERSION} .;
fi
cd ..
if [ -d wordpress_int ]
then
echo "Removing old intermediate container...";
rm -rf wordpress_int;
fi
echo "Creating new intermediate container..."
mkdir wordpress_int
echo "Moving version $VERSION files into intermediate container..."
cp -rpf wordpress_svn/* wordpress_int
echo "Moving config and custom files from $NAME into intermediate container..."
cp -p ${DIR2UPDATE}/wp-config.php wordpress_int
cp -rpf ${DIR2UPDATE}/wp-content/* wordpress_int/wp-content/
cp -p ${DIR2UPDATE}/.htaccess wordpress_int
echo 'Updating svn for wp-content'
svn update wordpress_int
echo "Backing up $DIR2UPDATE..."
mkdir ${NAME}_backup
#mv -f ${DIR2UPDATE}/* ${NAME}_backup # if you'd like to mv instead of cp
cp -rpf ${DIR2UPDATE}/* ${NAME}_backup
tar -czvf ${NAME}_backup.tar.gz ${NAME}_backup
rm -rf ${NAME}_backup
echo 'Removing svn data from intermediate container...'
rm -rf `find wordpress_int/ -type d -name .svn`
echo "Moving intermediate container contents to $DIR2UPDATE..."
cp -rpf wordpress_int/* ${DIR2UPDATE}
Or you can just download the script here [rightclick + 'save as']->
updateWordpress.sh
My Bike
February 22nd, 2009My bike up until this point has been a borrowed SR Maxima 
which belongs to my friend Chris [Chrispy Finch Fry!]. While he was living as a nomad I became the caretaker of two of his prized possessions: his bike and his goldfish [see Figure (B) ]. Since then I’ve continued to use his bike and take care of his goldfish.
Until today! My parents came up North [from LA] this weekend to deliver my grandfather’s washer/dryer tower and brought with them my Dad’s old road bike. It’s an Austro-Daimler SuperLeicht from somewhere in the 70′s. Vintage ace. I went to the shop today and picked up a nice Brooks saddle for it. Looks sharp.


Originally it was a 10 speed, I believe, but one day my Father had some problems with the shifter while riding and when he got home he took it down to a single speed. I like it. The simpler the better. I don’t live in SF, so I don’t need a ton of gears.
The accessories are all vintage Campagnolo, aquired piece by piece in the 70s by my Dad. The next step to making this guy look really nice is some new tan bar tape.
OLPC Give One, Get One
November 16th, 2008The OLPC [One Laptop Per Child] Foundation is starting their annual Give One Get One campaign on November 17th! Last year I donated a laptop and got mine in the mail a few months later. It’s not the fastest computer, but it’s cute and rugged and novel [did I mention hackable?]. One laptop only costs $199, and I’m sure a lot of you out there are self-employed, which means you can benefit from the write off. You get a tax break and a kid gets a computer. Sweet deal.
Pure Actionscript 3 Window Class
November 13th, 2008I’ve been working on an easily skinnable windowing system, and this is what I have so far. I’ve attempted to mimic mac’s theme for Leopard.
The source and documentation are in their usual spots -> My classes. I’ll be updating them pretty regularly. Here’s the source for the project itself -> project source
Flash Actionscript 3 Waveform Generation Class
October 24th, 2008In my last post, Plotting a Sound Wave in Flash AS3 I detailed a method to use when displaying audio data. The method itself works great, but due to Flash’s frame-based code execution and event processing the user looses input capabilities while the flash player chugs through millions of numbers adding, rounding and comparing. In order to make displaying an audio waveform easier on both the programmer and the user I wrote a class that analyzes a Sound object progressively, and dispatches a special event containing the analyzed data. The class will construct a left and right channel Vector, each containing one data point [a number between 0 and 1] for a given number of windows, between two positions in the sound. The left and right position are measured in samples and two types of analyzation are offered. Here is a demo of the class in action:
The calculated data can be reached incrementally through the WaveformEvent object which is dispatched every frame, or at the end of all analyzation in the Waveform object’s leftChannel and rightChannel properties. The details are listed in the documentation below.
Thanks to the Summit Projects Flash Blog and Thibault Imbert at ByteArray for their posts on the different techniques that went into my class.
Source
Here is the source for my TextMate project: Sources
Documentation: class and event
And here is a Flex version (made in windows): // Thanks dem!
Sources (Flex version)
Plotting a Sound Wave in Flash AS3
September 26th, 2008I’ve always been really into wave editors. I used to make songs in Amadeus by piecing together samples from other songs. Tedious but very rewarding. In a post I made not a long time ago I detailed a little Theremin project which included some wave data visualization. In this post I”ll be going further into detail about plotting sound data.
Digital audio in it’s rawest form [PCM wave data] is a long list of numbers from 1 to -1, which represent the sound’s amplitude. Another way of thinking about this is that each number represents your speaker’s distance away from it’s rest position. At 1 the speaker is fully extended, blowing out your ears and scaring your cats, while at -1 it is fully retracted, blowing out your ears and scaring your cats. To make a meaningful visual out of this we just set up a graph where time is plotted on the horizontal axis and amplitude on the vertical. So at a really high resolution, that might look like this:

Okay, maybe it would look like that if you were living in the 80′s. Or if you were really into oscilloscopes. In reality with most popular songs being two to five minutes long, we’d be looking at HUGE graphs. One three minute song sampled at 44.1kHz/s comes out to be eight million samples per channel. Per channel. Since most modern music is in stereo, we’re looking at two graphs now. So how do we compress this data and view it in a meaningful way? We cheat a little. We kinda scrap the whole graph/function thing. Well kinda. Let’s say you have a window 1000 pixels wide and a sound 3 minutes long. We have to compress enough samples together in order to represent them using each pixel [about 7,938 samples per pixel]. Averaging doesn’t work because with values oscillating between -1 and 1 the mean is usually zero. We could take one sample every so often to represent an entire chunk and plot that, but that’s just resampling at a much lower resolution, which results in aliasing and all sorts of bogus stuff. Take this video for instance:
Just instead of helicopter blades not moving, it’ll be your data points. No, instead what we do is we scan every single sample and pick out the largest and the smallest numbers from the chunk, which in our case means running through every 7,938 samples and picking the biggest and smallest ones. Then we plot them on top of each other, maybe with a line connecting them. Flash gets a little slow working with lists and arrays this big, but I’m sure we’ll figure out some neat tricks to get this stuff working fast. That said, here’s a little demo. If you can figure out the song I’ll give you a million bucks. [Let it chug for a while, Flash is a slow beast]:
ps – don’t cheat, guess the song before you download the source, goofball.
Formatting gcc, g++ Output Using PHP In TextMate
September 20th, 2008While at ZendCon08 I saw a lot of people sharing the same love for TextMate as myself. I fricken love TextMate. Some of my friends laughed at me, saying “Bah, TM’s not an IDE, why do you want to write shell scripts to try to make it one?” And I’d be like, “I’m an ActionScript developer, there’s no point in using a sledge hammer to pound in nails.” This makes sense because my friends use Eclipse. I tried Eclipse but it’s so huge and the plugins are huge and the interface is cluttered and theming syntax-coloring is a pain. So when I got home from ZendCon, with my renewed love for PHP, and my continual quest to eventually be a good C programmer, I decided to write a gcc parser script that linked back into TextMate to go directly to my errors. I use a dark syntax theme, a slightly modded Amy, and the parser reflects that. Check out a picture of these gcc errors:
To do this you’ll need PHP installed on your machine. After that, the first step is to create a new command in TextMate’s C Bundle. Call it “Build, Format With PHP,” or anything else. Set it to save all files in the project when run [from the pull down at the top] now enter this into the text area:
export DIR=${TM_PROJECT_DIRECTORY}
~/Library/Application\ Support/TextMate/Support/bin/make_format_gcc.sh
Next select Output as “Show as HTML” so we can see our output. Now create a file called “make_format_gcc.sh” in the folder ~/Library/Application Support/TextMate/Support/bin/
Once you’ve created the file, use TM or vim to fill it with this:
php -f ~/Library/Application\ Support/TextMate/Support/bin/gcc_format.php ${FILE} ${DIR}
This bash script executes the make on the makefile and directs the standard and error output to the same file. Then the script calls php to parse and display the file. So now create a file named “gcc_format.php” in the same folder as make_format_gcc.sh and fill it with the meat of our parser:
// get stdout and stderr then delete temp file
$dir = $argv[2];
$commandFile = $argv[1] . '.mkout';
$commands = file_get_contents($commandFile);
// break lines up by line ending
$lines = explode("\n", $commands);
// find errors and link them to pages and line number
$errors = 0;
for ($i=0; $i < count($lines); $i++)
{
$fnpos = strpos($lines[$i], ':');
$filename = substr($lines[$i], 0, $fnpos);
$lnpos = strpos($lines[$i], ': error:');
$linestart = $lnpos - $fnpos - 1;
if($linestart < 0) continue;
$line = substr($lines[$i], $fnpos+1, $lnpos - $fnpos - 1);
$link = "txmt://open/?url=file://$dir/$filename&line=$line&column=1";
$lines[$i] = substr_replace( $lines[$i], '</a>', $lnpos, 0);
$lines[$i] = "<a href=\"$link\">" . $lines[$i];
$errors++;
}
$output = implode("<br />\n", $lines);
echo '
<html>
<head>
<style type="text/css">
body {background:#000000; color:#999999;}
#comment{width:100%; background: #230021; color:#6060BF;}
#fail {width:100%; background:#3E0018; color:#9918B8;}
#succ {width:100%; background:#230021; color:#B0FFF0;}
dslsh {color:#A96AA9;}
a:link {color:#008080;}
a:hover {color:#80A0FF;}
</style>
</head>
<body>
<div id="comment">
<dslsh>//</dslsh> '. $argv[1] .'\'s build results:
</div>';
echo $output . '<br />';
if($errors > 0)
{
echo '<div id="fail">Build failed with '. $errors .' errors.</div>';
}else
{
echo '<div id="succ">Build Succeeded!</div>';
}
echo'
</body>
</html>';
?>
This example assumes that you are working in a directory with a makefile, but I’m sure it can be easily modded to work with any build script. The colors reflect my favorite theme, but they should also be easily modded with lines 32-38 of the php script. Happy coding, peoples!













