<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Mike The Coder is a blog by Mike Crittenden, a Greenville, SC based web developer. Topics include Drupal, web development and design, HTML and CSS, jQuery, Ubuntu, etc.</description><title>Mike The Coder</title><generator>Tumblr (3.0; @mikethecoder)</generator><link>http://mikethecoder.com/</link><item><title>Switching to a password manager (SuperGenPass)</title><description>&lt;p&gt;Some discussion with &lt;a href="http://twitter.com/bradezone"&gt;a friend of mine&lt;/a&gt; prompted me to finally start using a proper password manager and stop sharing passwords. Up until now, I&amp;#8217;ve basically been using one password for everything non-crucial (i.e., any random site that requires a signup) and another (only slightly different) password for important stuff like email and banks. So I&amp;#8217;ve basically been doing a horrible job.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve used LastPass in the past and wasn&amp;#8217;t a fan, so I looked for something simpler. &lt;a href="http://supergenpass.com"&gt;SuperGenPass&lt;/a&gt; seemed like a winner so I tried it and so far it&amp;#8217;s going great.&lt;/p&gt;

&lt;p&gt;SuperGenPass is ultra-simple. It basically takes a master password and combines it with the site&amp;#8217;s domain, hashes that, and spits out a password to use. It&amp;#8217;s a bookmarklet and does all of this client-side, so there&amp;#8217;s not some cloud service storing your login info. To use it, you just type your master password in a login form, click the bookmarklet, and it generates a hashed password and shoves it into the form which you can then use to register and/or log in.&lt;/p&gt;

&lt;p&gt;However, I don&amp;#8217;t have my bookmarks bar visible for the bookmarklet and I generally don&amp;#8217;t like using my mouse, so I&amp;#8217;m using &lt;a href="https://chrome.google.com/webstore/detail/fkjlefleeablohepemehbhgolkcmoing"&gt;this Chrome extension&lt;/a&gt; which triggers the password hash/replacement with a key combo (Ctrl+Shift+1).&lt;/p&gt;

&lt;p&gt;On Android, I&amp;#8217;m using &lt;a href="https://play.google.com/store/apps/details?id=info.staticfree.SuperGenPass"&gt;this app&lt;/a&gt; which makes it easy to hash/replace passwords there as well. From within the browser, you just do Share URL -&amp;gt; SuperGenPass -&amp;gt; type your master password and click &amp;#8220;Go&amp;#8221; to have the hashed password copied to your clipboard which you can then use to log in. It&amp;#8217;s about the simplest workflow I&amp;#8217;ve been able to find with Android password managers.&lt;/p&gt;

&lt;p&gt;Since SuperGenPass at its core is just a bookmarklet, I can use it from any computer without having to install anything. There&amp;#8217;s even a &lt;a href="http://supergenpass.com/mobile"&gt;mobile page to generate passwords&lt;/a&gt; that you can use if you don&amp;#8217;t want to install the bookmarklet for a random log in here and there on someone else&amp;#8217;s computer, or if you want to avoid installing a mobile app.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll see if this sticks, but so far I like it a lot.&lt;/p&gt;</description><link>http://mikethecoder.com/post/23676500376</link><guid>http://mikethecoder.com/post/23676500376</guid><pubDate>Thu, 24 May 2012 12:42:00 -0400</pubDate></item><item><title>From Vim to Emacs + Evil mode and back again</title><description>&lt;p&gt;I spent the past few days trying to switch from vim to emacs + evil-mode, and setup was a little more of a pain than I hoped. For example:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Couldn&amp;#8217;t get a color scheme to work right in terminal emacs after lots of twiddling/Googling so I was forced to use GUI emacs which throws me off since a new window opens whenever I edit anything&lt;/li&gt;
&lt;li&gt;Couldn&amp;#8217;t get non-ugly fonts in GUI emacs. Apparently emacs GUI is using libxft to render fonts which seems to look terrible on my system no matter which font I use. Not sure what&amp;#8217;s going on there.&lt;/li&gt;
&lt;li&gt;An emacs equivalent (like ido or icicle) of Ctrl-P (fuzzy filename completion) was a little complicated to get working well with evil-mode and vim keybindings&lt;/li&gt;
&lt;li&gt;I like tabs for buffers but emacs&amp;#8217; TabMode doesn&amp;#8217;t integrate well with evil-mode and/or ido/icicle (in Ctrl-P in vim you can hit Ctrl+t to open a file in a new tab but in ido/icicle I couldn&amp;#8217;t find any easy way to do it).&lt;/li&gt;
&lt;li&gt;Emacs GUI took about a second to boot up even when connecting to an already-running emacs daemon. A second&amp;#8217;s not a long time, but I tend to jump around my filesystem (using &lt;a href="https://github.com/joelthelion/autojump/wiki"&gt;autojump&lt;/a&gt; and edit single files a lot, and that second down my workflow more than I had hoped.&lt;/li&gt;
&lt;li&gt;Evil-mode has two differences from vim that annoyed me: 1) the lack of :g and 2) the fact that it ignored punctuation when jumping word (e.g. hitting dw on foo() would leave you with nothing instead of ())&lt;/li&gt;
&lt;li&gt;The thought of doing without or finding and setting up alternatives for my other vim plugins (especialy EasyMotion, Gist, ZenCoding, NerdCommenter, and NarrowRegion) did not sound fun after all of the above.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I wanted to use emacs + evil-mode like I use vim now but there&amp;#8217;s still a lot of acclimating that has to happen which I was hoping wouldn&amp;#8217;t be the case. So I finally decided that the power of Emacs didn&amp;#8217;t add enough value to be worth all of that. TRAMP mode sure would have been nice though.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://news.ycombinator.com/item?id=3909279"&gt;Discuss on Hacker News&lt;/a&gt;.&lt;/p&gt;</description><link>http://mikethecoder.com/post/22121712651</link><guid>http://mikethecoder.com/post/22121712651</guid><pubDate>Mon, 30 Apr 2012 09:58:00 -0400</pubDate><category>Vim</category><category>Emacs</category></item><item><title>Trying out Ember.js and building TangleTube</title><description>&lt;p&gt;A couple weeks ago I decided to finally look into the recent surge in JS MVC frameworks. I decided to build a little web app that lets you group YouTube videos and play them at the same time, with options for volume and start-time per video.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://tangletube.com/?vid0=q_qgVn-Op7Q&amp;amp;vol0=100&amp;amp;time0=16&amp;amp;vid1=aqvmCiNMpCU&amp;amp;vol1=30&amp;amp;time1=0&amp;amp;vid2=1pSyYhRYeIM&amp;amp;vol2=100&amp;amp;time2=30"&gt;Here&amp;#8217;s a finished example&lt;/a&gt; if you have no idea what I&amp;#8217;m talking about.&lt;/p&gt;

