<?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-27161166</id><updated>2012-01-20T00:04:42.784-05:00</updated><category term='Unix'/><category term='jQuery'/><category term='Git'/><category term='Drivers'/><category term='Ruby'/><category term='Rails 3.1'/><category term='Rails'/><category term='Dell'/><category term='Mac OS X'/><category term='Inspiron 5100'/><category term='Tools'/><category term='rak'/><category term='Windows'/><category term='JavaScript'/><category term='Exaile'/><category term='I8kfanGUI'/><category term='Gems'/><category term='I8kfan'/><category term='portaPuTTY'/><title type='text'>PotatoSalad Blog</title><subtitle type='html'>Huh?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27161166.post-907490581118262143</id><published>2011-12-08T16:52:00.001-05:00</published><updated>2011-12-23T01:57:11.886-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery capture and transfer scroll event</title><content type='html'>&lt;p&gt;Here's a problem I've come up against a few times: how do you capture a scroll event and transfer that event to another object in JavaScript?  Well, here's one solution:&lt;/p&gt;&lt;div class="gist" id="1448824"&gt;&lt;code data-file="index.html"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;script class="jsbin" src="http://code.jquery.com/jquery-1.7.1.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;meta charset=utf-8 /&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;JS Bin&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
&amp;lt;script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;script src="https://raw.github.com/brandonaaron/jquery-mousewheel/master/jquery.mousewheel.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
article, aside, figure, footer, header, hgroup, &lt;br /&gt;
menu, nav, section { display: block; }&lt;br /&gt;
* { padding: 0; margin: 0; }&lt;br /&gt;
html { min-height: 1000%; }&lt;br /&gt;
&lt;br /&gt;
#toolbox {&lt;br /&gt;
overflow: hidden;&lt;br /&gt;
position: fixed;&lt;br /&gt;
top: 100px;&lt;br /&gt;
left: 200px;&lt;br /&gt;
width: 200px;&lt;br /&gt;
height: 300px;&lt;br /&gt;
background: #ccc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;div id="toolbox"&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;code data-file="javascript.js"&gt;$(document).ready(function() {&lt;br /&gt;
&lt;br /&gt;
var toolbox = $('#toolbox'),&lt;br /&gt;
height = toolbox.height(),&lt;br /&gt;
scrollHeight = toolbox.get(0).scrollHeight;&lt;br /&gt;
&lt;br /&gt;
toolbox.on('mousewheel', function(event, delta) {&lt;br /&gt;
if ((toolbox.scrollTop() === (toolbox.get(0).scrollHeight - toolbox.height()) &amp;amp;&amp;amp;&lt;br /&gt;
delta &amp;lt; 0) || (toolbox.scrollTop() === 0 &amp;amp;&amp;amp; delta &amp;gt; 0)) {&lt;br /&gt;
return event.preventDefault();&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
$(document).on('scroll', function(event) {&lt;br /&gt;
&lt;br /&gt;
var pageX = $(this).scrollLeft(),&lt;br /&gt;
pageY = $(this).scrollTop(),&lt;br /&gt;
toolX = toolbox.scrollLeft(),&lt;br /&gt;
toolY = toolbox.scrollTop(),&lt;br /&gt;
ratio = (toolbox.get(0).scrollHeight - toolbox.height()) / $(this).height(),&lt;br /&gt;
pageRelX = pageX / ratio,&lt;br /&gt;
pageRelY = pageY / ratio,&lt;br /&gt;
toolRelX = ratio * pageX,&lt;br /&gt;
toolRelY = ratio * pageY,&lt;br /&gt;
prevX = $(this).data('prevScrollLeft') || 0,&lt;br /&gt;
prevY = $(this).data('prevScrollTop')  || 0;&lt;br /&gt;
&lt;br /&gt;
$(this).data('prevScrollLeft', pageX);&lt;br /&gt;
$(this).data('prevScrollTop',  pageY);&lt;br /&gt;
&lt;br /&gt;
console.log("other ratio: (x: %f, y: %f)",&lt;br /&gt;
prevX / pageX,&lt;br /&gt;
prevY / pageY);&lt;br /&gt;
&lt;br /&gt;
console.log("ratio: %f", ratio);&lt;br /&gt;
console.log("page[%dx%d]: (x: %d, y: %d) =&amp;gt; (x: %d, y: %d)",&lt;br /&gt;
$(this).width(),&lt;br /&gt;
$(this).height(),&lt;br /&gt;
pageX,&lt;br /&gt;
pageY,&lt;br /&gt;
pageRelX,&lt;br /&gt;
pageRelY);&lt;br /&gt;
console.log("tool[%dx%d]: (x: %d, y: %d) =&amp;gt; (x: %d, y: %d)",&lt;br /&gt;
toolbox.width(),&lt;br /&gt;
toolbox.height(),&lt;br /&gt;
toolX,&lt;br /&gt;
toolY,&lt;br /&gt;
toolRelX, &lt;br /&gt;
toolRelY);&lt;br /&gt;
//$(this).scrollLeft(pageRelX);&lt;br /&gt;
//$(this).scrollTop(pageRelY);&lt;br /&gt;
toolbox.scrollLeft(toolRelX);&lt;br /&gt;
toolbox.scrollTop(toolRelY);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
});&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;script src="http://gist.pagodabox.com/jquery.gist.js"&gt;&lt;/script&gt;&lt;p&gt;You can view an example of this here: &lt;a href="http://jsbin.com/evubud/2"&gt;http://jsbin.com/evubud/2&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-907490581118262143?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/907490581118262143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=907490581118262143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/907490581118262143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/907490581118262143'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2011/12/jquery-capture-and-transfer-scroll.html' title='jQuery capture and transfer scroll event'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-5695917824438917356</id><published>2011-12-06T15:51:00.001-05:00</published><updated>2011-12-23T01:59:50.267-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Best UNIX Shell tools</title><content type='html'>&lt;p&gt;I stumbled across this while looking up how to install pgrep on Mac OS X, a gist entitled, &lt;a href="https://gist.github.com/1429161"&gt;&amp;ldquo;Best UNIX Shell tools&amp;rdquo;&lt;/a&gt;...&lt;/p&gt;&lt;div class="gist" id="1429161"&gt;&lt;code data-file="README.md"&gt;&lt;br /&gt;
# Best UNIX Shell tools #&lt;br /&gt;
&lt;br /&gt;
These are a list of usages of shell commands I can't live without on UNIX-based systems.&lt;br /&gt;
&lt;br /&gt;
## Install ##&lt;br /&gt;
&lt;br /&gt;
### Mac OS X ###&lt;br /&gt;
&lt;br /&gt;
Using Homebrew (yes, I am opinionated) you can install the following tools with the following packages:&lt;br /&gt;
&lt;br /&gt;
    brew install proctools # to install pgrep, pkill, etc.&lt;br /&gt;
    brew install pstree # to be able to use pstree&lt;br /&gt;
    brew install vnstat # to be able to use vnstat&lt;br /&gt;
    brew install ncdu # to use ncdu&lt;br /&gt;
    brew install ipcalc # to use the almighty ipcalc&lt;br /&gt;
    brew install htop # to use htop&lt;br /&gt;
    brew install ack # to use the awesome ack&lt;br /&gt;
    brew install lsof # to use the amazing lsof&lt;br /&gt;
&lt;br /&gt;
### Fedora/Red Hat/CentOS ###&lt;br /&gt;
&lt;br /&gt;
Using YUM you can install the tools with the following RPM packages:&lt;br /&gt;
&lt;br /&gt;
    yum install proctools # same as brew package&lt;br /&gt;
    yum install psmisc # for pstree&lt;br /&gt;
    yum install vnstat # for vnstat&lt;br /&gt;
    yum install ncdu # for ncdu&lt;br /&gt;
    yum install initscripts # for ipcalc - should already have this, I think?&lt;br /&gt;
    yum install htop # for htop&lt;br /&gt;
    yum install ack # for ack&lt;br /&gt;
    yum install lsof # for lsof&lt;br /&gt;
&lt;br /&gt;
### Ubuntu/Debian APT ###&lt;br /&gt;
&lt;br /&gt;
Using APT you can install the tools with the following RPM packages:&lt;br /&gt;
&lt;br /&gt;
    apt-get install procps&lt;br /&gt;
    apt-get install psmisc&lt;br /&gt;
    apt-get install vnstat&lt;br /&gt;
    apt-get install ncdu&lt;br /&gt;
    apt-get install ipcalc&lt;br /&gt;
    apt-get install htop&lt;br /&gt;
    apt-get install ack&lt;br /&gt;
    apt-get install lsof&lt;/code&gt;&lt;br /&gt;
&lt;code data-file="tool_usage.sh"&gt;#!/usr/bin/env bash&lt;br /&gt;
&lt;br /&gt;
ncdu # launches ncurses version of `du` that makes it nice to navigate around in&lt;br /&gt;
&lt;br /&gt;
pgrep -L beam.smp # lists all Erlang processes&lt;br /&gt;
pkill ruby # kills all Ruby processes&lt;br /&gt;
&lt;br /&gt;
fc # opens previous command in your $EDITOR then after editing line, will execute on editor quit&lt;br /&gt;
fc pgrep # opens last command starting with pgrep in $EDITOR&lt;br /&gt;
&lt;br /&gt;
lsof -iTCP # show current TCP connections&lt;br /&gt;
lsof -i :8080 # show current connections on port 8080&lt;br /&gt;
lsof -i@your.remote.host # show all connections to/from your.remote.host&lt;br /&gt;
lsof -u `whoami` # show all your user's connections&lt;br /&gt;
lsof -c beam.smp # show all connections for Erlang nodes&lt;br /&gt;
lsof /path/to/file # show all OS processes using or pointing to that file path&lt;br /&gt;
lsof -p 4830 # show all connections for a specific PID (4830)&lt;br /&gt;
lsof -a -u USER -c beam.smp # show all connections for Erlang nodes running as USER&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/nginx stop&lt;br /&gt;
sudo !! # runs previous command but prefixes sudo before it (can use anything instead of sudo, the key is !!)&lt;br /&gt;
^stop^start # reruns previous command but substitutes stop for start&lt;br /&gt;
&lt;br /&gt;
vim /really/long/path/to/file.crap&lt;br /&gt;
ghc !$ # use argument from previous command using !$...can prefix with anything, just an example usage with ghc.&lt;br /&gt;
&lt;br /&gt;
vnstat -l 1 -i eth0 # show live transfer counters for interface eth0&lt;br /&gt;
&lt;br /&gt;
ack "text/pattern to search for" # equivalent to a faster fgrep for all files in current directory or under (recursively)&lt;br /&gt;
&lt;br /&gt;
htop # shows colourful version of top with CPU ASCII art display :)&lt;br /&gt;
&lt;br /&gt;
ipcalc 192.168.0.1/32 # displays information about resulting broadcast network, very very useful!&lt;br /&gt;
&lt;br /&gt;
pstree -u USER # show process tree for all procs running as USER&lt;br /&gt;
pstree -p PID -l 2 # show process tree for all procs under PID at 2 levels deep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo "Enjoy and heckle me on Twitter @SusanPotter if you want to tell me what commands you can't live without not in this usage script! :)"&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;script src="http://gist.pagodabox.com/jquery.gist.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;p&gt;I've used the majority of these utilities in the past, but I've never seen one location that shows them all together with a few simple usage examples to jog your memory.  Great for remembering how to use pgrep, pkill, pstree, vnstat, ncdu, ipcalc, htop, ack, and lsof.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-5695917824438917356?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/5695917824438917356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=5695917824438917356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/5695917824438917356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/5695917824438917356'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2011/12/best-unix-shell-tools.html' title='Best UNIX Shell tools'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-4910184260622809771</id><published>2011-08-17T15:58:00.005-04:00</published><updated>2011-12-23T02:01:46.438-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails 3.1'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Rails 3 Routing with Custom Resource Globs</title><content type='html'>&lt;p&gt;I ran into a convenience problem while working on a recent project:&lt;/p&gt;&lt;p&gt;By default, when you use &lt;tt&gt;resources :categories&lt;/tt&gt; in your &lt;tt&gt;config/routes.rb&lt;/tt&gt; file, you get the following routes set up:&lt;/p&gt;&lt;div id="1152671" class="gist"&gt;&lt;code data-file="routes.rb"&gt;resources :categories&lt;br /&gt;
&lt;br /&gt;
## equivalent to:&lt;br /&gt;
&lt;br /&gt;
get    '/categories(.:format)'          =&amp;gt; 'categories#index',  :as =&amp;gt; :categories&lt;br /&gt;
post   '/categories(.:format)'          =&amp;gt; 'categories#create'&lt;br /&gt;
get    '/categories/new(.:format)'      =&amp;gt; 'categories#new',    :as =&amp;gt; :new_category&lt;br /&gt;
get    '/categories/:id/edit(.:format)' =&amp;gt; 'categories#edit',   :as =&amp;gt; :edit_category&lt;br /&gt;
get    '/categories/:id(.:format)'      =&amp;gt; 'categories#show',   :as =&amp;gt; :category&lt;br /&gt;
put    '/categories/:id(.:format)'      =&amp;gt; 'categories#update'&lt;br /&gt;
delete '/categories/:id(.:format)'      =&amp;gt; 'categories#destroy'&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;p&gt;This enables URL's like &lt;tt&gt;http://host/categories/4e382a079a86653864000002&lt;/tt&gt;, but I wanted to be able to have urls like &lt;tt&gt;http://host/categories/category/sub_category/sub_sub_category&lt;/tt&gt;.&lt;/p&gt;&lt;p&gt;After searching around a bit, I stumbled across a line in the Rails Guide on &lt;a href="http://guides.rubyonrails.org/routing.html#route-globbing" title="Rails Guide: Route Globbing"&gt;route globbing&lt;/a&gt; about using the &lt;tt&gt;:constraint&lt;/tt&gt; option.  Here's an example of to get the desired result:&lt;/p&gt;&lt;div id="1152673" class="gist"&gt;&lt;code data-file="routes.rb"&gt;resources :categories, :constraints =&amp;gt; { :id =&amp;gt; /.+?/ }&lt;br /&gt;
&lt;br /&gt;
## equivalent to:&lt;br /&gt;
&lt;br /&gt;
get    '/categories(.:format)'          =&amp;gt; 'categories#index',  :as =&amp;gt; :categories&lt;br /&gt;
post   '/categories(.:format)'          =&amp;gt; 'categories#create'&lt;br /&gt;
get    '/categories/new(.:format)'      =&amp;gt; 'categories#new',    :as =&amp;gt; :new_category&lt;br /&gt;
get    '/categories/*id/edit(.:format)' =&amp;gt; 'categories#edit',   :as =&amp;gt; :edit_category&lt;br /&gt;
get    '/categories/*id(.:format)'      =&amp;gt; 'categories#show',   :as =&amp;gt; :category&lt;br /&gt;
put    '/categories/*id(.:format)'      =&amp;gt; 'categories#update'&lt;br /&gt;
delete '/categories/*id(.:format)'      =&amp;gt; 'categories#destroy'&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;script src="http://gist.pagodabox.com/jquery.gist.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-4910184260622809771?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/4910184260622809771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=4910184260622809771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/4910184260622809771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/4910184260622809771'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2011/08/rails-3-routing-with-custom-resource.html' title='Rails 3 Routing with Custom Resource Globs'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-1945803100982469325</id><published>2008-04-26T08:22:00.006-04:00</published><updated>2008-04-26T10:05:36.415-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Gems'/><category scheme='http://www.blogger.com/atom/ns#' term='rak'/><title type='text'>Automatic paging with ack and rak (git style)</title><content type='html'>&lt;p&gt;After reading &lt;a href="http://nex-3.com/posts/73-git-style-automatic-paging-in-ruby"&gt;Git-Style Automatic Paging in Ruby&lt;/a&gt;, I wanted to try it out on my new favorite command line toy: &lt;a href="http://petdance.com/ack/"&gt;ack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Getting &lt;tt&gt;ack&lt;/tt&gt; to work is as simple as adding the following to your &lt;tt&gt;~/.ackrc&lt;/tt&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Always color, even if piping to a filter
--color

# Use "less -r" as my pager
--pager=LESS=FSRX less -r&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://rak.rubyforge.org/"&gt;rak&lt;/a&gt; is very similar to &lt;tt&gt;ack&lt;/tt&gt;, only written in &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt;.  To see some examples of using &lt;tt&gt;rak&lt;/tt&gt;, check out &lt;a href="http://www.robbyonrails.com/articles/2007/12/11/get-to-know-a-gem-rak"&gt;Getting to Know a Gem: Rak&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;tt&gt;rak&lt;/tt&gt; doesn't support paging by default, so I'd have to do a really quick hack to get things to work.  Luckily, &lt;tt&gt;rak&lt;/tt&gt; is hosted on &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt; at &lt;tt&gt;git://git.donttreadonme.co.uk/rak&lt;/tt&gt;, so I forked it over at &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt; and copied the &lt;tt&gt;run_pager&lt;/tt&gt; method from the &lt;a href="http://github.com/defunkt/cheat/tree/38ba215cc73450005e8fc6ae3e91554cbff486d5/lib/cheat.rb#L170"&gt;cheat project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The results can be seen over at &lt;a href="http://github.com/PotatoSalad/rak"&gt;http://github.com/PotatoSalad/rak&lt;/a&gt;.  I wanted to try out github's new gem building feature, so I included a gemspec file in my changes.  If you've got &lt;a href="http://rubyforge.org/projects/rubygems/"&gt;rubygems&lt;/a&gt; installed, just run...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gem sources -a http://gems.github.com/ &lt;strong&gt;(you only need to run this once)&lt;/strong&gt;
sudo gem install PotatoSalad-rak

(see &lt;a href="http://gems.github.com/"&gt;gems.github.com&lt;/a&gt; for more information)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, if you'd like to see my changes/make your own, grab a copy of my repository with &lt;tt&gt;git clone git://github.com/PotatoSalad/rak.git&lt;/tt&gt;&lt;/pp&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-1945803100982469325?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/1945803100982469325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=1945803100982469325' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/1945803100982469325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/1945803100982469325'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2008/04/automatic-paging-with-ack-and-rak-git.html' title='Automatic paging with ack and rak (git style)'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-6135902332185640932</id><published>2007-07-31T16:56:00.001-04:00</published><updated>2007-07-31T16:56:53.472-04:00</updated><title type='text'>Simple Gmail Phishing Filter</title><content type='html'>&lt;p&gt;&lt;img style="float: left; margin: 0 10px 5px 0; height: 272px; width: 152px;" src="http://4.bp.blogspot.com/_LUY72QdNuOw/Rqv1UXV5QqI/AAAAAAAAAUY/VAvrBevx5Po/s400/gmail-spam-1337.png" border="0" alt="Gmail Screenshot with Spam (1337)" id="BLOGGER_PHOTO_ID_5092433533884514978" /&gt;After I noticed the tauntingly large number of messages sitting comfortably in my Spam folder the other day, I went about the routine of performing the "Delete all spam messages now" that many Gmail users are accustomed to.  I then checked my inbox to find that 26 of my 32 unread e-mails were phishing attempts.  Not bad, Gmail's spam filtering system managed to keep around 98% of the Spam out of my inbox, but the 2% of messages that continue to seep through all have one thing in common: &lt;em&gt;YOUR EMAIL HAS WON!!! UK LOTTERY WINNER!!!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I seem to be very lucky in the United Kingdom, I win their lottery at least 7 times a day.  Perhaps I'm living on the wrong side of the Atlantic Ocean.  These "lottery" or "jackpot" phishing attempts are really the only type of message that consistently gets passed Gmail's filtering system, aside from the occasional Japanese or Russian one (I have no idea if they're phishing attempts, but I do recognize things like &amp;yen;5000000 and "SSN PLZ").&lt;/p&gt;
&lt;p&gt;So, I came up with a so-far highly effective and simple filter solution that has been able to catch that remaining 2% that keeps slipping through:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Matches: &lt;strong&gt;(Lottery OR Jackpot OR UK OR "United Kingdom")&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Do this: &lt;strong&gt;Skip Inbox, Apply label "Phishing"&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now all I have to do is take a quick glance at the messages labeled as "Phishing" and see if a valid e-mail accidentally got flagged by the filter.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-6135902332185640932?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/6135902332185640932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=6135902332185640932' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/6135902332185640932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/6135902332185640932'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/07/simple-gmail-phishing-filter.html' title='Simple Gmail Phishing Filter'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LUY72QdNuOw/Rqv1UXV5QqI/AAAAAAAAAUY/VAvrBevx5Po/s72-c/gmail-spam-1337.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-8029512690700628772</id><published>2007-06-15T08:38:00.000-04:00</published><updated>2007-06-15T09:13:15.920-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inspiron 5100'/><category scheme='http://www.blogger.com/atom/ns#' term='I8kfanGUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Drivers'/><category scheme='http://www.blogger.com/atom/ns#' term='Dell'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='I8kfan'/><title type='text'>I8kfanGUI for Mac OS X v0.2 with Dual Fan Support</title><content type='html'>&lt;p&gt;&lt;img style="float:right; margin:0 0 5px 10px; width:64px; height:64px;" src="http://www.mystock.com/magick/i8kfan-64.png" border="0" alt="I8kfanGUI Icon" title="I8kfanGUI Icon" /&gt;This is a very, very quick and dirty update to allow for secondary fan control.  If your laptop only has one fan, there really is no reason to upgrade.&lt;/p&gt;
&lt;p&gt;Please note that I have no way of testing if secondary fan support actually works, so please let me know if there are any problems with it.  I'm basing it off of &lt;a href="http://www.debian.org/~dz/i8k/"&gt;other&lt;/a&gt; &lt;a href="http://www.angelfire.com/punk4/bofn1001/"&gt;code&lt;/a&gt; out there.  I still need to clean up the code and allow for simple things like saving preferences and such.  I may end up making this a system preferences panel.&lt;/p&gt;
&lt;p&gt;So, without further delay, grab the new release from the &lt;a href="http://code.google.com/p/i8kfan/downloads/list"&gt;I8kfan project downloads page&lt;/a&gt;, or from right here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://i8kfan.googlecode.com/files/I8kfanGUI_v0.2.dmg"&gt;I8kfanGUI_v0.2.dmg&lt;/a&gt; (I8kfanGUI v0.2 and I8kfan.kext v1.0.0d1 including sources)&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://i8kfan.googlecode.com/files/I8kfanGUI_v0.2-source.tar.bz2"&gt;I8kfanGUI_v0.2-source.tar.bz2&lt;/a&gt; (I8kfanGUI Xcode project)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I mentioned this in my &lt;a href="http://potatosaladx.blogspot.com/2007/05/i8kfangui-for-mac-os-x.html"&gt;last post&lt;/a&gt;, but older model laptops (Inspiron 1100, 5100, etc.) or any model that does not have &lt;a href="http://www.bay-wolf.com/speedstep.htm"&gt;Enhanced SpeedStep&lt;/a&gt; (CPU flag &lt;em&gt;EST&lt;/em&gt;) still require &lt;strong&gt;AppleIntelCPUPowerManagement.kext&lt;/strong&gt;.  Many sites recommend deleting this file, but your older laptop's temperature will skyrocket from 35&amp;deg;C to 65&amp;deg;C.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Developers&lt;/strong&gt;: You can also grab the source from the &lt;a href="http://i8kfan.googlecode.com/svn/"&gt;I8kfan project subversion repository&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;I8kfan.kext&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;svn co &lt;a href="http://i8kfan.googlecode.com/svn/driver/tags/I8kfan_v1.0.0d1/"&gt;http://i8kfan.googlecode.com/svn/driver/tags/I8kfan_v1.0.0d1/&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;svn co &lt;a href="http://i8kfan.googlecode.com/svn/driver/trunk/"&gt;http://i8kfan.googlecode.com/svn/driver/trunk/&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;I8kfanGUI&lt;/strong&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;svn co &lt;a href="http://i8kfan.googlecode.com/svn/gui/tags/I8kfanGUI_v0.2/"&gt;http://i8kfan.googlecode.com/svn/gui/tags/I8kfanGUI_v0.2/&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;svn co &lt;a href="http://i8kfan.googlecode.com/svn/gui/trunk/"&gt;http://i8kfan.googlecode.com/svn/gui/trunk/&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-8029512690700628772?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/8029512690700628772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=8029512690700628772' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/8029512690700628772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/8029512690700628772'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/06/i8kfangui-for-mac-os-x-v02-with-dual.html' title='I8kfanGUI for Mac OS X v0.2 with Dual Fan Support'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-3531907567729927704</id><published>2007-05-12T22:24:00.001-04:00</published><updated>2011-11-09T14:48:48.271-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inspiron 5100'/><category scheme='http://www.blogger.com/atom/ns#' term='I8kfanGUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Drivers'/><category scheme='http://www.blogger.com/atom/ns#' term='Dell'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='I8kfan'/><title type='text'>I8kfanGUI for Mac OS X</title><content type='html'>&lt;strong&gt;Update (June 15, 2007):&lt;/strong&gt; &lt;a href="http://potatosaladx.blogspot.com/2007/06/i8kfangui-for-mac-os-x-v02-with-dual.html"&gt;I8kfanGUI v0.2 with dual fan support&lt;/a&gt; has been released.&lt;br /&gt;
&lt;img alt="I8kfanGUI Icon" border="0" src="http://www.mystock.com/magick/i8kfan-64.png" style="float: left; height: 64px; margin: 0 10px 5px 0; width: 64px;" title="I8kfanGUI Icon" /&gt;As a continuation of my &lt;a href="http://potatosaladx.blogspot.com/2007/05/dell-fan-control-i8kfan-for-mac-os-x.html"&gt;Dell fan control&lt;/a&gt; problem on my Inspiron 5100 notebook, I completely rewrote the &lt;strong&gt;IOI8KFan.kext&lt;/strong&gt; driver and renamed it to simply &lt;strong&gt;I8kfan.kext&lt;/strong&gt;.  In addition, I wrote a pretty little application to monitor the CPU temperature after the manner of the original &lt;a href="http://www.diefer.de/i8kfan/"&gt;I8kfanGUI&lt;/a&gt; for Windows.&lt;br /&gt;
The driver is written in C with inline assembly and uses the &lt;a href="http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/boundaries/chapter_14_section_7.html"&gt;BSD sysctl&lt;/a&gt; system because I couldn't figure out how to use &lt;a href="http://developer.apple.com/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/index.html"&gt;IOKit&lt;/a&gt; to save my life.  I broke just about every "good practice" rule out there while writing this driver.&lt;br /&gt;
The I8kfanGUI application itself was originally going to be a daemon that simply ran in the background to control the temperature (if you look at the source, you can see my scrapped daemon), but I ended up with completely ripping off the Windows version of I8kfanGUI.  This is my first &lt;a href="http://developer.apple.com/cocoa/"&gt;Cocoa&lt;/a&gt; application and yes, I know it is poorly written.&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_LUY72QdNuOw/RkaVOzG20EI/AAAAAAAAAF4/2ZCBTPCnCc0/s1600-h/I8kfanGUI04.jpg" title="The awesome status bar CPU temperature indicator"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5063898912494374978" src="http://2.bp.blogspot.com/_LUY72QdNuOw/RkaVOzG20EI/AAAAAAAAAF4/2ZCBTPCnCc0/s400/I8kfanGUI04.jpg" style="cursor: hand; cursor: pointer; float: right; margin: 0 0 5px 10px;" /&gt;&lt;/a&gt;It comes complete with an awesome status bar item that shows the CPU's current temperature.  The unoriginal idea came from the Windows version of I8kfanGUI, but whatever.  I wrote this mostly for myself anyway.&lt;br /&gt;
Here are a few screenshots of my awesome app in action:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="photo_list"&gt;
&lt;a href="http://2.bp.blogspot.com/_LUY72QdNuOw/RkaTSzG20DI/AAAAAAAAAFw/ODeAnSM2RSs/s1600-h/I8kfanGUI03.jpg" style="background-color: transparent; clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" title="About"&gt;&lt;img alt="About" border="0" id="BLOGGER_PHOTO_ID_5063896782190596146" src="http://2.bp.blogspot.com/_LUY72QdNuOw/RkaTSzG20DI/AAAAAAAAAFw/ODeAnSM2RSs/s200/I8kfanGUI03.jpg" style="display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_LUY72QdNuOw/RkaTITG20BI/AAAAAAAAAFg/IPwRUkmR2s0/s1600-h/I8kfanGUI01.jpg" style="background-color: transparent; clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" title="Status Panel"&gt;&lt;img alt="Status Panel" border="0" id="BLOGGER_PHOTO_ID_5063896601801969682" src="http://4.bp.blogspot.com/_LUY72QdNuOw/RkaTITG20BI/AAAAAAAAAFg/IPwRUkmR2s0/s200/I8kfanGUI01.jpg" style="display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_LUY72QdNuOw/RkaTSzG20CI/AAAAAAAAAFo/RNpLD0p4gZ0/s1600-h/I8kfanGUI02.jpg" style="background-color: transparent;" title="Preferences"&gt;&lt;img alt="Preferences" border="0" id="BLOGGER_PHOTO_ID_5063896782190596130" src="http://2.bp.blogspot.com/_LUY72QdNuOw/RkaTSzG20CI/AAAAAAAAAFo/RNpLD0p4gZ0/s200/I8kfanGUI02.jpg" style="display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;" /&gt;&lt;/a&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style="clear: both;"&gt;
&lt;/div&gt;
Sweet.  I made an &lt;a href="http://code.google.com/p/i8kfan/"&gt;i8kfan project&lt;/a&gt; to both host my code and to hopefully have a central place for future developments with the i8k driver on other platforms.&lt;br /&gt;
You can grab the source and binaries at the &lt;a href="http://code.google.com/p/i8kfan/downloads/list"&gt;project downloads page&lt;/a&gt; or from right here:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://i8kfan.googlecode.com/files/I8kfanGUI_v0.1.dmg"&gt;I8kfanGUI_v0.1.dmg&lt;/a&gt; (I8kfanGUI and I8kfan.kext driver)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://i8kfan.googlecode.com/files/I8kfanGUI_v0.1-source.zip"&gt;I8kfanGUI_v0.1-source.zip&lt;/a&gt; (I8kfanGUI Xcode project)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://i8kfan.googlecode.com/files/I8kfan_v1.0.0d1-source.zip"&gt;I8kfan_v1.0.0d1-source.zip&lt;/a&gt; (I8kfan.kext Xcode project)&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;Note:&lt;/strong&gt; Most people won't have to mess with this because they're on later model notebooks, but my Inspiron 5100 does not have &lt;a href="http://www.bay-wolf.com/speedstep.htm"&gt;Enhanced SpeedStep&lt;/a&gt; (CPU flag &lt;em&gt;EST&lt;/em&gt;) and at this time still requires &lt;strong&gt;AppleIntelCPUPowerManagement.kext&lt;/strong&gt; that most sites out there encourage you to delete.  My laptop went from running at around 65°C to 55°C and by using my app, it now hovers around 38°C to 43°C.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-3531907567729927704?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/3531907567729927704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=3531907567729927704' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/3531907567729927704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/3531907567729927704'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/05/i8kfangui-for-mac-os-x.html' title='I8kfanGUI for Mac OS X'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LUY72QdNuOw/RkaVOzG20EI/AAAAAAAAAF4/2ZCBTPCnCc0/s72-c/I8kfanGUI04.jpg' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-8386090461341361650</id><published>2007-05-05T12:52:00.000-04:00</published><updated>2007-06-15T09:03:42.943-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inspiron 5100'/><category scheme='http://www.blogger.com/atom/ns#' term='Drivers'/><category scheme='http://www.blogger.com/atom/ns#' term='Dell'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><category scheme='http://www.blogger.com/atom/ns#' term='I8kfan'/><title type='text'>Dell Fan Control - I8kfan for Mac OS X</title><content type='html'>&lt;p&gt;&lt;strong&gt;Update (June 15, 2007):&lt;/strong&gt; &lt;a href="http://potatosaladx.blogspot.com/2007/06/i8kfangui-for-mac-os-x-v02-with-dual.html"&gt;I8kfanGUI v0.2 with dual fan support&lt;/a&gt; has been released.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update (May 12, 2007):&lt;/strong&gt; Updated version of I8kfan driver including a GUI called &lt;a href="http://potatosaladx.blogspot.com/2007/05/i8kfangui-for-mac-os-x.html"&gt;I8kfanGUI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My old &lt;a href="http://www.pcmag.com/article2/0,1759,997075,00.asp"&gt;Dell Inspiron 5100&lt;/a&gt; is &lt;a href="http://www.google.com/search?q=Inspiron+5100+overheating"&gt;notorious&lt;/a&gt; for overheating due to a poorly designed fan system.  On Windows, I use a wonderful utility called &lt;a href="http://www.diefer.de/i8kfan/index.html"&gt;I8kfanGUI&lt;/a&gt; which allows me to set temperature thresholds and control the speed of the fan to prevent overheating.  On Mac OS X, however, there is no such utility.&lt;/p&gt;
&lt;p&gt;After several hours of staring blankly at Apple's &lt;a href="http://developer.apple.com/documentation/DeviceDrivers/Conceptual/WritingDeviceDriver/index.html"&gt;I/O Kit documentation&lt;/a&gt; and scrutinizing the available &lt;a href="http://people.debian.org/~dz/i8k/"&gt;Linux&lt;/a&gt; and &lt;a href="http://www.angelfire.com/punk4/bofn1001/"&gt;FreeBSD&lt;/a&gt; code, I finally came up with a kernel extension that sucks, but it works.&lt;/p&gt;
&lt;p&gt;I wrote up a topic over at &lt;a href="http://forum.insanelymac.com/index.php?showtopic=50152"&gt;InsanelyMac&lt;/a&gt; in case anyone else wants to mess around with the code.  It needs to be cleaned up, but I'm just glad that I can now at least manually kick the fan into high speed whenever the laptop begins to overheat.&lt;/p&gt;
&lt;p&gt;You can grab the kext and source from the &lt;a href="http://forum.insanelymac.com/index.php?showtopic=50152"&gt;forum post&lt;/a&gt; or you can grab them right here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.mediafire.com/?dymzzmtm2m1"&gt;IOI8KFan.zip&lt;/a&gt; (IOI8KFan.kext)&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mediafire.com/?0zkmzy2xy4z"&gt;IOI8KFan-source.zip&lt;/a&gt; (IOI8KFan Xcode project)&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-8386090461341361650?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/8386090461341361650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=8386090461341361650' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/8386090461341361650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/8386090461341361650'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/05/dell-fan-control-i8kfan-for-mac-os-x.html' title='Dell Fan Control - I8kfan for Mac OS X'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-6495284913024528100</id><published>2007-05-03T12:45:00.000-04:00</published><updated>2007-05-03T12:58:33.778-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portaPuTTY'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>portaPuTTY 0.60 (svn+7489)</title><content type='html'>&lt;p&gt;Rebuilt &lt;a href="http://code.google.com/p/portaputty/"&gt;portaPuTTY&lt;/a&gt; using the &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;PuTTY&lt;/a&gt; 0.60 source.  It's mostly bug fixes, but you can check out their &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/changes.html"&gt;change log&lt;/a&gt;.  Stuff like "You can now store a host name in the Default Settings" could prove useful with the portable version.&lt;/p&gt;
&lt;p&gt;I wrote up some &lt;a href="http://code.google.com/p/portaputty/wiki/BuildInstructions"&gt;portaPuTTY build instructions&lt;/a&gt; in case anyone else is feeling adventurous.&lt;/p&gt;
&lt;p&gt;You can grab the release from the &lt;a href="http://code.google.com/p/portaputty/downloads/list"&gt;downloads page&lt;/a&gt; or from right here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Binaries
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://portaputty.googlecode.com/files/portaPuTTY_0.60+20070503.zip"&gt;portaPuTTY_0.60+20070503.zip&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Source
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://portaputty.googlecode.com/files/portaPuTTY_0.60-source.tar.bz2"&gt;portaPuTTY_0.60-source.tar.bz2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="http://portaputty.googlecode.com/files/portaPuTTY_0.60-source.zip"&gt;portaPuTTY_0.60-source.zip&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;Subversion:&lt;br /&gt;&lt;em&gt;svn co &lt;a href="http://portaputty.googlecode.com/svn/tags/portaputty_0.60"&gt;http://portaputty.googlecode.com/svn/tags/portaputty_0.60&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, of course, you can always grab the latest development snapshot from the trunk:&lt;br /&gt;&lt;em&gt;svn co &lt;a href="http://portaputty.googlecode.com/svn/trunk"&gt;http://portaputty.googlecode.com/svn/trunk&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-6495284913024528100?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/6495284913024528100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=6495284913024528100' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/6495284913024528100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/6495284913024528100'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/05/portaputty-060-svn7489.html' title='portaPuTTY 0.60 (svn+7489)'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-7071156619786169423</id><published>2007-05-02T18:01:00.000-04:00</published><updated>2007-05-03T02:17:57.690-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portaPuTTY'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>portaPuTTY Project and Truly Portable PuTTY 0.59 (svn+7147)</title><content type='html'>&lt;p&gt;Since the source code for my version of portable PuTTY was starting to become a bigger and bigger job to keep track of, I set up a project over at Google Code with the (stolen) name of &lt;a href="http://code.google.com/p/portaputty/"&gt;portaPuTTY&lt;/a&gt;.  This should also solve the &lt;a href="http://potatosaladx.blogspot.com/2006/10/truly-portable-putty-058svn-r6860.html#comments"&gt;problem&lt;/a&gt; with the free download sites going under.  The original guy to use the name (I think) is &lt;a href="http://socialistsushi.com/portaputty"&gt;Socialist Sushi&lt;/a&gt;, but his has not been updated in a year or so.  If anyone has any problems with my unoriginal choice for a name, just leave a comment.&lt;/p&gt;
&lt;p&gt;This is the latest version of PuTTY that I have built.  Unlike my &lt;a href="http://potatosaladx.blogspot.com/2006/10/truly-portable-putty-058svn-r6860.html" title="Truly Portable PuTTY 0.58+svn r6860"&gt;last&lt;/a&gt; &lt;a href="http://potatosaladx.blogspot.com/2006/09/portable-putty-058svn-r6860.html" title="Portable PuTTY 0.58+svn r6860"&gt;releases&lt;/a&gt;, this one is actually based on the final 0.59 version of PuTTY.  I realize that the guys over at &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;PuTTY&lt;/a&gt; have recently released version 0.60, but I have not had time to update the build yet.&lt;/p&gt;
&lt;p&gt;Just head over to the &lt;a href="http://code.google.com/p/portaputty/" title="portaPuTTY Project Page"&gt;portaPuTTY Project Page&lt;/a&gt; for the binaries and sources.  Or you can grab them here:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Binaries
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://portaputty.googlecode.com/files/portaPuTTY_0.59+20070206.zip"&gt;portaPuTTY_0.59+20070206.zip&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Sources
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="http://portaputty.googlecode.com/files/portaPuTTY_0.59-source.tar.bz2"&gt;portaPuTTY_0.59-source.tar.bz2&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="http://portaputty.googlecode.com/files/portaPuTTY_0.59-source.zip"&gt;portaPuTTY_0.59-source.zip&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;You can also get the source from the &lt;a href="http://portaputty.googlecode.com/svn/"&gt;subversion repository&lt;/a&gt;:&lt;br /&gt;&lt;em&gt;svn co &lt;a href="http://portaputty.googlecode.com/svn/tags/portaputty_0.59"&gt;http://portaputty.googlecode.com/svn/tags/portaputty_0.59&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The latest development snapshot is available in the &lt;a href="http://portaputty.googlecode.com/svn/"&gt;subversion repository&lt;/a&gt;:&lt;br /&gt;&lt;em&gt;svn co &lt;a href="http://portaputty.googlecode.com/svn/trunk"&gt;http://portaputty.googlecode.com/svn/trunk&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-7071156619786169423?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/7071156619786169423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=7071156619786169423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/7071156619786169423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/7071156619786169423'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/05/portaputty-project-and-truly-portable.html' title='portaPuTTY Project and Truly Portable PuTTY 0.59 (svn+7147)'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-117017862696194567</id><published>2007-01-30T12:20:00.002-05:00</published><updated>2008-05-04T12:41:53.959-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Exaile'/><title type='text'>Exaile 0.2.9b on Windows</title><content type='html'>&lt;p&gt;
If you've ever used &lt;a href="http://amarok.kde.org/" title="Amarok - rediscover your music"&gt;Amarok&lt;/a&gt;, you probably know why so many people love it so much.  My only problem with Amarok is their lack of support for &lt;a href="http://www.gnome.org/" title="GNOME: The Free Software Desktop Project"&gt;Gnome&lt;/a&gt; (can't blame 'em, it was written in &lt;a href="http://www.trolltech.com/products/qt/" title="Qt — Trolltech"&gt;Qt&lt;/a&gt; for &lt;a href="http://www.kde.org/" title="K Desktop Environment"&gt;KDE&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
That's where the &lt;a href="http://www.exaile.org/" title="Exaile"&gt;Exaile&lt;/a&gt; project comes in.  It's still a little rough and isn't as mature as Amarok, but it's making progress.  I use it all the time when I'm on my Linux desktop, but sometimes I'm forced to use Windows.  There are plenty of &lt;a href="http://www.foobar2000.org/" title="foobar2000"&gt;fine&lt;/a&gt; music players out there, but none that I can find are as extensive as Amarok (and eventually Exaile) are.
&lt;/p&gt;
&lt;p&gt;
Since Exaile is written in &lt;a href="http://www.python.org/" title="Python Programming Language"&gt;Python&lt;/a&gt; and written in &lt;a href="http://www.gtk.org/" title="GTK+"&gt;GTK+&lt;/a&gt;, I figured getting it to run on Windows wouldn't be too difficult.  I finally got it to work (barely), but &lt;acronym title="I Am Not A Python Programmer"&gt;IANAPP&lt;/acronym&gt;.  Maybe someone will come along and continue what I started, maybe I'll finally learn Python, or maybe someone in the Exaile project will allow extensions using &lt;a href="http://www.ruby-lang.org/" title="Ruby Programming Language"&gt;Ruby&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Here are the screenshots for Exaile Win32 0.2.9b:
&lt;div class="photo_list"&gt;
 &lt;ul&gt;
  &lt;li&gt;&lt;a href="http://img443.imageshack.us/img443/1314/exailewin3201hw6.png" title="Running Exaile Win32 from the command line"&gt;&lt;img src="http://img443.imageshack.us/img443/1314/exailewin3201hw6.th.png" alt="Running Exaile Win32 from the command line" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img444.imageshack.us/img444/1731/exailewin3202ts7.png" title="Exaile Win32 Splash Screen"&gt;&lt;img src="http://img444.imageshack.us/img444/1731/exailewin3202ts7.th.png" alt="Exaile Win32 Splash Screen" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img409.imageshack.us/img409/5927/exailewin3203jt6.png" title="Exaile Win32 First Run"&gt;&lt;img src="http://img409.imageshack.us/img409/5927/exailewin3203jt6.th.png" alt="Exaile Win32 First Run" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img409.imageshack.us/img409/8767/exailewin3204at2.png" title="Setting options in Exaile Win32 to show system tray icon"&gt;&lt;img src="http://img409.imageshack.us/img409/8767/exailewin3204at2.th.png" alt="Setting options in Exaile Win32 to show system tray icon" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img406.imageshack.us/img406/2700/exailewin3205to3.png" title="Adding songs to the playlist"&gt;&lt;img src="http://img406.imageshack.us/img406/2700/exailewin3205to3.th.png" alt="Adding songs to the playlist" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img72.imageshack.us/img72/3601/exailewin3206ve5.png" title="Using the system tray icon to start playback"&gt;&lt;img src="http://img72.imageshack.us/img72/3601/exailewin3206ve5.th.png" alt="Using the system tray icon to start playback" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img297.imageshack.us/img297/103/exailewin3207uk9.png" title="The OSD works"&gt;&lt;img src="http://img297.imageshack.us/img297/103/exailewin3207uk9.th.png" alt="The OSD works" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img406.imageshack.us/img406/7429/exailewin3208iw3.png" title="Right clicking on the track"&gt;&lt;img src="http://img406.imageshack.us/img406/7429/exailewin3208iw3.th.png" alt="Right clicking on the track" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img443.imageshack.us/img443/5174/exailewin3209nb1.png" title="Viewing track information"&gt;&lt;img src="http://img443.imageshack.us/img443/5174/exailewin3209nb1.th.png" alt="Viewing track information" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img443.imageshack.us/img443/2479/exailewin3210ht7.png" title="About page for Exaile Win32 0.2.9b"&gt;&lt;img src="http://img443.imageshack.us/img443/2479/exailewin3210ht7.th.png" alt="About page for Exaile Win32 0.2.9b" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img296.imageshack.us/img296/4634/exailewin3211sy1.png" title="Album art is still a little screwy"&gt;&lt;img src="http://img296.imageshack.us/img296/4634/exailewin3211sy1.th.png" alt="Album art is still a little screwy" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img296.imageshack.us/img296/5043/exailewin3212ja9.png" title="The graceful exit"&gt;&lt;img src="http://img296.imageshack.us/img296/5043/exailewin3212ja9.th.png" alt="The graceful exit" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://img409.imageshack.us/img409/1349/exailewin3213od1.png" title="And we're back to the command line"&gt;&lt;img src="http://img409.imageshack.us/img409/1349/exailewin3213od1.th.png" alt="And we're back to the command line" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/div&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-117017862696194567?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/117017862696194567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=117017862696194567' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/117017862696194567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/117017862696194567'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2007/01/exaile-029b-on-windows.html' title='Exaile 0.2.9b on Windows'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-116026013394036131</id><published>2006-10-07T18:16:00.000-04:00</published><updated>2007-05-03T02:17:57.691-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portaPuTTY'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Truly Portable PuTTY 0.58+svn r6860</title><content type='html'>Well, my last portable &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/" title="PuTTY"&gt;PuTTY&lt;/a&gt; worked fine and all until I actually tried to use it in conjunction with &lt;a href="http://www.straightrunning.com/XmingNotes/"&gt;Xming&lt;/a&gt;.  I didn't build it with the ability to use the settings directory based on the location of the executable instead of the launch point.  If that makes any sense.  Anyway, PuTTY, Plink, and Pageant work great now (the three main programs that I use).

I posted a comment on the &lt;a href="http://socialistsushi.com/portaputty"&gt;portaPuTTY&lt;/a&gt; site and it was up for a day or so, but I guess the author of the site decided that my changes aren't of any use (although the program actually works like it should).  Oh well.

Get it from one of the places I uploaded it to:
&lt;ul&gt;&lt;li&gt;Binaries
&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rarhost.com/download-h5cc3x.html"&gt;portaputty_20061007.rar&lt;/a&gt; 1.02 MB (&lt;a href="http://www.rarhost.com/"&gt;rarhost&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt;&lt;a href="http://rapidshare.de/files/35887133/portaputty_20061007.zip"&gt;portaputty_20061007.zip&lt;/a&gt; 1.18 MB (&lt;a href="http://www.rapidshare.de/"&gt;rapidshare&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.megaupload.com/?d=2PGZ6O2F"&gt;portaputty_20061007.zip&lt;/a&gt; 1.18 MB (&lt;a href="http://www.megaupload.com/"&gt;megaupload&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Source&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rarhost.com/download-emcne9.html"&gt;portaputty-source_20061007.rar&lt;/a&gt; 926 KB (&lt;a href="http://www.rarhost.com/"&gt;rarhost&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://rapidshare.de/files/35887298/portaputty-source_20061007.zip"&gt;portaputty-source_20061007.zip&lt;/a&gt; 1.11 MB (&lt;a href="http://www.rapidshare.de/"&gt;rapidshare&lt;/a&gt;)
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.megaupload.com/?d=JL7FC7H4"&gt;portaputty-source_20061007.zip&lt;/a&gt; 1.11 MB (&lt;a href="http://www.megaupload.com/"&gt;megaupload&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Here are the things I changed:
&lt;ul&gt;&lt;li&gt;PuTTY now looks for the settings files under the same directory as the executable.&lt;/li&gt;&lt;li&gt;Now it's truly portable (copy and move the executables and configuration around at will).
&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-116026013394036131?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/116026013394036131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=116026013394036131' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/116026013394036131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/116026013394036131'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2006/10/truly-portable-putty-058svn-r6860.html' title='Truly Portable PuTTY 0.58+svn r6860'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27161166.post-115923317467006462</id><published>2006-09-25T20:45:00.000-04:00</published><updated>2007-05-03T02:17:57.691-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='portaPuTTY'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Portable PuTTY 0.58+svn r6860</title><content type='html'>I rebuilt a portable version of &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/" title="PuTTY"&gt;PuTTY&lt;/a&gt; today with a few changes that I needed in order to get it working the way I wanted.  My build is based on the PuTTY svn repository revision 6860, but my changes could easily be applied to version 0.58.  My changes are based on what I found at the &lt;a href="http://socialistsushi.com/portaputty"&gt;portaPuTTY&lt;/a&gt; site.

Get it from one of the places I uploaded it to:
&lt;ul&gt;&lt;li&gt;Binaries
&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rarhost.com/download-stnhwj.html"&gt;portaputty_20060925.rar&lt;/a&gt; 1.02 MB (&lt;a href="http://www.rarhost.com/"&gt;rarhost&lt;/a&gt;)
&lt;/li&gt;&lt;li&gt;&lt;a href="http://rapidshare.de/files/34470658/portaputty_20060925.zip"&gt;portaputty_20060925.zip&lt;/a&gt; 1.18 MB (&lt;a href="http://www.rapidshare.de/"&gt;rapidshare&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.megaupload.com/?d=FBHMKTL0"&gt;portaputty_20060925.zip&lt;/a&gt; 1.18 MB (&lt;a href="http://www.megaupload.com/"&gt;megaupload&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Source&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rarhost.com/download-myu7py.html"&gt;portaputty-source_20060925.rar&lt;/a&gt; 1.83 MB (&lt;a href="http://www.rarhost.com/"&gt;rarhost&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://rapidshare.de/files/34471937/portaputty-source_20060925.zip"&gt;portaputty-source_20060925.zip&lt;/a&gt; 2.27 MB (&lt;a href="http://www.rapidshare.de/"&gt;rapidshare&lt;/a&gt;)
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.megaupload.com/?d=1PP88W76"&gt;portaputty-source_20060925.zip&lt;/a&gt; 2.27 MB (&lt;a href="http://www.megaupload.com/"&gt;megaupload&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
I built this sucker with &lt;a href="http://msdn.microsoft.com/vstudio/express/visualc/"&gt;Visual C++ 2005 Express Edition&lt;/a&gt; with Microsoft's Platform SDK for Windows Server 2003 R2.  I haven't thoroughly tested this thing, but it seems to work well so far.

Here are the things I changed:
&lt;ul&gt;&lt;li&gt;Pageant reads saved sessions from the files instead of from the registry (this was my main reason for building my own).&lt;/li&gt;&lt;li&gt;Fonts should work perfectly now.  I know some people reported it as being patched, but I was still having problems with it.
&lt;/li&gt;&lt;li&gt;Reading and writing to the randomseed file works correctly now (I was having problems with PuTTY crashing).&lt;/li&gt;&lt;li&gt;Used the dirent implementation from &lt;a href="http://www.two-sdg.demon.co.uk/curbralan/code/dirent/dirent.html"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Updated the Recipe file for generating the Makefiles with dirent and pageant with winstore (to allow for reading from the configuration files).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27161166-115923317467006462?l=potatosaladx.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://potatosaladx.blogspot.com/feeds/115923317467006462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27161166&amp;postID=115923317467006462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/115923317467006462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27161166/posts/default/115923317467006462'/><link rel='alternate' type='text/html' href='http://potatosaladx.blogspot.com/2006/09/portable-putty-058svn-r6860.html' title='Portable PuTTY 0.58+svn r6860'/><author><name>Andrew Bennett</name><uri>https://profiles.google.com/115841376792509719998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-V0e-bF3bHXw/AAAAAAAAAAI/AAAAAAAAAvM/AoZ6gt-4eyk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
