Welcome to Tony's Notebook

Realtime telemetry with Nexmo and Ably


In this article I take a look at building a realtime telemetry system based on SMS with Nexmo and Ably

Filed in: Code

FlySpy the final frontier


In this article I conclude the video series on FlySpy by looking at the server API and the mapping client.

Filed in: Code

How to secure your Flask web app with HTTPS and Basic Authentication


How to secure your Flask web app with HTTPS and Basic Authentication

Filed in: Code

Troubleshooting Ruby Gems


In this article I take a quick look at a recent case where I needed to troubleshoot my Ruby Gem packages installation.

Filed in: Code

FlySpy persistence


In this article I present the FlySpy persistence functionality

Filed in: Code

FlySpy webhook handler


In this article I present the FlySpy webhook handler

Filed in: Code

FlySpy architectural overview


In this article I present an architectural overview of FlySpy, and also demonstrate the Facebook side of the project.

Filed in: Code

An introduction to FlySpy


In this article I do a video intro to this exciting project.

Filed in: Code

First experiences with TinyDB


In this article I take a quick look at the magical TinyDB, a nifty little NoSQL/JSON/document-oriented database for Python.

Filed in: Code

Base64 encoding


In this article I take a quick look at Base64 encoding in Python.

Filed in: Code

Verifying signed webhooks


In this article I take a look at verifying Nexmo signed webhooks. The ideas might be useful in your own projects and for dealing with other APIs.

Filed in: Code

URL Encoding


In this article I take a look at what URL encoding is, and also look at a related practical problem I had to overcome.

Filed in: Code

Freelancing: How much should you charge?


In this article I take a look at how much you should charge for freelance IT work.

Filed in: Random

The death of the Internet café


A look back at the rise and fall of the Internet café, or Cyber café as it was sometimes known.

Filed in: Retro

Write your own JWT generator in Python


Shows you how to write your own command-line JWT generator in Python.

Filed in: Code

Exploring HTTP


A brief exploration of HTTP and the tool HTTPie.

Filed in: Tools

How to write a simple web spider in Python


How to write a simple web spider in Python to use as a link checker.

Filed in: Code

Python and Unicode


This article takes a look at using Unicode in Python.

Filed in: Code

What are Character Encodings?


This article takes a look at what character encodings are.

Filed in: Code

What are Character Sets?


This article takes a look at what character sets are.

Filed in: Code

Introduction to JSON


A quick look at JSON, why it's important and how to deal with it in Python and JavaScript.

Filed in: Code

How to upgrade your Postgres database tables


Looks at how to upgrade database tables in an older version to a newer version of Postgres.

Filed in: Tools

Introducing Python lambda


A first look at Python lambda

Filed in: Code

Python non-greedy regexes


How to make Python regexes a little less greedy using the `?` modifier.

Filed in: Code

On missed opportunities


Some thoughts on some of the bigger opportunities missed along the way.

Filed in: Stories

How to take out a contract on John Wick


I show you how to take out an open contract on John Wick with a bit of help from Nexmo and Python.

Filed in: Nexmo

The case of the missing clients


What do you do when all your customers suddenly dispappear overnight? Call me of course.

Filed in: Stories

Creating a video chat application with OpenTok


Creating video chat application with OpenTok.

Filed in: Nexmo

Calculating compound interest


In this article I take a quick look at performing financial calculations in Python. I also take a look at the very important 4% rule.

Filed in: Random

Doom Zone Memory Manager


On the mysteries of the Doom Zone Memory Manager and other Doom-related trivia.

Filed in: Books

Python keyword parameters


In this article I take a quick look at Python keyword (named) parameters.

Filed in: Code

Emacs keyboard configuration on Mac


In this article I talk about configuring Emacs for use on Mac OS X. The configuration works with both Terminal Emacs and Cocoa Emacs(Desktop).

Filed in: Tools

Understanding JWTs


This article takes a look at JSON Web Tokens or JWTs. The article looks at their basic format, and how they are created and used.

Filed in: Code

Understanding Unix time


This article takes a look at the idea behind Unix time. It also shows you how to get the current Unix time from the shell and from Python. The concept of the Unix timestamp will be used again in subsequent articles.

Filed in: Code

Customizing your Bash shell prompt


In this article I look at customizing your Bash shell prompt.

Filed in: Tools

Learning JavaScript with HTML5 Canvas


In this article I decide to learn JavaScript and write a couple of simple JavaScript programs.

Filed in: Code



In this article I talk about a fun little project I whipped up in about an hour of pre-breakfast hack time. It's super easy, but could provide the basis for your own more ambitious projects.

Filed in: Nexmo

A gentle introduction to Nexmo


