<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Brool</title>
    <link>https://www.brool.com/index.xml</link>
    <description>Recent content on Brool</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 25 Oct 2018 14:28:00 +0000</lastBuildDate>
    <atom:link href="https://www.brool.com/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Cranky Parrots Singing Star Wars Tunes</title>
      <link>https://www.brool.com/post/cranky-parrots-singing-star-wars/</link>
      <pubDate>Thu, 25 Oct 2018 14:28:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/cranky-parrots-singing-star-wars/</guid>
      <description>This post is a message (and a message within a message, but ignore that for now).
But, the overt message is this: this is not a cuddly creature.
Cats domesticated us, so they tend to be less demanding, and dogs had the fortune or foresight of evolving beside our progenitors, so they are uniquely tuned to us (and vice versa &amp;ndash; there is even some conjecture that dogs domesticated us instead of the other way around).</description>
    </item>
    
    <item>
      <title>Quick And Dirty Shared Custom Maps</title>
      <link>https://www.brool.com/post/quick-and-dirty-shared-custom-maps/</link>
      <pubDate>Tue, 28 Aug 2018 23:30:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/quick-and-dirty-shared-custom-maps/</guid>
      <description>A bunch of my friends (about 15 people in all) have gotten together to participate in a Western Marches style campaign using the World of Dungeons system. (More thoughts on that below). Anyway, I thought that it would be really handy to have a shared map that everyone could annotate, since we are all collectively exploring the map and sharing information.
After a wrong turn with the Google Maps API (hit quota limit within five minutes of playing around, oddly, and splitting the tiles was surprisingly painful) I discovered the Leaflet.</description>
    </item>
    
    <item>
      <title>Loading A Remote Emacs Configuration</title>
      <link>https://www.brool.com/post/loading-a-remote-emacs-configuration/</link>
      <pubDate>Fri, 02 Feb 2018 23:25:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/loading-a-remote-emacs-configuration/</guid>
      <description>You&amp;rsquo;re working on a coworker&amp;rsquo;s / friend&amp;rsquo;s computer, and they have only an uninitialized Emacs&amp;hellip; none of the keys are right.
Or, worse, they have set up their Emacs and customized it, but they didn&amp;rsquo;t have the good sense to copy your configuration, so everything is strange and insane, with bindings only Cthulhu could love, with a theme that looks like some horrible fruit salad that was made by someone who decided that the number of colors determined the worth of a dish.</description>
    </item>
    
    <item>
      <title>Debugging UWSGI and Flask</title>
      <link>https://www.brool.com/post/debugging-uwsgi/</link>
      <pubDate>Tue, 26 Dec 2017 02:01:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/debugging-uwsgi/</guid>
      <description>Quick notes on UWSGI debugging, because I keep forgetting.
Debugging FLASK_DEBUG does not work for UWSGI apps. You&amp;rsquo;ll need the following code in your Flask app, courtesy StackOverflow:
from werkzeug.debug import DebuggedApplication app.wsgi_app = DebuggedApplication(app.wsgi_app, True)  To activate it, it&amp;rsquo;s probably easiest to pass an environment variable. For example, in your UWSGI configuration:
env=APP_DEBUG=1  and then in the app:
if &#39;APP_DEBUG&#39; in os.environ: app.debug = True from werkzeug.</description>
    </item>
    
    <item>
      <title>Nanowrimo 2017</title>
      <link>https://www.brool.com/post/nanowrimo-2017/</link>
      <pubDate>Fri, 03 Nov 2017 02:21:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/nanowrimo-2017/</guid>
      <description>Nanowrimo 2017 is upon us!
Yes, it&amp;rsquo;s a little bit on insanity to do it this year &amp;ndash; given the attendant stress and everything else that I have going on &amp;ndash; but, nonetheless, sometimes an idea comes into your imagination and you must follow that idea to the ends of the earth (or, at least, the ends of the month).
The gory details will be elided for the relief of the poor reader, but it&amp;rsquo;s going to be a romantic comedy, which is decidedly not my forte; I mean, I can do the comedy parts okay, with a bit of poking and tuning, but the romance part seems decidedly tricker.</description>
    </item>
    
    <item>
      <title>Macbook Pro Touchbar Ergonomics</title>
      <link>https://www.brool.com/post/macbook-pro-touchbar-ergonomics/</link>
      <pubDate>Sun, 22 Oct 2017 22:36:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/macbook-pro-touchbar-ergonomics/</guid>
      <description>I have to rant.
I got one of the Macbook Pro 15&amp;rdquo; 2016s that were on sale recently at B&amp;amp;H Photo; it was hard to pass up $700 off the standard price for the MBP and my 2013 was a little long in the tooth (plus, I could set it up as a build server!)
So, the machine is fast, the new SSDs are much faster, the screen is nice, the keyboard is&amp;hellip; acceptable (only acceptable &amp;ndash; I hear the 2017s are better), all that, but the touchbar is an unmitigated disaster.</description>
    </item>
    
    <item>
      <title>Rule-Based Interactive Fiction Revisited / IFCOMP 2017</title>
      <link>https://www.brool.com/post/rule-based-revisited/</link>
      <pubDate>Thu, 20 Jul 2017 15:47:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/rule-based-revisited/</guid>
      <description>Follow up, kind of, to this article.
