<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Jody's blog]]></title><description><![CDATA[Paying off my technical debt one bug at a time.]]></description><link>http://blog.kaplon.us/</link><generator>Ghost 0.6</generator><lastBuildDate>Mon, 30 Mar 2026 17:15:50 GMT</lastBuildDate><atom:link href="http://blog.kaplon.us/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Blocking link referral spam with nginx]]></title><description><![CDATA[<p>Over at the official website for the <a href="http://gtradio.net/alyt">At Least You're Trying Podcast</a>, I've been seeing lots of weird Russian domains appear in the analytics reports. Some of the domains are Darodar.com, Blackhatworth.com, and Hulfingtonpost.com. <br>
Have a look at the large contingent of Russian visits (yes, I am</p>]]></description><link>http://blog.kaplon.us/blocking-link-referral-spam-with-nginx/</link><guid isPermaLink="false">c5590067-7461-4319-99de-8ea46dd51e04</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Sat, 21 Feb 2015 20:27:25 GMT</pubDate><content:encoded><![CDATA[<p>Over at the official website for the <a href="http://gtradio.net/alyt">At Least You're Trying Podcast</a>, I've been seeing lots of weird Russian domains appear in the analytics reports. Some of the domains are Darodar.com, Blackhatworth.com, and Hulfingtonpost.com. <br>
Have a look at the large contingent of Russian visits (yes, I am vain enough to check on my meager internet fame from my phone):</p>

<p><img src="https://lh4.googleusercontent.com/-tQoWp2Yj60U/VN2NKlc-KSI/AAAAAAAAPFk/aTpwzckSeU0/w476-h846-no/Screenshot_2015-02-08-18-23-18.png" alt="Google Analytics screen shot"></p>

<p>My understanding of this phenomenon is incomplete. <br>
I think it goes like this:</p>

<ul>
<li>Spam robot crawls my website</li>
<li>Spammer links to my website</li>
<li>{insert marketing-speak involving black-hat SEO here}</li>
<li>Massive profit for spammer</li>
</ul>

<p>I've gone around in circles trying to decide how to handle this issue. Visits from the spam crawlers aren't costing much data transfer at the moment, I'm nowhere near my limit over at <a href="https://www.linode.com/?r=30991a143a3c99716fbc7fdcf81355338c4d2b64">Linode</a>, but they are swamping any real traffic in my analytics reports. <br>
I was finally bothered enough to research my options.</p>

<p>My initial thought was to add iptables firewall rules since that would block the requests even before they pass into the webserver (<a href="http://nginx.org/">nginx</a>). I didn't want to filter on IP address since these crawlers are likely coming from multiple IP's and I don't want to spend time poring over my server logs to track them down. That left me with blocking by domain, and I found <a href="http://fearelise.com/tech/server/using-iptables-to-block-bot-scans">this nice article</a> covering the topic. After looking into the some of the syntax used in the post, I started to get the feeling that iptables might not be the right tool to handle this sort of fuzzy string matching. Also, iptables rule sytax makes me cross-eyed and even though I only have a handful of domains to block now, I don't want to be writing new firewall rules for every spam domain.</p>

<p>I briefly wondered if I could do something creative with <a href="http://www.fail2ban.org/">fail2ban</a>, which is already installed on the box. But, fail2ban apparently translates it's block list into iptables firewall rules, so it would be added complexity on top of a tool I was hoping to avoid.</p>

<p>I was trying to get closer to the metal than the web server, but nginx is quite good at string matching, so I decided it was the better choice. After much internet searching, I finally came across a nice gist showing an nginx configuration file:  </p>

<script src="https://gist.github.com/russianlagman/33d8aeeca513bba02222.js"></script>

<p>I liked the syntax, but there's no setup context and I wasn't sure if this extra configuration file should be referenced in the main <code>nginx.conf</code> file or had to be <code>include</code>d in each of the separate server configuration files. I tried to set it up both ways but got errors when restarting nginx. Apparently the <a href="http://nginx.org/en/docs/http/ngx_http_map_module.html">map</a> directive can't be used in either of those ways.</p>

<p>The <a href="http://eclecticquill.com/2014/12/11/use-nginx-to-block-referrer-spam-from-semalt/">technique used here</a> also looked promising (and it didn't throw errors when restarting nginx).</p>

<p>In the end, I went with the basic pattern as described by the second link, but took a few pointers from the first method. I created a new nginx configuration directory and file, <code>/etc/nginx/global-server-conf/bad_referer.conf</code>, which contains:</p>

<pre><code>if (
    $http_referer ~ "(
        semalt\.com
        |buttons-for-website\com
        |blackhatworth\.com
        |hulfingtonpost\.com
        |darodar\.com
        |cenoval\.ru
        |priceg\.com
    )"
) {
    set $bad_referer "1";
}

if ($bad_referer) {
    return 444;
}
</code></pre>

<p>I feel like the 444 status code was the right choice for the return value:</p>