In this article I attempt to provide you with a gentle introduction to what Nexmo is, some of the things it can be used for, and provide some simple example code in Python.

Filed in: Nexmo

Really simple encryption


In this article I take a look at a really simple encryption system. Applications could include sending ever-so-slightly more secure text messages via APIs such as Nexmo or Clockwork.

Filed in: Code

Radio telemetry with Nexmo and Python


This article looks at how to set up a cheap radio telemetry system using someting like a Raspberry Pi with an SMS module, Nexmo, and a little bit of Python on the back end.

Filed in: Nexmo

On buying my first smartphone


Some thoughts on taking the plunge and becoming a smartphone owner.

Filed in: Stories

Intro to Ngrok


A quick intro to the wonders of Ngrok.

Filed in: Tools

Joining Nexmo


Things are changing at Coffee and Code HQ (now tonys-notebook.com).

Filed in: Personal

The lost art of fixing electronics


Some personal thoughts on the lost art of fixing electronics.

Filed in: Stories

Real-time systems - Internet of Things


My series on real-time systems concludes with some brief thoughts on the Internet of Things.

Filed in: Systems



A look back at 'bootstrapping' in the 1980s.

Filed in: Stories

Real-time systems - web


Previous articles in this series described the nature of real-time systems and then the infrastructure (networks and protocols) underlying the web and the Internet of Things (IoT). This article provides a brief introduction to the real-time web, without delving into language-specific details. A future article will look at real-time aspects of the IoT.

Filed in: Systems

Days of dial-up modems


Light-hearted memories of the "olden days".

Filed in: Retro

Real-time systems - networks and protocols


This article continues the series on real-time systems by looking at infrastructure (networks and protocols) underlying the web and the Internet of Things (IoT).

Filed in: Systems

Real-time systems - timing


This article is the first in a series that attempts to explore what is meant by a real-time system, specifically in the context of communications, the web, and the Internet of Things (IoT).

Filed in: Systems

Limits of Markdown


In which I discuss the limitations of Markdown when constructing websites and documentation systems.

Filed in: Tools

How to generate an Atom feed


This article explains how an Atom feed was added to this site using Python code. The article also describes adding automatic feed discovery to the site.

Filed in: Code

Dealing with dates


In this article I describe dates, how they are used on this site, and how you can generate ISO-8601 format dates on the Mac OS X command line.

Filed in: Code

The woeful web


In this article I look at what I think are some serious issues with the web today.

Filed in: Random

Caching in


A look back at how disk caching software and disk de-fragmenters were A Thing back in the 90s.

Filed in: Retro

Ever expanding memory


A brief look at how console memory has increased over the years.

Filed in: Systems

How long to transfer a 1TB file?


How long does it take to transfer a 1TB file? Python can help.

Filed in: Code

Cracking the Fog Creek coding problem


In this article I take a look at how to crack the Fog Creek content developer coding puzzle.

Filed in: Code

Wolfenstein's memory manager


An overview of the Wolfenstein 3D compacting memory manager.

Filed in: Systems

Tracing version of `malloc`


I managed to create some useful macros for debugging C programs.

Filed in: Code

Diving into the buffer pool


In this article I provide some brief notes on buffer pools.

Filed in: Systems

Spreadsheets everywhere


On the phenomenon of the spreadsheet that starts out innocently enough and then becomes an out-of-control beast.

Filed in: Tools

'Stdout was a bad, bad boy'


Sometimes an application may open `stdout` with ASCII encoding, rather than UTF-8.

Filed in: Code

Python env issue on Ubuntu 16.04


Describes an issue where Python couldn't be found on Ubuntu.

Filed in: Tools

Excel ain't a database!


A light-hearted story on the problems of using Excel as a database.

Filed in: Stories

How Python saved my sanity!


A light-hearted look into how Python can help you retain your sanity!

Filed in: Stories

Calculating entropy


This article looks into how to calculate entropy. The article includes example C code.

Filed in: Code

Can Rust help?


In this article I look into some problems with C pointers and wonder if Rust can help.

Filed in: Code

Tales from the Bcrypt


Bcrypt proves to be a very convenient library for encrypting passwords.

Filed in: Code

Don't forget to flush!


On solving a mysterious problem in a CGI web app.

Filed in: Tools

Tracing memory allocations


On various attempts to try and trace memory allocations.

Filed in: Code

Don't forget the Unix tools


There are times when the best approach is not to reinvent the wheel but use the numerous command line tools available in Unix.

Filed in: Tools

Remembering TurboDOS


Back in the early 80s the company I worked for ran its entire operation on a Z-80 based operating system called TurboDOS. This article fondly remembers how capable the system was.

Filed in: Retro

Why I still use Emacs


A light-hearted story on why I still use Emacs.

Filed in: Tools