&lt;p&gt;So I started with Backbone and got a working version, but I wasn&amp;#8217;t happy with &lt;a href="https://github.com/mikecrittenden/tangletube-backbone"&gt;the code&lt;/a&gt; (seemed boilerplatey and unreadable to me), which I&amp;#8217;m sure was probably due to my inexperience. However, that was enough to make me keep looking, and I found Ember.js and rebuilt the app using that.&lt;/p&gt;

&lt;p&gt;Getting started with Ember was a huge pain since the documentation is only barely there and everything is so new, but once I got going things made a lot of sense. I&amp;#8217;m happy with &lt;a href="https://github.com/mikecrittenden/tangletube"&gt;the code&lt;/a&gt; and have started using Ember.js in a much bigger personal project with great success so far.&lt;/p&gt;

&lt;p&gt;So if you&amp;#8217;re looking into JS MVC frameworks, give Ember.js a chance. And if you want to combine YouTube videos, check out &lt;a href="http://tangletube.com"&gt;TangleTube&lt;/a&gt;.&lt;/p&gt;</description><link>http://mikethecoder.com/post/18553144272</link><guid>http://mikethecoder.com/post/18553144272</guid><pubDate>Thu, 01 Mar 2012 10:53:57 -0500</pubDate><category>JavaScript</category><category>YouTube</category><category>Videos</category></item><item><title>On switching to Arch Linux</title><description>&lt;p&gt;So you&amp;#8217;re thinking about switching to Arch. Here are some things you should probably know first.&lt;/p&gt;

