Nibble Stew
A gathering of development thoughts of Jussi Pakkanen. Some of you may know him as the creator of the Meson build system. jpakkane at gmail dot com
C++Dev tools / editors / IDEsPerformance / optimizationEssays / personal
- Posts
- 338 from 24 Jun 2015 to 30 Oct 2026
- Posting
- weekly (25 in the last year)
- Kind
- personal blog
- Feed
- https://nibblestew.blogspot.com/feeds/posts/default
2026 21
- A slightly better ThreadPoolExecutor in Pystd through types
- Implementing a simple version of ThreadPoolExecutor in Pystd
- Destroying all of humanity is hard work, even for a superintelligence
- Stanisław Lem foretold the current LLM mania in 1964
- Digitizing super 8 film yourself
- Fixing a super 8 projector from the 70s
- Pystd standard library, similar-ish functionality with a fraction of the compile time
- Beware of Star Trek managers, especially when bearing MBAs
- Faking keyword arguments to functions in C++
- CapyPDF is approaching feature sufficiency
- Multi merge sort, or when optimizations aren't
- Sorting performance rabbit hole
- Everything old is new again: memory optimization
- Simple sort implementations vs production quality ones
- Discovering a new class of primes fur the fun of it
- What's cooking with Pystd, the experimental C++ standard library?
- C and C++ dependencies, don't dream it, be it!
- How to get banned from Facebook in one simple step
- AI and money
- Converting Chapterizer from Cairo + Pango to CapyPDF
- New year, new Pystd epoch, or evolving an API without breaking it
2025 25
- An uncomfortable but necessary discussion about the Debian bug tracker
- An Appeal from the United Federation of Dictators, Despots, Evil Emperors and Tyrants
- 3D models in PDF documents
- Creating valid PDF/A-4 with CapyPDF
- CapyPDF 1.8.0 released
- Building Android apps with native code using Meson
- In C++ modules globally unique module names seem to be unavoidable, so let's use that fact for good instead of complexshittification
- Trying out import std
- We need to seriously think about what to do with C++ modules
- Reimplementing argparse in Pystd
- Let's properly analyze an AI article for once
- Comparing a red-black tree to a B-tree
- AI slop is the new smoking
- Deoptimizing a red-black tree
- Book creation using almost entirely open source tools
- A custom C++ standard library part 4: using it for real
- Custom C++ stdlib part 3: The bleedingest edge variant
- Iterators and adaptors
- Optimizing page splits in books
- Writing your own C++ standard library part 2
- Writing your own C++ standard library from scratch
- The price of statelessness is eternal waiting
- C++ compiler daemon testing tool
- The trials and tribulations of supporting CJK text in PDF
- Measuring code size and performance
2024 21
- CapyPDF 0.14 is out
- Meson build definitions merged into Git's git repo
- CMYK me baby one more time!
- Compiler daemon thought experiment
- PDF/AAAARGH
- Happenings at work
- CapyPDF 0.12.0 released
- On M and S Type Processes in Software Development
- Meson's New Option Setup ‒ The Largest Refactoring
- Refactoring Python dicts to proper classes
- Why refactoring is harder than you think, a pictorial representation
- Advanced text features and PDF
- Generative non-AI
- C is dead, long live C (APIs)
- CapyPDF 0.10.0 is out
- Aesthetics matter
- Color management and API design
- CapyPDF 0.9.0 released
- Creating tagged PDFs with CapyPDF now sort of possible
- CapyPDF 0.8.0 released
- C++ module tooling emulator playground
2023 41
- Tagged PDF funsies
- Even more breakage in the C++ module world
- AI silliness: getting to a no
- On the scalability of C++ module implementations or lack thereof
- CapyPDF 0.7.0 released
- CapyPDF, performance and shared libraries
- CapyPDF 0.6.0 is out
- The road to hell is paved with good intentions and C++ modules
- Could we make C arrays memory safe? Probably not, but let's try anyway
- Circles do not exist
- A logo for CapyPDF
- CapyPDF 0.5 is out
- The least convenient way of defining an alpha value
- Creating a PDF/X-3 document with CapyPDF
- PDF transparency groups and composition
- CapyPDF 0.4 release and presenter tool
- PDF and embedded videos
- PDF subpage navigation
- Functionality currently implemented in CapyPDF
- A4PDF has been renamed to CapyPDF
- A4PDF release 0.2.0
- Advanced dependency management and building Python wheels with Meson
- Annotated PDF, HTML, exporters
- The real reason why open source software is better
- The unbearable tightness of printing
- PDF forms, the standard that seemingly isn't
- Some details about creating print-quality PDFs
- Got the Star Trek - The Motion Picture Director's Edition box set? You might wan to check your discs
- In which you find out that everything you assumed was wrong
- The joy of font debugging
- The PDF text model is quite nice, actually
- First A4PDF release, version 0.1.0 "embarrasment"
- My book is finally available for purchase
- The code functionality tipping point
- Unit testing PDF generation
- PDF output in images
- Plain C API design, the real world Kobayashi Maru test
- More PDF, C API and Python
- PDF with font subsetting and a look in the future
- Typesetting an entire book part V: Getting it published
- PDF, text and fonts, a design by The Devil & Associates
2022 34
- A quantitative analysis of the Trade Federation's blockade of Naboo
- After exactly 10 years, Meson 1.0.0 is out
- Print quality PDF generation, color separations, other fun stuff
- Color management, this time with PDF
- Going inside Cairo to add color management
- Experimenting on how to add CMYK and color management to Cairo
- If you don't tolerate it in new code you should not tolerate it in old code either
- Making Visual Studio compilers directly runnable from any shell (yes, even plain cmd.exe)
- Using cppfront with Meson
- "Why is it that package managers are unnecessarily hard?" — or are they?
- Diving deeper into custom PDF and epub generation
- Questions to ask a prospective employer during a job interview
- Looking at LibreOffice's Windows installer
- Random things on designing a text format for books
- Making decision without all the information is tricky, a case study
- Implementing a "mini-LaTeX" in ~2000 lines of code
- That time when I accidentally social engineered myself to a film set
- Further adventures in creating a custom math-themed jigsaw puzzle
- Attempting to create an aesthetic global line breaking algorithm
- Creating your own math-themed jigsaw puzzle from scratch
- A look in the game design of choose-your-own-adventure books
- Sometimes the real world gives you unexpected comedy gold
- Of snaps and stratagem
- Getting web proxys and certificates working on Linux or "if it's all the same to you, I'd rather take a thousand years of the Sarlacc pit, thankyouverymuch"
- Looking at building some parts of the Unreal engine with Meson
- The C++ best practices game jam sample project Meson conversion
- Please provide tarball releases of your projects
- Supporting external modules in Godot game engine with Meson
- Typesetting an Entire Book Part IV: The Content
- Converting Godot game engine to Meson, how you can help
- Compiling LibreOffice with Meson even further
- Porting the LO Windows build to macOS
- Building a part of LibreOffice on Windows using only Meson and WrapDB
- Portability is not sufficient for portability
2021 29
- This year receive the gift of a free Meson manual
- Typesetting a whole book part III, the analog edition
- A call for more downstream testing of Meson
- Glyphtracer 2.0
- Swappable faceplates for laptops
- Hercule Poirot and the Mystery Box, as written by JJ Abrams
- Looking at building O3DE with Meson, part II
- How much effort would it take to convert OpenSSL's Perl source code generators to Python?
- A quick look at the O3DE game engine and building it with Meson
- A followup to the Refterm blog post
- Looking at the performance of Refterm
- Typesetting a full book part II, Scribus
- An overhaul of Meson's WrapDB dependency management/package manager service
- Formatting an entire book with LibreOffice, what's it like?
- Managing dependencies with Meson + WrapDB
- Why all open source maintainers are jerks, the Drake equation hypothesis
- .C as a file extension for C++ is not portable
- Is the space increase caused by static linking a problem?
- "Should we break the ABI" is the wrong question
- The joys of creating Xcode project files
- Converting a project to Meson: the olc Pixel Game Engine
- Never use environment variables for configuration
- Writing a library and then using it as a Meson dependency directly from upstream Git
- Microsoft is shipping a product built with Meson
- Mixing Rust into an existing C shared library using Meson
- Millennium prize problems but for Linux
- Why most programming language performance comparisons are most likely wrong
- Using a gamepad to control a painting application
- Quick review of Lenovo Yoga 9i laptop
2020 42
- Some things a potential Git replacement probably needs to provide
- How Apple might completely take over end users' computers
- Adding (very) preliminary support for C++ modules in Meson
- The Nine Phases of an Open Source Project Maintainer
- Proposal for target-private directories for compilers
- You wanted Boost via Meson subprojects? You got it! (sorta)
- How to build dependencies as Meson subprojects using SDL as an example
- The Meson Manual: Good News, Bad News and Good News
- Cargo-style dependency management for C, C++ and other languages with Meson
- Does C++ still deserve the bad rap it has had for so long?
- Is your project a unique snowflake or do you just think that it is?
- Want GCC's cleanup attribute in Visual Studio? Here's what to do.
- Proposal for a computer game research topic: the walk/game ratio
- Resist the urge to argue about app store security
- It ain't easy being a unique snowflake, the laptop purchasing edition
- Most "mandatory requirements" in corporations are imaginary
- The second edition of the Meson manual is out
- About that "Google always builds everything from source every time" thing
- Pinebook Pro longer term usage report
- The ABI stability matryoshka
- What if? Revision control systems did not have merge
- What is best in open source projects?
- The human brain comprehends atoms but it does not comprehend electrons
- Short term usability is not the same as long term usability
- The need for some sort of a general trademark/logo license
- Enforcing locking with C++ nonmovable types
- Let's talk meta
- You have to kill your perlings
- Do humans or compilers produce faster code?
- Your statement is 100% correct but misses the entire point
- Meson manual sales status and price adjustment
- It's not what programming languages do, it's what they shepherd you to
- The character that swallowed a week
- Meson manual sales numbers and a profitability estimate
- Unity build test with Meson & LibreOffice
- Open source does not have a reward mechanism for tedious
- Building even more of LibreOffice with Meson, now with graphics
- Trying to build a slightly larger slice of Libreoffice with Meson
- Building (a very small subset of) LibreOffice with Meson
- Creating your own physical or PDF manual
- How the Meson manual sales pipeline is set up and how to set your own
- The Meson Manual is now available for purchase
2019 27
- How about not stabbing ourselves in the leg with a rusty fork?
- What can clang-format teach us about the human condition?
- Notes on tax issues on selling digital goods internationally
- There are (at least) three distinct dependency types
- Process invocation will forever be broken
- Some intricacies of ABI stability
- What is -pipe and should you use it?
- Apple of 2019 is the Linux of 2000
- A look into building C++ modules with a scanner
- New Meson mugs, get them while they're hot!
- C++ modules with a batch compiler feasibility study
- Building C++ modules, take N+1
- Metafont-inspired font design using nonlinear constraint optimization and Webassembly
- A personal story about 10× development
- Initializing all local variables with Clang-Tidy
- Tweaking the parallel Zip file writer
- Looking at why the Meson crowdfunding campaign failed
- Emulating rpath on Windows via binary patching
- Why crowdfunding freely licensed documentation is illegal in Finland
- The Meson manual crowdfunding campaign
- An important message to people designing testing frameworks!
- Could Linux be made "the best development environment" for games?
- What if everything you know is wrong?
- Introducing the Meson Quest
- Why is cross-language cooperation so hard?
- On possible futures of Meson
- Meson's new logo: a design process
2018 24
- The performance impact of zeroing raw memory
- Compile any C++ program 10× faster with this one weird trick!
- Simple guide to designing pleasant web sites
- Some use cases for shared linking and ABI stability
- Things Microsoft could do to make life of developers easier
- The compiler as a shared library
- Linker symbol lookup order does not work the way you think
- The Internet of 200 Kilogram Things: Challenges of Managing a Fleet of Slot Machines
- Implementing a distributed compilation cluster
- Building native multiplatform GUI apps with Meson
- Why Git is terrible in four pictures
- How expensive is globbing for sources in large projects
- Easy MSI installer creator
- Dependencies with code generators got a lot smoother with Meson 0.46.0
- Cookie purging the simple way
- Comparing Meson with Bazel on a Raspberry Pi 3
- And now for something completely different
- Stop trying to guess display language based on keyboard layout
- Compiling Cargo crates natively with Meson
- On the unoptimalities of language specific build systems
- Projects and features Meson could use help with
- Automatically finding slow headers in C++ projects
- Meson's dependency manager in action building GTK
- Looking inside a Linux powered slot machine
2017 35
- These three things could improve the Linux development experience dramatically, #2 will surprise you
- Creating an USB image that boots to a single GUI app from scratch
- "A simple makefile" is a unicorn
- Comparing C, C++ and D performance with a real world project
- Aiming for C++ sorting speed with a plain C API
- Comparing C and C++ usage and performance with a real world project
- Dependencies, why are they so hard to get right?
- Apple laptops have become garbage
- Reconstructing old game PC speaker music
- Managing the build definitions of a big project with many subprojects and interdependencies
- Experiment: binary size reduction by using common function tails
- Is every build system using Ninja just as fast as every other?
- Writing your own simple GUI SSH client
- Of XML, GUIDs and installers
- Optimizing code: even the simplest things are unbelievably complex
- Gee, optimization sure is hard
- Emulating the Rust borrow checker with C++ part II: the borrowining
- Emulating the Rust borrow checker with C++ move-only types
- A list of common Meson antipatterns
- The Infinity Horse
- Why don't you just rewrite it in X?
- How Meson is tested
- Meson project status update
- Inspector Gadget as an allegory of software engineering profession in the modern age
- Debian package dependency browser
- Is static linking the solution to all of our problems?
- Dependencies and unity builds with Meson
- Looking into what Rust can do that other languages can't ... or can they
- Enabling HTTPS is easy
- Testing exception vs error code behaviour with real world code
- A Python extension module using C, C++, FORTRAN and Rust
- Using a smart card for decryption from the command line
- Measuring execution performance of C++ exceptions vs error codes
- Clarifications to xz compression article
- Beating the compression performance of xz, or has the time come to dump tar?
2016 20
- Comparing executable size of C++ exceptions vs plain C error structs
- What is the global cost of Autoconf?
- On reversing btrees in job interviews
- What does configure actually run
- Building code faster and why recursive Make is so slow
- Exposing a C++ library with a stable plain C API
- Unix Userland as C++ Coroutines
- The unspeakable horror of Visual Studio PDB files
- How to convert an Autotools project to Meson
- Weird USB disk slowdown with multiple readers
- Comparing GCC C cleanup attribute with C++ RAII
- Running COBOL on Arduino using the Meson Build System
- Meson build system now has Arduino support
- Performance testing a new parallel zip file implementation
- Jzip parallel unzipper performance results
- Rewriting from scratch, should you do it?
- A look into Linux software deployment
- Testing performance of build optimisations
- Simple new features of the Meson build system
- Snappy Answers to Stupid Questions - Google Job Interview Edition
2015 19
- Are exceptions slower than error objects
- Always use / for directory separation
- Build speed comparison on the Raspberry Pi 2
- Solving the C/C++ dependency problem through build system composability
- A difference in complexity
- Shell script or Python?
- Proposal for launching standalone apps on Linux
- Some comments on the C++ modules talk
- Linux ABI compatibility even reduxer
- Linux applications backwards compatibility redux
- Proposal for a dependency security scheme for sandboxed apps
- Make your tool programs take file name arguments
- Not handling filenames with spaces should be classified a fatal bug
- Running Linux installs with a different CPU
- List of achievements for an open source project
- Strange requirements of low level packages
- The fable of mashed potatoes
- How many is too many?
- Simple structure of arrays with C++ templates