Thursday, March 12, 2020

Matrix Live Interview

I was interviewed for Matrix Live as part of last week’s This Week in Matrix. I talked a bit about my background and my experiences contributing to Mozilla (as part of Instantbird and Thunderbird projects) as well as what I will be working on for Synapse, the reference implementation …

read more →
Tuesday, March 3, 2020

New Position at New Vector

I’m excited to share that a few weeks ago I started a new position at New Vector! They’re the company behind Matrix, “an open network for secure, decentralized communication”.

I’ll be working on the reference backend server software used in Matrix (Synapse). The tech stack overlaps with …

read more →
Monday, January 27, 2020

Squashing Django Migrations

The Django migration system is great for modifying your database schema after a database is live. If you’re like me, you quickly end up with many 10s or 100s of migrations. There’s nothing inherently wrong with this, but there’s a few cases where it gets tiresome to …

read more →
Thursday, January 23, 2020

Cleanly removing a Django app (with models)

While pruning features from our product it was necessary to fully remove some Django apps that had models in them. If the code is just removed than the tables (and some other references) will be left in the database.

After doing this a few times for work I came up …

read more →
Thursday, January 23, 2020

Using MySQL’s LOAD DATA with Django

While attempting to improve performance of bulk inserting data into MySQL database my coworker came across the LOAD DATA SQL statement. It allows you to read data from a text file (in a comma separated variable-like format) and quickly insert it into a table. There’s two variations of it …

read more →
Friday, October 4, 2019

Celery AMQP Backends


This started as notes explaining the internals of how Celery’s AMQP backends operate. This isn’t meant to be a comparison or prove one is better or that one is broken. There just seemed to be a lack of documentation about the design and limitations of each backend …

read more →
Wednesday, July 17, 2019

Celery without a Results Backend

The Celery send_task method allows you to invoke a task by name without importing it. [1] There is an undocumented [2] caveat to using send_task: it doesn’t have access to the configuration of the task (from when the task was created using the @task decorator).

Much of this configuration …

read more →
Friday, December 28, 2018

Patching a Mail Slot

The front door of my condo has an unused mail slot in it (we have a mailbox on the front of the house to actually get mail). In order to avoid a draft during the winter, the previous owner had shoved some insulation in the mail slot and covered it …

read more →
Tuesday, October 23, 2018

Calling Celery from Twisted


I use Twisted and Celery daily at work, both are useful frameworks, both have a lot of great information out there, but a particular use (that I haven’t seen discussed much online, hence this post) is calling Celery tasks from Twisted (and subsequently using the result).

The difference …

read more →
Friday, May 26, 2017

RSS Feeds for Wikipedia Current Events and NHL News

I subscribe to a fair amount of feeds for news, blogs, articles, etc. I’m currently subscribed to 122 feeds, some of which have tens of articles a day (news sites), some of which are dead. [1] Unfortunately there’s still a few sites that I was visiting manually each …

read more →