<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>this metal sky</title>
    <link>http://www.thismetalsky.org/</link>
    <description>Recent content on this metal sky</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 17 Dec 2025 01:49:00 +0000</lastBuildDate>
    
        <atom:link href="http://www.thismetalsky.org/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>recent movies</title>
      <link>http://www.thismetalsky.org/2025/12/17/recent-movies/</link>
      <pubDate>Wed, 17 Dec 2025 01:49:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2025/12/17/recent-movies/</guid>
      <description>Don&#39;t Look Deeper (2022): Interesting series where the protagonist slowly discovers she isn&#39;t human, figures out how to deal with that (often badly), and then it all starts breaking down. Way more about people than future technology. Slow but pretty okay.
  Old Boy (2003): Guy gets kidnapped, then released after 15 years, and goes to find out who kidnapped him, presumably to kick their asses. Someone told me this is his favourite movie.</description>
    </item>
    
    <item>
      <title>recent movies</title>
      <link>http://www.thismetalsky.org/2025/02/20/recent-movies/</link>
      <pubDate>Thu, 20 Feb 2025 12:14:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2025/02/20/recent-movies/</guid>
      <description>Runaway (1984): I remember seeing this a few times in the 80&#39;s, it seems like it&#39;d be kinda bad but it&#39;s actually really good! Obviously the technology is not realistic, but it&#39;s an interesting take on &amp;quot;what if the robots revolt?&amp;quot; that still kinda holds up today. And Gene Simmons as a bad guy is pretty amusing.
  Cukoo (2024): I really don&#39;t dig a lot of horror, but this was pretty decent.</description>
    </item>
    
    <item>
      <title>recent movies</title>
      <link>http://www.thismetalsky.org/2024/06/17/recent-movies/</link>
      <pubDate>Mon, 17 Jun 2024 15:10:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2024/06/17/recent-movies/</guid>
      <description>In the Shadow of the Moon: Clever time travel thing. Kinda predictable, but that&#39;s not something you can avoid when you have an alternate timeline moving backward. Overall pretty good.
  Inventing Anna: I don&#39;t know if you&#39;ve ever heard of Anna Sorokin - I sure hadn&#39;t, but her story is pretty interesting. This telling is great so far - embelished surely, but it&#39;s much more drama than documentary.</description>
    </item>
    
    <item>
      <title>recent television</title>
      <link>http://www.thismetalsky.org/2022/02/25/recent-television/</link>
      <pubDate>Fri, 25 Feb 2022 15:46:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2022/02/25/recent-television/</guid>
      <description>The Magicians: I&#39;d started this some years ago but got bogged down after about 4 episodes, but now I&#39;ve watched it all, and it turns out it&#39;s actually pretty great! It&#39;s intentionally campy and silly often, but the characters are really well developed and interesting. It even had a reasonable ending!
  I Am Not Okay With This: Hilarious and awkward and sometimes really uncomfortable, I&#39;m laughing then cringing then on the edge of my seat.</description>
    </item>
    
    <item>
      <title>recent television</title>
      <link>http://www.thismetalsky.org/2021/11/14/recent-television/</link>
      <pubDate>Sun, 14 Nov 2021 15:20:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2021/11/14/recent-television/</guid>
      <description>Brand New Cherry Flavor: This is amazing. Also exceptionally disturbing and freaky and I don&#39;t even know what else. I kept finding myself wide-eyed and sitting up straight.
  The Order: College werewolves and witches battle, well, mostly each other. A bunch of the charaters are quite likable, while some of them are just so clueless you end up shouting at them to not be so stupid. Ultimately it was just okay.</description>
    </item>
    
    <item>
      <title>recent movies</title>
      <link>http://www.thismetalsky.org/2021/11/14/recent-movies/</link>
      <pubDate>Sun, 14 Nov 2021 15:10:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2021/11/14/recent-movies/</guid>
      <description>Space Sweepers: Campy and silly, in the vein of The Fifth Element - wow this was awesome!
  Cosmic Sin: Seriously, is Bruce Willis washed up enough to star in something this bad? Typical alien first contact then they kill us movie, with a bit of zombies mixed in.
  Beyond Skyline and Skylines: I started with Skylines because I didn&#39;t realize it was part of a series. There are a lot of concepts I really liked so I went back and watched the prequel once I realized it existed.</description>
    </item>
    
    <item>
      <title>Operations is not Developer IT</title>
      <link>http://www.thismetalsky.org/2021/09/12/Operations-is-not-Developer-IT/</link>
      <pubDate>Sun, 12 Sep 2021 18:42:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2021/09/12/Operations-is-not-Developer-IT/</guid>
      <description>I saw this great article the other day: Operations is not Developer IT. It&#39;s so true, I suggest anyone who works in the industry read it.</description>
    </item>
    
    <item>
      <title>Observability</title>
      <link>http://www.thismetalsky.org/2020/12/23/Observability/</link>
      <pubDate>Wed, 23 Dec 2020 08:30:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2020/12/23/Observability/</guid>
      <description>📉 Monitoring is for running and understanding other people&#39;s code (aka &amp;quot;your infrastructure&amp;quot;)
📈 Observability is for running and understanding your code -- the code you write, change and ship every day; the code that solves your core business problems.
That&#39;s 2021 for me right there. How about you?
(Quote from Charity Majors)</description>
    </item>
    
    <item>
      <title>R.I.P. instagram</title>
      <link>http://www.thismetalsky.org/2020/12/17/R.I.P.-instagram/</link>
      <pubDate>Thu, 17 Dec 2020 23:22:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2020/12/17/R.I.P.-instagram/</guid>
      <description>Right so regarding my previous post - I looked at a few options and I&#39;ve decided that I&#39;m just not going to play this game, and so I pulled down a bunch of the Instagram posts manually and hacked this up a bunch. At least it won&#39;t go away this way, but doing this manually isn&#39;t ideal.
I guess I should consider what to do with that. Maybe there&#39;s some other reasonable thing I could cross-post to or even just do an instagram-style post via my phone.</description>
    </item>
    
    <item>
      <title>instagram</title>
      <link>http://www.thismetalsky.org/2020/12/11/instagram/</link>
      <pubDate>Fri, 11 Dec 2020 12:15:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2020/12/11/instagram/</guid>
      <description>Well I guess Instagram finally shut down the API I was using to pull my posts for the sidebar on right of this website.
So my choices are now:
Jump through ridiculous hoops getting a Facebook developer account setup and using the Basic Display API - which means getting an actual Facebook account, something I&#39;ve been actively avoiding for years. Just remove the sidebar.  </description>
    </item>
    
    <item>
      <title>caddy</title>
      <link>http://www.thismetalsky.org/2020/04/26/caddy/</link>
      <pubDate>Sun, 26 Apr 2020 13:03:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2020/04/26/caddy/</guid>
      <description>As I discussed in my previous post, everyone should be running SSL now... but the hacks I talked about were a bit annoying. So I&#39;m trying out something new: Caddy.
Over the years I&#39;ve changed my web sites from entirely dynamically-generated template-based stuff in Perl and Python, into this one, which is completely static, generated by Hugo. So I don&#39;t really run anything overly-complicated in my Nginx config anymore.
I spent some time over this weekend converting this and my other sites to use Caddy, which handles 100% of the SSL certificate generation, and otherwise works just like a web server.</description>
    </item>
    
    <item>
      <title>let&#39;s encrypt</title>
      <link>http://www.thismetalsky.org/2020/02/06/lets-encrypt/</link>
      <pubDate>Thu, 06 Feb 2020 20:40:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2020/02/06/lets-encrypt/</guid>
      <description>These days, everyone should be using SSL to secure, well, everything. It used to be that SSL certificates were really expensive, but with free providers like Let&#39;s Encrypt, there&#39;s not much excuse anymore.
