<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Hobbs Family</title><link href="/" rel="alternate"></link><link href="http://thehobbsfamily.net/archivefeeds/latest.rss" rel="self"></link><id>/</id><updated>2011-11-07T11:54:12-08:00</updated><entry><title>Building the AppStore version of Growl</title><link href="/archive2011/building-appstore-version-growl/" rel="alternate"></link><updated>2011-11-07T11:54:12-08:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-11-07:archive2011/building-appstore-version-growl/</id><summary type="html">&lt;p&gt;The latest versions of &lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt; are only officially available through the
&lt;a href="http://itunes.apple.com/us/app/growl/id467939042?mt=12&amp;amp;ign-mpt=uo=4"&gt;AppStore&lt;/a&gt;. The AppStore version is now a paid app. For those of you who
don't want to pay for it, the source code is still freely available and BSD
licensed.&lt;/p&gt;
&lt;p&gt;Here's how to build the latest Growl version from source (those who don't want
to compile the source themselves but still want the latest Growl for free, check
the links at the bottom of this post for my own build). You'll need Xcode and
mercurial.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clone source code repository: &lt;code&gt;hg clone https://code.google.com/p/growl/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Change to the growl directory: &lt;code&gt;cd growl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build: &lt;code&gt;LC_ALL="en_US.UTF-8" xcodebuild -project Growl.xcodeproj -configuration Release -target Growl.app CODE_SIGN_IDENTITY="Don't Code Sign"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;Growl.app&lt;/code&gt; to &lt;code&gt;/Applications&lt;/code&gt;: &lt;code&gt;cp -rp&amp;amp;nbsp;build/Release/Growl.app /Applications/.&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;My latest build is linked below (may be out of date. If it is, leave a comment
and I'll build the latest).&lt;/p&gt;</summary><category term="appstore"></category><category term="growl"></category><category term="mac"></category></entry><entry><title>New site for my Python code</title><link href="/archive2011/new-site-my-python-code/" rel="alternate"></link><updated>2011-10-31T13:50:19-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-10-31:archive2011/new-site-my-python-code/</id><summary type="html">&lt;p&gt;I created a new site for my Python code: &lt;a href="http://www.pyhacker.com"&gt;http://www.pyhacker.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All my Python code will live there for now on. I'm copying over the python
articles from this site to that one although I won't delete them from here. All
new Python related content will be posted at the new site.&lt;/p&gt;</summary><category term="python"></category></entry><entry><title>Mounting box.net account on Ubuntu</title><link href="/archive2011/mounting-boxnet-account-ubuntu/" rel="alternate"></link><updated>2011-10-25T12:17:08-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-10-25:archive2011/mounting-boxnet-account-ubuntu/</id><summary type="html">&lt;p&gt;For those who don't know, box.net is offering 50GB of free storage to iPad and
iPhone users for a limited time. I signed up for an account and wanted to access
this 50GB from my headless linux box. Box.net offers access through WebDAV so
the first thing I tried was mounting via davfs2. Mounting worked but I was
unable to access any of my directories. File access was fine but creating a
directory resulted in an html file instead. &lt;/p&gt;
&lt;p&gt;As a workaround, I stumbled across a FUSE filesystem called boxfs. Mounting my
box.net account via boxfs works great and everything is working as it should.
Here's how I got it working:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install dependencies: &lt;code&gt;$ sudo apt-get install&amp;amp;nbsp;libxml2-dev libfuse-dev
    libcurl4-gnutls-dev libzip-dev fuse-utils&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Compile and install libapp:  &lt;ul&gt;
&lt;li&gt;&lt;code&gt;$ git clone http://github.com/drotiro/libapp.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ cd libapp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ make&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo make install&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Compile and install boxfs: &lt;ul&gt;
&lt;li&gt;&lt;code&gt;$ svn co http://boxfs.googlecode.com/svn/trunk/ boxfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ cd boxfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ vi Makefile&lt;/code&gt; (add &lt;code&gt;-D_FILE_OFFSET_BITS=64&lt;/code&gt; to the end of the &lt;code&gt;FLAGS&lt;/code&gt;
    line)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ make&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo make install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ sudo ldconfig&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Create box config file (&lt;code&gt;$ vi ~/.boxfs&lt;/code&gt;) and add the following info: &lt;code&gt;username = email@domain.com mountpoint = /mnt/box.net verbose = yes secure =
yes password = password largefiles = yes&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Change permission of config file: &lt;code&gt;$ chmod 600 ~/.boxfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create the mountpoint you specified in the config file: &lt;code&gt;$ sudo mkdir
    /mnt/box.net&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mount the directory: &lt;code&gt;$ boxfs -f ~/.boxfs&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</summary><category term="50gb"></category><category term="box.net"></category><category term="boxfs"></category><category term="davfs2"></category><category term="free"></category><category term="fuse"></category><category term="linux"></category></entry><entry><title>Install OS X Client as a guest inside VMWare Fusion 4</title><link href="/archive2011/install-os-x-client-guest-inside-vmware-fusion-4/" rel="alternate"></link><updated>2011-09-14T16:06:29-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-09-14:archive2011/install-os-x-client-guest-inside-vmware-fusion-4/</id><summary type="html">&lt;p&gt;Today, VMWare released version 4 of Fusion. They add the ability to install Lion
Client and Server versions but Leopard and Snow Leopard are only supported in
the Server versions (due to EULA issues).&lt;/p&gt;
&lt;p&gt;As an educational exercise, I installed Snow Leopard Client version as a guest.
Here's how:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new VM. Select Snow Leopard Server as guest type&lt;/li&gt;
&lt;li&gt;Edit the .vmx file that's created and remove the line: firmware = "efi"&lt;/li&gt;
&lt;li&gt;Download the &lt;a href="../../../../media/thehobbsfamily/attach/2011/install-os-x-client-guest-inside-vmware-fusion-4/modify.sh"&gt;modify.sh&lt;/a&gt; script attached to this post and run in like:
    &lt;code&gt;sudo ./modify.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start the Snow Leopard VM and immediatly press F8&lt;/li&gt;