&lt;p&gt;(I&amp;#8217;m assuming you already know all the great things about Arch &amp;#8212; otherwise, you wouldn&amp;#8217;t be thinking about switching &amp;#8212; so I&amp;#8217;ll skip that part).&lt;/p&gt;

&lt;h3&gt;Potential downsides to Arch&lt;/h3&gt;

&lt;p&gt;First of all, nothing works out of the box. You will have to manually set up the driver for your video card, support for your sound card (which can be a little difficult if you use USB headphones), wifi support, Xorg, your desktop environment and/or window manager of choice, etc. If this sounds horrible to you, then Arch probably isn&amp;#8217;t for you.&lt;/p&gt;

&lt;p&gt;You also have to make lots of choices yourself. You start with nothing and build your way up according to your own preferences, so if you&amp;#8217;re the kind of person that doesn&amp;#8217;t enjoy tweaking or researching and would rather just go with the flow and use whatever your distro installs for you, then Arch isn&amp;#8217;t a good fit.&lt;/p&gt;

&lt;p&gt;Finally, a downside of Arch pushing software updates to the repos so quickly is the potential for stability issues. I personally haven&amp;#8217;t had any issues in the months that I&amp;#8217;ve been running Arch, but you see some reports of issues related to running cutting edge software (often related to the wrong versions of dependencies). Note, however, that reading the Arch news on the homepage often gives you advanced warning of things to watch for.&lt;/p&gt;

&lt;h3&gt;Tips on installation&lt;/h3&gt;

&lt;p&gt;If you&amp;#8217;ve finally decided you&amp;#8217;re going to try it, then read on &amp;#8212; there are some things to keep in mind when installing Arch.&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;Before the install&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Before you start the install, make sure you&amp;#8217;re installing it next to a 2nd computer with internet access. This way you can follow the install directions in the wiki and you can also Google any random issues that come up.&lt;/p&gt;

&lt;p&gt;Also, go ahead and research/decide on which desktop environment and/or window manager you want to use. Arch supports pretty much all of them, so the choice is yours, and you want to have your mind made up before the install so you don&amp;#8217;t have to stop in the middle of it to decide.&lt;/p&gt;

&lt;p&gt;Note that the typical first-time Arch install takes somewhere around 2 hours to get everything working (maybe more if you run into issues) so make sure you have some free time.&lt;/p&gt;

&lt;p&gt;Make sure that the computer you&amp;#8217;re installing Arch on is hooked up to the internet via a wired connection, so you don&amp;#8217;t have to mess with setting up wifi before the installer can begin.&lt;/p&gt;

&lt;p&gt;Finally, Google your hardware to make sure there aren&amp;#8217;t compatibility issues. This means everything &amp;#8212; sound card, video card, headphones, printer, etc. There&amp;#8217;s nothing worse than getting a working install and then realizing that your sound card isn&amp;#8217;t supported.&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;During the install&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Use the &lt;a href="https://wiki.archlinux.org/index.php/Beginners'_Guide"&gt;Beginner&amp;#8217;s Guide&lt;/a&gt; like your life depends on it. It leads you through the install step by step and you do NOT want to try installing without it. Don&amp;#8217;t skip any parts, and don&amp;#8217;t do anything you&amp;#8217;re unsure of; if the Beginner&amp;#8217;s Guide doesn&amp;#8217;t answer a question, then Google it before just guessing.&lt;/p&gt;

&lt;p&gt;When the time comes in the install process where it asks you which packages you want installed, I recommend not installing anything at this point. Eventually, you&amp;#8217;ll want to install and configure Xorg along with your DE or WM of choice, but that can easily be done after the install rather than during, and that way you&amp;#8217;re taking it one step at a time. Save any apps you want installed for last.&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;After the install&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Once the install is complete, you&amp;#8217;ll first want to set up Xorg and make sure that&amp;#8217;s working (the Beginner&amp;#8217;s Guide also covers this). Then you&amp;#8217;ll want to install your DE and WM of choice. Then you&amp;#8217;ll want to get sound and wifi and other misc hardware working (there are usually wiki pages for whatever you&amp;#8217;re working on). Finally, go ahead and install the apps you want and start tweaking.&lt;/p&gt;

&lt;h3&gt;Getting help&lt;/h3&gt;

&lt;p&gt;If at any point you run into issues, spend time researching and Googling before you resort to asking on the Arch forums or in IRC. The Arch community as a whole focuses on self-service and solving your own problems, and if it&amp;#8217;s obvious that you haven&amp;#8217;t tried, then they proably won&amp;#8217;t be too friendly about helping you out.&lt;/p&gt;</description><link>http://mikethecoder.com/post/16562751962</link><guid>http://mikethecoder.com/post/16562751962</guid><pubDate>Thu, 26 Jan 2012 23:10:00 -0500</pubDate><category>Arch</category><category>Linux</category></item><item><title>Sal Khan from Khan Academy explains SOPA/PIPA. This is the best,...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/tzqMoOk9NWc?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Sal Khan from Khan Academy explains SOPA/PIPA. This is the best, most understandable explanation I’ve found, and is the kind of thing that most non-techies could probably grasp.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.khanacademy.org/video/sopa-and-pipa?playlist=American+Civics"&gt;Source&lt;/a&gt;&lt;/p&gt;</description><link>http://mikethecoder.com/post/16115973897</link><guid>http://mikethecoder.com/post/16115973897</guid><pubDate>Thu, 19 Jan 2012 09:53:54 -0500</pubDate></item><item><title>How to set up a Clojure/Noir website on WebFaction</title><description>&lt;p&gt;Setting up a Noir site on WebFaction is surprisingly easy, thanks to Leiningen. Here&amp;#8217;s how I did it. I&amp;#8217;m assuming you already have the site built in Noir and you basically know your way around a Linux machine.&lt;/p&gt;

&lt;p&gt;Note, this assumes that you haven&amp;#8217;t already installed Clojure or Leiningen, but that you already have the JRE, which I believe comes by default on all WebFaction servers.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;In the WebFaction panel, create a new &amp;#8220;Custom&amp;#8221; -&amp;gt; &amp;#8220;Custom App (listening on port)&amp;#8221; application and assign it to a website, just like you&amp;#8217;re setting up any other site in the panel. Make a note of the port your app was assigned (it&amp;#8217;s a column on the &lt;a href="https://my.webfaction.com/app_/list"&gt;Apps List&lt;/a&gt; page).&lt;/li&gt;
&lt;li&gt;Download and install Leiningen according to the instructions &lt;a href="https://github.com/technomancy/leiningen"&gt;on the GitHub readme&lt;/a&gt;. Basically, just wget the script, chmod it to 755, and put it in /home/yourusername/bin.&lt;/li&gt;
&lt;li&gt;Download your site&amp;#8217;s code to the directory for the webapp you created in step 1, so that your project&amp;#8217;s project.clj file is directly under /home/yourusername/webapps/yourappname. &lt;/li&gt;
&lt;li&gt;Change the port number in your codebase to the port you made a note of in step 1. To do this, edit Noir&amp;#8217;s src/projectname/server.clj file and change 8080 to the new port.&lt;/li&gt;
&lt;li&gt;Now you&amp;#8217;re ready to run it. From within the same directory as your project.clj file, run &lt;code&gt;lein run prod&lt;/code&gt; and all of your dependencies should download and install. Once all that&amp;#8217;s done, you should be able to pull the site up in a browser.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;You should also probably set up a cron job to restart the process if it ever ends (like if the server restarts or the process is killed) using something like &lt;a href="https://gist.github.com/1124592"&gt;this&lt;/a&gt;.&lt;/p&gt;</description><link>http://mikethecoder.com/post/15247799747</link><guid>http://mikethecoder.com/post/15247799747</guid><pubDate>Tue, 03 Jan 2012 13:21:00 -0500</pubDate></item><item><title>Ted Dziuba on Taco Bell programming vs. using what you enjoy</title><description>&lt;p&gt;If you haven&amp;#8217;t read &lt;a href="http://teddziuba.com/"&gt;Ted Dziuba&lt;/a&gt;&amp;#8217;s &lt;a href="http://teddziuba.com/2010/10/taco-bell-programming.html"&gt;post on Taco Bell programming&lt;/a&gt;, go do that now. It&amp;#8217;s really a great post.&lt;/p&gt;

&lt;p&gt;The gist is basically that we can and should be writing programs using the stuff that&amp;#8217;s been available for tens of years, stuff like bash and xargs and find, and that using the latest and greatest tool or language simply adds complexity and bugs. He compares it to Taco Bell, which uses &amp;#8220;roughly eight ingredients&amp;#8221; in random combinations to make the entire menu.&lt;/p&gt;

&lt;p&gt;This was like a smack in the face to me, a person who always gets excited about trying the new hotness. One thing about it concerned me though - a lot of that stuff just isn&amp;#8217;t fun. Nobody wants to write stuff in bash, and there&amp;#8217;s a reason people use modern tools:  they&amp;#8217;re often more fun and less annoying.&lt;/p&gt;

&lt;p&gt;So I emailed him to ask him how he balances that. Here&amp;#8217;s my email:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hey Ted,&lt;/p&gt;
  
  &lt;p&gt;Feel free to ignore this question if you&amp;#8217;d like. I&amp;#8217;m sure you get a lot of emails from random devs, especially lately.&lt;/p&gt;
  
  &lt;p&gt;Straight to the point, just read your taco bell programming post and was intrigued by it, but it didn&amp;#8217;t mention anything about dev preferences or the dev experience. For example, writing something in bash (like Hubot for example) might take less code to do it in Python or CoffeeScript or whatever and it might be the more solid solution but most devs will go way out of their way to avoid having to write something non-trivial in bash.&lt;/p&gt;
  
  &lt;p&gt;So the question is, how do you find a balance between simplicity/tried-and-tested-tools (taco bell ingredients) and ease or enjoyment of development (using a more modern language/tool just because it&amp;#8217;s less annoying)?&lt;/p&gt;
  
  &lt;p&gt;Thanks. Big fan of your posts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here&amp;#8217;s his response. I wasn&amp;#8217;t planning on posting his response (if he even ended up responding) but it&amp;#8217;s such a great answer, I&amp;#8217;d feel like a chump if I didn&amp;#8217;t share it.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hey Mike.&lt;/p&gt;
  
  &lt;p&gt;I know a lot of devs will go out of their way to avoid shell scripting, and generally using the tools already available to them by their operating system. I know, I used to be one of them.&lt;/p&gt;
  
  &lt;p&gt;I got into letting Unix do as much as it can for me by the advice of a systems administrator I hired, who really swayed me toward that culture, and after the first project I wrote on Unix principles, I immediately saw the value of it (this one piece of functionality was the most rock solid thing I have ever written, it&amp;#8217;s been running for 2 years now with zero maintenance).&lt;/p&gt;
  
  &lt;p&gt;On to your question. I guess it depends on what&amp;#8217;s easy for you to do as a developer. Learning a new language like Bash isn&amp;#8217;t something to take lightly. I still don&amp;#8217;t know enough of it to be dangerous, but I hack things together. Once you understand the Unix Way, the process becomes much easier. I&amp;#8217;d recommend reading &amp;#8220;The Art of Unix Programming&amp;#8221; for some great insights.&lt;/p&gt;
  
  &lt;p&gt;Generally, you&amp;#8217;re never writing nontrivial code in Bash. You use a bash script to string together smaller utilities into something useful. All the real meat of execution happens in the programs your shell script calls. Nothing precludes you from writing bits of functionality in any language you want. One of the Unix Way principles is that &amp;#8220;a program should do one thing, and do it well&amp;#8221;.&lt;/p&gt;
  
  &lt;p&gt;When I try to find the balance between Unix tools and custom tools, I ask 3 questions:&lt;/p&gt;
  
  &lt;p&gt;1) What parts of this problem does the operating system solve for me?&lt;/p&gt;
  
  &lt;p&gt;2) Of the parts that the OS can&amp;#8217;t solve, am I simply not aware of something my OS does that can solve the problem? (This happens a lot.)&lt;/p&gt;
  
  &lt;p&gt;3) What&amp;#8217;s likely to be the most brittle part of the system?&lt;/p&gt;
  
  &lt;p&gt;I find that a lot of developers have gross misconceptions about how operating systems work, and will try to excuse themselves behind a veil of &amp;#8220;scalability&amp;#8221; or somesuch. For example, I had a good argument with a developer last week who was convinced that &amp;#8220;starting processes was slow&amp;#8221;, so he was cooking up some threaded catastrophe.&lt;/p&gt;
  
  &lt;p&gt;Fact was, it&amp;#8217;s simply not true. Modern Linuxes can spawn processes very quickly, and actually use the same syscall to spawn a process that they do to spawn a thread (clone()).&lt;/p&gt;
  
  &lt;p&gt;At the end of the day, it&amp;#8217;s really something that comes with experience. With any system you write, V2 is always way better, because you&amp;#8217;re more aware of the things you don&amp;#8217;t know :-)&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://mikethecoder.com/post/13921045927</link><guid>http://mikethecoder.com/post/13921045927</guid><pubDate>Thu, 08 Dec 2011 09:27:00 -0500</pubDate></item><item><title>My minimalist setup</title><description>&lt;p&gt;I recently completely changed the setup on my main laptop to something much more minimal than what I was running before (vanilla Ubuntu). I decided to post this braindump here just as a way of telling myself &amp;#8220;this is it&amp;#8221; and acknowledging that it&amp;#8217;s time to quit tweaking and be happy. I love this setup.&lt;/p&gt;

