RSSAmplifier

Blog

mliezun.com

Personal blog by Miguel Liezun on programming, side projects, Rust, Python, and Django. Built with Grotsky, a toy language written in Rust.

mliezun.comRSS feed ↗43 posts

Latest posts

Writing web services in the AI-era

AI is making rewrites cheap and vulnerabilities easier to find. The stack that survives will be layered, boring at the boundaries, and easy for agents to swap one piece at a time.

What happened in December 2025 or how I got a 40x speedup?

I'm quite late to the discussion, but everyone has been saying that they have not written code since December. What happened? The release of Gemini 3 Pro, GPT-5.1 and Claude Opus 4.5 was a game changer. It was the first time that models were 'smart enough' to accomplish complex tasks.

Vercel-like development setup for Django using Caddy

Get {branch}.dev.yourdomain.com previews for Django (or any WSGI app) with a single VM, Caddy, and rsync—no Kubernetes required.

Work Hard

Work Hard If working hard is not working long hours nor performing exhausting tasks, then what is it? Working hard is working with purpose and care. We often relate the following conditions to hard work but they're not part of its essence: Working long hours. Not taking breaks/days off. Performing physically exhausting activities. Toxic work environment. Away from friends and family. Repetitive…

What's in the future?

Capabilities of AI tools are still advancing rapidly, doubling the length of tasks AI can do every 7 months. But what's more striking is that for Software Engineering this is accelerating at a higher pace.

AI generated content in this blog

AI generated content in this blog In the last year I increased the usage of LLM based tools for code generation. They have been of great help in improving the CSS styles and adding support for Dark and Light mode in this blog. The previous post: Benchmarking Wagtail was almost completely generated by Cursor. I did review it and decided to publish it but something felt off. Which led me to think…

Benchmarking Wagtail CMS Across Python Versions

I spent some time benchmarking Wagtail CMS across different Python versions to see how performance varies. The results are pretty interesting - Python 3.11 comes out on top with some solid improvements over 3.10.

Serving Python apps using the Caddy web server

Caddy is an enterprise grade web server and reverse proxy. I recently released a new version of `caddysnake`, a plugin to serve python apps more easily using Caddy without the need of installing another server like gunicorn, uvicorn, hypercorn or others.

The Enduring Simplicity of C

I recently came across a video by Salvatore Sanfilippo, the creator of Redis, titled "Why I use C and not Rust". It made me stop and think about the constant push for newer, "safer" programming languages.

Removing read time

For a long time I've had 'Read time

AWS Spot instance advisor

Spot instances are very useful for background jobs where you can afford them to be interrupted and retried. There's a useful tool that AWS provides called Instance Advisor where you can see which instances are more requested and try to avoid them.

Rick and Morty and the end of history

AI agents are like dishwashers. Yes, you can probably be more precise and clean the dishes better by hand, some of them might be even not dishwasher-friendly and require that you clean them by hand. But for most cases you just load the dishwasher and turn it on and come back in a few hours.

AI is a dishwasher

AI agents are like dishwashers. Yes, you can probably be more precise and clean the dishes better by hand, some of them might be even not dishwasher-friendly and require that you clean them by hand. But for most cases you just load the dishwasher and turn it on and come back in a few hours.

DjangoCon Europe 2025

I attended DjangoCon Europe this year, it was my first software conference, I always wanted to go to one, but never took the time until this year. A great experience overall, the most rewarding thing was meeting so many wonderful people.

Advent of Code 2024

I discovered AOC quite late in my career. I feel it's more like something one does when it's in college, my first participation was in 2023, and 2024 was my second. The first time I was very into it and I had a lot of fun, the second time I just found challenges to be repetitive, very similar to the year before but with a slightly different story.

Caddy Snake improvements

I've been planning on improving Caddy Snake, making it more stable and easier to use. Right now, I want to add automatic tests for Django, and build binaries and Docker images for arm64 and riscv64. I'd also like to turn it into a Python package so you can plug it straight into your code.

Finding and fixing a bug in Python subinterpreters

Lately, I've been working with Python C-API. I wanted to use subinterpreters with their own GIL to unlock the performance gains promised by being able to execute many threads in parallel which was not possible before Python 3.12.

From Script to Binary, Creating single executables with Grotsky

Recently I added the possibility to embed compiled scripts to Grotsky, this makes it super easy to generate single executables that can be easily distributed.

Using Go Generics to create a Single file JSON DB

Storing your data in a single json file can be useful when there isn't much state that needs to be tracked. In this post we leverage Go's generics to implement a simple JSON DB.