I&amp;rsquo;ve decided to compete in IFCOMP 2017. I&amp;rsquo;ve had an idea for a cool scenario kicking around in the back of my head in forever &amp;ndash; nothing more than a vague idea flitting around in the closets of my mind, but still interesting &amp;ndash; and I decided to finally just bite the bullet and try and get the entry in this year.</description>
    </item>
    
    <item>
      <title>Setting Up Tiddlywiki Behind Nginx</title>
      <link>https://www.brool.com/post/setting-up-tiddlywiki-behind-nginx/</link>
      <pubDate>Fri, 03 Mar 2017 21:15:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/setting-up-tiddlywiki-behind-nginx/</guid>
      <description>I&amp;rsquo;ve been looking at integrating Tiddlywiki into my daily routine.
The latest incarnation of Tiddlywiki can be run in server mode on top of node. (What, you&amp;rsquo;ve never tried Tiddlywiki? It&amp;rsquo;s worth trying just to marvel in its existence &amp;ndash; it&amp;rsquo;s like Emacs and a wiki decided to get together and have a Javascript baby). Anyway, server mode ends up being ideal: since the individual tiddlers are stored in separate text files, it is much easier to track in git and search with Emacs.</description>
    </item>
    
    <item>
      <title>The Pan Galactic Guide to Connectivity</title>
      <link>https://www.brool.com/post/pan-galactic-guide-to-connectivity/</link>
      <pubDate>Wed, 01 Mar 2017 18:47:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/pan-galactic-guide-to-connectivity/</guid>
      <description>&lt;p&gt;Connectivity while traveling is a pain. I&amp;rsquo;m trying to put all the
various tricks and tips for connectivity in one place so I can easily
reference them while on the road. These instructions are for Linux,
because what I&amp;rsquo;m usually bringing on trips is a little Chromebook with
Ubuntu or &lt;a href=&#34;https://galliumos.org/&#34;&gt;GalliumOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Colophon</title>
      <link>https://www.brool.com/page/colophon/</link>
      <pubDate>Wed, 22 Feb 2017 10:40:00 +0000</pubDate>
      
      <guid>https://www.brool.com/page/colophon/</guid>
      <description>MoveableType Blosxom Wordpress custom code Hugo  Trying Hugo out.
I had to pick a commenting system. I had finally decided to just compromise and use Disqus (despite the slow render, hit to SEO, godawfully baroque moderation interface, so on and so forth), but was stopped by their completely buggy and non-informative import. I admit this site may have challenges &amp;ndash; it has gone through umpty-dumpty blog systems and decades of comments &amp;ndash; but even so, Disqus would fail but not tell you why it was failing, which made for a singularly unimpressive experience.</description>
    </item>
    
    <item>
      <title>Ad-hoc Wireless on Chromebooks / Dell CB 13</title>
      <link>https://www.brool.com/post/ad-hoc-on-chromeos/</link>
      <pubDate>Fri, 11 Nov 2016 17:42:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/ad-hoc-on-chromeos/</guid>
      <description>Doing Nanowrimo again, and had given away my Toshiba CB 2 to someone who could use it more than me, so instead picked up a refurbished Dell CB 13 (i3, 4GB, 32GB SSD) on sale from the Dell depot.
What an amazing machine. A beautiful 1920x1080 screen, keyboard that is backlit and has nice tactile feedback, a trackpad that is silky smooth and feels as good as the Mac trackpads, and overall the machine performs really well (Octane about 20k).</description>
    </item>
    
    <item>
      <title>Nanowrimo 2015</title>
      <link>https://www.brool.com/post/nanowrimo-2015/</link>
      <pubDate>Thu, 19 Nov 2015 17:21:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/nanowrimo-2015/</guid>
      <description>Doing Nanowrimo again this year. A friend had challenged me to a Nanowrimo tontine, in which everyone puts in a quantity of money, and everyone who finishes gets to take out of the pot. So, it&amp;rsquo;s like a tontine but hopefully less likely to engender cunning murder plots, and the inherent competition / challenge was enough to get me to sign up.