&lt;h3&gt;Hardware&lt;/h3&gt;

&lt;p&gt;My laptop is just a plain old &lt;a href="http://shop.lenovo.com/us/notebooks/thinkpad/w-series/w510"&gt;Thinkpad W510&lt;/a&gt; with a 15&amp;#8221; screen running 1920x1080. I don&amp;#8217;t have another monitor, I don&amp;#8217;t have a desktop or a second laptop, this is it.&lt;/p&gt;

&lt;h3&gt;Operating System&lt;/h3&gt;

&lt;p&gt;I am now running &lt;a href="http://www.archlinux.org/"&gt;Arch Linux&lt;/a&gt;. Arch is basically the complete opposite of Ubuntu, meaning that instead of everything working out of the box and giving you tons of starter apps, nothing works out of the box and you start with nothing but a command line, and build up from there.&lt;/p&gt;

&lt;p&gt;If this sounds horrible to you, then Arch probably isn&amp;#8217;t for you, but it sounded intriguing to me so I tried it out. I am now a full-fledged convert for a few reasons:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Rolling release. Instead of locking package versions every 6 months and forcing you to do a full re-install when a new version releases like Ubuntu, Arch just sends you updates as they come in. This means that 1) you don&amp;#8217;t have to start over every 6 months and 2) you always have the latest stable version of everything without having to mess with PPAs.&lt;/li&gt;
&lt;li&gt;The AUR. This little miracle is basically a repository of packages that are maintained by users rather than the core Arch team, and almost anything you can think of that isn&amp;#8217;t in the core/community/extra Arch repos are in here, so you almost never have to go about manually installing stuff.&lt;/li&gt;
&lt;li&gt;Simplicity. You start from nothing and build your way up, so you know how everything works and you&amp;#8217;re better prepared to fix something if it goes wrong. Also, you don&amp;#8217;t have anything you didn&amp;#8217;t specifically ask for, which keeps your system lean and easy to understand.&lt;/li&gt;
&lt;li&gt;Configuration. All Arch config is done by editing a couple text files as opposed to clicking around in a GUI, and any programmer can tell you the benefit of keeping stuff in text (easily backed up, can be stored in a VCS, can be reverted, can send it to other people, etc.).&lt;/li&gt;
&lt;li&gt;The Wiki. The Arch wiki is amazing. I&amp;#8217;ve gotten to where I add &amp;#8220;arch wiki&amp;#8221; to the end of any Linux related Google search now because it just consistently has the most comprehensive and up to date info.&lt;/li&gt;
&lt;li&gt;The community. Lots of distros have big active communities, but few of them have people as knowledgeable and as helpful as Arch does. Look through the average quality of replies in a random Arch forums post vs. that of a random Ubuntu forums post for an example.&lt;/li&gt;
&lt;/ol&gt;&lt;h3&gt;Desktop Environment&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m not using a desktop environment (e.g. Gnome, KDE, Xfce, etc.) per se, and instead just using my window manager as my desktop environment.&lt;/p&gt;

