Latest Posts

Certifi: The State Of The Union

Shortly I’ll be pushing out a new release of the excellent certifi project. This will be certifi’s first release in a little while, and I want to explain why...

Hyper: The State of the Union

It’s been a few months since I last spoke about hyper. The reason I’ve been so quiet is primarily because not much progress has been made on the project. I’v...

HTTPS Is Not Just TLS

Right now the CPython core development team are having an extremely lengthy conversation about whether to enable certificate verification for HTTPS clients. ...

An Update On Hyper

About half an hour ago I pushed the latest release of hyper, v0.1.0. This marks the first release of hyper since early March! This delay is not because I’ve ...

A Story About Control

There once was a time when we were in control of our identity. When we met someone we were in control of who we were to them. We could present ourselves as w...

A Brief Digression About Logging

Logging is an interesting subject. For most developers, most of the time, we don’t think too hard about logging. Maybe we’ve got some coding standards that m...

An Investigation Into Hyper

I’ve been working on hyper for a long time now, and it’s finally in a state where I can do real comparisons between hyper and httplib. So I did! And just to ...

The Importance of Respect

While chatting in IRC with Eric Holscher tonight the topic of conversation wound its way toward positivity and the need to encourage it. I pointed out that m...

HTTP/2.0 For Python

The HTTPbis have spoken, HTTP/2.0 is happening. Major websites are beginning to adopt it (hello there Twitter!), and the spec is beginning to get nailed down...

Open Source Currency

Based on anecdotal data I can safely say that most people view “Open Source” as roughly synonymous with “Free” (as in beer). And in an impressive number of c...

Requests 2.0

Every now and then the Requests project gets bored of fixing bugs and decides to break a whole ton of your code. But it doesn’t look good when we put it like...

Python Requests And Proxies

One of Requests’ most popular features is its simple proxying support. HTTP as a protocol has very well-defined semantics for dealing with proxies, and this ...

Big Redesign Time

I first posted in this blog 14 months ago. In the history of humanity, that’s not all that long ago, but for me it feels like an age. When I wrote that origi...

Caching In Python Requests

I think I’ve made it clear in the past that I think Requests is awesome. At this stage it’s become a mature, feature-filled library that is more than capable...

Writing A Persona Identity Provider

As I said in my last post, I recently added Persona Identity Provider functionality to this blog. If you follow me on Twitter (and really, why wouldn’t you?)...

I am a Persona Identity Provider

Three weeks ago to the day I posted about how I had added SSL support to this website. In that post I mostly discussed why SSL is awesome and why people shou...

Requests' Two APIs

Kenneth Reitz’s excellent Requests library has been praised, rightfully, for its excellent API. In fact, its API is so good that it’s been praised in a liter...

HTTPS All The Things (Especially This Thing)

I think we can all agree that HTTPS is a good thing. In fact, as a bit of a privacy-nut, I’d go further: I think all encryption is a good thing. We increasin...

Grade Calculator: Round 2

So, about 9 months ago I wrote a grade calculator for students of the University of St Andrews. I hacked the whole thing together in about 8 hours of feveris...

Requests and the HTTP 302 Status Code

I wanted briefly to touch on the behaviour of the Python Requests library when it receives an HTTP 302 message. This has come up a couple of times on GitHub,...

I Don't Have Time For Your Sexism

I’ve refrained from writing anything about the problem of gender and sexism in tech because, honestly, I was hoping I wouldn’t need to. I was hoping that the...

Expanding Your Fileserver

Quite some time ago, I wrote a blog post detailing how I made a fileserver to store my media collection on. Well, time has passed and my media collection has...

Choosing The SSL Version In Python Requests

Over the last few months (and probably for quite a while before then too), a few issues have been raised on the Requests GitHub page asking how to select the...

Writing A Transport Adapter

Last post I briefly mentioned that Python Requests went v1.0. This involved a huge code refactor and a few changes in the API.

Not All Opinions Are Equal

This blog post is a reaction to this blog post by David Hansson. If you have the time, I highly recommend reading it. If you don’t, I’ll summarise the most r...

The WNBL Needs An All-Star Game

Author’s Note: This is yet another digression into talking about sports. Those of you who are not interested, please feel free to tune out. I’m sure I’ll wri...

Not Everyone Needs To Be A Rockstar

Getting started in open-source software is intimidating. I know, I’ve been there: it’s always a little scary to have someone you’ve never met before critique...

OAuth Needs To Die In A Fire

As a personal project I’ve recently been looking into creating a small Twitter client in Objective-C/Cocoa. This is largely because I quite like Objective-C ...

Git Yer Hooks In

Git, like all good source control systems, allows you to customise the behaviour of the SCM when certain actions occur. For lots of people in lots of project...

A Whistlestop Tour of Python Requests

Return to our regularly scheduled technical blogging, I’m going to give a quick overview of one of the software libraries I know best: Kenneth Reitz’s Reques...

Opalescent Olympics

Author’s Note: I’m taking a break from writing about tech to write about sports. Any readers who aren’t interested should wait until next week, when I sort-o...

Let's Build A Fileserver!

Those of you who know me will be familiar with the fact that I am what could be called a ‘digital packrat’. After a few years of university my DVD/Blu-Ray co...

The Importance of API-Oriented Design

Many programmers (or coders, or software engineers, or computer wizards, or whatever term you would like to use; the arguments had over this could and probab...

Hell Yeah, Science!

In case you haven’t been paying attention, my about page indicates that I am about to graduate with a degree in Physics, specifically the experimental kind. ...

Things That Are Way Too Hard

When I went to university, I found myself studying Physics at the University of St Andrews in Scotland. This worked out very well for me: I can wholeheartedl...

The Ethics of Open Source

In my last post, I briefly mentioned that there is an ethical discussion in the software community about the relationship between ethics and free software. T...

Sorry, I Killed Your Comments

Another brief post. This blog is now trialling the use of Disqus as a comment management tool. The code required to do this can be found in the disqus branch...

Disqus: Yay or Nay?

Just a short post today. While I was hacking away at Minimalog, working out how best to implement emails for blog comments, it occurred to me that this might...

Politeness and Open-Source Software

Over the last couple of weeks, there has been what can really only be called a ‘brouhaha’ brewing over the role of politeness in open-source software. This a...