This is my third time around, and I&amp;rsquo;ve got this to a more-or-less repeatable process, at least for the way I write and my particular strengths.</description>
    </item>
    
    <item>
      <title>Literate Programming</title>
      <link>https://www.brool.com/post/literate-programming/</link>
      <pubDate>Thu, 22 Oct 2015 14:10:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/literate-programming/</guid>
      <description>I&amp;rsquo;ve always been interested in literate programming, perhaps because I both enjoy writing and coding, but in truth I suspect that it is somewhat a mirage; perhaps because it&amp;rsquo;s difficult to write, and difficult to code, and the domains do not necessarily map between each other cleanly, and asking someone to do both of them may be more than is reasonable. This is probably why people that can write well about coding are so beloved; the intersection area in that Venn diagram is not overly spacious.</description>
    </item>
    
    <item>
      <title>Virtualizing an Ubuntu Partition with EFI</title>
      <link>https://www.brool.com/post/virtualizing-an-ubuntu-partition-with-efi/</link>
      <pubDate>Tue, 20 Oct 2015 03:04:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/virtualizing-an-ubuntu-partition-with-efi/</guid>
      <description>I installed Ubuntu on a new latop (UX305LA &amp;ndash; nice laptop, will do a review at some point maybe), and wanted to be able to run the Ubuntu partition both standalone as well as from Windows with VirtualBox.
Didn&amp;rsquo;t find anything that exactly addressed my situation (basically, virtualizing an Ubuntu EFI partition), and after some fiddling ended up getting stuff mostly working. So, to remember what I did, and in the hopes that I can save a few minutes time for someone else&amp;hellip;</description>
    </item>
    
    <item>
      <title>Rule-Based Interactive Fiction</title>
      <link>https://www.brool.com/post/rule-based-interactive-fiction/</link>
      <pubDate>Thu, 15 Oct 2015 09:31:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/rule-based-interactive-fiction/</guid>
      <description>Some really quick notes on interactive fiction and rule based systems.
This is an interesting introduction to rule-based systems. The basic point of contention is that you can get away from object-orientation in interactive languages by simply giving the complete rule set. The critical point in his discussion, though, is the question of &amp;ldquo;which rules take priority,&amp;rdquo; to which proposed solutions often smell sufficiently like the &amp;ldquo;sufficiently smart compiler&amp;hellip;&amp;rdquo; trope that is rolled out every so often.</description>
    </item>
    
    <item>
      <title>Single Quotes And Security And Mandrill</title>
      <link>https://www.brool.com/post/single-quotes-and-security-and-mandrill/</link>
      <pubDate>Sat, 10 Oct 2015 17:24:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/single-quotes-and-security-and-mandrill/</guid>
      <description>(Someone asked me for more information about a particular bug that we had hit, so this came about as an attempt at explaining it).
We ran into a bug in Mandrill in July. Basically, any subject lines with single quotes get truncated.
Wait! Wait! Check the room. Who winced? Anyone that winced very likely knows about web development, because a bug like that is indicative of something pretty serious &amp;mdash; it is potentially the tip of a large and disgusting iceberg.</description>
    </item>
    
    <item>
      <title>Logic Puzzles With Clojure</title>
      <link>https://www.brool.com/post/logic-puzzles-with-clojure/</link>
      <pubDate>Sat, 25 Jul 2015 17:18:59 +0000</pubDate>
      
      <guid>https://www.brool.com/post/logic-puzzles-with-clojure/</guid>
      <description>In the &amp;ldquo;strange stuff that comes up in Steam chat&amp;rdquo; category&amp;hellip;
 The Templars were all taken out for the day during the second week of their visit, and one Templar, (Antimatter) had the good fortune to be taken out twice. Where did the Templars choose to go (in Antimatter&amp;rsquo;s case, there were two choices) and when was each outing?
Personnel:
 Hexagon Jasmine Antimatter Cygnus  Locations:
 Globe Theatre London Eye Monument Tower of London Buckingham Palace  Days: Monday Tuesday Thursday Friday Saturday</description>
    </item>
    
    <item>
      <title>Toshiba Chromebook 2 (CB35-B3340)</title>
      <link>https://www.brool.com/post/toshiba-chromebook-2/</link>
      <pubDate>Wed, 01 Oct 2014 19:40:40 +0000</pubDate>
      
      <guid>https://www.brool.com/post/toshiba-chromebook-2/</guid>
      <description>What, another Chromebook!
Oddly, yes. While the C720 was a nice little machine, especially for $179, it is going to a family member that needs a computer — so instead I preordered the latest Toshiba Chromebook 2 from Amazon, and I lucked out into the first shipment out, so I received it last week.
Okay, in brief, my impressions:
The build is good. Keyboard is about as good as the C720, and I can proceed full speed.</description>
    </item>
    
    <item>
      <title>Death of the Long Form</title>
      <link>https://www.brool.com/post/death-of-the-long-form/</link>
      <pubDate>Mon, 15 Sep 2014 22:01:18 +0000</pubDate>
      
      <guid>https://www.brool.com/post/death-of-the-long-form/</guid>
      <description>Back, oh, eight years ago, a friend of mine had set up a private bulletin board for a bunch of us. In theory, the common theme was gaming (a bunch of us were moving from MMO to MMO like a herd of grazing cattle), but it had everything from talking about computer setups to funny top 10 lists to discussing news articles to almost anything else that we thought was interesting or odd.</description>
    </item>
    
    <item>
      <title>A Whirlwind Tour of Static Generators</title>
      <link>https://www.brool.com/post/a-whirlwind-tour-of-static-generators/</link>
      <pubDate>Mon, 01 Sep 2014 15:46:05 +0000</pubDate>
      
      <guid>https://www.brool.com/post/a-whirlwind-tour-of-static-generators/</guid>
      <description>Wordpress blares out notifications every time I log in — look, there is one now! — and eventually the constant need to upgrade and begins to wear and engender a slight paranoia about being hacked, making me look into alternate blogging platforms.