&lt;h3&gt;Window Manager&lt;/h3&gt;

&lt;p&gt;I finally settled on &lt;a href="https://opensource.conformal.com/wiki/scrotwm"&gt;scrotwm&lt;/a&gt; after &lt;a href="http://mikethecoder.com/post/9253686475/tiling-window-managers"&gt;trying out tons of tiling window managers&lt;/a&gt; and even spending a few weeks with &lt;a href="http://xmonad.org/"&gt;XMonad&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Scrotwm is awesome. It&amp;#8217;s basically XMonad (all the concepts and even the vast majority of the key bindings are the same), except it&amp;#8217;s written in C rather than Haskell and it&amp;#8217;s configured using regular old plaintext conf files rather than Haskell. I like the built in statusbar (I pipe info to it from conky), I like the vim-like key-bindings, I like the simplicity.&lt;/p&gt;

&lt;p&gt;The one downside is that the built in status bar doesn&amp;#8217;t include a systray, and I need one, even if just to use &lt;a href="http://parcellite.sourceforge.net/?page_id=2"&gt;Parcellite&lt;/a&gt;, so I solved that by installing trayer, adding this quirk to &lt;a href="https://github.com/mikecrittenden/dotfiles/blob/master/scrotwm/scrotwm.conf"&gt;my scrotwm.conf&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;quirk[trayer:panel] = FLOAT + ANYWHERE
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#8230;and telling scrotwm to automatically run it on the 2nd workspace at startup using:&lt;/p&gt;

&lt;script src="https://gist.github.com/1238124.js?file=gistfile1.sh"&gt;&lt;/script&gt;&lt;p&gt;This sets trayer up in a nice little tiny floating window at the top right of my 2nd workspace. It&amp;#8217;s small enough that it can&amp;#8217;t really get in the way of anything, and if I really wanted to I could move it up so that it&amp;#8217;s on top of the statusbar (i.e., where systrays usually are).&lt;/p&gt;

&lt;h3&gt;Browser&lt;/h3&gt;

&lt;p&gt;I just use Chromium. Quick, simple, and the web inspector has really caught up to Firebug in the last year or so (in fact, I like it better for some things).&lt;/p&gt;

&lt;h3&gt;Music&lt;/h3&gt;

&lt;p&gt;I don&amp;#8217;t have a desktop music player. Between Grooveshark, Turntable.fm, Pandora, and Google Music (I have like 30GB of songs on there), I&amp;#8217;m set.&lt;/p&gt;

&lt;h3&gt;Code Editor&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m &lt;a href="http://mikethecoder.com/post/2844287679/why-use-vim"&gt;still using vim&lt;/a&gt;, and I still love it. Here&amp;#8217;s &lt;a href="https://github.com/mikecrittenden/dotfiles/blob/master/vim/.vimrc"&gt;my .vimrc&lt;/a&gt; which has a list of my plugins.&lt;/p&gt;

&lt;h3&gt;Shell&lt;/h3&gt;

&lt;p&gt;I recently switched from bash to &lt;a href="http://dukgo.com/zsh"&gt;zsh&lt;/a&gt; after listening to &lt;a href="http://changelogshow.com/105/26295-episode-0-6-1-oh-my-zsh-with-robby-russell"&gt;this podcast on The Changelog&lt;/a&gt;. It&amp;#8217;s basically bash plus a few cool extras, such as really robust tab autocompletion (for example: type &amp;#8220;kill &amp;lt;tab&amp;gt;&amp;#8221; and see a list of running processes you can kill), spell checking and autocorrection (this has saved me more time than I&amp;#8217;d like to admit), and, when used in combination with &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;oh my zsh&lt;/a&gt;, a super awesome plugin and theming system (here&amp;#8217;s an example of &lt;a href="http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/"&gt;a particularly tricked out zsh prompt&lt;/a&gt; to give you a taste, even if it&amp;#8217;s a little too verbose for my taste).&lt;/p&gt;

&lt;p&gt;My zsh prompt is pretty simple, it just contains the directory name, the git branch, and a tiny yellow lightening rod if there are uncommitted changes. Here&amp;#8217;s the &lt;a href="https://github.com/mikecrittenden/dotfiles/blob/master/zsh/flarp.zsh-theme"&gt;theme file&lt;/a&gt; if you&amp;#8217;re interested.&lt;/p&gt;

&lt;h3&gt;Terminal&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m using XTerm with a Molokai color scheme. Here&amp;#8217;s &lt;a href="https://github.com/mikecrittenden/dotfiles/blob/master/xorg/.Xresources"&gt;the config for that&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;IM&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m still just using Pidgin for everything since it handles everything in one place.&lt;/p&gt;

&lt;h3&gt;Wrap-Up&lt;/h3&gt;

