<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Mike Grouchy</title><link href="http://mikegrouchy.com/" rel="alternate"></link><link href="http://mikegrouchy.com/feeds/all.atom.xml" rel="self"></link><id>http://mikegrouchy.com/</id><updated>2014-06-22T00:00:00-04:00</updated><entry><title>Unblock out of region content with Digital Ocean and sshuttle</title><link href="http://mikegrouchy.com/blog/2014/06/unblock-out-of-region-content-with-digital-ocean-and-sshuttle.html" rel="alternate"></link><updated>2014-06-22T00:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2014-06-22:blog/2014/06/unblock-out-of-region-content-with-digital-ocean-and-sshuttle.html</id><summary type="html">&lt;p&gt;If you live in Canada(like me) or elsewhere. You are probably interested in
paying for services like Hulu and Spotify and are probably wondering how you
can get that good US netflix content. You will be happy to know that it is in
fact very easy to accomplish this for as little as 5$/month through Digital
Ocean and still have a server that you can do other things with in the meantime.&lt;/p&gt;
&lt;p&gt;Before I go through the setup here, I know there are alternatives which are
similarily priced. Unblock.us, and mediahint to just name a couple.The big
advantage here is that you can setup/teardown your Digital Ocean droplets at
your convenience which is nice if you are really pinching pennies, because
these are charged hourly.&lt;/p&gt;
&lt;p&gt;&lt;img alt="&amp;quot;Digital Ocean Pricing&amp;quot;" src="/static/images/2014/digital-ocean-pricing.png" /&gt;&lt;/p&gt;
&lt;p&gt;The other big advantage of using something like Digital Ocean is that you can
use the droplet for other things besides using it tunnel your internet traffic.
Convinced yet? If so, lets move on to the setup.&lt;/p&gt;
&lt;h2&gt;1. Signup For Digital Ocean/Set up a Droplet&lt;/h2&gt;
&lt;p&gt;The first step here is just to head over to &lt;a href="https://www.digitalocean.com/?refcode=b0a3d514963a"&gt;Digital Ocean&lt;/a&gt; (referral) and signup. This can
also be accomplished with a VPN you already have, and if that is the route you
want to go, just head on down to step 2.&lt;/p&gt;
&lt;p&gt;Once you have logged into your &lt;a href="https://www.digitalocean.com/?refcode=b0a3d514963a"&gt;Digital Ocean&lt;/a&gt; account and have verified your email
and billing details you can go ahead and click on the "Create" button in the
side bar. This should give you the Droplet creation wizard and you can just follow
these steps:&lt;/p&gt;
&lt;p&gt;First chose a hostname, this can be whatever you want, like "VPN", etc.
&lt;img alt="&amp;quot;Choose Hostname&amp;quot;" src="/static/images/2014/creat-droplet-hostname.png" /&gt;
Once you have chosen a hostname, go ahead and select the region you want your
traffic to be in. If you are Canadian like me who might want your traffic to
appear as it is comign from the US then you want to select a US Region.
&lt;img alt="&amp;quot;Select Region&amp;quot;" src="/static/images/2014/digital-ocean-select-region.png" /&gt;
Next you choose your flavor of Linux, in my case I have chosen Ubuntu.
&lt;img alt="&amp;quot;Select Droplet Image&amp;quot;" src="/static/images/2014/digital-ocean-select-image.png" /&gt;
Next you want to choose the SSH keys to use, if you have &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2"&gt;set them up&lt;/a&gt;.
If you don't have ssh keys set up and you don't want to use them. That is okay,
after you create the droplet &lt;a href="https://www.digitalocean.com/?refcode=b0a3d514963a"&gt;Digital Ocean&lt;/a&gt; will email you a root password to the
email you signed up with. It is recommended you change this root password by sshing
into your droplet with the current root password and &lt;a href="https://www.digitalocean.com/community/questions/can-i-change-root-password"&gt;changing it&lt;/a&gt;.
&lt;img alt="&amp;quot;Choose SSH Keys and Create&amp;quot;" src="/static/images/2014/digital-ocean-ssh-create.png" /&gt;&lt;/p&gt;
&lt;h2&gt;2. Install sshuttle&lt;/h2&gt;
&lt;p&gt;Installing sshuttle is each, just download it to your computer. You also need Python installed on
your machine(Mac or Linux) to eventually run sshuttle.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;apenwarr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sshuttle&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Optionally you can download and extract a &lt;code&gt;zip&lt;/code&gt; or a &lt;code&gt;.tar.gz&lt;/code&gt; from the sshuttle
&lt;a href="https://github.com/apenwarr/sshuttle/releases"&gt;download page&lt;/a&gt; on &lt;a href="http://github.com"&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;3. Start your Tunnel&lt;/h2&gt;
&lt;p&gt;Okay. We have our droplet setup and we have downloaded sshuttle. Now to start
our DNS tunnel.&lt;/p&gt;
&lt;p&gt;Navigate to the directory where you downloaded sshuttle locally then:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;   &lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="n"&gt;sshuttle&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;dns&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;vvr&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="n"&gt;dropletserver&lt;/span&gt; 0&lt;span class="o"&gt;/&lt;/span&gt;0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This will then prompt you for your local root password and the password to your
droplet.
&lt;strong&gt;Note&lt;/strong&gt;: On OSX this will require a restart after you run this the first time.&lt;/p&gt;
&lt;p&gt;You should now be able to navigate to that out of region website you wanted to
visit so much and it should just work.&lt;/p&gt;
&lt;p&gt;&lt;img alt="&amp;quot;Hulu&amp;quot;" src="/static/images/2014/hulu.png" /&gt;&lt;/p&gt;
&lt;h2&gt;What else is this good for?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It is essentially a poor mans instant VPN, you don't even need to have root access on the machine you are connecting to.&lt;/li&gt;
&lt;li&gt;Allows you to surf safely. It protects you from standard attacks like Firesheep on insecure networks.&lt;/li&gt;
&lt;li&gt;Anything else you can think of that you would like to use a VPN for.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Any other uses for this or thoughts about this? Leave something in the comments or
contact me on &lt;a href="http://twitter.com/mgrouchy"&gt;twitter&lt;/a&gt;.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Pro Tip - Pip Upgrade All Python Packages</title><link href="http://mikegrouchy.com/blog/2014/06/pro-tip-pip-upgrade-all-python-packages.html" rel="alternate"></link><updated>2014-06-02T00:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2014-06-02:blog/2014/06/pro-tip-pip-upgrade-all-python-packages.html</id><summary type="html">&lt;p&gt;An open and ongoing &lt;a href="https://github.com/pypa/pip/issues/59"&gt;feature request&lt;/a&gt; for PIP is to add an &lt;code&gt;upgrade-all&lt;/code&gt; command to
PIP. Due to the lack of this feature a workaround is required. Enter Stackoverflow.&lt;/p&gt;
&lt;p&gt;I have been using a variation of this particular command line trick for awhile,
but when starting writing this up I googled other solutions and &lt;a href="http://stackoverflow.com/a/3452888/2867"&gt;this&lt;/a&gt; is one of the
nicest and most straightforward I have seen.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;freeze&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;grep&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;^\-e&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;cut&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; 1  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;xargs&lt;/span&gt; &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;So next time you want to upgrade all the packages in your virtualenv, this is a great
place to start. I have this set up as an alias to &lt;code&gt;pipup&lt;/code&gt; in my &lt;a href="https://github.com/mgrouchy/dotfiles/blob/master/.zshalias#L31"&gt;.zshrc&lt;/a&gt; for convenience.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Django-Stronghold 0.2.6 released</title><link href="http://mikegrouchy.com/blog/2014/05/django-stronghold-026-released.html" rel="alternate"></link><updated>2014-05-28T00:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2014-05-28:blog/2014/05/django-stronghold-026-released.html</id><summary type="html">&lt;p&gt;I have just pushed version 0.2.6 of &lt;a href="https://github.com/mgrouchy/django-stronghold"&gt;Django-Stronghold&lt;/a&gt; to &lt;a href="https://pypi.python.org/pypi/django-stronghold/"&gt;pypi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The main update in this version is the new configuration option &lt;code&gt;STRONGHOLD_PERMISSIONS_DECORATOR&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The STRONGHOLD_PERMISSIONS_DECORATOR setting allows you to override the default
behavior which currently defaults to requiring your views to default to
login_required and replace that with any decorator you like that serves your
purpose like the &lt;code&gt;staff_member_required decorator&lt;/code&gt; or a decorator you have created
yourself which supports your specific mix of login requirements.&lt;/p&gt;
&lt;p&gt;This version currently supports Django 1.4.x, 1.5.x and 1.6.x, download it and
try it out and please &lt;a href="https://github.com/mgrouchy/django-stronghold/issues"&gt;report any bugs&lt;/a&gt; if you notice anything.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Changes to Python Jobs HQ</title><link href="http://mikegrouchy.com/blog/2013/03/changes-to-python-jobs-hq.html" rel="alternate"></link><updated>2013-03-22T00:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2013-03-22:blog/2013/03/changes-to-python-jobs-hq.html</id><summary type="html">&lt;p&gt;We are rolling out some changes to &lt;a href="http://pythonjobshq.com"&gt;Python Jobs HQ&lt;/a&gt; today which
I think will add some greater value for people who post their jobs on there.&lt;/p&gt;
&lt;h2&gt;What is Changing?&lt;/h2&gt;
&lt;p&gt;First thing is that python job postings will be longer in duration. They will
now be 45 instead of 30 days and as a consequence of this the price will be changing
from 149$ to 199$ per ad.&lt;/p&gt;
&lt;p&gt;The second change is that besides having your Job ad tweeted by the &lt;a href="http://twitter.com/pycoders"&gt;Pycoder's Twitter
account&lt;/a&gt; we will also be adding your Job ad to the Pycoder's
Weekly newsletter in a brand new "Python Jobs" section twice in the 45 day
duration of your job post.&lt;/p&gt;
&lt;h2&gt;What about current job posts?&lt;/h2&gt;
&lt;p&gt;If you already have a job post at this time we will be matching these changes for your
current job post at no extra charge. We have increased the length of your posting
by 15 days to meet the 45 and we will be looking to meet our 2 issue minimum
for your Job posting over the next couple of weeks.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Yes, your code does need comments.</title><link href="http://mikegrouchy.com/blog/2013/03/yes-your-code-does-need-comments.html" rel="alternate"></link><updated>2013-03-05T00:00:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2013-03-05:blog/2013/03/yes-your-code-does-need-comments.html</id><summary type="html">&lt;p&gt;I imagine that this post is going to draw the ire of some. It seems like every
time I mention this on &lt;a href="http://twitter.com/mgrouchy"&gt;Twitter&lt;/a&gt; or anywhere else
there is always some pushback from people who think that putting comments in
your code is a waste of time.&lt;/p&gt;
&lt;p&gt;I think your code needs comments, but so we have a mutual understanding, lets
qualify that.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;somefunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
   &lt;span class="c"&gt;#add a to b&lt;/span&gt;
   &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
   &lt;span class="c"&gt;#return the result of a + b&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I understand this is a contrived example but this is the comment trap that new
