<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Log</title>
	<atom:link href="http://matthowell.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://matthowell.com/blog</link>
	<description>A journal.</description>
	<lastBuildDate>Mon, 06 Feb 2012 18:58:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Unmannered</title>
		<link>http://matthowell.com/blog/2012/02/06/unmannered/</link>
		<comments>http://matthowell.com/blog/2012/02/06/unmannered/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 18:52:23 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Back to School]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=545</guid>
		<description><![CDATA[Oddly, one of the most frustrating aspects of going back to school is something of a divide: those with manners vs the mannerless. Having good manners is really just about one thing: being mindful of the fact that you live in a society.  You don&#8217;t just barrel through our common space as if you&#8217;re the ]]></description>
			<content:encoded><![CDATA[<p>Oddly, one of the most frustrating aspects of going back to school is something of a divide: those with manners vs the mannerless.</p>
<p>Having good manners is really just about one thing: being mindful of the fact that you live in a society.  You don&#8217;t just barrel through our common space as if you&#8217;re the only person who matters; you hold open doors, you smile, you help each other out.  You chew with your mouth closed so no one else has to see or hear you eat; you keep quiet in the library and in the classroom so you don&#8217;t disturb the other people who are also trying to get work done; you pay attention to what&#8217;s going on around you and you don&#8217;t get in other people&#8217;s way.</p>
<p>The mannerless kids are rude, self-absorbed and oblivious to their surroundings.  Their numbers seem to be growing, and it&#8217;s taking a toll.</p>
<p>I don&#8217;t have a single class that isn&#8217;t accompanied by a constant din of murmuring.  Sometimes it&#8217;s fine; it&#8217;s an occasional, brief whisper &#8212; but most of the time, it&#8217;s several pockets of kids who are just showing up to class, not paying attention, and just talking to each other throughout.  I really don&#8217;t get it.  These are mid-level Engineering classes, and none of them is easy.  Either they&#8217;re so smart that they don&#8217;t need to sit in on lecture (in which case, why come at all?) or they&#8217;re idiots who don&#8217;t have any interest in paying attention anyway (then, again, why come at all?)</p>
<p>I believe that people should be free to do as they choose (as misguided as many people&#8217;s decisions are).  But that comes with one great caveat: you don&#8217;t have the right to drag others down with you.  When you talk during class, you&#8217;re polluting the space with your irrelevant, distracting conversation.  You make it harder for everyone else to hear what&#8217;s going on.  You make it just a little bit harder for everyone else to understand.</p>
<p>It&#8217;s not unusual for some of these guys to talk more or less non-stop throughout an entire class.  But last Friday was a new one for me.  As my Materials professor began her lecture, I heard the guy sitting behind me in his usual low-but-not-low-enough voice:</p>
<p>&#8220;Yeah&#8230; uh-huh&#8230; yeah.  Yeah, I think that works&#8230; Yeah.  Well I don&#8217;t know if I&#8217;m going to be able to make it if we do it Wednesday.  Okay.&#8221;  It wasn&#8217;t obvious which of  his friends he was talking to.  I turned around.  He was talking on his cell phone.</p>
<p>Guy, if there&#8217;s something so important that you can&#8217;t wait 50 minutes to discuss it, <em>go outside</em>.</p>
<p>Today that same row of kids spent the entire class talking throughout.  And to add to it, they rustled and crunched their way through a box of Froot Loops that they were passing around.</p>
<p>When I left that same class today, two guys were standing in the hallway, shoulder to shoulder, separated by about a foot, talking to each other (but facing the same way), positioned exactly in the middle of the hall so that you just couldn&#8217;t pass.  As I got closer to them, they didn&#8217;t slide over or step aside; they didn&#8217;t adjust.  They just stayed standing right there, looking right at me, but past me, oblivious to the fact that they&#8217;ve made themselves a roadblock.  Clueless, uncouth, unmannered.</p>
<p>This kind of stuff goes on constantly.   It gets under my skin more than anything else.  If it keeps up, I may have to start being That Guy and tell these kids that they&#8217;re being rude.  If the professor does nothing about it in her classroom, who will?  And who could possibly be expected to do it elsewhere?</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2012/02/06/unmannered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Side-stepping the absolute URL requirement in WordPress</title>
		<link>http://matthowell.com/blog/2011/03/04/side-stepping-the-absolute-url-requirement-in-wordpress/</link>
		<comments>http://matthowell.com/blog/2011/03/04/side-stepping-the-absolute-url-requirement-in-wordpress/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 01:53:47 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">/blog/?p=482</guid>
		<description><![CDATA[This is a limited use-case, but it&#8217;s one I&#8217;ve just successfully figured out how to deal with. Hope it helps. I have a WordPress codebase that is shared between three domains. The code executes the same on all three domains &#8212; only the domain itself is different. Which, there should be nothing inherently problematic about ]]></description>
			<content:encoded><![CDATA[<p>This is a limited use-case, but it&#8217;s one I&#8217;ve just successfully figured out how to deal with.  Hope it helps.</p>
<p>I have a WordPress codebase that is shared between three domains.  The code executes the same on all three domains &#8212; only the domain itself is different.  Which, there should be nothing inherently problematic about doing this.</p>
<p>Problem is, when you set up your blog&#8217;s settings, WordPress requires that you enter a fully-qualified absolute URL for the blog&#8217;s root directory &#8212; and that URL is inserted throughout every nook and cranny of the app.  For whatever reason, you can&#8217;t supply it a domain-less path, even though it seems like this would be a perfectly reasonable thing to expect.  (I read one explanation that this would be too problematic for many users.)  There are way too many references to this absolute URL to fix by hand, and if it can be avoided, it&#8217;s not generally a good idea to go monkeying around in the guts of the app to try to change its behavior.  Maintenance becomes a lot more hands-on.  Upgrading can easily become a migraine.</p>
<p>So: database hacks to the rescue.</p>
<p>You <em>can</em> actually force WordPress to use a domain-less root path, by altering two settings directly in the database.  In the <code>wp_options</code> table, change the <code>siteurl</code> and <code>home</code> values to whatever URL you like.  Like, say, the perfectly reasonable <code>/</code> or <code>/blog</code>.  The only downside is that if you ever try to change anything on the General Settings page from within <code>wp-admin</code>, WordPress will bark at you and give you a couple of error messages.  It&#8217;s okay.  You can ignore them.  <s>Everything else works just fine.</s></p>
<p><strong>Update:</strong> Apparently, everything else does not work just fine. Setting the URL in the database broke Akismet.</p>
<p>Akismet requires the home value in the database options to be the URL associated with your API key.  Unsurprisingly, if it doesn&#8217;t have that URL, the service requests will fail.</p>
<p>WordPress is great and all, but like every other off-the-shelf software package, there are times where if you want to customize it and color outside the lines they&#8217;ve drawn for you, you end up diving down a frustrating rabbit hole.</p>
<p>I&#8217;m sure I&#8217;ll port this bad boy over to <a href="http://djangoproject.com/">Django</a> soon enough. Then: sweet, satisfying, complete control.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2011/03/04/side-stepping-the-absolute-url-requirement-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Version-controlled</title>
		<link>http://matthowell.com/blog/2011/03/04/version-controlled/</link>
		<comments>http://matthowell.com/blog/2011/03/04/version-controlled/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 23:15:47 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[databases]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=480</guid>
		<description><![CDATA[Got my databases under version control. This was the helpful start. I adapted the instructions to create self-contained backup scripts &#8212; one each for mysql and postgres &#8212; which can be called on-demand or nightly in crontab. The scripts get a list of the available databases and iterate through, creating a single dump file for ]]></description>
			<content:encoded><![CDATA[<p>Got my databases under version control.</p>
<p><a href="http://www.viget.com/extend/backup-your-database-in-git/">This was the helpful start</a>.  I adapted the instructions to create self-contained backup scripts &#8212; one each for mysql and postgres &#8212; which can be called on-demand or nightly in crontab.  The scripts get a list of the available databases and iterate through, creating a single dump file for each database.  The contents are then committed to git and then pushed to the remote backup site.</p>
<p>Done.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2011/03/04/version-controlled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrating Jinja2 and Django</title>
		<link>http://matthowell.com/blog/2011/03/02/integrating-jinja2-and-django/</link>
		<comments>http://matthowell.com/blog/2011/03/02/integrating-jinja2-and-django/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 02:02:34 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=478</guid>
		<description><![CDATA[Jinja2 is a real improvement over the standard Django template system. It has a number of useful features that the built-in Django templates just don&#8217;t have &#8212; especially when it comes to basic visual markup logic (elif statements, basic macros). Thankfully, Django is built to be pluggable and modular, and it&#8217;s not terribly difficult to ]]></description>
			<content:encoded><![CDATA[<p><a href="http://jinja.pocoo.org/docs/api/">Jinja2</a> is a real improvement over the standard Django template system.  It has a number of useful features that the built-in Django templates just don&#8217;t have &#8212; especially when it comes to basic visual markup logic (elif statements, basic macros).  Thankfully, Django is built to be pluggable and modular, and it&#8217;s not terribly difficult to get Jinja2 working with it.</p>
<p>When I wrote my first Jinja2-based app a couple of years ago, I did so using a little helper script I cobbled together from various Jinja2/Django-type pioneers, and the result was a workable &#8212; if a little hacky and kludgy &#8212; module that I could reuse in each of my apps.  I import it in my <code>views.py</code>, and it gives me the most basic template-type methods like <code>render_to_response</code> and such.  It&#8217;s limited, but I really haven&#8217;t had need for much else.  (And when I&#8217;ve needed to expand its functionality, I have.)  But it&#8217;s always felt like a temporary fix &#8212; a little incomplete and hackish.  I took a look around recently to see if there were any other solutions that integrated Jinja2 into Django a little more gracefully and completely.</p>
<p>It wasn&#8217;t long before I found <a href="https://github.com/dcramer/coffin">coffin</a> &#8212; a library that&#8217;s more or less a port of Django&#8217;s template functionality, but using Jinja2&#8242;s rendering.  Its real killer feature, IMO, is how easy it is to use Django template tags and filters within coffin &#8212; which is something you might not expect to need, but it&#8217;s very handy to have.  For example, coffin includes a ton of useful tags and filters out of the box &#8212; like the super-useful <code>{% spaceless %}</code>.  And you can easily add others, without having to write a complete port.</p>
<p>Coffin works a lot like my little helper module.  You import it in every page, explicitly.</p>
<p>But I found something that I think is <em>just</em> a tad better: <a href="https://github.com/GaretJax/coffin">this fork of coffin</a>. Its best feature is that it can be plugged in directly to Django&#8217;s native template loading system, so that it is integrated a little more neatly.  All it takes is just a little adjustment to your project&#8217;s settings file:</p>
<blockquote><p><code><br />
TEMPLATE_LOADERS = (<br />
    'coffin.template.loaders.Loader',<br />
)</p>
<p>JINJA2_TEMPLATE_LOADERS = (<br />
    'django.template.loaders.app_directories.Loader',<br />
    'django.template.loaders.filesystem.Loader',<br />
)<br />
</code></p></blockquote>
<p>The coffin template handling is enabled more or less transparently &#8212; using Django&#8217;s syntax while the templates are handled behind the scenes. Thus, in your apps, instead of this:</p>
<blockquote><p><code>from coffin.shortcuts import render_to_response</code></p></blockquote>
<p>You can use the usual Django syntax:</p>
<blockquote><p><code>from django.shortcuts import render_to_response</code></p></blockquote>
<p>Helpfully, this fork also allows you to turn off Jinja2 rendering on an app-by-app basis, with a simple tuple in your settings file.  So it&#8217;s easy to have, say, the <a href="https://github.com/robhudson/django-debug-toolbar">Django debug toolbar</a> running with Django templates alongside your app that uses Jinja2 templates.</p>
<p>I really like this approach, mainly for the reason that enabling Jinja2 can be enabled &#8212; and overridden &#8212; completely from the settings file.</p>
<p>I don&#8217;t have a strong opinion about the pros and cons of these two approaches, but I&#8217;ll be trying out the template-loader fork of coffin to see how well it runs and how easy it is to use.  I&#8217;ll be curious to see if anyone has any input as to whether the template-loader approach has any design concerns that I haven&#8217;t considered.</p>
<p>Meanwhile, give it a shot!  Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2011/03/02/integrating-jinja2-and-django/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pro Tip: Using Fluid for Google Apps mail in OS X</title>
		<link>http://matthowell.com/blog/2010/11/19/pro-tip-using-fluid-for-google-apps-mail-in-os-x/</link>
		<comments>http://matthowell.com/blog/2010/11/19/pro-tip-using-fluid-for-google-apps-mail-in-os-x/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 05:53:55 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=453</guid>
		<description><![CDATA[I just switched to a MacBook Pro (finally), so I&#8217;ve been spending some time porting my usual apps and whatnot over to the new machine. Probably the one immediate disappointment I&#8217;ve encountered is that the Mac version of Chrome can&#8217;t (yet) create application shortcuts, which is a convenience I&#8217;ve grown to depend on. It&#8217;s really ]]></description>
			<content:encoded><![CDATA[<p>I just switched to a MacBook Pro (finally), so I&#8217;ve been spending some time porting my usual apps and whatnot over to the new machine. Probably the one immediate disappointment I&#8217;ve encountered is that the Mac version of <a href="http://www.google.com/chrome">Chrome</a> <a href="http://www.google.com/support/forum/p/Chrome/thread?tid=4d7f71953c36bb7b&#038;hl=en">can&#8217;t (yet) create application shortcuts</a>, which is a convenience I&#8217;ve grown to depend on.  It&#8217;s really quite a clever convenience &#8212; Chrome will take any website and create a desktop-like app out of it, all self-contained in its own tidy little window.  It makes checking my mail and calendar a lot faster and more convenient, and the way I use them, my desktop clutter is cut way down.</p>
<p>So I&#8217;ve had to find an alternative, and the #1 recommendation is an app called <a href="http://fluidapp.com/">Fluid</a>.  It&#8217;s essentially a single-minded utility dedicated to creating these self-contained web apps, and it&#8217;s not bad.</p>
<p>Unfortunately, I encountered some problems after creating the app for my Google Apps mail account.  When I launched the new app, three new browser windows would open in addition to the main app window.  Not desirable, and I had no desire to go on a deep troubleshooting expedition.</p>
<p>I figured that Fluid was somehow misinterpreting something in the Google Apps startup code, leading it to think that it needed to open up several new windows.  The big clue was that all of the windows were pointed to some version of mail.google.com &#8212; not my domain.  Apparently, when Fluid parses URLs from a different domain, its default behavior is to spawn new browser windows.  Obviously, the discrepancy between my mail domain and gmail was causing the problem.  After spending a couple of minutes looking through the settings, I discovered a helpful workaround that stops this behavior.</p>
<p>Within the app for your Google Apps mail account, go to Preferences > Advanced.  Then under &#8220;Allow browsing to URLs matching these patterns&#8221;, add &#8220;*mail.google.com*&#8221; to the list.  This tells Fluid that mail.google.com should be considered part of the app &#8212; and that it shouldn&#8217;t open new browser windows when it loads URLs from those addresses.  Now it works fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2010/11/19/pro-tip-using-fluid-for-google-apps-mail-in-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://matthowell.com/blog/2010/10/16/336/</link>
		<comments>http://matthowell.com/blog/2010/10/16/336/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 03:33:59 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=336</guid>
		<description><![CDATA[The ultimate result of shielding man from the effects of folly is to people the world with fools. &#8211; Herbert Spencer]]></description>
			<content:encoded><![CDATA[<blockquote><p>The ultimate result of shielding man from the effects of folly is to people the world with fools.</p></blockquote>
<p>&#8211; Herbert Spencer</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2010/10/16/336/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>http://matthowell.com/blog/2010/10/14/345/</link>
		<comments>http://matthowell.com/blog/2010/10/14/345/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 16:12:31 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=345</guid>
		<description><![CDATA[These ever-expanding enforcement powers miss the point: The threat posed by drunk driving comes not from drinking per se but from the impairment drinking can cause. [...] If our ultimate goals are to reduce driver impairment and maximize highway safety, we should be punishing reckless driving. It shouldn&#8217;t matter if it&#8217;s caused by alcohol, sleep ]]></description>
			<content:encoded><![CDATA[<blockquote><p>These ever-expanding enforcement powers miss the point: The threat posed by drunk driving comes not from drinking per se but from the impairment drinking can cause. [...]</p>
<p>If our ultimate goals are to reduce driver impairment and maximize highway safety, we should be punishing reckless driving. It shouldn&#8217;t matter if it&#8217;s caused by alcohol, sleep deprivation, prescription medication, text messaging, or road rage.</p></blockquote>
<p>&#8211; <a href="http://reason.com/archives/2010/10/11/abolish-drunk-driving-laws">Radley Balko</a></p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2010/10/14/345/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It is the working man who is the happy man</title>
		<link>http://matthowell.com/blog/2010/10/14/it-is-the-working-man-who-is-the-happy-man/</link>
		<comments>http://matthowell.com/blog/2010/10/14/it-is-the-working-man-who-is-the-happy-man/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 06:30:55 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=339</guid>
		<description><![CDATA[It is the working man who is the happy man. Man was made to be active, and he is never so happy as when he is so. It is the idle man who is the miserable man. &#8211; David Alfred Doudney, Old Jonathan, or the Parish Helper (though often misattributed to Benjamin Franklin)]]></description>
			<content:encoded><![CDATA[<blockquote><p>It is the working man who is the happy man. Man was made to be active, and he is never so happy as when he is so. It is the idle man who is the miserable man.</p></blockquote>
<p>&#8211; David Alfred Doudney, <i>Old Jonathan, or the Parish Helper</i> (though often misattributed to Benjamin Franklin)</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2010/10/14/it-is-the-working-man-who-is-the-happy-man/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Q: How does one eat an elephant?</title>
		<link>http://matthowell.com/blog/2010/10/07/q-how-does-one-eat-an-elephant/</link>
		<comments>http://matthowell.com/blog/2010/10/07/q-how-does-one-eat-an-elephant/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 05:10:16 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=333</guid>
		<description><![CDATA[A: One bite at a time]]></description>
			<content:encoded><![CDATA[<p>A: One bite at a time.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2010/10/07/q-how-does-one-eat-an-elephant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting things done</title>
		<link>http://matthowell.com/blog/2010/10/05/getting-things-done/</link>
		<comments>http://matthowell.com/blog/2010/10/05/getting-things-done/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 02:47:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://matthowell.com/blog/?p=331</guid>
		<description><![CDATA[Changing the status quo]]></description>
			<content:encoded><![CDATA[<p>Changing the status quo.</p>
]]></content:encoded>
			<wfw:commentRss>http://matthowell.com/blog/2010/10/05/getting-things-done/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