Well... sorta.
In theory this is really easy to do, and easy to automate. In practice, well, a lot of the tools just plain suck, or they&#39;re designed for the most basic use-case and the most commonly used DNS providers.</description>
    </item>
    
    <item>
      <title>vim and powerline</title>
      <link>http://www.thismetalsky.org/2020/01/24/vim-and-powerline/</link>
      <pubDate>Fri, 24 Jan 2020 11:51:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2020/01/24/vim-and-powerline/</guid>
      <description>Do you use Vim and Powerline? If so, you may have got this error message at some point, when using a Virtualenv:
Traceback (most recent call last): File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 4, in &amp;lt;module&amp;gt; ModuleNotFoundError: No module named &#39;powerline&#39; During handling of the above exception, another exception occurred: Traceback (most recent call last): File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 9, in &amp;lt;module&amp;gt; ModuleNotFoundError: No module named &#39;powerline&#39; An error occurred while importing powerline module. This could be caused by invalid sys.</description>
    </item>
    
    <item>
      <title>recent movies</title>
      <link>http://www.thismetalsky.org/2019/10/27/recent-movies/</link>
      <pubDate>Sun, 27 Oct 2019 01:00:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2019/10/27/recent-movies/</guid>
      <description>The Cloverfield Paradox: A sort of thriller/horror in a space station. Reminds me a bit of Event Horizon, which isn&#39;t a bad thing in general, but there just isn&#39;t much original here.
And then they went and tied this into the Cloverfield series, which makes absolutely no sense at all.
  Rotor DR1: This movie is actually a film-length cut of a web series, with a budget of $300k. Overall, it feels amateurish and unpolished, often disjointed, and doesn&#39;t flow very well.</description>
    </item>
    
    <item>
      <title>on haystacks</title>
      <link>http://www.thismetalsky.org/2019/10/09/on-haystacks/</link>
      <pubDate>Wed, 09 Oct 2019 13:10:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2019/10/09/on-haystacks/</guid>
      <description>Go doesn&#39;t have a built-in function for finding an object in a list. I found this in some code at work:
// Checks whether an element exists in a slice of integers func contains(haystack []int, needle int) bool { for _, n := range haystack { if needle == n { return true } } return false }  I&#39;m quite amused.</description>
    </item>
    
    <item>
      <title>Testing Hugo</title>
      <link>http://www.thismetalsky.org/2019/08/23/Testing-Hugo/</link>
      <pubDate>Fri, 23 Aug 2019 22:56:51 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2019/08/23/Testing-Hugo/</guid>
      <description>Right so, does this work?
I&#39;m using Hugo now. It&#39;s been... a bit of work. But the whole thing renders in 1.4 seconds, as opposed to the old Jekyll site which took 22.
While I was at this, I did some more moderninzing.
Little changes:
Post timestamps changed Posts are now using the HTML &amp;lt;article&amp;gt; element, complete with the &amp;lt;header&amp;gt;, &amp;lt;main&amp;gt;, and &amp;lt;footer&amp;gt; sections. Navigation bar uses the HTML &amp;lt;nav&amp;gt; element Tag list now uses &amp;lt;ul&amp;gt; and &amp;lt;li&amp;gt; I&#39;ve changed to using the CSS ::after pseudo-element to put the bracketry around the menu items and the items in tag lists.</description>
    </item>
    
    <item>
      <title>New Year&#39;s Mead</title>
      <link>http://www.thismetalsky.org/2019/05/05/New-Years-Mead/</link>
      <pubDate>Sun, 05 May 2019 17:45:56 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2019/05/05/New-Years-Mead/</guid>
      <description>In September, Rachyl and I made some mead:
10lb Wegman&#39;s clover honey 3lb Northern brewer basswood honey 1lb bee folks Butterbean honey 3 gal water 1 packet Lavin D47 yeast  Original gravity was 29.8 brix. The weird honey bill is mostly because it&#39;s what we had around, and could get really quickly. Same for the yeast - never used it before, we just went to the local shop and asked for whatever they had.</description>
    </item>
    
    <item>
      <title>Kubernetes Meetup at JW Player</title>
      <link>http://www.thismetalsky.org/2019/03/01/Kubernetes-Meetup-at-JW-Player/</link>
      <pubDate>Fri, 01 Mar 2019 10:41:00 +0000</pubDate>
      
      <guid>http://www.thismetalsky.org/2019/03/01/Kubernetes-Meetup-at-JW-Player/</guid>
      <description>At JW Player last night, we hosted the New York Kubernetes Meetup. It went very well, we had about 80 people, and hung out with pizza and beer.
And I presented! I talked about the deployment system we&amp;rsquo;ve been working on which allows developers to deploy applications onto our Kubernetes clusters.
Update: So there used to be a video here, but since I&amp;rsquo;ve left JWPlayer, that link is no loger active.</description>
    </item>
    
    <item>
      <title>Kubernetes Meetup at JW</title>
      <link>http://www.thismetalsky.org/2019/02/14/Kubernetes-Meetup-at-JW/</link>
      <pubDate>Thu, 14 Feb 2019 11:14:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2019/02/14/Kubernetes-Meetup-at-JW/</guid>
      <description>I&#39;m presenting at a Kubernetes Meetup, hosted at my company&#39;s office in New York City!</description>
    </item>
    
    <item>
      <title>Depdenency Hell</title>
      <link>http://www.thismetalsky.org/2018/10/19/Depdenency-Hell/</link>
      <pubDate>Fri, 19 Oct 2018 18:59:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/10/19/Depdenency-Hell/</guid>
      <description>Great article about software dependencies: Our Software Dependency Problem</description>
    </item>
    
    <item>
      <title>NYP to WAS: a commuter&#39;s guide</title>
      <link>http://www.thismetalsky.org/2018/10/19/NYP-to-WAS-a-commuters-guide/</link>
      <pubDate>Fri, 19 Oct 2018 18:59:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/10/19/NYP-to-WAS-a-commuters-guide/</guid>
      <description>So you&#39;re heading on a trip from NYC to Washington D.C. via train? Great! Here are some guidelines.
While in New York When walking down the street on your way to Penn Station, (ostensibly pulling your rolling luggage behind you), don&#39;t forget to make random direction changes and stops - you don&#39;t want the people behind you to know where you&#39;re headed. If you are traveling with companions, feel free to walk side-by-side - the streets are often wide enough for several people to stroll casually.</description>
    </item>
    
    <item>
      <title>command-line search language</title>
      <link>http://www.thismetalsky.org/2018/08/10/command-line-search-language/</link>
      <pubDate>Fri, 10 Aug 2018 09:22:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/08/10/command-line-search-language/</guid>
      <description>At work, I&#39;ve built a command-line client program for a number of microservices, which mostly do CRUD operations. I am looking to add search capabilities, but this is not as easy a task as I&#39;d thought.
Possibilites Let&#39;s call this client program boxer, because that&#39;s what it&#39;s actually named.
So using boxer, one can query a service to return an item in a database. Let&#39;s call this a thingy (not what it&#39;s really called).</description>
    </item>
    
    <item>
      <title>i do not consent</title>
      <link>http://www.thismetalsky.org/2018/07/28/i-do-not-consent/</link>
      <pubDate>Sat, 28 Jul 2018 00:20:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/07/28/i-do-not-consent/</guid>
      <description>So I saw this post from the EFF today, and it seems like a pretty clever idea.