&lt;p&gt;That&amp;#8217;s pretty much it. My setup is nothing more than Arch + scrotwm + Chromium, XTerm, and Pidgin. It&amp;#8217;s really rare that I need to open any apps besides those (and GIMP every now and then). It&amp;#8217;s been a huge success so far and I&amp;#8217;m really loving having such a simple setup.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re feeling nerdy, feel free to check out &lt;a href="https://github.com/mikecrittenden/dotfiles"&gt;all my config files&lt;/a&gt;, and if you have any questions I&amp;#8217;ll be happy to answer them in the comments.&lt;/p&gt;</description><link>http://mikethecoder.com/post/10563094906</link><guid>http://mikethecoder.com/post/10563094906</guid><pubDate>Fri, 23 Sep 2011 14:43:42 -0400</pubDate></item><item><title>The American Dollar - Anything You Synthesize</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/aSU49AFzgtw?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;The American Dollar - Anything You Synthesize&lt;/p&gt;</description><link>http://mikethecoder.com/post/10555236138</link><guid>http://mikethecoder.com/post/10555236138</guid><pubDate>Fri, 23 Sep 2011 09:09:04 -0400</pubDate></item><item><title>Running custom Django commands via cron on WebFaction</title><description>&lt;p&gt;Update: a much more detailed guide &lt;a href="http://garrett.im/django/sysadmin/2011/10/03/cron-django-webfaction.html"&gt;is right this way&lt;/a&gt; which might be easier to follow than my quick post below.&lt;/p&gt;

&lt;p&gt;The typical way of running Django commands via cron is usually something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;0 * * * * python /path/to/django/manage.py commandname
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#8230;but that won&amp;#8217;t work on WebFaction. You have to tell it what your PYTHONPATH and DJANGO_SETTINGS_MODULE should be set to, as well as give it an absolute path to Python.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s an example:&lt;/p&gt;

&lt;script src="https://gist.github.com/1219869.js?file=gistfile1.sh"&gt;&lt;/script&gt;&lt;p&gt;There&amp;#8217;s some more info &lt;a href="http://forum.webfaction.com/viewtopic.php?id=1258"&gt;in this forum thread&lt;/a&gt; if you get stuck.&lt;/p&gt;</description><link>http://mikethecoder.com/post/10243481032</link><guid>http://mikethecoder.com/post/10243481032</guid><pubDate>Thu, 15 Sep 2011 13:22:00 -0400</pubDate></item><item><title>How to kill a dead SSH session gracefully</title><description>&lt;p&gt;I have a bad habit of leaving an open SSH session sitting there and then coming back to it to realize that it&amp;#8217;s dead. In the past, I&amp;#8217;ve just killed the terminal to end it. Here&amp;#8217;s a better way:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;Enter&amp;gt;~.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That&amp;#8217;s the enter key followed by the tilda character followed by a period.&lt;/p&gt;

&lt;p&gt;To explain, SSH has a few different escape sequences. To see them, run &lt;code&gt;~?&lt;/code&gt; while in an open SSH session. Here they are:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mcrittenden@freshbox$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&amp;amp;  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, &lt;code&gt;~.&lt;/code&gt; is the escape sequence to terminate the connection, and the note at the end says that they&amp;#8217;re only recognized immediately following a newline, hence &lt;code&gt;&amp;lt;Enter&amp;gt;~.&lt;/code&gt;&lt;/p&gt;</description><link>http://mikethecoder.com/post/9594216446</link><guid>http://mikethecoder.com/post/9594216446</guid><pubDate>Tue, 30 Aug 2011 14:57:50 -0400</pubDate><category>Bash</category><category>Programming</category></item><item><title>My quest for a tiling window manager</title><description>&lt;p&gt;I&amp;#8217;ve never used a tiling window manager before, but lately I&amp;#8217;ve been doing more and more with the command line, and I&amp;#8217;ve been using vim-only for almost a year now, so it seems like a natural next step.&lt;/p&gt;

&lt;p&gt;So I went through a few of them over the weekend looking for the right one. But first, some background.&lt;/p&gt;

&lt;h3&gt;What is a tiling WM?&lt;/h3&gt;

&lt;p&gt;Most computers have &amp;#8220;floating window managers&amp;#8221; that let windows overlap and let the user drag them around and resize them. In contrast to that, a tiling window manager stacks windows up side by side according to preset layouts and groups them into workspaces. That&amp;#8217;s a huge oversimplification, but it&amp;#8217;ll do for now.&lt;/p&gt;

&lt;h3&gt;Why the crap would you want that?&lt;/h3&gt;

&lt;p&gt;For one, they&amp;#8217;re much easier to control using only the keyboard. Most of them have a &amp;#8220;mod&amp;#8221; key (usually either the left alt key or the windows/super key), and you control the WM doing stuff like mod+2 (switch to workspace 2), mod+j (focus on the window below the current one), mod+space (change layouts), etc.&lt;/p&gt;

&lt;p&gt;Also, they save space since there are no window decorations and no space between windows.&lt;/p&gt;

&lt;p&gt;Finally, lots of people like the automation this allows. You can say stuff like &amp;#8220;open my IM client and windows in the third workspace using the three column layout&amp;#8221; and you don&amp;#8217;t have to arrange stuff manually or move anything around (although you can).&lt;/p&gt;

&lt;h3&gt;XMonad&lt;/h3&gt;

&lt;p&gt;I started with XMonad just because it had a really helpful page on using it as a drop in replacement for the default Gnome WM, so I could still use all the good stuff Gnome has to offer easily.&lt;/p&gt;