Because, clearly, the reason I haven&amp;rsquo;t written more is because of the blogging platform I&amp;rsquo;m using. To be honest, this is more than yak shaving, and really wanders into the area of a whole-day spa for yaks.</description>
    </item>
    
    <item>
      <title>Chromebook C720</title>
      <link>https://www.brool.com/post/chromebook-c720/</link>
      <pubDate>Tue, 29 Jul 2014 05:42:17 +0000</pubDate>
      
      <guid>https://www.brool.com/post/chromebook-c720/</guid>
      <description>(There may be ongoing edits to this as I play with the machine)
I purchased an Acer C720 the other day for $179 (the one with the Haswell 2955U), mostly to get a feel for Chrome as a development platform, as Chromebooks are becoming really popular in the educational community.
I had used one of the first CR-48s way back in the day, but was put off by the fact that it couldn&amp;rsquo;t keep up with my typing, so gave it up at that point.</description>
    </item>
    
    <item>
      <title>Julia</title>
      <link>https://www.brool.com/post/julia/</link>
      <pubDate>Sat, 08 Feb 2014 20:20:24 +0000</pubDate>
      
      <guid>https://www.brool.com/post/julia/</guid>
      <description>I&amp;rsquo;ve been playing around with Julia lately. Not for any particular reason, just to get a feel for it.
Why Julia instead of one of the new languages from established groups (i.e., Rust or Go)? Primarily because Go and Rust seem to be at a lower level &amp;ndash; Julia &amp;ldquo;feels&amp;rdquo; very much like Python or Clojure, which in my book is a good thing.
There was an article in Wired that made the Julia creators seem either douchey or odd, depending on your interpretation of stuff &amp;ndash; really, the &amp;ldquo;Language to End All Languages?</description>
    </item>
    
    <item>
      <title>Speeding Up flyspell-region</title>
      <link>https://www.brool.com/post/speeding-up-flyspell-region/</link>
      <pubDate>Sat, 20 Jul 2013 01:47:26 +0000</pubDate>
      
      <guid>https://www.brool.com/post/speeding-up-flyspell-region/</guid>
      <description>Flyspell-region is really, really slow on the Mac. You can literally watch it check a word, pause, check a word, pause&amp;hellip;
Well, sometimes.
There are a few interesting things about this:
 If you flyspell a large region, then it is very quick. Only small regions take a long time. It&amp;rsquo;s fast if you run it from the terminal.  So, what&amp;rsquo;s going on?