<p><img src="http://httpstatusdogs.com/wp-content/uploads/2011/12/444.jpg" alt="http status dog 444"></p>

<p>Then within each site's server configuration file, I added the line:</p>

<pre><code>include /etc/nginx/global-server-conf/*;
</code></pre>

<p>In my <code>bad_referer.conf</code> file, I listed all of the sketchy domains, except one. I skipped bestwebsitesawards.com for now since it wasn't generating much traffic, and I wanted to have something to use as a "control group".</p>

<p>In a month or so, I'll update this post with another screen shot to prove that I've kept the spam robots at bay, or show that I've failed miserably.</p>

<p>2015-03-11 update: <br>
I still have some more work to do.</p>

<p><img src="https://lh4.googleusercontent.com/-suDIsGcSxIs/VP2viM14E1I/AAAAAAAAPoU/YAiY-uRsnqk/w476-h846-no/Screenshot_2015-03-09-10-30-18.png" alt="Updated GA screen shot"></p>

<p>Due to the still large Russian numbers, I've added o-o-6-o-o.com and humanorightswatch.org to my block list.</p>

<p>Maybe this traffic will never quite go away...</p>]]></content:encoded></item><item><title><![CDATA[Standing Desk Situation]]></title><description><![CDATA[<h2 id="ilikestanding">I like standing.</h2>

<p>I've been standing in front of my computers for a few years now, and while my feet might feel tired at the end of the day, my back and hips are less stiff. <br>
This is anecdotal, I'm not going to tell you that you're going to get</p>]]></description><link>http://blog.kaplon.us/standing-desk-situation/</link><guid isPermaLink="false">5523adc0-0119-40dc-9336-3e7e0d533ee3</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Sun, 20 Jul 2014 01:39:00 GMT</pubDate><content:encoded><![CDATA[<h2 id="ilikestanding">I like standing.</h2>

<p>I've been standing in front of my computers for a few years now, and while my feet might feel tired at the end of the day, my back and hips are less stiff. <br>
This is anecdotal, I'm not going to tell you that you're going to get bowel cancer if you sit in a chair. <br>
Obligatory <a href="http://xkcd.com/1329/">xkcd link on standing desks</a>. <br>
I just want to put up a quick post with some (hopefully) inspiring pics of standing desks in the real world that don't cost thousands of dollars or involve weird Ikea kung-fu.</p>

<p>For my desk at work, I spent about $15 at the hardware store on a cheap, plastic bookshelf. <br>
I first tried the supports at their original length and then cut them so I could get the tops of my monitors level with my eyes, and my keyboard resting where I had a 90-degree bend in my elbows. <br>
Here's where I ended up:</p>

<p><img src="https://lh3.googleusercontent.com/-lmKyy-LJ0F4/Uo0_mSaBCjI/AAAAAAAAMQ0/yZsLJLEkXlw/w635-h846-no/20131120_141841.jpg" alt="work stand up desk"></p>

<p>I liked standing enough that I commissioned a friend to build me a bespoke standing desk for my home office (pardon my mess, but do check out his more glamorous projects over at the <a href="https://www.facebook.com/pricelessprojectsLLC">Priceless Projects on Facebook</a>):</p>

<p><img src="https://lh6.googleusercontent.com/-R4tCQ_1Vcb4/UpKLRI_6xfI/AAAAAAAAMR8/fSD2otLeSxo/w635-h846-no/20131124_182638.jpg" alt="bespoke stand up desk"></p>

<p>While I'm at it, a sysadmin friend sent along his setup. <br>
He started with a trial version using boxes found around his building (notice the fish-eye mirror for the truly security conscious; no chance of shoulder-surfers stealing passwords): <br>
<img src="https://lh3.googleusercontent.com/-xFTVSUQSu-g/U3jeX2mporI/AAAAAAAANrs/m6vmVfBw93g/w958-h719-no/First%2BSetup.jpg" alt="stand up desk of friend, hobo version"></p>

<p>And then he made it a little snazzier: <br>
<img src="https://lh5.googleusercontent.com/-5IumhNEwLzs/U3jeXx4F6uI/AAAAAAAANr0/nSBEEWobVms/w958-h719-no/new%2Bsetup.jpg" alt="stand up desk of friend, final version"></p>

<p>With no more chair, I think <a href="http://www.catb.org/jargon/html/P/PEBKAC.html">PEBKAC</a> has to become PEBCAF.</p>]]></content:encoded></item><item><title><![CDATA[windows explorer renames files with lower case]]></title><description><![CDATA[<p>Are you a windows user who suddenly finds one or more of your files have been mysteriously renamed using all lower-case letters?</p>

<p>Note, this occurred on a Windows 7 system, but I'm unsure what updates may have been installed at the time because now I can't duplicate the bug anymore.</p>]]></description><link>http://blog.kaplon.us/windows-explorer-renames-files-with-lower-case/</link><guid isPermaLink="false">4b6c0c74-5c0f-43ef-b9a7-d69073a8f523</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Fri, 28 Feb 2014 22:32:45 GMT</pubDate><content:encoded><![CDATA[<p>Are you a windows user who suddenly finds one or more of your files have been mysteriously renamed using all lower-case letters?</p>

<p>Note, this occurred on a Windows 7 system, but I'm unsure what updates may have been installed at the time because now I can't duplicate the bug anymore. Being presently unable to reproduce this behavior also means this post won't have any screen shots (my apologies).</p>

<p>However, it was odd enough that I thought it deserved a quick write-up...</p>

<p>The basic steps were: <br>
- Open Windows file explorer to a folder containing lots of files, in my case they were '.zip' files
- Use the search box in the upper right to find a subset of the files in the folder, probably by searching on some part of the filename
- Select one or more files from the search results
- Drag selected files into another folder in the folder tree view or onto another folder's explorer window.</p>

<p>Finally, marvel at how your files have been silently renamed using all lower-case characters. Note, this all applies to network files and I don't have any details on the setup of the file server.</p>]]></content:encoded></item><item><title><![CDATA[vim and vigor]]></title><description><![CDATA[<p>This post represents some notes and thoughts while learning vim. It's been updated and rearranged countless times, so it might seem a little disjointed.</p>

<p><em>Note, I originally started writing this sometime around 8-15-2012...</em></p>

<p>I'm finally learning how to use <a href="http://www.vim.org/">VIM</a>. It's quite possibly the most geekily arcane thing I've ever</p>]]></description><link>http://blog.kaplon.us/vim-and-vigor/</link><guid isPermaLink="false">fd61c7f4-2ab2-41cb-8466-7c3eaf77f474</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Thu, 20 Feb 2014 16:04:32 GMT</pubDate><content:encoded><![CDATA[<p>This post represents some notes and thoughts while learning vim. It's been updated and rearranged countless times, so it might seem a little disjointed.</p>

<p><em>Note, I originally started writing this sometime around 8-15-2012...</em></p>

<p>I'm finally learning how to use <a href="http://www.vim.org/">VIM</a>. It's quite possibly the most geekily arcane thing I've ever done. During my first few days of using vim regularly, I'm finding it hard to go from using an email client or some other non-modal app and get back into that 'VIM mindset'. Once I got my head around 'normal' mode and the motion keys, things got a lot better. Understanding the difference between buffers, windows, and tabs in gVIM was also a hurdle.</p>

<p>I was initially confused by gVIM occasionally splitting it's main window into multiple windows, but apparently it splits automatically when there are unwritten changes to the current buffer/file. Due to this confusion, I tried briefly using tabs in gVIM to handle multiple files. This did not go well and I decided to try and use gVIM without tabs since it seems more in the spirit of the 'VIM-way'. Those graphical tabs seem to be a bolt-on anyway, plus I'm not yet to the point where I would have any extensive projects open in VIM so switching buffers is not unwieldy yet. End of week update...multiple/split windows can be handy to reference one file while editing another (a bit like having two windows open on dual monitors). Also, <a href="http://vimdoc.sourceforge.net/htmldoc/windows.html#window-move-cursor">ctrl-w commands</a> to jump from one window another are really the way forward here.</p>

<p>I have my <a href="http://www.viemu.com/vi-vim-cheat-sheet.gif">graphical cheat sheet</a> perched just above my keyboard and some sticky notes with handy commands not covered by the sheet. After a few weeks (or has it been months already?) all of this vim weirdness is starting to get it into my fingers...I'm seeing how fast text wrangling can get.</p>

<p><img src="https://lh5.googleusercontent.com/-HFM5jYOT70c/UwaD6aJz56I/AAAAAAAAMsU/W1aChocTXAw/w958-h719-no/20140220_110814.jpg" alt="my annotated vi graphical cheat sheet"></p>

<h2 id="updateunknowndate">Update (unknown date),</h2>

<p>I'm in a strange transition period where VIM will occasionally surprise me with its behavior, however I really miss the modal functionality whenever I'm in Visual Studio or SQL Server Management Studio. And what is the deal with yanked text from VIM not making it onto the system pasteboard? Ah, that's because I hadn't yet discovered the named registers. Specifically, that I should yank text to the *-register and it will then show up on the system clipboard (should work on windows and linux). I also didn't understand how the double-quote key is the signifier to name a register (to yank to or paste from).</p>

<h2 id="update10152012">Update 10-15-2012,</h2>

<p>I found a <a href="http://www.moolenaar.net/habits.html">good article by vim creator</a>. He advises learning a few basics and focusing on trying to become more efficient at small common tasks. I have to agree, this is where my best progress has been made, so hopefully I'm on the right track with regards to becoming more profiecient with vim.</p>

<h2 id="update11212012">Update 11-21-2012,</h2>

<p>I installed <a href="http://vim.spf13.com/">spf13 vim-distro</a> on my home system running Linux Mint. The spf13 color scheme conflicts with the Linux Mint terminal color scheme, which made vim unusable. I couldn't see the cursor and I couldn't distinguish most text from the background. I was hoping to take a shortcut to a tricked-out vim setup where I didn't have to do any configurations or plug-in installation. I'm glad I didn't spend much time with spf13...it was really the wrong direction for me to take. I ended up with a bunch of stuff that I didn't know how to use and no context for me to know how tweak it. Opening the .vimrc configuration file that spf13 created was the last straw. It was a strange landscape full of fancy plugins and settings. Instead of trying to familiarize myself with all that complexity, I realized (again) that it's much better to go from the ground up.</p>

<p>After using 'vanilla' vim on linux systems for a while, it bothers me that the cursor doesn't change shape under INSERT mode. I really like the visual cue in gVim or <a href="https://www.sublimetext.com/docs/2/vintage.html">Sublime-Vintage</a> when the cursor changes from a block to a thin vertical line. I know plain-old vim shows <code>-- INSERT --</code> at the bottom of the screen, but it's nice to have that little bit of fancy UI for the cursor...it's where your eyes are looking anyway.</p>

<p>I discovered and completed the vimtutor training built into the terminal/vim on linux (just type vimtutor into terminal!). This was surprisingly good practice...especially with delete/put and yank/put. <br>
I'm finally starting to understand how that grey-beard programmer down the hall can be actually be productive even though they're a 2-finger typist.</p>

<h2 id="update03272013">Update 03/27/2013,</h2>

<p>Good perspective (if a little depressing)... <br>
<a href="http://delvarworld.github.com/blog/2013/03/16/just-use-sublime-text">Just Use Sublime Text</a></p>

<p>And a <a href="http://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118">Stack Overflow question on vim with passionate responses</a> with an overwhelming number of tips. The first answer is great, if rather long. That answer points out that some of the vi conventions go all the way back to before computers had electronic displays. Now, if we're going to stick with the same techniques needed when the user couldn't see a live copy of the text they were editing, they better be saving us lots of keystrokes. I'm not saying it's not worth it, but it might explain some of vim's opacity and difficult learning curve.</p>

<h2 id="update06202013">Update 06/20/2013,</h2>

<p>Just had my IT-OPS guy install the <a href="http://visualstudiogallery.msdn.microsoft.com/59ca71b3-a4a3-46ca-8fe1-0e90e3f79329">VsVim</a> Visual Studio plugin for me (yes, I work in a shop where dev's aren't allowed to install their own software), and I'm having fun in Visual Studio for the first time in years! A co-worker had previous experience with VsVim and told me it was flaky and not worth running, but this was maybe a year ago. However, I recently found <a href="https://github.com/jaredpar/VsVim">VsVim on github</a> and saw that it has been under active development, so I decided to give it a try. I wish I'd installed this sooner, it'll make everyday work better in VS...especially now that I'm using VS almost exclusively for tSQL coding.</p>]]></content:encoded></item><item><title><![CDATA[Open science]]></title><description><![CDATA[<p>Can science get more open? <br>
I mean really in the open.</p>

<p>Peer reviewed publications came about as a way to disseminate and review knowledge. That's great but their time may have passed. <br>
I think a decent web platform can do all of that and more for science. Maybe the process</p>]]></description><link>http://blog.kaplon.us/open-science/</link><guid isPermaLink="false">f2698c0b-dedc-4ea9-91e9-e8323cc91ad8</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Tue, 18 Feb 2014 02:38:48 GMT</pubDate><content:encoded><![CDATA[<p>Can science get more open? <br>
I mean really in the open.</p>

<p>Peer reviewed publications came about as a way to disseminate and review knowledge. That's great but their time may have passed. <br>
I think a decent web platform can do all of that and more for science. Maybe the process of science can even be sped up at the same time. Does Moore's law apply to science?</p>

<p>If the goal is to publish peer reviewed and repeatable results, why is that delayed until the end of the process? <br>
If there were a wiki, a blog, a data API...really just a basic web publication platform, then the whole world can peer review and recreate results even as the science happens. Really, no one cares, but the cream would rise and like minded collaborators could more easily find each other.</p>

<p>Would it really be so bad for the masses to witness the real pursuit of knowledge (should they care to tune in)? It might benefit a few more people than those who can afford a subscription to the dead tree edition of New England Journal of Medicine.</p>

<p>What does the IT infrastructure look like in a typical lab?  Are there any easy wins for a standard/secure web interface over whatever on-site IT that's typical in a lab?  Where to start?...a few choice research projects <br>
would probably go a long way toward more general extrapolation...after all, this is pretty much how some of the open-source CMS platforms were born out of newsrooms.  What does the LHC use in the way of data management and <br>
collaboration? <br>
The web was invented by some guy at CERN who was hoping for a better way to share scientific documents.</p>

<p>The "file drawer effect" came up on a recent episode of my very own podcast, <a href="http://gtradio.net/alyt">At Least You're Trying</a>. <br>
I hadn't heard this term before, so my co-host had to explain to me that it's the pattern where non-splashy/non-sexy research is relegated to the file drawer instead going through the publication process. <br>
I would much rather take the file drawer effect and turn it on it's head; the entire world needs access to once giant internet file drawer.</p>

<p>Here's a step in the right direction: <br>
<a href="http://academictorrents.com/">Academic Torrents</a></p>

<p>Now we just need a snappy name... <br>
WWFD? <br>
WWF?...No, name collisions with wresting and wildlife. <br>
Global file drawer? <br>
I'll workshop it.</p>]]></content:encoded></item><item><title><![CDATA[Docker setup for containerized ghost blogs]]></title><description><![CDATA[<p>Toward the end of 2013, I was shopping around for some kind of system to use for my personal blog. The easy choice was (and probably still is) <a href="http://wordpress.org">WordPress</a>. I've never been one to do anything the easy way and I didn't want to deal with any of the PHP,</p>]]></description><link>http://blog.kaplon.us/docker-setup-for-containerized-ghost-blogs/</link><guid isPermaLink="false">04b44ca9-c0e8-4165-8dae-fb667a0b60e2</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Wed, 08 Jan 2014 16:50:00 GMT</pubDate><content:encoded><![CDATA[<p>Toward the end of 2013, I was shopping around for some kind of system to use for my personal blog. The easy choice was (and probably still is) <a href="http://wordpress.org">WordPress</a>. I've never been one to do anything the easy way and I didn't want to deal with any of the PHP, MySQL, or plug-in dependencies that come along with WordPress. Nor did I want any part of the frequent security patches required by the WordPress ecosystem.</p>

<p>I wanted a lighter and simpler system...hopefully one built using hipper technologies that I was curious to learn about. I've been using <a href="http://daringfireball.net/projects/markdown/syntax">markdown</a> for a few years, so static blog generators like <a href="http://jekyllrb.com/">Jekyll</a> were intriguing. The static site generators also fit in well with the minimal <a href="https://www.linode.com/?r=30991a143a3c99716fbc7fdcf81355338c4d2b64">Linode VPS</a> I was already using to run <a href="http://wiki.nginx.org">nginx</a> to serve the <a href="http://gtradio.net/alyt">At Least You're Trying Podcast</a> feed. I didn't last long with any of the Ruby-based options since <a href="http://rvm.io">RVM</a> would never cleanly install on my local PC (Linux Mint 13).</p>

<p>Since I could (still) use some JavaScript experience, I started looking into node.js-based static blog generators (<a href="http://jsantell.github.io/poet/">poet</a>, <a href="https://github.com/jnordberg/wintersmith#quick-start">wintersmith</a>, <a href="https://github.com/flatiron/blacksmith">blacksmith</a>). These were all too bleeding-edge and not very n00b-friendly, though. They all also suffer from the, "how would I explain this workflow if I were setting up a blog for someone who's never used the terminal or version control?" problem.</p>

<p>There was also another possibility based on node.js...<a href="http://ghost.org">ghost</a> had a successful kickstarter campaign and released a public beta sometime around October-2013. I was able to get ghost installed and running on my local system and I liked what I saw. Ghost makes for a less arcane workflow for non-programmers, while still being lightweight.</p>

<p>I was excited until I began reading tutorials on getting ghost running on my server. Did I mention that my server setup and admin experience are minimal? Well, I managed to render my precious VPS unbootable while trying to add some (probably over-kill) security changes prior to installing ghost. Linode support was quickly able to save my from my own stupidity. At that point, I gave up since it seemed out of my reach to be able to get all the node.js, ghost, and nginx configuration correct and stable.</p>

<h2 id="thecontainershipcomesin">The container ship comes in</h2>

<p>A few months go by and I start to hear and learn about <a href="https://www.docker.io/">Docker</a>. Nifty, lots of the benefits of virtual machines, but without all the performance overhead...something like BSD jails on Linux. The mental hamster wheel started creaking away once I saw what was possible with Docker manifest files and the <a href="https://index.docker.io/">Docker index</a>. Of course some neckbeard-angel had already created a dockerfile to reliably install node.js...some other wonderful individual even created one with a <a href="https://index.docker.io/u/dockerfile/ghost/">ghost installation</a>.</p>

<p>Ok, at that point I was itching to snap all of these pieces together and things went well at first. I saw that <a href="https://blog.linode.com/2014/01/03/docker-on-linode/">Linode had added support for Docker</a>, so I installed new kernels on my VPS and on my local PC. I got Docker installed and pulled my first Docker image. I built a ghost blog image from the files posted to the Docker index.</p>

<p>Then it was on to testing my new ghost container. When starting a container, <a href="http://docs.docker.io/en/latest/reference/commandline/cli/#run">Docker allows for a folder on the host file system to be mounted</a> in the container. The ghost container uses this so all ghost-related files (content, images, themes) can be stored separate from the container. Here was my main source of frustration. I wanted to be sure that all my content would survive if the container crashed, but stopping and running a new ghost container during testing would fail to bring back any uploaded images. The ghost container would also not recognize any changes to the ghost config.js file.</p>

<p>I fought with it and cursed at it and nearly gave up again, but at some point I'd gained enough bash scripting experience to see the problems with the setup bash file used by the ghost container. This was a great reason to play around on github a little, so I made <a href="https://github.com/jkaplon/ghost/compare/0.4.1_with_start_script_fixes">my own branch</a> of the ghost container repository and set about fixing things.</p>

<p>Update Feb-2014, similar fixes to my own have been made to the central <a href="https://github.com/dockerfile/ghost">dockerfile/ghost repository</a>. This is a great sanity check for myself, but it probably also means I missed out on getting my first accepted pull request.</p>

<p>This has proven to be a stable and performant setup. I'm using it for the <a href="http://gtradio.net/alyt">At Least You're Trying podcast website</a> and <a href="http://blog.kaplon.us">this very blog</a>. Running two node.js/ghost containers on my VPS with 1GB of RAM hasn't been a drama. The server usually shows about 30% RAM usage and there wasn't any notable performance hit for running the second container. It's doubtful any of my efforts will generate enough traffic to really load test this setup (not planning on being internet famous any time soon). Using one Docker container for each ghost blog has nicely enforced storing the content separately. Since ghost only currently supports a single admin log-in, separate container instances of ghost make even more sense.</p>

<p>I'm currently hoping to fully crash-proof the running containers <a href="http://docs.docker.io/en/latest/use/host_integration/">using upstart</a>, but at the moment the containers don't come back up after a full system reboot. As far as I can tell, I correctly followed the Docker upstart tutorial. If you have any ideas as to what I've done wrong, shoot me an answer on <a href="http://unix.stackexchange.com/questions/118579/why-doesnt-docker-container-start-at-boot-w-upstart-script-on-ubuntu-12-04">unix.stackexchange.com</a>.</p>]]></content:encoded></item><item><title><![CDATA[HTML5 DRM hubbub]]></title><description><![CDATA[<p>There's quite a bit of angst on the internet about Digital Rights Management functionality in the HTML5 specification:</p>

<ul>
<li><a href="http://hsivonen.fi/eme/">hsivonen.fi/eme/</a></li>
<li><a href="https://ameliaandersdotter.eu/2013/10/13/drmeme-html5-american-thing">ameliaandersdotter.eu/2013/10/13/drmeme-html5-american-thing</a></li>
<li><a href="https://brendaneich.com/2013/10/the-bridge-of-khazad-drm">brendaneich.com/2013/10/the-bridge-of-khazad-drm</a></li>
</ul>

<p>I think some of the outrage could have been avoided with a different sales pitch...</p>

<p>Wouldn't it be</p>]]></description><link>http://blog.kaplon.us/html5-drm-hubbub/</link><guid isPermaLink="false">cfe1e6d5-52e9-49ac-9ed2-631eb80ce95f</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Thu, 21 Nov 2013 15:03:00 GMT</pubDate><content:encoded><![CDATA[<p>There's quite a bit of angst on the internet about Digital Rights Management functionality in the HTML5 specification:</p>

<ul>
<li><a href="http://hsivonen.fi/eme/">hsivonen.fi/eme/</a></li>
<li><a href="https://ameliaandersdotter.eu/2013/10/13/drmeme-html5-american-thing">ameliaandersdotter.eu/2013/10/13/drmeme-html5-american-thing</a></li>
<li><a href="https://brendaneich.com/2013/10/the-bridge-of-khazad-drm">brendaneich.com/2013/10/the-bridge-of-khazad-drm</a></li>
</ul>

<p>I think some of the outrage could have been avoided with a different sales pitch...</p>

<p>Wouldn't it be nice to have a web-standard, secure content pipe between you and your users? <br>
Content producers could narrow-cast directly to audience members. Content middle-men would be cut out of the loop. You wouldn't need to depend on YouTube, Vimeo, or iTunes (for podcasts). Comments below your video would come from interested, paying customers instead of internet trolls. <br>
Of course, those hosted content options still exist for people who can't be bothered to host their own media or don't want to pay for the bandwidth. This seems like an opportunity for independent info-products and content producers.</p>

<p>Okay, maybe it's not a good thing for this spec to pushed by "big content" movie studios, but they're going to implement DRM somehow anyway. They already have Flash and Silverlight "solutions". I can only hope that a browser-implemented DRM scheme would cause fewer software crashes. The security patching cycle would probably also improve if it didn't fall on a single company to update a giant, crufty code-base. Does Microsoft even still officially support Silverlight?</p>

<p>Similarly, people are afraid of UEFI/secure-boot. There is much confusion about the secure-boot process and Microsoft's implementation (and de-facto role as gatekeeper). People should be worried about the potential loss of the ability to install another operating system on their hardware (the <a href="http://www.fsf.org">FSF</a> calls this "restricted boot"), but being able to sign and validate all code loaded during the boot process benefits all platforms.</p>

<p>Just like most powerful and flexible technologies, it can be used for good or evil; privacy or oppression. We shouldn't blame the tech.</p>

<p>Now, is everyone still angry?</p>

<p>01/28/2014 update, <br>
Hopefully <a href="http://berjon.com/blog/2014/01/yummy-drm.html">this article with good perspective</a> still applies. According to <a href="http://www.muleradio.net/thebigwebshow/109/">Big Web Show, episode 109</a>, Brendan Eich working on watermarking tech that might be more useful than DRM. Maybe we'll end up with a more enlightened technical implementation after all. It would be fun to see the entrenched content distributors cling to Silverlight while all the web angels migrate to something simpler.</p>]]></content:encoded></item><item><title><![CDATA[The Hungarian lives]]></title><description><![CDATA[<p>I'm currently working under an unexpected constraint:</p>

<p><a href="http://en.wikipedia.org/wiki/Hungarian_notation">Hungarian notation</a> for variable names in my database code.</p>

<p>Sure, I've written many lines of solid and readable code using Hungarian notation. VB6, VBA, and tSQL...it was previously company-standard for all DB code (and the data type prefixes were helpful in the</p>]]></description><link>http://blog.kaplon.us/the-mad-hungarian-lives-on/</link><guid isPermaLink="false">66e80e69-c519-4c07-b546-02896f1a825d</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Wed, 06 Nov 2013 02:47:00 GMT</pubDate><content:encoded><![CDATA[<p>I'm currently working under an unexpected constraint:</p>

<p><a href="http://en.wikipedia.org/wiki/Hungarian_notation">Hungarian notation</a> for variable names in my database code.</p>

<p>Sure, I've written many lines of solid and readable code using Hungarian notation. VB6, VBA, and tSQL...it was previously company-standard for all DB code (and the data type prefixes were helpful in the days before IntelliSense arrived in SSMS).</p>

<p>However, I was happy to leave this convention behind in favor of more descriptive variable names. So I tried to argue against it, but I just come across as someone who's being obstinate for no good reason.</p>

<p>Oh well, dttmToday+1 is just another dttmDay.</p>]]></content:encoded></item><item><title><![CDATA[masquerading as a neckbeard]]></title><description><![CDATA[<p>I recently had a fun conversation with some new acquaintances. It started when one person said they worked at a photography studio and we launched into a comparison between Adobe Photoshop and <a href="http://www.gimp.org/">the Gimp</a>. <br>
From there, a few more open-source software topics were covered with the other person who worked</p>]]></description><link>http://blog.kaplon.us/masquerading-as-a-neckbeard/</link><guid isPermaLink="false">c84d6a1f-6568-453d-be3e-0df370e2e236</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Thu, 12 Sep 2013 20:07:00 GMT</pubDate><content:encoded><![CDATA[<p>I recently had a fun conversation with some new acquaintances. It started when one person said they worked at a photography studio and we launched into a comparison between Adobe Photoshop and <a href="http://www.gimp.org/">the Gimp</a>. <br>
From there, a few more open-source software topics were covered with the other person who worked in IT-Operations.</p>

<p>I was then asked what programming languages I used at my day job...the reaction when I said 'VB.Net' was astounding. <br>
His reply was, 'I thought you were a unix guy!'. <br>
Oh well, it's nice to masquerade as a proper neck beard, even if I'm still stuck with VB.</p>]]></content:encoded></item><item><title><![CDATA[Three Visual Studio versions]]></title><description><![CDATA[<p>I've just received a new work machine. I'm now faced with configuring and checking functionality in 3 different versions of Visual Studio.</p>

<p><img src="https://draftin.com:443/images/9049?token=HgtRqcK7hX4pW9iQyGhigWuF0dQY6XSZWHZS9JLpGhFBkob2MuF9Cb6Vy0bl5OqEE0bsKOx125vra45SaUxYe1U" alt="Visual Studio start menu entries" title=""> </p>

<h2 id="whywouldyouneed3versionsofvisualstudioihearyouaskingwellbearwithme">"Why would you need 3 versions of Visual Studio?", I hear you asking. Well, bear with me...</h2>

<ul>
<li><p>Visual Studio 2008, needed for SQL-Server Integration Services (SSIS) development on</p></li></ul>]]></description><link>http://blog.kaplon.us/three-visual-studio-versions/</link><guid isPermaLink="false">ee868591-4710-4edf-8d31-e1a56279c58b</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Sun, 25 Aug 2013 15:07:00 GMT</pubDate><content:encoded><![CDATA[<p>I've just received a new work machine. I'm now faced with configuring and checking functionality in 3 different versions of Visual Studio.</p>

<p><img src="https://draftin.com:443/images/9049?token=HgtRqcK7hX4pW9iQyGhigWuF0dQY6XSZWHZS9JLpGhFBkob2MuF9Cb6Vy0bl5OqEE0bsKOx125vra45SaUxYe1U" alt="Visual Studio start menu entries" title=""> </p>

<h2 id="whywouldyouneed3versionsofvisualstudioihearyouaskingwellbearwithme">"Why would you need 3 versions of Visual Studio?", I hear you asking. Well, bear with me...</h2>

<ul>
<li><p>Visual Studio 2008, needed for SQL-Server Integration Services (SSIS) development on SQLServer-2008-R2.
Full stop. Nothing else can be used to work on SSIS packages for that version of SQL-Server. In fact, Visual Studio 2008 masquerading as Business Intelligence Development Studio (BIDS) installs with SQL-Server. I don't want to get started on the naming inconsistencies of these tools, that's a topic for another post. Also, Visual Studio 2008 needs a service pack and plug-in's so it can play nice with TFS-2012...another layer of complexity.</p></li>
<li><p>Visual Studio 2010, company-standard IDE for the foreseeable future.</p></li>
<li><p>Visual Studio 2012, the IDE shell had to be installed because VS-2010 couldn't delete or roll-back a file in TFS.  The full version was installed later, and I tried to switch to it, but there was no syntax highlighting for tSQL (deal-breaker). At least I was able to import my VS-2010 settings, although I had to re-do any custom keyboard mappings.</p></li>
</ul>

<p>Still, it's not as bad as the dark-old days when VB6 would conflict with any later versions of Visual Studio, or you couldn't remove a beta install of VS without basically re-installing the OS.  It's impressive (in a way) that 3 <br>
versions of this weighty IDE can live together in harmony on one PC. <br>
It's also rather silly that all of this is necessary.</p>

<p>As fiddly and arcane as vim can be, it can be a real boon when all your configuration and tweaking is encapsulated in one easily portable text file.</p>

<p>...Oh, hey, look! tSQL syntax highlighting has gotten fixed in VS-2012 at some point over the last few weeks. Maybe i can whittle this lot down to only two versions of Visual Studio.</p>

<p>09.05.2013 update, never mind...it's still 3 versions (at least for the rest of 2013). <br>
Apparently there are conflicts when checking in changes to .sln or .proj files among different versions of Visual Studio, so i'm stuck back on VS-2012 for a while.</p>]]></content:encoded></item><item><title><![CDATA[server admin foray]]></title><description><![CDATA[<p>I put down some money and finally switched on a VPS instance of my very own. Previously, I had played with a free-trial VPS and used it to borrow the BBC for a few hours. The setup for that operation was accomplished by following a <a href="http://garethpoole.com/bbc-iplayer-abroad-ubuntu-server/">blog post walk through</a>.</p>

<p>This</p>]]></description><link>http://blog.kaplon.us/server-admin-foray/</link><guid isPermaLink="false">ef55c9bb-1b83-4ec0-b9e3-5a807a9147a6</guid><dc:creator><![CDATA[Jody]]></dc:creator><pubDate>Tue, 09 Jul 2013 02:46:00 GMT</pubDate><content:encoded><![CDATA[<p>I put down some money and finally switched on a VPS instance of my very own. Previously, I had played with a free-trial VPS and used it to borrow the BBC for a few hours. The setup for that operation was accomplished by following a <a href="http://garethpoole.com/bbc-iplayer-abroad-ubuntu-server/">blog post walk through</a>.</p>

<p>This post involved simple firewall rule addition using <a href="https://help.ubuntu.com/community/UFW">ufw</a> and a bit of configuration with <a href="http://en.wikipedia.org/wiki/Squid_(software)">squid proxy</a>. It was all quite easy. I was familiar enough with Ubuntu, the command line, and vim to cruise through it and it was exhilirating.</p>

<p>This time around, I plan to keep the VPS running...I even paid for a year in advance. Apart from occasional BBC shenanigans, I want to use the server to host a personal blog, my silly podcast, and a few random websites and projects. I followed <a href="https://library.linode.com/securing-your-server/?r=30991a143a3c99716fbc7fdcf81355338c4d2b64">Linode's</a> security documentation more closely this time, which included the addition of some iptables rules. Now, when I tried to give the BBC setup another try, I got a connection timeout...d'oh.</p>

<p>I realized that the previous iptables rules were somehow trumping the ufw settings, even though ufw is built on top of iptables. So at 8pm on a weeknight, halfway through a burrito, I'm faced with trying to unpack the counter-intuitive syntax of iptables rules. It's certainly deeper into administration than I was planning to delve on my second day with the server.</p>

<p>Oh well, I'm now able to say that I have experience constructing basic iptables rules, so maybe there's hope for me yet.</p>]]></content:encoded></item></channel></rss>