developers get caught in. These types of comments really aren't useful to anyone.
Peppering the code that you just wrote with excessive comments, especially when
it is abundantly clear what the code is doing, is the least useful type of comment
you can write.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"Code is far better describing what code does than English, so just write clear code"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is usually the blowback you get from comments like the ones above. I don't
disagree, programming languages are definitely more precise than English. What I
don't agree with is the idea that if the code is clear and understandable that
comments are unneeded or don't have a place in modern software development.&lt;/p&gt;
&lt;p&gt;So knowing this, what kind of comments am I advocating for? I'm advocating for
comments as documentation. Comments that explain what a complex piece of code
does, and most importantly what an entire function or Class does and why they
exist in the first place.&lt;/p&gt;
&lt;p&gt;So what is a good example of the kind of documentation I am talking about? I
think &lt;a href="http://twitter.com/zedshaw"&gt;Zed Shaw's&lt;/a&gt; &lt;a href="http://github.com/zedshaw/lamson"&gt;Lamson&lt;/a&gt; is a fantastic example of this. Here is a code excerpt from that:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Relay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sd"&gt;    Used to talk to your &amp;quot;relay server&amp;quot; or smart host, this is probably the most&lt;/span&gt;
&lt;span class="sd"&gt;    important class in the handlers next to the lamson.routing.Router.&lt;/span&gt;
&lt;span class="sd"&gt;    It supports a few simple operations for sending mail, replying, and can&lt;/span&gt;
&lt;span class="sd"&gt;    log the protocol it uses to stderr if you set debug=1 on __init__.&lt;/span&gt;
&lt;span class="sd"&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;127.0.0.1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;starttls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="sd"&gt;        The hostname and port we&amp;#39;re connecting to, and the debug level (default to 0).&lt;/span&gt;
&lt;span class="sd"&gt;        Optional username and password for smtp authentication.&lt;/span&gt;
&lt;span class="sd"&gt;        If ssl is True smtplib.SMTP_SSL will be used.&lt;/span&gt;
&lt;span class="sd"&gt;        If starttls is True (and ssl False), smtp connection will be put in TLS mode.&lt;/span&gt;
&lt;span class="sd"&gt;        It does the hard work of delivering messages to the relay host.&lt;/span&gt;
&lt;span class="sd"&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hostname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ssl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;starttls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;starttls&lt;/span&gt;

   &lt;span class="o"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;This code snippet is from &lt;a href="https://github.com/zedshaw/lamson/blob/master/lamson/server.py"&gt;https://github.com/zedshaw/lamson/blob/master/lamson/server.py&lt;/a&gt;. You can poke around the lamson code and see some good looking
Python code but also some usefully documented code.&lt;/p&gt;
&lt;h2&gt;So hold on. Why are we writing comments?&lt;/h2&gt;
&lt;p&gt;Why are we writing comments, if you write clean, understandable code? Why do we
need to explain what classes and functions do if the code is "clear" and easy to
understand.&lt;/p&gt;
&lt;p&gt;In my opinion, we write comments to capture intent. Comments are the only way
to capture the intent of the code at the time of writing.&lt;/p&gt;
&lt;p&gt;Looking at a block of code only allows you to understand the intent of that
particular code at that moment in time which may be very different then the
intent of the code at time of its original writing.&lt;/p&gt;
&lt;h2&gt;Writing comments captures intent.&lt;/h2&gt;
&lt;p&gt;Writing comments captures the original meaning of the code. Python has &lt;a href="http://www.python.org/dev/peps/pep-0257/"&gt;docstrings&lt;/a&gt;
for this, other languages have comparable options. What is so good about docstring
type comments? In conjunction with unambiguous class and function names they can
easily describe the original intent of your code.&lt;/p&gt;
&lt;p&gt;Why is capturing the original intent of your code important?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It allows a developer, at a glance, to look at a piece of code and know why it exists.&lt;/li&gt;
&lt;li&gt;It reduces situations where a piece of codes original intent isn't clear then gets modified
and leads to unintended regressions.&lt;/li&gt;
&lt;li&gt;It reduces the amount of context a developer must hold his/her mind to solve any particular problem that may be contained in a piece of code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Writing comments to capture intent is like writing tests to prove that your software does what is expected.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Where do we go from here?&lt;/h2&gt;
&lt;p&gt;The first step is to realize that the documentation/comments accompanying a piece
of code can be just important as the code itself and need to be maintained as such.
Just like code can become stale if you don't keep it updated so do comments.
If you update some code you &lt;em&gt;must&lt;/em&gt; update the accompanying comments/documentation
or they become useless and can lead to more developer error then not having comments
at all. So we have to treat comments and documentation as first class citizens.&lt;/p&gt;
&lt;p&gt;Next we have to agree on what is important to comment on in your code, and how to
structure your code to make your use of comments most effective. Most of this
relies on your own judgement but we can cover most issues with some steadfast rules.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Never name your classes and functions ambiguously.&lt;/li&gt;
&lt;li&gt;Always use inline comments on code blocks that are complicated or may appear unclear.&lt;/li&gt;
&lt;li&gt;Always use descriptive variable names.&lt;/li&gt;
&lt;li&gt;Always write comments describing the intent or reason why a piece of code exists.&lt;/li&gt;
&lt;li&gt;Always keep comments up to date when editing commented code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As you can see from the points above code as documentation and comments as documentation are not mutually exclusive. Both
are necessary to create readable code that is easily maintained by you and future maintainers.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you are interested in keeping up with the latest Python news, discussions,
projects, articles and Jobs you should check out &lt;a href="http://pycoders.com"&gt;Pycoder's Weekly&lt;/a&gt; the Python
newsletter that I curate.&lt;/p&gt;
&lt;/blockquote&gt;</summary><category term=""></category></entry><entry><title>Using Johnny Cache with Heroku and Memcachier</title><link href="http://mikegrouchy.com/blog/2013/02/using-johnny-cache-with-heroku-and-memcachier.html" rel="alternate"></link><updated>2013-02-21T20:25:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2013-02-21:blog/2013/02/using-johnny-cache-with-heroku-and-memcachier.html</id><summary type="html">&lt;p&gt;&lt;a href="https://github.com/jmoiron/johnny-cache"&gt;Johnny Cache&lt;/a&gt; is a pretty great caching framework for Django.
For most apps you can drop Johnny-cache in and depending on your Django project get
a good result right out of the box. If this sounds appealing check out the &lt;a href="http://pythonhosted.org/johnny-cache/"&gt;docs&lt;/a&gt;
for more details.&lt;/p&gt;
&lt;p&gt;A recent issue that I have run into is that a deploying a Django App on &lt;a href="http://heroku.com"&gt;Heroku&lt;/a&gt; with
Johnny Cache does not work out of the box with my &lt;a href="http://memcached.org/"&gt;Memcached&lt;/a&gt; service
of choice &lt;a href="http://www.memcachier.com/"&gt;Memcachier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After some investigation the issue here is that Johnny Cache doesn't support
&lt;a href="http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer"&gt;SASL&lt;/a&gt; out of the box which is how the authentication for Memcachier works.
Memcachier reccomends using &lt;a href="https://github.com/jbalogh/django-pylibmc"&gt;django-pylibmc's&lt;/a&gt;
&lt;a href="http://libmemcached.org/libMemcached.html"&gt;libmemcached&lt;/a&gt; backend to use its app.
Of course this isn't compatible with Johnny Cache out of the box either so what do you do?&lt;/p&gt;
&lt;h2&gt;Create your own SASL compatible backend for Johnny Cache&lt;/h2&gt;
&lt;p&gt;This is a fairly straightforward problem to solve, we can just inherit from the
&lt;code&gt;PyLibMCCache&lt;/code&gt; backend from django-pylibmc and override its &lt;code&gt;_get_memcache_timeout&lt;/code&gt;
method with the one from Johnny Cache.&lt;/p&gt;
&lt;p&gt;Then update your django settings file to point at the new backend you have just
created.&lt;/p&gt;
&lt;script src="https://gist.github.com/mgrouchy/4956137.js"&gt;&lt;/script&gt;

