Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]
39

Switching to Pelican

from Liz Denys [alt+shift+b] in programming

Until today, my website was fragmented across a number of static pages and two WordPress instances. To simplify my life, I decided to unify them into one content management system instead of keeping that somewhat unwieldly mess around. I had never really put a lot of thought into picking platforms before, hence the mess. For many years, my "homepage" was a single static page, which was easy enough since I've been writing HTML and CSS for about fifteen years. It later grew to five pages, but with some extremely simple scripting, it was just as easy to maintain my five static pages instead of just the one. My (modern) blog had always been a WordPress instance. I separated my food blog posts from my other posts for probably imprudent reasons a couple years ago, and I didn't think to do anything besides split it into two WordPress instances. Eight years ago, I picked WordPress for a few reasons: WordPress is a relatively simple system to operate. Lots of people use WordPress, so you can usually find the answers to your questions with some quick internet searches. (Sadly, their own docs are, or at least were, kind of sad.) The themes are highly customizable with HTML and CSS, and WordPress theme syntax isn't too hard to pick up. I was hosting it on SIPB's scripts.mit.edu and installing WordPress was a breeze and free. As a SIPB member, I knew the maintainers well, so I felt like I could safely host my site there with less machine maintenance. I wanted some fancy plugins at the time, and WordPress had them. (I don't use them anymore.) But WordPress has a lot of drawbacks, too: It's written primarily in PHP. (No amount of homebrew server-side include scripting done in high school to make your first self-hosted blog can make writing PHP exciting.) It requires a database. You create the site through an online system. I hate web interfaces. I hate clicking to create things. You need to constantly update WordPress itself (and its plugins) to keep up with security...
27th Mar 2017

Stay updated

Get a weekly newsletter with the top 5 articles worth reading every week.

More from Liz Denys

Lilypad mini quilt

While on a short road trip and then recovering from surgery, I hand quilted and hand embroidered a linen lilypad quilt. And yes, I did make this little quilt for my Frinos plush from Hades II to have a nice place to rest.

5th Jul 2026 • 1 votes
Things to consider when choosing a community ceramics studio, partial list

I've worked out of a handful of different community studios at this point, so I figured I'd share a (probably incomplete) list of you might want to consider when picking a community ceramics studio for your practice. Cost, location, value: I'm not going to comment too much on this as costs vary highly depend on what city/metro area/etc. you're in and you best understand what value you'll get and what you can afford. That said, if you live somewhere walkable and are planning on making at home, you might want somewhere you can walk to or get to with fewer transfers or shorter walking to make transporting fragile greenware simpler. Regardless of your budget, it's good to know all the costs up front: class tuition, membership fees, open studio time fees, firing fees, materials costs, etc. Also, if you live somewhere with a high demand for community ceramics studio access, you may not get to be that picky if you want to start sooner! Equipment and space: What equipment is provided? What condition is it in? How many wheels? How many wheels per member? How many wheels per student? Is there a slab roller? What size? Do they have dedicated canvases or mats for different color clay bodies? Which do you use if you use a non-studio claybody (if you're allowed). Is there an extruder? Which extruder dies does the studio have? Can you use your own if you buy more or make custom dies? What are the policies for who gets to use what equipment and training? Stricter policies usually means equipment will be in good condition, but only if it's enforced. Ask about how often equipment has needed repair and how to report issues, even if they have good policies. What do the workspaces look like? How much space is generally available per person? What kinds of chairs and stools are provided? Are stools at wheels adjustable? Are there bricks or similar available for resting feet on if that helps your wheel positioning? Are handbuilding and glaze area seats comfortable for you? What height are those work areas/chairs? This may not seem very important, but standing height tables can be much less comfortable if you're primarily going to sit. What does your storage space look like? Are shelves shared or do you get dedicated space? How much capacity and weight work on the shelves and how does that fit into your practice? Remember you may be storing tools and clay/reclaim as well as works in progress. There can be lots of politics around shelves - ideal ones are neither too high nor too low, all else equal, and can be very competitive to get. Highest shelves may also be highly coveted since you may be able to stack things very high and store more! How easy is it to move around the studio? How easy is it to get your pieces from the storage space to the working areas to the places where you set them to fire? Are there separate spaces for members and students? Even if there are dedicated student classrooms, do additional classes spill over into other areas or shared areas? How frequently? Is this information easy to find out before you get to the studio? Does the studio provide bats and wareboards? Remember, even if bats and wareboards are provided, you may want to bring your own that you can keep in better condition or have different properties. Are there shared studio tools? What condition are they in? Is there communal newspaper? Communal plastic for slowing down drying? Newspaper is easy to get yourself, but dry cleaning bags are hard to buy in individual-use quantities. Materials: What are the studio claybodies? Do they fit well in your practice? Are they smooth or groggy enough? Which colors of claybodies are available? How durable and food safe are they? Will they reach vitrification and achieve low absorption rates if you're making dinnerware or other vessels intended to hold water? Is clay communal or do you purchase your own? If so, does the studio reclaim for you or is it communal practice? What is done to ensure reclaim isn't short? If clay is not provided, can you buy it at the studio? 25 pound blocks of clay are heavy and annoying to transport if you walk, bike, and take transit everywhere like I do, so this can be a big deal! Can you do agateware/neriage/nerikomi? (Make sure you're doing this with compatible clays, of course.) This question is especially relevant if clay is communal as you cannot simply throw blended clay blocks into reclaim bins for a single clay as this would create a new claybody unexpectedly. Maybe you are required to reclaim yourself, maybe there's a miscellaneous reclaim, or maybe they accept a small amount of loss (remember you can minimize this by ensuring you use all your blocks up - the end can usually be wedged up into a new claybody and made into a little pinch cup or bowl worst case). Can you use outside claybodies? If yes, what's the approval process? Even if you are not personally interested in using outside claybodies, it's good to ask as free-for-alls can result in low fire clays melting all over shelves and ruin other people's work at hotter temperatures. Does the studio provide decorating slips and underglaze? If they don't provide, can you bring your own in? What's the approval process? Can you make your own decorating slips or colored claybodies with Mason stains or oxides? What's the approval process? What are the studio glazes? Are they clearly labeled as food safe vs. not? If multiple claybodies are common in the studio, how many glazes fit each and is this clearly labeled? Are there test tiles for every studio glaze on each studio claybody? Are there any test tiles for glaze combinations? Reminder that test tiles aren't a replacement for doing your own testing - different surface slopes, your dips may be longer or shorter - but they help give you a sense of what's compatible with which clay bodies and which are runny vs. stable. How and how often are studio glazes tested? Are new batches tested before they're put out for use? Are studio glazes typically kept in consistent conditions? Large buckets of glaze can change consistency over time. Is specific gravity monitored periodically so water can be added as needed? Are glazes flocculated well/kept well in suspension or are they often hard-panned? Can you use non-studio glazes? Typically, this means commercial glazes as homemade opens a gigantic can of worms. What's the approval process? Reminder that low fire materials used in higher temperature firings can mess up more work than just where they're used, so even if you're not planning on ever using non-studio glazes, it's good to know what checks are in place to avoid this issue. Does the studio provide wax? Wax brushes? What condition is it in? Does the studio provide oxide washes? Are you allowed to make your own if it doesn't? What's the approval process? Firings: What temperatures does the studio fire to? How does this match their claybodies? A lot of claybodies, especially commercial claybodies, claim to support a range of firing temperatures, but they're not fully vitrified at all of those temperatures, especially at the lower end of their ranges. If a studio fires to both cone 6 and cone 10 and you plan on working primarily with cone 6 glazes, either studio or commercial, and make food-safe pieces, is there an appropriate claybody that will reach vitrification or are they secretly really all meant for cone 10? If you're only interested in making non-functional work, this may not matter to you as much as someone making mugs or vases. Are there special firings, e.g. luster firings? If there are luster firings, make sure to inquire about their safety protocols around luster firings - even if you plan on never using luster, poor safety policies around luster can endanger the health of everyone in the studio. How quickly is work turned around? Faster isn't necessarily very important once you've settled in as you want to be in a flow that has work at all stages at all times so you always have something to do, but it can be helpful to plan your rhythm. What is being done to ensure quality materials and firings? Are cones used in every firing? Is work that is too wet or egregiously overglazed set aside or fired alongside everything else - causing frequent explosions and glaze mishaps that affect other people's work? Cleanliness and safety: How clean is the studio? If you can visit on a few different days, that might help. Do people generally clean up after themselves well? Don't forget to check glazing areas and the undersides of tables and such - lots of clay dust can hide there! Are people taught safe practices (wet cleanup, no dry sanding, etc.)? How often do they actually follow them? What supplemental cleaning does the studio staff do? How frequently? Are there air filters? What quality of cleaning do they provide and are they appropriately matched for the size of the studio? Are there air quality monitors? Note: this doesn't seem very common to find at community studios in my area, but it would be a good sign if the studio did! Access and security: Are there signups for specific space to use or is it a free for all? Signups can be frustrating, but you're guaranteed specific space at a specific time. I've noticed people are better at sticking to an appropriate amount of space for their work that's mindful of those around them when it's a space they have to sign up for, but the flexibility of being able to drop in whenever can be great, too! If studio time is signup-based, are new slots released at clear, consistent times that work for you or will you always be getting picks long after most others do? Do students and members have 24/7 access to the space or do they only access to the studio when it's staffed or it's their class or for times they've signed up for? When is the studio open? It can be especially helpful to check in on drying and potentially spray a piece with a little water if it's getting too dry before you're able to do work, even if it's not a time you can do work. It's also great for getting a sense of how quickly pieces dry at the beginning of new seasons/studio temperature and humidity conditions. Who's allowed in the studio? Are there video cameras? Staff on site? Studio flow: Getting a sense of a studio's flow is easiest by seeing and trying out the studio! Take a tour, attend a workshop, take a class! If you're interested in membership, it may still make sense to take a multiple-week class first, and at least in Brooklyn, a lot of studios require you to take a class at their studio before getting a membership to learn how their studio operates day to day. If you're interested in membership, note that membership flows and class flows might be different - different spaces, different open studio policies, different storage situations for work and tools, etc. for example, a studio I loved to work out of as a member was a terrible experience during a handbuilding class because it tried to cramp too many people in too small of a space, but members weren't in the member handbuilding areas as much all at once, so I could finally enjoy the studio. Also, students often share a communal shelf in my area, while members have more dedicated storage space, allowing for more projects at once and storing more tools and other items used in their practice. Community vibe: Is it more social? More get down to business? Loud? Quiet as a mouse? How do you vibe with the community? Does the studio have a code of conduct? Is it a good code of conduct? Does wearing headphones generally mean "don't bother me" or do people interrupt everyone frequently? How do the owners and staff interact with staff? How do owners and staff interact with students and members? What are their expectations of members? I've been at studios where the owners and staff really don't want to ever interact with you, but I also once worked out of a studio where the owner would roll in and interrupt whatever was going on to use whoever was at studio as their personal therapist... even though it was time those members and students were paying her to use the studio. While the latter is a pretty extreme example, I've heard from ceramist friends in many areas that it's sadly not that uncommon to encounter overbearing owners that sour the experience. Miscellaneous: Are you allowed to sell work you make there? Are there community shows/sales? Are there official or unofficial limits on the volume of work? Some studios only want potters who aren't making very small quantities of work or only small to medium sized pieces because they don't actually have the capacity for high throughput or larger work... but not all of them will have clear policies on this. If there's a limit but it's only an unofficial policy, it will likely be applied unevenly. Finally, while it's unlikely that every community studio, or perhaps even any community studio, will be a completely perfect fit for any given potter, I've personally found my practice to be enjoyable at every community studio I've been at with a good community vibe. The goal of this list isn't to find a reason to avoid any particular studio as much as knowing how a studio's choices or limitations might affect your practice so you know what to expect and how to adapt!

10th Mar 2026 • 1 votes
WWII watch cap crown shaping

Like so many other hat knitters, I've knitted the classic WWII watch cap, which is also known as Beanie no. 212, more than a handful of times. (You can find it on Ravelry here and here, respectively.) It's a charming, quick knit that's easy to resize, but I've never really liked the crown shaping on the original. I've knit a lot of these hats, and only one's had the original crown shaping for the decreases. I'm sharing two crown shaping variations I keep going back to below. I always knit this hat in the round, and my crown shaping patterns assume you will be knitting in the round, too. Alternate crown shaping 1 This alternate crown shaping follows the 6x2 ribbing of the previous section for the bulk of each round so that the ribbing continues throughout the entire hat. Written out: Divide stitches on 3 double pointed needles with stitches evenly divided among the three needles or mark out even sections with stitch markers if decreasing across 2 circular needles or with magic loop. (k1, ssk or skp, k if previous row was knit or p if previous row was purl until 3 stitches are left on the needle/before the next marker, k2tog, k) x3. Repeat step 1 until 4 stitches remain on each needle/in each marked section. Cut and draw yarn through the remaining 12 stitches 2-3 times. Tie off and weave in the ends. Alternate crown shaping 2 This alternate shaping both maintains the ribbing throughout the crown shaping and accentuates it by creating a sort of three-pointed star with 3 of the 2-stitch-wide purl parts from the previous 6x2 ribbed section. This shaping really only makes sense when making a size hat where the number of stitches is evenly divisible by 24, so I typically only do it on size "small" hats (cast on 96 stitches). You could adjust the needle size and gauge for a yarn that works well at that gauge to make this work for different sizes. Written out: Stop the last 6x2 ribbed row 1 stitch early and divide stitches on 3 double pointed needles with stitches evenly divided among the three needles or mark out even sections with stitch markers if decreasing across 2 circular needles or with magic loop. Ensure that each needle transition or marker has a single purl stitch on each side. (p1, ssk or skp, k if previous row was knit or p if previous row was purl until 3 stitches are left on the needle/before the next marker, k2tog, p) x3. Repeat step 1 until 4 stitches remain on each needle/in each marked section. Cut and draw yarn through the remaining 12 stitches 2-3 times. Tie off and weave in the ends. Additional project notes Needle: US 7 - 4.5 mm Gauge: 19 stitches and 24 rows = 4 inches in stockinette Hats made for me should generally be a small (cast on 96 stitches), and hats made for my partner Matt should generally be a medium (cast on 104 stitches). Footnotes Either of these will create a left-leaning decrease, use whichever one you prefer.↩ Ibid.↩

15th Dec 2025 • 1 votes
NYC Bike Rules for Drivers mini-zine

After five different drivers, including a school bus driver, aggressively close-passed me in Midwood last night and two of them threatened me just for being on the street, I realized there's a huge gap in educational outreach about bike rules in NYC: drivers. I decided to make a mini-zine that demystifies the behavior of law-abiding bicyclists like myself and helps drivers better understand what to expect when sharing the road: All text and illustrations in the mini-zine are my own. Many thanks to Matt Denys for help proofreading! This zine is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License, so you can copy and distribute this zine for noncommercial purposes in unadapted form as long as you give credit to me. Gas stations, car dealerships, auto repair shops, rental car offices, parking lots, book shops, restaurants, coffee shops, and other commercial establishments are welcome to give out these zines, too - as long as the zine itself is free! Check out the NYC Bike Rules for Drivers mini-zine on the web or download the pdf to print here!

21st Oct 2025 • 1 votes
How to fold a mini-zine

Here's how to fold a mini-zine, featuring my mini-zine So you want to make a public comment! Fold the printed mini-zine page in half, then half in again, and then in half again as shown. When you open the piece of paper, each of the pages should fit fully within a set of folds. With the mini-zine page completely open, fold it in half with short ends touching ("hamburger style") so the text is on the outside. Using scissors, cut a across the dotted line. When you reopen your paper, there will be a slit in the middle of the sheet. Fold the paper in half lengthwise with long ends touching ("hotdog style"), hold the paper at either end, and fold the sheet into itself to form an 8-page booklet. Make sure the cover is on the front!

15th Aug 2025 • 1 votes

More in programming

Origin of mail-in vote fuckery

Details of how the White House tried to suppress the vote by messing with mail-in voting. An early proposal was that all ballots would have to be sent via certified mail.

10 minutes ago • 1 votes
Lexxy 1.0 is here

Today we are releasing the version 1.0 of Lexxy. Lexxy is a rich text editor for Rails built on Lexical. It already powers Basecamp, Fizzy and many others, and it will become the default editor in Rails. I recently presented it in Rails World (slides, video coming soon). This is the article version of my talk. Trix hit a wall Trix has been our editor since 2015, and every Rails app’s editor since Action Text shipped in Rails 6. It’s small and reliable, and it has served millions of people for a decade. But in the last few years our customers kept asking for features like tables or code highlighting, and we kept struggling to deliver them. The reason is the Trix document model. A Trix document is a flat list of blocks. A block is a line of text with some labels attached, like quote, bullet list, bullet. There is no tree, and a block can never contain another block. Nesting is an illusion: at render time, adjacent blocks with the same labels get wrapped together. A flat list of blocks with very limited extensibility options That design bought a lot of simplicity, but you can’t express something like a table with it. Two cells next to each other would carry exactly the same labels, so Trix would merge them into one. The model can say “this bullet is one level deeper”. It cannot say “this cell is different from the cell next to it”. A tables issue has been opened since 2015! The model just can’t do it. The second problem was maintenance. An editor built on contenteditable behaves differently in every browser and even changes from time with operating system releases. In 2024, three iOS releases in a row broke typing, dictation or the caret in Trix, and each one cost us real effort to work around. Check this one as an example. Why Lexical This was a conversation we had at 37signals for years: 2022. We started a project to add tables to Trix. We gave up after a week. The document model can’t represent two-dimensional things. 2023. I built a proof of concept with Tiptap inside HEY. We liked it, but we never started a serious project with it. 2024. We built House, our own Markdown editor, for Writebook. Not WYSIWYG, but WYSIWYM: what you see is what you mean. A wonderful editor for long-form writing like books or technical documentation. 2025. We tried House in another product, and it didn’t fit. For most apps, WYSIWYG was just the right answer. 2025. We had the discussion again, and this time we looked at the whole field. Four years of the same conversation David ruled out Tiptap, CKEditor and the other commercial editors: an open source core with features kept proprietary, and a sales team behind them. We didn’t want our editor to depend on somebody else’s licensing decisions. Then we found Lexical: MIT, from Meta, and very powerful. I spent two weeks evaluating it, and in May we made the call to go with it. A tiny core. Pick the rest. Lexical’s core has zero dependencies and weighs forty-two kilobytes. In a way, it validates the approach that Trix pioneered. The document is an immutable state you never mutate directly, you just get new snapshots when performing updates; contenteditable is an input device and a rendering surface, never the source of truth. It has a DOM reconciler to update the actual DOM very efficiently, and other primitives to deal with handling commands and node transformations. Everything else, from lists to tables to markdown, is a package in the orbit. Lexxy uses thirteen of them. Lexical solved the maintenance problem too. Meta’s products like Facebook or Instagram use Lexical and their user count is in the hundreds of millions. This means that even small issues with new keyboards and devices are fixed fast by the dedicated Meta team that maintains it. Furthermore, Meta’s business is the products, not the editor. We much rather liked this structure of incentives for the long-term investment an editor represents. The iceberg The plan was simple. Pick Lexical, wire it up to Action Text, add a toolbar and ship it. Well, it didn’t go exactly like that. What you envision, and what's under the water Lexxy today is thirteen thousand lines of vanilla JavaScript on top of Lexical. A great editing experience is very hard to get right. An editor is a machine where the user can change the state in a thousand different ways. For example. you have two images one after the other and want to put the cursor between them, but there is nothing there to put a cursor in. Or somebody pastes from Google Docs, and you have to turn a pile of inline styles and empty spans into clean markup. And then Safari, and Android keyboards, and the clipboard, and undo, and… From the first pull request to Basecamp 5 The first pull request landed in May 2025. Fizzy launched with Lexxy in December, and Basecamp 5 in May this year. Basecamp was the real test: twenty years of content written with Trix, and people who use the editor all day, every day. Zoltán Hosszú and Samuel Péchèr were the key people who made this happen. The took a very green version of Lexxy, added a ton of features (including Tables) and polish, and they fixed countless bugs. They also pulled off a remarkable milestone: seamlessly switching millions of Basecamp users from Trix to Lexxy. What’s included? We didn’t want a to build Trix with tables. We had Lexical and we had agents to help, so we wanted to be ambitious here. We went for the whole package. Features In terms of major features: A color highlighter, built in instead of this being a custom Basecamp extension, as it was with Trix. Tables, with an interface we worked hard to keep simple and accessible. Markdown. You type it, you get rich text. Code blocks with syntax highlighting as you type, in more than twenty languages. Image galleries you can navigate and reorder with the keyboard. Prompts. Type a character, get a menu: mentions, emoji, or whatever your app needs. Links by pasting a URL over selected text. Previews of attachments like videos and PDFs, rendered as your app renders them. Action Text Native Lexxy is also Action Text native. Action Text stores attachments in a canonical format that Trix doesn’t speak, so it translates on save and again on render. We taught Lexxy to emit exactly that markup. What you see in the editor is what gets saved, and what gets saved is what your app renders. Your existing content, attachments and views keep working. That opened another door. Action Text now talks to an editor adapter, with an implementation for Trix and one for Lexxy, so switching is one line: config.action_text.editor = :lexxy. Here the credit goes to Sean Doyle, who started that pull request before Lexxy existed and took it to the finish line with our input. It ships with Rails 8.2, and we hope other editors will use it too. Extensibility And you can extend Lexxy. Extensions are built on Lexical’s own mechanism, and this is not a second-class API: Lexxy itself is thirteen extensions, tables included, and Basecamp has nine more. class MyExtension extends Lexxy.Extension { get enabled() { … } get allowedElements() { … } get lexicalExtension() { return this.defineExtension({ name: "my-extension", nodes: [ … ], register(editor) { … } }) } initializeToolbar(toolbar) { … } dispose() { … } } Lexxy.configure({ global: { extensions: [ MyExtension ] } }) My favorite of how extensible is Lexxy are voice notes in Basecamp: you record, you see the waveform while you talk, and it becomes a player inside the document. About a thousand lines, without forking or patching anything. Performance Lexxy is fast, because Lexical is fast. In a ten thousand word document, Trix takes thirty-eight milliseconds to process a keystroke. Lexxy takes four. Above fifty milliseconds, the editor starts feeling sluggish. Compared to Trix, Lexxy brought a whole new performance regime. Milliseconds per keystroke by document size Accessibility Accessibility in Trix was not great. In general, building accessible experiences for rich text editors built on top of contenteditable is quite hard. We had a dream team to help with Lexxy accessibility. Bruno Prieto worked with Michael Berger, our accessibility champion at 37signals, to bring the bar to where we wanted it to be. Bruno is an outstanding programmer who happens to be blind, so he knows one thing or two about accessibility, and he delivered. As a result, in Lexxy everything is reachable with the keyboard. The editor announces itself properly to screen readers, and it gets a thousand details right so that the editing experience using a screen reader is fantastic. You can learn more about accessibility in our docs. Security The latest AI models have resulted in an unprecedented explosion of vulnerabilities found, and we took this thread quite seriously. Lexxy counted with programmers of the caliber of Jeremy Daer and Mike Dalessio helping to make it more secure. We have put a lot of attention to sanitizing the editor contents, validating attachment URLs and making sure that the types of attachments and nodes the editor support are allow-listed. Lexxy also comes with preliminary Trusted Types support, to offer CSP-level control over certain DOM manipulation APIs. The trusted types policy is there, but we are not enforcing it everywhere yet. Agents We started Lexxy using Claude since day one. A main lesson was that an agent needs to drive the editor like a user does. The best decision we made in this project was moving the system tests from Capybara to Playwright: three browsers instead of one, a suite that runs in seconds, and a much more faithful clipboard, keyboard and focus. This represented a tremendous improvement in how agents could close the loop by themselves. Write a test, see it fail, fix it, see it pass. We have more than six hundred browser tests today. Moving the suite to Playwright changed how fast we could write tests With a solid testing foundation in place, we could start fixing bugs in large batches. As mentioned, getting a text editor right implies a ton of work, and the kind of backlog we got at some point would have have buried us in pre-agent times. We also used agents to validate the fixes: an agent reproduces the bug in the public Lexxy sandbox, checks that it’s gone with the branch applied, and labels the pull request. Agents were essential to get Lexxy done with the people and the deadlines we had: we are a small company, and the same people were shipping two products in parallel. 275 cards closed The new Rails default We believe Lexxy is the best rich text editor out there right now, and we are going to make it the default editor in Rails next. If you’re starting a Rails application today, use Lexxy. If you’re using Action Text with a standard configuration, switch. It’s one line, and we’ve worked hard to make it seamless.

48 minutes ago • 1 votes
George Dryden

Reading my recent computing retrospective, I realised there was a big section missing: the people in my life that made an impact and helped shape my career. Outside my immediate family, one person made an outsized contribution, and I’m fairly certain that without his influence my life would have taken a very different path. The fact that I’m still here in 2026, still writing code and being fortunate enough to have a career in something I love is testament to him. So I’d like to take a few moments to talk about my old secondary school teacher, George Dryden. Denied Back in 1995, I had a problem. I knew I wanted to study computing at university and build a career out of my passion, but there was a snag. For those unfamiliar with the UK schooling system, when you’re 15-16 you take a set of GCSE exams in a broad range of subjects. After that, you pick around 3 subjects to really focus on over a period of 2 years. These are called A Levels, and they are a big step up and are meant to prepare you for a degree-level course at university. Admission to university is also governed by these results - if you want to study computing, you’re going to need a computing A-Level, and most universities will only accept you (or “make an offer”) if you achieve a certain grade. And whilst I had taken computing at a GCSE level, my school did not offer a computing A-Level course. I instead had to settle on “Design & Technology”, which just didn’t inspire me. Instead of working on my portfolio and projects, I spent most of my time daydreaming and writing code on the Acorn Archimedes computers that were the staple of every 90s UK school. No disrespect to the teachers - they were all awesome - but it just wasn’t for me. I was miserable, and by the end of my first year, I was well on my way to failing outright with my entire future plans seemingly going up in smoke. Someone noticed That’s when George stepped in. He’d taught me computing right the way through my GCSEs, and with no A-Level course on offer, that was officially where his involvement was supposed to have ended. It didn’t. He had noticed my constant presence in the computing labs - before and after school, during lunch breaks, free “study” periods - working on some little pet project or digging into RISC OS internals. I remember him as warm, with a wicked, dry sense of humour, and a refreshingly spiky attitude to authority - I always got the sense he’d worked out for himself which rules were worth taking seriously and which ones weren’t. And he always had time for me. I spent years pestering him with questions that had nothing to do with anything on the syllabus, and he’d always find a way to answer them that actually made sense. He was just as supportive of my odd little obsessions. At one point I’d got deep into the BBS scene, which I thought was the coolest thing ever, and decided what the school really needed was an internal BBS running on its own network. So I wrote one. It was deeply cringeworthy, obviously - but George helped me put posters up around the school advertising it, and even gave it a mention in assembly one morning. I think about five people in total ever checked it out. It didn’t matter: a teacher had stood up in front of the entire school and treated my weird little project like it was worth something, and that was a hugely validating moment for me. Off the books He recognised the passion, and eventually he made a suggestion: What if I quit the Design and Technology course, and instead attempt the A-level course myself? Personally, I also suspect he was enjoying himself. There was some internal school politics behind why computing wasn’t offered at A-Level in the first place - I never knew the details - and I think the prospect of one of his students simply going out and getting the qualification anyway appealed to him on two separate levels. It would get me where I wanted to go, and it would wind up exactly the right people. It wouldn’t be easy, he warned. The school would be against it, plus it was a two-year course which I’d have to cram into one year. I’d have to do it all myself - studying, lesson planning, coursework - he couldn’t help me in an official capacity, but he said he’d advocate for me and help where he could. If I had assignments, he’d send them off to be graded and would give feedback in his own time. He’d enter me in for the exams and also gave me a set of keys to the computer lab so I could use it whenever I needed. It was the first time anybody outside my own family had really shown faith in my abilities and encouraged me to take a stand. It was a pivotal moment for me - I realised if I wanted something badly enough I would have to fight for it, but I could still make it happen. I didn’t have to take “NO” for an answer - a lesson I think I picked up from watching him as much as from anything he ever actually said to me. After a few weeks of dithering, I took the jump. I remember a few awkward meetings with the school administration but thanks to his behind-the-scenes work, I was soon following my dream. An intense year And yes, it was bloody hard work. I had to condense an entire two year course into under a year, be disciplined enough to produce my own study plan, and be critical enough of my own shortcomings that I could focus my study where it was needed. I pretty much lived and breathed it for months straight and was more-or-less a permanent fixture in the labs or school library poring over my course books. I’d make lists of questions and chat to George over lunch, and he’d provide guidance and encouragement. It was a lonely way to learn with no classmates to compare notes with, no lessons to turn up to, and right up until the end I had no real idea whether any of it was good enough - but bit by bit, it started to feel like something I could actually pull off. And sure enough, in the late spring of 1996, I sat down in an exam hall with my fellow students, the only one with an A-Level computing question paper in front of me. The final exam went by in a blur - I can only remember a few of the questions now (and a peculiar obsession with the Pascal language) - but I do remember the euphoria as the invigilator called “time’s up, pens down, close your papers NOW”. I had done it. A few nerve-wracking months later, my Mum drove me into school to pick up my results. I ripped open the envelope and saw it - I’d passed with an A grade! I literally ran up the stairs to George’s office next to the computing labs to thank him personally. I’d taken my camera into school to take a few last photos for memory’s sake and snapped this photo of him before I walked out the school gates for the last time: A different path Because of him, I managed to get into my university of choice, studying computing with a focus on networks. Because of that, I landed my first job working as a “webmaster”, and my career since has been one of the highlights of my life. All these years later, it’s a real privilege to be able to get up each morning and actively look forward to working in an industry I love. Without George stepping up for me and encouraging me to believe in myself, none of that would have happened. I wouldn’t have had the career I have, and I wouldn’t be where I am now. I met my wife when we both worked at a software company - she sat at the desk behind me - so even my home and family life can be traced back to that spring of 1996. And the A-Level itself was only half of what I took away from that year. The qualification opened the door to university, but the lesson that came with it was every bit as important: that a “no” isn’t always the end of it, and that sometimes the answer can be argued with. I’m so proud of what I managed to achieve all those years ago, and even more thankful to have had someone like George in my life to put me on the right track. Mr. Dryden I did see him again after I left. He drank in one of my local pubs - a pub I’d been going to for a good while before I was technically old enough to be in it - and I’d say hello if I spotted him in there, mostly in the months before I moved away to university. After that it was only a handful of times. For years I’d find myself scanning the room whenever I was back home and in for a pint, half expecting him to be at the bar. At some point I stopped seeing him altogether and eventually moved across the country. The trouble was I never really knew how to talk to him outside of school. He was always Mr. Dryden, or just “Sir”, I don’t think I ever once called him George to his face! I was (and still am if I’m honest) fairly socially awkward, and I never worked out how to phrase the thing I actually wanted to say: that he had changed the entire direction of my life, and I wasn’t sure he knew it. So instead I’d say hello, and ask how he was, talk about nothing much, and go back to my friends. Epilogue Sadly, 3 years ago now, I opened the latest issue of my old school alumni newsletter to read that he’d passed away. The photo at the start of this article was taken from his obituary article and I read that he’d had a long illness and had suffered from dementia at the end. I did write to him years ago by email - I don’t know if he ever got it, or was in any capacity to understand what he’d done for me, but I hope so. There’s an old saying by one of my favourite authors (Terry Pratchett) that “no one is finally dead until the ripples they cause in the world die away”. In one of his books, a character keeps the memory of his son alive by passing his name along a series of telegraph towers. It’s in that spirit that I’m writing this post - I debated it for many years as it’s very personal to me and I also have no contact with any of George’s family so I have no idea what they would make of it all. But even though it’s 30+ years ago now, I will never forget him or what he did for me - and at least now, if someone searches his name it’ll be recorded here for as long as I’m alive and running this site. Thank you, Sir. George Dryden 1942-2023

yesterday • 1 votes
How Copy-on-Write Works with Memory-Mapped Files

Let’s step inside the kernel and understand how it implements copy-on-write and what are its implications for the performance of user-space systems

yesterday • 1 votes
📚 BoredReading

You seem to be enjoying this.

Join free to unlock everything.

Create free account

Already have an account? Sign in