Tony's Notebook2021-03-14T11:16:36ZTony Bedfordurn:uuid:A43F40AA-A225-417C-BC09-B818FEB0DDF8Customizing your Bash shell prompt71ca7a15-1ee2-4165-8618-442bdfaf1d432018-07-062018-07-06In this article I look at customizing your Bash shell prompt.Dealing with datesd9d79318-7535-49cb-abdd-3cd978457e042017-11-142017-11-14In 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.FlySpy the final frontierE0A2CA7E-7F83-4773-8F53-94BD595F11EF2020-10-142020-10-14In this article I conclude the video series on FlySpy by looking at the server API and the mapping client.Doom Zone Memory Manager5a3ece07-87f6-44eb-886d-038d8a35c2e72018-12-132018-12-13On the mysteries of the Doom Zone Memory Manager and other Doom-related trivia.Don't forget to flush!9228840e-6d8f-4e98-aab1-21b5f89850442017-11-172017-10-07On solving a mysterious problem in a CGI web app.How to generate an Atom feed84f45c1f-7cad-4912-b355-d839a48b560b2017-11-202017-11-20This 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.An introduction to FlySpy54780dc0-e184-49b6-a0e9-7ef7cc9ef0a42020-09-252020-09-25In this article I do a video intro to this exciting project.Real-time systems - networks and protocols9aa8ff6c-6b3c-40aa-96ec-e5ff67612cab2018-01-172018-01-17This article continues the series on real-time systems by looking at infrastructure (networks and protocols) underlying the web and the Internet of Things (IoT).Caching in8c875736-aeab-4e70-a462-0c392a637d782017-11-05T00:00:00.000Z2017-11-05T00:00:00.000ZA look back at how disk caching software and disk de-fragmenters were A Thing back in the 90s.Real-time systems - Internet of Thingsa031e6fc-4a1b-4327-841e-1673baa0484e2018-02-282018-02-28My series on real-time systems concludes with some brief thoughts on the Internet of Things.Ever expanding memory2877f2d2-36ca-4ea1-b02d-b32ebbead3402017-11-012017-11-01A brief look at how console memory has increased over the years.First experiences with TinyDB35ba672b-9ceb-482f-8b43-e28d8c23d0062020-09-062020-09-06In this article I take a quick look at the magical TinyDB, a nifty little NoSQL/JSON/document-oriented database for Python.Days of dial-up modems228a3dd8-7f20-4294-a479-d4130cbdcd1b2018-01-182018-01-18Light-hearted memories of the "olden days".The woeful web68d6a322-ca0b-4e06-aa4d-b0f35ddda70b2017-11-152017-11-07In this article I look at what I think are some serious issues with the web today.Intro to Ngroke22f80b9-9d6b-4e7e-ac54-ddc4556202aa2018-04-132018-04-13A quick intro to the wonders of Ngrok.What are Character Sets?296a7ca3-14b9-42df-ac59-86755fa6a07c2019-10-292019-10-29This article takes a look at what character sets are.FlySpy persistencef6ebce3c-7fc3-4917-8987-75a6ae14c6ee2020-10-042020-10-04In this article I present the FlySpy persistence functionalityBootstrapping7b3d66d8-6eb9-4ff0-88c5-44d6413b5fe22018-02-282018-02-28A look back at 'bootstrapping' in the 1980s.Server-Sent Events (SSE)B9D3FC17-D157-4AC7-9716-3ECCD51BB2672020-11-292020-11-29In this article I take a quick look Server-Sent Events using Node and JavaScript.Tracing memory allocationsf369600a-44d7-43ca-b6be-7a74d73626892017-10-052017-10-05On various attempts to try and trace memory allocations.How to take out a contract on John Wick8e7fb6aa-bd81-436b-b6cd-e8fd7bfa6fab2019-04-042019-04-04I show you how to take out an open contract on John Wick with a bit of help from Nexmo and Python.Python keyword parameterse76706c4-8809-4ee4-8f4d-0d893d2ae55a2018-11-022018-11-02In this article I take a quick look at Python keyword (named) parameters.Calculating entropy222d2af3-7745-4fcc-bc13-34e0e95dc6dc2017-11-152017-10-11This article looks into how to calculate entropy. The article includes example C code.Write your own JWT generator in Pythoncf0faf16-e14b-4849-999e-6d22936ec5762019-11-232019-11-23Shows you how to write your own command-line JWT generator in Python.Playing with PygameF9B86650-6342-4438-827E-E6C7C44CD2B52021-02-212021-02-21I needed some light relief, so I started messing with Pygame.Learning JavaScript with HTML5 Canvasb97a6b58-f21d-40ad-b9bb-625110ac85ba2018-07-092018-07-05In this article I decide to learn JavaScript and write a couple of simple JavaScript programs.The case of the missing clients2eea87bd-975a-411b-9c34-e770785087302019-03-302019-03-30What do you do when all your customers suddenly dispappear overnight? Call me of course.Running Vonage API Developer Portal locally509DB327-5B08-4F71-BDAB-03F4C55145462020-11-272020-11-27In this article I take a quick look at how to run Vonage ADP locally.What are Character Encodings?b13e0c68-5624-4420-aeec-c845488a1a182019-11-022019-11-02This article takes a look at what character encodings are.Troubleshooting Ruby Gems1e7aba87-8551-431f-b8e2-37591d1c6d6c2020-10-062020-10-06In this article I take a quick look at a recent case where I needed to troubleshoot my Ruby Gem packages installation.A gentle introduction to Nexmo2529cabf-f723-49e5-adce-3997006e06692018-07-052018-05-10In 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.Emacs keyboard configuration on Macb76ccdd7-29d0-42ba-9c55-7758b0c135d42018-11-022018-11-02In this article I talk about configuring Emacs for use on Mac OS X. The configuration works with both Terminal Emacs and Cocoa Emacs(Desktop).Understanding Unix time8e92b858-cb2b-4eea-8ebd-6766ea396a762018-10-302018-10-30This 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.On missed opportunities46bc8897-c02c-4c6e-b60b-1c4107576a982019-04-112019-04-11Some thoughts on some of the bigger opportunities missed along the way.Tracing version of `malloc`8aa0d11c-6d55-4107-8288-acab4a53e2242017-11-152017-10-25I managed to create some useful macros for debugging C programs.Python and Unicode9f951a9a-2053-4bd9-84a5-526daa2e30aa2019-11-052019-11-05This article takes a look at using Unicode in Python.Python non-greedy regexesd4612790-5d34-4a35-bc20-f7724e4e84042019-10-192019-10-19How to make Python regexes a little less greedy using the `?` modifier.How to secure your Flask web app with HTTPS and Basic Authenticationf3c18ff2-3230-4db7-8f64-8cd7e9956fef2020-10-102020-10-10How to secure your Flask web app with HTTPS and Basic AuthenticationOn buying my first smartphone89352155-903b-46db-bdd7-c3a427d08dbe2018-04-202018-04-20Some thoughts on taking the plunge and becoming a smartphone owner.Tales from the Bcrypt4eb55d0d-3675-4d29-b987-1ab20d728a972017-10-092017-10-09Bcrypt proves to be a very convenient library for encrypting passwords.Base64 encoding0295f102-9ff8-483c-aa59-d9c839200f072020-08-212020-08-21In this article I take a quick look at Base64 encoding in Python.Diving into the buffer pool3a5cdab3-f0b0-46bc-adac-7b80a2401fc42017-10-232017-10-23In this article I provide some brief notes on buffer pools.'Stdout was a bad, bad boy'c9c0eef7-e923-4da5-8be6-e1f468ec40e52017-10-192017-10-19Sometimes an application may open `stdout` with ASCII encoding, rather than UTF-8.Dial-a-chiptunee4a7b7cf-3fcc-40ee-a796-c3e19f74c3b12018-07-052018-05-11In 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.Can Rust help?7d3b9ef1-2882-4e35-b526-1bd4e05c7ed82017-11-152017-10-10In this article I look into some problems with C pointers and wonder if Rust can help.How long to transfer a 1TB file?fadd412a-54ff-4898-abe4-5707357a9d822017-11-152017-10-31How long does it take to transfer a 1TB file? Python can help.Realtime telemetry with Nexmo and AblyA66BB0F1-CA3A-44E5-9FC2-7AA3787714F32020-10-252020-10-25In this article I take a look at building a realtime telemetry system based on SMS with Nexmo and AblyCalculating compound interestfc450577-a2a2-4748-b9a1-0b040beeebcd2019-03-05T00:00:00.000Z2019-03-05T00:00:00.000ZIn this article I take a quick look at performing financial calculations in Python. I also take a look at the very important 4% rule.How to upgrade your Postgres database tables5d5ac7ed-5e05-49ad-8775-5cf2c4d5c1002019-10-212019-10-21Looks at how to upgrade database tables in an older version to a newer version of Postgres.URL Encodingdcd57f3f-deba-4ee5-8537-c59b4d159f6c2020-07-072020-07-07In this article I take a look at what URL encoding is, and also look at a related practical problem I had to overcome.Verifying signed webhooks399abef0-728e-45ac-a596-5c59aabef88c2020-07-202020-07-20In 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.Understanding JWTscb1abdbd-e691-4d61-b731-769f49f422632018-11-012018-11-01This article takes a look at JSON Web Tokens or JWTs. The article looks at their basic format, and how they are created and used.Remembering TurboDOS09face18-b157-42e7-8585-aa7041cc9b8f2017-11-152017-10-02Back 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.Wolfenstein's memory managerea8d9683-c7b3-46cd-9f87-c17a9eea81552017-10-272017-10-27An overview of the Wolfenstein 3D compacting memory manager.How Python saved my sanity!43617fa8-c889-4f4b-a2b2-72275f28e5232017-11-152017-10-14A light-hearted look into how Python can help you retain your sanity!Joining Nexmob0914581-9498-4b18-8284-bf5068204cf12018-03-312018-03-31Things are changing at Coffee and Code HQ (now tonys-notebook.com).Cracking the Fog Creek coding problem8d2953f4-8e1c-4448-8060-6b983d4687d52019-10-142017-10-29In this article I take a look at how to crack the Fog Creek content developer coding puzzle.Introducing Python lambda0274efc4-2b18-43dc-af8a-4b578ecb02b12019-10-202019-10-20A first look at Python lambdaExploring HTTP48d3f910-e282-4bef-9844-3d5d4a387c772018-11-212019-11-21A brief exploration of HTTP and the tool HTTPie.Joining AblyD4265F96-610B-4AF0-8FAF-257CEF1FD20F2020-12-062020-12-06I am joining Ably to work on their developer documentation.FlySpy webhook handler8021b2a2-81fa-45d2-882d-2adb8e913d132020-09-302020-09-30In this article I present the FlySpy webhook handlerDon't forget the Unix tools61f17a01-f732-43b0-9333-32dfd581afb42017-10-042017-10-04There are times when the best approach is not to reinvent the wheel but use the numerous command line tools available in Unix.How to write a simple web spider in Pythond42978f0-a3e9-47e5-8b57-5e2cd419eef42018-11-072019-11-07How to write a simple web spider in Python to use as a link checker.Freelancing: How much should you charge?b0d80d80-f39d-4590-8b08-0821105645622020-01-062020-01-06In this article I take a look at how much you should charge for freelance IT work.Spreadsheets everywhere7b1cc668-89ab-43cc-bdaf-f08d9cd34e852017-10-202017-10-20On the phenomenon of the spreadsheet that starts out innocently enough and then becomes an out-of-control beast.Creating a video chat application with OpenToka81a9aef-7ab0-4d09-a136-0507503b91122019-03-212019-03-21Creating video chat application with OpenTok.The lost art of fixing electronics69940826-6ddb-4395-9793-9de0b929cf882019-01-092018-03-01Some personal thoughts on the lost art of fixing electronics.Real-time systems - web732c6f6c-6e39-44c5-ae87-ccfea5bc126f2018-01-192018-01-19Previous 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.Limits of Markdown68229ce2-3226-439a-9266-8b65e1274b932017-11-242017-11-24In which I discuss the limitations of Markdown when constructing websites and documentation systems.Introduction to JSONedb95017-e6a0-40dd-a278-d97ab6b19e7b2019-10-242019-10-24A quick look at JSON, why it's important and how to deal with it in Python and JavaScript.Really simple encryption1b0ef735-4bf1-4a64-9e2a-e46773a9d8a92018-05-082018-05-08In 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.Real-time systems - timing7685c605-3686-4e83-859a-024d752c5e0f2018-01-172018-01-16This 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).Radio telemetry with Nexmo and Pythone9e3c12a-d61d-4ba3-abd1-2c418a408f212019-10-272018-05-02This 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.The death of the Internet café82ba033c-6a76-4a81-8296-eed3c1f5d1b62019-11-252019-11-25A look back at the rise and fall of the Internet café, or Cyber café as it was sometimes known.Python env issue on Ubuntu 16.04f1771311-71a1-4418-9b9f-10857cce9b2a2017-10-172017-10-17Describes an issue where Python couldn't be found on Ubuntu.FlySpy architectural overview56a8f9cc-e69c-4a97-abbc-688db73a56b42020-09-262020-09-26In this article I present an architectural overview of FlySpy, and also demonstrate the Facebook side of the project.Why I still use Emacs9259e897-e85c-45af-8407-9eb9f2d02bc82017-11-172017-10-01A light-hearted story on why I still use Emacs.Excel ain't a database!ea571edc-7ad7-4db1-a458-f01f4d7111bb2017-10-152017-10-15A light-hearted story on the problems of using Excel as a database.