&lt;p&gt;Make sure in your CACHES settings dict that you make sure you set BINARY to True
and you are off to the races.&lt;/p&gt;
&lt;p&gt;Any questions? Feel free to ask in the comments or hit me up on &lt;a href="http://twitter.com/mgrouchy"&gt;Twitter&lt;/a&gt;&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Announcing Django-Stronghold</title><link href="http://mikegrouchy.com/blog/2013/02/announcing-django-stronghold.html" rel="alternate"></link><updated>2013-02-15T10:00:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2013-02-15:blog/2013/02/announcing-django-stronghold.html</id><summary type="html">&lt;p&gt;I spent much of last year trying to turn up my open source contributions
so I spent much of my time contributing to other peoples open source projects. Its
2013 and its a new year, so I am making a push to get some open source projects
that I have had in the pipe actually out there in the wild.&lt;/p&gt;
&lt;p&gt;The first of these is &lt;a href="http://github.com/mgrouchy/django-stronghold"&gt;django-stronghold&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are a Django developer and
you have worked on a Django project of any size, you might have coded something
like this already which makes it the perfect target for open source.&lt;/p&gt;
&lt;p&gt;Stronghold defaults your Django project to private. This means that via
some middleware all your Django views become &lt;code&gt;login_required&lt;/code&gt;. Stronghold also
provides some mechanisims to make views public via a decorator or whitelisting
some of your url patterns. If this sounds useful to you &lt;a href="http://github.com/mgrouchy/django-stronghold"&gt;check it out&lt;/a&gt;. If you run into any issues please let me know!&lt;/p&gt;
&lt;p&gt;Shout out to &lt;a href="http://twitter.com/richardlblair"&gt;Richard Blair&lt;/a&gt; for help with this.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Introducing Python Jobs HQ</title><link href="http://mikegrouchy.com/blog/2013/02/introducing-python-jobs-hq.html" rel="alternate"></link><updated>2013-02-14T10:35:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2013-02-14:blog/2013/02/introducing-python-jobs-hq.html</id><summary type="html">&lt;p&gt;As you may know if you have read this blog, I am one of the curators for &lt;a href="http://pycoders.com"&gt;Pycoder's Weekly&lt;/a&gt;.
We have been working on a bunch of small projects to try to bring more value from Pycoder's
into the Python community. The first thing we have launched this year is &lt;a href="http://pythonjobshq.com"&gt;Python Jobs HQ&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://pythonjobshq.com"&gt;Python Jobs HQ&lt;/a&gt; is a Job site we are running that is focused on
putting the best jobs in front of the best people. Jobs posted on the site are posted to
the &lt;a href="http://twitter.com/pycoders"&gt;@pycoders&lt;/a&gt; fast growing Twitter account and the Job Board
is advertised weekly in the newsletter. Already we have had great companies like &lt;a href="http://newsle.com"&gt;Newsle&lt;/a&gt;, &lt;a href="http://path.com"&gt;Path&lt;/a&gt;
&lt;a href="http://datadoghq.com"&gt;Datadoghq&lt;/a&gt; and &lt;a href="http://cyaninc.com"&gt;Cyan Inc&lt;/a&gt;. and others post with us. If you have a Python Job to post
for your company or if you are looking to find a new job as a Python Developer,
you should check out &lt;a href="http://pythonjobshq.com"&gt;Python Jobs HQ&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have any questions feel free to reach out to me on &lt;a href="http://twitter.com/mgrouchy"&gt;Twitter&lt;/a&gt; or email our &lt;a href="mailto:admin@pycoders.com"&gt;Pycoder's Email&lt;/a&gt;.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Force websites to use SSL in Google Chrome</title><link href="http://mikegrouchy.com/blog/2012/07/force-websites-to-use-ssl-in-google-chrome.html" rel="alternate"></link><updated>2012-07-23T09:30:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-07-23:blog/2012/07/force-websites-to-use-ssl-in-google-chrome.html</id><summary type="html">&lt;p&gt;I saw this tip in the comments over at &lt;a href="http://news.ycombinator.com"&gt;Hacker News&lt;/a&gt; today
and I thought that this is a great alternative to force SSL for sites that don't have
it available.&lt;/p&gt;
&lt;h2&gt;Step 1&lt;/h2&gt;
&lt;p&gt;Navigate to Chrome's net internals dashboard by typing&lt;/p&gt;
&lt;p&gt;&lt;code&gt;chrome://net-internals/&lt;/code&gt; into your browser.&lt;/p&gt;
&lt;p&gt;You should see:&lt;/p&gt;
&lt;p&gt;&lt;img alt="net-internals" src="/static/images/2012/07/net-internals.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Step 2&lt;/h2&gt;
&lt;p&gt;Navigate to the &lt;a href="http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security"&gt;HSTS&lt;/a&gt;(HTTPS Strict Transport Security) Tab and you should see this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="hsts" src="/static/images/2012/07/hsts.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Step 3&lt;/h2&gt;
&lt;p&gt;From there its pretty easy, just type in the site you want to force to SSL and
you are done!&lt;/p&gt;
&lt;p&gt;&lt;img alt="hsts" src="/static/images/2012/07/add-hsts-domain.png" /&gt;&lt;/p&gt;
&lt;p&gt;Do you have any other Chrome security tips? Leave them in the comments!&lt;/p&gt;</summary><category term=""></category></entry><entry><title>The Setup</title><link href="http://mikegrouchy.com/blog/2012/07/the-setup.html" rel="alternate"></link><updated>2012-07-18T08:35:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-07-18:blog/2012/07/the-setup.html</id><summary type="html">&lt;p&gt;This post is inspired by &lt;a href="http://www.mahdiyusuf.com/post/16687503726/the-setup"&gt;Mahdi&lt;/a&gt; and &lt;a href="http://usesthis.com/"&gt;The Setup&lt;/a&gt;. I had originally written a rather terrible post about my &lt;a href="http://mikegrouchy.com/blog/my-development-toolbox.html"&gt;development toolbox&lt;/a&gt; so I figured it was time to revisit this and get it right for people who care.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;Not a lot going on here, nothing fancy. Just macs, running OSX Lion. The hardware is a bit older, but I spend most of my time in a terminal, so I don't really notice so much.&lt;/p&gt;
&lt;h3&gt;Work:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2008 Aluminum Macbook, 4GB ram&lt;/li&gt;
&lt;li&gt;Magic Mouse&lt;/li&gt;
&lt;li&gt;Standard Apple wired keyboard (I like having the numberpad and not having to be worried about batteries)&lt;/li&gt;
&lt;li&gt;27" Cinema Display&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Out of all these things, I would have to say the cinema display is incredible. I don't normally use my laptop screen when it is connected to the cinema display to avoid &lt;a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury"&gt;RSI&lt;/a&gt; issues, however, when I do have it open its normally just for the &lt;a href="http://rd.io"&gt;rdio&lt;/a&gt; client.&lt;/p&gt;
&lt;h3&gt;Home:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2010 iMac 21.5", 8GB Ram&lt;/li&gt;
&lt;li&gt;Magic Mouse&lt;/li&gt;
&lt;li&gt;Apple wireless bluetooth keyboard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don't use this often, as it is the computer my &lt;a href="http://twitter.com/nicolegrouchy"&gt;wife&lt;/a&gt; uses primarily. I only tend to use it when I
don't feel like slogging around with my laptop at home, or I have left it at the &lt;a href="http://swixhq.com"&gt;office&lt;/a&gt; or something.&lt;/p&gt;
&lt;p&gt;I have also taken to writing drafts for my blogposts using &lt;a href="http://gist.github.com"&gt;Github Gists&lt;/a&gt; with my &lt;a href="http://amzn.to/KLFZrw"&gt;1st Generation 32GB iPad&lt;/a&gt; and the apple bluetooth keyboard. I have found this to be a fantastic way to write a blogpost or a little code while out at a coffee shop or anywhere else when I am on the go.&lt;/p&gt;
&lt;h2&gt;Software&lt;/h2&gt;
&lt;p&gt;Like I said earlier, I don't spend too much time outside the console, but when I do these are the things I couldn't live without.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://manytricks.com/moom/"&gt;Moom&lt;/a&gt; - This is an awesome app, it allows you to tile windows in OSX, attach hotkeys to tiling commands and a bunch of other niceties that don't exist on OSX.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rd.io"&gt;rdio&lt;/a&gt; - As I mentioned earlier, I use rdio. I listen to music all the time while coding, or thinking or just about anything, so I have rdio going basically all the time.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://giantcomet.com/flint"&gt;Flint&lt;/a&gt; - We use campfire for team chat in the office so I use flint for that.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://chrome.google.com"&gt;Chrome&lt;/a&gt; - The web browser of champions, I pretty much use Chrome exclusively now and normally have way too many tabs open.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt; - I use skitch for taking screenshots on OSX it has really great support for simple editing and cropping of your screenshots that I would have a hard time switching to anything else. I dont use their server anymore for storage of my screenshots, I have a proxy set up using &lt;a href="http://heroku.com"&gt;heroku&lt;/a&gt; to send my screenshots to a Amazon S3 bucket. This is accomplished with &lt;a href="https://github.com/mgrouchy/s3itch"&gt;s3itch&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://db.tt/Hc6Cqm1"&gt;Dropbox&lt;/a&gt; -Dropbox is fantastic. I store all the git repos I am working on in Github and it has saved my butt a few times now. I can feel safe everything is backed up and even untracked files(in git) are being versioned, just incase I delete a untracked file I end up needing.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; - Alfred is an indispensable quick launcher app in the vein of &lt;a href="http://qsapp.com/"&gt;quicksilver&lt;/a&gt;. I spend most of my time with my hands off the mouse so I don't know what I would do without Alfred.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rescuetime.com/ref/161860"&gt;RescueTime&lt;/a&gt; - I work pretty hard to try to stay productive and at the very least stay knowledgeable about where my time is going. RescueTime helps with that by tracking what I do on the computer every day.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Command Line Life&lt;/h2&gt;
&lt;p&gt;The command line is where I spend most of my time, on OSX I don't use the terminal software that comes with OSX, I use &lt;a href="http://www.iterm2.com/"&gt;iTerm2&lt;/a&gt;. In that terminal I use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.zsh.org/"&gt;Zsh&lt;/a&gt; with &lt;a href="https://github.com/robbyrussell/oh-my-zsh/"&gt;Oh-my-zsh&lt;/a&gt;, because as you know, &lt;a href=""&gt;Zsh is your friend&lt;/a&gt;, you can check out my .zshrc in my &lt;a href="https://github.com/mgrouchy/dotfiles"&gt;dotfiles repo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vim.org/"&gt;Vim&lt;/a&gt; - The only text editor in my opinion. This is where I spend most of my time check out my &lt;a href="https://github.com/mgrouchy/vim"&gt;vimfiles&lt;/a&gt; for setup details.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="vim screenshot" src="http://img.mikegrouchy.s3.amazonaws.com/1._ControlP_-_%28%7E%29_-_VIM_%28vim%29-20120628-111826.jpg" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://tmux.sourceforge.net/"&gt;tmux&lt;/a&gt; - Tmux is great. Its a great alternative to gnu screen, highly configurable and looks great.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="tmux screenshot" src="http://img.mikegrouchy.s3.amazonaws.com/1._tmux_%28tmux%29-20120628-111332.jpg" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bpython-interpreter.org/"&gt;bpython&lt;/a&gt; - bpython is improved interface to the Python interpreter. It supports syntax highlighting, autocomplete and a bunch of other useful features. I usually have bpython open all day every day.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="bpython screenshot" src="http://img.mikegrouchy.s3.amazonaws.com/1._bpython_%28Python%29-20120628-111458.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;On My desk&lt;/h2&gt;
&lt;p&gt;Books:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://amzn.to/L2qI4V"&gt;Natural Language Processing With Python&lt;/a&gt; - Steven Bird, Ewan Klein and Edward Loper&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/KyjsLo"&gt;Javascript - The Definitive Guide&lt;/a&gt; - David Flanagan&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/M3xogV"&gt;Expert Python Programming&lt;/a&gt; - Tarek Zaide&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A bunch of &lt;a href="http://pycoders.com"&gt;Pycoders&lt;/a&gt; stickers&lt;/p&gt;
&lt;p&gt;&lt;img alt="Pycoders Sickers!" src="http://mikegrouchy.com/media/images/2012/07/pycoders-stickers.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Thats about it. What does your setup look like?&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Broken RSS Links Fixed</title><link href="http://mikegrouchy.com/blog/2012/07/broken-rss-links-fixed.html" rel="alternate"></link><updated>2012-07-10T09:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-07-10:blog/2012/07/broken-rss-links-fixed.html</id><summary type="html">&lt;p&gt;&lt;img alt="Darth Fail" src="/static/images/2012/07/darth-vader-epic-fail.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;It seems my RSS feed has failed epically and none of the actual links to the blog
worked. Not too awesome for you RSS readers out there.&lt;/p&gt;
&lt;p&gt;Needless to say, that is fixed now. Thank you to the people who went through the
trouble to notify me of my broken RSS. Your help is much appreciated.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Setting up PyPy 1.9 on OSX</title><link href="http://mikegrouchy.com/blog/2012/07/setting-up-pypy-19-on-osx.html" rel="alternate"></link><updated>2012-07-08T10:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-07-08:blog/2012/07/setting-up-pypy-19-on-osx.html</id><summary type="html">&lt;p&gt;&lt;img alt="pypy" src="http://pypy.org/image/pypy-logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;As I had said before on &lt;a href="http://mikegrouchy.com/blog/setting-up-nginx-with-ssl-and-godaddy.html"&gt;this&lt;/a&gt; &lt;a href="http://mikegrouchy.com/blog/great-django-test-talks.html"&gt;blog&lt;/a&gt;, I sometimes use it as a way to record things I want to remember. This is one of those times.&lt;/p&gt;
&lt;p&gt;I have started a new project that uses PyPy and while there is documentation out there to get started, I find it useful to have it all in the same place and not spread around.&lt;/p&gt;
&lt;h2&gt;What is PyPy&lt;/h2&gt;
&lt;p&gt;PyPy is Python interpreter and JIT compiler. The latest PyPy release PyPy 1.9, the one we are installing, is CPython 2.7.2 compatible. PyPy is focused on speed and 100% compatibility with the &lt;a href="http://en.wikipedia.org/wiki/CPython"&gt;CPython&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Installing PyPy&lt;/h2&gt;
&lt;p&gt;There are a couple of options to install PyPy on OSX.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can install using the &lt;a href="https://bitbucket.org/pypy/pypy/downloads/pypy-1.9-osx64.tar.bz2"&gt;binary&lt;/a&gt; from the PyPy website.&lt;/li&gt;
&lt;li&gt;You can &lt;a href="http://pypy.org/download.html#building-from-source"&gt;build PyPy from source&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You can install using &lt;a href="http://mxcl.github.com/homebrew/"&gt;Homebrew&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I like to manage my packages using Homebrew when thats an option, so I installed using Homebrew.
It was very easy to get setup just&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    brew install PyPy
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then follow any instructions in your terminal.&lt;/p&gt;
&lt;p&gt;You should then see a symlink in your /usr/local/bin directory for PyPy&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    ~ &amp;gt;&amp;gt; ls /usr/local/bin | grep pypy
    pypy
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And assuming you have homebrew setup correctly you should be able to type "pypy" in your terminal and get an interactive interpreter.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    ~ &amp;gt;&amp;gt; pypy
    Python 2.7.2 &lt;span class="o"&gt;(&lt;/span&gt;341e1e3821ff, Jun 07 2012, 15:42:54&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt;PyPy 1.9.0 with GCC 4.2.1&lt;span class="o"&gt;]&lt;/span&gt; on darwin
    Type &lt;span class="s2"&gt;&amp;quot;help&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;copyright&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;credits&amp;quot;&lt;/span&gt; or &lt;span class="s2"&gt;&amp;quot;license&amp;quot;&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
    And now &lt;span class="k"&gt;for &lt;/span&gt;something completely different: &lt;span class="sb"&gt;``&lt;/span&gt;it&lt;span class="s1"&gt;&amp;#39;s beautiful: very rectangular&lt;/span&gt;