Generating posts using markdown

Custom Markdown parser and HTML generator using Grotsky, my toy programming language that powers this blog. Up until now I've used a hacky HTML generator that relies on lists. Now I'm integrating a simple MD parser that makes it easier to write new articles.

Day 20. My favourite problem from Advent of Code 2023

Advent of code 2023 has gone by, this is my first year participating. It's been fun and I want to share the problem that I enjoyed the most. It's based on simple electronic devices sending signals or pulses to each other.

I rewrote my toy language interpreter in Rust

I'm rewriting Grotsky (my toy programming language) in Rust, the previous implementation was done in Go. The goal of the rewrite is to improve my Rust skills, and to improve the performance of Grotsky, by at least 10x. This has been a series of posts, this one is the latest one. Hopefully the best and most insightful of them all.

Rewrite my toy language interpreter in Rust, an update

I'm rewriting Grotsky (my toy programming language) in Rust, the previous implementation was done in Go. The goal of the rewrite is to improve my Rust skills, and to improve the performance of Grotsky, by at least 10x.

The end of a side project

Cloud Outdated was a personalized digest of updates for cloud services. It's sad to see it go, but it was a fun project to work on, learn some new stuff and collab with a friend. There are some takeaways from this that I'd like to share.

Rewrite my toy language interpreter in Rust

I'm rewriting Grotsky (my toy programming language) in Rust, the previous implementation was done in Go. The goal of the rewrite is to improve my Rust skills, and to improve the performance of Grotsky, by at least 10x.

Writing a Redis clone in Go from scratch

In this post we're going to write a basic Redis clone in Go that implements the most simple commands: GET, SET, DEL and QUIT. At the end you'll know how to parse a byte stream from a live TCP connection, and hopefully have a working implementation of Redis.

How to write a program that can replicate itself

Grotsky is a toy programming language that I made for fun. Today we're visiting the concept of Quines, a.k.a. self replicating programs. It's said that any turing-complete language should be able to write a program that replicates itself. And grotsky is no exception.

Migrate from Heroku to Fly.io

A couple weeks ago Heroku announced the removal of free dynos. I have plenty of projects running on free dynos. I have taken some time to move my code to Fly.io. And also I've written a little tutorial of how to perform the migration.

Branchable MySQL: Managing multiple dev environments

When teams start to grow, having a single dev environment becomes an issue. People start stepping on each other's toes. A common problem is that two people want to apply incompatible migrations on the database. That problem is impossible to fix if folks are working on parallel branches. If we can have a database for each branch of a project, that will remove much of the pain of having multiple…

Webscraping as a side project

Cloud Outdated is a personalized digest of updates for cloud services. Works like a newsletter where you can choose which services you want to get notified about. For example: Subscribe to AWS Lambda with Python runtime, and you'll get an email when 3.10 is supported.

Blake3 hash plugin for MySQL written in Rust

Using Rust to create a MySQL plugin that implements blake3 hash.

Playing with Javascript Proxies (getters/setters)

In this last post of the year I play with proxies in an attempt to create a Javascript object where changes are appended to a log and can be reverted by deleting the last element of the log using getters and setters.

I created a programming language and this blog is powered by it

I created my own programming language using Go, then I built a blog engine and used that engine to build this blog.

Mlisp: My own lisp implementation compiled to WASM

Lisp implementation written in C that compiles to WASM with emscripten.

Grotsky Part 4: Writing a service to get your public IP

Part 4 of building my own language series. This time I write and deploy a service to Heroku that lets you retrieve your public IP.

Executing python code from MySQL Server

Evaluate python expressions inside MySQL using a UDF that binds to python interpreter.

Writing your own C malloc and free

Challenge for writing your own implementation of malloc and free.

Grotsky Part 3: Interpreting

Part 3 of building my own language series. Interpreting expressions and statement, traversing the Abstract Syntax Tree.

Grotsky Part 2: Parsing expressions

Part 2 of building my own language series. Parsing expressions, traversing and printing the Abstract Syntax Tree.

Grotsky Part 1: Syntax

Part 1 of building my own language series. Defining the syntax of grotsky toy language.

Sudoku Solver

Iterative + recursive sudoku solver using python magic methods.

Crafting interpreters

Lox language interpreter based on the book craftinginterpreters.com by Bob Nystrom.

Reinventing the Wheel: PHP Generators

Attempt of a lunatic to recreate functionalities that a language already has using the same language, and failing.