<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>What the Fsck!?</title>
	
	<link>http://al3k.net</link>
	<description>The story of how I find cool stuff, inevitably break said cool stuff, and (hopefully) end up fixing whatever I did</description>
	<lastBuildDate>Tue, 20 Jul 2010 12:39:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/al3k/GEOn" /><feedburner:info uri="al3k/geon" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>A Fusion of Mutt, Gmail, Offlineimap, msmtp, and PGP</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/pli2OQe1XqY/</link>
		<comments>http://al3k.net/2010/06/mutt/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 19:50:01 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[mutt]]></category>
		<category><![CDATA[offlineimap]]></category>
		<category><![CDATA[pgp]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=373</guid>
		<description><![CDATA[Email clients suck, Mutt just sucks less (yes I did rip off their slogan).  There are tons of email clients out there, most of which really do suck badly.  I used the Gmail client for some time and it was OK, for a web client.  I could have used sane thread handling, actually showing email [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://al3k.net/wp-content/uploads/2010/06/screen1.png"><br />
</a>Email clients suck, Mutt just sucks less (yes I did rip off their slogan).  There are tons of email clients out there, most of which really do suck badly.  I used the Gmail client for some time and it was OK, for a web client.  I could have used sane thread handling, actually showing email that got sent to myself, S/MIME or PGP support (preferably PGP), not having to fire up resource heavy firefox, etc etc.  Now let me preface this by saying that Mutt is not for everyone.  It is a terminal based client, making it great for ssh, and it has a very steep learning curve.  One mistake people commonly make is that they assume that, like most other email clients, Mutt handles receiving, sending and viewing email.  This is an incorrect assumption as mutt is solely a MUA (Mail User Agent).  The idea is that you piece together exactly how you want your email system to work.  This means that it requires a lot of work on the users end to configure the system, although it does afford the advantage of having an email setup that does exactly what you want it to do, exactly how you want it done.</p>
<p>With that being said, I will first explain in words what my setup is, how it works, and why it makes sense to do it this way&#8230;then I will include all relevant configuration files along the way.</p>
<p>So I have Mutt, and my massively customized .muttrc.  It includes where my folders are located, how I want key bindings to behave, colors, PGP settings, key bindings hooks for sending from the appropriate addresses, how i want to edit and view my headers, that I want to use vim to edit email, how email threads should look, blah blah blah.  Below is my muttrc in all of its glory.  I have painstakingly commented all the relevant pieces so everything makes sense to the normal person (and to me when I forget what stuff does. I have excluded certain pieces to avoid getting spammed :p )</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;# dirs, dirs, and more dirs. self explanatory<br />
set mbox_type = Maildir<br />
set mbox = &quot;~/mail/gmail&quot;<br />
set folder = &quot;~/mail/gmail&quot;<br />
set spoolfile = +INBOX<br />
set postponed = +drafts<br />
set trash = +trash &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# special folder. you will need the trash patch<br />
folder-hook . 'set record = ^' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# store sent mail in the same folder as sent from<br />
set header_cache =~/.mutt/cache/headers<br />
set tmpdir = ~/.mutt/temp<br />
set mailcap_path = ~/.mailcap<br />
set hostname = behemoth.al3k.net<br />
set timeout = 3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # idle time before scanning<br />
unset beep &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# stop beeping at me<br />
alternates (a regex that includes all of the email address you send and receive mail to/froma&gt;)<br />
<br />
# Header related stuff<br />
ignore * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# ignore everything<br />
unignore From: To: Cc: Date: Subject: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # only unignore stuff i want to see<br />
unignore x-mailer: x-pgp-key: posted-to: &nbsp; &nbsp; &nbsp; &nbsp;# only unignore stuff i want to see<br />
unignore User-Agent: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# only unignore stuff i want to see<br />
hdr_order From: To: Cc: Date: Subject: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# the order I want the unignored stuff to display<br />
my_hdr X-PGP-Key: http://opensource.osu.edu/~al3k/pubkey.asc<br />
<br />
# composing stuff<br />
set realname = &quot;Alek Rollyson&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# set my name<br />
set edit_headers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# include headers when editing<br />
set fast_reply &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# skip to composing when replying<br />
set reply_to &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# reply to Reply to: field<br />
set include &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # include messages in replies<br />
set forward_quote &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # include messages in forwards<br />
set attribution = &quot;On %d, %n wrote:&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# set the attribution<br />
unset mime_forward &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# include attachments as part of the body<br />
set sig_dashes = yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# dashes in my siggy<br />
set sig_on_top &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# put my signature before the forwarded message<br />
set askcc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ask for CC:<br />
set forward_format = &quot;Fwd: %s&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# format for subject when forwarding<br />
set use_envelope_from &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # make sure From: and the smtp sender match up<br />
set ispell = &quot;aspell -e -c&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # use aspell as ispell<br />
set sendmail_wait = &quot;-1&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Don't wait for sendmai;<br />
set user_agent &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# show people i'm using mutt!<br />
set copy = yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# keep sent messages<br />
<br />
# Sorting, Markers etc.<br />
set display_filter = mail-to-filter &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # cuts off long to: lines<br />
#set implicit_autoview &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# figure out autoview stuff automatically. stupid html mail<br />
alternative_order text/plain text/html &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# don't prefer html over plain text<br />
unset move &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# gmail does that<br />
set delete &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# don't ask to delete, just do<br />
unset confirmappend &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # don't ask to append, just do!<br />
set quit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# don't ask to quit, just do!!<br />
unset mark_old &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# don't mark as old, it's pointless<br />
set tilde &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # pretty tildes in the pager like vim<br />
set markers=no &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# don't put '+' at the beginning of wrapped lines<br />
set pager_index_lines= 20 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # how large is the index window?<br />
set pager_stop &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# don't automatically go to the next message<br />
set menu_scroll &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # scroll in menus<br />
set sort = 'threads' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# thread style<br />
set sort_aux = 'reverse-last-date' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# secondary sorting after threading. gmail-like<br />
set sort_browser='reverse-date' &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # fixes the way thread sorting handles dates, makes more sense<br />
#set nostrict_threads &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # fuzzy threading. don't always group like subjects<br />
<br />
# Vim!<br />
set editor= &quot;vim +:silent+/^$&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# use vim and skip to the first blank line<br />
<br />
# random macros and bindings. adding vim things and bindings for external programs<br />
bind pager gg top<br />
bind pager G &nbsp;bottom<br />
bind pager,index K &nbsp;previous-undeleted<br />
bind pager,index J &nbsp;next-undeleted<br />
bind pager,index j &nbsp;next-entry<br />
bind pager,index k &nbsp;previous-entry<br />
bind index,pager R group-reply<br />
bind index B bounce-message<br />
set query_command = &quot;abook --mutt-query '%s'&quot;<br />
bind editor &nbsp;complete-query<br />
bind editor ^T complete<br />
macro index,pager Z &quot;!offlineimap -q -o -u Curses.Blinkenlights\n&quot; &quot;invoke offlineimap&quot;  &lt;&lt; this may be useless since I now daemonize offlineimap<br />
macro generic,index,pager \Ca &quot;abook&quot; &quot;launch abook&quot;<br />
macro index,pager A &quot;<br />
abook --add-email&quot; &quot;add sender to abook&quot;<br />
macro pager,index I &quot;!&quot; &quot;go to Inbox&quot;<br />
<br />
# macros to source profiles for different email addresses<br />
macro &nbsp; index,pager &nbsp; &nbsp; &nbsp;&quot;:source ~/.mutt/profile.gmail\n&quot;<br />
macro &nbsp; index,pager &nbsp; &nbsp; &nbsp;&quot;:source ~/.mutt/profile.al3k\n&quot;<br />
macro &nbsp; index,pager &nbsp; &nbsp; &nbsp;&quot;:source ~/.mutt/profile.arollyson\n&quot;<br />
macro &nbsp; index,pager &nbsp; &nbsp; &quot;:source ~/.mutt/profile.matrix\n&quot;<br />
macro &nbsp; index,pager &nbsp; &nbsp; &quot;:source ~/.mutt/profile.opensource\n&quot;<br />
macro &nbsp; index,pager &nbsp; &nbsp; &quot;:source ~/.mutt/profile.osu\n&quot;<br />
<br />
# teh source!<br />
source ~/.mutt/autoview &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# autoview stuff for mailcap<br />
source `FILE=$HOME/.mutt/sidebar; mutt -v | grep -Fq sidebar || FILE=/dev/null; echo $FILE` # conditionally source sidebar<br />
source ~/.mutt/profile.gmail &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # default profile to source<br />
source `FILE=$HOME/.mutt/colors; [[ $TERM =~ 256 ]] &amp;&amp; FILE=$HOME/.mutt/256colors; echo $FILE` #conditionally source 256 colors<br />
source ~/.mutt/subscriptions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Define the list of subscribed mailing lists.<br />
source ~/.mutt/gpg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# gpg stuffs<br />
<br />
# reply hooks to send from correct addresses<br />
reply-hook &quot;~C ()$&quot; source ~/.mutt/profile.matrix\n<br />
reply-hook &quot;~C ()&quot; source ~/.mutt/profile.osu\n<br />
reply-hook &quot;~C ()&quot; source ~/.mutt/profile.arollyson\n<br />
reply-hook &quot;~C ()&quot; source ~/.mutt/profile.gmail\n<br />
reply-hook &quot;~C (<br />
)&quot; source ~/.mutt/profile.al3k\n<br />
reply-hook &quot;~C ()&quot; source ~/.mutt/profile.opensource\n</div></div>
<p>I use vim as my email composer and there are a few tricks to get vim to play well with mutt.  Here is a snippet from my vimrc that enables spellchecking for mutt files and a few key bindings to may my mail look pretty when I&#8217;m done slapping on my keyboard.</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">augroup MUTT<br />
au BufRead ~/.mutt/temp/mutt* set spell &quot; &lt;-- vim 7 required<br />
au BufRead ~/.mutt/temp/mutt* nmap  &lt;F3&gt;  gqap<br />
au BufRead ~/.mutt/temp/mutt* nmap  &lt;F4&gt;  gqqj<br />
au BufRead ~/.mutt/temp/mutt* nmap  &lt;F5&gt;  kgqj<br />
au BufRead ~/.mutt/temp/mutt* map!  &lt;F3&gt;  &lt;ESC&gt;gqapi<br />
au BufRead ~/.mutt/temp/mutt* map!  &lt;F4&gt;  &lt;ESC&gt;gqqji<br />
au BufRead ~/.mutt/temp/mutt* map!  &lt;F5&gt;  &lt;ESC&gt;kgqji<br />
augroup END</div></div>
<p>Pretty self explanatory if you&#8217;re familiar with vim.  Enables spellchecking for mutt composition and gives me F3 &#8211; F5 for nice paragraph formatting.</p>
<p>As far as the F key mappings and reply hooks go, this is how I send from multiple addresses in Mutt easily.  Whenever I want to send as a certain address I just hit the corresponding F key from within mutt and then go on composing merrily.  The reply hooks ensure that I always reply as the address the email was addressed to.  Reply hooks essentially work the same as send-hooks except backwards.  They are not very well documented in the Mutt manual, which is a shame because they are extremely useful in cases like this.  The F keys source profiles that I have in my .mutt folder, they all must identical (except for different values in the variables of course) since they are sourcing out the same information.  Here is a skeleton profile that I use:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;# Mutt sender profile: alek.rollyson<br />
<br />
# Signature file<br />
set signature='~/.mutt/signature-al3k'<br />
<br />
#smtp settings<br />
set sendmail='/usr/bin/msmtp -a al3k'<br />
<br />
# Customized headers<br />
set from=&quot;al3k@al3k.net&quot;<br />
<br />
# Include the profile name in the status line<br />
set status_format=&quot;-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b? %?l? %l?]---(%s/%S)-al3k-%&gt;-(%P)---&quot;</div></div>
<p>As you can see, each profile contains a path to the correct signature for that profile, setting the &#8220;send from&#8221; variable, passing the correct arguments to msmtp (which will be covered later), and setting the status bar to show which profile I am actually using&#8230;in this case al3k is the profile.  The default profile sourced is set in my muttrc (see above) and I can switch them out at will by hitting F7 through F12 in Mutt.</p>
<p>Now this is how I view and compose mail, sending and receiving is a different story;  I will begin with how I receive my email.  Bottom line, offlineimap is awesome.  I realize Mutt has built in imap support, but it is mega slow and I would rather have a local copy anyways.  From the offlineimap project github site, &#8220;You get a current copy of your messages on each computer, and changes you make one place will be visible on all other systems. For instance, you can delete a message on your home computer, and it will appear deleted on your work computer as well. OfflineIMAP is also useful if you want to use a mail reader that does not have IMAP  support, has poor IMAP support, or does not provide disconnected operation.&#8221;  The one downside to this is that it&#8217;s tough to find a solution to store your passwords in a secure way.  For now I just store them directly in the file as I have an encrypted disk.  In the future I would like to whip up a simple python keyring to store these safely, gnome-keyring and kwallet are waaaay too bloated for me to feel worth using them.  Here is my .offlineimaprc</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[general]<br />
accounts = Gmail<br />
ui = Noninteractive.Quiet<br />
maxconnections = 3<br />
<br />
[Account Gmail]<br />
localrepository = mylocal<br />
remoterepository = Gmail<br />
autorefresh = 5<br />
quick = 10<br />
<br />
[Repository mylocal]<br />
type = Maildir<br />
localfolders = ~/mail/gmail<br />
<br />
[Repository Gmail]<br />
type = Gmail<br />
remoteuser = yea...<br />
remotepass = hah!<br />
ssl = yes<br />
realdelete = no<br />
folderfilter = lambda foldername: not re.search('.*All Mail$', foldername)<br />
nametrans = lambda folder: re.sub('.*Spam$', 'spam', re.sub('.*Drafts$', 'drafts', re.sub('.*Sent Mail$', 'sent', re.sub('.*Starred$', 'flagged', re.sub('.*Trash$', 'trash', folder)))))</div></div>
<p>Just insert your username and password where needed and chmod 0600 the file.  The nametrans function just uses a regex to translate the goofy gmail virtual folders into names that actually make sense. Feel free to change the names of localrepository and whatever else, just my setup&#8230;doesn&#8217;t have to be yours.</p>
<p>The, I use this short script stolen from the Arch Linux wiki to quickly daemonize a program that i place in ~/build/start_daemon (offlineimap occasionally crashes and becomes a resource hog, this takes care of that problem):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #000000; font-weight: bold;">set</span> <span style="color: #660033;">-e</span> <span style="color: #660033;">-f</span> <span style="color: #660033;">-u</span><br />
<br />
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">getopts</span> n:c:p: f; <span style="color: #000000; font-weight: bold;">do</span><br />
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #007800;">$f</span> <span style="color: #000000; font-weight: bold;">in</span><br />
n<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #007800;">NICE</span>=<span style="color: #007800;">$OPTARG</span><span style="color: #000000; font-weight: bold;">;;</span><br />
c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #007800;">IONICE_CLASS</span>=<span style="color: #007800;">$OPTARG</span><span style="color: #000000; font-weight: bold;">;;</span><br />
p<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #007800;">IONICE_PRIORITY</span>=<span style="color: #007800;">$OPTARG</span><span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">;;</span><br />
<span style="color: #000000; font-weight: bold;">esac</span><br />
<span style="color: #000000; font-weight: bold;">done</span><br />
<span style="color: #7a0874; font-weight: bold;">shift</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>OPTIND - <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #007800;">cmd</span>=<span style="color: #007800;">$*</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000000; font-weight: bold;">!</span> pgrep <span style="color: #660033;">-u</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$UID</span>&quot;</span> <span style="color: #660033;">-xf</span> <span style="color: #660033;">--</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$cmd</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000;">1</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
<span style="color: #007800;">nice_args</span>=<br />
<span style="color: #007800;">ionice_args</span>=<br />
<br />
var2arg<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;$3&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
<span style="color: #7a0874; font-weight: bold;">eval</span> <span style="color: #ff0000;">&quot;$1=$2\ $3\ <span style="color: #000099; font-weight: bold;">\$</span>$1&quot;</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
arg2cmd<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;$2&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #7a0874; font-weight: bold;">type</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000;">1</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
<span style="color: #007800;">cmd</span>=<span style="color: #ff0000;">&quot;$* -- <span style="color: #007800;">$cmd</span>&quot;</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
var2arg nice_args &nbsp; <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$NICE</span>&quot;</span><br />
var2arg ionice_args <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$IONICE_CLASS</span>&quot;</span><br />
var2arg ionice_args <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$IONICE_PRIORITY</span>&quot;</span><br />
<br />
arg2cmd <span style="color: #c20cb9; font-weight: bold;">nice</span> &nbsp; <span style="color: #ff0000;">&quot;<span style="color: #007800;">$nice_args</span>&quot;</span><br />
arg2cmd ionice <span style="color: #ff0000;">&quot;<span style="color: #007800;">$ionice_args</span>&quot;</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #007800;">$cmd</span><br />
<span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>And then set up a cron job to run this every five minutes:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">*/5 * * * * exec ~/build/start_daemon -n19 -c2 -p7 python /usr/bin/offlineimap</div></div>
<p>Ta da!  offlineimap is syncing your local copy of your inbox with gmail every 5 minutes, all changes made at any point will be reflected everywhere, plus you have an offline copy of your inbox to work with!</p>
<p>For sending mail, I use the lightweigh msmtp and it works awesomely for me.  You saw above that each profile sets the sendmail command, which is smtp followed by the argument -a and the name of the profile.  This makes it extremely easy to send from different smtp servers and email addresses at will.  Here is a skeleton .msmtprc that is similar to the one I use:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># Set default values for all following accounts.<br />
defaults<br />
tls on<br />
tls_trust_file /etc/ssl/certs/ca-certificates.crt<br />
logfile ~/logs/msmtp.log<br />
<br />
# GMAIL<br />
account gmail<br />
host &lt;one of my smtp servers&gt;<br />
port 587<br />
from &lt;one of my email addresses&gt;<br />
domain &lt;domain of the email address<br />
auth on<br />
user &lt;username for the server&gt;<br />
password &lt;password for the server&gt;<br />
<br />
# arollyson<br />
account arollyson<br />
host &lt;one of my smtp servers&gt;<br />
port 587<br />
from &lt;a different email addresses&gt;<br />
domain &lt;domain of the different email address<br />
auth on<br />
user &lt;username for the other server&gt;<br />
password &lt;password for the other server&gt;</div></div>
<p>With that setup you can send from the different accounts via msmtp -a &lt;accountname&gt;, works pretty well for me.<br />
As far as PGP signing/encrypting goes, it&#8217;s rather simple as well.  I borrowed a piece of configuration from another guy who was nice enough to write about his mutt setup and combined it with some gnupg configuration to get a very nice PGP + mutt combination.  As you can see above in my .muttrc I source a file called ~/.mutt/gpg which contains all of my gpg settings and looks like so&#8230;</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># %p    The empty string when no passphrase is needed,<br />
#       the string &quot;PGPPASSFD=0&quot; if one is needed.<br />
#<br />
#       This is mostly used in conditional % sequences.<br />
#<br />
# %f    Most PGP commands operate on a single file or a file<br />
#       containing a message.  %f expands to this file's name.<br />
#<br />
# %s    When verifying signatures, there is another temporary file<br />
#       containing the detached signature.  %s expands to this<br />
#       file's name.<br />
#<br />
# %a    In &quot;signing&quot; contexts, this expands to the value of the<br />
#       configuration variable $pgp_sign_as.  You probably need to<br />
#       use this within a conditional % sequence.<br />
#<br />
# %r    In many contexts, mutt passes key IDs to pgp.  %r expands to<br />
#       a list of key IDs.<br />
<br />
# decode application/pgp<br />
set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;<br />
<br />
# verify a pgp/mime signature<br />
set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;<br />
<br />
# decrypt a pgp/mime attachment<br />
set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;<br />
<br />
# create a pgp/mime signed attachment<br />
set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;<br />
<br />
# create a application/pgp signed (old-style) message<br />
set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;<br />
<br />
# create a pgp/mime encrypted attachment<br />
set pgp_encrypt_only_command=&quot;/usr/lib/mutt/pgpewrap gpg -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f&quot;<br />
<br />
# create a pgp/mime encrypted and signed attachment<br />
set pgp_encrypt_sign_command=&quot;/usr/lib/mutt/pgpewrap gpg --passphrase-fd 0 -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f&quot;<br />
<br />
# import a key into the public key ring<br />
set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot;<br />
<br />
# export a key from the public key ring<br />
set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot;<br />
<br />
# verify a key<br />
set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;<br />
<br />
# read in the public key ring<br />
set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;<br />
<br />
# read in the secret key ring<br />
set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;<br />
<br />
# receive key from keyserver:<br />
set pgp_getkeys_command=&quot;gpg --recv-keys %r &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&quot;<br />
<br />
# automatically sign outgoing mail<br />
set pgp_autosign = yes<br />
<br />
# half hour timeout<br />
set pgp_timeout = 1800<br />
<br />
# always verify sigs<br />
set pgp_verify_sig = yes<br />
<br />
#what to say when a good sig occurs<br />
set pgp_good_sign = &quot;^gpg: Good signature from&quot;<br />
<br />
# unset this crap, stop doing it!<br />
unset crypt_autosmime</div></div>
<p>I know that just looks to be a bunch of jibberish but I do promise that it does work.  The setup is generic and should work for anyone, I won&#8217;t bother explaining it since I feel it is well commented but the short version is that Mutt just needs to be spoonfed the commands it needs to perform PGP actions on email.  This, in conjunction with a few settings on your .gnupg/gpg.conf, will make Mutt a secure email machine.  Here&#8217;s the relevant pieces you will want:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">keyserver pgp.mit.edu<br />
keyserver-options auto-key-retrieve<br />
#encrypt-to-self - allow you to read messages you encrypted for others<br />
#use 'gpg --fingerprint' to get this value - just remove the spaces<br />
encrypt-to &lt;insert your pgp fingerprint here&gt;</div></div>
<p>Pretty simple, all this does it set what public keyserver you want to use, MIT is extremely popular and I&#8217;m pretty sure they all propagate to each other anyway, and will automatically retrieve public keys when you receive mail from someone who stores their key on the server(s) as well.  The last line will automatically sign all encrypted messages to yourself as well as the recipient so you don&#8217;t get encrypted out of your own sent email :p<br />
Lastly is my coloring, but that is really just a matter of taste.  I use 256 color profiles as well so it may not be compatible with everyone&#8217;s setup.  I&#8217;ll go ahead and post my colorscheme here and a screenshot, but that pretty much makes covers everything I do in Mutt.  I have yet to work on getting a real good mailcap going so I don&#8217;t have anything worthwhile to post here, but I will check back in when I have something worth sharing.<br />
Here&#8217;s my color setup:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># set default<br />
color normal     white         default<br />
<br />
# main colors<br />
color status     brightwhite   blue<br />
color indicator  brightyellow  red<br />
color tree       brightmagenta default<br />
color error      brightred     default<br />
color message    brightyellow  default<br />
<br />
# uncolor everything, only recolor what i want<br />
#uncolor index *<br />
<br />
# and recolor them appropriately<br />
color index      color69       default ~u<br />
color index      color240      default ~P<br />
color index      brightyellow  default ~N<br />
color index      brightgreen   default ~T<br />
color index      brightred     default ~D<br />
<br />
# set up the headers<br />
color header     brightred     default &quot;^from:&quot;<br />
color header     yellow        default &quot;^to:&quot;<br />
color header     yellow        default &quot;^cc:&quot;<br />
color header     color69       default &quot;^date:&quot;<br />
color header     color69       default &quot;^subject:&quot;<br />
color header     brightcyan    default &quot;^user-agent|^x-*&quot;<br />
<br />
# message bodies<br />
color attachment brightred     default<br />
color search     red           brightred<br />
color signature  cyan          default<br />
color tilde      blue          default<br />
<br />
# urls<br />
color body       brightmagenta default &quot;(^|&amp;lt;| )mailto:[^ ]+@[^ ]( |&amp;gt;|$)&quot;<br />
color body       brightmagenta default &quot;(^|&amp;lt;| )(http|https|ftp|file|telnet|news|finger)://[^ ]+( |&amp;gt;|$)&quot;<br />
<br />
# smileys, the right way and the backward-ass euro way<br />
color body       color172      default &quot;(^| )+(|[&amp;lt;&amp;gt;|])[8;:](|[^ ])[)(/|DOPS]( |$)+&quot;<br />
color body       color172      default &quot;(^| )+[)(/|DOPS](|[^ ])[8;:](|[&amp;lt;&amp;gt;|])( |$)+&quot;<br />
<br />
# *bold*, _underline_, and /italic/<br />
color body       brightcyan    default &quot;(^| )\\*[^ ]+\\*( |$)&quot;<br />
color body       brightcyan    default &quot;(^| )_[^ ]+_( |$)&quot;<br />
color body       brightcyan    default &quot;(^| )/[^ ]+/( |$)&quot;<br />
<br />
# quote blocks<br />
color quoted     magenta       default<br />
color quoted1    cyan          default<br />
<br />
color quoted2    green         default<br />
color quoted3    magenta       default<br />
color quoted4    cyan          default<br />
color quoted5    green         default<br />
color quoted6    magenta       default<br />
color quoted7    cyan          default<br />
<br />
# PGP messages<br />
color  body      brightgreen     default &quot;^gpg: Good signature .*&quot;<br />
color  body      white           default &quot;^gpg: &quot;<br />
color  body      brightwhite     red     &quot;^gpg: BAD signature from.*&quot;</div></div>
<p>And here&#8217;s a few screenshots of my Mutt in action.  Excuse the crappy pictures, I was on my Mac (not by choice) at the time and I personally think the console looks cartoony as hell. I&#8217;ll get some better ones up later.</p>
<p>Here is how my full setup looks, in fancy gallery fashion.</p>

<a href='http://al3k.net/2010/06/mutt/screen1/' title='Mutt Inbox'><img width="150" height="150" src="http://al3k.net/wp-content/uploads/2010/06/screen1-150x150.png" class="attachment-thumbnail" alt="Mutt Inbox" title="Mutt Inbox" /></a>
<a href='http://al3k.net/2010/06/mutt/screen2/' title='Mutt Pager'><img width="150" height="150" src="http://al3k.net/wp-content/uploads/2010/06/screen2-150x150.png" class="attachment-thumbnail" alt="Mutt Pager" title="Mutt Pager" /></a>
<a href='http://al3k.net/2010/06/mutt/screen3/' title='Mutt Composition in Vim'><img width="150" height="150" src="http://al3k.net/wp-content/uploads/2010/06/screen3-150x150.png" class="attachment-thumbnail" alt="Mutt Composition in Vim" title="Mutt Composition in Vim" /></a>
<a href='http://al3k.net/2010/06/mutt/screen4/' title='The &quot;Send&quot; Page in Mutt'><img width="150" height="150" src="http://al3k.net/wp-content/uploads/2010/06/screen4-150x150.png" class="attachment-thumbnail" alt="The &quot;Send&quot; Page in Mutt" title="The &quot;Send&quot; Page in Mutt" /></a>
<a href='http://al3k.net/2010/06/mutt/screen5/' title='Mutt&#039;s Full Threaded Glory'><img width="150" height="150" src="http://al3k.net/wp-content/uploads/2010/06/screen5-150x150.png" class="attachment-thumbnail" alt="Mutt&#039;s Full Threaded Glory" title="Mutt&#039;s Full Threaded Glory" /></a>

<p>Hope this helps out people looking to get a jump start on mutt, or those looking for some more advanced tweaks to make mutt more awesome than it already is.  Leave a comment if you have any questions, or really just anything to say.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/pli2OQe1XqY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/06/mutt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/06/mutt/</feedburner:origLink></item>
		<item>
		<title>How To Remap Caps Lock To Escape</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/JQjz2oL1Cmk/</link>
		<comments>http://al3k.net/2010/05/how-to-remap-caps-lock-to-escape/#comments</comments>
		<pubDate>Fri, 07 May 2010 03:33:01 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Projects/How-To's]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=354</guid>
		<description><![CDATA[So I think we can all agree that whoever decided the caps lock key should get prime real estate should be stoned.  Seriously, it&#8217;s right where an extremely useful key could be placed&#8230;like escape!  Keys that can be toggled on and off, especially by software means, should not be given such huge buttons placed where [...]]]></description>
			<content:encoded><![CDATA[<p>So I think we can all agree that whoever decided the caps lock key should get prime real estate should be stoned.  Seriously, it&#8217;s right where an extremely useful key could be placed&#8230;like escape!  Keys that can be toggled on and off, especially by software means, should not be given such huge buttons placed where other useful buttons should be in the first place.  I am a heavy Vim user, so I use escape <span style="text-decoration: underline;"><em><strong>A LOT</strong></em></span> to change modes.  If you&#8217;re an <span style="text-decoration: line-through;">emacs</span> <em>*shuddersss*</em> user you can remap this key to control but I am not going to tell you how as you should be using Vim anyway :p  I&#8217;m just kidding, it&#8217;s a simple word substitution I will show in a minute.  In order to get this setting to effect both console and X usages we will need to edit two different sets of files, both of which I will demonstrate.  This is a Linux/UNIX specific tutorial so apologize to you poor Windows and OS X users who are stuck out in the cold.  If it is demanded, I can show how to do this in OS X as it is a pain in the ass, but unfortunately I have no idea how to do this in Windows.  Sorry about your luck   <img src='http://al3k.net/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' />     Anyways&#8230;</p>
<p>In order to get this to work in the console for all users, stick this in your /etc/rc.local (this is an Arch Linux example, you just need this to be in a file that will be ran as root during startup):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">dumpkeys</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-i</span> keymaps<span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #7a0874; font-weight: bold;">echo</span> keycode <span style="color: #000000;">58</span> = Escape<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">loadkeys</span> -</div></div>
<p>This should make it so Caps Lock is remapped to escape at all times in the virtual consoles.  If you wanted it to be remapped to control, just substitute &#8220;Control&#8221; for &#8220;Escape&#8221; there towards the end&#8230;simple enough.  Or you could just use Vim <img src='http://al3k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In order for this to take effect in X, I use Xmodmap to remap the keycodes.  The way I do it is to stick these two lines in the file ~/.Xmodmap:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">remove Lock = Caps_Lock<br />
keysym Caps_Lock = Escape</div></div>
<p>Then in my .xinitrc have a line that says:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">xmodmap</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>al3k<span style="color: #000000; font-weight: bold;">/</span>.Xmodmap <span style="color: #000000; font-weight: bold;">&amp;</span></div></div>
<p>You can run that command in the console and, since it will be run at every boot, it will be a persistent setting.  Having escape at a much more reachable position makes productivity soar&#8230;at least for me.  It allows me to Vim and Vimperate at a much faster speed.  Hope this helps!  Post comments if you have any questions, I am happy to help.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/JQjz2oL1Cmk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/05/how-to-remap-caps-lock-to-escape/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/05/how-to-remap-caps-lock-to-escape/</feedburner:origLink></item>
		<item>
		<title>Toggling Drivers With Keyboard Shortcuts</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/QEuzV7049sA/</link>
		<comments>http://al3k.net/2010/05/toggling-drivers-with-keyboard-shortcuts/#comments</comments>
		<pubDate>Wed, 05 May 2010 22:10:50 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Projects/How-To's]]></category>
		<category><![CDATA[dwm]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=343</guid>
		<description><![CDATA[I have a Macbook Pro which has a large touchpad that is really sensitive so its always clicking on stuff while I am typing, which is extremely annoying. I have tried going the syndaemon route to disable the touchpad while typing, but it is very unreliable in my experience and I&#8217;d rather go about doing this [...]]]></description>
			<content:encoded><![CDATA[<p>I have a Macbook Pro which has a large touchpad that is really sensitive so its always clicking on stuff while I am typing, which is extremely annoying. I have tried going the syndaemon route to disable the touchpad while typing, but it is very unreliable in my experience and I&#8217;d rather go about doing this without another process running in the background.  This is a Linux specific tutorial, so if you want to know how to do this on Windows or OS X I apologize as this will not work for you. I do most everything in a terminal except web browsing (and even then I use elinks unless I need flash or fancy javascript), DWM is my window manager and I use vimperator with Firefox so I hardly use my mouse as it is.  Who needs a mouse when I already have 100 buttons at my disposal?  Anyway, I was looking for a way to quickly toggle my touchpad driver on and off so I can use it when I need to and then quickly get rid of it again.  While this guide is specifically for DWM and my Macbook touchpad, if you alter the scripts for your particular drivers and set up the keyboard shortcuts with whatever window manager you use, this guide should be fairly universal.</p>
<p>Here is a simple bash script that will determine whether a module is loaded and insert/remove accordingly:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">lsmod</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> bcm5974 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> -l<span style="color: #7a0874; font-weight: bold;">&#41;</span> = <span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #000000; font-weight: bold;">then</span><br />
<span style="color: #666666; font-style: italic;"># mouse driver not found, need to load</span><br />
modprobe bcm5974<br />
swarp <span style="color: #000000;">512</span> <span style="color: #000000;">300</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
<span style="color: #666666; font-style: italic;"># mouse driver found, need to remove</span><br />
swarp <span style="color: #000000;">9999</span> <span style="color: #000000;">9999</span><br />
rmmod bcm5974<br />
<span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>I have this script located in /usr/local/bin/toggletp.  bcm5974 is the name of the macbook&#8217;s touchpad driver and swarp is a program that will move your cursor to specific coordinates on the screen.  Unfortunately there is no way to disable the mouse cursor in X so my solution was to move the cursor to the very bottom right corner of the screen where it can&#8217;t be seen when the module is disabled.<br />
Now we are going to need a simple sudo wrapper since modprobe/rmmod require root access:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>toggletp</div></div>
<p>Now in order for you to be able to execute this script requiring root access without a password, you will need to edit the sudoers file to allow this.  I tried using setuid originally until I realized that setuid doesn&#8217;t work on shell scripts <img src='http://al3k.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Here is the line I use in my sudoers file:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">%</span>wheel <span style="color: #007800;">ALL</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>root<span style="color: #7a0874; font-weight: bold;">&#41;</span> NOPASSWD: <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>toggletp</div></div>
<p>Wheel is just a group that my user belongs to. This is just the bsd style way of managing root access.  This line allows you to execute the toggletp script as root without a password.  Make sure that you set the executable bit on these scripts and lock down access since they can execute commands as root without passwords.</p>
<p>Now, these are the relevant lines from my DWM config.h so set the keyboard shortcuts for my scripts:</p>
<div class="codecolorer-container c vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">/* commands */</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>dmenucmd<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;dmenu_run&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-fn&quot;</span><span style="color: #339933;">,</span> font<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-nb&quot;</span><span style="color: #339933;">,</span> normbgcolor<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-nf&quot;</span><span style="color: #339933;">,</span> normfgcolor<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-sb&quot;</span><span style="color: #339933;">,</span> selbgcolor<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-sf&quot;</span><span style="color: #339933;">,</span> selfgcolor<span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>termcmd<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> &nbsp;<span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;urxvt&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>tpcmd<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;/home/al3k/build/toggletp&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mpdpause<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;mpc&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;toggle&quot;</span><span style="color: #339933;">,</span>NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mpdnext<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;mpc&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;next&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mpdprev<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;mpc&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;prev&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #993333;">static</span> Key keys<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #808080; font-style: italic;">/* modifier &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key &nbsp; &nbsp; &nbsp; &nbsp;function &nbsp; &nbsp; &nbsp; &nbsp;argument */</span><br />
<span style="color: #009900;">&#123;</span> MODKEY<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XK_p<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp;spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> dmenucmd <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<span style="color: #009900;">&#123;</span> MODKEY<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XK_Return<span style="color: #339933;">,</span> spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> termcmd <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<span style="color: #009900;">&#123;</span> MODKEY<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XK_z<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp;spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> tpcmd <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></div></div>
<p>The third line and the last line are the chunks relevant to this guide.  Copying these lines into your config.h will make it so that every time you press MODKEY+Z, it will execute the sudo wrapper for toggling your driver (mine is located in the build directory in my home folder).  Now recompile dwm, reload, and , if everything worked out correctly, you should be able to toggle your laptop touch pad on and off at will with a simple keyboard shortcut!</p>
<p>Leave comments if you have any questions, I&#8217;m happy to help. Also, I cannot take credit for the touchpad driver bash script, a friend of mine came up with it and I modifed it for my use.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/QEuzV7049sA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/05/toggling-drivers-with-keyboard-shortcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/05/toggling-drivers-with-keyboard-shortcuts/</feedburner:origLink></item>
		<item>
		<title>Media Keys with MPD and DWM</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/CaU8EffpwuM/</link>
		<comments>http://al3k.net/2010/05/media-keys-with-mpd-and-dwm/#comments</comments>
		<pubDate>Mon, 03 May 2010 21:01:14 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Projects/How-To's]]></category>
		<category><![CDATA[dwm]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mpd]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=322</guid>
		<description><![CDATA[To continue on my last post about mpd, I went on to figure out how to get my Macbook Pro&#8217;s media keys working with MPD and DWM. To catch those up who don&#8217;t know the acronyms, MPD is Music Player Daemon which is just a daemon that runs in the background that plays music and [...]]]></description>
			<content:encoded><![CDATA[<p>To continue on my last post about mpd, I went on to figure out how to get my Macbook Pro&#8217;s media keys working with MPD and DWM.  To catch those up who don&#8217;t know the acronyms, MPD is Music Player Daemon which is just a daemon that runs in the background that plays music and is controlled by clients (my personal favorite is ncmpcpp).  DWM stands for Dynamic Window Manager, which is a super minimalist tiling window manager that is customized entirely by editing its source code and is also characterized by being super freaking awesome.  This technique should work for any extra keys you may have on your keyboard and not necessarily just Macbooks.</p>
<p>What you&#8217;re going to need:  xmodmap (to map keycodes to octal codes so dwm doesn&#8217;t bitch), xev (to get the correct keycodes for the keys you want to use), and mpc (just a simple cli client for mpd that takes simple parameters).</p>
<p>Here we go:</p>
<p>Use this snippet to start xev and get only the info that we need:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">xev <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-A2</span> <span style="color: #660033;">--line-buffered</span> <span style="color: #ff0000;">'^KeyRelease'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'</span></div></div>
<p>Once that has started, the press the keys you want to use for play, next, previous etc and write down the corresponding keycodes so you remember.</p>
<p>Use your favorite editor to open up .Xmodmap (name doesnt really matter, this is just what I use) and insert something to this effect:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">remove Lock = Caps_Lock<br />
keysym Caps_Lock = Escape<br />
keycode <span style="color: #000000;">171</span> = F30 <br />
keycode <span style="color: #000000;">172</span> = F31 <br />
keycode <span style="color: #000000;">173</span> = F32</div></div>
<p>Map whatever your keycodes might be to F and then some incremental number (F30,31,31, etc etc. I just used arbitrary numbers).  You can ignore those first two line, I use them to remap my capslock key to escape (which is extremely useful if you&#8217;re a vim user&#8230;or you just realize how useless capslock is).</p>
<p>The run this to make the keymaps stick:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">xmodmap</span> ~<span style="color: #000000; font-weight: bold;">/</span>.Xmodmap</div></div>
<p>In order to make that change permanent you will need to add that line to your .xinitrc as well.</p>
<p>Now to editing the dwm code.  These are the relavent lines from my config.h:</p>
<div class="codecolorer-container c vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">/* commands */</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>dmenucmd<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;dmenu_run&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-fn&quot;</span><span style="color: #339933;">,</span> font<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-nb&quot;</span><span style="color: #339933;">,</span> normbgcolor<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-nf&quot;</span><span style="color: #339933;">,</span> normfgcolor<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-sb&quot;</span><span style="color: #339933;">,</span> selbgcolor<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;-sf&quot;</span><span style="color: #339933;">,</span> selfgcolor<span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>termcmd<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> &nbsp;<span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;urxvt&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>tpcmd<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;/home/al3k/build/toggletp&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> &nbsp;<br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mpdpause<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;mpc&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;toggle&quot;</span><span style="color: #339933;">,</span>NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mpdnext<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;mpc&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;next&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mpdprev<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;mpc&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;prev&quot;</span><span style="color: #339933;">,</span> NULL <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #993333;">static</span> Key keys<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;">/* modifier &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key &nbsp; &nbsp; &nbsp; &nbsp;function &nbsp; &nbsp; &nbsp; &nbsp;argument */</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span> MODKEY<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XK_p<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp;spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> dmenucmd <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span> MODKEY<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XK_Return<span style="color: #339933;">,</span> spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> termcmd <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span> MODKEY<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XK_z<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp;spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> tpcmd <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;XK_F31<span style="color: #339933;">,</span> &nbsp; &nbsp; spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> mpdpause <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;XK_F30<span style="color: #339933;">,</span> &nbsp; &nbsp; spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> mpdnext <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;XK_F32<span style="color: #339933;">,</span> &nbsp; &nbsp; spawn<span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#123;</span>.<span style="color: #202020;">v</span> <span style="color: #339933;">=</span> mpdprev <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></div></div>
<p>You will want to add the mpc and mpd lines exactly as they look there, carefully minding the ,&#8217;s and ;&#8217;s since this is C code.  The 0&#8242;s where the modkey should be just mean that there is no modifier key required.  Recomplie DWM, reload, test and voila!  The keys you mapped should now control mpd as you wish!</p>
<p>Leave some comments if you have any questions, I&#8217;ll be happy to help.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/CaU8EffpwuM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/05/media-keys-with-mpd-and-dwm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/05/media-keys-with-mpd-and-dwm/</feedburner:origLink></item>
		<item>
		<title>High CPU Usage with MPD in Arch Linux x86_64</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/70BRdCuo4ok/</link>
		<comments>http://al3k.net/2010/04/high-cpu-usage-with-mpd-in-arch-linux-x86_64/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 04:59:25 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Projects/How-To's]]></category>
		<category><![CDATA[arch]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mpd]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=310</guid>
		<description><![CDATA[As an Arch Linux lover, I love all things minimalist. I have recently fallen in love with MPD (Music Player Daemon) due to the fact that I am prone to dropping out of X, working on something (usually something that I broke :p), and then jump starting X once more. MPD allows me to do [...]]]></description>
			<content:encoded><![CDATA[<p>As an Arch Linux lover, I love all things minimalist.  I have recently fallen in love with MPD (Music Player Daemon) due to the fact that I am prone to dropping out of X, working on something (usually something that I broke :p),  and then jump starting X once more.  MPD allows me to do this and keep on jammin&#8217; to my tunes.  Unfortunately, I have encountered a problem where, when updating the database (and sometimes at other times), MPD procedes to eat both of my cores and then all of my memory and swap, resulting in a segfault.  This is highly upsetting.  Turns out, the culprit is an ancient version of libid3tag in the Arch repos that is causing all of the issues.  libid3tag gets hung up on certain id3 tags and then just gets confused and goes on a cpu and memory stealing rampage.  I found an bug post just earlier this month on the Arch site documenting this issue and I was glad to find out that I was not the only one with this issue.  The gentlemen was kind enough to post a PKGBUILD that included some patches that, ironically, came from Debian repos.  I thought Arch was supposed to be the bleeding edge one??!! :p  I have posted a link to the bug report which has the PKGBUILD attached near the bottom of the page and I am proud to report it has solved my issue. Kudos to honki for fixing this for us!</p>
<p><a href="http://bugs.archlinux.org/task/18595">http://bugs.archlinux.org/task/18595</a></p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/70BRdCuo4ok" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/04/high-cpu-usage-with-mpd-in-arch-linux-x86_64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/04/high-cpu-usage-with-mpd-in-arch-linux-x86_64/</feedburner:origLink></item>
		<item>
		<title>Clearing My Name</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/1x6NZXJX4A8/</link>
		<comments>http://al3k.net/2010/03/clearing-my-name/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 04:40:39 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=250</guid>
		<description><![CDATA[So, I need to clarify some things.  My wish is that at least it gets indexed by some search engines and people stop accusing me of not knowing what I am talking about.  About a month or so ago, I was interviewed by one of Ohio State&#8217;s student newspapers, The Lantern.  The purpose of the [...]]]></description>
			<content:encoded><![CDATA[<p>So, I need to clarify some things.  My wish is that at least it gets indexed by some search engines and people stop accusing me of not knowing what I am talking about.  About a month or so ago, I was interviewed by one of Ohio State&#8217;s student newspapers, The Lantern.  The purpose of the interview was to showcase the Open Source Club, which I was completely happy to do because this was an awesome opportunity to get our name out and, being the President, one of my duties is to be the public face of the club.  While most of the interview went over rather well and I was impressed with the reporters knowledge of technology, it did end up with a quote being put into print that was taken out of context and actually completely misquoted altogether. The quote in question made me look like a total idiot when it comes to the open source world.  The quote goes as follows,</p>
<blockquote><p>&#8220;Alek Rollyson, a third-year in information systems and the club’s  president, said there is a difference between free software and open  source software. Free software is like “free beer, or free as in it  doesn’t cost me anything,” he said.&#8221;</p></blockquote>
<p>This is the travesty I am referring to.  While 98% of people reading this article have no idea where the fault lies, that 2% of people are the one&#8217;s I am concerned about.  I was bashed by several blogging sites for being a poor open source representative and not knowing a thing when it comes to the open source community. I assure you, this is not the case.  Here&#8217;s how the quote should have gone..</p>
<blockquote><p>&#8220;A lot of people see a fundamental difference between free software and open source software.  When you say &#8220;free&#8221;, most people immediately think of  free in the monetary sense or the famous quote, &#8220;free as in beer&#8221;.  When I say free software, what I actually mean is free as in liberty.  I am free to share, study and modify the program however I want.  Free software implies that the user is free.&#8221;</p></blockquote>
<p>Since it has been a month or so since this story was printed and the interview took place, I cannot recall the exact words I used. But, I can assure you they were in the same context.  I am not sure whether the reporter just misunderstood what I said, whether I was just unclear in the interview (which I accept is entirely possible), or the reporter just locked down on that &#8220;free as in beer&#8221; quote in order to draw some more attention.  In any case, I can assure you that is not what I said or what I meant.  The whole purpose of this post was to get it out and indexed by search engines so that hopefully when people come and look me up they can see the correction and know that I am not, in fact, a moron.  I am holding no grudge against the reporter, in fact I think that he did a relatively good job, I just felt it important that I clear my name of what is just a misunderstanding.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/1x6NZXJX4A8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/03/clearing-my-name/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/03/clearing-my-name/</feedburner:origLink></item>
		<item>
		<title>Nicklist in Irssi</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/L9FCH4aRtqE/</link>
		<comments>http://al3k.net/2010/02/nicklist-in-irssi/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 06:15:59 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Projects/How-To's]]></category>
		<category><![CDATA[irssi]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://al3k.net/?p=204</guid>
		<description><![CDATA[It annoyed the piss out of me that irssi doesn&#8217;t have a list of nicks in a given irc room.  Granted you can just /who but this just seemed like too much work given that programs such as weechat (which I have since swtiched to) have a nicklist right out of the box.  If, for [...]]]></description>
			<content:encoded><![CDATA[<p>It annoyed the piss out of me that irssi doesn&#8217;t have a list of nicks in a given irc room.  Granted you can just /who but this just seemed like too much work given that programs such as weechat (which I have since swtiched to) have a nicklist right out of the box.  If, for whatever reason, you decide that weechat just isnt for you and you wish to have a nicklist in your irssi, then follow these simple steps.</p>
<p>grab the nicklist script from irssi.org</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>scripts.irssi.org<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>nicklist.pl</div></div>
<p>then move said script into your irssi scripts folder</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mv</span> nicklist.pl ~<span style="color: #000000; font-weight: bold;">/</span>.irssi<span style="color: #000000; font-weight: bold;">/</span>scripts</div></div>
<p>then fire up irssi and issue these two commands:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">/</span>script load nicklist<br />
<span style="color: #000000; font-weight: bold;">/</span>nicklist <span style="color: #c20cb9; font-weight: bold;">screen</span></div></div>
<p>Presto!  now you have a nicklist inside of irssi.  Beware of this script however, it does not play well with certain terminal,mrxvt for instance.  There are ways to autoload scripts in irssi but I honestly didn&#8217;t use it long enough to be moved to figure it out.  I suggest you check out weechat.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/L9FCH4aRtqE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2010/02/nicklist-in-irssi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2010/02/nicklist-in-irssi/</feedburner:origLink></item>
		<item>
		<title>The Era of the Successful Slacker Has Passed</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/NsFV3VQWvFQ/</link>
		<comments>http://al3k.net/2009/05/the-era-of-the-successful-slacker-has-passed/#comments</comments>
		<pubDate>Thu, 07 May 2009 18:13:48 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[office space]]></category>
		<category><![CDATA[slacker]]></category>

		<guid isPermaLink="false">http://www.al3k.net/?p=172</guid>
		<description><![CDATA[So I was watching Office Space the other day and it occurred to me that movies like this are disillusioning people, mainly us college folk.  Don&#8217; get me wrong, I love this movie and it&#8217;s probably in my top ten but I think that the premise behind Peter&#8217;s character and his philosophy on life aren&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>So I was watching Office Space the other day and it occurred to me that movies like this are disillusioning people, mainly us college folk.  Don&#8217; get me wrong, I love this movie and it&#8217;s probably in my top ten but I think that the premise behind Peter&#8217;s character and his philosophy on life aren&#8217;t realistic in today&#8217;s world.  We all have a friend or know someone who has the ability to do absolutely nothing, or at least very close to nothing, and still have incredible success.  He may be a math genius, got into med school, aces test, or is a computer genius but seems to put absolutely no effort into this at all, it just seems to come to him naturally.  We all want to be the next Bill Gates and sell something that we actually don&#8217;t have to IBM and then go on to make billions of dollars.  We also want to be that guy who basically gets to do whatever the hell he wants but no one questions him because he is the best at what he does.   This guy could come into work late and piss drunk but won&#8217;t get fired because he is the only one able to do what he does as well as he does it.  But yet, these people are usually exaggerated and the real ones are as common as winning the lottery.  Like  Matther Broderick in Wargames basically; he may fail classes, but he can change that by hacking into the school&#8217;s computer system and changing his grades.  We have all heard that story about how Einstein supposedly failed the third grade, or fourth grade math or something and all of us slacker hopefuls out there use these stories, or similar ones, in order to reassure ourselves that, even though they may be failing now, their slacker lifestyle will payoff handsomely in the future.  Well, unfortunately for us all, this is probably not the case anymore.  You probably won&#8217;t rise to be a CEO without your college degree, you probably aren&#8217;t going to invent the next google search engine, and you most likely aren&#8217;t going to build the next computer empire out of your garage.  The time has passed, mainly just due to the fact that you were born about 25 years too late.  I&#8217;m not saying that it won&#8217;t happen, I am just trying to say that it is very unlikely in these times.  I really wish it was the case that you could have a section on a resume that said &#8220;I succeed while doing absolutely nothing.&#8221;  If only that was the world we lived in.  Anymore, employers have this need to see the potential of a savior on paper.  They want your resume to scream, &#8220;I will turn your failing company into the next Wal-Mart.&#8221;  They essentially want your shit to smell like roses.  You can&#8217;t walk into an interview wearing jean shorts and smelling like an ashtray and them hire you based on your reputation as a supposed genius.  I hate to burst your bubble guys, just something that office space brought to my attention.</p>
<p>And now, for your viewing pleasure&#8230;..a scene from office space, so you can enjoy it as much as I did <img src='http://al3k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span class="youtube">
<object width="480" height="360">
<param name="movie" value="http://www.youtube.com/v/rJ8SefiNEcs&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" />
<param name="allowFullScreen" value="true" />
<embed wmode="transparent" src="http://www.youtube.com/v/rJ8SefiNEcs&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" type="application/x-shockwave-flash" allowfullscreen="true" width="480" height="360"></embed>
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=rJ8SefiNEcs&fmt=18">www.youtube.com/watch?v=rJ8SefiNEcs</a></p></p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/NsFV3VQWvFQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2009/05/the-era-of-the-successful-slacker-has-passed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2009/05/the-era-of-the-successful-slacker-has-passed/</feedburner:origLink></item>
		<item>
		<title>Hackers demonstrate how to compromise Windows 7 at HITB</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/W8wUTkwbFAc/</link>
		<comments>http://al3k.net/2009/04/hackers-demonstrate-how-to-compromse-windows-7-at-hitb/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 17:48:27 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[slashdot]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.al3k.net/?p=161</guid>
		<description><![CDATA[So I read an article on slashdot about how two hackers at the Hack in the Box convention in Dubai demonstrated how it is possible to compromise the OS due to a security flaw in the design&#8230;.the flaw is that the OS trust that the boot process is safe. Now this may sound potentially groundbreaking, [...]]]></description>
			<content:encoded><![CDATA[<p>So I read an article on slashdot about how two hackers at the Hack in the Box convention in Dubai demonstrated how it is possible to compromise the OS due to a security flaw in the design&#8230;.the flaw is that the OS trust that the boot process is safe.  Now this may sound potentially groundbreaking, but I assure you it is not.  The catch is that you have to have physical access to the machine.  What the hell is the point in that?!  If you had physical access to the machine, then the machine is compromised already anyways.  Also, if you had access to the machine, no matter the OS, you could install whatever code you wanted on it&#8230;why the need for the boot code?  What a waste of freakin&#8217; time.</p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/W8wUTkwbFAc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2009/04/hackers-demonstrate-how-to-compromse-windows-7-at-hitb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://al3k.net/2009/04/hackers-demonstrate-how-to-compromse-windows-7-at-hitb/</feedburner:origLink></item>
		<item>
		<title>Nanotech Tattoos</title>
		<link>http://feedproxy.google.com/~r/al3k/GEOn/~3/2tDMdp3w8X4/</link>
		<comments>http://al3k.net/2009/04/nanotech-tattoos/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 23:19:41 +0000</pubDate>
		<dc:creator>al3k</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[slashdot]]></category>
		<category><![CDATA[tattoos]]></category>

		<guid isPermaLink="false">http://www.al3k.net/?p=159</guid>
		<description><![CDATA[So I read an article this morning on Slashdot about a new technology that would allow you to insert small flexible nanotubes underneath your skin, which would essentially create a display screen&#8230;..right on your body.  How awesome is that?!  You could text people right from the palm of your hand, literally.  Apprently Phillips has taken [...]]]></description>
			<content:encoded><![CDATA[<p>So I read an article this morning on Slashdot about a new technology that would allow you to insert small flexible nanotubes underneath your skin, which would essentially create a display screen&#8230;..right on your body.  How awesome is that?!  You could text people right from the palm of your hand, literally.  Apprently Phillips has taken this idea to an artistic level and applied the technology into the realm of tattos, so you would be able to change a tattoo whenever you wanted or have the tattoo change based on your mood, or just have an animated tattoo.  If this stuff isn&#8217;t the coolest thing ever I don&#8217;t know what is.  It was also discussed in a similar article about how tiny wireless receivers could be implanted as well, essentially making you wireless.  Now I am fairly certain that this technology isn&#8217;t anywhere near the commercial level yet but nonetheless, I am so getting a digital tattoo whenever it does.  A display screen on my hand would be my dream come true.  I&#8217;ll post the video below so you can see just how awesome this is.  I realize the video is a year old but the article made it seem as if research companies were actually making some real headway on this, so apparently this could be reality in the next couple years.  I apologize however for Phillips need to use naked people in their ad, was that really necessary?  Its still pretty damn cool tho&#8230;enjoy.</p>
<p><span class="youtube">
<object width="480" height="360">
<param name="movie" value="http://www.youtube.com/v/NM1VuN5Iouc&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" />
<param name="allowFullScreen" value="true" />
<embed wmode="transparent" src="http://www.youtube.com/v/NM1VuN5Iouc&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" type="application/x-shockwave-flash" allowfullscreen="true" width="480" height="360"></embed>
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=NM1VuN5Iouc&fmt=18">www.youtube.com/watch?v=NM1VuN5Iouc</a></p></p>
<img src="http://feeds.feedburner.com/~r/al3k/GEOn/~4/2tDMdp3w8X4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://al3k.net/2009/04/nanotech-tattoos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://al3k.net/2009/04/nanotech-tattoos/</feedburner:origLink></item>
	</channel>
</rss>
