I'm a software developer and consultant, building products with Python, Django, and friends. I'm also a math enthusiast with an interest in databases (PostgreSQL in particular). I created Mastery with SQL.

2020

Advanced SQL and database books and resources

May 1, 2020

For people who've worked through Mastery with SQL, a common question I get is "What's next?" If you completed the course and all 150+ exercises, at this point you'll have a very strong grasp of SQL and should be comfortable writing all sorts of...

The myth of the developer that can't code

April 14, 2020

At the time of writing, my last blog post on the subject of hiring has over 150K views and generated a lot of great discussion. It touched a nerve. Good. There's lots of agreement that developer hiring is broken. But there's also disagreement, or...

The software industry's greatest sin: hiring

April 10, 2020

One of the greatest sins in the entire software industry has got to be the way developers are hired. It is irredeemably broken and needs to be torn down and completely rebuilt. I've been a software developer now for around 15 years. In that time,...

How to make Chrome forget a permanent redirect?

April 9, 2020

Recently I've been working on a project that sets up a number of permanent (HTTP 301) redirects on localhost. While that's useful for that project, after stepping outside of that project these redirects got in the way of other development...

Logging raw SQL to the console in Django

April 9, 2020

When working on a Django project it can be useful to see the raw SQL queries being made to your database - you can quickly and easily identify when there are too many calls being made and look for other inefficient access patterns (queries asking...

Can you build a Microsoft Teams bot without using Azure?

March 24, 2020

Yes. But also, no. Let me explain. One important concept to understand right away is that Microsoft Teams apps never directly communicate with your web services. A Teams app as installed in the client is actually just a JSON manifest file and...

What are the Microsoft App ID and password for when building a Teams bot?

March 23, 2020

When you're building an app for Microsoft Teams, or really, anything that's going to end up using the Azure Bot Service, at some point in the process you have to create and manage a Microsoft App ID and password. When you first do this, it feels...

Azure Functions: How to get data from a POST body in JavaScript

March 20, 2020

When working with Azure Functions, a common thing you'll want to do is get data out of the POST body inside your function. Handily, if you make your POST request in JSON format, you'll be able to simply access the object properties by name,...

Command not recognized error when specifying a runtime during webapp creation with Azure CLI

March 19, 2020

Recently I've been working with Azure and have been using the Azure CLI to script up creation of a Node.js webapp (btw, the Azure CLI Tools extension is excellent for this). I found however that when scripting up the creation of the webapp, if...

Microsoft Teams error - 'validDomains' array cannot contain a tunneling site

March 16, 2020

When building your first app or bot for Microsoft Teams, one error you might come across during your development when you're using the tool ngrok is in App Studio. In the Manifest Editor, when you go to the Test and Distribute tab, if you've been...

How I built the best-selling BlackBerry app of all-time

March 6, 2020

Many years ago, I built what I believe was the best-selling BlackBerry app of all-time, BBSmart Email Viewer. It feels strange to write that, and it's not something I'd say I'm really known for outside of the small niche community of BlackBerry...

Mathematics for the adventurous self-learner

February 24, 2020

For over six years now, I've been studying mathematics on my own in my spare time - working my way through books, exercises, and online courses. In this post I'll share what books and resources I've worked through and recommend and also tips for...

2019

Using Visual Studio Code with psql

July 7, 2019

A quick HOWTO to show you how to setup psql to use Visual Studio Code for interactive editing. Updating your EDITOR When you're working in psql, it can be handy to jump to a richer text editor, particularly when typing up longer queries. In psql,...

Implementing SQL Server's WITH TIES in PostgreSQL

July 1, 2019

SQL Server supports a TOP (N) WITH TIES clause which can be used to return the top N rows from a query along with any additional rows that have the same sort value as the Nth row. It's handy functionality that can come in use in many situations....

Joins: USING vs ON for join conditions

June 30, 2019

When establishing the join condition between two tables in PostgreSQL, and you're performing an equality join where the columns are named the same in both tables, a nice shorthand syntax to establish the join is with USING. You might think this...

Permission Denied error when using PostgreSQL's COPY FROM/TO command

June 10, 2019

COPY FROM is commonly used to import data from a file (CSV, plain text, etc.) in to PostgreSQL. Likewise, COPY TO is used to export data from a table or a query result to a file. When you're using these commands if you're getting a "Permission...

Mastery with SQL is out now!

June 9, 2019

My new course Mastery with SQL is out now! I'm so thrilled with how it's turned out. My goal when I set out was to build a course that's exercise-centric. I'm an avid learner who loves studying new domains, and in my experience one of the best...

Using Distinct

June 9, 2019

The DISTINCT keyword has a bunch of interesting use-cases in ANSI SQL and offers some additional functionality when used in PostgreSQL. Let's dive in and take a look with an example (you can find the full source code to reproduce this example on...