Introduction In my setup, some workstations run macOS. Recently, I encountered a task I hadn’t faced before on macOS — scheduling recurring tasks. This note outlines the recommended approach and provides a basic introduction and step-by-step guide for achieving this, leaving the rest for you to explore further on your own. This note is by no means a comprehensive guide and may contain inaccuracies. My aim is simply to cover the essentials and give you a nudge in the right direction for fu...| Archive on Serghei's Blog
This story started when I connected a fresh domain to Fastmail. I wasn’t expecting any issues at first — after all, it was just email, right? But things didn’t quite go as planned. Let me walk you through why I turned to AI for a solution. Fastmail Email Setup: My Experience I hooked up a brand-new domain to Fastmail, one I’d just bought from GoDaddy specifically for email purposes. About 20 minutes after the nameservers started resolving, I sent the first couple of test emails to mak...| Archive on Serghei's Blog
FFI (Foreign Function Interface) is a classic abstraction that allows you to invoke functions written in other programming languages from the code in your target language. In this article, we’ll explore what FFI is, how it works, and how to use it in Python. This article is by no means a comprehensive guide and may contain inaccuracies. My aim is simply to cover the essentials and give you a nudge in the right direction for further study. I’ve also intentionally simplified some examples f...| Archive on Serghei's Blog
There is a set of standard HTTP headers that every website should implement to ensure a basic level of security. In this note, I’ll cover these headers and how to set them up for sites deployed on Netlify. Common Security Headers First, let’s review the basic HTTP headers — these are general for all requests and provide a foundational layer of security. Content-Security-Policy Header This helps protect your website from Cross Site Scripting attacs by providing a list of approved content...| Archive on Serghei's Blog
In this post, I’ll tackle a straightforward problem: launching a Celery task X after all tasks Y have been completed. Task X needs to take the result of all the tasks Y as an input. While it seems like a brute-force solution would be to manually store each result of task Y, it’s more interesting to achieve this using Celery without manual database manipulations or extra code. This guide is not meant to be an exhaustive or comprehensive manual; consider it more like a cheat sheet. Througho...| Archive on Serghei's Blog
I’ll admit, I don’t use GnuPG intensively. So when I need it, I find myself rummaging through bookmarks, notes, and past command histories, trying to remember how I did it last time. This recurring quest was enough to nudge me into making a cheat sheet for GnuPG’s essential commands. As I put it together, I decided to include not just the things I personally need to remember but also more general information to make it useful for others too. I hope I succeeded. If you spot any inaccurac...| Archive on Serghei's Blog
Intro This article continues my exploration into formal grammars. If you haven’t read the first part yet, I highly recommend you start there before diving into this one. Otherwise, some things might seem unclear or not fully explained. And if you spot any inaccuracies or feel I should add something interesting, feel free to let me know. META II In 1963-1964, just a few years after the creation of BNF, Dewey Val Schorre — who was at UCLA at the time — developed a programming language cal...| Archive on Serghei's Blog
This guide explores how to evolve Emacs into a robust Python IDE. Whether you’re writing simple scripts or managing large-scale projects, you’ll find a setup that aligns with your engineering needs and reflects the power of Emacs customization.| Serghei's Blog