But none of the images are quite the right size for my OnePlus 5T, so I pulled out GIMP and went to town. Here you go:
consent-oneplus5t.png logo-oneplus5t.png warrant-oneplus5t.png  These images are all 368x736, the 5T is 1080x2160, so this should be decent enough.
Enjoy!</description>
    </item>
    
    <item>
      <title>Taxi Maintenance Again</title>
      <link>http://www.thismetalsky.org/2018/07/10/Taxi-Maintenance-Again/</link>
      <pubDate>Tue, 10 Jul 2018 00:02:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/07/10/Taxi-Maintenance-Again/</guid>
      <description>So I&#39;ve been meaning to replace the old battery-backed RAM in my Taxi pinball machine for a while, and so when I had nothing better to do on Sunday, I started poking around to figure out what I needed.
Got that ordered, and since I was on a roll, I replaced a bunch of bulbs that were out.
And then I started testing the power supply power...
At this point I was making a day of it.</description>
    </item>
    
    <item>
      <title>static website generation with jekyll</title>
      <link>http://www.thismetalsky.org/2018/07/02/static-website-generation-with-jekyll/</link>
      <pubDate>Mon, 02 Jul 2018 10:18:00 -0400</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/07/02/static-website-generation-with-jekyll/</guid>
      <description>So in an earlier post I mentioned I&amp;rsquo;d be rebuilding all of my dynamically generated website stuff with a static generator. Still doing that, but now I&amp;rsquo;m using Jekyll.
Mostly, I decided I just wouldn&amp;rsquo;t re-invent the wheel.
Some tricks The posts tree That tree on the left there - that&amp;rsquo;s generated with a method similar to in this blog post, and uses jquery.treeview at the moment (must get around to updating that).</description>
    </item>
    
    <item>
      <title>A test post</title>
      <link>http://www.thismetalsky.org/2018/07/01/A-test-post/</link>
      <pubDate>Sun, 01 Jul 2018 20:26:00 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/07/01/A-test-post/</guid>
      <description>Hi, this is a test post. I&#39;m arguing with the tree on the side. Some useful links which discuss ways to do this:
http://epsi-rns.github.io/webdev/2016/06/09/jekyll-post-archives-without-plugin.html http://denewout.github.io/2015/12/12/archive.html https://stackoverflow.com/questions/28144178/jekyll-liquid-number-of-posts-by-month  </description>
    </item>
    
    <item>
      <title>bunch of links</title>
      <link>http://www.thismetalsky.org/2018/01/31/bunch-of-links/</link>
      <pubDate>Wed, 31 Jan 2018 00:15:00 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/01/31/bunch-of-links/</guid>
      <description>Couple of links to stuff I&amp;rsquo;ve been working with recently.
arrow A really nice Python date library.
packagetracker A fork of another Python library I tried to contribute to, but that the author has basically abandoned.
IEX Developer Platform Rather nice web API for obtaining real-time stock quotes.
Envoy Full-featured and highly-performant distributed reverse proxy engine. Not sure how I missed this one before&amp;hellip; nor why I&amp;rsquo;m still using Amazon&amp;rsquo;s ELBs now.</description>
    </item>
    
    <item>
      <title>rebuilding things</title>
      <link>http://www.thismetalsky.org/2018/01/30/rebuilding-things/</link>
      <pubDate>Tue, 30 Jan 2018 23:05:00 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2018/01/30/rebuilding-things/</guid>
      <description>Recently I decided it&amp;rsquo;s about time to retire the ancient server that has been running my website (and mail and dns and a bunch of other things) - It&amp;rsquo;s a Northwood Pentium 4 Xeon from 2002, the kind with Hyperthreading. Running Linux 3.7.10. 32-bit.
Yes, that&amp;rsquo;s old.
Rather than upgrade, I&amp;rsquo;m probably moving all of this somewhere else, likely a cheap VPS somewhere&amp;hellip; and since there&amp;rsquo;s a whole bunch of really old Perl running things here&amp;hellip; I&amp;rsquo;ve been doing some rewriting.</description>
    </item>
    
    <item>
      <title>bytiness</title>
      <link>http://www.thismetalsky.org/2017/01/03/bytiness/</link>
      <pubDate>Tue, 03 Jan 2017 09:53:50 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2017/01/03/bytiness/</guid>
      <description>Coworker Greg said something about the &amp;quot;bytiness&amp;quot; of files, when he was talking about their sizes. He was talking about file sizes, but my mind wandered a little bit down the rabbit hole of defining &amp;quot;bytiness&amp;quot; clearly.
So here&#39;s my interpretation of what that means, implemented in Go. Because sometimes I like Go. No, really.</description>
    </item>
    
    <item>
      <title>mirroring http traffic</title>
      <link>http://www.thismetalsky.org/2016/03/09/mirroring-http-traffic/</link>
      <pubDate>Wed, 09 Mar 2016 11:59:13 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2016/03/09/mirroring-http-traffic/</guid>
      <description>Today I needed to figure out how to mirror 100% of inbound HTTP/HTTPS traffic to a second cluster of backend servers, whilst not disrupting the production traffic going to the primary cluster.
There&#39;s lots of tools to do things like this, for example duplicator and teeproxy and parallel-proxy. But those are all &amp;quot;code I found on the internet&amp;quot; and possibly questionable, and in some cases, written in node.js, which I don&#39;t know if I consider &amp;quot;mature&amp;quot; or &amp;quot;robust&amp;quot; enough for production traffic.</description>
    </item>
    
    <item>
      <title>hacker kangaroo</title>
      <link>http://www.thismetalsky.org/2014/10/15/hacker-kangaroo/</link>
      <pubDate>Wed, 15 Oct 2014 22:17:03 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/10/15/hacker-kangaroo/</guid>
      <description>Building on what Stephen said in his post When is a Martini Not a Martini, I have decided to name a drink.
Some time ago (quite some time indeed), I worked at Federal Express as a box thrower. I mean, package handler. Make sure you pack well, trust me. Anyway, I saw a lot of boxes. At one point, I noticed a box containing Triple Eight Vodka. Being a fan of such things, I was curious, and at some point later I had the chance to try this.</description>
    </item>
    
    <item>
      <title>exploited</title>
      <link>http://www.thismetalsky.org/2014/07/09/exploited/</link>
      <pubDate>Wed, 09 Jul 2014 10:44:04 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/07/09/exploited/</guid>
      <description>Fun, I just got hit by this flaw in ElasticSearch.</description>
    </item>
    
    <item>
      <title>always handle errors</title>
      <link>http://www.thismetalsky.org/2014/05/03/always-handle-errors/</link>
      <pubDate>Sat, 03 May 2014 20:31:47 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/05/03/always-handle-errors/</guid>
      <description>I made this pull request but the author of the library thinks that not bothering to check HTTP status codes is acceptable.
