<?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-8135297538998876920</id><updated>2012-01-16T16:59:53.820-08:00</updated><category term='install'/><category term='xterm-new'/><category term='podcast'/><category term='Sid'/><category term='javascript'/><category term='month'/><category term='PIC programming'/><category term='erlang'/><category term='the brain'/><category term='one-liner'/><category term='prose'/><category term='mpeg2ts'/><category term='tz-170'/><category term='tz170'/><category term='Grub'/><category term='OTA'/><category term='date'/><category term='xterm'/><category term='ipsecuritas'/><category term='Leopard'/><category term='97.1'/><category term='Adam Carolla'/><category term='Sheeva Plug'/><category term='Oscillator'/><category term='Moving'/><category term='iphone'/><category term='Git'/><category term='Atlanta'/><category term='signed integer'/><category term='a/v sync'/><category term='adamcarolla.com'/><category term='Spring'/><category term='backreferences'/><category term='Squeeze'/><category term='TS'/><category term='erlang movie'/><category term='linux'/><category term='Arm'/><category term='arduino'/><category term='auto adding dns hosts from dhcp'/><category term='Phoenix'/><category term='embedded'/><category term='Microchip'/><category term='sonicOS enhanced'/><category term='mikroC'/><category term='Mac OS X terminal'/><category term='logic'/><category term='Debian'/><category term='Eventmachine'/><category term='mac os x'/><category term='ssh authorized _keys sshd ssh_client permissions'/><category term='ffmpeg'/><category term='Perl'/><category term='Autumn'/><category term='armel'/><category term='shells'/><category term='microcontroller'/><category term='iphone 3G'/><category term='Grub2'/><category term='modulo'/><category term='annotated tags'/><category term='Ruby'/><category term='Clock'/><category term='functional programming'/><category term='SHA'/><category term='sonicwall'/><category term='colors'/><category term='tail recursion python marshal serialize'/><category term='18F2455'/><category term='CXX'/><category term='ls'/><category term='DHCP'/><category term='MaraDNS'/><title type='text'>this_blog(cool, exciting) :- posts(kleetus)</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5456294889658177063</id><published>2012-01-16T16:50:00.000-08:00</published><updated>2012-01-16T16:59:53.985-08:00</updated><title type='text'>How to fix -- dlopen(/Users/user/.rvm/gems/ruby-1.9.2-p290@gemset/gems/do_mysql-0.10.7/lib/do_mysql/do_mysql.bundle, 9): Library not loaded</title><content type='html'>&lt;div&gt;Recently when working with a new gemset in RVM, I noticed that the gem install of mysql-0.10.7, the C extensions be exact, did not link correctly against the mysqllibclient dynamic library. I don't really know why this at this point. I needed to get it fixed. Stackoverflow to the rescue, but I wanted to post the script I made to make this easier.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The error when running my Sinatra app: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;dlopen(/Users/users/.rvm/gems/ruby-1.9.2-p290@gemset/gems/do_mysql-0.10.7/lib/do_mysql/do_mysql.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The ruby script for the fix:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/env ruby&lt;br /&gt;mysql_bundle = `find ~ -name do_mysql.bundle`&lt;br /&gt;mysql_lib = 'libmysqlclient.18.dylib'&lt;br /&gt;mysql_lib_location = `find /usr/local -name #{mysql_lib}`&lt;br /&gt;m_array = mysql_lib_location.split&lt;br /&gt;mysql_lib_path = m_array.first if m_array&lt;br /&gt;mysql_bundle.split.each do |bundle|&lt;br /&gt;`/usr/bin/install_name_tool -change #{mysql_lib} #{mysql_lib_path} #{bundle}`&lt;br /&gt;end&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5456294889658177063?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5456294889658177063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5456294889658177063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5456294889658177063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5456294889658177063'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2012/01/how-to-fix-dlopenusersuserrvmgemsruby.html' title='How to fix -- dlopen(/Users/user/.rvm/gems/ruby-1.9.2-p290@gemset/gems/do_mysql-0.10.7/lib/do_mysql/do_mysql.bundle, 9): Library not loaded'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1733598261001094664</id><published>2011-08-18T16:24:00.000-07:00</published><updated>2011-08-18T16:27:07.074-07:00</updated><title type='text'>Hey Paypal!</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; line-height: 18px; background-color: rgb(255, 255, 255); "&gt;PayPal wanted a survey from me..here is my reply. Wondered if this is too harsh?&lt;br /&gt;"I periodically change all my passwords and my answers to the secret questions. This is a prudent action on my part, but apparently this behavior triggers an event related to a possible security problem in PayPal's system. I understand why this happens, but the security policies should be refactored. PayPal ought to use two factor authentication. For those that do not have access to the second factor, then drop back to the antiquated system. Also, if I remember correctly, PayPal does not allow passwords to be over a certain length. This is a super huge red flag that you are possibly storing my password plain text OR the frontend is just bush league and not sophisticated enough to prevent an overflow into the DB. In any case, this password policy is not what I expect from a banking institution. I don't have anything personal against your company, but it seems PayPal's priorities are mixed up."&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1733598261001094664?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1733598261001094664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1733598261001094664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1733598261001094664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1733598261001094664'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2011/08/hey-paypal.html' title='Hey Paypal!'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-3292596621294816917</id><published>2011-06-23T04:39:00.000-07:00</published><updated>2011-06-24T04:53:33.131-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sheeva Plug'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='armel'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Arm'/><title type='text'>SheevaPlug Dev Kit and Debian</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;Got my &lt;a href="http://www.globalscaletechnologies.com/p-22-sheevaplug-dev-kit-us.aspx"&gt;Sheeva Plug Dev Kits&lt;/a&gt; in yesterday:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Initial thoughts are that they are nifty. Not earth-shattering. Not knee-buckling, just nifty. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In case you didn't know. The Sheeva Plug device is the hardware reference platform for a lot of pluggable computers these days such as the Tonido Plug and others. They have middle-of-the-road hardware specs based on the &lt;a href="http://en.wikipedia.org/wiki/ARM_architecture"&gt;ARM architecture&lt;/a&gt;. The best part of this device is that the Dev kit retails out for $98. I ordered mine from GlobalScale Technologies. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;GlobalScale took over two weeks just to ship out the two plugs that I ordered. Not cool. But, they did get them to me. The devices come ready to plug right into a standard wall 120V outlet. You can also remove the prongs from the device and plug in a power cable (sort of like the macbook's power transformer), so that you can mount the plug separate from the wall.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Input/Output connections to the device are:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Power (takes 120V directly, the power supply is in the device, interesting design decision)&lt;/li&gt;&lt;li&gt;MMC/SD slot&lt;/li&gt;&lt;li&gt;Gigabit ethernet&lt;/li&gt;&lt;li&gt;USB 2.0 port (A-type connection)&lt;/li&gt;&lt;li&gt;mini USB &lt;/li&gt;&lt;/ul&gt;&lt;i&gt;This is the serial port to the device. You attach the supplied mini USB cable and there is a serial to USB device in the Sheeva Plug that gives you a serial connection. You can connection right up to the Sheeva Plug by doing something like:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;  &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;  &lt;/i&gt;&lt;blockquote&gt;% screen /dev/ttyUSB1 115200&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Hardware notes:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Internal switching power supply. This is non-characteristic of hardware vendors these days. Let power supply doods handle that stuff, too much to go wrong there, but it does fit with the "plug" theme that they are going for. The MMC/SD is pretty standard, but I never really liked that form factor. The card sticks out about a full centimeter. This will snap off like a saltine at the hint of contact with something harder than talcum powder. Be careful if you use that port. Plenty of room around the usb port and ethernet port, so you can use fatty usb storage devices. The white protective case seems cheap and flimsy. I would not trust it to withstanding any sort of fall. But, this is reference hardware, not destined for the Apple Store.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Firmware notes:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;When you connect to the serial console on the device, you will see the &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;Marvell&amp;gt;&amp;gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;prompt. Consider this the bootloader for the device. The device has 512MB of internal flash memory, but this can't be used for the Debian install. I am not sure why this is, but I will investigate this as soon as I can and get back to you. As such, you will need to find another persistence data store. Common setups are installing Debian to the MMC or USB stick, but you could run everything from the network too. I bought these devices to run as small form factor home automation servers. So, I think the MMC/SD slot is perfect for the storage device. You can then use &lt;a href="http://www.cyrius.com/debian/kirkwood/sheevaplug/install.html"&gt;this link&lt;/a&gt; to install Debian onto the plug.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Remember: if you are writing software for the device, it architecture is "armel". The C/C++ libraries have different capabilities (they try to be the same), but you can easily cross compile for the Sheeva Plug from your amd64 machine (mostly everyone has one of those machines now, right?). Cross compiling software and directions can be found &lt;a href="http://wiki.debian.org/BuildingCrossCompilers"&gt;here&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Setting all that up can be a bit of a pain. One of those things that drive you mad, but after going through all that, you will understand Unix guys have those giant beards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall: I give the plug a 8.5/10. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pros:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Open platform&lt;/li&gt;&lt;li&gt;Good hardware design (placement)&lt;/li&gt;&lt;li&gt;Inexpensive&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Cons:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Cheap plastic case&lt;/li&gt;&lt;li&gt;Internal switching power supply makes me a bit nervous. If it goes bad, the device is toast.&lt;/li&gt;&lt;li&gt;MMC/SD slot needs to be one those spring-loaded deals (like cell phones use)...and it is OK to use microSD (only) at this point since those cards are all over the place.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I will be revising my review only the next couple of months when these plugs are attached to wall and doing their thing quietly. If I forget that they are there, then this will yield the best review possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the coming weeks, I will be posting pictures of the device and how I am using it in the wild. One note, I tried to use a microSD in a full SD card insert to no available. The device was recognized, but the format of the device failed. I tried a full size SD 4GB card and this worked perfectly. SD cards are cheap and I don't need a huge amount of space on them. 4GB is plenty for a home automation server. As the days go on, I am liking this device more and more.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-3292596621294816917?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/3292596621294816917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=3292596621294816917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3292596621294816917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3292596621294816917'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2011/06/sheevaplug-dev-kit-and-debian.html' title='SheevaPlug Dev Kit and Debian'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-2388678872579738983</id><published>2010-12-29T05:01:00.000-08:00</published><updated>2010-12-29T10:28:51.353-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microchip'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='PIC programming'/><category scheme='http://www.blogger.com/atom/ns#' term='mikroC'/><title type='text'>New favorite Microchip PIC is the 18F14K22</title><content type='html'>I discovered this little microchip recently. The 18F14K22 PIC is really neat. At about $2 from mouser or digikey and supported by the USBProg for ICSP and also supported by mikroC compilers, it is my new favorite low-end chip. I use it anywhere USB coms are not required. It also runs at 64 MHz with an external crystal, but I mostly use the 2 internal clock sources. The primary internal runs at up to 16 MHz and has fantastic stability. The secondary clock runs at 31 KHz, which is great for saving the batteries. This chip comes in SMD/SMT and PDIP flavors as you might expect. I like the SOIC-20 style because this is really easy to solder down quickly on a prototype board (like a schmartboard). You can also run them at 1.8v to 5.5v, which is nice is you are using usb power or 2 double A batteries. I use this chip with the Linx TRM433 transceiver, which runs at a strict 3v. So I regulate power once and smooth it out and forget about it! If you are getting into the embedded world, I would highly recommend this chip! It beats the pants off of any arduino out there at a fraction of the cost!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-2388678872579738983?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/2388678872579738983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=2388678872579738983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2388678872579738983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2388678872579738983'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/12/new-favorite-microchip-pic-is-18f14k22.html' title='New favorite Microchip PIC is the 18F14K22'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-8702011909736793288</id><published>2010-10-13T04:30:00.000-07:00</published><updated>2010-10-13T04:41:19.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='SHA'/><category scheme='http://www.blogger.com/atom/ns#' term='annotated tags'/><title type='text'>Git: What SHA does this tag refer to?</title><content type='html'>I often have to tag a branch in my Git repo for QA. Our QA people prefer to have a tag to deploy on to their QA environments, so that they do not have a "moving target" to ensure features and bugs are accounted for. Sometimes, however, I forget exactly where in the lineage the tag was created. In other words, on which commit the tag was drawn. &lt;br /&gt;&lt;br /&gt;There is a way in Git to see this information. Here is a use case for the situation.&lt;br /&gt;&lt;br /&gt;You complete feature A and commit it. You then tag feature A with an annotated tag and immediately start working on feature B, then C, etc. QA asks about the tag. You no longer remember what that tag was for, so you fire up a console and type in the following to find out:&lt;br /&gt;&lt;br /&gt;git show-ref --dereference &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can find the tag in the list and perform a simple git log matching the sha from the show-ref to the sha in the git log. Simple. Even easier would be to run a filter using --exclude-existing on the show-ref using a regular expression and then piping the result to git show or git log.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-8702011909736793288?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/8702011909736793288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=8702011909736793288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/8702011909736793288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/8702011909736793288'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/10/git-what-sha-does-this-tag-refer-to.html' title='Git: What SHA does this tag refer to?'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-753440365426128417</id><published>2010-10-10T17:12:00.000-07:00</published><updated>2010-10-10T17:52:18.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='Sid'/><category scheme='http://www.blogger.com/atom/ns#' term='Grub'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Grub2'/><category scheme='http://www.blogger.com/atom/ns#' term='Squeeze'/><title type='text'>Debian Unstable (SID) Squeeze: installing Grub2</title><content type='html'>This is frustrating. Installing the Debian system in development (SID, AKA squeeze) is really broken currently. Installing GRUB or GRUB2 just does not work at all and can ruin your day. You get all the way to the end of the install when the error pops up. During the install of either GRUB or GRUB2.&lt;br /&gt;&lt;br /&gt;Here is what you can do to fix this:&lt;br /&gt;&lt;br /&gt;1. Choose to install GRUB2 and let it fail; be sure to allow GRUB to write to the MBR.&lt;br /&gt;2. Go back to the main menu of installer items and choose "continue without installing a bootloader". Trust me on this one, it will all work out.&lt;br /&gt;3. reboot your machine, the grub (this will be the GRUB2) bootloader prompt will be presented. This is your ticket back into your newly installed system&lt;br /&gt;4. At the "grub&gt;" prompt, type the following: (you may need to adjust the boot drive)&lt;br /&gt;&lt;br /&gt;linux hd(0,1)/boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda1&lt;br /&gt;&lt;br /&gt;then:&lt;br /&gt;&lt;br /&gt;initrd /boot/initrd-2.6.32-5-amd64 &lt;br /&gt;&lt;br /&gt;then:  &lt;br /&gt;&lt;br /&gt;boot&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;of course substitute the kernel and initrd you are using for the real ones. Also check the root drive for the correct one. Sometimes you can just guess, the machine will just not boot if it is wrong and you can go back and do it again until you get it right.&lt;br /&gt;&lt;br /&gt;Then once you have everything booted. You can install GRUB2 properly by doing the following:&lt;br /&gt;&lt;br /&gt;apt-get install grub2&lt;br /&gt;&lt;br /&gt;then:&lt;br /&gt;&lt;br /&gt;grub-install /dev/sda&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;then:&lt;br /&gt;&lt;br /&gt;grub-mkconfig &gt; /boot/grub/grub.cfg&lt;br /&gt;&lt;br /&gt;then: &lt;br /&gt;&lt;br /&gt;reboot&lt;br /&gt;&lt;br /&gt;All should be well after the reboot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-753440365426128417?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/753440365426128417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=753440365426128417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/753440365426128417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/753440365426128417'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/10/debian-unstable-sid-squeeze-installing.html' title='Debian Unstable (SID) Squeeze: installing Grub2'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4802579351502557080</id><published>2010-09-29T10:45:00.000-07:00</published><updated>2010-10-04T04:07:52.614-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xterm-new'/><category scheme='http://www.blogger.com/atom/ns#' term='colors'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='ls'/><category scheme='http://www.blogger.com/atom/ns#' term='xterm'/><title type='text'>Changing xterm-new/xterm text output colors</title><content type='html'>I recently found that in my iterm (and Mac terminal) applications the text coloring was not optimal. For instance, I use a dark background, but when issuing a command such as 'ls' would list directories in dark blue. This is impossible to read. It seemed to me that this would affect most who prefer a dark background in their terminals. I think this only applies to Mac terminal since the environment variable used is a bit different than what Linux uses.&lt;br /&gt;&lt;br /&gt;to find out which terminal you are using (aside from the application running the terminal such as terminal app or iterm) issue this command:&lt;br /&gt;&lt;br /&gt;echo $TERM&lt;br /&gt;&lt;br /&gt;as always, you can read all about the information here in the ls man page&lt;br /&gt;&lt;br /&gt;man ls&lt;br /&gt;&lt;br /&gt;here is what you can do to change one or all of your lscolors, environment variable is LSCOLORS&lt;br /&gt;&lt;br /&gt;Add the following to .bashrc or .bash_profile or whatever file runs when you start an interactive shell: (mine is called .bash_profile and lives in my home directory)&lt;br /&gt;&lt;br /&gt;LSCOLORS='fxfxcxdxbxegedabagacad'&lt;br /&gt;export LSCOLORS&lt;br /&gt;&lt;br /&gt;straight from 'man ls'&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;LSCOLORS&lt;br /&gt;The value of this variable describes what color to use for which attribute when colors are enabled with CLICOLOR.  This string&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; is a concatenation of pairs of the format fb, where f is the foreground color and b is the background color.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                     The color designators are as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           a     black&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           b     red&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           c     green&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           d     brown&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           e     blue&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           f     magenta&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           g     cyan&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           h     light grey&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           A     bold black, usually shows up as dark grey&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           B     bold red&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           C     bold green&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           D     bold brown, usually shows up as yellow&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           E     bold blue&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           F     bold magenta&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           G     bold cyan&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           H     bold light grey; looks like bright white&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           x     default foreground or background&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                     Note that the above are standard ANSI colors.  The actual display may differ depending on the color capabilities of the terminal in use.&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                     The order of the attributes are as follows:&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           1.   directory&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           2.   symbolic link&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           3.   socket&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           4.   pipe&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           5.   executable&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           6.   block special&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           7.   character special&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           8.   executable with setuid bit set&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           9.   executable with setgid bit set&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           10.  directory writable to others, with sticky bit&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                           11.  directory writable to others, without sticky bit&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;                     The default is "exfxcxdxbxegedabagacad", i.e. blue foreground and default background for regular directories, black foreground and red background for setuid executables, etc.&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So add the following to your .bash_profile or equivalent:&lt;br /&gt;&lt;br /&gt;LSCOLORS='fxfxcxdxbxegedabagacad'&lt;br /&gt;export LSCOLORS&lt;br /&gt;&lt;br /&gt;As you can see I just changed the first character from 'e' to 'f'. This has the effect of making directory listings be listed in a magenta color instead of a dark blue.&lt;br /&gt;&lt;br /&gt;Save .bash_profile and issue:&lt;br /&gt;&lt;br /&gt;. !$&lt;br /&gt;&lt;br /&gt;that is the same as:&lt;br /&gt;&lt;br /&gt;source ~/.bash_profile&lt;br /&gt;&lt;br /&gt;if issued right after the command to edit .bash_profile. In other words, you are asking bash to source (which is what the dot is) and then reprint the last argument to the last command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4802579351502557080?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4802579351502557080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4802579351502557080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4802579351502557080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4802579351502557080'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/09/changing-xterm-newxterm-text-output.html' title='Changing xterm-new/xterm text output colors'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-9003738546584656688</id><published>2010-09-28T05:13:00.000-07:00</published><updated>2010-09-28T05:52:40.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microchip'/><category scheme='http://www.blogger.com/atom/ns#' term='18F2455'/><category scheme='http://www.blogger.com/atom/ns#' term='microcontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='Clock'/><category scheme='http://www.blogger.com/atom/ns#' term='PIC programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Oscillator'/><title type='text'>Microchip Pic 18F2455/2550/4455/4550 Oscillator Settings Explained</title><content type='html'>I have a new fav Microprocessor. The Microchip Pic 18F2455. This is a feature-full yet powerful little device has almost limitless possibilities. Alas, you must understand that I am coming from the Pic 16F77, which lacks USB support, but is far more simple to get "blinky lights".&lt;br /&gt;&lt;br /&gt;What the 18F2455 achieves in features, it gives up in ease of use (for newbies like myself). The external oscillator settings where an epic nightmare to get right! I believe the reason for this is twofold:&lt;br /&gt;&lt;br /&gt;1. Nanowatt (tm) specifies the use of 2 clocks/oscillators for the 18F2455. The first clock for the main clock source to run the cpu itself; the ALU, the USB port(s) and all that. The second clock runs timers. This setup allows the main clock (and CPU) to power down leaving the second clock running to handle checking for new data on the USB port and running timers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. The USB port needs a strict 48 MHz clock to run, but Microchip still wanted to allow users of these chips to use oscillator configurations that they were used to. For example, for me, I have always clocked my chips at 20 MHz and I have a surplus of those crystals, so using a 20 MHz clock source would be really nice. I can still do this, but I need to use internal chip configurations to make use of the chip's internal pre/post oscillator scalers.&lt;br /&gt;&lt;br /&gt;Here is how it all breaks down for me:&lt;br /&gt;&lt;br /&gt;using 18F2455 and a 20 MHz external crystal. Please open the data sheet for the 2455 and refer to figure 2-1.&lt;br /&gt;&lt;br /&gt;diagraming it out:&lt;br /&gt;&lt;br /&gt;20 MHZ --&gt; pins 9,10 (on pic)&lt;br /&gt;&lt;br /&gt;you can see from Figure 2-1 that whatever you hook up to pins 9,10, you are feeding a PLL prescaler internally and you MUST feed the subsequent PLL prescaler a 4 MHz clock source as its input. This means that for me, I have to prescale my 20 MHz oscillator to 4 MHz. This means that we need to divide 20 MHz by 5. You can see from figure 2-1 that this bit setting is 100 on the PLL DIV MUX.&lt;br /&gt;&lt;br /&gt;Now you have 96 MHz at the exit of the second PLL that is feeding another divider and also feeding a PLL postscaler. So then you can set the CPU DIV for the appropriate div for the main CPU clock source. This is 1 in my case because I want the main CPU to be clocked at 20 MHz.&lt;br /&gt;&lt;br /&gt;If you are thinking that this is pretty confusing, you are right! There are a lot of choices (12 different oscillator modes) in oscillator setup and configuration. This leads to confusion and dismay. Mayhem might ensue. But, I think if you take the time to read Fig. 2-1 and learn the register bits that control which mode the clocks can be in, then I think this is an extremely powerful tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-9003738546584656688?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/9003738546584656688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=9003738546584656688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/9003738546584656688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/9003738546584656688'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/09/microchip-pic-18f2455255044554550.html' title='Microchip Pic 18F2455/2550/4455/4550 Oscillator Settings Explained'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-3498789145938319849</id><published>2010-09-26T16:22:00.001-07:00</published><updated>2010-09-26T16:25:04.009-07:00</updated><title type='text'>Montana Property</title><content type='html'>I wish I had the money and freedom to buy this property myself. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Check this beautiful Western USA property out!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  &gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;&lt;a href="http://www.103pilgrimcreek.com/"&gt;52 acres for sale in Noxon Montana&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-3498789145938319849?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/3498789145938319849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=3498789145938319849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3498789145938319849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3498789145938319849'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/09/montana-property.html' title='Montana Property'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-2861568792742931164</id><published>2010-09-20T05:12:00.000-07:00</published><updated>2010-09-20T17:03:57.240-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh authorized _keys sshd ssh_client permissions'/><title type='text'>SSH: setting up key authorization only (authorized_keys)</title><content type='html'>This is a great site for dealing ssh key authorization.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html"&gt;http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem with sites that help you setup ssh key authorization is that they typically leave out the specific chmod commands (permissions) that you need to make the darn thing work!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I mean to say is that people need to see an example of how this works and not just out of context commands and scripts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is an example of a Mac OS X ssh client trying to setup ssh key authorization with a CentOS ssh server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;on the Mac, issue the following commands (you may or may not want a pass phrase on your private key), also substitute your username and hostname in where the double quotes are.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. ssh-keygen -t dsa     &lt;/div&gt;&lt;div&gt;2. scp .ssh/id_dsa.pub "user"@"CentOS host"&lt;user&gt;&lt;the&gt;:~&lt;/the&gt;&lt;/user&gt;&lt;/div&gt;&lt;div&gt;3.  ssh "user"&lt;user&gt;@"CentOS host"&lt;the&gt;&lt;/the&gt;&lt;/user&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;on the CentOS server&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. mkdir .ssh (this directory may or may not already be there; it should be safe to issue either way)&lt;/div&gt;&lt;div&gt;2. cat id_dsa.pub &gt; .ssh/authorized_keys&lt;/div&gt;&lt;div&gt;3. chmod 755 .ssh &amp;amp;&amp;amp; chmod 755 .ssh/authorized_keys&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;on Mac again: (hit ctrl-D to log off the server)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. ssh -vvv "user"&lt;user&gt;@"CentOS host"&lt;centos&gt;&lt;/centos&gt;&lt;/user&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The ssh client should log you in without a password if there is not password protected private key. If you protected your private key with a password, then it should ask for the password for the private key. Ssh should NOT ask you to provide a login for the shell on the remote side. The triple 'V' will display a verbose list of the conversation going on betwix client and server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&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;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-2861568792742931164?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/2861568792742931164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=2861568792742931164' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2861568792742931164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2861568792742931164'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/09/ssh-setting-up-key-authorization-only.html' title='SSH: setting up key authorization only (authorized_keys)'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-630635188985160171</id><published>2010-05-19T16:46:00.000-07:00</published><updated>2010-05-19T17:29:47.960-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='signed integer'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='modulo'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='month'/><category scheme='http://www.blogger.com/atom/ns#' term='date'/><title type='text'>Modulo operators with respect to Ruby and Javascript</title><content type='html'>Recently, I was tasked with creating a calendar which transitioned from month to month such as December to January to February, etc.. Also, I needed to go backward on the transition.&lt;br /&gt;&lt;br /&gt;A good way to do this is to use a modulo operator. This means that you can figure out which month is the next month number very easily.&lt;br /&gt;&lt;br /&gt;So if the month is December, which is month number 12, to find out which month is next:&lt;br /&gt;&lt;br /&gt;month = (month % 12) + 1 or (12 % 12 )+ 1, this will work for any month number from 1 to 12.&lt;br /&gt;&lt;br /&gt;BUT to go backwards on the month numbers, here is the operation:&lt;br /&gt;&lt;br /&gt;month = ((12+(month-2)) % 12) + 1    ... the funny thing is that this operation does not work in Ruby, but it does in Javascript.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In Ruby, here is the equivalent backward operation:&lt;br /&gt;&lt;br /&gt;month = ((month-2) % 12) + 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What is the difference? Why would there be a difference? I have no idea.  It seems like Javascript would generate the right response to -1 % 12, which is -1 because 12 divided by -1 is 0 with -1 left over, but Ruby, Python, Perl, and the Google calculator figure that it should be 11 left over.  This may be because a negative remainder would make no sense. So if the modulo is negative, then add it to the second operand to get the real modulo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-630635188985160171?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/630635188985160171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=630635188985160171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/630635188985160171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/630635188985160171'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/05/modulo-operators-with-respect-to-ruby.html' title='Modulo operators with respect to Ruby and Javascript'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-3711943146501974288</id><published>2010-04-22T14:26:00.000-07:00</published><updated>2010-07-10T18:43:30.971-07:00</updated><title type='text'>I must speak out on the this one</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WZOHTV6YvZI/S9DFG42ETCI/AAAAAAAAABA/OKB3km5NY8o/s1600/map.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 246px; height: 320px;" src="http://2.bp.blogspot.com/_WZOHTV6YvZI/S9DFG42ETCI/AAAAAAAAABA/OKB3km5NY8o/s320/map.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5463083070129458210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Recently, while at work, I was discussing why Google maps do not include a scale. In fairness to Google, the maps may have this functionality, but I am ignorant as to how to enable this feature.&lt;br /&gt;&lt;br /&gt;My hypothesis as to why there is no scale was a simple one. To accurately determine scale for a map, one would need to consider the topography of land the map covers. Maybe Google just does not want to go to the trouble.&lt;br /&gt;&lt;br /&gt;Seems simple enough to me, but to my surprise, the other two parties in the conversation said that topography has nothing to do with scale on this map. Huh?!? I stipulated the point to avoid a nasty argument where more than one person might need to get schooled, Sesame Street style.&lt;br /&gt;&lt;br /&gt;Well, I can't take it anymore; time for some schooling. The assertion I am attempting to buttress is that topography (whether there are mountains and valleys on the surface of the earth) matters when applying a scale marker on a map. Google could probably estimate this very accurately since topography overlays are available to them, but who wants to do calculus for such a small thing? Anyway, here is an image which details my explanation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-3711943146501974288?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/3711943146501974288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=3711943146501974288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3711943146501974288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3711943146501974288'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/04/i-must-speak-out-on-this-one.html' title='I must speak out on the this one'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_WZOHTV6YvZI/S9DFG42ETCI/AAAAAAAAABA/OKB3km5NY8o/s72-c/map.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4560709758773089467</id><published>2010-04-05T19:01:00.000-07:00</published><updated>2010-04-05T19:07:55.203-07:00</updated><title type='text'>Installing Rails 3 on Debian Unstable (Sid)</title><content type='html'>Recently, I was installing Rails3 on my Debian unstable machine and I noticed an error that was really strange. &lt;br /&gt;&lt;br /&gt;Here was the error:&lt;br /&gt;&lt;br /&gt;ERROR NameError: uninitialized constant ActiveResource::Base      &lt;br /&gt;&lt;br /&gt;The problem ended up being that I was missing this deb file:&lt;br /&gt;&lt;br /&gt;  libopenssl-ruby1.8 &lt;br /&gt;&lt;br /&gt;I have seen posts from people proclaiming that uninstalling old versions of activeresource would do the trick, but I reinstalled activeresource-2.3.5 gem after Rails 3 starting working again without a failure. I hate cryptic errors like that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4560709758773089467?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4560709758773089467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4560709758773089467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4560709758773089467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4560709758773089467'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/04/installing-rails-3-on-debian-unstable.html' title='Installing Rails 3 on Debian Unstable (Sid)'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-2739699341594205983</id><published>2010-03-21T18:38:00.000-07:00</published><updated>2010-03-21T18:49:29.651-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='CXX'/><category scheme='http://www.blogger.com/atom/ns#' term='Eventmachine'/><category scheme='http://www.blogger.com/atom/ns#' term='Leopard'/><title type='text'>Mac OS X Leopard installing the ruby gem eventmachine</title><content type='html'>I was having some trouble installing eventmachine (a ruby gem that needs an extension library written in C++) recently in Mac OS X Leopard. I am currently running ruby 1.8.8dev. I think, perhaps, when I compiled ruby from source, the config left out the CXX flags setting. This makes mkmf not know what C++ compiler it needs to set in the Makefiles it creates. Since there are not too many gems that have extensions written in C++ (that I know of), I never really ran into this issue. Here is how to fix this. &lt;br /&gt;&lt;br /&gt;Edit this file inside the directory of the gem, in my case;&lt;br /&gt;&lt;br /&gt;$ vim /usr/local/lib/ruby/gem/1.8/gem/eventmachine-0.12.11/ext/extconf.rb&lt;br /&gt;&lt;br /&gt;Right above the last line (the last line being a call to create_makefile), insert this line:&lt;br /&gt;&lt;br /&gt;CONFIG['CXX'] = g++&lt;br /&gt;&lt;br /&gt;then do the same thing for this extconf.rb in the fastfilereader dir (or anywhere else in the ext dir where there might be more nested extconf.rb files.&lt;br /&gt;&lt;br /&gt;then run this:&lt;br /&gt;&lt;br /&gt;cd /usr/local/lib/ruby/gem/1.8/gem/eventmachine-0.12.11; rake gem:install&lt;br /&gt;&lt;br /&gt;this should solve the issue of getting errors like this:&lt;br /&gt;&lt;br /&gt;make: I.: Command not found&lt;br /&gt;make: dynamic: Command not found&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-2739699341594205983?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/2739699341594205983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=2739699341594205983' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2739699341594205983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2739699341594205983'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/03/mac-os-x-leopard-installing-ruby-gem.html' title='Mac OS X Leopard installing the ruby gem eventmachine'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1628840497545136746</id><published>2010-02-25T17:42:00.000-08:00</published><updated>2010-02-25T18:00:49.582-08:00</updated><title type='text'>The Web needs a language</title><content type='html'>I am now convinced that the Web needs a language of its own. It is not good enough to try and build systems with general purpose computer languages such as Java, C#, Python, or Ruby. Tick, tock, request, response, the collage of technologies that it takes to put together a simple website and backend is a wonderful display of inefficiency. I have seen the future and it is not hacking Javascript or HTML! How many ways can the same Rails app be written doing almost the same thing? Wouldn't it be nice to develop a solution to a problem using one language to express business rules? It seems like the best way to solve this problem is with better tools. New languages are judged on their expressive power, both the computer and human type. Most of the people using the Ruby language, do so because it will be used to generate what is between a couple of html tags.&lt;br /&gt;&lt;br /&gt;I hereby propose that a new language be created that inherently knows the semantics of the web leaves us problem solvers with the ability to apply business log simply and directly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1628840497545136746?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1628840497545136746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1628840497545136746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1628840497545136746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1628840497545136746'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/02/web-needs-language.html' title='The Web needs a language'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-7855791565917355637</id><published>2010-01-06T08:18:00.000-08:00</published><updated>2010-01-06T08:41:27.441-08:00</updated><title type='text'>PHP -- much better than using switch statements</title><content type='html'>PHP's syntax is manic muddled mess. It is not object oriented programming, but there are a few things that make it easy to do things better than the average hacker.&lt;br /&gt;&lt;br /&gt;Function pointers, if you are a C person, Funs, if you are an Erlang cat, Procs or lambdas for Ruby, delegates in C#, lambdas in my beloved Python is what I am talking about.&lt;br /&gt;&lt;br /&gt;PHP too, supports this, but in a completely straight forward way.&lt;br /&gt;&lt;br /&gt;take the following PHP code:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;function iMRichBitch() { compute48thMersennePrime(); }&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;you can simply refer to pass around a reference (or pointer) to 'iMRichBitch' using a string by the same name. Of course, when the function is to be invoked, you simply can say:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$func = 'iMRichBitch';&lt;br /&gt;$func();&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So this begs the question, "if I have function pointers", then I ought to use those instead of case statements and maybe even nested conditionals, right?" The answer is a big 'YES'.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;so instead of this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;switch($conditional) { case 1: do1(); break; case 2: do2(); break; default: break; } &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;you might think about doing this (with a little defensive code for garnishment):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$conditional();&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-7855791565917355637?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/7855791565917355637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=7855791565917355637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7855791565917355637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7855791565917355637'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/01/php-much-better-than-using-switch.html' title='PHP -- much better than using switch statements'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4224314260926619963</id><published>2010-01-03T14:35:00.000-08:00</published><updated>2010-01-03T14:37:33.918-08:00</updated><title type='text'>Lambda Calculus</title><content type='html'>Can anyone fully understand lambda calculus? If so, what would they do with that power?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4224314260926619963?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4224314260926619963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4224314260926619963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4224314260926619963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4224314260926619963'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2010/01/lambda-calculus.html' title='Lambda Calculus'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5176131393660798859</id><published>2009-10-08T15:05:00.000-07:00</published><updated>2009-10-08T15:27:21.287-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='prose'/><category scheme='http://www.blogger.com/atom/ns#' term='the brain'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><title type='text'>Functional Programming</title><content type='html'>Your brain is rolling along on that cold steel track of life. You process item after item, then list after list as if you were the building the chassis for a million robotic arms. Do this, then that, then this. Wake up, shower, go to work, go to lunch, come home, go to bed, rinse and repeat. Suddenly div/0, your brain stops and you forget every pattern that was pitted into your mind. The very wiring of the mind is a melted cacophony of cold snow and bloodied bird feathers. You know not who you are or what you are or why you are. Objects become functions and anonymous functions become parameters. Logic is modeled in actors passing messages. Actors mean nothing beyond what messages they pass. Cars on the highway become mail to mailboxes. Action and nonaction and not being. Colors become transformations yet to be decoded. You are what you do and nothing more. That is the primordial essence of the functional being.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5176131393660798859?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5176131393660798859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5176131393660798859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5176131393660798859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5176131393660798859'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/10/functional-programming.html' title='Functional Programming'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5160995797185969781</id><published>2009-10-05T05:31:00.000-07:00</published><updated>2009-10-05T05:33:54.222-07:00</updated><title type='text'>Reading list</title><content type='html'>I am logging a reading list for myself. Most times, when reading something, the author references another work, so I want to log this list as a must read.&lt;br /&gt;&lt;br /&gt;Joe Armstrong's doctoral thesis&lt;br /&gt;Why do computers stop and what can be done about it. by Jim Gray&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5160995797185969781?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5160995797185969781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5160995797185969781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5160995797185969781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5160995797185969781'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/10/reading-list.html' title='Reading list'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1494407391621361497</id><published>2009-09-30T13:54:00.000-07:00</published><updated>2009-10-01T10:42:29.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='one-liner'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='backreferences'/><title type='text'>Perl one liner, backreferences, displaying only part of a line</title><content type='html'>I like this construct for searching through files in a directory and pulling out part of a line. &lt;br /&gt;&lt;br /&gt;Just add the regular expression. The '?' designates a non-greedy expression, which means the finite statement machine will quit on the first successful match.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;find . -name "*.xml" | xargs perl -ne '/(.*?)"/; print $1; print "\n";'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1494407391621361497?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1494407391621361497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1494407391621361497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1494407391621361497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1494407391621361497'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/09/perl-one-liner-perl-backreferences.html' title='Perl one liner, backreferences, displaying only part of a line'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1411505198469028920</id><published>2009-09-29T06:03:00.000-07:00</published><updated>2009-09-30T08:05:41.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Phoenix'/><category scheme='http://www.blogger.com/atom/ns#' term='Atlanta'/><category scheme='http://www.blogger.com/atom/ns#' term='Moving'/><category scheme='http://www.blogger.com/atom/ns#' term='Autumn'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>What I like about living in Atlanta, GA</title><content type='html'>I recently moved to the Atlanta area. @dneighbors on twitter asked the question "Why Do You Live Where You Live?" It may be that I just love Atlanta, or maybe cause it felt so good to get out of Phoenix. Let me paint a picture for you.&lt;br /&gt;&lt;br /&gt;Here is my perspective. Being born and raised in Phoenix, AZ and then moving to the Atlanta area in my thirties was a monumental change. The culture, weather, terrain are all starkly different. &lt;br /&gt;&lt;br /&gt;Phoenix: hot, dry, dusty, smoggy, transient culture, California rejects, kind-hearted souls, sunburn, sunny days, prickly cacti, rocky moon-like surfaces, smelly dairy farms, cotton fields, traffic cameras, migrants standing on corners, 90 degree low temperatures, blast oven heat in your face from April to November, the sweet smell of jasmine and orange blossoms on spring nights.&lt;br /&gt;&lt;br /&gt;Atlanta: Cool breezes, smell of pine in the air, festivals in the park on beautiful days, a sense of community, long summer days by the pool, peach cobbler, wild rasberries, blackberries, and blueberries growing in summer, smell of chocolate in the spring when the Magnolias bloom, blooming wisteria, azelia flowers, the old narrow streets of mid town, the rolling hills of Atlanta, every street named "peachtree" downtown, the aquarium, the college football, the reddest red of the maples in the fall, the greeniest of green of the pines against the deep blue sky, the "oceans" of kudzu, the brisk autumn breezes delivering a blanket of red, brown, and yellow leaves, the southern hospitality, neighbors helping neighbors, the squirrels, the bright red cardinals, the shady paths in the park, the fireflies, the geese, the deer&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1411505198469028920?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1411505198469028920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1411505198469028920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1411505198469028920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1411505198469028920'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/09/what-i-like-about-living-in-atlanta-ga.html' title='What I like about living in Atlanta, GA'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-7354706881280402637</id><published>2009-09-21T07:23:00.000-07:00</published><updated>2009-09-21T07:40:25.192-07:00</updated><title type='text'>Out of work</title><content type='html'>I recently lost my job. I am looking for a new way to earn a living. I have a couple of leads right now and I am also reading a lot and hacking on some rails apps for some of the business ideas that I have had over the last few years. It feels good to get out of on my own. I am learning about some things that I have wanted to know about for quite some time. Some Erlang topics are really interesting me right now. It would be really nice to start a consulting firm. I have a feeling that jumping into a long term full time job is not the cards right now. &lt;br /&gt;&lt;br /&gt;I had an idea for a documentary. It would follow a small software engineering firm from inception to consulting and producing a piece of software to trying to paid. All the things that small businesses have to deal with. It would cronical the times we live in. Our culture here is very enterprising and this where creative projects go from a concept to a real living thing. I dream that I could be the one who starts the company and filmmakers can just hang around and record everything. I would love to watch that kind of a movie. I was fascinated with the documentary, "The Staircase". I highly recommend this film. These are the best sort of movies, I think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-7354706881280402637?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/7354706881280402637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=7354706881280402637' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7354706881280402637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7354706881280402637'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/09/out-of-work.html' title='Out of work'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-7694051918255776920</id><published>2009-08-14T07:55:00.000-07:00</published><updated>2009-08-14T10:36:48.645-07:00</updated><title type='text'>DNSMASQ and multiple DHCP networks with DHCP relay</title><content type='html'>I switched from MaraDNS to DNSMasq. DNSmasq is an excellent tool for small networks. Small networks are defined as something less than 1000 hosts. This is most networks! I love DNSMasq's simplicity. I also like how it bundles DHCP, DNS recursive server, DNS caching. The DHCP is surprisingly simple to use and configure and incredibly feature-full. For example, the DHCP server handles PXE clients requests for the next server. It also handles requests that are relayed, so you can provide multiple subnets DHCP service and do it based on the tag provided by the relayer. I also like how you can reuse the local (to the DNSmasq) machine's /etc/hosts and /etc/resolv.conf to gather static entries and upstream recursive DNS caches. It seems simple to just reuse these files for the server and clients. You are essentially exporting the server's /etc/hosts and /etc/resolv.conf to your clients.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-7694051918255776920?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/7694051918255776920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=7694051918255776920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7694051918255776920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7694051918255776920'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/08/dnsmasq-and-multiple-dhcp-networks-with.html' title='DNSMASQ and multiple DHCP networks with DHCP relay'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-2839932597140491478</id><published>2009-05-29T06:52:00.000-07:00</published><updated>2009-05-29T07:30:48.802-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tail recursion python marshal serialize'/><title type='text'>Tail recursion in Python</title><content type='html'>Problem: When marshalling an object to be able to transmit to or from an XMLRPC server and the xmlrpc lib is insufficient to the task because the objects within the main object do not implement a marshal method.&lt;br /&gt;&lt;br /&gt;Admittedly the datetime, mxDateTime and None objects should just know what to do if asked by the xmlrpclib to marshal themselves, but in this case, I want to do this myself.&lt;br /&gt;&lt;br /&gt;Answer: Here is a tail recursive way to perform this task. This should not use any stack space, but I cannot confirm this since I am not sure what is going on in the interpreter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   &lt;blockquote&gt;def __convertNonMarshalables(self, obj):&lt;br /&gt;&amp;nbsp;&amp;nbsp;if type(obj) == type({}):&lt;br /&gt;           &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for key, value in obj.items():&lt;br /&gt;           &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    if value is None:&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj[key] = ""&lt;br /&gt;               &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif type(value) is type(mx.DateTime.now()) or type(value) is type(datetime.datetime.now()):&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj[key] = value.strftime('%Y-%m-%d')&lt;br /&gt;               &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif type(value) == type([]) or type(value) == type({}):&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value = self.__convertNonMarshalables(value)&lt;br /&gt;       &amp;nbsp;&amp;nbsp;elif type(obj) == type([]):&lt;br /&gt;           &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for value in obj:&lt;br /&gt;               &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if value is None:&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value = ""&lt;br /&gt;               &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif type(value) is type(mx.DateTime.now()) or type(value) is type(datetime.datetime.now()):&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value = value.strftime('%Y-%m-%d')                  &lt;br /&gt;               &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif type(value) == type([]) or type(value) == type({}):&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value = self.__convertNonMarshalables(value)&lt;br /&gt;       &amp;nbsp;&amp;nbsp;else:&lt;br /&gt;           &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if obj is None:&lt;br /&gt;                   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj = ""&lt;br /&gt;       &amp;nbsp;&amp;nbsp;return obj&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-2839932597140491478?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/2839932597140491478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=2839932597140491478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2839932597140491478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2839932597140491478'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/05/tail-recursion-in-python.html' title='Tail recursion in Python'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-381737803306458098</id><published>2009-05-26T14:14:00.000-07:00</published><updated>2009-05-26T14:21:11.810-07:00</updated><title type='text'>Leopard killed TextMate, sort of</title><content type='html'>Just updated Leopard and now having "#!/bin/sh" in the "command(s)" section of the bundle editor for any bundle yields "bad interpreter: no such file or directory" if I remove the directive, it works fine, but now on the shell bundle, the run command script is a ruby script and TextMate will not take #!/usr/bin/env ruby, yields bad interpreter again, but I really need to tell TextMate this is a ruby script. So I ran the script with ruby -e'do something'. That is weak sauce but it works. I also noticed circular dependencies in the bundles. You need ruby to run a python script in the python bundle; you need bash to run a ruby script, you need ruby to run a shell script.&lt;br /&gt;&lt;br /&gt;I am not sure why this is because the text in command(s) should be treated as a shell script. Anyway, if anyone else has this problem, then removing the shell directive line should help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-381737803306458098?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/381737803306458098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=381737803306458098' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/381737803306458098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/381737803306458098'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/05/leopard-killed-textmate-sort-of.html' title='Leopard killed TextMate, sort of'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1154948116815047884</id><published>2009-03-10T18:20:00.000-07:00</published><updated>2009-03-10T18:21:08.305-07:00</updated><title type='text'>Functionalness</title><content type='html'>An object that has no function does not exist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1154948116815047884?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1154948116815047884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1154948116815047884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1154948116815047884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1154948116815047884'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/03/functionalness.html' title='Functionalness'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4107599031640828495</id><published>2009-03-07T14:58:00.000-08:00</published><updated>2009-03-07T15:58:18.263-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MaraDNS'/><category scheme='http://www.blogger.com/atom/ns#' term='auto adding dns hosts from dhcp'/><category scheme='http://www.blogger.com/atom/ns#' term='DHCP'/><title type='text'>Auto adding DHCP host names to DNS (MaraDNS)</title><content type='html'>Ever wonder why a host that you offer a DHCP lease to just does not automagicly appear in your non recursive DNS server's zone file. Well, it should! Using this "glue" code, it will be a snap to update your zone files whenever a new host joins the network. In this example, I am using MaraDNS and dhcpd.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Overall concept:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: black;color:white;" &gt;dhcpd --&gt; lease file --&gt; cron script --&gt; ruby script --&gt; DNS zone file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cron entry (/etc/cron.d/update_dns):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: black;color:white;" &gt;*/5 * * * * root sh /usr/local/bin/parse_leases_add_to_dns.sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;parse_leases_add_to_dns.sh:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: black; color: white;"&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#check modification time&lt;br /&gt;if [ ! -f /tmp/leases_mod_time ]; then&lt;br /&gt;   touch /tmp/leases_mod_time&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;#see if the last check time is less than mod time&lt;br /&gt;if [ /tmp/leases_mod_time -ot /var/lib/dhcp/dhcpd.leases ]; then&lt;br /&gt;   /usr/local/bin/ruby add_hosts.rb&lt;br /&gt;   touch /tmp/leases_mod_time&lt;br /&gt;fi&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;add_hosts.rb:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: black; color: white;"&gt;leases = open('/var/lib/dhcp/dhcpd.leases')&lt;br /&gt;dns = open('/etc/maradns/kleetus.1337.foo', 'w')&lt;br /&gt;&lt;br /&gt;leases_string = leases.read&lt;br /&gt;lease = ""&lt;br /&gt;client_hostname = ""&lt;br /&gt;&lt;br /&gt;leases_string.each do |line|&lt;br /&gt;   next if line[0..0]=="#"&lt;br /&gt;   unless (line =~ /lease/).nil?&lt;br /&gt;           lease = line.split[1].gsub("\"","").gsub(";","")&lt;br /&gt;   end&lt;br /&gt;   unless (line =~ /client-hostname/).nil?&lt;br /&gt;           client_hostname = line.split[1].gsub("\"","").gsub(";","")&lt;br /&gt;   end&lt;br /&gt;   if client_hostname!="" and lease!=""&lt;br /&gt;           w_string = "#{client_hostname}.% #{lease}"&lt;br /&gt;           dns.write("#{w_string}\n")&lt;br /&gt;           lease = ""&lt;br /&gt;           client_hostname = ""&lt;br /&gt;   end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;statics = ["myth-test.% 10.20.10.120", "*.%     10.20.10.100"]&lt;br /&gt;&lt;br /&gt;statics.each do |line|&lt;br /&gt;   dns.write("#{line}\n")&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;dns.close&lt;br /&gt;&lt;br /&gt;load=`/etc/init.d/maradns force-reload`&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So why are you using a ruby script, can't you just do it all with bash/awk?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sure, but the ruby script is more fun to write and maintain; if you feel the need to use bash, then this is possible too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4107599031640828495?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4107599031640828495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4107599031640828495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4107599031640828495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4107599031640828495'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/03/auto-adding-dhcp-host-names-to-dns.html' title='Auto adding DHCP host names to DNS (MaraDNS)'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-6514442149093837940</id><published>2009-02-23T06:30:00.000-08:00</published><updated>2009-02-23T07:01:11.326-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adamcarolla.com'/><category scheme='http://www.blogger.com/atom/ns#' term='97.1'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='Adam Carolla'/><title type='text'>Adam Carolla</title><content type='html'>If you have never heard of this man, you are for a treat, my friend! Adam is the Quintessential everyman's man. He can be heard &lt;a href="http://carollaradio.com/"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are the reasons why I love Adam Carolla:&lt;br /&gt;&lt;br /&gt;1. He connects with his listeners on a personal level because he doesn't act like some stuck up rich person. He recognizes that most of his listeners are just like he is. He worked construction and cleaned carpet. Now he has means, so it is nice that he can create a portal into the world of Hollywood, but he always remains genuine. He is sincerely connected to "the rest of us".&lt;br /&gt;&lt;br /&gt;2. He is honest. This really should be number 1 on my list. You cannot connect with people if you are phony. People can see through this in a second and radio people are fooling themselves if they think that they put on a persona and retain an audience. Ace Man (Carolla) just puts himself out there, take it or leave it. He has flaws and those flaws can be endearing since we all have them too.&lt;br /&gt;&lt;br /&gt;3. He is observant. This is more than schtick, Adam brings out the truly absurd in our culture. He comes off more genuine that the Seinfeld ("Who are these people") bits. He gets into more counter-culture routines that are really funny. He has one bit where is mimes a strip club MC. Callers will ask him to do an impromptu routine centered around them. Great bit.&lt;br /&gt;&lt;br /&gt;4. Connections. Adam is plugged into Hollywood and its weirdness. He will call out weird shit too. Life is all about relationships. Adam's personality is likeable and most pop culture stars like Adam, so he can leverage this.&lt;br /&gt;&lt;br /&gt;5. Adam is old school So. California. He was born in North Hollywood and lived amoung the regional culture. I find people who talk about subculture amoung the most interesting. I live in Atlanta, so this is far removed from this, but I love to hear about how "the Valley" is like or dislike my area.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-6514442149093837940?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/6514442149093837940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=6514442149093837940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6514442149093837940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6514442149093837940'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/02/adam-carolla.html' title='Adam Carolla'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5813763195454757122</id><published>2009-02-20T14:32:00.000-08:00</published><updated>2009-02-20T14:43:52.451-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ffmpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='TS'/><category scheme='http://www.blogger.com/atom/ns#' term='OTA'/><category scheme='http://www.blogger.com/atom/ns#' term='mpeg2ts'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3G'/><category scheme='http://www.blogger.com/atom/ns#' term='a/v sync'/><title type='text'>How to get ffmpeg to transcode your over the air mpeg2ts to iphone 3G</title><content type='html'>&lt;div&gt; &lt;div class="commentcontent"&gt; &lt;p&gt;I got this figured out, so I thought I would share this with anyone transcoding mpeg2ts (over the air high definition) to something that the iphone 3G can play from a streaming server such as apache. Here is my ffmpeg line: &lt;/p&gt;&lt;pre class="prettyprint"&gt;&lt;span class="pln"&gt;ffmpeg &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;i &lt;/span&gt;&lt;span class="str"&gt;"${directory}/${file}"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;async &lt;/span&gt;&lt;span class="lit"&gt;3&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;r &lt;/span&gt;&lt;span class="lit"&gt;29.97&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;acodec libfaac &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;ar $&lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;rate&lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;ab $&lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;abitrate&lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;ac &lt;/span&gt;&lt;span class="lit"&gt;2&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;s $&lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;width&lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;x$&lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;height&lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;vcodec mpeg4 &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;b $&lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;vbitrate&lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;flags&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt;aic&lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt;mv4 &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;mbd &lt;/span&gt;&lt;span class="lit"&gt;2&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;cmp &lt;/span&gt;&lt;span class="lit"&gt;2&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;subcmp &lt;/span&gt;&lt;span class="lit"&gt;2&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;g &lt;/span&gt;&lt;span class="lit"&gt;250&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;maxrate &lt;/span&gt;&lt;span class="lit"&gt;512k&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;bufsize &lt;/span&gt;&lt;span class="lit"&gt;2M&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;span class="pln"&gt;title &lt;/span&gt;&lt;span class="str"&gt;"${file}"&lt;br /&gt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;"${directory}/${file}.mp4"&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;The key here is to ensure the playback is at no more than 30 frames a second, or your iphone will play like 1 second and then stop...like it can't buffer the stream. Of course, when you do this, you will lose audio/video sync since you just yanked some frames out out the stream, so you need to use -async 3 to fix this; 3 works for me, but you may want to experiment. Also, I am using a recent SVN trunk compilation of ffmpeg with libfaac and xvid enabled in the compilation. This made a huge difference in whether ffmpeg could work with me on this TS file.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now the bash like variables are exactly that, bash variable interpolations. Rate is the sample frequency of the audio...something like 44100 or 48000, abirate is the audio bit rate...something like 128k, the vbirate is not crucial, the video bit rate, something like 480K or 378K. The vbirate will really make the resulting file smallish. The original was prolly 2 or 3 times that. The dimensions usually work out to be 320x240, but I have also used 432x240 with success for 1.78 ratios.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;/div&gt;      &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5813763195454757122?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5813763195454757122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5813763195454757122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5813763195454757122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5813763195454757122'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/02/how-to-get-ffmpeg-transcode-your-over.html' title='How to get ffmpeg to transcode your over the air mpeg2ts to iphone 3G'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-3525510961181894244</id><published>2009-02-20T13:23:00.000-08:00</published><updated>2009-02-20T14:12:38.495-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sonicOS enhanced'/><category scheme='http://www.blogger.com/atom/ns#' term='ipsecuritas'/><category scheme='http://www.blogger.com/atom/ns#' term='sonicwall'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='tz-170'/><category scheme='http://www.blogger.com/atom/ns#' term='tz170'/><title type='text'>Ipsecuritas, Mac OS X, Sonicwall Enhanced Firmware</title><content type='html'>This was a tricky one. I always had some difficulty getting the free IPsecuritas connected; so I am sure others had problems too.&lt;br /&gt;&lt;br /&gt;Using IPsecuritas 3.2 build 2501&lt;br /&gt;MacBook Leopard&lt;br /&gt;&lt;br /&gt;connecting to a:&lt;br /&gt;&lt;br /&gt; &lt;script&gt;document.write(sysStatusObj.model);&lt;/script&gt;TZ 190 Wireless Enhanced&lt;br /&gt;SonicOS Enhanced 4.0.1.3-46e&lt;br /&gt;&lt;br /&gt;Sonicwall side config (straight out of the tech support report)&lt;br /&gt;--- SA 1 ---&lt;br /&gt;Authentication Method : IKE with Preshared secret&lt;br /&gt;VPN Policy Name       : "WAN GroupVPN"; enabled&lt;br /&gt;Policy Type           : Client Policy&lt;br /&gt;Pre-shared Key len    : 14, value=&lt;censored&gt;&lt;br /&gt;IKE Local Id          : UNKNOWN&lt;br /&gt;IKE Remote Id         : ID_FQDN: (GroupVPN)&lt;br /&gt;Local network         : &lt;all&gt;&lt;br /&gt;Peer network          : &lt;all&gt;&lt;br /&gt;IKE Exchange          : Aggressive Mode&lt;br /&gt;IKE Proposal          : DH Group 2; Encrypt/Auth - 3DES/SHA1&lt;br /&gt;IKE SA Life time      : 28800 (seconds)&lt;br /&gt;IPsec Proposal        : DH Group 2; Encrypt/Auth - ESP: 3DES/HMAC SHA1&lt;br /&gt;Ipsec SA Life time    : 28800 (seconds)&lt;br /&gt;Policy Options        : PFS: on; Xauth: on; Netbios: on; Multicast: off&lt;br /&gt;Management            : HTTP: n;  HTTPS: n; SSH: n&lt;br /&gt;XAUTH user group      : Trusted Users&lt;br /&gt;Default LAN gateway   : (0.0.0.0)&lt;br /&gt;VPN policy            : Bound to zone WAN&lt;br /&gt;&lt;br /&gt;WAN GroupVPN Client Settings:&lt;br /&gt;User Name and Password Caching:&lt;br /&gt;   XAUTH User Authentication is Required&lt;br /&gt;   Cache XAUTH User Name and Password on Client: Never&lt;br /&gt;Client Connections:&lt;br /&gt;   Virtual Adapter Settings: DHCP Lease or Manual Configuration&lt;br /&gt;   Allow Connections to Split Tunnels&lt;br /&gt;   Set Default Route as this Gateway is Not Selected&lt;br /&gt;   Apply VPN Access Control List is Not Selected&lt;br /&gt;   Personal Firewall on Client Machine is Not Required&lt;br /&gt;Client Initial Provisioning:&lt;br /&gt;   Use Default Key for Simple Client Provisioning is Selected&lt;br /&gt;-----------------------------&lt;br /&gt;&lt;br /&gt;Now the ipsecuritas config&lt;br /&gt;&lt;br /&gt;General Tab:&lt;br /&gt;--------------------&lt;br /&gt;Remote IPSec Device:   IP or host name of Sonicwall (must be reachable from Internet)&lt;br /&gt;Endpoint Mode:  Host (IP Address left blank)&lt;br /&gt;Remote Mode: Network (Internal LAN network of the Sonicwall, such as 10.0.1.0 CIDR/Mask 24)&lt;br /&gt;&lt;br /&gt;Phase 1:&lt;br /&gt;--------------------&lt;br /&gt;Lifetime: 8 hours&lt;br /&gt;DH Group: 1024 (2)&lt;br /&gt;Encryption: 3DES&lt;br /&gt;Authentication: SHA-1&lt;br /&gt;Exchange Mode: Aggressive&lt;br /&gt;Proposal Check: Claim&lt;br /&gt;Nonce Size: 16&lt;br /&gt;&lt;br /&gt;Phase 2:&lt;br /&gt;--------------------&lt;br /&gt;Lifetime: 8 hours&lt;br /&gt;PFS Group: 1024 (2)&lt;br /&gt;Encryption: 3DES&lt;br /&gt;Authenication: HMAC SHA-1&lt;br /&gt;&lt;br /&gt;ID:&lt;br /&gt;--------------------&lt;br /&gt;Local Identifier: Address&lt;br /&gt;Remote Identifier: FQDN.... just fill in the "Unique Firewall Identifier" from the Sonicwall VPN section&lt;br /&gt;Authentication Method:  XAuth PSK&lt;br /&gt;Preshared Key: &lt;your&gt;&lt;br /&gt;Username: XAuth username&lt;br /&gt;Store Password: checked if you would like the password to be stored&lt;br /&gt;DNS: check "enable domain specific DNS servers"&lt;br /&gt;Domains: fill in your domain name&lt;br /&gt;Name Server Addresses: probably your domain controller ip address&lt;br /&gt;&lt;br /&gt;Options&lt;br /&gt;--------------------&lt;br /&gt;&lt;br /&gt;Check off the following:&lt;br /&gt;IPSec DOI&lt;br /&gt;SIT_IDENTITY_ONLY&lt;br /&gt;Initial Contact&lt;br /&gt;Support Proxy&lt;br /&gt;Request Certificate&lt;br /&gt;Send Certificate&lt;br /&gt;Unique SAs&lt;br /&gt;IKE Fragmentation&lt;br /&gt;&lt;br /&gt;NAT-T disable&lt;br /&gt;do not check "enable connection check"&lt;br /&gt;Action after connection timeout= Give up&lt;br /&gt;&lt;br /&gt;--------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The key for me was Perfect Forward Secrecy was NOT enabled but it should have been! So ENABLE perfect forward secrecy. The reason for this was that IPSecuritas just does PFS without an option to turn it off or on, so you must turn it on, on the Sonicwall. Otherwise you will get "NO PROPOSAL WAS CHOSEN" when trying to negotiate phase 1. Always have your log file open when trying to debug these connections. Also, be wary of mapping multiple networks behind the Sonicwall, each has to build its own contract. Please contact me if you need help with your connection.&lt;/your&gt;&lt;/all&gt;&lt;/all&gt;&lt;/censored&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-3525510961181894244?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/3525510961181894244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=3525510961181894244' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3525510961181894244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3525510961181894244'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2009/02/ipsecuritas-mac-os-x-sonicwall-enhanced.html' title='Ipsecuritas, Mac OS X, Sonicwall Enhanced Firmware'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-6760658909610481060</id><published>2008-12-13T06:46:00.000-08:00</published><updated>2008-12-13T07:10:51.192-08:00</updated><title type='text'>UAW and the first qid pro quo for the Obama Administration</title><content type='html'>Let's call this bail out what it really is and stop insulting the electorate's intelligence. This is the first payment to the most powerful of Obama's supporters. The UAW had the unmitigated gall to send Obama a bill for services rendered. So now, we all get to sink billions into car companies that have not been competitive since the 1960's. Kleetus' message to the Big Three. You lost! You were beaten! Have some diginity and go do something else! But neigh, what are the car companies and their allies doing? If we can't beat Toyota and Honda by making cars people actually want to buy, we will just finance politicans' campaigns and send them a bill afterwards to get free money. We can spin this thing saying that "wouldn't it be terrible if millions that we employ lost their jobs"? Guess what? After you receive the bail out money, and you will, you will STILL go out of business, you dopes! If you couldn't build cars that people wanted to buy before in a good economy, what makes you think that you can suddenly be competitive with other car makers in this economy? Who is going to buy your cars now that you are on the brink of going under?  Do you think that we will keep printing money for you all indefinitely? I would think not.&lt;br /&gt;Let's just cut to the chase on this bail out and call it what it is; it is taking money from hard-working people in places not Michigan and sending it to Michigan and places under the thumb of the UAW. This is government highway robbery. This is the cost of the electorate not paying attention. This collective cost of not knowing sh** about your government is that "Tony Soprano" types in the unions and inept CEO's in Detroit get YOUR money. I think when Obama said "Change you can believe in", he was speaking DIRECTLY TO DETROIT! Translated less muddled, "Believe me guys, I will be sending you change, bags and bags of it". These guys are thieves and they have Obama in their pockets. Really they have the House and Senate leadership since Obama really has no power and will only be a puppet for the unions and trial lawyers. Maybe we ought to petition these groups for the next 4 years?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-6760658909610481060?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/6760658909610481060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=6760658909610481060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6760658909610481060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6760658909610481060'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/12/uaw-and-first-qid-pro-quo-for-obama.html' title='UAW and the first qid pro quo for the Obama Administration'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-438920636381792723</id><published>2008-12-13T06:38:00.001-08:00</published><updated>2009-09-16T08:30:41.030-07:00</updated><title type='text'>What is with that title?</title><content type='html'>Logic programming is the culmination of mathematics and its study of natural patterns. Prolog functional programming is the language in which to express these patterns and process them in the most powerfull mechanical computing machine possible; The Turing Machine. Rather, a physical machine that closely resembles Alan Turing's machine. The title of this blog represents a rule or a statement evaluating to true that can be processed unambiguously by a machine of my choosing. The things written here aim to be unambiguous and truthful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-438920636381792723?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/438920636381792723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=438920636381792723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/438920636381792723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/438920636381792723'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/12/what-is-with-that-title.html' title='What is with that title?'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-9032251898170903152</id><published>2008-10-08T05:10:00.000-07:00</published><updated>2008-10-08T05:18:45.850-07:00</updated><title type='text'>Cell Annoyances: Simple, Clear, Direct, and Concise</title><content type='html'>Found this article &lt;a href="http://db.tidbits.com/article/9796"&gt;"Peering Inside a Mobile Phone Network"&lt;/a&gt; written by  &lt;a href="http://db.tidbits.com/author/Rich%20Mogull"&gt;Rich Mogull&lt;/a&gt;. It was very well written and cleared up some things that I did not know about the cell networks. I had the grave misconception that the cell networks are like IP networks; oh no sir. The truth is that they are much different. The article sort of takes the view that we (users of these networks) should think about cutting the operators and designers of these networks some slack. I say no way on that. Not our (users of these networks) fault that the cell networks are woefully inadequate to the task. Alas, the article described (from a very high level) what was taking place and it is worth a read even if you are very technical already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-9032251898170903152?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/9032251898170903152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=9032251898170903152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/9032251898170903152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/9032251898170903152'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/10/cell-annoyances-simple-clear-direct-and.html' title='Cell Annoyances: Simple, Clear, Direct, and Concise'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-6953206205730851338</id><published>2008-09-18T06:42:00.000-07:00</published><updated>2008-09-18T06:53:38.054-07:00</updated><title type='text'>Python Code:: Sort by Key and Subkey in a List of Dictionaries</title><content type='html'>Here is a semi clear way to perform this function. There is probably a more elegant way to do this or even some snazzy library method, but this shows some of the guts of how this might be done. I am confident this can be rewritten to perform this is linear time or better. Again this is quick and dirty, like "Ah crap, I need this now and I can optimize later" type of thing:&lt;br /&gt;&lt;br /&gt;def sortResults(self, unsort_rs, orderby, desc, subsortkey=None):&lt;br /&gt;&amp;nbsp;&amp;nbsp;        list_rs = list(unsort_rs)&lt;br /&gt;&amp;nbsp;&amp;nbsp;        result_rs = sorted(list_rs, key=itemgetter(orderby))&lt;br /&gt;&amp;nbsp;&amp;nbsp;        if subsortkey:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            sub_list, complete_list = [], []&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            for i in xrange(len(result_rs)):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                sub_list.append(result_rs[i])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                    if result_rs[i+1][orderby] != result_rs[i][orderby]:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                        complete_list += sorted(sub_list, key=itemgetter(subsortkey))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                        sub_list = []&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                except IndexError:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                    complete_list += sorted(sub_list, key=itemgetter(subsortkey))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            result_rs = complete_list&lt;br /&gt;&amp;nbsp;&amp;nbsp;        if desc == 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;            result_rs.reverse()&lt;br /&gt;&amp;nbsp;&amp;nbsp;        sorted_rs = tuple(result_rs)&lt;br /&gt;&amp;nbsp;&amp;nbsp;        return sorted_rs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-6953206205730851338?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/6953206205730851338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=6953206205730851338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6953206205730851338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6953206205730851338'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/09/python-code-sort-by-key-and-subkey-in.html' title='Python Code:: Sort by Key and Subkey in a List of Dictionaries'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-7929287207410219080</id><published>2008-08-20T07:48:00.000-07:00</published><updated>2008-08-20T07:57:22.036-07:00</updated><title type='text'>Ipsecuritas, must allow ICMP, MAC OS X VPN</title><content type='html'>So we had this box nonstop pinging a server. This IP was private, so it was easy to tell it was from the VPN zone of the firewall, but I could not tell why someone was doing this. So I filtered this out and waited for the calls to come in. Well, the call came in about someone getting time outs from this server when pulling web traffic across the VPN. Surely, web traffic has nothing to do with ICMP that I filtered. Well, I would be WRONG. It turns out that Ipsecuritas VPN client uses a nonstop ping (once every 3 seconds) to a LAN host that it previously had traffic to in order to keep its tunnel open. Otherwise, IPsecuritas (client side) will tear the tunnel down. Game over for the VPN connection. Bunk! Shame on you Ipsecuritas (or Apple), are you so ghetto that you need to do this? It just seems so bush league. From a sysadmin point of view, you can't think of a better way to do this? How about a proper keep alive packet to the firewall?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-7929287207410219080?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/7929287207410219080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=7929287207410219080' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7929287207410219080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7929287207410219080'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/08/ipsecuritas-must-allow-icmp-mac-os-x.html' title='Ipsecuritas, must allow ICMP, MAC OS X VPN'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-8981336047733026326</id><published>2008-08-14T06:17:00.000-07:00</published><updated>2008-08-14T06:27:14.187-07:00</updated><title type='text'>Sharing stuff</title><content type='html'>Ok, how can I be of service to someone else? How can I enrich someone else life? How can I ease the suffering of others? These are the questions that I ask in my life. In pursuit of this, I think about experiences that I have had. For some reason, I think it noble to impart any scraps of wisdom that I have picked up along the way. Maybe, I can impart wisdom in the fashion of, "hey I did this and it hurt, so be smart and don't do it, at least not like I did". &lt;br /&gt;&lt;br /&gt;With all this in mind, I am going start a series of "Life on nuclear submarine", so that people can get a sense of the tribulations being a crew member. This was a time when I was constantly undergoing strife. Maybe lessons can be taught about not being a sailor, or maybe there are just lessons about being in close proximity to 100 other men.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-8981336047733026326?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/8981336047733026326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=8981336047733026326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/8981336047733026326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/8981336047733026326'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/08/sharing-stuff.html' title='Sharing stuff'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5257536381718917624</id><published>2008-08-13T08:08:00.000-07:00</published><updated>2008-08-13T08:12:45.243-07:00</updated><title type='text'>Bikes for Christmas</title><content type='html'>So I started this charity project called "www.bikesforchristmas.org". I totally forgot to explain what that was on this forum. Maybe some marketing value will come my way. Here is the thing: It is just me giving bikes away for Christmas. That's it. You got a youngster that needs a new bike, just sign up and I will provide. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bikesforchristmas.org"&gt;Get a bike!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5257536381718917624?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5257536381718917624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5257536381718917624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5257536381718917624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5257536381718917624'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/08/bikes-for-christmas.html' title='Bikes for Christmas'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-2985929358212690978</id><published>2008-08-03T15:00:00.001-07:00</published><updated>2008-08-03T15:44:04.255-07:00</updated><title type='text'>Bacula: Understanding its Pool Resources</title><content type='html'>I back up about 20 different data sets daily. Each set exists on a separate machine somewhere on our network. I struggled a bit to get Bacula to do what I wanted it to do. Maybe I was looking at the problem wrong, but I felt as though I should formulate my own back up strategies and work with Bacula's configuration to devise the tactics. It seems that you should strategize around Bacula's common usage to make it easier on yourself. Bunk! Bacula does the job, but you need to understand the configuration settings well to get Bacula to do what you really want it to. &lt;br /&gt;&lt;br /&gt;First, the pool resource section of the bacula director configuration is a good place to start. This is the stuff I monkey with the most. &lt;br /&gt;&lt;br /&gt;My strategy (not thinking about how Bacula does things). I want the following:&lt;br /&gt;&lt;br /&gt;1. on the first Monday of the month I want a FULL backup of all data sets. &lt;br /&gt;2. on the 3rd Monday, I want a differential backup everywhere&lt;br /&gt;3. every night other than those two, I want incrementals done. &lt;br /&gt;4. I want a pool for each machine (each data set).&lt;br /&gt;5. I want a maximum of 2 volumes written for each data set&lt;br /&gt;6. the data set will be a month of backups (FULL backup, incrementals, differential, incrementals)&lt;br /&gt;7. once 2 volumes are written out in the above nature, I want the oldest volume recycled. This gives us 2 full months of backups, at best and 1 full month backup at worst, depending on where we are in the backup cycle.&lt;br /&gt;&lt;br /&gt;To make this happen, you must do the following:&lt;br /&gt;&lt;br /&gt;1. set your "Maximum Volumes" to 2 for all the pools (in pools resource section of bacula-dir.conf)&lt;br /&gt;2. set your "Volume Use Duration" to 1 month.&lt;br /&gt;3. set your "RecycleOldestVolume" to yes&lt;br /&gt;4. set your "Recycle" to yes&lt;br /&gt;5. set your "Purge Oldest Volume" to no&lt;br /&gt;6. set your "AutoPrune" to yes&lt;br /&gt;7. I recommend letting bacula auto-name your Volumes. I mean the pool has a descriptive name, so who cares what the volume is named? So set "LabelFormat" to "vol"&lt;br /&gt;&lt;br /&gt;Then g'head and fire off your backups for a month. Then come back to the config and change one setting once your pools each have 2 volumes written in them. In this case 32 days after starting your backups. In bacula-dir.conf change the setting for "Purge Oldest Volume" to yes by doing the following:&lt;br /&gt;&lt;br /&gt;1. edit your bacula-dir.conf file for each pool and restart the bacula director.&lt;br /&gt;2. update each Volume in the already written volumes to honor this by issuing a "update volume" at the bconsole and changing this parameter for each volume. &lt;br /&gt;&lt;br /&gt;Now you have a self-rotation backup schedule that will maintain itself, more of less.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-2985929358212690978?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/2985929358212690978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=2985929358212690978' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2985929358212690978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/2985929358212690978'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/08/bacula-understanding-its-pool-resources.html' title='Bacula: Understanding its Pool Resources'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4064611254648786397</id><published>2008-07-31T08:13:00.000-07:00</published><updated>2008-07-31T09:44:32.718-07:00</updated><title type='text'>VirtualBox PXE Boot or VirtualBox PXE / TFTP</title><content type='html'>Just started using Sun's VirtualBox. VMware, Parallels ought to shaking in their closed sourced boots. It was easier to install and configure than Parallels and VMware and is FREE (as in beer). Sun even released a open source version. Parallels is such a bane running on Mac OS X, but VirtualBox seems to run smoother. I was even able to PXE boot a guest OS without using a floppy image like I have to do with my older version of Parallels. &lt;br /&gt;&lt;br /&gt;A couple of things make VirtualBox different than other hypervisors. First, at least on the mac version of VirutalBox (VB), the networking differs in the following ways. This is in the manual too.&lt;br /&gt;&lt;br /&gt;1. The network between the host OS (the OS that is native to the machine and that VB is installed on) and the guest OS (the OS that you are installing inside VB) is implemented in user mode. What this means is that VB does not reach into the host OS kernel and try to glob onto the network stack, Instead, VB just takes network traffic from its guest OS's and sends it the same way any other app on the host does. VB decided to do this using NAT by default. So VB just needs to present one logical "port" to the host OS for the network. So you can think of the VB hypervisor as a router, just like the one you may use at home to have multiple computers behind a cable/DSL modem. So the hypervisor has the ip of the host OS and it masquerades all its guest OS's as this ip. Pretty easy, makes sense, but definitely less convenient.&lt;br /&gt;&lt;br /&gt;2. You can "bridge" the network connections to your guest OS's too. This is more common in paravirualization and virtualization. There are directions to do this in the manual. There appears to be no way to do this for VB for Mac OS X (using VB on Mac OS X host OS). Oh well, maybe in later versions. You can still port forward while you use NAT. I would not need this feature at this time anyway.&lt;br /&gt;&lt;br /&gt;3. I installed VB on Mac OS X host OS and then PXE booted the debian etch installer and noted some things that can save you some troubleshooting time. First, you must make a TFTP directory and copy your debian installer files and pxelinux.0 image there. Also, and this tripped me up good, you CANNOT pxe boot into an image that has a space in it. For example, I named my VB image "warehouse image". So when pxelinux tried to go and find its configuration (by default: pxelinux.cfg/), VB passed it a directory prefix of "warehouse" WITHOUT the 'image" part. Bad news. I renamed the image to just "warehouse" and it worked. So here is the list of what to do to make VB PXE boot.&lt;br /&gt;&lt;br /&gt;a. create an image in VB (be sure not to use white space in image name, use foo and NOT foo bar)&lt;br /&gt;b. configure the boot options to boot from network&lt;br /&gt;c. create a new directory called TFTP in ~/Library/VirtualBox/&lt;br /&gt;d. on your mac, rename "pxelinux.0" to foo.pxe and copy it to ~/Library/VirtualBox/TFTP/&lt;br /&gt;e. copy the entire directories of pxelinux.cfg and debian-installer to ~/Library/VirutalBox/TFTP/&lt;br /&gt;f. the pxe system can be obtained from debian in a netboot file called netboot.tar.gz (this contains all the files you need to pxe boot into a debian installer).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A couple of things I noted AFTER debian was installed and I reboot into it. I reboot after everything was installed and since it was set to network boot before, it tried to network boot again. This time, it got an IP from the internal VB dhcp server (yes, the hypervisor runs an internal dhcp server), it then found the tftp (next server) and boot attempted to find a configuration inside pxelinux.cfg but COULD NOT because "TFTP server does not support the tsize option". OK so I let it sit and about 10 minutes later, it booted anyway! I have seen this tsize error before and it is well documented in the pxelinux FAQ's. They recommend using a TFTP server that supports the tsize option such as "tftpd-hpa", but why the VB tftp server worked before, but not after the debian install is a mystery. Installing an OS should not have anything to do with this tftp server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4064611254648786397?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4064611254648786397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4064611254648786397' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4064611254648786397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4064611254648786397'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/07/virtualbox-162-on-mac-os-x-pxe-boot.html' title='VirtualBox PXE Boot or VirtualBox PXE / TFTP'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4551645078537313072</id><published>2008-06-24T06:56:00.000-07:00</published><updated>2008-06-24T07:04:07.688-07:00</updated><title type='text'>Ruby -- How to turn a csv file into a list of has</title><content type='html'>There are convenience libraries for this type of thing, but I thought I would plunk down my solution. &lt;br /&gt;Say you have a csv string and you need to just turn it into a proper Ruby data structure. A list of hashes would be nice since this is the same type of data structure you typically work with when you query a DBMS. Here is a function to do this.&lt;br /&gt;&lt;br /&gt;def turn_csv_into_list_of_hashes(string)&lt;br /&gt;&amp;nbsp;&amp;nbsp;returned_list = []&lt;br /&gt;&amp;nbsp;&amp;nbsp;#the first line should be header&lt;br /&gt;&amp;nbsp;&amp;nbsp;rows = string.split("\n")&lt;br /&gt;&amp;nbsp;&amp;nbsp;header = rows.shift.split(',')&lt;br /&gt;&amp;nbsp;&amp;nbsp;rows.each do |row|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row_hash = {}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row.split(",").each_with_index { |item, i| row_hash[header[i]] = item }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;returned_list &lt;&lt; row_hash&lt;br /&gt;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;&amp;nbsp;&amp;nbsp;return returned_list&lt;br /&gt;end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4551645078537313072?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4551645078537313072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4551645078537313072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4551645078537313072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4551645078537313072'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/06/ruby-how-to-turn-csv-file-into-list-of.html' title='Ruby -- How to turn a csv file into a list of has'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1074973087411560318</id><published>2008-06-12T05:50:00.000-07:00</published><updated>2008-06-12T05:55:54.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang movie'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>Erlang movie and other cultural turning points</title><content type='html'>Not sure if you've seen it. &lt;a href="http://video.google.com/videoplay?docid=-5830318882717959520"&gt;The Erlang movie &lt;/a&gt;shatters all notions of what human beings can accomplish with a bit of film, some astounding acting, and a script that descended right out of heaven. There are two time periods in human evolution, pre and post Erlang movie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1074973087411560318?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1074973087411560318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1074973087411560318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1074973087411560318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1074973087411560318'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/06/erlang-movie-and-other-cultural-turning.html' title='Erlang movie and other cultural turning points'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1036000298054524843</id><published>2008-06-03T04:48:00.000-07:00</published><updated>2008-06-05T05:58:22.075-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shells'/><title type='text'>How environment variables really work (in POSIX systems)</title><content type='html'>Environment variables are strange animals, straddling the system (not kernel) and the application world. I will use the analogy from the movie "The Matrix". If you have not seen "The Matrix", stop reading this and run to a video procurement establishment and get it. In the Matrix, Morpheus shows Neo "the construct". This was a blank space or "environment" from which to load anything they needed. From huge racks of guns to grenades to cool leather jackets and sunglasses.&lt;br /&gt;From that environment, they could have all the tools they needed to take on the agents. The supplies would always be there in the no matter where they went inside the matrix. This an excellent example of what environment variables really are. They are containers or "racks" that hold stuff or "information" so that actors (like the real actors) can use when inside the environment (matrix).&lt;br /&gt;In POSIX systems like Linux, there are some rules that we must know about to know where and when environment variables are loaded.&lt;br /&gt;Environment variables cannot just hang out without "being hosted" by another application. In Linux, there is ALWAYS a hierarchy of processes (applications, if you like). The Linux kernel is the mac daddy "process", but it is not a process per se because it runs entirely in a space that humans cannot access. I brought up the kernel as process because it really does run on the computer and launches the real first usable process called: init. Init is always process number 1 and ends up spawning all the other processes in the system such as X11, sshd, everything that runs in userspace. If you are a knowledgeable in Linux topics, you may have noticed some holes in the above, but for beginners, this explanation will give a decent primer.&lt;br /&gt;Generally, applications in the Linux world know about the concept of environment variables and can make use of them, but the init process is different. It does not know about environment variables (because essentially there is no environment when it starts, except from the kernel). On the other hand init does know about arguments that are sent in  before the kernel is booted. If you launch the kernel such as: vmlinuz foo=bar, the kernel will boot, examine the key foo, discover foo means nothing to the kernel and send foo=bar to the init process.&lt;br /&gt;So init is special because it has no traditional environment. When init "spawns" its processes as dictated by init scripts or configuration in inittab, those processes will launch what is known  as an interactive or non-interactive shell. This is where, I think, people get confused.&lt;br /&gt;&lt;br /&gt;Now, the below information is sort of BASH concentric. This is the primary shell these days for Linux/Unix type systems. Lots and lots of people use other shells too, but if you are reading this, you probably are not interested in learning other shells other than BASH. The concepts for the other shells are surprisingly similar, but read slightly different files.&lt;br /&gt;&lt;br /&gt;There are only two types of shells that you can have in a Unix-type system: interactive and non-interactive. The difference between interactive and non-interactive shells is that interactive shells involve a human or a process that needs the same things as a human would need when working inside a bash shell, for example. In other words, interactive shells require that something interact with the shell directly and not simply fork off and do its own thing.&lt;br /&gt;&lt;br /&gt;Interactive shells:&lt;br /&gt;&lt;br /&gt;To further confuse the issue, there are two types of interactive shells, login and non-login. Now pay attention, this is the good part. The files that interactive login shells read and interactive non-login shells read are DIFFERENT. This is why you should care to read this section. Let's look at the files that login shells read:&lt;br /&gt;&lt;br /&gt;/etc/profile&lt;br /&gt;~/.bash_profile&lt;br /&gt;~/.bash_login&lt;br /&gt;~/.profile&lt;br /&gt;&lt;br /&gt;These files are read in that order. Other files can be read, but they will be referenced in the above files. Now long timers might exclaim:&lt;br /&gt;"But what about if you run bash with the command 'sh' and use --norc option."&lt;br /&gt;To this I say fooey. We aren't remaking the bash man page here.&lt;br /&gt;&lt;br /&gt;For non-login shells (we are still interactive here) these files are read:&lt;br /&gt;&lt;br /&gt;~/.bashrc&lt;br /&gt;&lt;br /&gt;You might be asking when an interactive non-login shell might be used. Well, that is an excellent question. Non-login shells are used when you already are logged into a shell or even X and you need another interactive shell from which to launch scripts or issue commands. The system assumes that you do not need to reload /etc/profile or the above list because it loaded when you logged in! Now you might ask, so what if I changed something in my /etc/profile, but now I need the new variable and it is not there? This is because when you launched the shell, it was a interactive *non-login* shell. So now you are thinking "Christ, why so complicated?" No answer for that one, but you are singing to the choir, brother/sister. There are two things you can do for this.&lt;br /&gt;1. The application you are starting may have an arg that allows a login shell startup....xterm does by launching, xterm -ls&lt;br /&gt;2. Just throw your environment variables in an rc file such as ~/.bashrc and call it a day.&lt;br /&gt;For number 2, I am sure shell purists are just ready to shoot me, but you know what? The whole thing is overly complex and kind of silly, so my theory is understand how the system works and then make it work the way you think it should and tell people why your system is better. If your way is not better, than people will fill you in as too why.&lt;br /&gt;&lt;br /&gt;Non-interactive shells&lt;br /&gt;&lt;br /&gt;A non-interactive shell would be for system "users", such as a web server, mail server, or a cron daemon. We like to put these users of the system into a shell environment where they can have just as much access to the system as they need to do their jobs and no more. They do not get to read /etc/profile because:&lt;br /&gt;1. There is stuff in there about a human's environment (where the games are, possibly) and is of no consequence to them.&lt;br /&gt;2. We do not want them knowing too much. If a cracker were to compromise that account. We do not want too much info there in that construct.&lt;br /&gt;When you think of non-interactive shells, think of launching a shell script or running a PERL/Ruby/Python script from the shell. Also, you can think of your rc scripts that run when the system is booted. Those scripts still need an environment to work from, but should not be given the same environment as your bash prompt. You can also have non-interactive login and non-interactive non-login scripts. Wow this is confusing. The difference in the non-interactive context is that the login version simply looks to read:&lt;br /&gt;&lt;br /&gt;/etc/profile&lt;br /&gt;~/.profile&lt;br /&gt;&lt;br /&gt;and the non-login version looks for a $BASH_ENV environment variable and attempts to source this file. The $BASH_ENV variable must have the full path because there is no $PATH in this environment, yet.&lt;br /&gt;&lt;br /&gt;Bottom line for this post is that environment variables can be absolutely maddening. If you understand the constraints of the types of environments that you can have (interactive, non-interactive), then this goes a ways in figuring out where you variables will be loaded from and when. To help yourself keep all of this straight, I recommend one of two things.&lt;br /&gt;&lt;br /&gt;1. make a cheat sheet for yourself.&lt;br /&gt;2. memorize this info (or at least some of it) by taking an hour and experimenting with your shell.&lt;br /&gt;&lt;br /&gt;The way shells and environments were laid out is very difficult to keep straight, but if you do not have the gumption to redesign it all, then I hope this post helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1036000298054524843?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1036000298054524843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1036000298054524843' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1036000298054524843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1036000298054524843'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/06/how-environment-variables-really-work.html' title='How environment variables really work (in POSIX systems)'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-3728651026210354984</id><published>2008-06-01T18:37:00.000-07:00</published><updated>2008-06-03T08:18:05.015-07:00</updated><title type='text'>Rails Conf -- Impressions</title><content type='html'>Really smart people, but unfortunately most were reinventing the wheel. Some knew they were creating things already available, but didn't care; others toiled needlessly. &lt;a href="http://obiefernandez.com/"&gt;Obie's&lt;/a&gt; talk was clearly the best by pointing out that using your abstractions properly is clearly something to be valued.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Ruby VM's are not interesting. At least not to me. If you want a VM like the JVM, just use the JVM, you will be much happier in the end and maybe get to enjoy life more. Creating a faster/multi-threaded VM is a good learning experience, but does not mean much even in the short term.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Ruby does nothing for software safety than any other imperative computer codes. Although Ruby "makes programmers happy", this does not mean a hill of beans in improving our customers lives. If happy programmer == well-tested code that meets the specs, then great. But as &lt;a href="http://obiefernandez.com/"&gt;Obie Fernandez&lt;/a&gt; points out, this is not frequently the case. Living the 80/20 rule through a world full of broken code stinks. I really like some of the research going on to allow Ruby to make applications that more concurrent, fault tolerant, and still be, well, Ruby. I hope some of these things make it into Rails Conf next year. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-3728651026210354984?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/3728651026210354984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=3728651026210354984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3728651026210354984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/3728651026210354984'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/06/rails-conf-impressions.html' title='Rails Conf -- Impressions'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1789979828266115270</id><published>2008-05-30T10:20:00.000-07:00</published><updated>2008-05-30T10:31:57.274-07:00</updated><title type='text'>Rails Conf -- Joel Spolsky</title><content type='html'>I really liked Joel's keynote at Rails Conf 2008. I have always read Joel on Software and thought he was a kool aid drinking Microsoft guy, but he did not come off as such. He was thoughtful and practiced. More later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1789979828266115270?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1789979828266115270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1789979828266115270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1789979828266115270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1789979828266115270'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/05/rails-conf-joel-spolsky.html' title='Rails Conf -- Joel Spolsky'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-641349661809518784</id><published>2008-05-17T09:00:00.000-07:00</published><updated>2008-05-17T09:15:32.409-07:00</updated><title type='text'>Apple "regedit"/ changing Terminal.app default settings</title><content type='html'>There was not much on google for this. I recently clicked the "Use Settings as Defaults" in the "Window Settings" in Terminal.app for Mac OS X 10.4.11. This screwed me over because I was secure shelled into a remote machine at the time. What this did was save the last execution string in the Mac OS X defaults settings. So then every time I launched terminal, it would ssh into that last server! Bunk.&lt;br /&gt;&lt;br /&gt;Well, I did not know about the whole "defaults" command in Mac OS X, I was looking for some config file in my home directory to no avail. Terminal.app is a system binary that squirrels away its settings in the internal os database. To fix this issue, you must access this internal database using the "defaults" process. Here is the exact syntax:&lt;br /&gt;&lt;br /&gt;defaults read | less    &lt;------in less: hit '/' and type in: ssh -l, once you find the "section" label&lt;br /&gt;defaults write com.Apple.Terminal ExecutionString ""&lt;br /&gt;&lt;br /&gt;now we have knocked this problem out. This will also allow you to alter all kinds of things in your os.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-641349661809518784?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/641349661809518784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=641349661809518784' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/641349661809518784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/641349661809518784'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/05/apple-regedit-changing-terminalapp.html' title='Apple &quot;regedit&quot;/ changing Terminal.app default settings'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-8000205980607956819</id><published>2008-04-23T10:11:00.000-07:00</published><updated>2008-04-23T10:49:19.938-07:00</updated><title type='text'>How to take a bootable CDROM image and allow a PXE client to boot from it</title><content type='html'>This took me awhile to figure this out. I had 30 clients that booted from a cdrom (they did not have an internal hard drive). They all ran the same cdrom image. When my company needed to expand, I thought it best to choose a thin client with no moving parts (this is a dusty dirty environment where the acidic dust wears bearings out!). The new thin clients have no hdd or cdrom, they must boot from the network. This cdrom image is proven over time and I wanted to continue to use it. Here is what I did:&lt;br /&gt;Considerations: This is a linux/GNU environment, other OS are not considered.&lt;br /&gt;1. Created a server to boot from (PXE server, DHCP server, NFS server)&lt;br /&gt;2. Made a copy of the cdrom and mounted the copy, such as: # mount -t iso9660 /dev/cdrom /mnt/cdrom&lt;br /&gt;3. Ensure /mnt/cdrom is readable by the world, such as: # chmod -R 754 /mnt/cdrom&lt;br /&gt;TFTP/PXE setup&lt;br /&gt;1. You will need to ensure that you have an initrd that will "do the right thing" when the linux kernel that boots from PXE. Here are the steps to manually recreate a initrd, this is not too hard:&lt;br /&gt;a. Mount your initrd someplace, such as: # mount -o loop /boot/initrd  /tmp/initrd&lt;br /&gt;b. This  image is read-only so you will need to copy it out and then edit it, such as: # tar cpvf initrd.tar /tmp/initrd &amp;amp;&amp;amp; tar xvf initrd.tar /tmp/initrd_new&lt;br /&gt;c. So now edit the 'linuxrc' or whatever your initrd uses as a 'init' script (the script that gets everything going).&lt;br /&gt;d. when you edit this linuxrc, you will need to nfs mount the location that contains the files from the cdrom you mounted, such as: # nfsmount x.x.x.x:/mnt/cdrom&lt;br /&gt;e. now create your new initrd image for use to pxe boot, such as: #mkfs.initrd initrd_new initrd&lt;br /&gt;f. now put this initrd into where your pxe server expects it to be&lt;br /&gt;FINALLY:&lt;br /&gt;Reboot your computer into the same image that is tested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-8000205980607956819?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/8000205980607956819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=8000205980607956819' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/8000205980607956819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/8000205980607956819'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/04/how-to-take-bootable-cdrom-image-and.html' title='How to take a bootable CDROM image and allow a PXE client to boot from it'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-7848284331918401276</id><published>2008-04-17T07:27:00.000-07:00</published><updated>2008-04-17T07:33:12.844-07:00</updated><title type='text'>Deleting all messages in an Exim4 queue</title><content type='html'>All that is needed in this line is to substitute a pattern to find the messages you want:&lt;br /&gt;&lt;br /&gt;mailq | sed -n '/\*\*\*/p' | awk '{print $3}' | xargs exim -Mrm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-7848284331918401276?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/7848284331918401276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=7848284331918401276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7848284331918401276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7848284331918401276'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/04/deleting-all-messages-in-exim4-queue.html' title='Deleting all messages in an Exim4 queue'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-6679677814274140558</id><published>2008-03-26T08:26:00.001-07:00</published><updated>2008-03-26T08:33:52.213-07:00</updated><title type='text'>Python: How to find a list of keys for a given value in a dictionary</title><content type='html'>Here is a straight-forward, easy to understand way to find a list of keys in a dictionary for a given value (that may or may not be in the dictionary)&lt;br /&gt;&lt;br /&gt;def GetListOfKeysForGivenValueInDict(dictionary,value):&lt;br /&gt;&amp;nbsp;&amp;nbsp;keys = []&lt;br /&gt;&amp;nbsp;&amp;nbsp;for k,v in dictionary.items():&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if v == value:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keys.append(k)&lt;br /&gt;&amp;nbsp;&amp;nbsp;return keys&lt;br /&gt;&lt;br /&gt;usage:&lt;p&gt;&lt;br /&gt;  dictionary = {1:2,3:4,5:4}&lt;br /&gt;  value = 4&lt;br /&gt;  keys_list = GetListOfKeysForGivenValueInDict(dictionary, value)&lt;br /&gt;  print keys_list&lt;/p&gt;&lt;p&gt;&lt;br /&gt;result:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;  [3,5]&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-6679677814274140558?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/6679677814274140558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=6679677814274140558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6679677814274140558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6679677814274140558'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2008/03/python-how-to-find-list-of-keys-for.html' title='Python: How to find a list of keys for a given value in a dictionary'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-6244373790717701387</id><published>2007-12-03T12:42:00.000-08:00</published><updated>2007-12-03T12:44:23.778-08:00</updated><title type='text'>How to write custom rules for spamassassin</title><content type='html'>How to configure the spam filter for custom rules&lt;br /&gt;&lt;br /&gt;do you really need to do this?&lt;br /&gt;&lt;br /&gt;answer: if the customer is getting spam that is solicted or unsolicted and it is not marked spam and the customer is concerned, then yes. It is best to leave the filter alone until really needed because the kind of change you will be making will be global&lt;br /&gt;&lt;br /&gt;   * Ssh into your mail server and gain root privileges&lt;br /&gt;   * edit /etc/mail/spamassassin/local.cf&lt;br /&gt;   * add filters to the bottom of the file indicating your filter text&lt;br /&gt;   * here is an example that would work for marking email containing the phrase "foo bar is king" as spam:&lt;br /&gt;&lt;br /&gt;body    NO_FOO    /foo bar is king/i&lt;br /&gt;&lt;br /&gt;score   NO_FOO    5.0&lt;br /&gt;&lt;br /&gt;   * save off local.cf&lt;br /&gt;   * restart the spam filter as such:&lt;br /&gt;&lt;br /&gt;/etc/init.d/spampd restart (this depends on your implementation)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-6244373790717701387?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/6244373790717701387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=6244373790717701387' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6244373790717701387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6244373790717701387'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/12/how-to-write-custom-rules-for.html' title='How to write custom rules for spamassassin'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4672210746691622947</id><published>2007-10-29T16:44:00.000-07:00</published><updated>2007-10-29T16:55:25.599-07:00</updated><title type='text'>How to use rbot, svnwatch.rb plugin and post-commit to log svn commits to an IRC channel</title><content type='html'>I have not seen this all in one place so here it is: (Obviously if you do not know what I am talking about here, then you do not need this)&lt;br /&gt;&lt;br /&gt;How to setup svn (subversion) logging when a commit is made&lt;br /&gt;&lt;br /&gt;   1. using Debian, issue this command as root: apt-get install rbot&lt;br /&gt;   2. using other Linux'es, install the ruby gem, first search for it: sudo gem list --remote rbot&lt;br /&gt;   3. pick the rbot you want (get the latest stable) and install the gem&lt;br /&gt;   4. run rbot, the first time you run it, rbot will check to see if you have a ~/.rbot directory, if not, then the setup script runs&lt;br /&gt;   5. answer most questions as the defauit. The questions you need to fill in are the irc user, the irc server, the irc channel to join&lt;br /&gt;   6. ensure the irc channel to join is in the format: #our_cool_channel somepassword&lt;br /&gt;   7. once rbot loads and starts running, check to see if the rbot user you made up actually joined the irc channel. If it did, continue, of not, then go back and troubleshoot&lt;br /&gt;   8. Shutdown rbot by sending a CTRL-c to the term, then start it back up in "daemon" mode: rbot -b&lt;br /&gt;   9. Add "svnwatch.rb" to ~/.rbot/plugins/   This file should be on RobbyOnRails somewhere, search for it&lt;br /&gt;   10. Add the post-commit file somewhere (also on RobbyOnRails) where apache can run it when a commit is made, I recommend something like /usr/local/bin&lt;br /&gt;   11.  create a symlink to the post-commit script in the hooks directory of each svn project you will to run this post-commit script for&lt;br /&gt;   12. For example, I want to have a script log to the irc channel when a commit is made to liberty sweet. So I would: ln -s /usr/local/bin/post-commit /home/svn/src/cool_project/hooks/post-commit&lt;br /&gt;   13. What this does is run the post-commit in /usr/local/bin/post-commit which fires off a commit message (on port 7666 by default)  to rbot, which is logged into the channel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4672210746691622947?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4672210746691622947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4672210746691622947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4672210746691622947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4672210746691622947'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/10/how-to-use-rbot-svnwatchrb-plugin-and.html' title='How to use rbot, svnwatch.rb plugin and post-commit to log svn commits to an IRC channel'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5450359081669283627</id><published>2007-09-17T14:55:00.000-07:00</published><updated>2007-09-17T15:10:08.944-07:00</updated><title type='text'>How to create a reverse ssh tunnel</title><content type='html'>Say you have a customer that has a firewall, but you need to ssh into their box and you can't mess with firewall (poking holes through it, etc.) If you can convince them to run a script you email to them or get to them someway, you can get a shell easily.&lt;br /&gt;&lt;br /&gt;definitions: &lt;br /&gt;&lt;br /&gt;local: (the customer's machine, which is behind the firewall)&lt;br /&gt;remote: a box you have a shell on already&lt;br /&gt;&lt;br /&gt;requirements:&lt;br /&gt;&lt;br /&gt;both the local and remote computers must be running sshd (ports do not matter, but you will need root to listen on a port lower than 1024)&lt;br /&gt;&lt;br /&gt;here is the line to execute on the local computer:&lt;br /&gt;&lt;br /&gt;ssh -nNT -R 1100:local:22 remote&lt;br /&gt;&lt;br /&gt;explanation:&lt;br /&gt;&lt;br /&gt;you are ssh'ing from the local computer, past the firewall and into the computer you control. The 'n' option tells ssh to disregard stuff that comes in on stdin (we won't be sending local stdin over the wire, thus send it to /dev/null. The 'N' tells ssh to setup the tunnel but do not associate it with a command stream. 'T' means "do not give me a tty on the remote end". When the above command is run from a shell on the local computer, the shell will hang (after asking for login credentials) and no just a tunnel for other ssh sessions coming in from the other end. It will need to run during the entire session. Now from the remote computer you can simply ssh as such:&lt;br /&gt;&lt;br /&gt;ssh localhost -p 1100 -l username&lt;br /&gt;&lt;br /&gt;now you should have a shell on the local computer and have essentially defeated the firewall. For those of you reading this and wondering "Wow, someone can generate syn packets into my network, by tricking a user into executing some code, thus defeating my outer defenses.", you would be correct!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5450359081669283627?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5450359081669283627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5450359081669283627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5450359081669283627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5450359081669283627'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/09/how-to-create-reverse-ssh-tunnel.html' title='How to create a reverse ssh tunnel'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-6882607934352952527</id><published>2007-06-03T21:27:00.001-07:00</published><updated>2008-03-28T07:46:55.121-07:00</updated><title type='text'>I always forget this, how to place a process in the background after it is already running</title><content type='html'>So you started this process in your terminal and it is taking a really long time to complete. You want that terminal back but it seems too late to kill the process and rerun it with the '&amp;' to detach it into the background. Well there is hope. You can complete the following to place the process in the background and get your terminal back.&lt;br /&gt;&lt;br /&gt;1. From the terminal in question, the one where you do not have a prompt because the application is still running, hit Ctrl-z (this signals the process to pause, but not stop, it can be picked up again right where it left off)&lt;br /&gt;2. Then type 'jobs', if you only have one job on that terminal (you most likely do), then this stopped job will be '1'.&lt;br /&gt;3. Then type 'bg 1' or whatever the jobs output was. Blamo, you have restarted your process into the background.&lt;br /&gt;update:&lt;br /&gt;4. If you logout of the terminal (pty) which launched the process, you are essentially orphaning the process. This will cause the process to zombie (which means the process will never end/die because it is waiting on a signal from the parent that it received its result code) when the process finally does end. Also, if the process outputs to stdout/stderr, then there will be no pty parent associated with it, so Linux will cleanup this process.&lt;br /&gt;5. Thanks to Charles Jones for pointing out that you can issue a 'disown %1' where 1 is the job number.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-6882607934352952527?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/6882607934352952527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=6882607934352952527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6882607934352952527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/6882607934352952527'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/06/i-always-forget-this-how-to-place.html' title='I always forget this, how to place a process in the background after it is already running'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-7133994759814035985</id><published>2007-06-03T11:31:00.000-07:00</published><updated>2007-06-03T11:36:11.229-07:00</updated><title type='text'>Reimplementation is back on!</title><content type='html'>Exciting news over the past week. I have been given the opportunity to lead the IT department at the company I work for. This is good news because it gives me a chance to take the department in the direction I want (which includes updating the suite of tools.) I am excited about this because because &lt;a href="http://iamruinous.com/"&gt;Jade Meskill&lt;/a&gt; is finally free to fully devote his time to his own company, &lt;a href="http://www.integrumtech.com"&gt;Integrum&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-7133994759814035985?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/7133994759814035985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=7133994759814035985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7133994759814035985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/7133994759814035985'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/06/reimplementation-is-back-on.html' title='Reimplementation is back on!'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4791135151394304644</id><published>2007-05-28T09:20:00.000-07:00</published><updated>2007-05-28T09:24:55.314-07:00</updated><title type='text'>Looks like the reimplementation is off</title><content type='html'>Looks like the company that employs me has decided not to upgrade the software they use. This is unfortunate. I will need to reevaluate how this book might get written. There will be no empirical data to include for the domain of the book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4791135151394304644?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4791135151394304644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4791135151394304644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4791135151394304644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4791135151394304644'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/05/looks-like-reimplementation-is-off.html' title='Looks like the reimplementation is off'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-168048619785319440</id><published>2007-05-12T09:52:00.000-07:00</published><updated>2007-05-12T09:58:04.710-07:00</updated><title type='text'>socialDrinkr</title><content type='html'>We just started on a new beer rating site. By we, I mean myself and 3 other people from work. Socialdrinkr is an experiment for those who love beer and would like to share their thoughts about the brews they love. We hope to make it useful for anyone. This is definitely a labor of love. All four of the developers have keen domain knowledge as well the knowledge to build the site. Alright time to get back hacking on socialdrinkr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-168048619785319440?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/168048619785319440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=168048619785319440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/168048619785319440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/168048619785319440'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/05/socialdrinkr.html' title='socialDrinkr'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-5638943983292274343</id><published>2007-05-11T20:47:00.000-07:00</published><updated>2007-05-11T21:01:19.780-07:00</updated><title type='text'>Writing a book!</title><content type='html'>I have been given a great opportunity to write a book. My employer is giving me the opportunity to implement enterprise-level software using Ruby on Rails. I am very fortunate to be a part of this plan. Rails is new and exciting, but needs to be proven. We need to prove concepts like REST (representational state transfer) can work running a multiple million dollar operation. We need to implement a distributed database. Most importantly, we need Rails to work with legacy systems and data. This book will be a practicum of sorts, chronically the entire process from bidding the system to the client through to the "maintenance phase".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-5638943983292274343?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/5638943983292274343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=5638943983292274343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5638943983292274343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/5638943983292274343'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/05/writing-book.html' title='Writing a book!'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1124923039357138041</id><published>2007-05-06T17:43:00.000-07:00</published><updated>2007-05-06T17:46:01.999-07:00</updated><title type='text'>Going to Rails Conf!</title><content type='html'>Excited = 'Yes'. I would really like to hear David A. Black speak as well as Dave Thomas (no not the Wendys guy), the Ruby guy. Myself and 6 others from Integrum will be going on May 16th. This should be a good time and a chance to show Integrum's colors in Planet Argon's backyard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1124923039357138041?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1124923039357138041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1124923039357138041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1124923039357138041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1124923039357138041'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/05/going-to-rails-conf.html' title='Going to Rails Conf!'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-1651857603148341812</id><published>2007-04-05T08:06:00.000-07:00</published><updated>2007-04-05T08:08:39.367-07:00</updated><title type='text'>Living the dream</title><content type='html'>Sipping a latte&lt;br /&gt;Typing with one hand smartly&lt;br /&gt;Igoring those around me&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-1651857603148341812?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/1651857603148341812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=1651857603148341812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1651857603148341812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/1651857603148341812'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/04/living-dream.html' title='Living the dream'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8135297538998876920.post-4525499654944574603</id><published>2007-04-05T08:01:00.000-07:00</published><updated>2007-05-11T21:04:28.519-07:00</updated><title type='text'>Coming at you like a spider monkey</title><content type='html'>Greatest generation, my ass!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8135297538998876920-4525499654944574603?l=kleeschulte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kleeschulte.blogspot.com/feeds/4525499654944574603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8135297538998876920&amp;postID=4525499654944574603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4525499654944574603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8135297538998876920/posts/default/4525499654944574603'/><link rel='alternate' type='text/html' href='http://kleeschulte.blogspot.com/2007/04/coming-at-you-like-spider-monkey.html' title='Coming at you like a spider monkey'/><author><name>kleetus</name><uri>http://www.blogger.com/profile/09359809489544177671</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='22' src='http://3.bp.blogspot.com/_WZOHTV6YvZI/S0EbaRRegBI/AAAAAAAAAAM/bFIAGrjzoKE/S220/n1587501354_1306.jpg'/></author><thr:total>0</thr:total></entry></feed>