Two things:
First, if the region is under a certain number of characters (see flyspell-large-region in flyspell.</description>
    </item>
    
    <item>
      <title>Using mu4e</title>
      <link>https://www.brool.com/post/using-mu4e/</link>
      <pubDate>Sat, 19 Jan 2013 21:50:18 +0000</pubDate>
      
      <guid>https://www.brool.com/post/using-mu4e/</guid>
      <description>A thread on Reddit nudged me to try the Emacs mail readers again. I have tried a bunch of them (Wanderlust, Gnus, mew) but found them either too idiosyncratic or painful to use, and for the most part just read my e-mail by logging into Google directly.
However, I just installed mu / mu4e and it works really well — well enough that I prefer reading e-mail in Emacs now, as opposed to just logging into Google mail and reading it there.</description>
    </item>
    
    <item>
      <title>Living with a Leaf</title>
      <link>https://www.brool.com/post/living-with-a-leaf/</link>
      <pubDate>Sun, 13 Jan 2013 23:24:10 +0000</pubDate>
      
      <guid>https://www.brool.com/post/living-with-a-leaf/</guid>
      <description>My girlfriend got a Leaf.
It&amp;rsquo;s one of those things that makes me feel like I&amp;rsquo;m living in the future. I didn&amp;rsquo;t get my weekend trips to the moon, I didn&amp;rsquo;t get jetpacks, and I sure as heck didn&amp;rsquo;t get underwater cities, but at least the future has given us reasonable, electric cars.
The Leaf is not a bad little car. It&amp;rsquo;s actually much zippier than our Prius, as long as you aren&amp;rsquo;t driving in Eco mode, and handles fairly well.</description>
    </item>
    
    <item>
      <title>Galaxy Nexus / Jelly Bean</title>
      <link>https://www.brool.com/post/galaxy-nexus-jelly-bean/</link>
      <pubDate>Tue, 10 Jul 2012 00:15:09 +0000</pubDate>
      
      <guid>https://www.brool.com/post/galaxy-nexus-jelly-bean/</guid>
      <description>I ordered an unlocked Galaxy Nexus — figuring that, hey, if Apple was trying to ban it, it must be good — and managed to get it just before Google stopped selling it. They&amp;rsquo;ll be selling it again this week, but just wanted to get some notes and impressions of playing around with the latest and greatest. I have an iPhone 4 that I&amp;rsquo;m really happy with, but wanted to try out the Galaxy Nexus, both as a phone and as a development platform.</description>
    </item>
    
    <item>
      <title>Must Have Utilities for Mac OS X</title>
      <link>https://www.brool.com/post/must-have-utilities-for-mac-os-x/</link>
      <pubDate>Tue, 12 Jun 2012 05:34:45 +0000</pubDate>
      
      <guid>https://www.brool.com/post/must-have-utilities-for-mac-os-x/</guid>
      <description>My list of must-have utilities for Mac OS X:
 Flycut (General Arcade) — stores your last n clipboards and allows you to easily choose one to paste. Saves a surprising amount of effort (for example, copying username / password? No more switching back and forth &amp;ndash; just copy twice, switch to the terminal application, and paste twice). Window Magnet (CrowdCafe) — makes it easy to snap windows to half or quarter screens.</description>
    </item>
    
    <item>
      <title>Zotac AD02 As A Home Server</title>
      <link>https://www.brool.com/post/zotac-ad02-as-a-home-server/</link>
      <pubDate>Sat, 14 Jan 2012 18:06:55 +0000</pubDate>
      
      <guid>https://www.brool.com/post/zotac-ad02-as-a-home-server/</guid>
      <description>I wanted to update my home server — what I really wanted was something that could stream or play video whilst also doing all the other various and sundry tasks. My requirements were being able to play video without problems and either USB 3.0 or eSata connectors.
I noticed that Fry&amp;rsquo;s had a sale on the Zotac AD02, so I picked one up fairly cheaply, and have set it up.</description>
    </item>
    
    <item>
      <title>Using Markdown with Mutt</title>
      <link>https://www.brool.com/post/using-markdown-with-mutt/</link>
      <pubDate>Wed, 24 Aug 2011 08:28:19 +0000</pubDate>
      
      <guid>https://www.brool.com/post/using-markdown-with-mutt/</guid>
      <description>This took me a while to figure out, so in the hopes that I can save someone some time, here&amp;rsquo;s how to use markdown with Mutt:
Step 1: Install msmtp (or any other program) On OS X you can do this with &amp;ldquo;brew install msmtp&amp;rdquo;. (You can use sendmail or whatever, but msmtp was easy to set up.).
Step 2: Set up msmtp Set up the appropriate configuration file. I ran into a problem wherein the program would just hang; turning on debug showed that it hung after &amp;ldquo;Reading recipients from command line.</description>
    </item>
    
    <item>
      <title>Ubuntu 11.04 / Buffalo WLI-UC-G300HP</title>
      <link>https://www.brool.com/post/ubuntu-11-04-buffalo-wli-uc-g300hp/</link>
      <pubDate>Tue, 28 Jun 2011 07:39:14 +0000</pubDate>
      
      <guid>https://www.brool.com/post/ubuntu-11-04-buffalo-wli-uc-g300hp/</guid>
      <description>Super quick, just thrown out in the hopes it may save some Googlers some time: I was getting really slow wireless connections on my Buffalo WLI-UC-G300HP adapter with intermittent disconnects. This link had the clearest directions, although:
 usb_buffer_free and usb_buffer_alloc had changed in the most recent kernel needed to add a device code for my adapter did not need to update the firmware or the USB list  Anyway, patch is here if you need.</description>
    </item>
    
    <item>
      <title>Editing Wordpress Locally</title>
      <link>https://www.brool.com/post/editing-wordpress-locally/</link>
      <pubDate>Tue, 14 Jun 2011 19:40:38 +0000</pubDate>
      
      <guid>https://www.brool.com/post/editing-wordpress-locally/</guid>
      <description>I&amp;rsquo;ve written before on editing Wordpress locally, but recent circumstances (moving my blog to another server) made me take another look at it. I had written a utility previously that was based on git, but on reflection git is unnecessary. So, stripped out most of the code and moved it into wordpress-shuffle, that allow you to:
 download files from the blog show differences copy changes wholesale from the blog to local, or vice versa add new posts  It&amp;rsquo;s all on Github.</description>
    </item>
    
    <item>
      <title>Using Google Authenticator For Your Website</title>
      <link>https://www.brool.com/post/using-google-authenticator-for-your-website/</link>
      <pubDate>Sat, 26 Feb 2011 18:41:44 +0000</pubDate>
      
      <guid>https://www.brool.com/post/using-google-authenticator-for-your-website/</guid>
      <description>Google has started offering two-factor authentication for Google logins, using Google Authenticator. They have applications available for iPhone, Android, and Blackberry that give time-based passwords based on the proposed TOTP (Time-based One Time Password) draft standard.
The Google code provides a command line program that can generate secret keys as well as a PAM module, but it turns out to be very little code to authenticate a TOTP, thereby providing two-factor authentication to your website very easily.</description>
    </item>
    
    <item>
      <title>Hadoop Shim To Clojure</title>
      <link>https://www.brool.com/post/hadoop-shim-to-clojure/</link>
      <pubDate>Mon, 08 Nov 2010 09:47:12 +0000</pubDate>
      
      <guid>https://www.brool.com/post/hadoop-shim-to-clojure/</guid>
      <description>I&amp;rsquo;ve been working with Hadoop a lot lately in order to do some exploratory data analysis on traffic logs. Hadoop is great; it makes things that were taking 30 minutes run 10x faster, which means that I can iterate a lot faster and experiment with more ways to slice the data.
I wanted an easy way of running Clojure programs under Hadoop, and ended up writing a silly, simple little shim that would simply take a Clojure file with a mapper and reducer function.</description>
    </item>
    
    <item>
      <title>Beaujiful Soup</title>
      <link>https://www.brool.com/post/beaujiful-soup/</link>
      <pubDate>Thu, 28 Oct 2010 05:11:16 +0000</pubDate>
      
      <guid>https://www.brool.com/post/beaujiful-soup/</guid>
      <description>Horrible name, isn&amp;rsquo;t it?
Beautiful Soup is a really nice Python library for extracting content from possibly-sloppy HTML, and I wanted some reasonably close Clojure equivalent. Unfortunately, the standard classes don&amp;rsquo;t work well with malformed HTML; as an example:
= (require &#39;(clojure [xml :as xml])) = (xml/parse &#34;http://www.google.com&#34;) org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed. (NO_SOURCE_FILE:0) Fortunately, there is already a TagSoup library that can parse non-perfect HTML, and it is very easy to integrate TagSoup into xml/parse.</description>
    </item>
    
    <item>
      <title>iPhone 4 Notes (And Wireless Problem)</title>
      <link>https://www.brool.com/post/iphone-4-notes-and-wireless-problem/</link>
      <pubDate>Sat, 26 Jun 2010 20:59:53 +0000</pubDate>
      
      <guid>https://www.brool.com/post/iphone-4-notes-and-wireless-problem/</guid>
      <description>Ended up getting the iPhone 4G — I had a 3G previously, and it really was starting to show its age — and it really is a nice phone. The highlights:
 Display is ridiculously nice It&amp;rsquo;s fast — subjectively, as fast as the iPad — and the extra CPU power really makes the web browsing much better. The bumper case is not that great — it prevents some headphones from being used (because the distance to the headphone jack is a bit longer) and also prevents you from using the 10,000 iPod USB adapters that you have lying around the house, because the slot in the case for the iPod adapter is just small enough that older adapters don&amp;rsquo;t work.</description>
    </item>
    
    <item>
      <title>Setting Up Incanter and MySQL</title>
      <link>https://www.brool.com/post/setting-up-incanter-and-mysql/</link>
      <pubDate>Thu, 21 Jan 2010 19:16:02 +0000</pubDate>
      
      <guid>https://www.brool.com/post/setting-up-incanter-and-mysql/</guid>
      <description>Okay, Lein really does make stuff pretty easy. Rather than wrestling with eleventybillion classpaths, just install Lein.
Create a new project directory with lein new mydirectory Change the project.clj file that is autogenerated with:
(defproject mydirectory &#34;1.0.0-SNAPSHOT&#34; :description &#34;FIXME: write&#34; :dependencies [[org.clojure/clojure &#34;1.1.0-alpha-SNAPSHOT&#34;] [org.clojure/clojure-contrib &#34;1.0-SNAPSHOT&#34;] [mysql/mysql-connector-java &#34;5.1.6&#34;] [incanter/incanter &#34;1.0-master-SNAPSHOT&#34;]]) (that is, add the mysql and incanter dependencies).
Download all the dependencies with lein deps
Start up a REPL with everything in the classpath by just using lein repl</description>
    </item>
    
    <item>
      <title>Tethering an iPhone with SSH and Windows 7</title>
      <link>https://www.brool.com/post/tethering-an-iphone-with-ssh-and-windows-7/</link>
      <pubDate>Sun, 17 Jan 2010 04:59:10 +0000</pubDate>
      
      <guid>https://www.brool.com/post/tethering-an-iphone-with-ssh-and-windows-7/</guid>
      <description>I don&amp;rsquo;t need to tether through my iPhone — I always seem to be near a hotspot — but nonetheless I thought that spending 10 minutes to set it up was worth it, because when you need tethering, you really need tethering. If you&amp;rsquo;re willing to drop \$10 bucks there are a couple of apps in Cydia that can do this easy (PhoneModem and MyWi, I think), but I just wanted something that I could use in an emergency.</description>
    </item>
    
    <item>
      <title>Acer 1410 Mini-review</title>
      <link>https://www.brool.com/post/acer-1410-mini-review/</link>
      <pubDate>Fri, 08 Jan 2010 16:54:48 +0000</pubDate>
      
      <guid>https://www.brool.com/post/acer-1410-mini-review/</guid>
      <description>I&amp;rsquo;ve had an Asus EEE 1000h ever since they came out, but it was getting to be time to upgrade it &amp;ndash; it was not a bad little machine, but the Atom processor was a bit underpowered, and that damnable right shift key always did bug me. I picked up an Acer Aspire 1410 with Bing cashback for about $370, give or take.
Man, netbooks have really come a long way.</description>
    </item>
    
    <item>
      <title>A Modest Proposal</title>
      <link>https://www.brool.com/post/a-modest-proposal/</link>
      <pubDate>Tue, 01 Sep 2009 16:21:25 +0000</pubDate>
      
      <guid>https://www.brool.com/post/a-modest-proposal/</guid>
      <description>Warning: a very rambling article; less a solid proposal than me just exploring an idea that may lead to a dead end in a week or two after I&amp;rsquo;ve thought about it.
I really enjoy Clojure. Everything seems so well thought out and well designed; in a lot of ways it reminds me of Python, which is three ways to ironic because back in the day I started using Python because it was very Lispy.</description>
    </item>
    
    <item>
      <title>Snippet: Automatic Proxy Creation in Clojure</title>
      <link>https://www.brool.com/post/snippet-automatic-proxy-creation-in-clojure/</link>
      <pubDate>Fri, 21 Aug 2009 22:20:42 +0000</pubDate>
      
      <guid>https://www.brool.com/post/snippet-automatic-proxy-creation-in-clojure/</guid>
      <description>The proxy function makes it easy for Clojure to interface with the Java layer, but I was dealing with an interface (the AIM Java API) that had an punitive number of things that needed to be overridden&amp;hellip;
public void OnIdleStateChange(AccSession arg0, int arg1) { } public void OnInstanceChange(AccSession arg0, AccInstance arg1, AccInstance arg2, AccInstanceProp arg3) { } public void OnLookupUsersResult(AccSession arg0, String[] arg1, int arg2, AccResult arg3, AccUser[] arg4) { } public void OnSearchDirectoryResult(AccSession arg0, int arg1, AccResult arg2, AccDirEntry arg3) { } // .</description>
    </item>
    
    <item>
      <title>Pattern Matching In Clojure</title>
      <link>https://www.brool.com/post/pattern-matching-in-clojure/</link>
      <pubDate>Wed, 12 Aug 2009 09:38:57 +0000</pubDate>
      
      <guid>https://www.brool.com/post/pattern-matching-in-clojure/</guid>
      <description>Updated: Note that this is available as a clojars module.
Clojure code density seems to be pretty good. There are a fair number of convenient shortforms in the language; for example, associative datatypes all act as a function — so given a hash map you can reference it with (my-hashmap :key). The base language itself is probably about as expressive as Python (or a bit better), but you have the added advantage of being able to use macros as needed to really get the code density up.</description>
    </item>
    
    <item>
      <title>aset is Faster Than aset-int</title>
      <link>https://www.brool.com/post/aset-is-faster-than-aset-int/</link>
      <pubDate>Sat, 08 Aug 2009 21:51:13 +0000</pubDate>
      
      <guid>https://www.brool.com/post/aset-is-faster-than-aset-int/</guid>
      <description>Clojure isn&amp;rsquo;t the fastest functional lanuage &amp;ndash; that title seems to go to Haskell these days, at least for the stuff that I do &amp;ndash; but it nonetheless is usually fast enough. It&amp;rsquo;s a dynamic language, so is perhaps cursed to be somewhat slower always, but nonetheless for the things that I do, it seems to be about 2-4x slower than Ocaml/Haskell and substantially faster than Python.
Nonetheless, I ran into a situation where it seemed to be 100x slower than Java because of an erroneous assumption on my part.</description>
    </item>
    
    <item>
      <title>Tokyo Cabinet API for Clojure</title>
      <link>https://www.brool.com/post/tokyo-cabinet-api-for-clojure/</link>
      <pubDate>Fri, 07 Aug 2009 01:51:56 +0000</pubDate>
      
      <guid>https://www.brool.com/post/tokyo-cabinet-api-for-clojure/</guid>
      <description>I&amp;rsquo;ve been playing with Tokyo Cabinet and Clojure for a bit, and while I will go on about both of them in another blog post (or not), I have to mention that Clojure is such a well designed language that it&amp;rsquo;s a pleasure to play with. It has much of the same intrinsic power as Haskell, but in a fashion that might be more approachable for people coming from Python or Ruby.</description>
    </item>
    
    <item>
      <title>Posting To Wordpress From Git</title>
      <link>https://www.brool.com/post/posting-to-wordpress-from-git/</link>
      <pubDate>Mon, 27 Jul 2009 20:57:20 +0000</pubDate>
      
      <guid>https://www.brool.com/post/posting-to-wordpress-from-git/</guid>
      <description>I&amp;rsquo;ve found Wordpress to be pretty decent, aside from the security updates every other week, but for me writing is a very spur of the moment thing; I prefer to be able to go into Emacs and just immediately type anything without having to log into my blog, create a new post, and then suffer through a web editor. Basically, I want to do it in Emacs! Now! And maybe I&amp;rsquo;m offline!</description>
    </item>
    
    <item>
      <title>Hacks: Python Calling PHP</title>
      <link>https://www.brool.com/post/hacks-python-calling-php/</link>
      <pubDate>Wed, 22 Jul 2009 00:57:26 +0000</pubDate>
      
      <guid>https://www.brool.com/post/hacks-python-calling-php/</guid>
      <description>(This is almost too stupid to post, but on the off chance that someone actually needs something like this&amp;hellip;)
I needed to interface with a bunch of data that had PHP wrapper classes, and needed a quick way of being able to interface with PHP from Python. (At this point, you might find it hard to believe that the PHP wrapper classes were worth trying to reuse, but the wrapper classes took care of partitioning and caching and everything, so it seemed silly to not reuse them).</description>
    </item>
    
    <item>
      <title>Recovering From A --hard Reset In Git</title>
      <link>https://www.brool.com/post/recovering-from-a-hard-reset-in-git/</link>
      <pubDate>Sun, 19 Apr 2009 06:37:09 +0000</pubDate>
      
      <guid>https://www.brool.com/post/recovering-from-a-hard-reset-in-git/</guid>
      <description>I was switching between git repositories the other day, and managed to do a &amp;ldquo;git reset &amp;ndash;hard HEAD\^&amp;rdquo; in the wrong repository. Which wasn&amp;rsquo;t bad, since I had most of the files already open in Emacs&amp;hellip; but then Emacs calmly told me that it was re-reading the files from disk. But, git had everything still around &amp;ndash; it turns out to be pretty easy to get it back. The magic command turned out to be git reflog.</description>
    </item>
    
    <item>
      <title>Stupid Haskell Tricks</title>
      <link>https://www.brool.com/post/stupid-haskell-tricks/</link>
      <pubDate>Mon, 13 Apr 2009 10:25:30 +0000</pubDate>
      
      <guid>https://www.brool.com/post/stupid-haskell-tricks/</guid>
      <description>Let&amp;rsquo;s say that you really, really want some notion of objected oriented programming. So let&amp;rsquo;s make a class that represents a name, and some simple method calls on it:
data S = S { name :: String } deriving (Show) firstname s = (words (name s))!!0 lastname s = (words (name s))!!1 But, dammit, you want to invoke it like you would in C++. So define a function:
*Main let (--) x f = f x *Main let test = S &#34;</description>
    </item>
    
    <item>
      <title>Haskell To Wordpress (Snippet)</title>
      <link>https://www.brool.com/post/haskell-to-wordpress-snippet/</link>
      <pubDate>Fri, 10 Apr 2009 08:25:00 +0000</pubDate>
      
      <guid>https://www.brool.com/post/haskell-to-wordpress-snippet/</guid>
      <description>A small snippet of code that demonstrates calling into a Wordpress XML-RPC server with Haskell and HaxR.
import qualified Data.Map as Map import Data.Maybe import Network.XmlRpc.Client import Network.XmlRpc.Internals server = &#34;http://yourserver.wordpress.com/xmlrpc.php&#34; -- extract multiple posts from the XML response extract :: Value - [Map String Value] extract xmlresp = let ValueArray rs = xmlresp in map (\v - case v of ValueStruct vs - Map.fromList vs _ - Map.fromList []) rs getRecentPosts :: Int - [Char] - [Char] - Int - IO Value getRecentPosts = remote server &#34;</description>
    </item>
    
    <item>
      <title>Haskell Performance: Array Creation</title>
      <link>https://www.brool.com/post/haskell-performance-array-creation/</link>
      <pubDate>Mon, 30 Mar 2009 03:00:20 +0000</pubDate>
      
      <guid>https://www.brool.com/post/haskell-performance-array-creation/</guid>
      <description>Ran into another interesting performance problem while converting a small test program over to Haskell. Let&amp;rsquo;s say that you want to walk through every line of a text file, collate character frequencies, and return anything that maps to a particular frequency. For purposes of explanation we&amp;rsquo;ll do something really silly like look for lines with 10 capital &amp;lsquo;A&amp;rsquo;s.
{-# OPTIONS -XBangPatterns #-} import IO import System import Data.Word import Data.Array.Unboxed import Control.</description>
    </item>
    
    <item>
      <title>Haskell Performance: Lowercase</title>
      <link>https://www.brool.com/post/haskell-performance-lowercase/</link>
      <pubDate>Sun, 29 Mar 2009 02:05:25 +0000</pubDate>
      
      <guid>https://www.brool.com/post/haskell-performance-lowercase/</guid>
      <description>I was trying to track down some issues with some text processing programs that I was writing in Haskell, and ran into an interesting problem. I made one small change and my program ended up being 5 times slower, and I had to backtrack to try and find out what it was. So, given a simple Haskell program that sees if a word is in a wordlist:
import IO import System import qualified Data.</description>
    </item>
    
  </channel>
</rss>