&lt;li&gt;You should get a boot menu with 3 options:&lt;ol&gt;
&lt;li&gt;c: Boot DVD&lt;/li&gt;
&lt;li&gt;h: Boot first Hard Disk&lt;/li&gt;
&lt;li&gt;e: Eject DVD&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;At this point, control click the CD icon and change the drive to use the
    physical DVD drive (make sure you've already inserted your retail Snow
Leopard disk first)&lt;/li&gt;
&lt;li&gt;Back in the VM, press "c" to load from disk&lt;/li&gt;
&lt;li&gt;Wait a few seconds and you should get the install screen&lt;/li&gt;
&lt;li&gt;After installing, eject the install disk and reboot the VM&lt;/li&gt;
&lt;li&gt;Install VMWare tools and the attached &lt;a href="../../../../media/thehobbsfamily/attach/2011/install-os-x-client-guest-inside-vmware-fusion-4/EnsoniqAudioPCI2.mpkg.zip"&gt;Ensoniq audio driver&lt;/a&gt; for sound&lt;/li&gt;
&lt;/ol&gt;</summary><category term="fusion"></category><category term="leopard"></category><category term="lion"></category><category term="snow"></category><category term="vmware"></category></entry><entry><title>Adding a Software License Agreement to a DMG file</title><link href="/archive2011/adding-software-license-agreement-dmg-file/" rel="alternate"></link><updated>2011-07-28T15:16:34-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-07-28:archive2011/adding-software-license-agreement-dmg-file/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2011/adding-software-license-agreement-dmg-file/"&gt;http://pyhacker.com/archive2011/adding-software-license-agreement-dmg-file/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As part of the software distribution process I go through at my job
(&lt;a href="http://www.qforma.com"&gt;Qforma, Inc&lt;/a&gt;), I package up our software for both Windows and Mac. For
Windows, I create an installer using &lt;a href="http://nsis.sourceforge.net/Main_Page"&gt;NSIS&lt;/a&gt; which requires a user to agree
to a Software License Agreement (SLA) before installing the software. For Mac,
rather than using an installer, I have a customized disk image (DMG) that
contains the app and a symlink to the &lt;code&gt;/Applications&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Since we require a user to agree to our SLA before using our software on Windows,
I wanted to require the same on Mac. I searched the internet for an easy way to
add an SLA to a DMG and couldn't find a solution that didn't involve using a
third party GUI program. Of course all my build processes are automated and run
headless so those GUI programs won't work for me. I also wanted to use utilities
built in to OS X (or available through &lt;a href="http://developer.apple.com/xcode/"&gt;Xcode&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Anyway, I figured out how to add an SLA to a DMG and was able to add it to my
automated build process. I figured I'd create a simple python script that'll do
it too and share it with everyone.&lt;/p&gt;
&lt;p&gt;To use the script, make sure Xcode is installed to the default location
(&lt;code&gt;/Developer&lt;/code&gt;). Download the file, make it executable, then simply run:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;./licenseDMG.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;where &lt;code&gt;dmgFile&lt;/code&gt; is the path to your DMG file and &lt;code&gt;licenseFile&lt;/code&gt; is the path to
your plain ascii text license file.&lt;/p&gt;
&lt;p&gt;Hopefully someone else will also find this useful.&lt;/p&gt;
&lt;p&gt;Oh, and I use the &lt;code&gt;with&lt;/code&gt; statement in the script so it's python 2.6 (or python
2.5 if you add &lt;code&gt;from __future__ import with_statement&lt;/code&gt; to the top line). If you
use the default system python, that means this script works on OS X 10.6+.&lt;/p&gt;</summary><category term="dmg"></category><category term="license"></category><category term="mac"></category><category term="python"></category><category term="sla"></category></entry><entry><title>Fuse4X</title><link href="/archive2011/fuse4x/" rel="alternate"></link><updated>2011-07-21T14:41:13-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-07-21:archive2011/fuse4x/</id><summary type="html">&lt;p&gt;Last year, I started running the 64-bit Snow Leopard kernel so I had the need
for a 64-bit compatible build of MacFUSE (since using sshfs is part of my daily
routine). MacFUSE has been abandoned since 2008 so there was no 64-bit build
available. I found some instructions to hack the MacFUSE source to allow it to
build for a 64-bit kernel but there were some major problems with that, the main
one being concurrency issues. Because of the instability of the hacked MacFUSE
library, I stopped using it and had to revert to using the 32-bit kernel
instead. &lt;/p&gt;
&lt;p&gt;Then, in September of last year, Tuxera released some patches for MacFUSE that
enabled a safe 64-bit build. They implemented some locks that fixed the
concurrency issue of the other hack. &lt;/p&gt;
&lt;p&gt;Early this year, MacFUSE was forked into a project called Fuse4X. Fuse4X
implemented Tuxeras patches and brought the project up to date with the latest
fuse sources. Fuse4X is actively being developed and works great on 32-bit and
64-bit kernels, Mac OS X 10.5 and up (Intel only). I'm running it on Lion and
it's working great! Here's the link to download the latest build: &lt;a href="https://github.com/fuse4x/fuse4x/archives/master"&gt;Fuse4X&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you still want to use MacFUSE on 64-bit Snow Leopard or Lion, use this
build: &lt;a href="http://thehobbsfamily.net/media/thehobbsfamily/attach/2011/macfuse-217-beta-64-bit-snow-leopard-and-macfusion/MacFUSE.pkg.zip"&gt;MacFUSE.pkg.zip&lt;/a&gt;&lt;/p&gt;</summary><category term="64bit"></category><category term="fuse4x"></category><category term="lion"></category><category term="mac"></category><category term="macfuse"></category></entry><entry><title>comcap.py - Comcast internet usage script</title><link href="/archive2011/comcappy-comcast-internet-usage-script/" rel="alternate"></link><updated>2011-04-21T08:37:34-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-04-21:archive2011/comcappy-comcast-internet-usage-script/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2011/comcappy-comcast-internet-usage-script/"&gt;http://pyhacker.com/archive2011/comcappy-comcast-internet-usage-script/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yesterday I wrote a little python script that grabs your current Comcast
internet usage and prints it to stdout. It depends on the
excellent &lt;a href="http://wwwsearch.sourceforge.net/mechanize/" title="Mechanize"&gt;mechanize&lt;/a&gt; module so if you don't have it, install it with
&lt;code&gt;easy_install.py mechanize&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To run the script, simply execute &lt;code&gt;comcap.py&lt;/code&gt;. You will be prompted for your
Comcast username and password. Alternatively, you can create an entry in your
&lt;code&gt;~/.netrc&lt;/code&gt; file with your Comcast credentials. The entry should look like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;machine login.comcast.net
login username@comcast.net
password password
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;where &lt;code&gt;username&lt;/code&gt; is your Comcast username and &lt;code&gt;password&lt;/code&gt; is your Comcast
password.&lt;/p&gt;
&lt;p&gt;I'll be running this in a cron job every few days to monitor my usage and send a
warning email to myself if the usage gets near the limit. Hopefully someone else
will also find this useful!&lt;/p&gt;</summary><category term="bandwidth"></category><category term="comcast"></category><category term="internet"></category><category term="python"></category><category term="usage"></category></entry><entry><title>Hello</title><link href="/archive2011/hello/" rel="alternate"></link><updated>2011-02-06T15:41:42-08:00</updated><author><name>jmhobbs</name></author><id>tag:,2011-02-06:archive2011/hello/</id><summary type="html">&lt;p&gt;It's been a while since I've posted anything on here. A lot has happened since
my last post. The biggest news, of course, is the birth of our second son, Milo,
on January 16th! &lt;/p&gt;
&lt;p&gt;Some other things that have been going on are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grandma's birthday celebration in SLC in December&lt;/li&gt;
&lt;li&gt;LOTS of work&lt;/li&gt;
&lt;li&gt;New church calling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyway, be sure to check out our blog for pictures of Milo! If you've forgotten
the address, it's &lt;a href="http://blog.thehobbsfamily.net"&gt;http://blog.thehobbsfamily.net&lt;/a&gt;.
 &lt;/p&gt;