&lt;span class="s1"&gt;    and yellow&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;
    &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If you have gotten this far you have been successful at installing PyPy!&lt;/p&gt;
&lt;p&gt;Now, like any good &lt;a href="http://pycoders.com"&gt;pycoder&lt;/a&gt;, lets move on to getting PyPy setup inside a Virtualenv.&lt;/p&gt;
&lt;h2&gt;Getting PyPy to work with Virtualenv or Virtualenvwrapper&lt;/h2&gt;
&lt;p&gt;Luckily getting PyPy set up in a virtualenv is really easy, for virtualenv the command is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    virtualenv -p /usr/local/bin/pypy environmentname
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;for Virtualenvwrapper, its basically the same:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    mkvirtualenv -p /usr/local/bin/pypy environmentname
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In the output of each of these commands you should see:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    Running virtualenv with interpreter /usr/local/bin/pypy
    New pypy executable in testpypy2/bin/pypy
    Installing setuptools............done.
    Installing pip...............done.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now you can activate your environment.&lt;/p&gt;
&lt;p&gt;In virtualenv:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nb"&gt;source&lt;/span&gt; /path/to/your/virtualenv/bin/activate
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In &lt;a href="http://www.doughellmann.com/projects/virtualenvwrapper/"&gt;virtualenvwrapper&lt;/a&gt;:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    workon environmentname
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And test your Python version:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    python --version
    Python 2.7.2 &lt;span class="o"&gt;(&lt;/span&gt;341e1e3821ff, Jun 07 2012, 15:42:54&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;[&lt;/span&gt;PyPy 1.9.0 with GCC 4.2.1&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now you are good to get working on your Python project with PyPy. Happy hacking!&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Write Less Code</title><link href="http://mikegrouchy.com/blog/2012/06/write-less-code.html" rel="alternate"></link><updated>2012-06-26T09:50:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-06-26:blog/2012/06/write-less-code.html</id><summary type="html">&lt;p&gt;One of the fundamental truths of software development is that you have to write code,
but one of the biggest fallacies is the idea that writing code is your job. When I
first started out as a software developer, I fell into that trap, writing code is
a powerful thing, its empowering, you feel like you are productive and you are
accomplishing things. However, what I have learned over the years is the real
truth of the matter. The truth that the job of a software developer is to write
as little code as possible.&lt;/p&gt;
&lt;p&gt;Now, don't get me wrong, we should not be getting ourselves into &lt;a href="http://codegolf.com/"&gt;code golf&lt;/a&gt;
situations where we are compacting code and saving keystrokes to the point where
the code you produce is no longer understandable. When you think about it though
the fact that most of your time will be maintaining the terrible code you wrote,
writing less code and not creating more work for yourself will start to look like
an exceptionally good idea.&lt;/p&gt;
&lt;h2&gt;Why?&lt;/h2&gt;
&lt;p&gt;Look around, look at your tools, look at the framework you likely use to
produce that thing you work on. Everything you do, all the tools you use,
everything is trying make you write less code. Your tools are trying to make
you less error prone, and abstracting away the things that will cause you trouble
down the road.&lt;/p&gt;
&lt;p&gt;So why should you write less code? When I said earlier that your job was to write
less code, I was fibbing a little bit. Really your job is to &lt;strong&gt;think&lt;/strong&gt;, your job
is to think about the problem at hand, devise an elegant solution and then turn
that solution into software. One of the byproducts of creating software is that you
have to write code to solve problems.&lt;/p&gt;
&lt;p&gt;&lt;img alt="the thinker" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/The_Thinker,_Rodin.jpg/250px-The_Thinker,_Rodin.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Code is a by-product&lt;/h2&gt;
&lt;p&gt;Code isn't that important. We love to convince ourselves that it is because
as we actually start executing and turning our solutions into software, it seems
like writing code is both a means and an end unto itself. We talk about our
&lt;a href="http://mikegrouchy.com/blog/compile-vim-with-python-on-osx-with-homebrew.html"&gt;editors&lt;/a&gt;,
we talk about our &lt;a href="http://pycoders.com"&gt;language of choice&lt;/a&gt; and we talk about our
&lt;a href="http://mikegrouchy.com/blog/zsh-is-your-friend.html"&gt;environments&lt;/a&gt;. I do it,
you do it, we all do it. There is no shame in enjoying the craft of the work you do.
The trick is to stay focused. Code is awesome, but its also the enemy, it takes
time to write, it can be fragile, it can be unclear and not particularly robust.&lt;/p&gt;
&lt;p&gt;This is why I stick with the mantra "Write less code". Whenever I feel like something
is getting bigger than it should be or more complicated than it should be, I say
"Write less code". Whenever I write so much code that it gets hard to keep it
in context, I refactor, I clean it up, all the while, thinking about "Write less code".&lt;/p&gt;
&lt;p&gt;As much as it pains me to say, sometimes there is no way to get around writing a
bunch of code, but if you can't be concise, be clear. Writing less code is
writing &lt;a href="http://amzn.to/MJFkE4"&gt;clean code&lt;/a&gt;. Writing less code is also about
writing clear code. When you are economical with the code you write the purpose
of your code becomes clear.&lt;/p&gt;
&lt;p&gt;So, whats the lesson here? Most importantly I think the lesson here is that
code is a by-product, its an unavoidable thing that you generate in the process
of doing your job. So think more, &lt;a href="http://amzn.to/KHjbJp"&gt;refactor more&lt;/a&gt;, remove some
old code and write less new code, do yourself a favor and start this today.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Great Python/Django Testing Talks</title><link href="http://mikegrouchy.com/blog/2012/06/great-pythondjango-testing-talks.html" rel="alternate"></link><updated>2012-06-10T21:05:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-06-10:blog/2012/06/great-pythondjango-testing-talks.html</id><summary type="html">&lt;p&gt;I have been working on some tests for an upcoming product at &lt;a href="http://swixhq.com"&gt;SWIX&lt;/a&gt;
and as any good developer I think its important to make an effort to constantly be
learning new things. In this vein I starting digging through the videos for
this years &lt;a href="https://us.pycon.org/2012/"&gt;Pycon US&lt;/a&gt;. Lo and Behold Testing was a
popular topic at Pycon so there were lots of talks to watch!&lt;/p&gt;
&lt;p&gt;My two favorite talks were Testing and Django by &lt;a href="https://twitter.com/carljm"&gt;Carl Meyer&lt;/a&gt;
and Fast Test, Slow Test by the always insightful &lt;a href="https://twitter.com/garybernhardt"&gt;Gary Bernhardt&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Testing and Django - Carl Meyer&lt;/h2&gt;
&lt;p&gt;&lt;iframe width="600" height="450" src="http://www.youtube.com/embed/ickNQcNXiS4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;br/&gt;
Carl Meyer gives this great deep dive into testing Django projects, there are
plenty of gems in here, including some code for a Django Test Runner using Unittest2's
test discovery. Carl gives some great tips for writing tests with Django as well as tips
for just writing good tests in general.&lt;/p&gt;
&lt;h2&gt;Fast Test, Slow Test - Gary Bernhardt&lt;/h2&gt;
&lt;p&gt;&lt;iframe width="600" height="450" src="http://www.youtube.com/embed/RAxiiRPHS9k" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;br/&gt;
This talk is superb. Gary Bernhardt talks about how to write a fast test suite as
well as how you should be testing your applications. He points out that the slow
test suite problem is usually releated to the problem of test authors writing Unit
Tests which are actually System Tests.&lt;/p&gt;
&lt;p&gt;Those two testing talks were my favorites, but some other good ones that are
worth checking out are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=TmuEDxX1FDQ"&gt;Certainty in an Uncertain World: Gaining Confidence through Security Testing&lt;/a&gt; - Geremy Condra&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=hvPYuqzTPIk"&gt;Fake It Til You Make It: Unit Testing Patterns With Mocks and Fakes&lt;/a&gt; - Brian K. Jones&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1VZfL9JVgFg"&gt;Speedily Practical Large-Scale Tests&lt;/a&gt; - Erik Rose&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Xu5EhKVZdV8"&gt;Stop Mocking, Start Testing&lt;/a&gt; - Augie Fackler &amp;amp; Nathaniel Manista&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9LVqBQcFmyw"&gt;pytest - rapid and simple testing with Python&lt;/a&gt; - Holger Krekel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Besides these videos another great resource to take your Python testing a bit
farther is this book, the &lt;a href="http://amzn.to/LUe8SX"&gt;Python Testing Cookbook &lt;/a&gt;. It
has plenty of great strategys that you can use for testing your Python projects.&lt;/p&gt;
&lt;p&gt;If you have any other good Django testing tips or Talks leave them in the comments.
If you are looking for more Python news, tips and discussion you should check out
&lt;a href="http://pycoders.com"&gt;Pycoders Weekly&lt;/a&gt;, a weekly Python newsletter that I curate.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Be Pythonic: __init__.py</title><link href="http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html" rel="alternate"></link><updated>2012-05-16T23:25:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-05-16:blog/2012/05/be-pythonic-__init__py.html</id><summary type="html">&lt;p&gt;This is hopefully the first in a series of posts about writing Pythonic code and
explaining some common Python idioms.&lt;/p&gt;
&lt;p&gt;So the first thing I am going to address in this series of posts is &lt;code&gt;__init__.py&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;What is &lt;code&gt;__init__.py&lt;/code&gt; used for?&lt;/h2&gt;
&lt;p&gt;The primary use of &lt;code&gt;__init__.py&lt;/code&gt; is to initialize Python packages. The easiest
way to demonstrate this is to take a look at the structure of a standard Python
module.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;package&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
    &lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
    &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
    &lt;span class="n"&gt;file2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
    &lt;span class="n"&gt;file3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
    &lt;span class="n"&gt;subpackage&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
        &lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
        &lt;span class="n"&gt;submodule1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
        &lt;span class="n"&gt;submodule2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;As you can see in the structure above the inclusion of the &lt;code&gt;__init__.py&lt;/code&gt; file in
a directory indicates to the Python interpreter that the directory should be
treated like a Python package&lt;/p&gt;
&lt;h2&gt;What goes in &lt;code&gt;__init__.py&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;__init__.py&lt;/code&gt; can be an empty file but it is often used to perform setup needed
for the package(import things, load things into path, etc).&lt;/p&gt;
&lt;p&gt;One common thing to do in your &lt;code&gt;__init__.py&lt;/code&gt; is to import selected Classes, functions,
etc into the package level so they can be convieniently imported from the package.&lt;/p&gt;
&lt;p&gt;In our example above we can say that file.py has the Class File. So without
anything in our &lt;code&gt;__init__.py&lt;/code&gt; you would import with this syntax:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;package.file&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;However you can import File into your &lt;code&gt;__init__.py&lt;/code&gt; to make it available at the
package level:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;# in your __init__.py&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;file&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;

&lt;span class="c"&gt;# now import File from package&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;package&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Another thing to do is at the package level make subpackages/modules available
with the &lt;code&gt;__all__&lt;/code&gt; variable. When the interpeter sees an &lt;code&gt;__all__&lt;/code&gt; variable defined
in an &lt;code&gt;__init__.py&lt;/code&gt; it imports the modules listed in the &lt;code&gt;__all__&lt;/code&gt; variable when you do:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;package&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;__all__&lt;/code&gt; is a list containing the names of modules that you want to be imported
with import * so looking at our above example again if we wanted to import the
submodules in subpackage the &lt;code&gt;__all__&lt;/code&gt; variable in &lt;code&gt;subpackage/__init__.py&lt;/code&gt; would be:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;__all__&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;submodule1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;submodule2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;With the &lt;code&gt;__all__&lt;/code&gt; variable populated like that, when you perform&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;subpackage&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;it would import submodule1 and submodule2.&lt;/p&gt;
&lt;p&gt;As you can see &lt;code&gt;__init__.py&lt;/code&gt; can be very useful besides its primary function of
indicating that a directory is a module. If you have any comments or questions,
hit up the comments or contact me on &lt;a href="http://twitter.com/mgrouchy"&gt;twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are looking for more Python news, tips and discussion you should check out
&lt;a href="http://pycoders.com"&gt;Pycoder's Weekly&lt;/a&gt; a weekly Python newsletter that I curate.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Compile Vim with Python support on OSX with Homebrew</title><link href="http://mikegrouchy.com/blog/2012/05/compile-vim-with-python-support-on-osx-with-homebrew.html" rel="alternate"></link><updated>2012-05-09T10:17:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-05-09:blog/2012/05/compile-vim-with-python-support-on-osx-with-homebrew.html</id><summary type="html">&lt;p&gt;&lt;a href="http://twitter.com/myusuf3"&gt;Mahdi&lt;/a&gt; asked me today how I compiled Vim with +Python
on OSX and I couldn't remember the exact commands, so I am writing this blog post
so I will remember in the future and because someone else might find this useful.&lt;/p&gt;
&lt;p&gt;Compiling Vim with +Python or +Ruby is required if you want to run any plugins
that have peices that are written in those languages. The usual way around this
on OSX is to just install &lt;a href="https://github.com/b4winckler/macvim"&gt;MacVim&lt;/a&gt; and use
that. However, if you really want to use terminal Vim, you are out of luck on OSX.&lt;/p&gt;
&lt;p&gt;So this is where &lt;a href="http://mxcl.github.com/homebrew/"&gt;Homebrew&lt;/a&gt; comes in, we can use Homebrew to compile vim from a custom
formula. The only requirements to do this are &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; and Homebrew.&lt;/p&gt;
&lt;p&gt;You can install Mercurial by using either easy_install or pip:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#install mercurial&lt;/span&gt;
sudo easy_install mercurial
&lt;span class="c"&gt;#or&lt;/span&gt;
sudo pip install mercurial
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;You can follow the directions on the &lt;a href="https://github.com/mxcl/homebrew/wiki/installation"&gt;Homebrew Github Wiki&lt;/a&gt; to install homebrew.&lt;/p&gt;
&lt;p&gt;Now you can Install this Homebrew formula which has been modified slightly to my tastes
to install Vim.&lt;/p&gt;
&lt;script src="https://gist.github.com/2051422.js?file=vim.rb"&gt;&lt;/script&gt;

&lt;p&gt;To install this formula you can just use this command, or fork the Gist and modify
the formula as you see fit(that's what I did) to install your flavor of Vim.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;brew install https://raw.github.com/gist/2051422/0cfce544a4ab86318221c4d7213306a7b7ec7b3d/vim.rb
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;By default the Vim compiled with this script is compiled with +python and +ruby,
if you want support for other interpreters you can pass those parameters to the script with:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;--enable-interp&lt;span class="o"&gt;=&lt;/span&gt;NAME,...&lt;span class="s2"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;lua, mzscheme, perl, python, python3, tcl and/or ruby&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;You can also specify vim be compiled with features(the scripts, default is normal)
To see what the features do, you can see this &lt;a href="http://www.drchip.org/astronaut/vim/vimfeat.html"&gt;rather ugly table&lt;/a&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;--with-features&lt;span class="o"&gt;=&lt;/span&gt;TYPE&lt;span class="s2"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;tiny, small, normal, big or huge&lt;span class="err"&gt;&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now that you have vim installed with your interpreters and features compiled,
go ahead and check the version:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;vim --version
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and you should see that it is the updated version.&lt;/p&gt;
&lt;p&gt;If you don't see that it is the updated version, it means your /usr/local/bin isn't
on your path, or if it is on your path it comes after usr/bin.&lt;/p&gt;
&lt;p&gt;So how do you fix this?&lt;/p&gt;
&lt;h2&gt;Option 1: Update your path:&lt;/h2&gt;
&lt;p&gt;In your .zshrc (&lt;a href="http://mikegrouchy.com/blog/zsh-is-your-friend.html"&gt;you are using Zsh right?&lt;/a&gt;) or .bashrc
update your path.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#this&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin:/usr/sbin
&lt;span class="c"&gt;#to this&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Option 2: Move your old Vim and symlink the new one&lt;/h2&gt;
&lt;p&gt;You can move the Vim that comes with OSX and Symlink the one brew installed&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;sudo mv /usr/bin/vim /usr/bin/oldvim
ln -s /usr/local/bin/vim /usr/bin/vim
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;One of those should solve your problem.&lt;/p&gt;
&lt;h2&gt;Protip:&lt;/h2&gt;
&lt;p&gt;You may notice that your terminal Vim does not support backspace in Insert mode
with the settings I have setup in the brew formula.&lt;/p&gt;
&lt;p&gt;If this is something you want, you can stick this line in your .vimrc:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="n"&gt;backspace&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;eol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I think that should be it. If you have any questions leave it in the comments or
ask me on &lt;a href="http://twitter.com/mgrouchy"&gt;twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Edit: Discussion on &lt;a href="http://news.ycombinator.com/item?id=3949774"&gt;Hacker News&lt;/a&gt;&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Introducing Pycoders Weekly</title><link href="http://mikegrouchy.com/blog/2012/02/introducing-pycoders-weekly.html" rel="alternate"></link><updated>2012-02-06T10:00:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-02-06:blog/2012/02/introducing-pycoders-weekly.html</id><summary type="html">&lt;p&gt;The last couple of weeks &lt;a href="http://mahdiyusuf.com"&gt;Mahdi Yusuf&lt;/a&gt; and I have been talking
about the Python newsletter that we would want to recieve weekly. A curated
collection of the best Python news, articles and projects from around the internet
delivered to your inbox in a beautiful package weekly.&lt;/p&gt;
&lt;p&gt;The result of this talk has been &lt;a href="http://pycoders.com"&gt;Pycoders Weekly&lt;/a&gt;.
The first issue is set to drop on Friday, February 17th, we hope you like it.
&lt;a href="http://pycoders.com"&gt;&lt;img alt="Pycoders
Weekly" src="/static/images/2012/02/pycoders_weekly.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you have created some content or run some project that you think should be
in &lt;a href="http://pycoders.com"&gt;Pycoders Weekly&lt;/a&gt; contact &lt;a href="http://twitter.com/myusuf3"&gt;Mahdi&lt;/a&gt;
or &lt;a href="http://twitter.com/mgrouchy"&gt;me&lt;/a&gt; and let us know.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Zsh is your friend</title><link href="http://mikegrouchy.com/blog/2012/01/zsh-is-your-friend.html" rel="alternate"></link><updated>2012-01-31T11:14:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2012-01-31:blog/2012/01/zsh-is-your-friend.html</id><summary type="html">&lt;p&gt;I don't know if you know this, but ZShell is your friend, you might not know it
yet, but its true. I know what you are thinking , "whats wrong with Bash?",
nothing, except its not Zsh.&lt;/p&gt;
&lt;p&gt;Its not that Bash is a bad guy, I don't want to put him down, but if we
were picking teams, Bash would be last picked in gym class.&lt;/p&gt;
&lt;p&gt;He isn't very versatile and he doesn't do anything particularily great, all in all
he is kind of just a worse Zsh(or Zsh is kind of like a better Bash).&lt;/p&gt;
&lt;p&gt;Zsh is easy to get started with because it looks and acts like bash in a lot of
ways. So if you are familiar with bash don't worry, you can try zsh out without
skipping a beat and you still end up with a better shell.&lt;/p&gt;
&lt;h3&gt;Why is Zsh better than Bash?&lt;/h3&gt;
&lt;p&gt;In my mind one of the most important reasons why Zsh is better than bash is
autocompletion, and I don't mean that whimpy autocompletion you get by installing
bash completion. I mean, this is real deal command completion, besides getting all
the completion of common commands on the command line, and being ridiculously
fast, the completion also gives you a keyboard navigable completion list.&lt;/p&gt;
&lt;p&gt;&lt;img alt="zshcompletion" src="/static/images/2012/01/zshcompletion.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Okay, I know what you are saying, big deal right? Well how about really great built
in autocompletion for common commands. Lets use Kill as an example. You type&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;Kill&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;in bash, you get what, the list of all files that are in your current
working directory. Not very helpful behavior in my opinion. What happens if you
type&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;kill&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tab&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;in Zsh? This:&lt;/p&gt;
&lt;p&gt;&lt;img alt="zshkillcompletion" src="/static/images/2012/01/zshkillcompletion.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Lists of all your processes with pids? Yes please.&lt;/p&gt;
&lt;p&gt;Another thing that make makes Zsh stand out is shared history. If you are anything
like me you live in the terminal all day long. There is nothing worse(I'm exaggerating)
than opening another terminal in a tab and navigating your history looking for
that recent thing you just did in another window and have it not be in your
history. In Zsh this isn't an issue.&lt;/p&gt;
&lt;h3&gt;Time for more awesome&lt;/h3&gt;
&lt;p&gt;Okay, so we have great, fast autocompletion and shared history. How much more awesome
could there be? Lots!&lt;/p&gt;
&lt;p&gt;Autocorrect is pretty cool&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;mikegrouchyv2&lt;/span&gt; &lt;span class="p"&gt;::(&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; » &lt;span class="n"&gt;gut&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;
&lt;span class="n"&gt;zsh&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;correct&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;gut&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;git&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nyae&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;?&lt;span class="n"&gt;y&lt;/span&gt;
&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Hey thats pretty cool, autocorrect for known commands. What would I do
without you(besides type the command again)?&lt;/p&gt;
&lt;p&gt;Even cooler than autocorrect, for the super nerd(like me) Vi and emacs mode,
&lt;strong&gt;shit yeah&lt;/strong&gt;, you can have your favorite editor on your command line. It will
support common movement commands and editing modes, like command and insert mode
for Vi.&lt;/p&gt;
&lt;p&gt;Last but certianly not least, Zsh has &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;oh-my-zsh&lt;/a&gt;
from the website:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A community-driven framework for managing your zsh configuration. Includes 40+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), over 80 terminal themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I know one exists for bash, but I find oh-my-zsh to be excellent, it autoupdates,
has great plugins and a very active community behind it.&lt;/p&gt;
&lt;p&gt;All in all, Zsh is pretty great, so if you haven't tried Zsh, maybe its time you
try it out. If so &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;oh-my-zsh&lt;/a&gt; is a
pretty great place to start.&lt;/p&gt;
&lt;p&gt;Also releated reading, a book that was reccomended to me with a lot of great
Zsh tips as well as Bash tips for those who I haven't convinced yet is &lt;a href="http://amzn.to/KkPrDo"&gt;Bash to Z Shell: Conquering the Command Line&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are already drinking the Kool-aid and have some Zsh tips to share, either
leave a comment or hit me up on &lt;a href="http://twitter.com/mgrouchy"&gt;twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: If you are interested in learning more about Zsh, check out the &lt;a href="http://zsh.sourceforge.net/FAQ/"&gt;Zsh FAQ&lt;/a&gt;.
Its pretty complete and much better than I could do in a very basic blog post.&lt;/p&gt;
&lt;p&gt;Also, &lt;a href="http://news.ycombinator.com/item?id=3533895"&gt;More discussion on Hacker News&lt;/a&gt;&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Setting up SSL with Nginx and Godaddy</title><link href="http://mikegrouchy.com/blog/2010/12/setting-up-ssl-with-nginx-and-godaddy.html" rel="alternate"></link><updated>2010-12-14T18:07:00-05:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2010-12-14:blog/2010/12/setting-up-ssl-with-nginx-and-godaddy.html</id><summary type="html">&lt;p&gt;I was at a local coffee company the other day and &lt;a href="http://twitter.com/jlgosse"&gt;Josh&lt;/a&gt;
and I were talking about some annoyances when dealing with godaddys SSL certificates.
 Talking to him about this reminded me that I had this post in the pipe for a long
 time and gave me the motivation to finish this.&lt;/p&gt;
&lt;p&gt;On Many browsers, if you set up a standard Godaddy SSL Certificate out of the box,
 you will get ssl errors in many browsers saying that they can't recognize your
 certificate authority, this is generally not a good thing the whole point of installing
 SSL is for security and establishing trust iwith your customers, clients and website
 visitors.&lt;/p&gt;
&lt;p&gt;To start the process of getting set up with an SSL certificate from godaddy just go
 and purchase one. You can pick anyone you like, but in general for most things you
 can get away with just purchasing the cheapest one, I think its around 21$/yr.&lt;/p&gt;
&lt;p&gt;After you purchase your certificate, open up a terminal and log onto your server.
 You first need to create a key and certificate request for your domain.
&lt;script src="http://gist.github.com/524908.js?file=gistfile1.sh"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;Just fill out the requested information and you should be good to go. You then log
 into your godaddy account and provide godaddy with the certificate request and they
 will generate the certificate for you. With the cheaper certificate this process usually
 takes minutes. For the more expensive certificte the process takes considerably longer.&lt;/p&gt;
&lt;p&gt;After you recieve your certificates from godaddy, you need to put your certificates
 on your server and then you just add these lines to the approprate section of your
 configs depending on your webserver.&lt;/p&gt;
&lt;p&gt;For nginx:
&lt;script src="http://gist.github.com/524908.js?file=gistfile2.sh"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;For apache:
&lt;script src="http://gist.github.com/524908.js?file=gistfile3.sh"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;If you have any questions, either leave something in the comments, or you can catch me &lt;a href="http://twitter.com/mgrouchy"&gt;here on twitter&lt;/a&gt;.&lt;/p&gt;</summary><category term=""></category></entry><entry><title>SICP in Epub Format</title><link href="http://mikegrouchy.com/blog/2010/07/sicp-in-epub-format.html" rel="alternate"></link><updated>2010-07-05T20:14:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2010-07-05:blog/2010/07/sicp-in-epub-format.html</id><summary type="html">&lt;p&gt;Awhile ago, I ran across a list of programming/algorithm/computer
science book reccomendations and on that list was &lt;a href="http://mitpress.mit.edu/sicp/"&gt;Structure and Interpretation
of Computer Programs(SICP)&lt;/a&gt;. Ever since then it and a few other books have been
on the top of my &lt;strong&gt;must&lt;/strong&gt; read list.&lt;/p&gt;
&lt;p&gt;I have been interested in learning lisp for quite awhile, I think its probably the
 &lt;a href="http://news.ycombinator.com"&gt;Hacker News&lt;/a&gt; influence, lisp is often talked
 about there as Hacker News is written in a dialect of lisp authored by
 &lt;a href="http://paulgraham.com"&gt;Paul Graham&lt;/a&gt; and &lt;a href="http://pdos.csail.mit.edu/~rtm/"&gt;Robert Morris&lt;/a&gt;
 called &lt;a href="http://arclanguage.org"&gt;Arc&lt;/a&gt;. So while in SICP the dialect of
 lisp is not Arc but Scheme, from its description and reviews I have read, SICP seems
 like it would be a great way to get started programming in lisp.&lt;/p&gt;
&lt;p&gt;Why learn lisp you say? Certianly not to actually program in it professionally, I
 actually don't know anyone who programs in lisp for their job(Thats not to say there
 aren't lisp jobs out there). The reason to learn lisp is that by all accounts learning
 lisp is a transformative experience. I have consistently read and have had one of my
 very good friends tell me that learning to write lisp changes the way you think about
 programming and writing software. If nothing else that should make it worth the
 time and effort to learn.&lt;/p&gt;
&lt;p&gt;So back to SICP. I have been meaning to pick up a copy and start reading it for awhile
 but I had never got around to it. There is a web version but like a lot of people,
 I have a hard time reading from my computer screen, not because it hurts my eyes or
 anything like that, I think its just a matter of focus. There are so many things external
 to the book when you are reading it while sitting at your computer that it becomes tempting
 to multitask while reading. So today I was very excited to learn that &lt;a href="http://twitter.com/ieure"&gt;Ian Eure&lt;/a&gt;
 created an epub copy of the book and its available on &lt;a href="http://github.com/ieure/sicp"&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a perfect format for me, I can now load it onto my iphone(on stanza or ibooks)
 and read away while I spend my ~1.5 hours/day commuting on the bus back and forth to work.
 I usually try to get books in PDF form and just read them out of &lt;a href="https://www.dropbox.com/referrals/NTE5Nzg0MTU5"&gt;dropbox&lt;/a&gt;,
 which is a good experience, but I would definately prefer epub as its easier to read.
 All in all this is a pretty big win for me and its certianly a great motivator to
 get me started reading SICP and learning Scheme.&lt;/p&gt;
&lt;p&gt;Are there any books like SICP that you would reccomend? I'd love to get some suggestions,
 just leave a note in the comments!&lt;/p&gt;</summary><category term=""></category></entry><entry><title>My Development Toolbox: An Introduction</title><link href="http://mikegrouchy.com/blog/2010/07/my-development-toolbox-an-introduction.html" rel="alternate"></link><updated>2010-07-04T18:14:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2010-07-04:blog/2010/07/my-development-toolbox-an-introduction.html</id><summary type="html">&lt;p&gt;Lately I have seen a bunch of posts where bloggers, developers, etc. talk about their
 current development environments and hardware. I really enjoy these posts because
 its always nice to see what tools other developers are using, so I thought I would
 chip in with a few blog posts of my own. In a couple of "My Toolbox" posts, I will
 talk about the hardware and software I use to do my work as Software Developer(currently
 doing mostly Python/Django work at &lt;a href="http://swixhq.com"&gt;SWIX&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All in all the hardware I use in the office is pretty basic. I currently use a
 &lt;strong&gt;13.3-Inch MacBook Pro&lt;/strong&gt;, a pretty standard &lt;strong&gt;Dell 22-inch monitor&lt;/strong&gt;,
 standard &lt;strong&gt;Apple keyboard&lt;/strong&gt; and the amazing &lt;strong&gt;Apple Magic Mouse&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nothing fancy going on there, pretty standard hardware configuration and generally
 what everyone in the office currently uses as we all tend to work both in the office
 and from home from time to time. This hardware is essentially the perfect setup for
 the work that I do. Generally the apps that I use are pretty light and I find the
 13.3 inch Macbook Pro to be pretty zippy. Probably the only thing that would be a
 good upgrade would be from the 22-24 inch monitor to maybe 2-22 inch monitors.&lt;/p&gt;
&lt;p&gt;What does your setup look like? What kind of hardware do you use?&lt;/p&gt;</summary><category term=""></category></entry><entry><title>Embeddable Tweets</title><link href="http://mikegrouchy.com/blog/2010/05/embeddable-tweets.html" rel="alternate"></link><updated>2010-05-05T02:14:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2010-05-05:blog/2010/05/embeddable-tweets.html</id><summary type="html">&lt;p&gt;Twitter now allows you to Embed a Tweet, all you need is the url of a tweet, like
&lt;a href="http://twitter.com/mgrouchy/status/13429079254"&gt;http://twitter.com/mgrouchy/status/13429079254&lt;/a&gt;,
and you can use Twitters [Blackbird Pie](http://media.twitter.com/blackbird-pie/
app to embed the tweet in your website like below:&lt;/p&gt;
&lt;!-- http://twitter.com/mgrouchy/status/13429079254 --&gt;

&lt;p&gt;&lt;style type='text/css'&gt;.bbpBox{background:url(http://s.twimg.com/a/1271891196/images/themes/theme15/bg.png) #022330;padding:20px;}p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px}p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6}p.bbpTweet span.metadata span.author{line-height:19px}p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px}p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}&lt;/style&gt; &lt;div class='bbpBox'&gt;&lt;p class='bbpTweet'&gt;This is me tweeting about how you can embed tweets, is this embedded?&lt;span class='timestamp'&gt;&lt;a title='Wed May 05 14:23:55 +0000 2010' href='http://twitter.com/mgrouchy/status/13429079254'&gt;less than a minute ago&lt;/a&gt; via &lt;a href="http://www.tweetdeck.com" rel="nofollow"&gt;TweetDeck&lt;/a&gt;&lt;/span&gt;&lt;span class='metadata'&gt;&lt;span class='author'&gt;&lt;a href='http://twitter.com/mgrouchy'&gt;&lt;img src='http://a3.twimg.com/profile_images/817183015/swix-hipster_normal.JPG' /&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href='http://twitter.com/mgrouchy'&gt;Mike Grouchy&lt;/a&gt;&lt;/strong&gt;&lt;br/&gt;mgrouchy&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;!-- end of tweet --&gt;&lt;/p&gt;
&lt;p&gt;Here is the Source:&lt;/p&gt;
&lt;script src="http://gist.github.com/390841.js"&gt;&lt;/script&gt;

&lt;p&gt;Its kind of interesting, Blackbird Pie just generates a html/css snippet that you
 can embed in your page. I am not sure if I prefer this way of doing things or the
 way &lt;a href="http://github.com"&gt;github&lt;/a&gt; does it with cross site javascript.&lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;</summary><category term=""></category></entry><entry><title>A New Blog A New Beginning</title><link href="http://mikegrouchy.com/blog/2010/04/a-new-blog-a-new-beginning.html" rel="alternate"></link><updated>2010-04-30T00:00:00-04:00</updated><author><name>Mike Grouchy</name></author><id>tag:mikegrouchy.com,2010-04-30:blog/2010/04/a-new-blog-a-new-beginning.html</id><summary type="html">&lt;p&gt;So as you can tell this all looks a bit different. This blog that you are currently
reading is &lt;strong&gt;completely static&lt;/strong&gt;. All of this post content is actually written in
&lt;a href="http://daringfireball.net/projects/markdown/"&gt;markdown&lt;/a&gt; and then generated as static html by
&lt;a href="http://hyde.github.com/"&gt;Hyde&lt;/a&gt;. As you can tell some of the css is off and
this blog isn't overly full featured. I'm considering this a work in process and
a little project to import my css skills as well as a fun little thing I can work
on, on the side.  I will probably write a post about how to get started with hyde
for people interested in trying it out.&lt;/p&gt;
&lt;p&gt;I decided that with this new blog its a completely fresh start, I haven't carried
over any of the old posts from my old blog and I could care less about the google
juice I am losing because of that. In this new incarnation of the blog, I'm hoping
I will post a little more consistently as well as bring a tighter focus. I have
had &lt;a href="http://mikegrouchy.com"&gt;mikegrouchy.com&lt;/a&gt; for 6 years and it has
been a blog that entire time, but there hasn't been a lot of great content. I plan
on bringing back some of my old tutorial posts that people used ,
but probably update them a bit which hopefully will be an improvement.&lt;/p&gt;</summary><category term=""></category></entry></feed>