&lt;p&gt;I had trouble with installation (on login, I kept getting &amp;#8220;session not found&amp;#8221; errors), and it turned out it was because I named one of the config files xnomad.desktop instead of xmonad.desktop without thinking. Once that was worked out, it was pretty smooth. It was basically Gnome 2 (including the panels) but with XMonad instead of Metacity.&lt;/p&gt;

&lt;p&gt;I liked it, but I wanted to change a couple things (add a few non-core layouts and change the color of the red border on active windows, for example), and all configuration to XMonad is done in Haskell, and this threw me for a loop. Everyone said you could easily just copy and paste from sample configs on the net but I didn&amp;#8217;t have any luck with that, and I didn&amp;#8217;t want to have to learn Haskell just to configure my WM, so I moved on.&lt;/p&gt;

&lt;h3&gt;Awesome WM&lt;/h3&gt;

&lt;p&gt;Awesome and XMonad seem to be the two most popular nowadays, so it seemed logical to try them first. I apt-get&amp;#8217;ted awesome and set it up to run inside of Gnome according to the instructions on the awesome wiki. This worked fine on the first try.&lt;/p&gt;

&lt;p&gt;I didn&amp;#8217;t really &amp;#8220;get&amp;#8221; awesome though. For example, awesome lets you tag windows rather than just stick them on workspaces, and each &amp;#8220;workspace&amp;#8221; is a tag, which means that windows can appear on multiple workspaces. I didn&amp;#8217;t see the appeal of that. Also, I wasn&amp;#8217;t a fan of the launcher because you couldn&amp;#8217;t see what the remaining options are as you type like you can in dmenu and installing dmenu didn&amp;#8217;t seem to work (hitting the key binding for it just redrew the screen). I also kept seeing weird gaps in between windows that I wasn&amp;#8217;t able to fix. Finally, I tried switching the mod key from mod4 (windows key) to mod1, and it didn&amp;#8217;t seem to change anything and I couldn&amp;#8217;t figure out why. So I moved on out of frustration.&lt;/p&gt;

&lt;h3&gt;Scrot WM&lt;/h3&gt;

&lt;p&gt;Scrot WM came recommended on a couple of random forum threads so I tried it out. I apt-get&amp;#8217;ted it and just ran it outside of Gnome since it was quicker to try out that way. I really really like Scrot WM for the most part. The default key bindings are vim-like which is great for me and it runs dmenu by default.&lt;/p&gt;

&lt;p&gt;Unfortunately, the integrated panel doesn&amp;#8217;t support any type of tray (I&amp;#8217;d have to install something external like dzen2 which looked like a headache judging from the how-to&amp;#8217;s I found), and when I tried integrating with Gnome, I couldn&amp;#8217;t get the Gnome panel/tray to show up correctly. I&amp;#8217;m not quite ready to leave a tray behind altogether (for stuff like chat notifications, the networking applet, etc.), so I moved on hoping to find perfection although I was sad to leave Scrot behind.&lt;/p&gt;

&lt;h3&gt;Stump WM&lt;/h3&gt;

&lt;p&gt;I didn&amp;#8217;t try Stump WM out because the default key bindings are all very emacs-like which immediately put me off. Call it judging a book by its cover, but I wasn&amp;#8217;t desperate yet.&lt;/p&gt;

&lt;h3&gt;dwm&lt;/h3&gt;

&lt;p&gt;I also didn&amp;#8217;t try out dwm. It seems like the kind of thing that&amp;#8217;s just a little too hardcore for me (you configure it by hacking the source code and recompiling), and I was looking for more of a beginner&amp;#8217;s tiling wm for now.&lt;/p&gt;

&lt;h3&gt;Subtle WM&lt;/h3&gt;

&lt;p&gt;Subtle WM was an easy install (manually using Ruby/Rake) and it looks great by default. But it&amp;#8217;s a manual tiling window manager, which means that you&amp;#8217;re responsible for placing your windows where you want them, and they don&amp;#8217;t just pop into the current layout on their own, and that wasn&amp;#8217;t what I was after. I also had trouble figuring out how to use the thing - at first, I couldn&amp;#8217;t do anything because the default terminal is urxvt which I didn&amp;#8217;t have installed, and if you don&amp;#8217;t have it, you basically can&amp;#8217;t launch any programs. Once I installed it, the idea of clients and gravities didn&amp;#8217;t click with me, so I gave up.&lt;/p&gt;

&lt;h3&gt;wmii, ion3, i3&lt;/h3&gt;

&lt;p&gt;All of these came recommended in a few places, but they&amp;#8217;re all manual TWMs like subtle, so I moved on quickly, making a note to come back if/when I got desperate.&lt;/p&gt;

&lt;h3&gt;Back to XMonad&lt;/h3&gt;

&lt;p&gt;At this point, the tiny quirks I had with XMonad weren&amp;#8217;t looking so bad, so I decided to log back into it and just give it a shot for a few days and see what I thought. That&amp;#8217;s what I&amp;#8217;m doing now, and so far, things are still going great. The default key bindings are vim-like (mod+j and mod+k to switch to the previous or next window, mod+h and mod+l to change the size of the master window) so it was easy to get used to quickly. There are tons of other layouts and goodies in the xmonad-contrib package but I haven&amp;#8217;t opened that can of worms yet.&lt;/p&gt;

&lt;p&gt;I really wanted to get xmobar and trayer going to get the full experience rather than using a Gnome panel, but for now, this&amp;#8217;ll do. I&amp;#8217;m really enjoying it so far.&lt;/p&gt;

&lt;p&gt;If you have any questions or suggestions, feel free to stick &amp;#8216;em in the comments.&lt;/p&gt;</description><link>http://mikethecoder.com/post/9253686475</link><guid>http://mikethecoder.com/post/9253686475</guid><pubDate>Mon, 22 Aug 2011 12:08:41 -0400</pubDate><category>Linux</category></item><item><title>Custom Lookit panel icon to match Faenza icon set</title><description>&lt;p&gt;i&amp;#8217;m a big fan of &lt;a href="http://zachtib.github.com/lookit/"&gt;Lookit&lt;/a&gt;, a really simple screenshot app that runs as an indicator applet in your panel. Only problem is that its default icon is flat black and looks terrible with most icon sets, including &lt;a href="http://tiheum.deviantart.com/art/Faenza-Icons-173323228"&gt;Faenza&lt;/a&gt;, which I use.&lt;/p&gt;

&lt;p&gt;So I made a new one to match. Here&amp;#8217;s the end result (it&amp;#8217;s the camera icon):&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lpvonedBDa1qcucnx.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;If you want to download it, &lt;a href="http://media.dropdo.com.s3.amazonaws.com/7hM/lookit.svg"&gt;here&amp;#8217;s the link&lt;/a&gt;. To install it, just replace the default lookit.svg with that one in &lt;code&gt;/usr/share/icons/hicolor/scalable/apps/&lt;/code&gt; and restart Lookit.&lt;/p&gt;

&lt;p&gt;Also, note that the author told me that the next version would change the way that icons are handled as well as come with new default icons, so this info might not be current for very long.&lt;/p&gt;</description><link>http://mikethecoder.com/post/8871840342</link><guid>http://mikethecoder.com/post/8871840342</guid><pubDate>Sat, 13 Aug 2011 14:02:10 -0400</pubDate></item><item><title>pushd and popd</title><description>&lt;p&gt;&lt;a href="http://onethingwell.org/post/8734833064/pushd-popd" class="tumblr_blog"&gt;onethingwell&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;A pair of very useful commands, &lt;code&gt;pushd&lt;/code&gt; saves the current directory and (optionally) changes to a different one; &lt;code&gt;popd&lt;/code&gt; returns you to the saved directory:&lt;/p&gt;

&lt;pre&gt;
$ pwd
/home/you/directory
$ pushd /somewhere/far/away/in/the/filesystem
$ pwd
/somewhere/far/away/in/the/filesystem
$ cd /somewhere/else
$ cd /yet/another/place
$ popd
$ pwd
/home/you/directory
&lt;/pre&gt;&lt;/blockquote&gt;</description><link>http://mikethecoder.com/post/8777389277</link><guid>http://mikethecoder.com/post/8777389277</guid><pubDate>Thu, 11 Aug 2011 09:37:20 -0400</pubDate></item><item><title>How to use xmacro on Ubuntu</title><description>&lt;p&gt;I just had a situation where I had to do the same copy and paste job in a browser a few hundred times, so it was the perfect opportunity to look into a desktop macro recorder/player. I came across xmacro which records X11 events and lets you play them back later, and it worked perfectly after I figured out how to use it.&lt;/p&gt;

&lt;p&gt;First, just install it with:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get install xmacro
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then you&amp;#8217;re going to record your macro to a text file. Do this using:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;xmacrorec2 &amp;gt; yourfile.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will bring up a prompt that will let you tell xmacro a key to use to &amp;#8220;exit&amp;#8221; or stop recording. Just hit any key that you know that you will not be hitting during recording itself (I used &lt;code&gt;esc&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Now you&amp;#8217;re recording, so do whatever it is that you want to automate, and then hit your exit key (in my case, &lt;code&gt;esc&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;To play it back, just run it using the text file like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;xmacroplay "$DISPLAY" &amp;lt; yourfile.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;"$DISPLAY"&lt;/code&gt; argument just tells xmacro to use your current display. This is not an optional argument, and if you leave it out, you&amp;#8217;ll get errors.&lt;/p&gt;</description><link>http://mikethecoder.com/post/8439124865</link><guid>http://mikethecoder.com/post/8439124865</guid><pubDate>Wed, 03 Aug 2011 16:10:29 -0400</pubDate></item><item><title>From Monument To Masses - Deafening</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/WlIpLzy5y3A?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;From Monument To Masses - Deafening&lt;/p&gt;</description><link>http://mikethecoder.com/post/8129296329</link><guid>http://mikethecoder.com/post/8129296329</guid><pubDate>Wed, 27 Jul 2011 10:37:01 -0400</pubDate><category>Music</category></item><item><title>Charlie’s Hat</title><description>&lt;iframe src="http://player.vimeo.com/video/26866781" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://vimeo.com/26866781"&gt;Charlie’s Hat&lt;/a&gt;&lt;/p&gt;</description><link>http://mikethecoder.com/post/8091217731</link><guid>http://mikethecoder.com/post/8091217731</guid><pubDate>Tue, 26 Jul 2011 17:25:10 -0400</pubDate></item><item><title>Video</title><description>&lt;span id="video_player_6211093440"&gt;[&lt;a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank"&gt;Flash 10&lt;/a&gt; is required to watch video.]&lt;/span&gt;&lt;script type="text/javascript"&gt;renderVideo("video_player_6211093440",'http://mikethecoder.com/video_file/6211093440/tumblr_lmbkbdjf7h1qckigx',400,300,'poster=http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_lmbkbdjf7h1qckigx_frame1.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_lmbkbdjf7h1qckigx_frame2.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_lmbkbdjf7h1qckigx_frame3.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_lmbkbdjf7h1qckigx_frame4.jpg,http%3A%2F%2Fmedia.tumblr.com%2Ftumblr_lmbkbdjf7h1qckigx_frame5.jpg')&lt;/script&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://mikethecoder.com/post/6211093440</link><guid>http://mikethecoder.com/post/6211093440</guid><pubDate>Sun, 05 Jun 2011 09:33:46 -0400</pubDate></item><item><title>Django: passing request.user to a form</title><description>&lt;p&gt;So you need access to &lt;code&gt;request.user&lt;/code&gt; in your form for some reason, but you can&amp;#8217;t just pass random objects to forms, and only the views have access to &lt;code&gt;request&lt;/code&gt;. Here&amp;#8217;s how it&amp;#8217;s done:&lt;/p&gt;

&lt;p&gt;Add an &lt;code&gt;__init__()&lt;/code&gt; function to the form which looks like this:&lt;/p&gt;

&lt;script src="https://gist.github.com/993186.js"&gt;&lt;/script&gt;&lt;p&gt;Then, when you call the form from the view, add a new &lt;code&gt;user&lt;/code&gt; parameter, so it looks like this:&lt;/p&gt;

&lt;script src="https://gist.github.com/993191.js"&gt;&lt;/script&gt;&lt;p&gt;Now you can access &lt;code&gt;self.user&lt;/code&gt; anywhere in the form.&lt;/p&gt;</description><link>http://mikethecoder.com/post/5865162520</link><guid>http://mikethecoder.com/post/5865162520</guid><pubDate>Thu, 26 May 2011 09:56:00 -0400</pubDate></item><item><title>Command-T for Vim on Fedora (missing ruby.h errors)</title><description>&lt;p&gt;I just spent like an hour with this nonsense. If you&amp;#8217;re getting all kinds of errors about how ruby.h can&amp;#8217;t be found no matter what you do, then you probably need to install freaking gcc&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo yum install gcc
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Thanks for the helpful error messages. Not.&lt;/p&gt;</description><link>http://mikethecoder.com/post/4634580398</link><guid>http://mikethecoder.com/post/4634580398</guid><pubDate>Fri, 15 Apr 2011 11:37:12 -0400</pubDate></item></channel></rss>