&lt;p&gt;On an unrelated note but something I wanted to mention is we got a Guru Plug to
play around with at work. I set it up with asterisk and FreePBX and now I'm in
the process of trying to compile the ztdummy module for the default kernel it
ships with. I've been running into some problems, the main one being the
unavailablity of the kernel headers for the GuruPlug. If anyone can point me to
those headers (or a ztdummy module compiled for the default GuruPlug kernel),
let me know!&lt;/p&gt;</summary><category term="family"></category><category term="update"></category></entry><entry><title>AT&amp;T 3G in Santa Fe, NM!</title><link href="/archive2010/t-3g-santa-fe-nm/" rel="alternate"></link><updated>2010-11-15T10:32:56-08:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-11-15:archive2010/t-3g-santa-fe-nm/</id><summary type="html">&lt;p&gt;As of today, Santa Fe, NM now has AT&amp;amp;T 3G! It's about time! Now I might actually
be able to use the data connection on my iPhone...&lt;/p&gt;</summary><category term="att"></category><category term="iphone"></category></entry><entry><title>Backing up a directory over SSH</title><link href="/archive2010/backing-directory-over-ssh/" rel="alternate"></link><updated>2010-09-10T13:27:08-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-09-10:archive2010/backing-directory-over-ssh/</id><summary type="html">&lt;p&gt;Today I got an email from the IT department at &lt;a href="http://www.unm.edu"&gt;UNM&lt;/a&gt; informing me that they'd
be deleting my account in two weeks (I graduated December 2008 so I guess this
was bound to happen eventually). Anyway, I still had a bunch of stuff on UNM's
linux boxes that I wanted to keep so this is how I backed up my home directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;ssh jmhobbs@linux.unm.edu &amp;quot;tar cfz - .&amp;quot; | cat &amp;gt; linux.unm.edu.tar.gz
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;What this is doing is tarring up everything in my home directory (with gzip
compression) and sending it to &lt;code&gt;stdout&lt;/code&gt;. I'm grabbing that info from &lt;code&gt;stdin&lt;/code&gt; and
writing it to a file.&lt;/p&gt;
&lt;p&gt;Maybe someone else will find this useful.&lt;/p&gt;
&lt;p&gt;PS. Here's how to do it in reverse:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;tar cfz - . | ssh jmhobbs@myserver &amp;quot;cat &amp;gt; /home/jmhobbs/backup.tar.gz&amp;quot;
&lt;/pre&gt;&lt;/div&gt;</summary><category term="backup"></category><category term="linux"></category><category term="ssh"></category></entry><entry><title>#FreeStuffFriday on twitter</title><link href="/archive2010/freestufffriday-twitter/" rel="alternate"></link><updated>2010-09-02T09:35:30-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-09-02:archive2010/freestufffriday-twitter/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2010/freestufffriday-twitter/"&gt;http://pyhacker.com/archive2010/freestufffriday-twitter/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So [@Sega][1] has been giving stuff away on twitter every friday in a promotion
they call [#FreeStuffFriday][2]. All you need to do to win is direct message
them with the key phrase at the right time. I wrote a script to help me win and
it's actually worked a handful of times. The hardest part is trying to estimate
the amount of time to wait to be the right respondent. Anyway, twitter just
flipped the OAuth switch so I updated my script to work with that. I'm attaching
it for whomever would like to use it. You need &lt;code&gt;simplejson&lt;/code&gt; and &lt;code&gt;oauth&lt;/code&gt; installed
(&lt;code&gt;easy_install&lt;/code&gt; works for both of those) and the &lt;code&gt;python-twitter&lt;/code&gt; and &lt;code&gt;oauthtwitter&lt;/code&gt;
modules which I'm also attaching to this post.&lt;/p&gt;
&lt;p&gt;[1]: http://twitter.com/sega [2]: http://twitter.com/#search?q=#FreeStuffFriday&lt;/p&gt;
&lt;p&gt;To use this script, first you'll need to follow [@Sega][1] on twitter. Next, you
need to register a twitter app by going
here: &lt;a href="http://dev.twitter.com/apps/new"&gt;http://dev.twitter.com/apps/new&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After that, fill in the consumer_key and consumer_secret variables in the
script. &lt;/p&gt;
&lt;p&gt;Run the script! Good luck!&lt;/p&gt;</summary><category term="python"></category><category term="twitter"></category></entry><entry><title>YouTube</title><link href="/archive2010/youtube/" rel="alternate"></link><updated>2010-08-13T19:58:29-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-08-13:archive2010/youtube/</id><summary type="html">&lt;p&gt;It's official: Mario is addicted to &lt;a href="http://www.youtube.com"&gt;YouTube&lt;/a&gt;. He loves watching it on the
iPad and not on a regular laptop or on TV. What a funny kid.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Mario watching YouTube on the iPad" src="../../../../static/thehobbsfamily/uploads/youtube.jpg" /&gt;&lt;/p&gt;</summary><category term="mario"></category><category term="youtube"></category></entry><entry><title>Family BBQ</title><link href="/archive2010/family-bbq/" rel="alternate"></link><updated>2010-07-25T13:18:02-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-07-25:archive2010/family-bbq/</id><summary type="html">&lt;p&gt;So yesterday we had a fun family BBQ. Jenny cut up all the fruit and vegetables
and made the sweet potato fries and I did the grilling. We cooked a bunch of
hamburgers, bratwurst, polska kielbasa, bacon and green chiles over some nice
charcoal briquetes. Half way through cooking the meat, it started pouring. You
can't really tell from this photo, but it was really coming down hard. I looked
like I had jumped into a swimming pool. That's the New Mexico monsoon for you!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Grillin'" src="../../../../static/thehobbsfamily/uploads/grillin.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Here's what my second burger looked like. Kind of hard to tell from this photo,
but it's go everything on it: meat, cheese, bacon, green chile, tomato, onion,
barbecue sauce, and avocado. I had two of these, a bratwurst with bacon and
green chile, and some kielbasa with bacon and green chile. It was awesome.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Burger" src="../../../../static/thehobbsfamily/uploads/burger.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;We also had salad provided by my sister in law Shauna and jello salad made by my
sister Jessica. My Mom brought cookies for dessert. &lt;/p&gt;
&lt;p&gt;Thanks for the fun night guys!&lt;/p&gt;</summary><category term="family"></category><category term="food"></category></entry><entry><title>Flexget configuration</title><link href="/archive2010/flexget-configuration/" rel="alternate"></link><updated>2010-07-20T09:05:00-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-07-20:archive2010/flexget-configuration/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2010/flexget-configuration/"&gt;http://pyhacker.com/archive2010/flexget-configuration/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here's how I've configured my &lt;a href="http://flexget.com/" title="Flexget"&gt;Flexget&lt;/a&gt; install:&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;~/.flexget/config.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;presets&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;active&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;siteowner&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;
      &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;com&lt;/span&gt;
    &lt;span class="n"&gt;transmission&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;localhost&lt;/span&gt;
      &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9091&lt;/span&gt;
      &lt;span class="n"&gt;removewhendone&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
  &lt;span class="n"&gt;movies&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;download&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/path/to/Movies/&lt;/span&gt;
  &lt;span class="n"&gt;tv&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;series&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;hdtv&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
          &lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;hdtv&lt;/span&gt;
          &lt;span class="n"&gt;timeframe&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;hours&lt;/span&gt;
          &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/path/to/TV/%(series_name)s/&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;%(&lt;/span&gt;&lt;span class="n"&gt;series_season&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;
        &lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
          &lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
          &lt;span class="n"&gt;timeframe&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;hours&lt;/span&gt;
          &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/path/to/TV/%(series_name)s/&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;%(&lt;/span&gt;&lt;span class="n"&gt;series_season&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;
        &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
          &lt;span class="n"&gt;quality&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
          &lt;span class="n"&gt;timeframe&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;hours&lt;/span&gt;
          &lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/path/to/TV/%(series_name)s/&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;%(&lt;/span&gt;&lt;span class="n"&gt;series_season&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="mi"&gt;02&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;
    &lt;span class="n"&gt;hdtv&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Series&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Series&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Another&lt;/span&gt; &lt;span class="n"&gt;Series&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;
&lt;span class="n"&gt;feeds&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;ezrss&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;rss&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ezrss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;it&lt;/span&gt;&lt;span class="sr"&gt;/feed/&lt;/span&gt;
    &lt;span class="n"&gt;preset&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tv&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Make sure to change the email settings, feed settings, and show list!&lt;/p&gt;
&lt;p&gt;And I have this line in my crontab:
&lt;code&gt;@hourly /usr/local/bin/flexget -v --cron &amp;gt; /home/&amp;lt;username&amp;gt;/log/flexget.log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Make sure to replace &lt;code&gt;&amp;lt;username&amp;gt;&lt;/code&gt; with your own user name!&lt;/p&gt;</summary><category term="flexget"></category><category term="python"></category></entry><entry><title>I can haz bumper?</title><link href="/archive2010/i-can-haz-bumper/" rel="alternate"></link><updated>2010-07-18T17:00:12-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-07-18:archive2010/i-can-haz-bumper/</id><summary type="html">&lt;p&gt;So even though I can replicate the iPhone 4 signal attenuation problem on my
phone by bridging the antennas, I have yet to be affected by it. I received my
phone a couple days prior to the official launch and have had nothing but
positive experience with it. Voice calls are clearer than my previous two
iPhones and internet service seems faster too. My only complaint is my fear that
I'll drop the phone and shatter one or both of the glass panels; the oleophobic
coating on the glass makes it extra slippery. &lt;/p&gt;
&lt;p&gt;Which brings me to the point of this brief post: Apple announced at it's press
conference on Friday that it would be giving away free iPhone bumpers as a
gesture of good will. Sure they spent most of the conference pointing fingers
and  doing their best to not admit fault, but they finally did cave in
and promise us a free case. I, for one, am looking forward to my free case, not
as an ad-hoc solution to the iPhone signal attenuation problem, but rather as a
way to keep from physically dropping my  shiny, slippery, new toy. Thanks Apple!&lt;/p&gt;</summary><category term="apple"></category><category term="iphone"></category></entry><entry><title>Cartoons</title><link href="/archive2010/cartoons/" rel="alternate"></link><updated>2010-07-11T14:37:09-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-07-11:archive2010/cartoons/</id><summary type="html">&lt;p&gt;Here are the cartoons I've been watching:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cartoonnetwork.com/tv_shows/adventuretime/index.html" title="Adventure Time!"&gt;Adventure Time!&lt;/a&gt; This show's great! Probably the best show airing right now.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.comedycentral.com/shows/futurama/index.jhtml" title="Futurama"&gt;Futurama&lt;/a&gt; Season 6!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://spongebob.nick.com/" title="SpongeBob Squarepants "&gt;SpongeBob Squarepants&lt;/a&gt; What can I say? SpongeBob is the coolest undersea invertebrate ever!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tv.disney.go.com/disneychannel/phineasandferb/" title="Phineas and Ferb"&gt;Phineas and Ferb&lt;/a&gt; This show is hilarious. Makes me want to get a pet platypus. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cartoonnetwork.com/tv_shows/flapjack/index.html" title="Flapjack"&gt;Flapjack&lt;/a&gt; Another great show from Van-Orman. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jenny thinks it's weird that I watch cartoons even when Mario's not around. I disagree. &lt;/p&gt;</summary><category term="cartoons"></category></entry><entry><title>Flexget</title><link href="/archive2010/flexget/" rel="alternate"></link><updated>2010-07-09T21:48:06-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-07-09:archive2010/flexget/</id><summary type="html">&lt;p&gt;[Flexget][1] rocks! I setup flexget on our little [Sheeva Plug][2] media server
a few months back and have to say I'm extremely pleased. All the TV shows we
want to see are automagically downloaded to a NAS drive so we just fire up
[Boxee][3] on the [Apple TV][4] and catch up on the shows we missed. If you
haven't checked it out before, do it!&lt;/p&gt;
&lt;p&gt;[1]: http://flexget.com/ [2]:
http://www.globalscaletechnologies.com/p-22-sheevaplug-dev-kit-us.aspx [3]:
http://www.boxee.tv/ [4]: http://code.google.com/p/atvusb-creator/&lt;/p&gt;</summary><category term="appletv"></category><category term="boxee"></category><category term="flexget"></category><category term="linux"></category><category term="python"></category><category term="sheeva"></category><category term="transmission"></category></entry><entry><title>New backend</title><link href="/archive2010/new-backend/" rel="alternate"></link><updated>2010-07-08T12:54:39-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-07-08:archive2010/new-backend/</id><summary type="html">&lt;p&gt;So I've wanted to move this website to &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; for a while now (it was
previously using &lt;a href="http://drupal.org/"&gt;Drupal&lt;/a&gt;) and I finally got around to doing it. I've
migrated all the posts from the old site over but unfortunately I couldn't
migrate the comments. Oh well. The new comment system is powered by &lt;a href="http://www.disqus.com"&gt;Disqus&lt;/a&gt;.
The Blogger integration is done using an awesome Django app called
&lt;a href="http://github.com/jaymzcd/django-blogger"&gt;django-blogger&lt;/a&gt;. Since this site is new, there's probably gonna be a lot of
bugs and some downtime. I'm keeping the old site up for the time being, and it's
now located at . All new content will be posted here.&lt;/p&gt;</summary><category term="django"></category><category term="drupal"></category><category term="python"></category></entry><entry><title>UPDATED: MacFUSE 2.1.7 BETA for 64-bit Snow Leopard and Macfusion 2.0.4 for Snow Leopard</title><link href="/archive2010/macfuse-217-beta-64-bit-snow-leopard-and-macfusion/" rel="alternate"></link><updated>2010-04-22T18:57:52-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-04-22:archive2010/macfuse-217-beta-64-bit-snow-leopard-and-macfusion/</id><summary type="html">&lt;p&gt;UPDATE: The MacFUSE build below was a quick hack to get it working but has some
problems with locks. There's another build floating around with a working lock
implementation, version 2.1.9 (download link &lt;a href="../../../../media/thehobbsfamily/attach/2011/macfuse-217-beta-64-bit-snow-leopard-and-macfusion/MacFUSE.pkg.zip"&gt;here&lt;/a&gt;). However, another fork
of MacFUSE popped up called Fuse4X which is actively maintained and has working
64-bit builds. I'm using it on Lion right now and it works great! Here's the
link to the downloads: &lt;a href="https://github.com/fuse4x/fuse4x/archives/master"&gt;Fuse4X&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you were using the hacked build below, use this instead!&lt;/p&gt;
&lt;p&gt;[MacFUSE][3] is currently compiled for a 32 bit kernel. If you're running the 64
bit kernel like me and need to use MacFUSE to mount sshfs, you'll need to
compile the app from source. Or, you can download it here, along with a Snow
Leopard build of Macfusion. [Macfusion][4] is a GUI frontend to MacFUSE which
lets you easily setup SFTP and FTP mounts.&lt;/p&gt;
&lt;p&gt;[3]: http://code.google.com/p/macfuse/ [4]: http://www.macfusionapp.org/&lt;/p&gt;</summary><category term="64-bit"></category><category term="fuse4x"></category><category term="leopard"></category><category term="lion"></category><category term="mac"></category><category term="macfuse"></category><category term="macfusion"></category><category term="snow"></category><category term="sshfs"></category></entry><entry><title>Back online!</title><link href="/archive2010/back-online/" rel="alternate"></link><updated>2010-02-13T19:09:03-08:00</updated><author><name>jmhobbs</name></author><id>tag:,2010-02-13:archive2010/back-online/</id><summary type="html">&lt;p&gt;We're back! After about a month of downtime, we're back online! The site is now
hosted off the amazing &lt;a href="http://www.globalscaletechnologies.com/p-22-sheevaplug-dev-kit-us.aspx"&gt;Sheeva Plug Dev Kit&lt;/a&gt;. &lt;img alt="Image information" src="../../../../static/thehobbsfamily/uploads/sheevaplug_small.jpg" /&gt;&lt;/p&gt;</summary><category term="linux"></category></entry><entry><title>Published comments</title><link href="/archive2009/published-comments/" rel="alternate"></link><updated>2009-10-10T19:17:03-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-10-10:archive2009/published-comments/</id><summary type="html">&lt;p&gt;So I published a couple things today and noticed that I had accumulated pages
and pages of (mostly spam) comments that had not been published. I went ahead
and browsed through them, deleting most of them, but I came across a handful of
real, legitimate comments and went ahead and published them. (For the record,
they were from January to March of 2009). So I apologize for the tardiness and
hope this won't happen again. I have been so busy with my new job and trying to
sell our house that I had been neglecting this website. So for now, I turned on
CAPTCHAs and turned off comment moderation. Hopefully the CAPTCHAs will deter
the spam bots and the lack of comment moderation will ensure that any legitimate
comments will be published immediately, and not 7-9 months late!&lt;/p&gt;</summary><category term="comments"></category><category term="oops"></category></entry><entry><title>MacVim 64-bit nightly builds for Mac OS X 10.6 Snow Leopard</title><link href="/archive2009/macvim-64-bit-nightly-builds-mac-os-x-106-snow-leo/" rel="alternate"></link><updated>2009-10-09T19:10:07-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-10-09:archive2009/macvim-64-bit-nightly-builds-mac-os-x-106-snow-leo/</id><summary type="html">&lt;p&gt;Since I couldn't find any prebuilt 64 bit MacVim binaries for Snow Leopard, I
decided to provide a nightly build here. You can download it by clicking this
link: &lt;a href="../../../../~jmhobbs/mac/10.6/MacVim-nightly.tar.bz2"&gt;MacVim nightly build&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For more information, check out the MacVim Google code site: &lt;a href="http://code.google.com/p/macvim/"&gt;MacVim&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;UPDATE: The official nightly binaries are now being built as universal 32/64 bit
binaries. You can get the official nightly binary &lt;a href="http://code.google.com/p/macvim/wiki/Snapshot"&gt;here&lt;/a&gt;. However, the
official nightly has no Perl support and uses Python 2.5. My nightly has Perl
enabled and is build against the default Snow Leopard install of Python 2.6. The
full list of enabled features in my nightly build is as follows: arabic autocmd
browse builtin_terms byte_offset cindent clientserver clipboard cmdline_compl
cmdline_hist cmdline_info comments cryptv cscope cursorshape dialog_con_gui
diff digraphs dnd emacs_tags eval ex_extra extra_search farsi file_in_path
find_in_path float folding fork() fullscreen iconv insert_expand jumplist
keymap langmap libcall linebreak lispindent listcmds localmap menu mksession
modify_fname mouse mouseshape mouse_dec mouse_netterm mouse_xterm
multi_byte multi_lang netbeans_intg odbeditor path_extra perl postscript
printer profile python quickfix reltime rightleft ruby scrollbind signs
smartindent statusline syntax tag_binary tag_old_static tcl terminfo
termresponse textobjects title toolbar transparency user_commands vertsplit
virtualedit visual visualextra viminfo vreplace wildignore wildmenu windows
writebackup xim&lt;/p&gt;</summary><category term="10.6"></category><category term="64-bit"></category><category term="leopard"></category><category term="mac"></category><category term="snow"></category><category term="software"></category><category term="vim"></category></entry><entry><title>House for sale</title><link href="/archive2009/house-sale/" rel="alternate"></link><updated>2009-08-26T18:53:34-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-08-26:archive2009/house-sale/</id><summary type="html">&lt;p&gt;For those who don't know, our house is for sale! The house is listed for
$112,000 and is a great deal! For pictures and more information, check out this
page: &lt;a href="http://house.thehobbsfamily.net"&gt;http://house.thehobbsfamily.net&lt;/a&gt; UPDATE: We sold the house in December.&lt;/p&gt;</summary><category term="house"></category></entry><entry><title>Call forwarding codes for AT&amp;T</title><link href="/archive2009/call-forwarding-codes-t/" rel="alternate"></link><updated>2009-08-19T19:18:23-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-08-19:archive2009/call-forwarding-codes-t/</id><summary type="html">&lt;table border="1" align="center"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span&gt;When to forward&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;Enable&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;Disable&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;Check&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span&gt;Unconditional&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*21*[10-digit-number]#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;#21#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*#21#&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span&gt;Busy&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*67*[10-digit-number]#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;#67#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*#67#&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span&gt;No reply&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*61*[10-digit-number]#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;#61#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*#61#&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span&gt;Unreachable&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*62*[10-digit-number]#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;#62#&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span&gt;*#62#&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;</summary><category term="att"></category><category term="call"></category><category term="forwarding"></category><category term="iphone"></category></entry><entry><title>Autism Awareness</title><link href="/archive2009/autism-awareness/" rel="alternate"></link><updated>2009-04-04T19:20:15-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-04-04:archive2009/autism-awareness/</id><summary type="html">&lt;p&gt;Watch for the Red Flags of Autism (The following red flags may indicate a child
is at risk for atypical development, and is in need of an immediate evaluation.)
In clinical terms, there are a few “absolute indicators,” often referred to as
“red flags,” that indicate that a child should be evaluated. For a parent, these
are the “red flags” that your child should be screened to ensure that he/she is
on the right developmental path. If your baby shows any of these signs, please
ask your pediatrician or family practitioner for an immediate evaluation: No big
smiles or other warm, joyful expressions by six months or thereafter No
back-and-forth sharing of sounds, smiles, or other facial expressions by nine
months or thereafter No babbling by 12 months No back-and-forth gestures, such
as pointing, showing, reaching, or waving by 12 months No words by 16 months No
two-word meaningful phrases (without imitating or repeating) by 24 months Any
loss of speech or babbling or social skills at any age &lt;/p&gt;
&lt;p&gt;* This information has been provided by First Signs, Inc. ©2001-2005. Reprinted
with permission. For more information about recognizing the early signs of
developmental and behavioral disorders, please visit  or the Centers for Disease
Control at &lt;a href="http://www.cdc.gov/actearly"&gt;www.cdc.gov/actearly&lt;/a&gt;.&lt;/p&gt;</summary><category term="autism"></category></entry><entry><title>Private blog</title><link href="/archive2009/private-blog/" rel="alternate"></link><updated>2009-03-10T19:22:08-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-03-10:archive2009/private-blog/</id><summary type="html">&lt;p&gt;This is just a post to tell everyone that our blog is now set to private. So if
you click on the blog tab at the top, the latest post you see will be the last
public post that we made. If anyone wants access to read our blog, please
contact us with your email address. UPDATE: It's public again.&lt;/p&gt;</summary><category term="blog"></category></entry><entry><title>Connect to an NFS share on Ubuntu from OS X Leopard</title><link href="/archive2009/connect-nfs-share-ubuntu-os-x-leopard/" rel="alternate"></link><updated>2009-01-05T19:23:03-08:00</updated><author><name>jmhobbs</name></author><id>tag:,2009-01-05:archive2009/connect-nfs-share-ubuntu-os-x-leopard/</id><summary type="html">&lt;p&gt;This is another note to myself in case I forget. I still have a server at home
running Ubuntu and I have a few shared directories through NFS. NFS support is
built into OS X but there's some things you need to do on the server side to be
able to connect correctly.&lt;/p&gt;
&lt;p&gt;First of all, I'm assuming your NFS shares are all correctly setup and working.
Maybe another day I'll write up a short tutorial on how to get that up and
running. Anyway, to be able to connect correctly from OS X, some UID and GID
maps need to be established. (Since your user and group IDs are most likely
different on your linux and OS X boxes). Without setting this up correctly,
you'll most likely get an error similar to incorrect username and password. To
fix this, you simply need to add an entry to &lt;code&gt;/etc/exports&lt;/code&gt; and add a static map
somewhere (I put the maps in &lt;code&gt;/etc/nfs&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Here's a sample entry from my &lt;code&gt;/etc/exports&lt;/code&gt; file:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/mnt/fileshare wario(rw,async,insecure,map_static=/etc/nfs/wario.map)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/mnt/fileshare koopa(ro,async,insecure,map_static=/etc/nfs/koopa.map)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;These two lines let both wario and koopa (both of these are the hostnames for
two different Leopard boxes) access the directory &lt;code&gt;/mnt/fileshare&lt;/code&gt; over NFS, but
only wario has read-write access (koopa has read-only access).&lt;/p&gt;
&lt;p&gt;The contents of &lt;code&gt;wario.map&lt;/code&gt; and &lt;code&gt;koopa.map&lt;/code&gt; contain the UID and GID of my accounts
on the OS X boxes mapped to the UID and GID of my account on the linux box. To
find out your uid and gid on both OS X and linux, open up a terminal and type
&lt;code&gt;id&lt;/code&gt;. Here's what wario.map looks like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# remote local uid 501 1000 gid 20 1000&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After making these changes, restart the nfs server and you should be able to
connect to the linux NFS shares from Leopard without any problems!&lt;/p&gt;
&lt;p&gt;(Command+K, nfs://server/path/to/share).&lt;/p&gt;</summary><category term="linux"></category><category term="mac"></category><category term="ubuntu"></category></entry><entry><title>Install AnnWrapper (scikits.ann) on Windows XP</title><link href="/archive2008/install-annwrapper-scikitsann-windows-xp/" rel="alternate"></link><updated>2008-07-31T19:24:31-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-31:archive2008/install-annwrapper-scikitsann-windows-xp/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2008/install-annwrapper-scikitsann-windows-xp/"&gt;http://pyhacker.com/archive2008/install-annwrapper-scikitsann-windows-xp/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cs.umd.edu/~mount/ANN/"&gt;ANN (Approximate Nearest Neighbor)&lt;/a&gt; is a C library for both exact and
approximate nearest neighbor searching in arbitrarily high dimensions. I've been
trying to use &lt;a href="http://www.swig.org/"&gt;SWIG&lt;/a&gt; to wrap this library so I can use it in Python. Today I
found out that someone had already done it! The project is called
&lt;a href="http://scipy.org/scipy/scikits/wiki/AnnWrapper"&gt;scikits.ann&lt;/a&gt;. They even have an already-to-use egg file for OS X 10.5. Since
my primary operating system is Leopard, I installed the egg file and tried it
out. Everything worked great! I needed to use this library under Windows XP
also, however, due to some things at work. Here's how I got everything working.&lt;/p&gt;
&lt;p&gt;First of all, make sure you have &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; installed (with the MinGW32 tools).
We'll be using Cygwin to compile ANN. Also make sure you have &lt;a href="http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi"&gt;Python 2.5 for
Windows XP&lt;/a&gt; installed and &lt;a href="http://downloads.sourceforge.net/numpy/numpy-1.1.0-win32-superpack-python2.5.exe?modtime=1211963862&amp;amp;big_mirror=0"&gt;Numpy&lt;/a&gt;. You'll also need &lt;a href="http://pypi.python.org/packages/2.5/C/ConfigObj/configobj-4.5.3-py2.5.egg#md5=5e9ff60f5b4909572dcf37d16e22c473"&gt;configobj&lt;/a&gt;, and
obviously &lt;a href="http://pypi.python.org/packages/2.5/s/setuptools/setuptools-0.6c8.win32-py2.5.exe#md5=963088fdb1c7332b1cbd4885876e077a"&gt;setuptools &lt;/a&gt; to be able to install the configobj egg. After all
those files have been successfully installed, continue as follows (all these
commands are within a Cygwin shell).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compile and install ANN&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Download from &lt;a href="http://www.cs.umd.edu/~mount/ANN/Files/1.1.1/ann_1.1.1.tar.gz"&gt;http://www.cs.umd.edu/~mount/ANN/Files/1.1.1/ann_1.1.1.tar.gz&lt;/a&gt;
Download the Windows XP Makefile from &lt;a href="http://scipy.org/scipy/scikits/attachment/wiki/WindowsBuildInstructionsForAnn/annwinstuff.zip"&gt;http://scipy.org/scipy/scikits/attachment/wiki/WindowsBuildInstructionsForAnn/annwinstuff.zip&lt;/a&gt;
Untar ann:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ tar xfvz ann_1.1.1.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy the &lt;code&gt;annwinstuff.zip&lt;/code&gt; file into the &lt;code&gt;ann_1.1.1&lt;/code&gt; directory and unzip:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ unzip annwinstuff.zip&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Edit the &lt;code&gt;ANN.h&lt;/code&gt; header file:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ vi include/ANN/ANN.h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Replace lines 75 and 77 with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#define DLL_API&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Build ANN with mingw:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ mingw32-make -f Makefile.win&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy ANN includes to Cygwin includes:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ cp -r include/ANN /usr/local/include/.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy ANN library to Cygwin lib:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ cp lib/ANN.lib /usr/local/lib/.&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Compile and install AnnWrapper&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Download from &lt;a href="http://pypi.python.org/packages/source/s/scikits.ann/scikits.ann-0.2.dev-r803.tar.gz#md5=a0380cdc31fd705c15eb50f483bbe5fb"&gt;http://pypi.python.org/packages/source/s/scikits.ann/scikits.ann-0.2.dev-r803.tar.gz#md5=a0380cdc31fd705c15eb50f483bbe5fb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Edit &lt;code&gt;site.cfg&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ vi site.cfg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Change &lt;code&gt;ANN_ROOT&lt;/code&gt; to:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ANN_ROOT = c:/cygwin/usr/local&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Build and install AnnWrapper:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ /cygdrive/c/Python25/python.exe setup.py build_ext --inplace build -c mingw32 install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Hopefully you'll now have a working install of &lt;code&gt;scikits.ann&lt;/code&gt; to use with the
Windows version of Python 2.5! See the ANN documentation and the AnnWrapper
documentation for information on how to use this module.&lt;/p&gt;</summary><category term="cygwin"></category><category term="python"></category><category term="windoze"></category></entry><entry><title>Using RSA keys to login to a remote computer via SSH without using a password</title><link href="/archive2008/using-rsa-keys-login-remote-computer-ssh-without-u/" rel="alternate"></link><updated>2008-07-28T19:25:42-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-28:archive2008/using-rsa-keys-login-remote-computer-ssh-without-u/</id><summary type="html">&lt;p&gt;I tend to remotely login to various different computers through SSH &lt;strong&gt;a lot&lt;/strong&gt;.
Typing my password every time I login to a remote machine gets tiresome. This is
how to generate public/private key pairs so you don't have to enter your
password every time you login through ssh!&lt;/p&gt;
&lt;p&gt;First, some terms.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;client&lt;/strong&gt; computer is the computer you will be logging on &lt;strong&gt;from&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;server&lt;/strong&gt; is the computer where you will be logging on &lt;strong&gt;to. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; On the client, open a terminal and type: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ ssh-keygen -t rsa&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You will be asked where to save the keys to. Just hit enter to save the keys
to the default location (~/.ssh/id_rsa and ~/.ssh/id_rsa.pub). When it asks
for a passphrase to use, just leave it blank and hit enter (this way we won't
need a password). &lt;/strong&gt;Protect your private key!&lt;strong&gt; Now you're going to want to copy
your public key to the server. Login to the server and create a &lt;code&gt;~/.ssh&lt;/code&gt;
directory: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ mkdir ~/.ssh&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; Copy the public key from the client to the server: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ scp ~/.ssh/id_rsa.pub server:~/.ssh/clientname&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be sure to replace 'server' with the server name or address and 'clientname'
with the name of your client box. On the server, go to your ssh directory: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ cd ~/.ssh&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; If an authorized_keys file doesn't exist, make one now: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ touch authorized_keys&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;Change the permissions of the authorized_keys file:&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ chmod 600 authorized_keys&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; Now copy the key from the client box into the authorized_keys file: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;code&gt;$ cat clientname &amp;gt;&amp;gt; authorized_keys&lt;/code&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Again, make sure to replace 'clientname' with the name you gave the file. Now
you should be able to ssh from your client box to your server box without having
to enter a password. &lt;/strong&gt;Make sure you protect your private key. If anyone gets a
hold of your private key, they will be able to connect to the server box as
you!****&lt;/p&gt;</summary><category term="linux"></category><category term="mac"></category></entry><entry><title>Custom BASH prompt</title><link href="/archive2008/custom-bash-prompt/" rel="alternate"></link><updated>2008-07-28T16:26:54-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-28:archive2008/custom-bash-prompt/</id><summary type="html">&lt;p&gt;Here's the custom bash prompt I use. Copy the following line into your
&lt;code&gt;~/.bashrc&lt;/code&gt; file to use it.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PS1='[e]0;wae[32m]nu@h [e[33m]w[e[00;$(($??31:00))m]n$ [33[00m]'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will display:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;username@hostname pwd&lt;/code&gt;
&lt;code&gt;$&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;where the &lt;code&gt;$&lt;/code&gt; prompt will be white when the previous command exited
successfully and red when the previous command exited with an error code. The
&lt;code&gt;username@hostname&lt;/code&gt; is green, and the &lt;code&gt;pwd&lt;/code&gt; is yellow.&lt;/p&gt;</summary><category term="linux"></category><category term="mac"></category></entry><entry><title>Setting up a PXE boot server under Ubuntu Hardy</title><link href="/archive2008/setting-pxe-boot-server-under-ubuntu-hardy/" rel="alternate"></link><updated>2008-07-28T14:27:55-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-28:archive2008/setting-pxe-boot-server-under-ubuntu-hardy/</id><summary type="html">&lt;p&gt;I thought I'd put this little how-to together since I seem to need a PXEBoot
server every once in a while. I have a Motion M1300 TabletPC with no external CD
drive so I use my trusty linux box as a PXE server to install different distros
to the tablet. This might be something somebody else out there might find useful
so here's how to setup a PXE boot server on Hardy with a couple different linux
distros.&lt;/p&gt;
&lt;p&gt;First step we need to do is install the right packages on our Hardy box. Fire up
a terminal and type:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo aptitude install lftp tftpd-hpa dhcp3-server openbsd-inetd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now we need to configure the tftp server. Edit the config file with your
favorite editor (mine's VI):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo vi /etc/inetd.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Add the following line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now add this configuration to &lt;code&gt;/etc/default/tftpd-hpa&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RUN_DAEMON="yes" OPTIONS="-c -s /var/lib/tftpboot"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now it's time to start the daemon from the terminal:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo /etc/init.d/tftpd-hpa start&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Make sure it's running:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ netstat -lu | grep tftp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You should see one line:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;udp 0 0 *:tftp *:*&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now we need to configure the dhcp server:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo vi /etc/dhcp3/dhcpd.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here's what I have in my file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;option domain-name-servers 10.0.1.1;
default-lease-time 86400;
max-lease-time 604800;
subnet 10.0.1.0 netmask 255.255.255.0 {
    range 10.0.1.15 10.0.1.20;
    filename &amp;quot;pxelinux.0&amp;quot;;
    option subnet-mask 255.255.255.0;
    option broadcast-address 10.0.1.255;
    option routers 10.0.1.1;
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Note that I'm on subnet &lt;code&gt;10.0.1.*&lt;/code&gt; and my router is at &lt;code&gt;10.0.1.1&lt;/code&gt;. Make sure your
config file is setup with your own network configuration. Start the dhcp server:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo /etc/init.d/dhcp3-server start&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And verify that it's running:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ ps ax | grep dhcpd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now we need to download the netboot files from the distros we want to be able to
boot. I'll just go through Ubuntu Hardy. Navigate to the tftpboot directory and
download the hardy netboot files:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd /var/lib/tftpboot/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lftp -c "open http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-i386/current/images/netboot/; mirror"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now boot up the client computer (making sure it's set to PXE boot) and you
should be presented with the Hardy installer screen. To boot other distros,
download the netboot files for them into the same directory, edit
&lt;code&gt;pxelinux.cfg/default&lt;/code&gt; to add the other kernels, and edit &lt;code&gt;boot.txt&lt;/code&gt; with the alias
you gave the distro in the default config file.&lt;/p&gt;</summary><category term="ubuntu"></category></entry><entry><title>Windows XP Remote Desktop over the internet via ssh tunneling</title><link href="/archive2008/windows-xp-remote-desktop-over-internet-ssh-tunnel/" rel="alternate"></link><updated>2008-07-16T19:29:58-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-16:archive2008/windows-xp-remote-desktop-over-internet-ssh-tunnel/</id><summary type="html">&lt;p&gt;This was originally published to my personal blog a few years back when I had
the need for some PCAnywhere type functionality but I wanted to do it for free!
How to use Remote Desktop over the internet through SSH tunneling.&lt;/p&gt;
&lt;p&gt;Requirements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Windows XP Professional&lt;/li&gt;
&lt;li&gt;SSH server and client (I use Cygwin with OpenSSH)&lt;/li&gt;
&lt;li&gt;Broadband internet connection (we're displaying an entire desktop over the
    internet, not just text!)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setup a dynamic DNS forwarding address (or use your static IP address, if
    you have one)&lt;/li&gt;
&lt;li&gt;Download and install Cygwin with the OpenSSH packages&lt;/li&gt;
&lt;li&gt;Setup SSH server and open port 22 on firewall.&lt;/li&gt;
&lt;li&gt;Make sure Remote Desktop is turned on and you can use it&lt;/li&gt;
&lt;li&gt;Create a reverse SSH tunnel&lt;/li&gt;
&lt;li&gt;Connect with Remote Desktop&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Procedure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setup a dynamic DNS forwarding address: If you want to remember your IP
    address in order to connect to your computer you can skip this step but as
for me, I wanted a simple web-style address that I could remember that would
update if my IP changed. I used dyndns.com to create a name that would be easy
to remember in order to login to my SSH server. You can setup an account with
them for free and it allows you to alias a dynamic IP address to a static
hostname.&lt;/li&gt;
&lt;li&gt;Download and install Cygwin with the OpenSSH packages: Download and install
    Cygwin on your home computer (the computer you want to connect to.) When
installing Cygwin, the default only installs minimum packages. I like to install
all packages so click where it says "Default" and it will change to "Install".
This way it will install ALL packages. Installing Cygwin with all packages will
take a while (even WITH the broadband connection) so go find something to do for
a while.&lt;/li&gt;
&lt;li&gt;Setup SSH server and open port 22 on firewall: After installing Cygwin, set
    it up with the mkpasswd and mkgrp commands (type mkpasswd -l &amp;gt; /etc/passwd
and after it's done type mkgroup -l &amp;gt; /etc/group). Type ssh-host-config to setup
the SSH server on the computer you want to connect to. I usually just go with
the default responses. Answer yes to the key generation question and yes to
install it as a service. After the ssh-host-config program finishes running,
type "cygrunsrv -S sshd" to start the service. Open port 22 on your firewall
and/or router. If you use a router because there is more than one computer on
your home network, configure the "Port forwarding" option to open port 22 for
the IP address of the computer you want to connect to. (If you don't know your
IP, click on the start menu, run, and type cmd. In the command prompt that
opens, type ipconfig.)&lt;/li&gt;
&lt;li&gt;Make sure Remote Desktop is turned on and you can use it: Make sure you have
    enabled Remote Desktop by right clicking on the "My Computer" icon and
enabling Remote Desktop in the "Remote" tab. Click on "Select Remote Users" and
make sure you have an account that is allowed to remotely connect.&lt;/li&gt;
&lt;li&gt;Create a reverse SSH tunnel: Assuming you've successfully setup the SSH
    server you're now ready to connect! On your remote computer, (this could be
at work, school, etc.; basically, anywhere with a high speed internet connection
where you want to Remote Desktop to your home computer), open up a Cygwin prompt
and connect to your SSH server like this: &lt;code&gt;ssh -L 3390:localhost:3389
username@servername&lt;/code&gt; Accept the key and enter your password to connect. If you
don't have Cygwin installed, download PuTTY open it and click on Tunnels under
the Connection-&amp;gt;SSH category. From there, enter 3390 as the Source port and
localhost:3389 as the Destination then click on Add. After configuring the
Tunnel, click on Session and enter either the IP address of your home computer
or the dynamic DNS address you setup earlier in the Host Name box and click
Open. Putty will ask you for your user name and password. If everything worked
correctly you should now be logged into your home computer!&lt;/li&gt;
&lt;li&gt;Connect with Remote Desktop: Don't close the Cygwin (or PuTTY) window or
    else the tunnel will collapse. Open Remote Desktop
(Programs-&amp;gt;Accessories-&amp;gt;Communications-&amp;gt;Remote Desktop Connection) and connect
to 127.0.0.1:3390 Login to your computer!&lt;/li&gt;
&lt;/ol&gt;</summary><category term="cygwin"></category><category term="windoze"></category></entry><entry><title>Copy every nth file</title><link href="/archive2008/copy-every-nth-file/" rel="alternate"></link><updated>2008-07-16T19:15:33-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-16:archive2008/copy-every-nth-file/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2008/copy-every-nth-file/"&gt;http://pyhacker.com/archive2008/copy-every-nth-file/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a little gui that copies files from one directory to another directory.
You can specify a step to selectively copy files (such as every tenth file,
etc). I originally wrote this code to copy every nth pair of stereo images from
one directory to another so there's an option for that (if selected, the code
assumes the stereo images have a trailing &lt;code&gt;\_0&lt;/code&gt; or &lt;code&gt;\_1&lt;/code&gt; to specify left image and
right image. It will copy pairs of images and count each pair as a file). This
code requires &lt;code&gt;wxPython&lt;/code&gt;. The gui was created using &lt;code&gt;wxGlade&lt;/code&gt;. To compile the source
to a Windoze binary, make sure you have &lt;code&gt;py2exe&lt;/code&gt; installed and run &lt;code&gt;python
setup.py py2exe&lt;/code&gt;. The executable will be in the &lt;code&gt;dist&lt;/code&gt; directory. To compile the
source into a Mac OS X app, make sure you have &lt;code&gt;py2app&lt;/code&gt; installed and run &lt;code&gt;python
setup.py py2app&lt;/code&gt;.&lt;/p&gt;</summary><category term="python"></category><category term="software"></category></entry><entry><title>Compiling PIL 1.6 for Cygwin and Python 2.5</title><link href="/archive2008/compiling-pil-16-cygwin-and-python-25/" rel="alternate"></link><updated>2008-07-16T18:31:03-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-07-16:archive2008/compiling-pil-16-cygwin-and-python-25/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2008/compiling-pil-16-cygwin-and-python-25/"&gt;http://pyhacker.com/archive2008/compiling-pil-16-cygwin-and-python-25/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm not sure if this is still relevant today, but I had written this on my blog
last year so I may find it useful again in the future, I was trying to compile
PIL 1.6 to use with my Cygwin-installed python at work and had to do this: &lt;/p&gt;
&lt;p&gt;&lt;code&gt;rebase -b 0x1000000000 /bin/tk84.dll&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python setup.py build_ext -i&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python selftest.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python setup.py install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After that, PIL built and installed just fine.&lt;/p&gt;</summary><category term="cygwin"></category><category term="pil"></category><category term="python"></category><category term="windoze"></category></entry><entry><title>Fix kernel panic in my Athlon64 Ubuntu box</title><link href="/archive2008/fix-kernel-panic-my-athlon64-ubuntu-box/" rel="alternate"></link><updated>2008-06-26T19:33:50-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-06-26:archive2008/fix-kernel-panic-my-athlon64-ubuntu-box/</id><summary type="html">&lt;p&gt;I'm just posting this because every time I redo my 64-bit linux box, things work
great for 5-10 minutes and then I get kernel panics where everything locks up
and I end up having to reboot. The magic alt sysreq trick won't work either.
(Note: if your linux box freezes up and killing the X-Server by doing a
Ctrl-Alt-Backspace doesn't help, try holding down Alt SysReq and typing REISUB
while holding down those two keys. It will try to give you back control of the
keyboard, safely unmount your drives, and reboot.) Anyway, I'm not sure why but
it to solve the kernel panics on my amd64 box, all I have to do is disable power
management. Do this by appending acpi=off to each kernel line in
&lt;code&gt;/boot/grub/menu.lst&lt;/code&gt;.&lt;/p&gt;</summary><category term="fix"></category><category term="linux"></category><category term="ubuntu"></category></entry><entry><title>Stream iTunes music over the internet via SSH</title><link href="/archive2008/stream-itunes-music-over-internet-ssh/" rel="alternate"></link><updated>2008-06-26T19:33:00-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-06-26:archive2008/stream-itunes-music-over-internet-ssh/</id><summary type="html">&lt;p&gt;At home, we have all our music stored on a linux box. The linux box is running
&lt;a href="http://www.fireflymediaserver.org/"&gt;Firefly Media Server&lt;/a&gt; to be able to stream the music to our Macs via iTunes.
I have a Mac and a Windows box at work. I wanted to be able to listen to my
music at work but ddn't want to have to copy the music over. We have a decent
internet connection at home (it's serving this webpage) and I decided I might as
well stream my music from home to listen to it at work. Here's how.&lt;/p&gt;
&lt;p&gt;First of all, you need to be able to ssh into you're box at home. Install the
OpenSSH server on you're Ubuntu box by opening a terminal and typing:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo aptitude install ssh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You'll need to set up firefly by typing:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo aptitude install mt-daapd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To configure firefly with your music, open a web browser on your linux box and
browse to &lt;a href="http://localhost:3689"&gt;http://localhost:3689&lt;/a&gt;. Leave username blank and enter something like
&lt;code&gt;password&lt;/code&gt; or &lt;code&gt;admin&lt;/code&gt; or something for the password (I don't remember what the
default is, you can find it in the &lt;code&gt;/etc/mt-daapd.conf&lt;/code&gt; file).&lt;/p&gt;
&lt;p&gt;You'll also need a way to connect to your box from the internet, either through
a domain name you own or a free service like dyndns.org or afraid.org. Now that
the mt-daapd server is setup and running and you can ssh into your box from the
internet, we need to setup the Mac or Windows box at work.&lt;/p&gt;
&lt;p&gt;Mac: We're going to install a program called Network Beacon. It can be
downloaded from
&lt;a href="http://www.chaoticsoftware.com/ProductPages/NetworkBeacon.html"&gt;http://www.chaoticsoftware.com/ProductPages/NetworkBeacon.html&lt;/a&gt;.
After installing Network Beacon, add a new beacon. For service name, give it
something descriptive like "music from home". This name will show up as the
share name in iTunes. For service type, type "_daap._tcp." without the quotes.
For port number, enter 3689. Check the "Enable Host Proxy" check box and type
"localhost" for host name and 127.0.0.1 for IP Address. &lt;img alt="Network-beacon.png" src="../../../../static/thehobbsfamily/uploads/network-beacon.png" /&gt;&lt;/p&gt;
&lt;p&gt;Now that Network Beacon is configured and running, open a Terminal and connect
to your linux box like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ ssh -N -L 3689:localhost:3689 username@yourlinuxbox&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;where &lt;code&gt;username&lt;/code&gt; is your login name on your linux box and &lt;code&gt;yourlinuxbox&lt;/code&gt; is your IP
address or domain name. Open up iTunes and you should see your music under
shared!&lt;/p&gt;
&lt;p&gt;Windows: Use a program called Rendezvous Proxy which can be downloaded from
&lt;a href="http://ileech.sourceforge.net/index.php?content=RendezvousProxy-Download"&gt;http://ileech.sourceforge.net/index.php?content=RendezvousProxy-Download&lt;/a&gt;. I'm
not going to go through the process of setting it up but it's pretty much the
same as the Mac instructions.&lt;/p&gt;</summary><category term="linux"></category><category term="mac"></category><category term="ubuntu"></category></entry><entry><title>Read/write a hard drive attached to an Airport Extreme Base Station from Linux (Ubuntu)</title><link href="/archive2008/readwrite-hard-drive-attached-airport-extreme-base/" rel="alternate"></link><updated>2008-06-26T19:32:08-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-06-26:archive2008/readwrite-hard-drive-attached-airport-extreme-base/</id><summary type="html">&lt;p&gt;UPDATE 28 May 2013: I've updated the instructions below to work on the latest
version of Ubuntu, 13.04 (Raring)&lt;/p&gt;
&lt;p&gt;I have an Apple Airport Extreme Base Station with an external hard drive
attached to it via the USB port (Air disk). This is how to auto mount it in
Ubuntu via cifs.&lt;/p&gt;
&lt;p&gt;My linux box is running Ubuntu 8.04 (Hardy) and is connected to the Airport
Extreme via ethernet. My wife's linux box is also running Hardy and is connected
via wifi. Here's how I set it up.&lt;/p&gt;
&lt;p&gt;First, we need to configure the Airport base station. Open Airport Utility and
click on the Disks tab. Set up read/write support through accounts and setup an
account. For this tutorial, I'll say the username was set to 'linux' and the
password was set to 'password'.&lt;/p&gt;
&lt;p&gt;After setting up the shared disk and accounts, save the configuration (this will
reset the router).&lt;/p&gt;
&lt;p&gt;In Ubuntu, open a terminal and install the required file like this (the '$' is
the prompt):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo aptitude install cifs cifs-utils winbind&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now you need to edit /etc/nsswitch.conf:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo vi /etc/nsswitch.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Add 'wins' after hosts: files. In my /etc/nsswitch.conf, it looks like this
(line 11):&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hosts: files wins mdns4_minimal [NOTFOUND=return] dns mdns4&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Create a directory where you want to mount the Air disk. I'm mounting mine in
&lt;code&gt;/media/video&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo mkdir /media/video&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now we need to create a credentials file that will be used in fstab:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo vi /root/.smbcredentials&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In this file, we need to put the username and password that has access to the
disk. In this example, I was using &lt;code&gt;linux&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt;, remember? So in this
case, .smbcredentials will contain this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;username=linux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;password=password&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After saving the file, change the permissions!&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo chmod 600 /root/.smbcredentials&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now it's time to add the Air disk to our fstab file:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo vi /etc/fstab&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Add an entry at the bottom like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;//AirPort/Videos /media/video cifs
credentials=/root/.smbcredentials,iocharset=utf8,rw,uid=UID,file_mode=0666,dir_mode=0777
0 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;'Airport' is the name of the base station. 'Videos' is the name of the disk
that's plugged into the base station. &lt;code&gt;/media/video&lt;/code&gt; is the name of the directory
we created to mount the disk under. 'rw' mounts the disk as read/write. If you
created a read-only account, this can be replaced with 'ro'. 'UID' should be
replaced with your username in linux (or the uid number if you prefer). Now just
save the file! Enter this command to make sure it works:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo mount -a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Assuming no errors, you can now browse your Air disk and read/write to it!&lt;/p&gt;</summary><category term="linux"></category><category term="mac"></category><category term="ubuntu"></category></entry><entry><title>Get Photos</title><link href="/archive2008/get-photos/" rel="alternate"></link><updated>2008-06-26T19:12:58-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-06-26:archive2008/get-photos/</id><summary type="html">&lt;p&gt;This thread has moved to my new site
here: &lt;a href="http://pyhacker.com/archive2008/get-photos/"&gt;http://pyhacker.com/archive2008/get-photos/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a simple program that will copy all photos off a memory card to a
library directory. It organizes the photos according to date and creates a
directory for each date in the following format: &lt;code&gt;YYYYMMDD&lt;/code&gt;. After copying photos,
it will ask if you want to delete the copied files from the memory card. Any
file that the program could not read or copy will be presented in a dialog. This
includes non-photo files such as movies. This program requires wxPython and
kaa.metadata. It has been successfully tested on Mac OS X and Ubuntu 8.04.&lt;/p&gt;</summary><category term="python"></category><category term="software"></category></entry><entry><title>In progress</title><link href="/archive2008/progress/" rel="alternate"></link><updated>2008-06-02T19:28:56-07:00</updated><author><name>jmhobbs</name></author><id>tag:,2008-06-02:archive2008/progress/</id><summary type="html">&lt;p&gt;Well, we decided to start over with this website. I don't know how long it's
going to take to get everything up and running the way I'd like it so until
then, check out the &lt;a href="/links"&gt;links page&lt;/a&gt; and visit some of our other endeavors!&lt;/p&gt;</summary><category term="news"></category></entry></feed>