Slaptijack Title

Python urllib2 with gzip or deflate encoding

by Scott Hebert

Python LogoThe other night I was working on some Python code that interacts with the zKillboard API. The API call returns kill information via JSON for EVE Online. While making the request, I was getting an error that I was using "non-acceptable encoding." It turns out that the zKillboard guys require you to accept gzip or deflate encoding in order to save on bandwidth. Here's a snippet showing how I added the "Accept-encoding" header to my urllib2 request:


import json
import urllib2
 
request = urllib2.Request('https://zkillboard.com/api/kills/solarSystemID/30000142/pastSeconds/86400/')
request.add_header('Accept-encoding', 'gzip,deflate')
 
data = urllib2.urlopen(request)
 
kills = json.load(data)

For all you EVE Online guys out there, the following API request will give you the kills in Jita over the last 24 hours. If you like the idea of a video game you can write code against, check out EVE Online's free trial. That link will give you 21 days free versus the usual 14.

Related Reading:

WARNING: The following packages cannot be authenticated!

by Scott Hebert

We run several (read: hundreds) of servers that are still running Debian 6 (Squeeze). A few months ago, we started seeing the following errors coming from the daily apt cronjob: "WARNING: The following packages cannot be authenticated!" When running apt-get update the following errors dump out:

W: GPG error: http://mirror.internode.on.net squeeze-backports Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553
W: GPG error: http://mirror.internode.on.net squeeze-lts Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553
W: GPG error: http://mirror.internode.on.net squeeze-updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553

There are two ways to solve the problem:

apt-get install debian-archive-keyring will install all the keys you need.

If you want to install a specific key, then apt-key adv --keyserver pgpkeys.mit.edu --recv-keys 8B48AD6246925553 will do what you need. Obviously, adjust the key accordingly.

OS X Not Appending Search Domains - Yosemite Edition

by Scott Hebert

FinderIt seems this problem has resurfaced again with the new version of Mac OS X. More specifically, this problem seems to affect appending search domains when the hostname contains a dot. In Yosemite (10.10), mDNSResponder has been replaced with discoveryd. Fortunately, all we need to do here is add the --AlwaysAppendSearchDomains argument to the LaunchDaemon startup file and everything should work as expected.

  1. Before you do anything, make sure you have updated to at least OS X 10.10.1.
  2. You will need to edit /System/Library/LaunchDaemons/com.apple.discoveryd.plist. Add <string>--AlwaysAppendSearchDomains</string> to the list of strings in the ProgramArguments <array>.
  3. Restart discoveryd to see your changes take effect.
    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist
    sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist
  4. Profit!

Mac OS X Not Using Search Domains

by Scott Hebert

FinderEvery time I restart my OS X Mountain Lion (10.9) laptop, it stops using the DNS search domains I've added via the Network preferences pane. I have found that restarting mDNSResponder fixes this issue. There are two ways to do this.

The first is a simple restart by sending a SIGHUP to the process:

$ sudo killall -HUP mDNSResponder

The other option is to stop and start the process with the launchctl command:

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Mutt: Deleting Messages Older Than 30 Days

by Scott Hebert

Mutt LogoI tend to clear out large chunks of email all at once. The most common thing I do is clear out all mail older than 30 days.

In mutt do the following:

  • Shift-D to delete messages matching a pattern. This will return a prompt that says Delete messages matching:.
  • ~d > 30d to delete messages older than 30 days.
  • Enjoy the extra disk space you just created.