<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10772591</id><updated>2012-01-26T22:43:25.849-08:00</updated><category term='gpg'/><category term='astronomy'/><category term='sysadmin'/><category term='gpgmail'/><category term='unsanity'/><category term='rights'/><category term='osx/utility'/><category term='development'/><category term='scifi'/><category term='quark'/><category term='strategy'/><category term='tsa'/><category term='lens'/><category term='privacy'/><category term='canon'/><category term='dvd'/><category term='osxs'/><category term='Greasemonkey'/><category term='cocoa'/><category term='eff'/><category term='applescript'/><category term='encryption'/><category term='audio'/><category term='iphone'/><category term='spam'/><category term='TextMate'/><category term='rails'/><category term='evil'/><category term='webdev'/><category term='xp'/><category term='GMail'/><category term='utility'/><category term='Adobe'/><category term='scripting'/><category term='lego'/><category term='MySQL'/><category term='macfuse'/><category term='grand central'/><category term='java'/><category term='camera'/><category term='fink'/><category term='security'/><category term='apt'/><category term='tiger'/><category term='sco'/><category term='rubygems'/><category term='bash'/><category term='Mail.app'/><category term='misc'/><category term='puppet'/><category term='lightroom'/><category term='rspec'/><category term='webgame'/><category term='Firefox'/><category term='iphoto'/><category term='pymacadmin'/><category term='cat'/><category term='itunes'/><category term='vista'/><category term='jailbreak'/><category term='civil-rights'/><category term='svn'/><category term='subversion'/><category term='google'/><category term='ruby'/><category term='launchd'/><category term='zfs'/><category term='fuse'/><category term='10.7'/><category term='apple'/><category term='Adobe Creative Suite'/><category term='instadmg'/><category term='Thin'/><category term='irb'/><category term='Finder'/><category term='osx'/><category term='Leopard'/><category term='ldap'/><category term='sound'/><category term='weewar'/><category term='python'/><category term='geeky'/><category term='10.6'/><category term='itouch'/><category term='anacron'/><category term='tokamak'/><category term='spotlight'/><category term='wargame'/><category term='rendezvous'/><category term='ape'/><category term='tracks'/><category term='cake'/><category term='automator'/><category term='rspec_on_rails'/><category term='SGI'/><category term='apache'/><category term='linux'/><category term='growl'/><category term='gtd'/><category term='freebies'/><category term='handbrake'/><category term='photography'/><category term='photoshop'/><category term='10.5'/><category term='luggage'/><category term='Snow Leopard'/><category term='gps'/><category term='osx/Mail'/><category term='cool'/><category term='Sun'/><category term='cgi'/><category term='unix'/><category term='search'/><category term='QuickLook'/><category term='facter'/><category term='microsoft'/><category term='jruby'/><category term='bonjour'/><category term='classic'/><category term='10.4'/><title type='text'>Have GNU, Will Travel.</title><subtitle type='html'>Photography, OS X &amp;amp; Linux info.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default?start-index=101&amp;max-results=100'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>115</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10772591.post-557286214395999565</id><published>2012-01-22T21:21:00.000-08:00</published><updated>2012-01-22T21:21:58.026-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Creative Suite'/><title type='text'>Creative Suite 5.5 refuses to accept a serial number to end trial mode</title><content type='html'>My wife recently upgraded to a MacBook Air, and when I went to install CS 5.5 on the MBA it accepted the serial number during installation but then would bring up the Adobe Application Manager screen when you started any CS application asking to either run in trial mode, or enter a serial number. And it wouldn't take the serial number that it had just accepted during installation. Yay!&lt;br /&gt;&lt;br /&gt;So to spare anyone else the multiple chat sessions with Adobe support, with multiple escalations per session, here's how to fix it.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Quit all your CS applications&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Open a terminal window.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo -s&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;cd '/Library/Application Support/Adobe/Adobe PCD'&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;. You'll see a cache directory in there. Don't delete it like the tech support guy tells you to (Out of paranoia, I renamed mine instead), that'll trigger a message when you try to start a CS app telling you to reinstall CS.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;cd cache&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt; - you'll find a file named cache.db rename it to cache_broken.db.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Open one of your CS applications. It'll ask you for the serial and this time, it'll accept it.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-557286214395999565?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/557286214395999565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=557286214395999565&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/557286214395999565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/557286214395999565'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2012/01/creative-suite-55-refuses-to-accept.html' title='Creative Suite 5.5 refuses to accept a serial number to end trial mode'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-794560622019814575</id><published>2011-12-21T22:26:00.000-08:00</published><updated>2011-12-21T22:27:03.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='10.7'/><category scheme='http://www.blogger.com/atom/ns#' term='sound'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>Weird Lion audio issue with headphones</title><content type='html'>My wife was having a weird audio problem on 10.7.2 - she'd be listening to iTunes, plug in her headphones, then get silence. Restarting iTunes would make the audio work on the headphones, but then if you unplug the headphones, silence until restarting it again. Same symptoms with watching YouTube videos in Safari.&lt;br /&gt;&lt;br /&gt;Poked around a bit, finally found a corrupt preference file - &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;com.apple.BezelServices.plist&lt;/span&gt; - deleted it, logged out and back in, and sound is working right again.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-794560622019814575?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/794560622019814575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=794560622019814575&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/794560622019814575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/794560622019814575'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2011/12/weird-lion-audio-issue-with-headphones.html' title='Weird Lion audio issue with headphones'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1624433104522120383</id><published>2011-09-07T13:01:00.000-07:00</published><updated>2011-09-07T15:46:07.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='10.7'/><category scheme='http://www.blogger.com/atom/ns#' term='puppet'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='luggage'/><title type='text'>Automate removing Diginotar CA certificate</title><content type='html'>Ed Marczak posted how to delete the untrustworthy Diginotar CA cert on his &lt;a href="http://radiotope.com/content/remove-certificate"&gt;blog&lt;/a&gt;. Read about why you want to trash it at &lt;a href="http://www.computerweekly.com/Articles/2011/08/30/247730/Microsoft-warns-of-fraudulent-digital-certificate-issued-by.htm"&gt;ComputerWeekly.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To make it easier for you to do the right thing and delete it on the machines you manage, here's a quick how to on automating it.&lt;br /&gt;&lt;br /&gt;If you're using puppet to manage your Macs, just add this exec to one of your manifests.&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; exec { "Eliminate untrustworthy DigiNotar CA.":&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; command =&amp;gt; "/usr/bin/security delete-certificate -Z C060ED44CBD881BD0EF86C0BA287DDCF8167478C /System/Library/Keychains/SystemRootCertificates.keychain",&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; onlyif =&amp;gt; "/usr/bin/security find-certificate -c Diginotar &amp;nbsp;/System/Library/Keychains/SystemRootCertificates.keychain",&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; }&lt;/code&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're using another system management tool, here's how to make a package with the luggage that will delete the Diginotar cert when you install the pkg.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Download the luggage from &lt;a href="https://github.com/unixorn/luggage"&gt;github&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Create a Makefile with the following contents:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; Copyright 2011 Joe Block &lt;jpb@apesseekingknowledge.net&gt;&lt;/jpb@apesseekingknowledge.net&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; Licensed under the Apache License, Version 2.0 (the "License");&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; you may not use this file except in compliance with the License.&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; You may obtain a copy of the License at&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; &amp;nbsp; &amp;nbsp; http://www.apache.org/licenses/LICENSE-2.0&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; Unless required by applicable law or agreed to in writing, software&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; distributed under the License is distributed on an "AS IS" BASIS,&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; See the License for the specific language governing permissions and&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# &amp;nbsp; limitations under the License.&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;include /usr/local/share/luggage/luggage.make&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;TITLE=nuke_diginotar_certificate&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;REVERSE_DOMAIN=net.unixorn&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;PAYLOAD=pack-script-postflight&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Create a postflight script with the following contents:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;#!/bin/bash&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# Trash untrustworthy Diginotar root ca cert.&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# See http://www.computerweekly.com/Articles/2011/08/30/247730/Microsoft-warns-of-fraudulent-digital-certificate-issued-by.htm&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# and&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# http://radiotope.com/content/remove-certificate&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;#&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;# for why.&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;/usr/bin/security find-certificate -c Diginotar &amp;nbsp;/System/Library/Keychains/SystemRootCertificates.keychain&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;if [ $? -eq 0 ];then&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;logger "Deleting Diginotar root cert from SystemRootCertificates.keychain"&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;/usr/bin/security delete-certificate -Z C060ED44CBD881BD0EF86C0BA287DDCF8167478C /System/Library/Keychains/SystemRootCertificates.keychain&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;fi&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Makefile and postflight can be downloaded from the &lt;a href="https://github.com/unixorn/luggage-examples/tree/master/diginotar"&gt;luggage-examples repo&lt;/a&gt; on github.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Drop the Makefile and postflight script into a new directory and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo make pkg&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now you have a pkg you can push with whatever system management software you're using for your Macintoshes.&lt;br /&gt;&lt;br /&gt;Edit for clarity: This only deletes the Diginotar CA cert from the System keychain. It doesn't update Firefox/Opera/Chrome's caches, you'll need to update them separately.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1624433104522120383?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1624433104522120383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1624433104522120383&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1624433104522120383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1624433104522120383'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2011/09/automate-removing-diginotar-ca.html' title='Automate removing Diginotar CA certificate'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-9166348516837030090</id><published>2010-05-11T14:27:00.000-07:00</published><updated>2010-05-11T14:27:49.256-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='luggage'/><title type='text'>Easy Script-Only Packages with the Luggage</title><content type='html'>Saw a post today on MacEnterprise from someone looking for an easy way of making a package that doesn't install any files, just runs a script during installation. Payloadless packages are quite easy to create with the Luggage - here's how:&lt;br /&gt;&lt;br /&gt;1) Make a new directory. cd into it.&lt;br /&gt;2) Write your script, call it postinstall.&lt;br /&gt;3) Make a new file named Makefile with the following contents:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;include /usr/local/share/luggage/luggage.make&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;TITLE=name_of_your_package_with_no_spaces_or_punctuation&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;REVERSE_DOMAIN=com.example.corp&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;PAYLOAD=pack-script-postinstall&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4) make dmg.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;make dmg will create a dmg file named TITLE-YYYYMMDD.dmg containing the package TITLE-YYYYMMDD.pkg.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-9166348516837030090?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/unixorn/luggage' title='Easy Script-Only Packages with the Luggage'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/9166348516837030090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=9166348516837030090&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/9166348516837030090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/9166348516837030090'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2010/05/easy-script-only-packages-with-luggage.html' title='Easy Script-Only Packages with the Luggage'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-7801942628977172072</id><published>2010-02-14T15:52:00.000-08:00</published><updated>2010-02-14T15:56:24.035-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='puppet'/><category scheme='http://www.blogger.com/atom/ns#' term='facter'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Read knob files with facter for puppet</title><content type='html'>I found myself recently writing yet another fact to read the contents of a knob file,&amp;nbsp;so I generalized one to read all the files found in /etc/knobs and return the contents as facts named after the files found.&lt;br /&gt;&lt;br /&gt;Caveats: read_knobs.rb returns only the last line it finds in the file. This is on purpose. It also skips all lines beginning with # so you can use shell-style comments. Files that are empty create facts with the value true, and files containing just a t or f are normalized to true or false respectively.&lt;br /&gt;&lt;br /&gt;Here's the source, and it's also available on &lt;a href="http://github.com/unixorn/osxtoolkit/blob/master/puppet/facts/read_knobs.rb"&gt;github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 11px; line-height: 14px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font: normal normal normal 115%/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div class="line" id="LC1" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#!/usr/bin/ruby&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# fact returns knob values based on contents of /etc/knobs.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# Author: jpb@ooyala.com&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# Copyright 2009 Ooyala, Inc.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   Licensed under the Apache License, Version 2.0 (the "License");&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   you may not use this file except in compliance with the License.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   You may obtain a copy of the License at&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#       http://www.apache.org/licenses/LICENSE-2.0&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   Unless required by applicable law or agreed to in writing, software&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   distributed under the License is distributed on an "AS IS" BASIS,&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   See the License for the specific language governing permissions and&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#   limitations under the License.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;div class="line" id="LC22" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="nb" style="color: #0086b3; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;require&lt;/span&gt; &lt;span class="s1" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'facter'&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;div class="line" id="LC24" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;def&lt;/span&gt; &lt;span class="nf" style="color: #990000; font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;logger&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;message&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="nb" style="color: #0086b3; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;system&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"/usr/bin/logger -t read_knobs &lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#{&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;message&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;div class="line" id="LC28" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# facts can only have one value. We ignore lines with shell style comments,&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# and return the last valid line.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;div class="line" id="LC31" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;def&lt;/span&gt; &lt;span class="nf" style="color: #990000; font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;read_knob&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;filename&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_name&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;filename&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;split&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s1" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'/'&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;[-&lt;/span&gt;&lt;span class="mi" style="color: #009999; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_file&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="no" style="color: teal; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;File&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;open&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;filename&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# an empty knob file must have been created for a reason, so set default&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC35" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c1" style="color: #999988; font-style: italic; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;# value to true&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;value&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="kp" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;true&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_file&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;each&lt;/span&gt; &lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;{&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;if&lt;/span&gt; &lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;[&lt;/span&gt;&lt;span class="mi" style="color: #009999; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;0&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;,&lt;/span&gt;&lt;span class="mi" style="color: #009999; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;]&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;!=&lt;/span&gt; &lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"#"&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;if&lt;/span&gt; &lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;downcase&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;chomp&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;==&lt;/span&gt; &lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"true"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt; &lt;span class="ow" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;or&lt;/span&gt; &lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;downcase&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;chomp&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;==&lt;/span&gt; &lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"t"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;value&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="kp" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;true&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;elsif&lt;/span&gt; &lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;downcase&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;chomp&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;==&lt;/span&gt; &lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"false"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt; &lt;span class="ow" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;or&lt;/span&gt; &lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;downcase&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;chomp&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;==&lt;/span&gt; &lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"f"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;value&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="kp" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;false&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;value&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;line&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;chomp&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC48" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_file&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;close&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC49" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;value&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC51" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;div class="line" id="LC52" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;def&lt;/span&gt; &lt;span class="nf" style="color: #990000; font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;load_knobs&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_d&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC53" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;logger&lt;/span&gt; &lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"Processing &lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#{&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_d&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;..."&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC54" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;if&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;!&lt;/span&gt; &lt;span class="no" style="color: teal; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;File&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;directory?&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_d&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;logger&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"Can't read &lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#{&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_d&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;!"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC56" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;return&lt;/span&gt; &lt;span class="kp" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC57" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="no" style="color: teal; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Dir&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;[&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#{&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_d&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;/*"&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;].&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;each&lt;/span&gt; &lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;do&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;|&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC59" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;if&lt;/span&gt; &lt;span class="no" style="color: teal; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;File&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;readable?&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_name&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;split&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s1" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'/'&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;[-&lt;/span&gt;&lt;span class="mi" style="color: #009999; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;1&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="no" style="color: teal; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Facter&lt;/span&gt;&lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;.&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;add&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#{&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob_name&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt; &lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC62" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;setcode&lt;/span&gt; &lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC63" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;data&lt;/span&gt; &lt;span class="o" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;=&lt;/span&gt; &lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;read_knob&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;data&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC66" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC67" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC68" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;logger&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;"Can't read &lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;#{&lt;/span&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;knob&lt;/span&gt;&lt;span class="si" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;}&lt;/span&gt;&lt;span class="s2" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;!"&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC70" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="k" style="font-weight: bold; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC72" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;div class="line" id="LC73" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="n" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;load_knobs&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;(&lt;/span&gt;&lt;span class="s1" style="color: #dd1144; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;'/etc/knobs'&lt;/span&gt;&lt;span class="p" style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-7801942628977172072?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/unixorn/osxtoolkit/blob/master/puppet/facts/read_knobs.rb' title='Read knob files with facter for puppet'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/7801942628977172072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=7801942628977172072&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7801942628977172072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7801942628977172072'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2010/02/read-knob-files-with-facter-for-puppet.html' title='Read knob files with facter for puppet'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3682349408436400786</id><published>2010-02-02T18:41:00.000-08:00</published><updated>2010-02-02T20:05:41.230-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='puppet'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>Releasing some of my OS X administrative utility scripts</title><content type='html'>&lt;div&gt;I decided to release some code I've been using at work to manage our Macintoshes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All the code is downloadable at &lt;a href="http://github.com/unixorn/osxtoolkit"&gt;http://github.com/unixorn/osxtoolkit&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Currently osxtoolkit includes:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;A puppet fact script to load the contents of files in /etc/knobs as facts named after the file name.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;scripts to use as login &amp;amp; logout hooks that run /etc/hooks/LI* on login, and /etc/hooks/LO* on logout. It uses iHook so the users can see progress.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Usage:&lt;/h1&gt;&lt;br /&gt;&lt;h2&gt;read_hook.rb&lt;/h2&gt;&lt;br /&gt;Copy to the lib/facter directory in one of your modules.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;enable_login_scripts&lt;/h2&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;The hook drivers only load scripts that are in /etc/hooks, have their x bit set, and have either an LI or LO prefix in their name. They're run in alphabetic order. LI* hooks are run on login, and LO* hooks are run on logout. You'll probably want to replace hook_background.jpg with something&lt;/div&gt;&lt;div&gt;appropriate for your local environment.&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Prerequisites:&lt;/h3&gt;&lt;br /&gt;&lt;h4&gt;iHook&lt;/h4&gt;&lt;div&gt;You need to download a copy of iHook from&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;http://rsug.itd.umich.edu/software/ihook/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;since the hook driver scripts rely on it to present a pretty dialog with a progress bar during login &amp;amp; logout as they run the appropriate hook scripts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Tar iHook.app up, then bzip2 the tarball. I recommend keeping the tarball (with version number in the name) on a central server, then letting make download it and rename it to iHook.app.tar.bz2 as part of the package build process. This will let you reproduce specific versions of the package later.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Luggage: http://http://github.com/unixorn/luggage&lt;/h4&gt;&lt;br /&gt;Luggage isn't necessary to run the hook loaders, just to make deploying them to your Macintoshes easier. You need to update TARBALL_LOCATION in the included Luggage Makefile to point to where you're storing your iHook tarball, then you can make a dmg with a pkg file containing everything necessary for the hook script suite with 'make dmg'. That dmg can then be easily deployed with InstaDMG or puppet.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3682349408436400786?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/unixorn/osxtoolkit' title='Releasing some of my OS X administrative utility scripts'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3682349408436400786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3682349408436400786&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3682349408436400786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3682349408436400786'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2010/02/releasing-some-of-my-os-x.html' title='Releasing some of my OS X administrative utility scripts'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5315176517587692652</id><published>2010-01-21T00:08:00.000-08:00</published><updated>2010-01-21T07:53:26.485-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><category scheme='http://www.blogger.com/atom/ns#' term='luggage'/><title type='text'>Luggage 1.0rc2 released</title><content type='html'>Synced my latest changes to the &lt;a href="http://github.com/unixorn/luggage"&gt;Luggage&lt;/a&gt;. Detailed documentation &lt;a href="http://luggage.apesseekingknowledge.net/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;1.0rc2 includes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fixed broken unarchive step in unbz2-applications &amp;amp; ungz-applications rules&lt;/li&gt;&lt;li&gt;Added recipe to install Ruby scripts to site-ruby&lt;/li&gt;&lt;li&gt;Added recipe to install Python scripts to site-python&lt;/li&gt;&lt;li&gt;Added more interesting example package - enable_login_hooks.&lt;/li&gt;&lt;/ul&gt;The enable_login_hooks example package also includes code to run all login hooks found in /etc/hooks on login, and logout hooks at logout.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;(Updated to add link to github repo, documentation)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5315176517587692652?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/unixorn/luggage' title='Luggage 1.0rc2 released'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5315176517587692652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5315176517587692652&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5315176517587692652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5315176517587692652'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2010/01/luggage-10rc2-released.html' title='Luggage 1.0rc2 released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8117275355221705906</id><published>2009-10-25T11:55:00.000-07:00</published><updated>2009-10-25T11:55:06.625-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Losing ZFS</title><content type='html'>Luis Gerbarg has an interesting article with his thoughts about the reasons behind the absence of ZFS in 10.6 on his blog at&amp;nbsp;&lt;a href="http://devwhy.blogspot.com/2009/10/loss-of-zfs.html"&gt;http://devwhy.blogspot.com/2009/10/loss-of-zfs.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's hoping that he's right and Apple is already working on their own next generation filesystem - HFS+ is getting a bit long in the tooth, and it'd be nice to see an alternative in 10.7.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8117275355221705906?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8117275355221705906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8117275355221705906&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8117275355221705906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8117275355221705906'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/10/losing-zfs.html' title='Losing ZFS'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3458651231341980531</id><published>2009-10-12T22:37:00.000-07:00</published><updated>2009-10-12T22:37:47.749-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='puppet'/><category scheme='http://www.blogger.com/atom/ns#' term='instadmg'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='luggage'/><title type='text'>Released the Luggage</title><content type='html'>I've been rewriting a tool I originally wrote when I was at Google that allows you to generate an OS X pkg file using a Makefile without using PackageMaker.app's gui at all. At Google we used the internal tool to create most of the packages we used to create disk images with InstaDMG or with puppet. After I left, I missed it, so I'm releasing my rewrite, the Luggage, with the Apache 2.0 license. The source is at&amp;nbsp;&lt;a href="http://github.com/unixorn/luggage"&gt;http://github.com/unixorn/luggage&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 23px; letter-spacing: 2px; line-height: 19px;"&gt;What the Luggage provides&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #283769; font-family: Arial, sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;Easy repackaging of GUI apps that don't come with Apple pkg installers,&amp;nbsp;custom scripts and configuration files,&amp;nbsp;payload-less packages that do settings changes on target machines in their postflight/postupdate scripts. These packages are easily used in InstaDMG to create master disk images for deployment, or system management systems like puppet to distribute new software to managed Macintoshes.&lt;/div&gt;&lt;h2 style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.8em; font-weight: normal; letter-spacing: 0.1em;"&gt;&lt;a href="" name="TOC-How-it-works" style="color: #445aa9;"&gt;&lt;/a&gt;How it works&lt;/h2&gt;&lt;div&gt;You create a Makefile describing where you want each file in the package to end up on the target machines. luggage.make includes rules that will generate a package root with appropriate permissions, copy the files into place, create a package version-stamped with the date, then wrap the package in a disk image file.&lt;/div&gt;&lt;h2 style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.8em; font-weight: normal; letter-spacing: 0.1em;"&gt;&lt;a href="" name="TOC-So-how-do-I-use-it-" style="color: #445aa9;"&gt;&lt;/a&gt;So how do I use it?&lt;/h2&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-Requirements-for-all-Makefiles" style="color: #445aa9;"&gt;&lt;/a&gt;Requirements for all Makefiles&lt;/h3&gt;&lt;div&gt;Every package makefile must include luggage.make, specify a title for the package, a base reversed domain for creating the package id, and the payload listing which files we want installed by the package. Include luggage.make before your variable declarations so your declarations override the internal ones in luggage.make. Please note that TITLE must not include spaces - it's going to be used as part of the package id. Also remember to include luggage.make before any of your definitions so your definitions override the defaults.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 11px; line-height: 14px;"&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="color: #006000;"&gt;include /usr/local/share/luggage/luggage.make&lt;/code&gt;&lt;/div&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&lt;/code&gt;&lt;/div&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="color: #006000;"&gt;TITLE=install_foo&lt;/code&gt;&lt;/div&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="color: #006000;"&gt;REVERSE_DOMAIN=com.example.corp&lt;/code&gt;&lt;/div&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="color: #006000;"&gt;PAYLOAD=&lt;/code&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-Creating-a-package-for-a-GUI-Applic" style="color: #445aa9;"&gt;&lt;/a&gt;Creating a package for a GUI Application&lt;/h3&gt;&lt;div&gt;For our first example, we're going to repackage a GUI application that didn't come with a PKG installer. First, tar up the application (making sure to use Apple's tar so resource forks don't get mangled) with&lt;code style="color: #006000;"&gt;&amp;nbsp;/usr/bin/tar cvj Foo.app.tar.bz Foo.app&lt;/code&gt;, then update PAYLOAD with&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 11px; line-height: 14px;"&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: #006000; font-family: monospace, Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 1em; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="color: #006000;"&gt;PAYLOAD=unbz2-applications-foo.app&lt;/code&gt;&lt;/div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;This tells luggage.make that we want Foo.app.tar.bz2 untarred into /Applications. If we want it installed in /Applications/Utilities instead, we'd use&lt;code style="color: #006000;"&gt;unbz2-utilities-foo.app&lt;/code&gt;&amp;nbsp;instead, Now we can create a package with "&lt;code style="color: #006000;"&gt;make pkg&lt;/code&gt;", or have it automatically wrapped in a disk image with "&lt;code style="color: #006000;"&gt;make dmg&lt;/code&gt;". That's all it takes.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-Packaging-scripts-and-configuration" style="color: #445aa9;"&gt;&lt;/a&gt;Packaging scripts and configuration files&lt;/h3&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 11px; line-height: 14px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;Similarly, if you want to install bar as /usr/local/bin/bar, add pack-usr-local-bin-bar to PAYLOAD.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-Available-PAYLOAD-additions" style="color: #445aa9;"&gt;&lt;/a&gt;Available PAYLOAD additions&lt;/h3&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;table border="1" bordercolor="#888" cellspacing="0" style="border-bottom-color: rgb(136, 136, 136); border-bottom-width: 1px; border-collapse: collapse; border-left-color: rgb(136, 136, 136); border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-width: 1px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;&lt;b&gt;Rule&lt;/b&gt;&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&lt;b&gt;&amp;nbsp;Ownership&lt;/b&gt;&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&lt;b&gt;&amp;nbsp;Permissions&lt;/b&gt;&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&lt;b&gt;&amp;nbsp;Destination&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-etc-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;644&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/etc/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-usr-bin-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;755&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/usr/bin/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-usr-sbin-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;755&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/usr/sbin/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 18px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-usr-local-bin-foo&lt;/td&gt;&lt;td style="height: 18px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 18px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;755&lt;/td&gt;&lt;td style="height: 18px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/usr/local/bin/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-usr-local-sbin-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;755&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/usr/local/sbin/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-hookscript-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;755&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/etc/hooks/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 20px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-Library-LaunchAgents-foo&lt;/td&gt;&lt;td style="height: 20px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 20px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;644&lt;/td&gt;&lt;td style="height: 20px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/Library/LaunchAgents/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-Library-LaunchDaemons-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;644&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/Library/LaunchDaemons/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-Library-Preferences-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:admin&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;644&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/Library/Preferences/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-ppd-foo&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:admin&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;644&lt;/td&gt;&lt;td style="height: 14px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/Library/Printers/PPDs/Contents/Resources/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="height: 29px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 256px;"&gt;&amp;nbsp;pack-user-template-plist-foo&lt;/td&gt;&lt;td style="height: 29px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 88px;"&gt;&amp;nbsp;root:wheel&lt;/td&gt;&lt;td style="height: 29px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 91px;"&gt;&amp;nbsp;644&lt;/td&gt;&lt;td style="height: 29px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top; width: 386px;"&gt;&amp;nbsp;/System/Library/User\ Template/English.lproj/Library/Preferences/foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;unbz2-applications-foo&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;root:admin&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;based on tarball contents&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;/Applications/Foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;ungz-applications-foo&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;root:admin&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;based on tarball contents&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;/Applications/Foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;unbz2-utilities-foo&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;root:admin&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;based on tarball contents&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;/Applications/Utilities/Foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;ungz-utilities-foo&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;root:admin&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;based on tarball contents&lt;/td&gt;&lt;td style="padding-bottom: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; vertical-align: top;"&gt;&amp;nbsp;/Applications/Utilities/Foo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-Adding-preflight-postflight-postins" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;Adding preflight/postflight/postinstall/postupdate scripts&lt;/span&gt;&lt;/h3&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;Name the script preflight, postflight, postinstall, or postupdate, then add pack-script-XX to PAYLOAD and it will automatically be added to the final package.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;span style="font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 11px; line-height: 14px;"&gt;&lt;h2 style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.8em; font-weight: normal; letter-spacing: 0.1em;"&gt;&lt;a href="" name="TOC-Make-targets" style="color: #445aa9;"&gt;&lt;/a&gt;Make targets&lt;/h2&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="list-style-position: outside; list-style-type: square;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: 13px; line-height: normal;"&gt;make dmg - create a package, then wrap it in a dmg. Result will be in the current directory.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li style="list-style-position: outside; list-style-type: square;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: 13px; line-height: normal;"&gt;make pkg - create a package and copy it into the current directory&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li style="list-style-position: outside; list-style-type: square;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: 13px; line-height: normal;"&gt;make pkgls - create a package, then list the contents so you can confirm it's generating a package with a payload that matches what you're expecting.&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.8em; font-weight: normal; letter-spacing: 0.1em;"&gt;&lt;a href="" name="TOC-Customizing-your-packages" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;Customizing your packages&lt;/span&gt;&lt;/h2&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-How-do-I-add-a-file-to-my-package-t" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;How do I add a file to my package that is installed somewhere luggage.make doesn't cover?&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span style="font-size: 13px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif;"&gt;&lt;span style="line-height: normal;"&gt;luggage.make defines several convenience targets that create various directory paths within the package root. You can use them to create the parent directory for your target location, then create your target location. Here's an example that creates /etc/cups so you can install a custom cupsd.conf&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="sites-codeblock sites-codesnippet-block" style="background-color: #efefef; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(211, 211, 211); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(211, 211, 211); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(211, 211, 211); border-top-style: solid; border-top-width: 1px; display: block; line-height: 11px; padding-bottom: 0.5em; padding-left: 1em; padding-right: 0px; padding-top: 0.5em;"&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;code style="color: #006000;"&gt;l_cups: l_etc&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo mkdir ${WORK_D}/etc/cups&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo chown root:_lp ${WORK_D}/etc/cups&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo chmod 755 ${WORK_D}/etc/cups&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;code style="color: #006000;"&gt;pack-cupsd.conf: l_cups&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo ${CP} cupsd.conf ${WORK_D}/etc/cups&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo chown root:_lp ${WORK_D}/etc/cups/cupsd.conf&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo chmod 644 ${WORK_D}/etc/cups/cupsd.conf&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;Now all you need to do is add pack-cupsd.conf to your PAYLOAD variable, and make will create /etc/cups in your package root, change the permissions and ownership, then copy in your cupsd.conf.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.8em; font-weight: normal; letter-spacing: 0.1em;"&gt;&lt;a href="" name="TOC-I-need-to-install-foo-with-permissi" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="color: #777777; font-size: 18px; letter-spacing: normal; line-height: normal;"&gt;I need to install foo with permissions different from the defaults luggage.make uses. How do I change the ownership/permissions for files installed using luggage.make?&lt;/span&gt;&lt;/h2&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;You could make your changes using a postflight script, but for convenience, luggage.make runs&amp;nbsp;&lt;code style="color: #006000;"&gt;make modify_packageroot&lt;/code&gt;&amp;nbsp;after it has created the package root and copied the install files there, but before it invokes packagemaker's command line tool to create the package.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;If you add that target to your package's Makefile, it will override the dummy one in luggage.make and let you change the permissions of files in your package root.&amp;nbsp;&lt;code style="color: #006000;"&gt;${WORK_D}&lt;/code&gt;&amp;nbsp;contains the path to your package root. For example, if your package installed a modified cupsd.conf to /etc/cups, and you needed it to have a group of _lp, you would add the following to your package Makefile:&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="sites-codeblock sites-codesnippet-block" style="background-color: #efefef; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(211, 211, 211); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(211, 211, 211); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(211, 211, 211); border-top-style: solid; border-top-width: 1px; display: block; line-height: 11px; padding-bottom: 0.5em; padding-left: 1em; padding-right: 0px; padding-top: 0.5em;"&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;code style="color: #006000;"&gt;modify_packageroot:&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;&lt;span&gt;&lt;code style="color: #006000;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@sudo chgrp _lp ${WORK_D}/etc/cups/cupsd.conf&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-I-don-t-want-the-package-version-to" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;I don't want the package version to be based on the current date. How can I force it to something specific?&lt;/span&gt;&lt;/h3&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;By default, luggage.make sets the version number to YYYYMMDD. If you prefer to set it to something specific, set PACKAGE_VERSION=something_numeric.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 style="color: #5064ae; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.8em; font-weight: normal; letter-spacing: 0.1em;"&gt;&lt;a href="" name="TOC-FAQ" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;FAQ&lt;/span&gt;&lt;/h2&gt;&lt;h3 style="border-bottom-color: rgb(201, 208, 230); border-bottom-style: dotted; border-bottom-width: 1px; color: #777777; font-family: 'Trebuchet MS', arial, sans-serif; font-size: 1.4em; font-weight: normal;"&gt;&lt;a href="" name="TOC-My-makefile-looks-ok-but-I-get-an-e" style="color: #445aa9;"&gt;&lt;/a&gt;&lt;span style="font-family: verdana, sans-serif;"&gt;My makefile looks ok, but I get an error about a missing separator&lt;/span&gt;&lt;/h3&gt;&lt;pre style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="font-family: Arial, Verdana, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal; white-space: normal;"&gt;You've probably indented your rules with spaces rather than a tab. Make requires the indentation be with tabs.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3458651231341980531?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/unixorn/luggage' title='Released the Luggage'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3458651231341980531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3458651231341980531&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3458651231341980531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3458651231341980531'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/10/released-luggage.html' title='Released the Luggage'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1145137516115754846</id><published>2009-09-15T11:21:00.000-07:00</published><updated>2009-09-15T11:23:07.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lightroom'/><title type='text'>Lightroom 2.5 released</title><content type='html'>Lightroom 2.5 released &lt;a href="http://www.adobe.com/downloads/updates"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1145137516115754846?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.adobe.com/downloads/updates' title='Lightroom 2.5 released'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1145137516115754846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1145137516115754846&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1145137516115754846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1145137516115754846'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/09/lightroom-25-released.html' title='Lightroom 2.5 released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2543458287770344811</id><published>2009-09-15T09:09:00.000-07:00</published><updated>2009-09-15T09:09:20.624-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grand central'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Ars Technica on Grand Central and Linux</title><content type='html'>Ars Technica notes on integrating Apple's Grand Central into Linux are &lt;a href="http://arstechnica.com/open-source/news/2009/09/apple-opens-gcd-challenges-impede-adoption-on-linux.ars"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2543458287770344811?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://arstechnica.com/open-source/news/2009/09/apple-opens-gcd-challenges-impede-adoption-on-linux.ars' title='Ars Technica on Grand Central and Linux'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2543458287770344811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2543458287770344811&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2543458287770344811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2543458287770344811'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/09/ars-technica-on-grand-central-and-linux.html' title='Ars Technica on Grand Central and Linux'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8458488315843878592</id><published>2009-09-13T19:01:00.000-07:00</published><updated>2009-09-13T19:02:26.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='10.6'/><category scheme='http://www.blogger.com/atom/ns#' term='lightroom'/><category scheme='http://www.blogger.com/atom/ns#' term='photoshop'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Known photoshop &amp; lightroom issues with 10.6</title><content type='html'>Adobe posted a tech note about 10.6 known issues &lt;a href="http://kb2.adobe.com/cps/512/cpsid_51229.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8458488315843878592?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://kb2.adobe.com/cps/512/cpsid_51229.html' title='Known photoshop &amp; lightroom issues with 10.6'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8458488315843878592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8458488315843878592&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8458488315843878592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8458488315843878592'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/09/known-photoshop-lightroom-issues-with.html' title='Known photoshop &amp; lightroom issues with 10.6'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4626955191268498532</id><published>2009-09-12T23:53:00.000-07:00</published><updated>2009-09-13T11:19:26.521-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lens'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><category scheme='http://www.blogger.com/atom/ns#' term='cake'/><category scheme='http://www.blogger.com/atom/ns#' term='tsa'/><title type='text'>So this is what a 50mm f1.8 looks like inside...</title><content type='html'>I would have been quite happy without finding out exactly what my 50mm f1.8 looks like inside.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://jpb.smugmug.com/gallery/9610354_emnrr#647424724_Bx7rU-A-LB" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://jpb.smugmug.com/photos/647424724_Bx7rU-S.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I was going through airport security in San Jose on my way to visit family in Chicago and TSA had to hand check my bag because I had forgotten there was a leatherman in it. Once they spotted my "contraband", they insisted on unpacking the bag instead of letting me do it. The next day, I took the lens cap off to shoot a picture of my niece, and the whole front assembly fell off into my hand.&lt;br /&gt;&lt;br /&gt;I only started using a DSLR a few months ago, and on the recommendation of a coworker at Google, the 50mm f1.8 was the first lens I bought besides the kit lens that came with the XSi body.&lt;br /&gt;&lt;br /&gt;I loved this lens - nice and sharp, much faster than the kit lens, nice color, nice and light. I ended up using it far more than my other two lenses.&lt;br /&gt;&lt;br /&gt;Here's a shot I took of Xan McCurdy with it at the Cake concert at WWDC - &lt;a href="http://jpb.smugmug.com/Music/Cake-at-WWDC-09/8825831_i2y27/1/#584703148_BmySc-A-LB"&gt;&lt;img src="http://jpb.smugmug.com/photos/584703148_BmySc-S.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not bad for a $90 &lt;a href="http://www.amazon.com/gp/product/B00007E7JU?ie=UTF8&amp;tag=apesseekingkn-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00007E7JU"&gt;lens&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=apesseekingkn-20&amp;l=as2&amp;o=1&amp;a=B00007E7JU" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;. That said, the reason it's so nice and light is that the innards are mostly plastic, and the front assembly that came off is held on by four tiny (3mm or so) plastic fingers, two of which appear to have sheared off on mine.&lt;br /&gt;&lt;br /&gt;Ended up deciding to replace it with the &lt;a href="http://www.amazon.com/gp/product/B00009XVCZ?ie=UTF8&amp;tag=apesseekingkn-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00009XVCZ"&gt;Canon EF 50mm f1.4,&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=apesseekingkn-20&amp;l=as2&amp;o=1&amp;a=B00009XVCZ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;which I'm impatiently waiting to arrive.&lt;br /&gt;&lt;br /&gt;More Cake shots:&lt;br /&gt;&lt;div style="background: #ffffff;-moz-border-radius: .6em;-webkit-border-radius: .6em;overflow:hidden;text-align: center;padding-top:13px;width:220px;height:220px;margin:0 auto;"&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="200" height="200" id="vv12x"&gt;&lt;br /&gt;&lt;param name="movie" value="http://cdn.smugmug.com/swfs/badge/flashbadge.swf?mode=box&amp;useLargeImages=true&amp;BadgeHost=cdn.smugmug.com&amp;gapImage=http%3A%2F%2Fphotos.smugmug.com%2Fimg%2Fbesocial%2Finvisible_filler.png&amp;displayMode=full&amp;width=200&amp;height=200&amp;gridSpacing=1&amp;gridRows=3&amp;gridColumns=4&amp;background=%23ffffff&amp;preloaderColor=%23FFFFFF&amp;preloaderGlow=%23FFFFFF&amp;gridDelay=2&amp;slideshowDelay=4&amp;order=norandom&amp;forceSize=&amp;autostart=true&amp;autorepeat=true&amp;aboutlink=&amp;sharelink=&amp;albums=http%3A%2F%2Fapi.smugmug.com%2Fhack%2Ffeed.mg%3FType%3Dgallery%26Data%3D8825831_i2y27%26format%3Drss200%26Sandboxed%3D1"&gt;&lt;br /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;br /&gt;&lt;embed src="http://cdn.smugmug.com/swfs/badge/flashbadge.swf?mode=box&amp;useLargeImages=true&amp;BadgeHost=cdn.smugmug.com&amp;gapImage=http%3A%2F%2Fphotos.smugmug.com%2Fimg%2Fbesocial%2Finvisible_filler.png&amp;displayMode=full&amp;width=200&amp;height=200&amp;gridSpacing=1&amp;gridRows=3&amp;gridColumns=4&amp;background=%23ffffff&amp;preloaderColor=%23FFFFFF&amp;preloaderGlow=%23FFFFFF&amp;gridDelay=2&amp;slideshowDelay=4&amp;order=norandom&amp;forceSize=&amp;autostart=true&amp;autorepeat=true&amp;aboutlink=&amp;sharelink=&amp;albums=http%3A%2F%2Fapi.smugmug.com%2Fhack%2Ffeed.mg%3FType%3Dgallery%26Data%3D8825831_i2y27%26format%3Drss200%26Sandboxed%3D1" width="200" height="200"  wmode="transparent"&gt;&lt;br /&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4626955191268498532?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4626955191268498532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4626955191268498532&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4626955191268498532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4626955191268498532'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/09/so-this-is-what-50mm-f18-looks-like.html' title='So this is what a 50mm f1.8 looks like inside...'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8517056777625214137</id><published>2009-09-01T10:43:00.000-07:00</published><updated>2009-09-01T10:43:29.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Snow Leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='10.6'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Siracusa on Snow Leopard</title><content type='html'>John has his as usual excellent technical overview of Snow Leopard on &lt;a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars"&gt;Ars Technica&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8517056777625214137?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars' title='Siracusa on Snow Leopard'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8517056777625214137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8517056777625214137&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8517056777625214137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8517056777625214137'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/09/siracusa-on-snow-leopard.html' title='Siracusa on Snow Leopard'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5627665690538915604</id><published>2009-03-13T20:06:00.004-07:00</published><updated>2009-03-13T20:23:05.614-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='instadmg'/><category scheme='http://www.blogger.com/atom/ns#' term='sysadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='pymacadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>New disk image tests</title><content type='html'>I got permission to release the changes I've made at work to the run_image_tests.py disk image test framework that Nigel Kersten originally wrote (thanks Chris, for pushing them into svn for me) along with a bunch of example tests you can use. These are all the tests I use at work every time I make a new master disk image that are generic enough the be useful to others.&lt;br /&gt;&lt;br /&gt;I don't bother to manually test any images that don't pass all of the unit tests first.&lt;br /&gt;&lt;br /&gt;You can find them at the &lt;a href="http://code.google.com/p/pymacadmin/source/browse/#svn/trunk/utilities/diskimage_unittesting"&gt;pymacadmin&lt;/a&gt; project site at Google Code.&lt;br /&gt;&lt;br /&gt;All the unit tests descend from macdmgtest.DMGUnitTest. DMGUnitTest provides some handy utility functions that convert paths relative to / to the path relative to the mounted dmg you're testing.&lt;br /&gt;&lt;br /&gt;dmgtestutilities.py provides some more convenience functions - there are functions to lint plists and load plists using Foundation so plistlib doesn't crap out when you try to load a binary plist.&lt;br /&gt;&lt;br /&gt;Example tests:&lt;br /&gt;applications_dir_test.py:&lt;br /&gt;    Ensures all applications in /Applications and /Applications/Utilities have sane ownership/permissions.&lt;br /&gt;&lt;br /&gt;blacklist_test.py:&lt;br /&gt;    Confirms the absence of files in your blacklist. I mainly use this to confirm that various settings files that would contain information specific to the hardware model I ran InstaDMG on don't end up on my master images.&lt;br /&gt;&lt;br /&gt;empty_directory_test.py:&lt;br /&gt;    Confirms that directories that you want to be empty on the generated image, actually are.&lt;br /&gt;&lt;br /&gt;network_plist_test.py:&lt;br /&gt;    Confirms the absence of various network preference files. This prevents a problem we ran into when booting MacBook Airs from an image created on a machine that has built-in ethernet.&lt;br /&gt;&lt;br /&gt;ouradmin_test.py:&lt;br /&gt;    Ensures that there's a local admin user on the image named ouradmin, and that it's a member of the admin, _lpadmin and _appserveradm groups. Also lints the appropriate plist files in /var/db/dslocal/nodes/Default to detect if your user creation package corrupted them.&lt;br /&gt;&lt;br /&gt;skipsetup_test.py:&lt;br /&gt;    Makes sure the appropriate files have been touched on the image to prevent a newly imaged machine from playing the annoying welcome movie.&lt;br /&gt;&lt;br /&gt;software_update_test.py:&lt;br /&gt;    If you're using a local software update server in your environment, you can use this to make sure the dmg has the correct settings to use it instead of the standard Apple servers.&lt;br /&gt;&lt;br /&gt;zz_plint_test.py:&lt;br /&gt;    Lints every plist on the dmg and displays a list of any files that failed their lint check.&lt;br /&gt;&lt;br /&gt;zz_suidguid_test.py:&lt;br /&gt;    Finds every suid/setguid file on the dmg and reports any that aren't in your whitelist. Handy for detecting crappy installers.&lt;br /&gt;&lt;br /&gt;zz_world_writable_test.py:&lt;br /&gt;    Finds every file or directory that is world writable and reports any that aren't in your whitelist. Also useful for detecting poorly written installers.&lt;br /&gt;&lt;br /&gt;I've also included the whitelists and blacklists I'm using for these tests for you to use as a base to customize your own, though I'd appreciate it if you'd email any additions you think are useful.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5627665690538915604?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/pymacadmin/source/browse/#svn/trunk/utilities/diskimage_unittesting' title='New disk image tests'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5627665690538915604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5627665690538915604&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5627665690538915604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5627665690538915604'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2009/03/new-disk-image-tests.html' title='New disk image tests'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5409520795683885324</id><published>2008-11-13T19:19:00.002-08:00</published><updated>2008-11-13T19:21:54.366-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='astronomy'/><title type='text'>Photo of another solar system</title><content type='html'>Discover has an &lt;a href='http://blogs.discovermagazine.com/badastronomy/2008/11/13/huge-exoplanet-news-items-pictures/'&gt;article &lt;/a&gt;about the first photo of another solar system. Not just a planet, multiple planets. Way cool.&lt;br /&gt;&lt;br /&gt;Thanks to my friend Morf for the heads up.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5409520795683885324?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.discovermagazine.com/badastronomy/2008/11/13/huge-exoplanet-news-items-pictures/' title='Photo of another solar system'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5409520795683885324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5409520795683885324&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5409520795683885324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5409520795683885324'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/11/photo-of-another-solar-system.html' title='Photo of another solar system'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1038883693348585185</id><published>2008-10-14T14:16:00.003-07:00</published><updated>2008-10-14T14:18:29.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>New MacBook and MacBookPros</title><content type='html'>So, new hardware. On the pro side, the hard drive is no longer an ordeal to swap out, which is great for those of us in the enterprise. On the down side, no more target disk mode, which was always one of the great things about working on Macs.&lt;br /&gt;&lt;br /&gt;More later once I've had a chance to use one for a couple of days.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1038883693348585185?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1038883693348585185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1038883693348585185&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1038883693348585185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1038883693348585185'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/10/new-macbook-and-macbookpros.html' title='New MacBook and MacBookPros'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1816795198980482649</id><published>2008-10-08T22:53:00.002-07:00</published><updated>2008-10-08T22:56:18.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubygems'/><category scheme='http://www.blogger.com/atom/ns#' term='Thin'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>Thin 1.0 is out</title><content type='html'>Marc André Cournoyer announced the release of Thin 1.0 on his &lt;a href='http://macournoyer.wordpress.com/2008/09/30/thin-10/'&gt;blog&lt;/a&gt; last week.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1816795198980482649?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://macournoyer.wordpress.com/2008/09/30/thin-10/' title='Thin 1.0 is out'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1816795198980482649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1816795198980482649&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1816795198980482649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1816795198980482649'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/10/thin-10-is-out.html' title='Thin 1.0 is out'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-9060732322780319970</id><published>2008-10-07T20:30:00.002-07:00</published><updated>2008-10-07T20:32:46.194-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubygems'/><title type='text'>Updating gem to 1.3 on OS X Leopard</title><content type='html'>&lt;a href="http://rails.wincent.com/wiki/Updating_to_RubyGems_1.3.0_on_Mac_OS_X_Leopard_10.5.4"&gt;wincent.com&lt;/a&gt; has a clear set of instructions on how to deal with errors updating gem to 1.3.0 on OS X.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-9060732322780319970?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://rails.wincent.com/wiki/Updating_to_RubyGems_1.3.0_on_Mac_OS_X_Leopard_10.5.4' title='Updating gem to 1.3 on OS X Leopard'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/9060732322780319970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=9060732322780319970&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/9060732322780319970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/9060732322780319970'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/10/updating-gem-to-13-on-os-x-leopard.html' title='Updating gem to 1.3 on OS X Leopard'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5442800463552714155</id><published>2008-09-28T16:07:00.001-07:00</published><updated>2008-09-28T16:14:35.895-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scifi'/><title type='text'>Negadon and Miroku</title><content type='html'>If you're a fan of Godzilla and/or giant robot movies, you'll like this. All the feel of the 60s movies, but done with CGI.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.youtube.com/watch?v=PezsBkDfrho'&gt;Negadon and Miroku&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5442800463552714155?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5442800463552714155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5442800463552714155&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5442800463552714155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5442800463552714155'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/09/negadon-and-miroku.html' title='Negadon and Miroku'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1916222651748482155</id><published>2008-06-17T16:40:00.002-07:00</published><updated>2008-06-17T16:43:43.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='automator'/><title type='text'>Run Ruby Script Automator Action</title><content type='html'>Jason Foreman published an Automator action that allows you to take advantage of Cocoa in Ruby scripts on his &lt;a href='http://threeve.org/blog/2008/01/run-ruby-script-automator-action.html'&gt;blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1916222651748482155?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://threeve.org/blog/2008/01/run-ruby-script-automator-action.html' title='Run Ruby Script Automator Action'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1916222651748482155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1916222651748482155&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1916222651748482155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1916222651748482155'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/06/run-ruby-script-automator-action.html' title='Run Ruby Script Automator Action'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5345132324059063855</id><published>2008-05-04T10:10:00.002-07:00</published><updated>2008-05-04T10:13:52.446-07:00</updated><title type='text'>New Blog</title><content type='html'>My friend Jack is, among other things, a technical author. He's just set up a new site for his technology writing at &lt;a href='http://jackherrington.com'&gt;http://jackherrington.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;His latest book is on Flex, and is being published by O'Reilly. More details at his blog.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5345132324059063855?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://jackherrington.com' title='New Blog'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5345132324059063855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5345132324059063855&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5345132324059063855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5345132324059063855'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/05/new-blog.html' title='New Blog'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-6022590518009983937</id><published>2008-04-02T12:26:00.002-07:00</published><updated>2008-04-02T12:32:06.411-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tracks'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='gtd'/><title type='text'>Tracks</title><content type='html'>&lt;a href='http://www.rousette.org.uk/projects/'&gt;Tracks&lt;/a&gt; is a GPL Rails application to help implement David Allen's "Getting Things Done".&lt;br /&gt;&lt;br /&gt;I've installed it on my MBP and it looks great so far. You can tag tasks (and view only tasks for one tag), set up contexts such as work/home/misc and then view things grouped by context, set due dates, set tasks to only be visible after a certain date, view graphs and statistics about how long it takes you to complete tasks, comes with an API so you can write your own scripts to interact with it - it's very comprehensive.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-6022590518009983937?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/6022590518009983937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=6022590518009983937&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6022590518009983937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6022590518009983937'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/04/tracks.html' title='Tracks'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-225906604635373020</id><published>2008-04-02T08:31:00.001-07:00</published><updated>2008-04-02T08:35:13.608-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubygems'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Gem 1.1 released</title><content type='html'>Bug fixes, speedups. More details on &lt;a href='http://blog.segment7.net/articles/2008/03/29/rubygems-1-1-0'&gt;Eric Hodel's blog&lt;/a&gt;. Update with &lt;br /&gt;&lt;code&gt;sudo gem update --system&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-225906604635373020?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/225906604635373020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=225906604635373020&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/225906604635373020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/225906604635373020'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/04/gem-11-released.html' title='Gem 1.1 released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1189674063551422973</id><published>2008-03-03T20:05:00.002-08:00</published><updated>2008-03-03T20:09:28.686-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jailbreak'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>iJailbreak bumped to 0.5.4 and nows supports 1.1.4</title><content type='html'>iJailbreak is a gui OS X wrapper for the ZiPhone utility.&lt;br /&gt;&lt;br /&gt;The 0.5.4 release can jailbreak an iPhone running 1.1.4 directly and is available from &lt;a href='http://code.google.com/p/ijailbreak/downloads/list'&gt;http://code.google.com/p/ijailbreak/downloads/list&lt;/a&gt;, and you can read more details from the developers at &lt;a href='http://ijailbreak.com/'&gt;http://ijailbreak.com/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1189674063551422973?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1189674063551422973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1189674063551422973&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1189674063551422973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1189674063551422973'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/03/ijailbreak-bumped-to-054-and-nows.html' title='iJailbreak bumped to 0.5.4 and nows supports 1.1.4'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8329763180616539759</id><published>2008-03-03T19:59:00.003-08:00</published><updated>2008-03-03T20:04:28.501-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QuickLook'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>Suspicious Package update</title><content type='html'>&lt;p&gt;Suspicious Package is a QuickLook plugin that lets you examine pkg (and now mpkg) files from Finder with QuickLook. No more having to drop into Terminal.app and use lsbom.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here are the bullet points from the release notes:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;Added support for metapackages.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Fixed problem where the actual installation location was not shown for some packages.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Added indication when a package requires authentication with an administrator password.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Added indication when a package requires a system restart (or shut down, or log out) after installation.&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Added indication when a package has install scripts, and an option to view the actual scripts (see details).&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;Added support for installer receipts and .bom files&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Download the new release from &lt;a href='http://www.mothersruin.com/software/SuspiciousPackage/download.html'&gt;http://www.mothersruin.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8329763180616539759?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mothersruin.com/software/SuspiciousPackage/download.html' title='Suspicious Package update'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8329763180616539759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8329763180616539759&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8329763180616539759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8329763180616539759'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/03/suspicious-package-update.html' title='Suspicious Package update'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4758416188447197699</id><published>2008-02-23T23:12:00.001-08:00</published><updated>2008-02-23T23:14:30.873-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Matz on Ruby</title><content type='html'>I got to see Matz speak on Ruby at work, and finally found the video of the lecture.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oEkJvvGEtB4&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/oEkJvvGEtB4&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4758416188447197699?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4758416188447197699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4758416188447197699&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4758416188447197699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4758416188447197699'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/02/matz-on-ruby.html' title='Matz on Ruby'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3606613893227409553</id><published>2008-02-20T12:16:00.000-08:00</published><updated>2008-02-20T10:19:52.837-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='handbrake'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><title type='text'>Handbrake 0.9.2 released</title><content type='html'>Supports AppleTV Take 2, iPhone/iPod, Dolby 5.1 sound in mp4 files, many more new features.&lt;br /&gt;&lt;br /&gt;Only runs on Leopard, and download it from &lt;a href='http://handbrake.fr'&gt;http://handbrake.fr&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3606613893227409553?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3606613893227409553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3606613893227409553&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3606613893227409553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3606613893227409553'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/02/handbrake-092-released.html' title='Handbrake 0.9.2 released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-7343301767875232535</id><published>2008-02-13T07:13:00.003-08:00</published><updated>2008-02-13T07:18:51.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jailbreak'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>iJailbreak 0.5.2</title><content type='html'>iJailbreak is an OS X wrapper for the ZiPhone utility.&lt;br /&gt;&lt;br /&gt;This release can jailbreak an iPhone running 1.1.3 directly, no more having to install a helper package onto an already jailbroken 1.1.2. It's available from &lt;a href='http://code.google.com/p/ijailbreak/downloads/list'&gt;http://code.google.com/p/ijailbreak/downloads/list&lt;/a&gt;, and you can read more details from the developers at &lt;a href='http://ijailbreak.com/'&gt;http://ijailbreak.com/&lt;/a&gt;. There is currently no iPod touch support in iJailbreak.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-7343301767875232535?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/7343301767875232535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=7343301767875232535&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7343301767875232535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7343301767875232535'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/02/ijailbreak-052.html' title='iJailbreak 0.5.2'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5481277568915224880</id><published>2008-02-08T19:13:00.000-08:00</published><updated>2008-02-08T19:39:52.998-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tokamak'/><category scheme='http://www.blogger.com/atom/ns#' term='geeky'/><title type='text'>I got to climb inside a tokamak...</title><content type='html'>I went to Disneyland on Tuesday for a company trip, and while spending several hours in the park with only co-workers there was cool, what was more cool was the stop at the UCLA Energy Science Lab we made on the way back.&lt;br /&gt;&lt;br /&gt;I'd driven down with a group of coworkers rather than suffer through the airport experience, and it turns out Pete and Ian knew someone at UCLA who got us a tour of the Energy Science Lab's Electric Tokamak. We got to climb inside since it's in the middle of being renovated, and here are my pics.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;200 tons of steel torus, and another hundred tons of magnets&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164264779735617730"&gt;&lt;img src="http://lh3.google.com/Joe.Block/R6sndKoz0MI/AAAAAAAABso/ZwwlFUJXYJI/s400/IMG_1351.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here's a shot of the entrance to the torus&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164265101858164978"&gt;&lt;img src="http://lh6.google.com/Joe.Block/R6snv6oz0PI/AAAAAAAABtE/QK9QlLhlqbo/s400/IMG_1354.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Me about to climb inside.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164265393915941138"&gt;&lt;img src="http://lh6.google.com/Joe.Block/R6soA6oz0RI/AAAAAAAABtY/csmaHsVV6SI/s400/IMG_1356.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Me inside, looking out.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164265501290123554"&gt;&lt;img src="http://lh3.google.com/Joe.Block/R6soHKoz0SI/AAAAAAAABtg/AvoudYxMNc4/s400/IMG_1357.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A shot of the inside of the torus&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164265617254240562"&gt;&lt;img src="http://lh6.google.com/Joe.Block/R6soN6oz0TI/AAAAAAAABts/dD_FmyQ6JBc/s400/IMG_1358.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To give some perspective of the size, here's a shot of Pete and Chris inside. &lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164265733218357570"&gt;&lt;img src="http://lh5.google.com/Joe.Block/R6soUqoz0UI/AAAAAAAABt0/mOsU8Pr8E_0/s400/IMG_1359.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Me inside, with our guide Russell to my right.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164267554284491346"&gt;&lt;img src="http://lh5.google.com/Joe.Block/R6sp-qoz0lI/AAAAAAAABwU/d6X5kxUnqfM/s400/IMG_1376.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Me in front of one of the 5 Farad capacitor banks.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164268881429385954"&gt;&lt;img src="http://lh6.google.com/Joe.Block/R6srL6oz0uI/AAAAAAAABxs/afa3ZRmZjtQ/s400/IMG_1385.JPG" /&gt;&lt;/a&gt; &lt;p&gt;They have two banks like this and each of the blue cylinders is a 1500 microfarad cap.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Me in front of a linear accelerator in the basement.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164271406870156306"&gt;&lt;img src="http://lh6.google.com/Joe.Block/R6ste6oz1BI/AAAAAAAAB0k/X6yva52qhWY/s400/IMG_1404.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The accelerators and tokamak need their own substation - each of the big blue boxes here is 1 megawatt.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164270474862252962"&gt;&lt;img src="http://lh5.google.com/Joe.Block/R6ssoqoz06I/AAAAAAAABzg/M4wRZml2LAQ/s400/IMG_1397.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here's a pic of the small accelerator.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://picasaweb.google.com/Joe.Block/ElectricTokamak/photo#5164272094064923746"&gt;&lt;img src="http://lh6.google.com/Joe.Block/R6suG6oz1GI/AAAAAAAAB1U/Ipb41aM5IOU/s400/IMG_1409.JPG" /&gt;&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;This one was running, here's the video&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uhPi1p3RAvU&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/uhPi1p3RAvU&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5481277568915224880?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5481277568915224880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5481277568915224880&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5481277568915224880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5481277568915224880'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/02/i-got-to-climb-inside-tokamak.html' title='I got to climb inside a tokamak...'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-740093389230422034</id><published>2008-01-29T16:27:00.000-08:00</published><updated>2008-01-29T16:28:23.511-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='growl'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>iPhoneesque Growl notification</title><content type='html'>Grab it at &lt;a href='http://macthemes2.net/forum/viewtopic.php?id=16783761'&gt;http://macthemes2.net/forum/viewtopic.php?id=16783761&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-740093389230422034?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/740093389230422034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=740093389230422034&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/740093389230422034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/740093389230422034'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/iphoneesque-growl-notification.html' title='iPhoneesque Growl notification'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1992475873294998103</id><published>2008-01-27T10:11:00.000-08:00</published><updated>2008-01-27T10:18:27.840-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='itouch'/><category scheme='http://www.blogger.com/atom/ns#' term='jailbreak'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>1.1.3 Jailbreak</title><content type='html'>iJailBreak 0.4.1 has been released and is available for download at &lt;a href='http://code.google.com/p/ijailbreak/downloads/list'&gt;code.google.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This will jailbreak the iPhones and iPod Touch.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1992475873294998103?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1992475873294998103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1992475873294998103&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1992475873294998103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1992475873294998103'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/113-jailbreak.html' title='1.1.3 Jailbreak'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2191418488535634826</id><published>2008-01-21T13:18:00.000-08:00</published><updated>2008-01-21T13:20:44.094-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QuickLook'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>QuickLook plugin for .PKG</title><content type='html'>There's a handy QuickLook plugin to show what files a pkg will install at &lt;a href='http://www.mothersruin.com/software/SuspiciousPackage/'&gt;http://MothersRuin.com/software/SuspiciousPackage/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Suspicious Package is a plugin for the Quick Look feature of Mac OS X 10.5 (Leopard). It allows you to preview the contents of a standard Apple installer package without launching the Installer. Just select the icon in the Finder and select Quick Look&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2191418488535634826?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2191418488535634826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2191418488535634826&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2191418488535634826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2191418488535634826'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/quicklook-plugin-for-pkg.html' title='QuickLook plugin for .PKG'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4696804747999758170</id><published>2008-01-13T09:34:00.000-08:00</published><updated>2008-01-13T09:36:32.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cgi'/><title type='text'>3 guys + 1 week = D Day</title><content type='html'>&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WRS9cpOMYv0&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/WRS9cpOMYv0&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Great example of just what you can do now with computer graphics.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4696804747999758170?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4696804747999758170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4696804747999758170&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4696804747999758170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4696804747999758170'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/3-guys-1-week-d-day.html' title='3 guys + 1 week = D Day'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-6992957644659307948</id><published>2008-01-09T12:02:00.000-08:00</published><updated>2008-01-09T12:04:34.040-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macfuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>New version of MacFUSE</title><content type='html'>Details posted at &lt;a href='http://googlemac.blogspot.com/2008/01/new-version-of-macfuse-now-with.html'&gt;Google Mac Blog&lt;/a&gt;, direct download link is &lt;a href='http://code.google.com/p/macfuse/downloads/list'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-6992957644659307948?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/6992957644659307948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=6992957644659307948&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6992957644659307948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6992957644659307948'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/new-version-of-macfuse.html' title='New version of MacFUSE'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-7967870304467958326</id><published>2008-01-08T21:20:00.001-08:00</published><updated>2008-01-08T21:33:40.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='10.5'/><title type='text'>ZFS update for the bleeding edge</title><content type='html'>Saw a post on zfs-discuss today, ZFS for Leopard source &amp; binaries have been posted to &lt;a href='http://zfs.macosforge.org/?page_id=5'&gt;zfs.macosforge.org&lt;/a&gt;. This includes some new fixes over the one on ADC, but it is also bleeding edge - there's no PKG file to install, so you have to be comfortable manually copying a bunch of files at the command line with sudo to use this, and there are a bunch of known bugs (listed at &lt;a href='http://zfs.macosforge.org/?page_id=5'&gt;zfs.macosforge.org&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;It's not an official Apple release, so if you break anything on your system with it, I'm sure their response is going to be "reinstall everything - you did have backups, right?"&lt;br /&gt;&lt;br /&gt;That said, Noël's announcement said that he has his homedir on ZFS now, which is what I've been wanting to do ever since I heard there might be ZFS support in 10.5.&lt;br /&gt;&lt;br /&gt;Here's the list of bugs fixed in the 102A rev:&lt;br /&gt;&lt;br /&gt;Bugs Fixed in this Rev:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;5448925: sync ZFS with Solaris build 72&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5405398: zfs needs kqueue(2) API support&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5602507: Leopard9A581: Kernel trap at 0×4d351d9c, type 14=page fault, registers:&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5592757: Kernel panic when writing to a zfs volume&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5482932: Raidz parity rewrite issue&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5641577: ZFS: panic: zap-&gt;zap_u.zap_fat.zap_phys-&gt;zap_magic == 0×2F52AB2ABULL failed&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5621659: assertion failed in /Users/local/zfs-101-latest_fixes/zfs_kext/zfs/zfs_dir.c line 730: error == 0&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5643944: ZFS get/set and mountpoints are misbehaving&lt;/li&gt;&lt;br /&gt;&lt;li&gt;5645880: Finder copy and “delete” broken in zfs-101 plus fixes..&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-7967870304467958326?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/7967870304467958326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=7967870304467958326&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7967870304467958326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7967870304467958326'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/zfs-update-for-bleeding-edge.html' title='ZFS update for the bleeding edge'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4465207794859112329</id><published>2008-01-06T12:48:00.000-08:00</published><updated>2008-01-06T12:50:50.753-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>iTunes &amp; FUSE</title><content type='html'>iTunesFS is a FUSE filesystem that lets you see all your iPods &amp; iTunes playlists as Finder folders. Download it &lt;a href='http://www.mulle-kybernetik.com/software/iTunesFS/'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4465207794859112329?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4465207794859112329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4465207794859112329&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4465207794859112329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4465207794859112329'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/itunes-fuse.html' title='iTunes &amp; FUSE'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4940866048089651517</id><published>2008-01-05T11:40:00.000-08:00</published><updated>2008-01-05T11:51:16.046-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rspec'/><category scheme='http://www.blogger.com/atom/ns#' term='rspec_on_rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>rspec_on_rails sqlite3 error</title><content type='html'>I started a new project last night, and decided to use rspec_on_rails. I was following some examples from Luke Redpath's &lt;a href="http://www.lukeredpath.co.uk/2006/8/29/developing-a-rails-model-using-bdd-and-rspec-part-1"&gt;blog entry&lt;/a&gt; and got the following error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SQLite3::SQLException in 'A player should be invalid without a user_id'&lt;br /&gt;SQL logic error or missing database&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I eventually tracked down an email from David Chelimsky on &lt;a href="http://www.nabble.com/Re%3A-An-error-on-edge-at--r-2767-p13370152.html"&gt;rspec-users&lt;/a&gt; that explained this could be fixed by setting config.use_transactional_fixtures = false in&lt;br /&gt;spec/spec_helper.rb.&lt;br /&gt;&lt;br /&gt;Anyway, posting it here to make it easier to google for.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4940866048089651517?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4940866048089651517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4940866048089651517&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4940866048089651517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4940866048089651517'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2008/01/rspeconrails-sqlite3-error.html' title='rspec_on_rails sqlite3 error'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1849506660807084759</id><published>2007-12-17T18:06:00.000-08:00</published><updated>2007-12-17T18:09:37.862-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QuickLook'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>QuickLook + TextMate</title><content type='html'>QuickLook plugins for TextMate - there's one that lets you view source files in your project with TextMate, and another that lets QuickLook use TextMate to render syntax-colorized views of source code.&lt;br /&gt;&lt;br /&gt;Both are at Ciarán Walsh's &lt;a href='http://ciaranwal.sh/2007/11/15/quicklook-and-textmate'&gt;blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1849506660807084759?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ciaranwal.sh/2007/11/15/quicklook-and-textmate' title='QuickLook + TextMate'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1849506660807084759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1849506660807084759&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1849506660807084759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1849506660807084759'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/12/quicklook-textmate.html' title='QuickLook + TextMate'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5596063931548982229</id><published>2007-12-15T00:13:00.000-08:00</published><updated>2007-12-15T00:17:44.345-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QuickLook'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>ZIP file Quick Look plugin</title><content type='html'>XX posted a free Quick Look plugin that lets you examine ZIP, TAR, GZip, BZip2, ARJ, LZH, ISO, CHM, CAB, CPIO, RAR, 7-Zip, DEB, RPM, StuffIt's SIT, DiskDoubler, BinHex, and MacBinary on his &lt;a href='http://macitbetter.com/BetterZip-Quick-Look-Generator'&gt;MacItBetter&lt;/a&gt; blog.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5596063931548982229?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://macitbetter.com/BetterZip-Quick-Look-Generator' title='ZIP file Quick Look plugin'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5596063931548982229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5596063931548982229&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5596063931548982229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5596063931548982229'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/12/zip-file-quick-look-plugin.html' title='ZIP file Quick Look plugin'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3290380155944262439</id><published>2007-11-27T21:17:00.000-08:00</published><updated>2007-11-27T21:22:23.661-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebies'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>Free album on iTunes</title><content type='html'>Get 34 free tracks, courtesy of tunecore, at &lt;a href='http://www.tunecore.com/freealbum'&gt;http://www.tunecore.com/freealbum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;They're a specific set of tracks from tunecore customers, and I liked a few.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3290380155944262439?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3290380155944262439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3290380155944262439&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3290380155944262439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3290380155944262439'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/11/free-album-on-itunes.html' title='Free album on iTunes'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8159233286784134972</id><published>2007-10-31T12:26:00.000-07:00</published><updated>2007-10-31T12:43:17.622-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>Leopard Security Roundup</title><content type='html'>Thomas Ptacek of Matasano Security posted a very good review of the various Leopard security features on their blog, &lt;a href='http://www.matasano.com/log/981/a-roundup-of-leopard-security-features/'&gt;matasano chargen&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8159233286784134972?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8159233286784134972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8159233286784134972&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8159233286784134972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8159233286784134972'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/leopard-security-roundup.html' title='Leopard Security Roundup'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5699398025028044149</id><published>2007-10-28T16:00:00.001-07:00</published><updated>2007-10-30T14:29:55.993-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unsanity'/><category scheme='http://www.blogger.com/atom/ns#' term='ape'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='10.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>Remove APE before insalling 10.5</title><content type='html'>There are known issues with Unsanity's APE extension and 10.5. Remove it before upgrading to 10.5.&lt;br /&gt;&lt;br /&gt;You may not realize you have APE - Logitech's mouse driver is known to use it, and AudioHijack Pro's Instant hijack is also known to use it.&lt;br /&gt;&lt;br /&gt;If you are getting the blue screen and no loginwindow, you can nuke APE without a reinstall with the following steps:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Boot into single user mode by holding Apple+S on startup&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;fsck -fy /&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;/sbin/mount -uw /&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;rm -rf /Library/Preference Panes/Application Enhancer.prefpane  /Library/Frameworks/Application Enhancer.framework /System/Library/SystemConfiguration/Application Enhancer.bundle  /Library/Preferences/com.unsanity.ape.plist&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;sync;shutdown -r now&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Edit&lt;/em&gt;&lt;br /&gt;John Gruber has more background on this in an article he wrote on Daring Fireball &lt;a href='http://daringfireball.net/2007/10/blue_in_the_face'&gt;here&lt;/a&gt; and Apple posted a KB article about this &lt;a href='http://docs.info.apple.com/article.html?artnum=306857'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5699398025028044149?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5699398025028044149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5699398025028044149&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5699398025028044149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5699398025028044149'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/remove-ape-before-insalling-105.html' title='Remove APE before insalling 10.5'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1857106210720358144</id><published>2007-10-28T12:55:00.000-07:00</published><updated>2007-10-28T12:57:51.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Finder'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><category scheme='http://www.blogger.com/atom/ns#' term='10.5'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Open Finder selection in TextMate</title><content type='html'>The Pug Automatic posted a nice little applescript you can add to your Finder toolbar that lets you just click the button to open the selected files/folders in TextMate.&lt;br /&gt;&lt;br /&gt;Grab it &lt;a href='http://henrik.nyh.se/2007/10/open-in-textmate-from-leopard-finder'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1857106210720358144?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1857106210720358144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1857106210720358144&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1857106210720358144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1857106210720358144'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/open-in-textmate-in-finder.html' title='Open Finder selection in TextMate'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3399066407004461454</id><published>2007-10-27T13:36:00.000-07:00</published><updated>2007-10-27T13:43:42.119-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macfuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='10.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>New MacFUSE with Leopard support</title><content type='html'>Get it from &lt;a href='http://code.google.com/p/macfuse/'&gt;http://code.google.com/p/macfuse/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The QuickStart guide is &lt;a href='http://code.google.com/p/macfuse/wiki/QUICKER_START_GUIDE'&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There's also a new SSHfs build for 10.5 as well.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3399066407004461454?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3399066407004461454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3399066407004461454&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3399066407004461454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3399066407004461454'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/new-macfuse-with-leopard-support.html' title='New MacFUSE with Leopard support'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2219757658853328113</id><published>2007-10-24T23:57:00.001-07:00</published><updated>2007-10-25T00:01:57.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoto'/><title type='text'>Plugin to export pictures as archives from iPhoto</title><content type='html'>Joey Gibson wrote a handy iPhoto 7 plugin that lets you export photos as zip, tar.gz or tar.bz archives.&lt;br /&gt;&lt;br /&gt;Download it &lt;a href='http://joeygibson.com/blog/tech/mac/ExportToArchiveiPhotoPlugin.html'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2219757658853328113?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2219757658853328113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2219757658853328113&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2219757658853328113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2219757658853328113'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/plugin-to-export-pictures-as-archives.html' title='Plugin to export pictures as archives from iPhoto'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3014249825238900306</id><published>2007-10-24T23:57:00.000-07:00</published><updated>2007-10-25T00:01:04.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoto'/><title type='text'>iPhoto plugin to export pictures as archives</title><content type='html'>Joey Gibson wrote a handy iPhoto 7 plugin that lets you export photos as zip, tar.gz or tar.bz archives.&lt;br /&gt;&lt;br /&gt;Download it &lt;a href='http://joeygibson.com/blog/tech/mac/ExportToArchiveiPhotoPlugin.html'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3014249825238900306?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3014249825238900306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3014249825238900306&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3014249825238900306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3014249825238900306'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/iphoto-plugin-to-export-pictures-as.html' title='iPhoto plugin to export pictures as archives'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-9116255124997718657</id><published>2007-10-20T16:18:00.000-07:00</published><updated>2007-10-20T16:22:44.507-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Hack your 1.1.1 iPhone</title><content type='html'>&lt;a href="http://code.google.com/p/independence/"&gt;iNdependence&lt;/a&gt; is a handy gui that will help you revert your iPhone to 1.0.2, then prep it so it can be jailbroken once 1.1.1 is installed.&lt;br /&gt;&lt;br /&gt;Then all you need is &lt;a href="http://iphone.nullriver.com/beta/"&gt;AppTapp&lt;/a&gt; to get Installer.app, and you're golden again.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-9116255124997718657?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/9116255124997718657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=9116255124997718657&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/9116255124997718657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/9116255124997718657'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/hack-your-111-iphone.html' title='Hack your 1.1.1 iPhone'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2938312809153905060</id><published>2007-10-08T21:27:00.000-07:00</published><updated>2007-10-08T21:29:35.754-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>iPhone 1.1.1 jailbreak!</title><content type='html'>3rd party applications should be back soon!&lt;br /&gt;&lt;br /&gt;BSD level stuff is running again, 3rd party apps need recompilation.&lt;br /&gt;&lt;br /&gt;Via &lt;a href='http://gizmodo.com/gadgets/iphone/hackers-break-into-the-latest-iphone-firmware-again-308235.php'&gt;gizmodo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2938312809153905060?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2938312809153905060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2938312809153905060&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2938312809153905060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2938312809153905060'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/10/iphone-111-jailbreak.html' title='iPhone 1.1.1 jailbreak!'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2881729373377568135</id><published>2007-09-19T17:11:00.000-07:00</published><updated>2007-09-19T17:14:36.810-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gps'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Synthetic GPS for your iPhone</title><content type='html'>There's a Navizon application available with installer.app on the iPhone now. It triangulates your location based on known cell tower positions and updates the map on the iPhone.&lt;br /&gt;&lt;br /&gt;Pretty sweet. (Courtesy &lt;a href='http://www.ipodhacks.com/article.php?sid=2386'&gt;iPodHacks&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2881729373377568135?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2881729373377568135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2881729373377568135&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2881729373377568135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2881729373377568135'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/09/synthetic-gps-for-your-iphone.html' title='Synthetic GPS for your iPhone'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-439491231864918746</id><published>2007-09-13T10:06:00.000-07:00</published><updated>2007-09-13T10:08:45.527-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='SGI'/><title type='text'>In other news, cold fronts moving in in hell...</title><content type='html'>&lt;a href='http://www.sun.com/aboutsun/pr/2007-09/sunflash.20070912.1.xml'&gt;Sun to Become Windows Server OEM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Seriously, don't they remember what happened when SGI released windows boxes?&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-439491231864918746?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/439491231864918746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=439491231864918746&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/439491231864918746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/439491231864918746'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/09/in-other-news-cold-fronts-moving-in-in.html' title='In other news, cold fronts moving in in hell...'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8386976618984676118</id><published>2007-09-13T10:02:00.000-07:00</published><updated>2007-09-13T10:04:59.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='evil'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Well, their motto doesn't mention anything about not being evil, so I guess it's ok...</title><content type='html'>Nice blog entry on &lt;a href='http://blogs.zdnet.com/hardware/?cat=55&amp;tag=nl.e622'&gt;zdnet&lt;/a&gt; about how, even if you have a system explicitly set to not update automatically, Microsoft will silently update your machines with no notification or asking permission.&lt;br /&gt;&lt;br /&gt;Nice.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8386976618984676118?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8386976618984676118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8386976618984676118&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8386976618984676118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8386976618984676118'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/09/well-their-motto-doesnt-mention.html' title='Well, their motto doesn&apos;t mention anything about not being evil, so I guess it&apos;s ok...'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-6097103508006909499</id><published>2007-09-11T12:48:00.000-07:00</published><updated>2007-09-11T12:50:23.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Extra Apps for iPhone</title><content type='html'>To sum up:&lt;br /&gt;&lt;blockquote&gt;&lt;a href='http://iphone.nullriver.com/beta/'&gt;Installer.app&lt;/a&gt; is a UIKit based package manager for the iPhone. It works by downloading packages over WiFi (wireless networking) or EDGE. It supports installing, updating and uninstalling applications from multiple sources.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Very painless, very cool.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-6097103508006909499?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://iphone.nullriver.com/beta/' title='Extra Apps for iPhone'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/6097103508006909499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=6097103508006909499&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6097103508006909499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6097103508006909499'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/09/extra-apps-for-iphone.html' title='Extra Apps for iPhone'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-6754467916285716890</id><published>2007-08-20T12:13:00.000-07:00</published><updated>2007-08-20T12:15:01.048-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='handbrake'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>Handbrake 0.9.0 released</title><content type='html'>All sorts of changes, read about them &lt;a href='http://handbrake.m0k.org/?p=53'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-6754467916285716890?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://handbrake.m0k.org/?p=53' title='Handbrake 0.9.0 released'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/6754467916285716890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=6754467916285716890&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6754467916285716890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6754467916285716890'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/08/handbrake-090-released.html' title='Handbrake 0.9.0 released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1765792006127221768</id><published>2007-08-10T18:01:00.000-07:00</published><updated>2007-08-10T18:04:35.728-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sco'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Th-th-that's all Folks!</title><content type='html'>Groklaw has a good &lt;a href='http://www.groklaw.net/article.php?story=20070810165237718'&gt;article&lt;/a&gt; explaining what the latest court ruling in SCO vs Novell means in detail. To sum up, SCO lost, Novell does indeed own the UnixWare and UNIX copyrights.&lt;br /&gt;&lt;br /&gt;And SCO owes Novell big bucks for the licenses it sold Microsoft and Sun.&lt;br /&gt;&lt;br /&gt;Sweet!&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1765792006127221768?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.groklaw.net/article.php?story=20070810165237718' title='Th-th-that&apos;s all Folks!'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1765792006127221768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1765792006127221768&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1765792006127221768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1765792006127221768'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/08/th-th-thats-all-folks.html' title='Th-th-that&apos;s all Folks!'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8700270635536366265</id><published>2007-07-24T10:46:00.000-07:00</published><updated>2007-07-24T10:48:25.693-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>sshd on iPhone</title><content type='html'>There is a nice little summary of pointers to how to get more unixy stuff installed on your iPhone at &lt;a href='http://www.tuaw.com/2007/07/23/ssh-on-iphone'&gt;The Unofficial Apple Weblog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8700270635536366265?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tuaw.com/2007/07/23/ssh-on-iphone' title='sshd on iPhone'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8700270635536366265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8700270635536366265&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8700270635536366265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8700270635536366265'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/07/sshd-on-iphone.html' title='sshd on iPhone'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2807969529817608246</id><published>2007-06-13T10:49:00.000-07:00</published><updated>2007-06-13T10:52:44.659-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><category scheme='http://www.blogger.com/atom/ns#' term='cat'/><category scheme='http://www.blogger.com/atom/ns#' term='camera'/><title type='text'>Cat Cam</title><content type='html'>J. Perthold has a very cool &lt;a href='http://www.mr-lee-catcam.de/'&gt;website&lt;/a&gt; explaining about his project to create a collar-mounted camera for his cat. He goes into detail about which camera he used, schematics of the custom board he made to control the camera and periodically take a picture. You even get to see a few days worth of the life of his indoor-outdoor cat, Mr. Lee.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2807969529817608246?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mr-lee-catcam.de/' title='Cat Cam'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2807969529817608246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2807969529817608246&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2807969529817608246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2807969529817608246'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/06/cat-cam.html' title='Cat Cam'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5769748772188141199</id><published>2007-06-09T12:37:00.000-07:00</published><updated>2007-06-09T12:39:20.319-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jruby'/><title type='text'>JRuby 1.0 Released</title><content type='html'>Read more details at &lt;a href='http://www.jruby.org/'&gt;http://www.jruby.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Or just download it at &lt;a href='http://dist.codehaus.org/jruby/'&gt;http://dist.codehaus.org/jruby&lt;/a&gt; and try it for yourself.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5769748772188141199?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jruby.org/' title='JRuby 1.0 Released'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5769748772188141199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5769748772188141199&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5769748772188141199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5769748772188141199'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/06/jruby-10-released.html' title='JRuby 1.0 Released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2742842844327525020</id><published>2007-05-25T14:18:00.000-07:00</published><updated>2007-05-25T14:20:17.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>RubyCocoa 0.11.0 released</title><content type='html'>RubyCocoa 0.11.0 is out. Build Cocoa applications with Ruby. Download it from &lt;a href='http://sourceforge.net/project/showfiles.php?group_id=44114'&gt;Sourceforge&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2742842844327525020?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sourceforge.net/project/showfiles.php?group_id=44114' title='RubyCocoa 0.11.0 released'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2742842844327525020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2742842844327525020&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2742842844327525020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2742842844327525020'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/05/rubycocoa-0110-released.html' title='RubyCocoa 0.11.0 released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4253229386241866675</id><published>2007-05-21T12:35:00.000-07:00</published><updated>2007-05-21T12:39:15.824-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Subversion scripts for Finder</title><content type='html'>Adam Brytek posted a list of AppleScripts for OS X Finder that allow you to do a bunch of convenient Subversion commands &lt;a href='http://svn-finder.sourceforge.net/'&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The current rev supports&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;        &lt;li&gt;Add&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Commit&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Delete&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Revert&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Status&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;Update&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4253229386241866675?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://svn-finder.sourceforge.net/' title='Subversion scripts for Finder'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4253229386241866675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4253229386241866675&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4253229386241866675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4253229386241866675'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/05/subversion-scripts-for-finder.html' title='Subversion scripts for Finder'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1772873193353970538</id><published>2007-05-14T11:29:00.000-07:00</published><updated>2007-05-14T11:38:57.128-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>OSX process snapshots</title><content type='html'>Amit Singh posted details of how to make a snapshot of a running process - memory, registers, the works - &lt;a href='http://osxbook.com/book/bonus/chapter8/core/'&gt;here&lt;/a&gt;. He posted source code for a program that will make the snapshot, too. &lt;br /&gt;&lt;br /&gt;The really cool thing is that you don't need to make changes to the program for his technique to work, and taking the snapshot doesn't force the running process to halt.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1772873193353970538?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://osxbook.com/book/bonus/chapter8/core/' title='OSX process snapshots'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1772873193353970538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1772873193353970538&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1772873193353970538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1772873193353970538'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/05/osx-process-snapshots.html' title='OSX process snapshots'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-7551600301317657810</id><published>2007-05-09T18:04:00.000-07:00</published><updated>2007-05-09T18:07:26.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macfuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>More MacFUSE</title><content type='html'>&lt;a href='http://www.sccs.swarthmore.edu/users/08/mgorbach/MacFusionWeb/index.html'&gt;MacFusion&lt;/a&gt; is an Open Source GUI for MacFUSE. It currently supports SSH filesystems and Secure FTP filesystems, but it has a plugin architecture so I expect to see more supported filesystems soon.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-7551600301317657810?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sccs.swarthmore.edu/users/08/mgorbach/MacFusionWeb/index.html' title='More MacFUSE'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/7551600301317657810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=7551600301317657810&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7551600301317657810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7551600301317657810'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/05/more-macfuse.html' title='More MacFUSE'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-6031839418232049599</id><published>2007-05-09T14:40:00.000-07:00</published><updated>2007-05-09T14:43:08.985-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macfuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>ProcFS for MacFUSE</title><content type='html'>Amit Singh has released procfs (with source) for OS X &lt;a href="http://osxbook.com/book/bonus/chapter11/procfs/"&gt;here&lt;/a&gt;. You'l need to have MacFUSE installed for this to work.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-6031839418232049599?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://osxbook.com/book/bonus/chapter11/procfs/' title='ProcFS for MacFUSE'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/6031839418232049599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=6031839418232049599&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6031839418232049599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6031839418232049599'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/05/procfs-for-macfuse.html' title='ProcFS for MacFUSE'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5086327603086743637</id><published>2007-05-08T08:29:00.000-07:00</published><updated>2007-05-08T09:33:34.198-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eff'/><category scheme='http://www.blogger.com/atom/ns#' term='civil-rights'/><title type='text'>Speak out against Real ID</title><content type='html'>Here's a quote from &lt;a href='http://www.privacycoalition.org/stoprealid/'&gt;privacycoalition.org&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Organizations have launched a nationwide campaign to engage the public in the debate over what would be the first national identification document. These transpartisan, nonpartisan, privacy, consumer, civil liberty, civil rights, and immigrant organizations have joined in this unique public education project because the REAL ID proposal put forth by the Department of Homeland Security (DHS) would harm our lives in a multitude of ways every day. The proposed regulations set requirements that states must follow to have their state issued identification documents accepted for federal purposes, like getting on an airplane or entering a government building, including courthouses.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Do you really want the same guys who think that shampoo is too dangerous to go in your carry on to force you to carry a national ID? Isn't that what a passport is for?&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5086327603086743637?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://secure.eff.org/site/Advocacy?JServSessionIdr007=jursz5zko3.app13b&amp;cmd=display&amp;page=UserAction&amp;id=287' title='Speak out against Real ID'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5086327603086743637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5086327603086743637&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5086327603086743637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5086327603086743637'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/05/speak-out-against-real-id.html' title='Speak out against Real ID'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8435486257735174562</id><published>2007-04-27T10:16:00.000-07:00</published><updated>2007-04-27T10:18:49.378-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='webgame'/><category scheme='http://www.blogger.com/atom/ns#' term='weewar'/><category scheme='http://www.blogger.com/atom/ns#' term='wargame'/><title type='text'>Fun web wargame</title><content type='html'>I found a nice little wargame online the other day - &lt;a href='http://weewar.com?referrer=jpb'&gt;weewar.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's turn based so you don't have to commit to blowing all your free time on it, and simple enough to play quickly. Feel free to invite me to a game - I'm jpb there.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8435486257735174562?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://weewar.com?referrer=jpb' title='Fun web wargame'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8435486257735174562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8435486257735174562&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8435486257735174562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8435486257735174562'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/04/fun-web-wargame.html' title='Fun web wargame'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2615492998932914276</id><published>2007-04-21T15:39:00.000-07:00</published><updated>2007-04-21T15:46:02.570-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>HandBrake 0.8.5b1 Released</title><content type='html'>All sorts of nice stuff. Cool new features include AppleTV support &amp; surround sound.&lt;br /&gt;&lt;br /&gt;Get it &lt;a href='http://handbrake.m0k.org/?p=48' title='Handbrake'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2615492998932914276?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://handbrake.m0k.org/?p=48' title='HandBrake 0.8.5b1 Released'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2615492998932914276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2615492998932914276&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2615492998932914276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2615492998932914276'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/04/handbrake-085b1-released.html' title='HandBrake 0.8.5b1 Released'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2106551571414087475</id><published>2007-04-19T22:52:00.000-07:00</published><updated>2007-04-19T22:54:30.718-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>MacFUSE 0.2.5</title><content type='html'>Another rev of MacFUSE stuff available &lt;a href='http://code.google.com/p/macfuse/downloads/list'&gt;here&lt;/a&gt;. Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2106551571414087475?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/macfuse/downloads/list' title='MacFUSE 0.2.5'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2106551571414087475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2106551571414087475&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2106551571414087475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2106551571414087475'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/04/macfuse-025.html' title='MacFUSE 0.2.5'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3778575650701655027</id><published>2007-04-17T14:39:00.000-07:00</published><updated>2007-04-17T14:43:56.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GMail'/><category scheme='http://www.blogger.com/atom/ns#' term='Greasemonkey'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Good Firefox extension for GMail</title><content type='html'>Lifehacker has a post &lt;a href='http://lifehacker.com/software/gmail/hack-attack-supercharge-your-gmail-252737.php'&gt;here&lt;/a&gt; showing how to use the extension they've compiled a bunch of good Greasemonkey extensions for making GMail even more easy to use into.&lt;br /&gt;&lt;br /&gt;More keyboard macros, adds icons to messages with attachments, saving searches, a helper for making a new filter based on the message you're looking at, and more goodies.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3778575650701655027?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://lifehacker.com/software/gmail/hack-attack-supercharge-your-gmail-252737.php' title='Good Firefox extension for GMail'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3778575650701655027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3778575650701655027&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3778575650701655027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3778575650701655027'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/04/good-firefox-extension-for-gmail.html' title='Good Firefox extension for GMail'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-914037862868594934</id><published>2007-04-04T13:44:00.000-07:00</published><updated>2007-04-04T13:48:09.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>Google Desktop for Mac</title><content type='html'>So I can finally talk about &lt;a href='http://desktop.google.com/?utm_campaign=en&amp;utm_source=en-ha-na-us-google&amp;utm_medium=ha&amp;utm_term=google%20desktop'&gt;this&lt;/a&gt;. To sum up, very cool. You can use it for launching applications like Quicksilver, or just use it to search the docs on your machine like Spotlight, only with less frustration. And you can have it search your GMail account, too.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-914037862868594934?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://desktop.google.com/?utm_campaign=en&amp;utm_source=en-ha-na-us-google&amp;utm_medium=ha&amp;utm_term=google%20desktop' title='Google Desktop for Mac'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/914037862868594934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=914037862868594934&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/914037862868594934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/914037862868594934'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/04/google-desktop-for-mac.html' title='Google Desktop for Mac'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8295959916138382521</id><published>2007-03-16T17:48:00.000-07:00</published><updated>2007-03-16T17:51:01.391-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoto'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Fun with iPhoto</title><content type='html'>Nathaniel Grey has a great little plugin for iPhoto that lets you use your own scripts when you export photos &lt;a href='http://www.n8gray.org/code/scriptexport/'&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can specify scripts that get run before the export, for each file in the export, and after the export. And they can be in real languages, not just AppleScript.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8295959916138382521?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.n8gray.org/code/scriptexport/' title='Fun with iPhoto'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8295959916138382521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8295959916138382521&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8295959916138382521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8295959916138382521'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/03/fun-with-iphoto.html' title='Fun with iPhoto'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2037409601182288611</id><published>2007-03-10T18:40:00.000-08:00</published><updated>2007-03-10T18:42:34.999-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>Use Google Calculator as OS X Service</title><content type='html'>Christopher Biagini packaged up an OS X service that wraps Google Calculator &lt;a href='http://assortedgeekery.com/archives/2007/03/09/google-calculator-service'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2037409601182288611?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://assortedgeekery.com/archives/2007/03/09/google-calculator-service' title='Use Google Calculator as OS X Service'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2037409601182288611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2037409601182288611&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2037409601182288611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2037409601182288611'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/03/use-google-calculator-as-os-x-service.html' title='Use Google Calculator as OS X Service'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-7730189759806109665</id><published>2007-03-06T09:22:00.000-08:00</published><updated>2007-03-06T09:23:52.313-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='launchd'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Get subversion to launch on boot on OSX</title><content type='html'>There's a good article on how to get subversion server to start on boot on OS X &lt;a href='http://www.wishingline.com/notebook/archives/2007_03.php'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-7730189759806109665?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wishingline.com/notebook/archives/2007_03.php' title='Get subversion to launch on boot on OSX'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/7730189759806109665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=7730189759806109665&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7730189759806109665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7730189759806109665'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/03/get-subversion-to-launch-on-boot-on-osx.html' title='Get subversion to launch on boot on OSX'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-7064157578675721556</id><published>2007-03-06T09:19:00.000-08:00</published><updated>2007-03-06T09:20:53.266-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><category scheme='http://www.blogger.com/atom/ns#' term='webdev'/><title type='text'>Serverskine</title><content type='html'>Free, and handy for the OS X based web developers.&lt;br /&gt;&lt;br /&gt; &lt;a href='http://www.serverskine.com/'&gt;Serverskine&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Designed to allow web developers, who deal with many projects at once, quick access to FTP, hosting accounts, domain name accounts and more. Especially when dealing with off-site shared hosting, keeping track of usernames and passwords can be daunting. Serverskine eliminates the terror by allowing you to quickly organize, search, edit, and backup all of your important account information."&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-7064157578675721556?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.serverskine.com' title='Serverskine'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/7064157578675721556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=7064157578675721556&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7064157578675721556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/7064157578675721556'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/03/serverskine.html' title='Serverskine'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-4892346279398938392</id><published>2007-02-28T18:04:00.000-08:00</published><updated>2007-02-28T18:06:24.463-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>MacFUSE 0.2.2</title><content type='html'>Another MacFUSE release, with bugfixes and sample filesystem source code. Get it &lt;a href='http://code.google.com/p/macfuse/'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-4892346279398938392?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/macfuse/' title='MacFUSE 0.2.2'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/4892346279398938392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=4892346279398938392&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4892346279398938392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/4892346279398938392'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/02/macfuse-022.html' title='MacFUSE 0.2.2'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-3300033647299417432</id><published>2007-02-28T11:21:00.000-08:00</published><updated>2007-02-28T11:22:23.861-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='applescript'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Replace AppleScript with Ruby</title><content type='html'>There's a great article on replacing AppleScript with Ruby at O'Reilly's MacDevcenter &lt;a href='http://www.macdevcenter.com/pub/a/mac/2007/02/27/replacing-applescript-with-ruby.html?page=1'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-3300033647299417432?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.macdevcenter.com/pub/a/mac/2007/02/27/replacing-applescript-with-ruby.html?page=1' title='Replace AppleScript with Ruby'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/3300033647299417432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=3300033647299417432&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3300033647299417432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/3300033647299417432'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/02/replace-applescript-with-ruby.html' title='Replace AppleScript with Ruby'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-6934368135977004004</id><published>2007-02-21T17:33:00.000-08:00</published><updated>2007-02-21T17:40:57.405-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='applescript'/><title type='text'>Ugly hack to use AppleScript to present a dialog from a bash script, and get their choice.</title><content type='html'>I am reposting this from my old blog because a coworker ended up needing this. This has only been tested on 10.4, though nothing in it is all that special.&lt;br /&gt;&lt;br /&gt;I was trying to slap a prettier interface onto a bash script for a client. I only bothered to use an AppleScript instead of just sending it to Growl because I needed them to be able to make a choice that I’m going to act on in my script. Even if it was just for display, I didn’t particularly want them to have to install Growl just for my little script.&lt;br /&gt;&lt;br /&gt;This is ugly because I had to use a temporary file to store the AppleScript to display the dialog. It is also ugly because we can’t just display the dialog – we get an error message if we try – but we can tell another application to display the dialog. I picked System Events because it’s always running anyway.&lt;br /&gt;&lt;br /&gt;This method also allows us to use a program-generated message instead of something static.&lt;br /&gt;&lt;br /&gt;And just for the heck of it, I stuff the name of the button the user clicks into a variable, in case you want to use this snippet to display choices for the user.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#! /bin/bash &lt;br /&gt;&lt;br /&gt;msg="Giant cracks appeared in the earth’s surface!" &lt;br /&gt;&lt;br /&gt;# use $$ here so that the process ID of this script is part of the file name. &lt;br /&gt;# this makes it a lot harder to accidentally step on another instance &lt;br /&gt;# of the script that’s trying to also display something to the user. &lt;br /&gt;&lt;br /&gt;tf=/tmp/ziggurat$$ &lt;br /&gt;&lt;br /&gt;# note that there should be 3 lines between EOF and EOF, in &lt;br /&gt;# in case this is mangled by blogger&lt;br /&gt; &lt;br /&gt;cat&amp;gt;$tf &amp;lt;&amp;lt;EOF &lt;br /&gt;tell application "System Events" &lt;br /&gt;   display dialog "$msg" with icon stop buttons {"Foo", "Bar", "OK"} default button "OK" &lt;br /&gt;end tell &lt;br /&gt;EOF &lt;br /&gt;&lt;br /&gt;foo=`osascript $tf | awk -F":" ’{print $2}’` &lt;br /&gt;&lt;br /&gt;echo "foo: $foo" &lt;br /&gt;&lt;br /&gt;# don’t forget to trash the temporary file when we’re done with it. &lt;br /&gt;rm $tf &lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-6934368135977004004?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/6934368135977004004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=6934368135977004004&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6934368135977004004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/6934368135977004004'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/02/ugly-hack-to-use-applescript-to-present.html' title='Ugly hack to use AppleScript to present a dialog from a bash script, and get their choice.'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1940284631900607572</id><published>2007-02-20T11:43:00.000-08:00</published><updated>2007-02-20T11:44:41.909-08:00</updated><title type='text'>MacFUSE bumped to 0.21</title><content type='html'>New rev of MacFUSE &lt;a href='http://code.google.com/p/macfuse/'&gt;available&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1940284631900607572?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/macfuse/' title='MacFUSE bumped to 0.21'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1940284631900607572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1940284631900607572&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1940284631900607572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1940284631900607572'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/02/macfuse-bumped-to-021.html' title='MacFUSE bumped to 0.21'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-8170540372456677009</id><published>2007-01-26T14:02:00.000-08:00</published><updated>2007-01-26T14:05:34.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='macfuse'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>MacFuse</title><content type='html'>Amit released the Macintosh port of &lt;a href='http://code.google.com/p/macfuse/'&gt;FUSE&lt;/a&gt; at MacWorld, which lets people write filesystems that don't require kernel code. Greg Miller has written a great sample filesystem for it, &lt;a href='http://unixjunkie.blogspot.com/2007/01/spotlightfs.html'&gt;SpotlightFS&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-8170540372456677009?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/8170540372456677009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=8170540372456677009&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8170540372456677009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/8170540372456677009'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/01/macfuse.html' title='MacFuse'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-5368227264449223383</id><published>2007-01-25T21:53:00.000-08:00</published><updated>2007-01-25T21:57:13.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/utility'/><title type='text'>Easy way to create services on OS X</title><content type='html'>&lt;a href='http://wafflesoftware.net/thisservice/'&gt;ThisService&lt;/a&gt; is an extremely handy tool for creating services on OS X.  Any script you have that reads from STDIN and writes (if appropriate) to STDOUT can be easily turned into a service.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-5368227264449223383?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wafflesoftware.net/thisservice/' title='Easy way to create services on OS X'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/5368227264449223383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=5368227264449223383&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5368227264449223383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/5368227264449223383'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/01/easy-way-to-create-services-on-os-x.html' title='Easy way to create services on OS X'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-2362891807893759923</id><published>2007-01-16T18:31:00.000-08:00</published><updated>2007-01-16T18:35:03.123-08:00</updated><title type='text'>Google hosting the blog now</title><content type='html'>Switched to having blogger host my blog under my domain and it has been painless. I don't have Google control my dns, so I can have other hosts on this domain, but after a single CNAME in my domain, I get to have Google still host the blog while it's visible as somewhere in my domain.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-2362891807893759923?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/2362891807893759923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=2362891807893759923&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2362891807893759923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/2362891807893759923'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/01/google-hosting-blog-now.html' title='Google hosting the blog now'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-1820269852276374235</id><published>2007-01-05T00:50:00.000-08:00</published><updated>2007-01-05T00:53:04.830-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='lego'/><category scheme='http://www.blogger.com/atom/ns#' term='geeky'/><title type='text'>Coolest. Lego. Ever.</title><content type='html'>&lt;a href='http://www.youtube.com/watch?v=GQ3AcPEPbH0&amp;NR'&gt;This&lt;/a&gt; has got to be the coolest Lego gadget I've ever seen.&lt;br /&gt;&lt;br /&gt;I wonder how many mindstorms bricks it took to make - I think I counted 6 in the video, but I'm sure I could have missed some more.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-1820269852276374235?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=GQ3AcPEPbH0&amp;NR' title='Coolest. Lego. Ever.'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/1820269852276374235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=1820269852276374235&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1820269852276374235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/1820269852276374235'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2007/01/coolest-lego-ever.html' title='Coolest. Lego. Ever.'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-116759113485062420</id><published>2006-12-31T10:49:00.000-08:00</published><updated>2006-12-31T10:55:43.330-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='irb'/><title type='text'>Tab completion and syntax hilighting for irb</title><content type='html'>Frank Spychalski posted how to use wirble to get syntax hiliting and tab completion in irb &lt;a href='http://amazing-development.com/archives/2006/12/31/tab-completion-and-syntax-highlighting-for-irb/'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-116759113485062420?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://amazing-development.com/archives/2006/12/31/tab-completion-and-syntax-highlighting-for-irb/' title='Tab completion and syntax hilighting for irb'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/116759113485062420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=116759113485062420&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/116759113485062420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/116759113485062420'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2006/12/tab-completion-and-syntax-hilighting.html' title='Tab completion and syntax hilighting for irb'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-116759118192095446</id><published>2006-12-31T10:47:00.000-08:00</published><updated>2006-12-31T10:54:38.451-08:00</updated><title type='text'>Time to eat the dog food</title><content type='html'>Plus, care and feeding of blog software was more pain than it was worth.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-116759118192095446?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/116759118192095446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=116759118192095446&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/116759118192095446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/116759118192095446'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2006/12/time-to-eat-dog-food.html' title='Time to eat the dog food'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-114114138337965648</id><published>2006-02-28T07:42:00.000-08:00</published><updated>2006-02-28T07:43:03.403-08:00</updated><title type='text'>New posts are all at http://digitalhominid.apesseekingknowledge.net</title><content type='html'>New posts are all at &lt;a href='http://digitalhominid.apesseekingknowledge.net'&gt;http://digitalhominid.apesseekingknowledge.net&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-114114138337965648?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://digitalhominid.apesseekingknowledge.net' title='New posts are all at http://digitalhominid.apesseekingknowledge.net'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/114114138337965648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=114114138337965648&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/114114138337965648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/114114138337965648'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2006/02/new-posts-are-all-at.html' title='New posts are all at http://digitalhominid.apesseekingknowledge.net'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111792084099093415</id><published>2005-06-04T14:31:00.000-07:00</published><updated>2006-12-31T11:03:38.774-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>New Butler out for 10.4.1</title><content type='html'>Peter Maurer has a new beta of Butler out for 10.4.1, &lt;a href='http://www.petermaurer.de/nasi.php?section=butler'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111792084099093415?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.petermaurer.de/nasi.php?section=butler' title='New Butler out for 10.4.1'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111792084099093415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111792084099093415&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111792084099093415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111792084099093415'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/06/new-butler-out-for-1041.html' title='New Butler out for 10.4.1'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111711894519840011</id><published>2005-05-26T07:49:00.000-07:00</published><updated>2006-12-31T11:04:22.970-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spotlight'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Spotlight importer for Python source</title><content type='html'>The guys over at &lt;a href='http://toxicsoftware.com/blog/index.php/weblog/python_metadata_importer_released_for_tiger/' title='http://toxicsoftware.com/blog/index.php/weblog/python_metadata_importer_released_for_tiger/'&gt;Toxic Software&lt;/a&gt; have released a freeware Spotlight plugin to handle Python source code.&lt;br /&gt;&lt;br /&gt;Very sweet, lets you search for stuff in comment strings, function names, all sorts of goodness.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111711894519840011?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111711894519840011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111711894519840011&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111711894519840011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111711894519840011'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/spotlight-importer-for-python-source.html' title='Spotlight importer for Python source'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111705509091214603</id><published>2005-05-25T14:04:00.000-07:00</published><updated>2006-12-31T11:05:30.261-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Ruby on Rails &amp; MySQL on Tiger</title><content type='html'>First, see the previous blog entry to &lt;a href='http://digitalhominid.blogspot.com/2005/05/fix-ruby-problem-on-104.html'&gt;fix your Ruby install&lt;/a&gt; to be able to make proper binary extensions. You're going to need to build a mysql extension for Ruby later.&lt;br /&gt;&lt;br /&gt;If you haven't already done so, install XCode (it's on the Tiger DVD), and &lt;a href='http://fink.sourceforge.net'&gt;fink&lt;/a&gt;. If you've only just installed fink, make sure you do a&lt;br /&gt;&lt;code&gt;&lt;br /&gt;fink selfupdate&lt;br /&gt;fink update-all&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Those will take a considerable amount of time if you haven't run them before.&lt;br /&gt;&lt;br /&gt;Now you need to install MySQL. You can either do it from the bare tarball, or use a package manager like fink or darwinports. I like fink, so do:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;fink install mysql mysql-client&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and let fink grind away at all the assorted dependencies mysql needs. This will take a while, MySQL is big.&lt;br /&gt;&lt;br /&gt;Now that MySQL is installed, we can install rails -&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem install rails&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Rails doesn't ship with an adapter for MySQL. We install it like so (this should be one line)&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo gem install mysql -- --with-mysql-lib=/sw/lib/mysql --with-mysql-include=/sw/include&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;so that it can find the mysql libraries fink installed earlier. Note that the &lt;b&gt;-- --with-mysql-include&lt;/b&gt; is supposed to be there, that isn't a typo.&lt;br /&gt;&lt;br /&gt;You can now go find one of the Rails tutorials like the one Vincent Foley has at &lt;a href='http://darkhost.mine.nu:81/~vince/rails/tutorial.html'&gt;http://darkhost.mine.nu:81/~vince/rails/tutorial.html&lt;/a&gt; and get started with Rails.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111705509091214603?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111705509091214603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111705509091214603&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111705509091214603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111705509091214603'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/ruby-on-rails-mysql-on-tiger.html' title='Ruby on Rails &amp; MySQL on Tiger'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111705404451247743</id><published>2005-05-25T13:47:00.000-07:00</published><updated>2006-12-31T11:06:11.281-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='10.4'/><title type='text'>Fix Ruby problem on 10.4</title><content type='html'>I've wanted to experiment with Ruby on Rails (the same technology behind Backpack) for a while now, but ran into a problem when I tried to install it on my 10.4 machine. Rails installs with gem, no problem, but I couldn't get gem to build the external libraries Ruby needs to interact with MySQL.&lt;br /&gt;&lt;br /&gt;Fortunately, the kind folks at &lt;a href='http://tech.rufy.com/entry/46'&gt;technoblog&lt;/a&gt; made a script that does all the fixes you need to get your Tiger Ruby to properly make binary libraries.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111705404451247743?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tech.rufy.com/entry/46' title='Fix Ruby problem on 10.4'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111705404451247743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111705404451247743&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111705404451247743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111705404451247743'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/fix-ruby-problem-on-104.html' title='Fix Ruby problem on 10.4'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111695585281969313</id><published>2005-05-24T10:30:00.000-07:00</published><updated>2006-12-31T11:06:42.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tiger'/><category scheme='http://www.blogger.com/atom/ns#' term='osx/Mail'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Tiger Mail cleanup</title><content type='html'>When you upgrade from Panther to Tiger, Mail converts the old format mbox files &amp; indexes to .elmx files and spotlight indexing. To be safe, it doesn't delete the old files in case you want to roll back. It also doesn't update them though, so they're kind of worthless spacewasters.&lt;br /&gt;&lt;br /&gt;Here's a list of commands to clear out the Panther grime. Make sure you have a backup of ~/Library/Mail, of course. Each line starting with &lt;b&gt;find&lt;/b&gt; should be a separate command in a Terminal window.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;find ~/Library/Mail -path "*.imapmbox/Cached*" -exec rm -v '{}' ';'&lt;br /&gt;&lt;br /&gt;find ~/Library/Mail -path "*.mbox/mbox" -exec rm -frv '{}' ';'&lt;br /&gt;&lt;br /&gt;find ~/Library/Mail -path "*.*mbox/content_index"  -exec rm -frv '{}' ';'&lt;br /&gt;&lt;br /&gt;find ~/Library/Mail -path "*.mbox/table_of_contents" -exec rm -frv '{}' ';'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Running this saved me 3G of disk space.&lt;br /&gt;&lt;br /&gt;If you don't make a backup before running this and this nukes your email, it's your fault.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111695585281969313?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111695585281969313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111695585281969313&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111695585281969313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111695585281969313'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/tiger-mail-cleanup.html' title='Tiger Mail cleanup'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111686707526310201</id><published>2005-05-23T09:51:00.000-07:00</published><updated>2006-12-31T11:07:20.456-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spotlight'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Nice Advanced Spotlight Tutorial</title><content type='html'>ScribeNT has a nice tutorial up on how to use the advanced query features in Spotlight at &lt;a href='http://www.scribent.com/osx/xtip/comments/tiger_spotlight1/' title='http://www.scribent.com/osx/xtip/comments/tiger_spotlight1/'&gt;http://www.scribent.com/osx/xtip/comments/tiger_spotlight1/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;He covers stuff like using the Raw Query option to do boolean searches like "files with X but not Y" that you can't do easily from the simple query window.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111686707526310201?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.scribent.com/osx/xtip/comments/tiger_spotlight1/' title='Nice Advanced Spotlight Tutorial'/><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111686707526310201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111686707526310201&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111686707526310201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111686707526310201'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/nice-advanced-spotlight-tutorial.html' title='Nice Advanced Spotlight Tutorial'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111677361950969419</id><published>2005-05-22T07:53:00.000-07:00</published><updated>2006-12-31T11:27:29.821-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rights'/><category scheme='http://www.blogger.com/atom/ns#' term='eff'/><title type='text'>Broadcast Flag Redux</title><content type='html'>Hollywood is trying to get legislation passed to reduce the functionality of HDTV. They want to be able to mark shows as unrecordable so we can't timeshift them any more.&lt;br /&gt;&lt;br /&gt;The EFF has more information about this, and a form to automatically fax your congressman &lt;a href='https://secure.eff.org/site/Advocacy?page=UserAction&amp;cmd=display&amp;id=131'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111677361950969419?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111677361950969419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111677361950969419&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111677361950969419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111677361950969419'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/broadcast-flag-redux.html' title='Broadcast Flag Redux'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111653908715428183</id><published>2005-05-19T14:44:00.000-07:00</published><updated>2006-12-31T11:27:51.124-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Fun with fingerprints</title><content type='html'>Someone's written a howto on creating false fingerprints, suitable for fooling commercial grade fingerprint sensors &lt;a href='http://www.ccc.de/biometrie/fingerabdruck_kopieren.xml?language=en' title='http://www.ccc.de/biometrie/fingerabdruck_kopieren.xml?language=en'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111653908715428183?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111653908715428183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111653908715428183&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111653908715428183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111653908715428183'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/fun-with-fingerprints.html' title='Fun with fingerprints'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111653463439328427</id><published>2005-05-19T13:30:00.000-07:00</published><updated>2006-12-31T11:28:11.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Defeat a Kensington laptop lock</title><content type='html'>Joy. So much for leaving my laptop unattended at Borders when I want to use the restroom.&lt;br /&gt;&lt;br /&gt;See the pathetically easy details on unlocking a Kensington laptop lock &lt;a href='http://daemlich.net/7890' title='http://daemlich.net/7890'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111653463439328427?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111653463439328427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111653463439328427&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111653463439328427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111653463439328427'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/defeat-kensington-laptop-lock.html' title='Defeat a Kensington laptop lock'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111635541633368545</id><published>2005-05-17T11:29:00.000-07:00</published><updated>2006-12-31T11:28:44.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='automator'/><title type='text'>Automator and shell scripts</title><content type='html'>So I was writing my first Automator workflow, and found a bug in the "Do shell script" action. I was trying to write a workflow to iterate over the selection in the finder (and any files in subfolders of the selected files) and use SetFile to change the type and creator. This seemed easy enough, except that it turns out when Automator converts a list of files to strings to hand off to the shell script action, it doesn't properly quote them.&lt;br /&gt;&lt;br /&gt;Thanks to Mike Ashley from the Automator-users mailing list for the following code snippet that works around this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;on run {input, parameters}&lt;br /&gt; set output to {}&lt;br /&gt; repeat with i from 1 to length of input&lt;br /&gt;  set x to item i of input&lt;br /&gt;  set output to output &amp; {quoted form of POSIX path of x}&lt;br /&gt; end repeat&lt;br /&gt; return output&lt;br /&gt;end run&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Just put a "do applescript" stage ahead of the "do shell script" stage, and put the above code in. It'll take the list of file aliases and convert them to properly quoted paths for the shell script to act on.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111635541633368545?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111635541633368545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111635541633368545&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111635541633368545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111635541633368545'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/automator-and-shell-scripts.html' title='Automator and shell scripts'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111633442353201061</id><published>2005-05-17T05:53:00.000-07:00</published><updated>2006-12-31T11:29:38.471-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gpg'/><category scheme='http://www.blogger.com/atom/ns#' term='encryption'/><category scheme='http://www.blogger.com/atom/ns#' term='Mail.app'/><category scheme='http://www.blogger.com/atom/ns#' term='gpgmail'/><title type='text'>Fixing 10.4.1's issues with GPGMail</title><content type='html'>10.4.1 semi-breaks the GPGMail plugin. To fix it, &lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;run Mail, let it disable the plugin&lt;br /&gt;&lt;li&gt;quit Mail&lt;br /&gt;&lt;li&gt;rename the Bundles-disabled back to Bundles&lt;br /&gt;&lt;li&gt;Open Terminal&lt;br /&gt;&lt;li&gt;&lt;code&gt;defaults write com.apple.mail EnableBundles 1&lt;/code&gt;&lt;br /&gt;&lt;li&gt;restart Mail&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;The plugin should work again. Note that we're using 1 and not YES (like the plugin docs for 10.4.0 said).&lt;br /&gt;&lt;br /&gt;According to the mailing list, if you follow the previous directions from the dmg, and set BundleCompatibilityVersion to 1, that triggers the new Mail in 10.4.1 to complain and disable the bundle.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111633442353201061?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111633442353201061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111633442353201061&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111633442353201061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111633442353201061'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/fixing-1041s-issues-with-gpgmail.html' title='Fixing 10.4.1&apos;s issues with GPGMail'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111629507611334329</id><published>2005-05-16T18:57:00.000-07:00</published><updated>2005-05-16T19:08:13.010-07:00</updated><title type='text'>Cool web service of the day</title><content type='html'>I've been tinkering with &lt;a href='http://www.backpackit.com' title='Backpack'&gt;Backpack&lt;/a&gt;, lately. Backpack allows you to dynamically create web pages, which can contain notes, todo lists, text, images and/or files. You can embed HTML markup. Now, while this doesn't seem all that special (why not just use mediawiki?) to the hardcore geeks, what makes it cool is that it has a nice clean web interface to everything - and you can email items to your pages. This is something I'd have no problem recommending to my non-techie friends.&lt;br /&gt;&lt;br /&gt;I'm not really doing it justice in this summary - go sign up for a freebie account (they won't host images or files for freebie accounts, and you have a limited number of pages) and try it for yourself.&lt;br /&gt;&lt;br /&gt;This is another service from the same guys who did &lt;a href='http://www.basecamp.com' title='http://www.basecamp.com'&gt;BaseCamp&lt;/a&gt; and &lt;a href='http://www.tadalist.com' title='http://www.tadalist.com'&gt;TaDa Lists&lt;/a&gt;, so you know it's going to work well.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111629507611334329?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111629507611334329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111629507611334329&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111629507611334329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111629507611334329'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/cool-web-service-of-day.html' title='Cool web service of the day'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111618348243141289</id><published>2005-05-15T11:58:00.000-07:00</published><updated>2006-12-31T11:30:24.044-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><category scheme='http://www.blogger.com/atom/ns#' term='Mail.app'/><title type='text'>Foreign Spam</title><content type='html'>I've been seeing a lot more foreign language spam the last few months, and have created a mail rule to nuke it all before applying any of my other couple of hundred rules.&lt;br /&gt;&lt;br /&gt;Basically, the rule is set to delete any messages when the Content-Type header contains any of the following strings:&lt;br /&gt;&lt;br /&gt;charset="koi8-r"&lt;br /&gt;charset="gb2312"&lt;br /&gt;charset="GB2312"&lt;br /&gt;charset="ks_c_5601-1987"&lt;br /&gt;charset=iso-2022-jp&lt;br /&gt;charset="iso-2022-jp"&lt;br /&gt;&lt;br /&gt;I don't speak any of those languages, so all messages encoded in them are spam, as far as I'm concerned. If you know of more charsets to nuke, please leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111618348243141289?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111618348243141289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111618348243141289&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111618348243141289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111618348243141289'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/foreign-spam.html' title='Foreign Spam'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111617483243342758</id><published>2005-05-15T09:33:00.000-07:00</published><updated>2006-12-31T11:30:49.863-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spotlight'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='automator'/><title type='text'>Simple automator plugin to add spotlight tags</title><content type='html'>Adam Rice has a nice howto for creating an automator plugin to add spotlight tags to a file at &lt;a href='http://www.adamrice.org/eponymous/2005/05/add_spotlight_t.html' title='http://www.adamrice.org/eponymous/2005/05/add_spotlight_t.html'&gt;http://www.adamrice.org/eponymous/2005/05/add_spotlight_t.html&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111617483243342758?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111617483243342758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111617483243342758&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111617483243342758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111617483243342758'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/simple-automator-plugin-to-add.html' title='Simple automator plugin to add spotlight tags'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111583628313526951</id><published>2005-05-11T11:31:00.000-07:00</published><updated>2006-12-31T11:31:14.094-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rights'/><category scheme='http://www.blogger.com/atom/ns#' term='eff'/><title type='text'>DMCA update</title><content type='html'>Our congresscritters are looking at reforming the DMCA and formally legalizing circumventing copy protection as long as your use of the copy is legal. The EFF has set up a page that will allow you to fax &amp; mail your congresscritter to support this, at  &lt;a href='http://action.eff.org/site/Advocacy?id=115' title='http://action.eff.org/site/Advocacy?id=115'&gt;http://action.eff.org/site/Advocacy?id=115&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Go let your congresscritter know you support this.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111583628313526951?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111583628313526951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111583628313526951&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111583628313526951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111583628313526951'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/dmca-update.html' title='DMCA update'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10772591.post-111559491871486827</id><published>2005-05-08T15:58:00.000-07:00</published><updated>2006-12-31T11:31:38.169-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anacron'/><category scheme='http://www.blogger.com/atom/ns#' term='launchd'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><title type='text'>Launchd and anacron Howto</title><content type='html'>I used to run anacron on my laptop in 10.3 so that I could run the daily/weekly/monthly maintenance tasks at appropriate intervals, but without having to have the laptop awake at any specific time. Anacron allows you to specify that specific tasks run every N days, and every time it runs, it checks each job to see if it's been long enough since the last run, and runs it if appropriate. This worked out quite well - I had anacron tasks set up to run the daily script every day, the weekly every 7 days, and the monthly every 30 days. I had cron set to fire up anacron every 15 minutes, and all was well.&lt;br /&gt;&lt;br /&gt;Until 10.4, anyway. 10.4 introduced launchd, which replaces cron, and Apple no longer started cron as part of the boot process. I had a lot of maintenance tasks that I was running with anacron via cron though, and while it was easy enough to make an old-style StartupItem to launch cron, I wanted to do the right thing.&lt;br /&gt;&lt;br /&gt;Anyway, after experimenting with plutil and launchctl a bit, I figured out how to get launchd to run anacron every 15 minutes. It isn't all that complicated, if you're familiar with XML, but in the interest of sparing other people the hassle, I'm documenting it here.&lt;br /&gt;&lt;br /&gt;Presuming you've used fink to install anacron, you can cause launchd to run anacron every 15 minutes by creating a file called &lt;b&gt;/Library/LaunchDaemons/net.sourceforge.fink.anacron.plist&lt;/b&gt; with the following contents:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;#60;?xml version="1.0" encoding="UTF-8"?&amp;#62;&lt;br /&gt;&amp;#60;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;#62;&lt;br /&gt;&amp;#60;plist version="1.0"&amp;#62;&lt;br /&gt;&amp;#60;dict&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;Label&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;string&amp;#62;org.debian.anacron&amp;#60;/string&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;ProgramArguments&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;array&amp;#62;&lt;br /&gt;  &amp;#60;string&amp;#62;/sw/sbin/anacron&amp;#60;/string&amp;#62;&lt;br /&gt;  &amp;#60;string&amp;#62;-s&amp;#60;/string&amp;#62;&lt;br /&gt; &amp;#60;/array&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;RunAtLoad&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;true/&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;LowPriorityIO&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;true/&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;Nice&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;integer&amp;#62;1&amp;#60;/integer&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;StartInterval&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;integer&amp;#62;900&amp;#60;/integer&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;WatchPaths&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;array&amp;#62;&lt;br /&gt;  &amp;#60;string&amp;#62;/sw/etc/anacrontab&amp;#60;/string&amp;#62;&lt;br /&gt; &amp;#60;/array&amp;#62;&lt;br /&gt; &amp;#60;key&amp;#62;ServiceDescription&amp;#60;/key&amp;#62;&lt;br /&gt; &amp;#60;string&amp;#62;anacron service&amp;#60;/string&amp;#62;&lt;br /&gt;&amp;#60;/dict&amp;#62;&lt;br /&gt;&amp;#60;/plist&amp;#62;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Once you've created the file, all you need to do is use &lt;b&gt;launchctl&lt;/b&gt; to load it, by typing &lt;b&gt;sudo launchctl load /Library/LaunchDaemons/net.sourceforge.fink.anacron.plist&lt;/b&gt; in a Terminal window. Or reboot.&lt;br /&gt;&lt;br /&gt;To change the interval, change the &lt;b&gt;900&lt;/b&gt; above to whatever number of seconds you want launchd to wait between invocations.&lt;br /&gt;&lt;br /&gt;If you don't want it automatically running as soon as you boot up in addition to every 300 seconds, delete the &lt;b&gt;RunAtLoad&lt;/b&gt; key, and don't forget to delete the &amp;#60;true/&amp;#62; argument as well.&lt;br /&gt;&lt;br /&gt;If you didn't use fink, change the &lt;b&gt;/sw/sbin/anacron&lt;/b&gt; to the path you installed anacron on.&lt;br /&gt;&lt;br /&gt;If you get an error message when you try to load the file with &lt;b&gt;launchctl&lt;/b&gt;,  you can use &lt;b&gt;plutil&lt;/b&gt; to check the syntax by typing &lt;b&gt;plutil lint org.debian.anacron.plist&lt;/b&gt; - if it isn't exactly correct, launchd will complain and refuse load your job.&lt;br /&gt;&lt;br /&gt;And if you're using anacron to run the periodic tasks like I am, you can keep them from getting re-run at the regular time by doing the following commands:&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.periodic-daily.plist&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.periodic-monthly.plist&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Then do &lt;b&gt;sudo launchctl list&lt;/b&gt; to make sure they aren't showing up.&lt;br /&gt;&lt;br /&gt;The plist file is available &lt;a href='http://feral.bipedz.net/blog/net.sourceforge.fink.anacron.plist.gz' title='http://feral.bipedz.net/blog/net.sourceforge.fink.anacron.plist.gz'&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr /&gt;  &lt;a href="http://HaveGNUWillTravel.ApesSeekingKnowledge.net"&gt;Have GNU, Will Travel.&lt;/a&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10772591-111559491871486827?l=havegnuwilltravel.apesseekingknowledge.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://havegnuwilltravel.apesseekingknowledge.net/feeds/111559491871486827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10772591&amp;postID=111559491871486827&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111559491871486827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10772591/posts/default/111559491871486827'/><link rel='alternate' type='text/html' href='http://havegnuwilltravel.apesseekingknowledge.net/2005/05/launchd-and-anacron-howto.html' title='Launchd and anacron Howto'/><author><name>jpb</name><uri>http://www.blogger.com/profile/17904401299771049072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_zTzrHCenazY/TJbtJezNwuI/AAAAAAAAFHc/UtgDlb2hpUY/S220/IMG_5361_small.jpg'/></author><thr:total>1</thr:total></entry></feed>
