Tall, Snarky Canadian

by Brett Cannon

Python core developer. Works at Microsoft (Azure Data Science Tools).

Page 2

The game mechanics of Destiny

My good friend Paul is about to start playing Destiny with me on the ps4, so I figured I should explain to him the game mechanics upfront so he can make wise decisions early on and maximize his playing time. And since it’s me I figured I might as well share my notes publicly. Do realize this focuses on the game mechanics and not explaining every minute detail of the game, so I will gloss over some bits.

 Until you’re level 20

Destiny’s game mechanics are very different from when you start a character until you hit level 20 compared to level 20 and beyond (currently the level cap is 30).

 Leveling up

Until level 20 you level up your character through experience; standard fare compared to other games.


Beyond simply having a level, your character also has a focus. You start with one focus and unlock new abilities of your focus through experience. Once you hit level 15, though

Continue reading →

What I would buy my family for Xmas

My take on Xmas is to not buy gifts for anyone. More often than not people get you something that you didn’t really want, or if they did you then have to guess about the amount spent ahead of time to get them a proper gift to reciprocate. In other words it’s a big pain fraught with social gotchas if you don’t have a predetermined wish list for yourself and budget established between people.

That being said, when I do buy gifts for people I prefer to buy them something that they would use but wouldn’t necessarily buy for themselves (or just haven’t gotten to yet). Think of it as buying someone their extravagancies for them when they cannot justify it to themselves.

With that in mind, I decided to make a list of what I would buy people in my family at different price points. This ranges from the completely practical to the totally insane and only reasonable if I was worth 9 figures.

Continue reading →

Setting up a Raspberry Pi for XBMC and automatic torrenting by RSS feed

There is a single show that my wife and I watch which we torrent. I had been downloading the torrent manually and then using Videostream to cast to my TV. But having to manually torrent the show was getting annoying and I didn’t want to have to get my laptop out every time we wanted to watch the show (which has new episodes every Monday, Wednesday, and Friday).

At the same time I was growing tired of not using my Raspberry Pi from PyCon 2013. I simply had not found a use for it yet and have toyed with various ideas (the leading one has been to add a small display and have it help keep an eye on Buildbots at sprints).

But then I realized I could solve both my laziness in torrenting and use of my Raspberry Pi by making it act as an XBMC media centre that would torrent based on an RSS feed. I finally made it all work, but it was a decent amount of effort so I figured I should write the

Continue reading →

Comprehending the different levels of the cloud

When explaining the cloud to my relatives, I typically explain it as “people running computers on your behalf that you can reach over the internet”. That’s enough to get the point across that the cloud is just someone else managing compute resources for you in some remote location. But for software engineers, it is a bit more nuanced. It’s so nuanced, in fact, that I personally have a hard time figuring out the abstraction levels of the whole thing sometimes. To resolve this I am writing this blog post as my attempt to explain to myself and others what the various levels of the cloud are to engineers who need to have some code running somewhere and reachable over the internet.

To start, there is no cloud. The absolute lowest level of serving a resource over the internet is just the proverbial computer under your desk. You provide the internet connection, the electricity, and you manage

Continue reading →

Bringing someone into the modern age of technology

A relative just visited whose current technology consists of a Windows computer and a flip-phone. It was one of those situations where someone was coming to me as a blank slate for a technology upgrade! So I seized on the moment and made some recommendations.

For a phone I said he should get either a phone from Motorola, Google, or Apple. It would come down to price and who was going to provide technical support as to exactly which phone they should get.

For a computer we actually gave the relative an old Chromebook. With no baggage as to some set of programs they had to have access to, it made the decision easy. Even if we didn’t have a spare Chromebook to give away I would have suggested a Chromebook for its price and ease of maintenance. This probably would have also led to a suggestion of a new printer that supported Google Cloud Print to work with the Chromebook. And then the

Continue reading →

Telephony in the modern age

[edited on 2014-11-07 to mention cordless phones that work with mobile phones]

Making voice calls using the telephone network is now antiquated. There are practically no good financial reasons to have a landline anymore if you can afford Internet at home and a smartphone. Consider this blog post an open letter to my parents and in-laws where I attempt to convince them that having their landlines is not necessary and that there are better, cheaper options to talk to me and everyone else who isn’t a free phone call on their mobile phone already.

In this post I’m working from the assumption that everyone has at least one smartphone with a non-data phone plan in the house and everyone has wireless internet throughout their home. I’m also assuming their phone is used to make calls and receive calls and nothing else, e.g. no fax machine. I’m also going to use pricing and such from Canada

Continue reading →

Trying out the fish shell

I’m one of those programmers that does not hold great nostalgia for old programs. I’m always willing to toss aside some part of my software toolkit if something better comes along. This basically means I’m willing to toss any and all UNIX tools I use.

This includes my shell. While I don’t try to make OS X’s GUI do everything, I also don’t think bash/tcsh/zsh are the epitome of UX design either. All of this led me to try switching to the fish shell today. It’s colourful, it can be configured through a browser, and it’s willing to poke fun at itself and shells in general (the tagline on the home page is “Finally, a command line shell for the 90s”; fish wasn’t created until 2005).

But as with all new bits of software, there is a slight learning curve, especially if you have mucked around with your profile in your shell previously. To begin with, fish has scoping rules for its variables

Continue reading →

How to argue for Python’s use

Recently I wrote a blog post about how I don’t worry about Python losing users. Within minutes I had people asking about Python’s usage, which the post was not about and is a very different thing to worry about. See, it looks like the number of people using Python will continue to be high into the future, but whether Python will be used for as many projects is not guaranteed; the number of users is great and seems secure, but the number of uses of Python in projects is not nearly as certain.

This blog post is meant to help show how Python is still very much viable for most software projects out there. I’m not going to worry about selling Python to people going up against other dynamic languages like Ruby as I think those battles tend to come down to personal taste. What this is meant for is people dealing with teammates trying to sell statically typed languages. Specifically, this post

Continue reading →

Why I don’t worry about Python losing users

I just had a need to read two files that were line-delimited lists of domains, consolidate the data, and then output the domains sorted and all lowercased to a new file. It took me 10 lines of Python code and worked perfectly on the first try.

Out of curiosity and to make sure I keep learning Go (my team at work uses it whenever possible), I decided to re-implement the same functionality. That took 56 lines in Go. When I went back and refactored the Python code to match the abstractions I used in the Go code it grew to 17 lines.

And this sort of thing is exactly why I do not worry about Python’s popularity (at least in terms of users). While languages like Go compete with Python on a performance:productivity comparison, when you compare Python to almost any other language based purely on productivity it trounces the competition. And this shouldn’t shock anyone when you think about the

Continue reading →

How keep Python 3 moving forward

When I posted on Google+ about Python 3.4.1 being released it led to various comments on the post and it made me realize how far we have come with Python 3 and what people who have not ported yet can do to keep moving forward.

 We have come a long way

I remember when we first released Python 3 the naysayers were all about how there wasn’t a compelling reason to switch from Python 2. Those of us working on Python 3 said that the culmination of a bunch of little improvements led to a much more pleasant programming experience. But the naysayers continued to say that the state of the world in Python 2 was good enough for them, so they didn’t want to switch (which is also, by the way, the same reason we hear from people not willing to drop support for very old versions of Python, so this is not a new viewpoint to python-dev and has been going for decades). Not having a compelling reason is

Continue reading →