So my code goes from:
request_token, request_token_secret = self.oauth.get_request_token(method=&amp;#34;POST&amp;#34;) auth_token = self.oauth.get_access_token(request_token, request_token_secret,method=&amp;#34;POST&amp;#34;) self.session = self.oauth.get_session(auth_token) To:
from rauth.service import process_token_request from rauth.utils import parse_utf8_qsl rsp = self.oauth.get_raw_request_token(method=&amp;#34;POST&amp;#34;) rsp.raise_for_status() request_token, request_token_secret = process_token_request( rsp, parse_utf8_qsl, &amp;#34;oauth_token&amp;#34;, &amp;#34;oauth_token_secret&amp;#34;) rsp = self.oauth.get_raw_access_token(request_token, request_token_secret, method=&amp;#34;POST&amp;#34;) rsp.raise_for_status() auth_token = process_token_request(rsp, parse_utf8_qsl, &amp;#34;oauth_token&amp;#34;, &amp;#34;oauth_token_secret&amp;#34;) self.</description>
    </item>
    
    <item>
      <title>bug or feature?</title>
      <link>http://www.thismetalsky.org/2014/04/29/bug-or-feature/</link>
      <pubDate>Tue, 29 Apr 2014 21:25:47 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/04/29/bug-or-feature/</guid>
      <description>I&amp;rsquo;ve been writing an API for a little project I&amp;rsquo;ve been working on for a while, and in searching for a not-horrible way to do OAuth1 authentication, I actually found a Python library that doesn&amp;rsquo;t suck.
Of course, it&amp;rsquo;s not perfect. I noticed today that it doesn&amp;rsquo;t actually handle HTTP error responses - it doesn&amp;rsquo;t even check the return code at all, just assumes that any response it&amp;rsquo;s given will be parseable.</description>
    </item>
    
    <item>
      <title>you guessed it - another bug</title>
      <link>http://www.thismetalsky.org/2014/04/25/you-guessed-it-another-bug/</link>
      <pubDate>Fri, 25 Apr 2014 00:37:27 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/04/25/you-guessed-it-another-bug/</guid>
      <description>Found another bug and made a pull request - this time in the &amp;lsquo;rauth&amp;rsquo; library, which does OAuth in a reasonable sane way.
Except for this issue - I still have no idea why they&amp;rsquo;re trying to parse the OAuth response with a utility used for parsing HTTP requests, but hey, I guess if it works for them, fine. For me though, I need to replace their use of parse_utf8_qsl(s) with json.</description>
    </item>
    
    <item>
      <title>yet another bugfix</title>
      <link>http://www.thismetalsky.org/2014/04/10/yet-another-bugfix/</link>
      <pubDate>Thu, 10 Apr 2014 15:24:22 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/04/10/yet-another-bugfix/</guid>
      <description>Another bugfix for s3cmd.</description>
    </item>
    
    <item>
      <title>bugfixin</title>
      <link>http://www.thismetalsky.org/2014/03/25/bugfixin/</link>
      <pubDate>Tue, 25 Mar 2014 10:37:59 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/03/25/bugfixin/</guid>
      <description>Bugfix for s3cmd - some issues with command-line arguments not working when I needed them to.</description>
    </item>
    
    <item>
      <title>RSS alert feed bot</title>
      <link>http://www.thismetalsky.org/2014/03/11/RSS-alert-feed-bot/</link>
      <pubDate>Tue, 11 Mar 2014 17:28:49 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/03/11/RSS-alert-feed-bot/</guid>
      <description>Today I created a program to pull data from the RSS feeds our service vendors use for alerts, and either log, email, or instant message (we use Hipchat) to various support groups.
AND, I open sourced it on github. Enjoy!</description>
    </item>
    
    <item>
      <title>rom</title>
      <link>http://www.thismetalsky.org/2014/02/27/rom/</link>
      <pubDate>Thu, 27 Feb 2014 22:16:53 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/02/27/rom/</guid>
      <description>More python 3.3 porting, this time an interesting Redis ORM.
EDIT: Changed my mind, someone else has started a 3.3 port which looks like a way better method: mayfield/rom.</description>
    </item>
    
    <item>
      <title>slow as molasses</title>
      <link>http://www.thismetalsky.org/2014/02/27/slow-as-molasses/</link>
      <pubDate>Thu, 27 Feb 2014 13:43:24 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/02/27/slow-as-molasses/</guid>
      <description>Nearly 2 years to the day after I submitted this issue with the &amp;lsquo;draw9patch&amp;rsquo; tool in the Android SDK to Google, the issue is still open.
I only mention this because it seems the owner of the ticket has changed today.
Way to go, Google.</description>
    </item>
    
    <item>
      <title>mySQL to PostgreSQL data</title>
      <link>http://www.thismetalsky.org/2014/02/11/mySQL-to-PostgreSQL-data/</link>
      <pubDate>Tue, 11 Feb 2014 16:19:36 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/02/11/mySQL-to-PostgreSQL-data/</guid>
      <description>I&amp;rsquo;m trying to pitch changing to PostgreSQL at work, so I had to figure this out today.
To export:
for i in table1 table2 ; do mysql --batch -e &amp;#34;SELECT * FROM $i&amp;#34; &amp;gt; $i.csv done To import:
for f in *.csv; do TABLE=${f%.*} tail -n +2 $f | \  sed -e &amp;#39;s/\r/\\r/g&amp;#39; \  -e &amp;#39;s/\\0//g&amp;#39; \  -e &amp;#39;s/0000-00-0000:00:00/NULL/g&amp;#39;| \  iconv -t &amp;#34;utf-8&amp;#34; -f &amp;#34;utf-8&amp;#34; -c | \  psql -c &amp;#34;COPY \&amp;#34;$TABLE\&amp;#34; FROM stdin WITH NULL &amp;#39;NULL&amp;#39;&amp;#34; done Note the sed command to remove backslash-zero - as this is an escaped dump, that will be converted into a null character, which is not allowed in a string.</description>
    </item>
    
    <item>
      <title>openswan sucks</title>
      <link>http://www.thismetalsky.org/2014/01/09/openswan-sucks/</link>
      <pubDate>Thu, 09 Jan 2014 16:33:47 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/01/09/openswan-sucks/</guid>
      <description>Right so in the previous article I set up an IPSec VPN between Openswan and OpenBSD&amp;rsquo;s PF. The issue with it is that any time the OpenBSD end restarted, the Openswan end had no idea this occurred, and quit working with no notification of any sort. And just running ipsec auto --down $conn; ipsec auto --up $conn didn&amp;rsquo;t work, it actually created an additional flow and SAD on the OpenBSD side, and the tunnel wouldn&amp;rsquo;t become active.</description>
    </item>
    
    <item>
      <title>OpenBSD VPN to Linux in an Amazon VPC</title>
      <link>http://www.thismetalsky.org/2014/01/07/OpenBSD-VPN-to-Linux-in-an-Amazon-VPC/</link>
      <pubDate>Tue, 07 Jan 2014 16:31:05 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2014/01/07/OpenBSD-VPN-to-Linux-in-an-Amazon-VPC/</guid>
      <description>This article is a great start on how to connect two VPCs using Linux and OpenSWAN. I followed it, but then I also needed to connect my OpenBSD office router. Set up the VPC side the same way (except for the changes below).
Addresses
 Office router eternal address: 1.2.3.4 Office internal subnet: 192.168.1.0/24 VPC gateway instance address: 5.6.7.8 AWS VPC subnet: 10.1.0.0/24  OpenBSD /etc/ipsec.conf:
ike esp from 10.1.0.0/24 to 192.</description>
    </item>
    
    <item>
      <title>Google you little...</title>
      <link>http://www.thismetalsky.org/2013/10/28/Google-you-little.../</link>
      <pubDate>Mon, 28 Oct 2013 21:16:44 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/10/28/Google-you-little.../</guid>
      <description>I see the Google plus article format returned by their Python API has changed again. You will note the sidebar over on the right there only shows images and no articles now. I&amp;rsquo;m getting really tired of fixing this every month.
Probably I&amp;rsquo;ll just not bother soon, and remove that whole sidebar altogether.</description>
    </item>
    
    <item>
      <title>phones, again</title>
      <link>http://www.thismetalsky.org/2013/07/09/phones-again/</link>
      <pubDate>Tue, 09 Jul 2013 16:13:01 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/07/09/phones-again/</guid>
      <description>Phone #4 had a broken USB port over the weekend.
Phone #5 arrived new-in-box - this is a nice change. I&amp;rsquo;m tired of doing this.</description>
    </item>
    
    <item>
      <title>whoa python iterators buffer</title>
      <link>http://www.thismetalsky.org/2013/06/21/whoa-python-iterators-buffer/</link>
      <pubDate>Fri, 21 Jun 2013 13:01:47 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/06/21/whoa-python-iterators-buffer/</guid>
      <description>So I&amp;rsquo;ve been using this code in a few programs at work:
p = subprocess.Popen(...) for line in p.stdout.readline(): ... print(line) It turns out there&amp;rsquo;s a bunch of output buffering going on here. You could put a sys.stdout.flush() after that print, but it won&amp;rsquo;t help.
The iterator buffers. Do this:
p = subprocess.Popen(...) while True: line = p.stdout.readline() if not line: break --- print(line) Et violà! No buffering.</description>
    </item>
    
    <item>
      <title>fun with phones and quality control</title>
      <link>http://www.thismetalsky.org/2013/06/14/fun-with-phones-and-quality-control/</link>
      <pubDate>Fri, 14 Jun 2013 12:41:58 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/06/14/fun-with-phones-and-quality-control/</guid>
      <description>Phone #1: my fault, I cracked the screen. Oddly though, I noticed the phone audio quality was kinda degraded too&amp;hellip;
Phone #2: first replacement. It was plagued with phantom touches at the upper-right corner of the screen (portrait mode), which would start about 10-30 seconds after unlocking it. Very frustrating.
Phone #3: this one seems to be full of dust in the upper-right corner of the screen (location coincidence) - enough that it&amp;rsquo;s difficult to see the battery indicator and clock when not in perfect light, and enough that the proximity sensor doesn&amp;rsquo;t function.</description>
    </item>
    
    <item>
      <title>nginx bug</title>
      <link>http://www.thismetalsky.org/2013/05/07/nginx-bug/</link>
      <pubDate>Tue, 07 May 2013 13:13:03 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/05/07/nginx-bug/</guid>
      <description>There is a bug in nginx - patch your daemon or implement this workaround.</description>
    </item>
    
    <item>
      <title>Python 3 porting</title>
      <link>http://www.thismetalsky.org/2013/03/07/Python-3-porting/</link>
      <pubDate>Thu, 07 Mar 2013 12:08:52 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/03/07/Python-3-porting/</guid>
      <description>Someone finally got me into the idea of using Python 3.x, so I started looking at my current projects, and picked one to test with. This resulted in me having to port a pretty major library, python-rrdtool. The trick about this is that RRDTool is a C library, so the Python module is an extension module, written in C.
And of course, strings and unicode are different from Python 2.x to 3.</description>
    </item>
    
    <item>
      <title>more bugs</title>
      <link>http://www.thismetalsky.org/2013/02/06/more-bugs/</link>
      <pubDate>Wed, 06 Feb 2013 10:22:17 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2013/02/06/more-bugs/</guid>
      <description>JWZ&amp;rsquo;s post today is awesome. I agree with him, far too many bugs are being ignored and that just sucks for us users. Especially when they get ignored for a very long time. When did we stop being good software engineers?</description>
    </item>
    
    <item>
      <title>a JSON REST trick</title>
      <link>http://www.thismetalsky.org/2012/12/21/a-JSON-REST-trick/</link>
      <pubDate>Fri, 21 Dec 2012 12:45:14 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/12/21/a-JSON-REST-trick/</guid>
      <description>So I&amp;rsquo;m doing some REST stuff with SQLAlchemy classes, and I needed a simple way to dump the objects to JSON. This base class will convert an object to a dict, and has some options for funny fields and such.
You may (will) want to use a custom JSON encoder (see simplejson docs) to convert some of the data types, like datetime.datetime in particular.
It&amp;rsquo;s certainly not ideal, in particular the isinstance() call, but it works at the moment for what I&amp;rsquo;m doing.</description>
    </item>
    
    <item>
      <title>an ugly perl regex trick</title>
      <link>http://www.thismetalsky.org/2012/10/26/an-ugly-perl-regex-trick/</link>
      <pubDate>Fri, 26 Oct 2012 11:21:10 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/10/26/an-ugly-perl-regex-trick/</guid>
      <description>I haven&amp;rsquo;t been doing a lot of perl lately, but a lot of my stuff at work is still perl, so every now and then I have to do some maintenance or add new features. Today I was working on new features.
One issue with perl is that there&amp;rsquo;s no way to get an array of regular expression matches without building it yourself in a really ugly way. I had a situation where I was getting a &amp;lsquo;1&amp;rsquo; returned in array of match captures when doing this:</description>
    </item>
    
    <item>
      <title>controlling laptop screen brightness</title>
      <link>http://www.thismetalsky.org/2012/09/26/controlling-laptop-screen-brightness/</link>
      <pubDate>Wed, 26 Sep 2012 12:19:05 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/09/26/controlling-laptop-screen-brightness/</guid>
      <description>I got a new laptop. More on that later, perhaps.
This laptop doesn&amp;rsquo;t have hardware controls for the screen brightness, it&amp;rsquo;s done via software. In linux, this is done via poking at stuff in /sys.
So to make my life easier, I wrote a little Python script to do it in a sane way. I do a similar thing for the keyboard backlight, but that only has 3 levels of brightness, so the math is much easier.</description>
    </item>
    
    <item>
      <title>damn you adobe</title>
      <link>http://www.thismetalsky.org/2012/09/17/damn-you-adobe/</link>
      <pubDate>Mon, 17 Sep 2012 13:04:50 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/09/17/damn-you-adobe/</guid>
      <description>Today I went to Google Play Books to purchase Charles Stross&#39; &amp;ldquo;Laundry&amp;rdquo; book &amp;ldquo;The Apocalypse Codex&amp;rdquo;.
I was thwarted by Adobe Digital Editions.
Clearly Adobe don&amp;rsquo;t want me to read this book. Or perhaps it&amp;rsquo;s Penguin Books.
Google send you a .acsm file, which Adobe Digital Editions trades for the .epub you actually purchased, after doing the DRM thing. In my case, the DRM step didn&amp;rsquo;t work, no matter which way I did it.</description>
    </item>
    
    <item>
      <title>systemd, I want to like you</title>
      <link>http://www.thismetalsky.org/2012/08/29/systemd-I-want-to-like-you/</link>
      <pubDate>Wed, 29 Aug 2012 11:33:58 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/08/29/systemd-I-want-to-like-you/</guid>
      <description>So I&amp;rsquo;m working with Fedora 17 lately, which uses systemd. I really want to like it, there&amp;rsquo;s a lot of good things here, especially the ability to auto- restart dead services, which I had been using daemontools for.
The issue is, systemd doesn&amp;rsquo;t quite seem ready for production use, despite being adopted by various Linux distributions.
I just spent some time this morning trying to work out why some NFS mounts configured in /etc/fstab would mount, but others wouldn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>fixin&#39; perl things</title>
      <link>http://www.thismetalsky.org/2012/07/17/fixin-perl-things/</link>
      <pubDate>Tue, 17 Jul 2012 14:07:14 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/07/17/fixin-perl-things/</guid>
      <description>I use Finance::Currency::Convert::XE for the old perl version of an IRC bot, and recently xe.com updated their website, which broke XE.pm. This patch fixes it. XE.pm.diff
UPDATE: I submitted this as a bug, and it got merged into version 0.21:
bug #78433</description>
    </item>
    
    <item>
      <title>must go faster</title>
      <link>http://www.thismetalsky.org/2012/07/03/must-go-faster/</link>
      <pubDate>Tue, 03 Jul 2012 11:33:52 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/07/03/must-go-faster/</guid>
      <description>So I&amp;rsquo;ve got faster internets now. I just upgraded to a DOCSIS 3.0 cable modem (free) and now I&amp;rsquo;m getting 60Mbps downstream and 8Mbps upstream. Go ahead, you can be jealous.
Back in 2001, I bought a Soekris net4501 single-board computer, to use as my DSL router. Back then, I had a 1.5Mbps connection, so the net4501 was fine. Now though, it can&amp;rsquo;t sustain more than about 12Mbps, so it&amp;rsquo;s got to go.</description>
    </item>
    
    <item>
      <title>in the queueueueueueue</title>
      <link>http://www.thismetalsky.org/2012/06/12/in-the-queueueueueueue/</link>
      <pubDate>Tue, 12 Jun 2012 16:53:14 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/06/12/in-the-queueueueueueue/</guid>
      <description>Recently, I&amp;rsquo;ve been playing with message queue-based interprocess communication in Python. I&amp;rsquo;ve got an application idea which uses a client / worker-pool distributed processing concept, and wanted to test out a few of the options available.
Tested libraries/services include:
 0MQ Celery Apache Zookeeper Pika and RabbitMQ  Yes, I know that ZooKeeper isn&amp;rsquo;t really an MQ, but it&amp;rsquo;s pretty easy to implement one with it.
0MQ 0MQ is exactly what they say: &amp;ldquo;sockets on steroids&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>again with the code fixing</title>
      <link>http://www.thismetalsky.org/2012/05/03/again-with-the-code-fixing/</link>
      <pubDate>Thu, 03 May 2012 18:33:26 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/05/03/again-with-the-code-fixing/</guid>
      <description>Time for an update to feedformatter. It seems that the latest ElementTree (1.3.0) does things much differently than the 1.2.6 I&amp;rsquo;d been using before.
This change updates my &amp;ldquo;CDATA hack&amp;rdquo; and seems to work on both versions now.
See also my response at StackOverflow.</description>
    </item>
    
    <item>
      <title>pong is not a physics problem</title>
      <link>http://www.thismetalsky.org/2012/03/28/pong-is-not-a-physics-problem/</link>
      <pubDate>Wed, 28 Mar 2012 10:13:08 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/03/28/pong-is-not-a-physics-problem/</guid>
      <description>So my friend Don has been learning iPhone/iPad programming lately, and he decided to implement a pong game to learn how to do game and graphics programming. He&amp;rsquo;d done this before, years ago in DOS, which makes it a good task to learn the new API.
He kept showing me code&amp;hellip; and of course that got me thinking.
So I put together a quick pong demo for Android using AndEngine and the box2d physics engine.</description>
    </item>
    
    <item>
      <title>And here is a test program</title>
      <link>http://www.thismetalsky.org/2012/03/20/And-here-is-a-test-program/</link>
      <pubDate>Tue, 20 Mar 2012 10:42:05 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/03/20/And-here-is-a-test-program/</guid>
      <description>I just whipped up a little multitouch bug tester program for Android. As noted in my previous post, lots of Android phones running 2.3.7 and earlier have buggy multitouch. In this example, I show the pointers (up to 5) with pointer numbers. You should be able to see at least two, and if the bug is not present, they should work properly. If you have the bug, you&amp;rsquo;ll notice 1 and 2 swapping back and forth as you touch 1, touch 2, lift 1, then tap 1.</description>
    </item>
    
    <item>
      <title>wtf android multitouch</title>
      <link>http://www.thismetalsky.org/2012/03/03/wtf-android-multitouch/</link>
      <pubDate>Sat, 03 Mar 2012 10:48:25 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/03/03/wtf-android-multitouch/</guid>
      <description>This blog is really starting to seem like a rant about bugs. Today&amp;rsquo;s is dealing with multitouch on Android. My conclusions:
 Android 3.0+ handles multitouch almost perfectly, and supports multiple pointers. All devices I&amp;rsquo;ve tested have handled 4 pointers. Android 2.x (I&amp;rsquo;m testing with 2.3.5 and 2.3.7) sometimes works and sometimes doesn&amp;rsquo;t, it seems to depend on hardware.  I have a Motorola Droid2, some friends have T-Mobile G2&amp;rsquo;s, and another friend has a HTC Evo something-or-rather.</description>
    </item>
    
    <item>
      <title>bugs everywhere</title>
      <link>http://www.thismetalsky.org/2012/02/24/bugs-everywhere/</link>
      <pubDate>Fri, 24 Feb 2012 16:12:49 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/02/24/bugs-everywhere/</guid>
      <description>Since I seem to be logging my Google bug reports here, I&amp;rsquo;ll add one to the list. Android bug 25936 - &amp;ldquo;draw9patch should start file-&amp;gt;open in the current directory, or the last used directory.&amp;rdquo;
Oddly enough, this bug was actually looked at the day after I submitted it, unlike most of my other bugs which seem to be completely ignored for months.</description>
    </item>
    
    <item>
      <title>quit tryin&#39; to be clever</title>
      <link>http://www.thismetalsky.org/2012/02/22/quit-tryin-to-be-clever/</link>
      <pubDate>Wed, 22 Feb 2012 16:16:51 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/02/22/quit-tryin-to-be-clever/</guid>
      <description>I was trying to be clever, using the filename portion of the image URLs fed by Plus for the thumbnail images. Yeah, should know better. Now I&amp;rsquo;m just generating a filename from a UUID, ignoring what the Plus service provides.
So the images are showing up in the right column again. Huzzah!</description>
    </item>
    
    <item>
      <title>so tired of you</title>
      <link>http://www.thismetalsky.org/2012/02/16/so-tired-of-you/</link>
      <pubDate>Thu, 16 Feb 2012 16:55:24 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/02/16/so-tired-of-you/</guid>
      <description>Google, I&amp;rsquo;m getting really tired of you.
The perceptive reader will note that some of the images in the G+ column at the right there are now broken. I haven&amp;rsquo;t changed anything in the code, so it&amp;rsquo;s definitely something on Google&amp;rsquo;s side.
I&amp;rsquo;m really tempted to just remove that entire G+ feed and be done with it, it&amp;rsquo;s far more hassle than it&amp;rsquo;s worth.
I have a similar issue at work: I have been trying to get people to pick a single calendar system, and since our email is done via gmail now, we figured that Google Calendar is the answer.</description>
    </item>
    
    <item>
      <title>The stars at night</title>
      <link>http://www.thismetalsky.org/2012/01/11/The-stars-at-night/</link>
      <pubDate>Wed, 11 Jan 2012 14:49:57 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/01/11/The-stars-at-night/</guid>
      <description>I&amp;rsquo;ve been working on an Android program which uses 2D graphics over the past few days, and since it&amp;rsquo;s always nice to have sample code to start from, I dug up my old Android starfield simulation.
I wrote this thing back in 2008, not that long after Android first came out, as an introduction to doing 2D graphics. I&amp;rsquo;ve written starfields before, first in C (and modeX) back in 1996, then in Flash&amp;rsquo;s ActionScript around 2002.</description>
    </item>
    
    <item>
      <title>selecting sftp URLs in URxvt</title>
      <link>http://www.thismetalsky.org/2012/01/02/selecting-sftp-URLs-in-URxvt/</link>
      <pubDate>Mon, 02 Jan 2012 17:58:08 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2012/01/02/selecting-sftp-URLs-in-URxvt/</guid>
      <description>Add this to your .Xresources:
&amp;gt; URxvt.selection.pattern-0: ^(sftp://[^ ]+)\ Note that there&amp;rsquo;s a space at the end of the line.</description>
    </item>
    
    <item>
      <title>building blocks</title>
      <link>http://www.thismetalsky.org/2011/12/21/building-blocks/</link>
      <pubDate>Wed, 21 Dec 2011 21:21:26 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/12/21/building-blocks/</guid>
      <description>I was reading an article today, a comparison of application life-cycles in Windows Phone 7 and Android, and while the article is for the most part correct, many of the statements are made in a slightly misleading manner. After a bit of pondering, I realized why this is.
Imagine that we have two children, Alice and Bob, who have a bag of 100 LEGO blocks. They&amp;rsquo;re building small houses.
Logical process Initially, Alice and Bob each take half of the blocks and build a house.</description>
    </item>
    
    <item>
      <title>Really, I just wanted a cup of tea</title>
      <link>http://www.thismetalsky.org/2011/12/06/Really-I-just-wanted-a-cup-of-tea/</link>
      <pubDate>Tue, 06 Dec 2011 15:11:24 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/12/06/Really-I-just-wanted-a-cup-of-tea/</guid>
      <description>I&amp;rsquo;ve just made a commit to webob, a Python library which &amp;ldquo;provides wrappers around the WSGI request environment, and an object to create WSGI responses&amp;rdquo; (according to the webob website).
I admit that this is based solely on wanting to return &amp;ldquo;I&amp;rsquo;m a teapot&amp;rdquo; from a Pyramid application, but it does make sense to support arbitrary HTTP response codes as well.</description>
    </item>
    
    <item>
      <title>Fixing stuff again</title>
      <link>http://www.thismetalsky.org/2011/12/01/Fixing-stuff-again/</link>
      <pubDate>Thu, 01 Dec 2011 23:50:18 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/12/01/Fixing-stuff-again/</guid>
      <description>I&amp;rsquo;ve been messing with building REST APIs in Pyramid, and one thing that lacking was the ability to send HTTP error messages to the client as JSON objects. Pyramid only had support for HTML or plain text, neither of which is easy to parse when you&amp;rsquo;re writing a JavaScript client.
So&amp;hellip;. this commit to the Pyramid project ought to take care of things nicely.
Hopefully they&amp;rsquo;ll accept my pull request. If not, I can always just maintain my own fork.</description>
    </item>
    
    <item>
      <title>Right, so... what I said.</title>
      <link>http://www.thismetalsky.org/2011/12/01/Right-so...-what-I-said./</link>
      <pubDate>Thu, 01 Dec 2011 14:50:22 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/12/01/Right-so...-what-I-said./</guid>
      <description>Today there&amp;rsquo;s a new Google Reader upgrade, and (probably due to popular demand) they&amp;rsquo;ve included the &amp;ldquo;display density&amp;rdquo; options that they put in Gmail. I approve, obviously, since if you&amp;rsquo;ve read my previous post on this topic, you&amp;rsquo;ll notice that this looks a lot like the stylesheet I created.
But since the size tweaks are no longer necessary, I&amp;rsquo;ve updated the stylesheet to just include my color and border tweaks.</description>
    </item>
    
    <item>
      <title>Okay fine, I give up.</title>
      <link>http://www.thismetalsky.org/2011/11/23/Okay-fine-I-give-up./</link>
      <pubDate>Wed, 23 Nov 2011 15:04:34 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/11/23/Okay-fine-I-give-up./</guid>
      <description>As you can see, the right column of this page is actually full of stuff again. I decided to just deal with the Google Plus API as is, and instead of using their image URLs, I&amp;rsquo;m just locally caching all of the images (and thumbnails) and hosting them here, rather than linking to broken links.
It works decently, I suppose. Though I noticed that Plus is weird about what it considers to be the &amp;ldquo;title&amp;rdquo; of a given post - most of these don&amp;rsquo;t actually have titles, it&amp;rsquo;s just guessing.</description>
    </item>
    
    <item>
      <title>Tab completion for Python</title>
      <link>http://www.thismetalsky.org/2011/11/17/Tab-completion-for-Python/</link>
      <pubDate>Thu, 17 Nov 2011 16:42:51 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/11/17/Tab-completion-for-Python/</guid>
      <description>I just discovered this. So cool!
import readline import rlcompleter readline.parse_and_bind(&amp;#34;tab: complete&amp;#34;) Put that in a startup file you use with $PYTHONSTARTUP.</description>
    </item>
    
    <item>
      <title>Come here, Google, so I can...</title>
      <link>http://www.thismetalsky.org/2011/11/02/Come-here-Google-so-I-can.../</link>
      <pubDate>Wed, 02 Nov 2011 16:24:06 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/11/02/Come-here-Google-so-I-can.../</guid>
      <description>The problem Google has been revamping all of their user interfaces lately. Lots of people are not happy with this, myself included. I&amp;rsquo;ve got a whole bunch of complaints:
 Far, far too much white, the lack of contrasts and heading/section colors makes it hard for your eye to pick out logical divisions Lack of easy-to-see separators, which does the same thing In the case of Google Reader, WAY too much use of whitespace Scrollbars (in Chrome at least) are way too skinny, which makes those of us who don&amp;rsquo;t use a scroll wheel (that&amp;rsquo;s a separate rant) have trouble grabbing the scrollbar and moving it.</description>
    </item>
    
    <item>
      <title>Finally, a plus API.... well... almost</title>
      <link>http://www.thismetalsky.org/2011/10/20/Finally-a-plus-API....-well...-almost/</link>
      <pubDate>Thu, 20 Oct 2011 13:06:34 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/10/20/Finally-a-plus-API....-well...-almost/</guid>
      <description>So now there&amp;rsquo;s a Google Plus API for Python. You will notice I&amp;rsquo;ve added +1 buttons.
However, the sidebar on the right is gone for the moment, because there&amp;rsquo;s a rather major bug in either the Plus API, or the image resizer Google use for the thumbnail images. So right now I can&amp;rsquo;t actually pull thumbnails from Plus, I&amp;rsquo;d have to pull them down myself.
I&amp;rsquo;m pondering that, sure, but it seems the wrong way to do it.</description>
    </item>
    
    <item>
      <title>So long, Jake.</title>
      <link>http://www.thismetalsky.org/2011/10/09/So-long-Jake./</link>
      <pubDate>Sun, 09 Oct 2011 21:26:49 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/10/09/So-long-Jake./</guid>
      <description>Thanks for being my best friend for 17 years.</description>
    </item>
    
    <item>
      <title>cool</title>
      <link>http://www.thismetalsky.org/2011/10/06/cool/</link>
      <pubDate>Thu, 06 Oct 2011 17:57:18 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/10/06/cool/</guid>
      <description>I finally quit being lazy and updated my first Android app, calCOOLator. It was semi-broken because it was using standard java.lang.Double numbers, now I&amp;rsquo;m using java.math.BigDecimal and dealing with precision much better. Maintaining old applications, especially when it&amp;rsquo;s been years since you even looked at the code, is a little annoying.
I&amp;rsquo;m sure I&amp;rsquo;ll still get comments about how it doesn&amp;rsquo;t handle percentages correctly. &amp;ldquo;50 + 10% = 55&amp;rdquo; - wtf kind of math is that?</description>
    </item>
    
    <item>
      <title>I put a boat on an island.</title>
      <link>http://www.thismetalsky.org/2011/08/26/I-put-a-boat-on-an-island./</link>
      <pubDate>Fri, 26 Aug 2011 17:16:46 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/08/26/I-put-a-boat-on-an-island./</guid>
      <description>It&amp;rsquo;s a Hobie Wave, by the way. The island is Cockenoe Island. There&amp;rsquo;re a few more pictures here.</description>
    </item>
    
    <item>
      <title>everyone&#39;s an amateur</title>
      <link>http://www.thismetalsky.org/2011/08/18/everyones-an-amateur/</link>
      <pubDate>Thu, 18 Aug 2011 14:04:42 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/08/18/everyones-an-amateur/</guid>
      <description>Yep, I&amp;rsquo;m doing it again. I&amp;rsquo;m trying to fix poorly-written libraries. This time it&amp;rsquo;s the python bindings for net-snmp, the most popular SNMP library for unix.
Libraries should never, just print error messages when they can instead throw an exception. Throwing an exception means the application developer using your library has an opportunity to handle the error gracefully, rather than having the library just crash, or in this case, not being able to determine an error condition even exists.</description>
    </item>
    
    <item>
      <title>buzzing</title>
      <link>http://www.thismetalsky.org/2011/07/20/buzzing/</link>
      <pubDate>Wed, 20 Jul 2011 14:33:05 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/07/20/buzzing/</guid>
      <description>Google need to hurry up and release a G+ API, so I can replace the sidebar there -&amp;gt; with my G+ feed rather than my Buzz feed.
Sorta feels like Buzz is irrelevant now, doesn&amp;rsquo;t it?</description>
    </item>
    
    <item>
      <title>Stock quotes, currency, and airports</title>
      <link>http://www.thismetalsky.org/2011/05/25/Stock-quotes-currency-and-airports/</link>
      <pubDate>Wed, 25 May 2011 23:59:17 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/05/25/Stock-quotes-currency-and-airports/</guid>
      <description>For a recent project, I had need of simple Python libraries for currency conversion, stock quotes, and airport code lookup. In the past, I was using perl for this, so I used Finance::Currency::Convert::XE and Finance::Quote.
But since I&amp;rsquo;m using Python here, those aren&amp;rsquo;t available to me. And unfortunately, I couldn&amp;rsquo;t find anything on the web either.
And for the airport codes, I got a list and stuck it in a database.</description>
    </item>
    
    <item>
      <title>Python RSS and Atom feed library</title>
      <link>http://www.thismetalsky.org/2011/05/07/Python-RSS-and-Atom-feed-library/</link>
      <pubDate>Sat, 07 May 2011 18:42:03 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/05/07/Python-RSS-and-Atom-feed-library/</guid>
      <description>I&amp;rsquo;m now officially a contributor to feedformatter, a Python library to generate RSS and Atom feeds. I&amp;rsquo;ll probably use it for this site soon.</description>
    </item>
    
    <item>
      <title>Package Tracking</title>
      <link>http://www.thismetalsky.org/2011/04/28/Package-Tracking/</link>
      <pubDate>Thu, 28 Apr 2011 18:38:29 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/04/28/Package-Tracking/</guid>
      <description>I&amp;rsquo;ve been doing a lot of work on two Python package tracking libraries lately:
 python-fedex packagetrack  I&amp;rsquo;ve got one app right now that does package tracking, and a future website I&amp;rsquo;m working on will need to do this, so I started looking for some useful code already done. Naturally there were a lot of semi-working or partly started things out there.
Python-fedex does work pretty well, after fixing a bug or two.</description>
    </item>
    
    <item>
      <title>blue</title>
      <link>http://www.thismetalsky.org/2011/02/14/blue/</link>
      <pubDate>Mon, 14 Feb 2011 21:12:27 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/02/14/blue/</guid>
      <description>I bought a new toaster.
It has blue LEDs.
WHY?</description>
    </item>
    
    <item>
      <title>Drag and Drop in PyQt</title>
      <link>http://www.thismetalsky.org/2011/01/14/Drag-and-Drop-in-PyQt/</link>
      <pubDate>Fri, 14 Jan 2011 10:54:49 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2011/01/14/Drag-and-Drop-in-PyQt/</guid>
      <description>So you want to be able to drag items out of a QListView? The docs suck on this. Here&amp;rsquo;s how simple it actually is:
class MyListView(QtGui.QListView): def __init__(self, parent=None): super(MyListView, self).__init__(parent) # enable dragging self.setDragEnabled(True) # I&amp;#39;m only interested in drag, not drop, so I disable drop self.setAcceptDrops(False) self.setDragDropMode(QtGui.QAbstractionItemView.DragOnly) # use this to allow selecting multiple entries self.setSelectionMode(QtGui.QAbstractionItemView.ExtendedSelection) def mouseMoveEvent(self, event): self.dragObject() def dragObject(self): if not self.selectedIndexes(): return drag = QtGui.</description>
    </item>
    
    <item>
      <title>Google Buzz</title>
      <link>http://www.thismetalsky.org/2010/11/04/Google-Buzz/</link>
      <pubDate>Thu, 04 Nov 2010 15:48:20 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2010/11/04/Google-Buzz/</guid>
      <description>You may have noticed the word &amp;lsquo;buzz&amp;rsquo; at the top of the right column on my site here. Yes, that does link to my Google Buzz account. Most things I post there, will also show up on this page.
This is actually quite easy to do.
The first thing you need is Google&amp;rsquo;z Buzz client library. I&amp;rsquo;m using Python, so I use this one here. The docs explain pretty well how to use it, but the basic code looks like this:</description>
    </item>
    
    <item>
      <title>New blog engine</title>
      <link>http://www.thismetalsky.org/2010/10/21/New-blog-engine/</link>
      <pubDate>Thu, 21 Oct 2010 00:04:36 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2010/10/21/New-blog-engine/</guid>
      <description>So I&amp;rsquo;m testing out a new blogging enigne I&amp;rsquo;ve written in Python.
It&amp;rsquo;s based on Pylons and MongoDB, with a few nice extras, Genshi, WTForms, jQuery, Markdown, the usual stuff. I did this mostly as a playground for using these new technologies in various work and not-work projects.</description>
    </item>
    
    <item>
      <title>The Jabberwock</title>
      <link>http://www.thismetalsky.org/2010/10/21/The-Jabberwock/</link>
      <pubDate>Thu, 21 Oct 2010 00:04:36 -0500</pubDate>
      
      <guid>http://www.thismetalsky.org/2010/10/21/The-Jabberwock/</guid>
      <description>&#39;Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. &#39;Beware the jabberwock, my son! The jaws that bite, the claws that catch! Beware the Jubjub bird, and shun The frumious Bandersnatch!&#39; He took his vorpal sword in hand: Long time the manxome foe he sought -- So rested he by the Tumtum tree, And stood awhile in thought.</description>
    </item>
    
  </channel>
</rss>

