Part of the “ Rustober ” series. I found it interesting that Rust doesn’t have initializers. (It doesn’t have classes either and those may be related.) You either set all the fields on a struct directly, create a function which acts like a memberwise initializer and is named new(…) by convention, or use a builder pattern : use std::thread; struct Point { first: i32, second: i32, }; // Set all…
Part of the “ Rustober ” series. One of the Rust quirks is that when initializing a struct, the named fields can be in any order: struct Point { first: i32, second: i32, third: i32, } let p = Point { third: 1, second: 2, first: 3 }; In Swift, this is an error. However, looking at the rules for C initialization , it seems the C behavior is the same, called “designated initializer” and has been…
Part of the “ Rustober ” series. Just finished my paper copy of “The Rust Programming Language” (2 nd edition covering Rust 2021), the same one that I shared in a previous post . I thought earlier that I’d finish about half, up to more advanced topics, and I’d be ready to work on my side project. However, looking at all the advanced syntax and concepts the external libraries are using , the choice…
Part of the “ Rustober ” series. Rust’s cargo tool is quite pleasant to use. I know that Rust projects generally use many dependencies in total (dozens) and I thought: how do I get a dependency tree? Turns out, cargo has a built-in tree command. The output for my project that I described in “ A Rust web service ” is a bit scary! The stars * mean that this dependency is present somewhere else in…
Part of the “ Rustober ” series. Coming from any practical programming language to Rust, we need to learn its system of memory ownership which is different to what we’re used to. Even if some concepts are familiar from languages with manual memory management (like C and C++), or the application of them is familiar like in languages with a garbage collector, Rust will surprise you. I like how…
Part of the “ Rustober ” series. A web service in Rust is much more than it seems. Whereas in Go you can just srv := &http.Server{} and srv.ListenAndServe() , in Rust you have to bring your own async runtime. I remember when async was very new in Rust, and apparently since then the project leadership never settled on a specific runtime. Now you can pick and choose (good), but also you have to pick…
Part of the “ Rustober ” series. As I said in the first post of the series , parts of Rust are remarkably similar to Swift, such as Option<T> and Result<T> . Let’s try to compare Rust traits to Swift protocols. I’m very new to Rust and I’m not aiming for completeness, so take it with a grain of salt. Looking at them both, Swift leans towards developer ergonomics (many things are implicit, less…
Part of the “ Rustober ” series. If you look for “Rust compilation speed” or “Rust compile times” people complain quite a lot that Rust is slow to compile (here’s a fairly recent investigation of what contributes to that). At the same time, there are techniques that can reduce the total compilation time for a project by a significant factor (here’s a bit of an older post from 2021 on the topic ).…
Part of the “ Rustober ” series. What surpised me the most in the 2024 State of Rust Survey results was how many people were actually developing on Linux, and it clearly leading the chart for several years running. Truly, the year of Linux on the desktop. The presence of WSL implies that people could be developing in a Linux container, but the percentage is still too high. This is surprising to…
Part of the “ Rustober ” series. I like me a thick programming book: “The C++ Programming Language”, “ Practical Common Lisp ”, PAIP , even SICP to some extent — all have been enjoyable to read. However, I treat them like books , not like reference or an exercise book. I read through from beginning to the end, usually over just a few days, and then immediately start coding. This works for me…
Part of the “ Rustober ” series. Rust is my next first-choice language for making things. It now possesses a combination of traits (get it?) that make it an obvious choice. I’m writing Swift full-time at work (and have been since 2014) and I would have happily picked Swift if it ever became what it was supposed to: Swift never became truly cross-platform — I was really hoping for it. Rust did.…
This is just a short post to say that Typingvania is OUT NOW on Steam (Windows, macOS) and Mac App Store ! When I started the project back in the beginning of 2024 I knew I wanted a release “sometime in the future” but I didn’t realize how much the game would change, or when I’d be able to release it. From a simple prototype it grew to something I was serious about, so I spared no effort helping…
Noel Berry’s recent article “ Making Video Games in 2025 (without an engine) ” has been making rounds on Hacker News. Noel Berry is one of the developers of Celeste, a successful and technically excellent game. The main point of the article is that he doesn’t use big commercial engines (Unreal and Unity) because he doesn’t need most of their functionality. It’s more fun to do things on your own…
Today I came across the article “ Deciphering language processing in the human brain through LLM representations ” on the Google Research blog. It claims the neural activation in the brain for understanding and producing speech is similar to that of Whisper , OpenAI’s speech recognition model. Representing language on the computer, or even better, deciphering how exactly it is represented in the…
First let’s look at what changed since the previous devlog . The main Typingvania codebase is now more than 15,000 lines of C! Multiple UI languages I studied to be a linguist and I strongly believe software should be available in as many languages as possible. Typingvania does not have much UI text, no more than 200–250 strings, and this is a trivial amount to translate into many languages. I…
I have not made any gameplay changes since the previous devlog . To me, the core loop is proven and working (even though it’s far from done), so I put it aside for a while and focused on making Typingvania more of a playable game rather than a tech demo. Saving There are three crucial parts to Typingvania: typing, saving progress and statistics. I waited until typing was where I wanted it to be,…
Since I pushed the previous demo last March , I had trouble continuing working on Typingvania in Godot. I disliked how there was no good, consistent way to generate resources: I had to run the engine in console mode and then delete and add the resource in the UI, and wait for a few seconds while it got processed. I quickly picked up GDScript and I liked it, but I couldn’t use it for anything else…
Several times I saw someone on LinkedIn post something along the lines of: Why won’t they hire me, a senior engineer with 15 years of experience, for a position that requires language X, but I’ve written in languages Y and Z — don’t they know a true software engineer can learn languages quickly on the job? I have attempted to learn and write several languages over the years (in no particular…
Dmitrii Kovanikov writes posts about enterprise software development and functional programming, both entertaining and serious. I never used a functional programming language (such as Haskell or OCaml) at work, but several ideas from functional programming have become popular in mainstream general-purpose programming languages such as Swift (which I mostly write). Often even a partially functional…
The CI pipeline takes an hour to run and it’s getting longer every month. There are five slightly different implementations of the same thing in the codebase. The docs for the network module were last updated two major versions ago. The project has a few thousand warnings. “It is what it is.” The project you work on may not be as bad as this, but there are pockets of persistent inefficiency all…
I like to find things out to add them to my mental intuitive decision-making framework. These “factoids” bring more data points and evidence to the surface to strengthen the result. The big “but” is while learning new facts is enjoyable, the result is not as much improved as I’d like to believe. While the knowledge-gathering activity is useful for writing by sparking unexpected associations, it…
I’ve read a couple of books by Pema Chödrön this year and it got me thinking that good coding is Buddhist coding. Hear me out. One of the core practices in Buddhism is staying in the present moment. In software development terms it would mean that the current snapshot of a codebase works how it is implemented, and your goal as a developer is to fulfill the immediate next requirement — and that’s…
Writing, for me, is a process ripe for distraction. As William Zinsser said in “On Writing Well”: A writer will do anything to avoid the act of writing. I can testify from my newspaper days that the number of trips to the water cooler per reporter-hour far exceeds the body’s needs for fluids. Everyone deals with it differently. I like to physically remove distractions: phone, music, internet,…
Before starting “Million Dollar Weekend” ( MDW going forward) I thought it would be similar to other business books: a lot of fluff and a couple of takeaways. There is nothing inherently wrong with that, it’s a proven formula, and if you don’t like the fluff either find a summary (no shortage of them for any popular book) or (my solution) just read faster. I quickly found out there was not much…
We tech people love our domains. A domain is your stake in the world, a physical token of something that might exist, an exciting project waiting to be developed. Cool domains are cool. Buying a new domain for an idea you have is nice, but what I like even more is to look through expired domains. I find it romantic in a way: someone had an idea, or there was a business that existed 25 years ago,…
I came across a post on LinkedIn where the author said there was a lot of fluff in many software and business books, however some books were tiny and useful. People in the comments made a case that it could be good for tech books to be on the longer side. On more pages they could give more examples and you would become more familiar with the technology by reading about it for longer. Fair point!…
Welcome to the first development log of Hayaku, attempt number six! (I explain why it’s the sixth attempt in my post on the history of Hayaku .) Half the game jam time is past, and while the project is nowhere near releasable, it’s playable and in much better shape than it has ever been over the past six years. To start, check out this video of me playing: For this first leg of the jam, I focused…
If you want to do deep work , you need to reach a state of deep focus . You can get halfway there by eliminating distractions. A typical modern workplace in “digital”, however, is what I call a high distraction environment — the opposite of what is required to do great focused work. The company encourages collaboration by expecting you to be available for a chat or a “quick call” during the…
I haven’t done much I can share since the last devlog back in March . I’m working on dynamically suggesting words based on your ability and that proved to be a non-straightforward algorithm. I’ve made some progress but it’s not ready to show yet, sorry!
Hayaku is my longest-suffering project by far. Most, I stop working on after a couple of weeks; some, months. Yet I’m starting to work on Hayaku again six years after I came up with the idea. At the time of writing (June 2024), I haven’t touched the project in two years. Even that has been a half-hearted attempt at revival, and actually I haven’t made any progress since 2020. However, let’s start…
After the rush to get the first playtest demo out, I spent the first two weeks of February writing some overdue posts on what got me into keyboards, what was interesting about touch typing and how getting away from the keyboard and writing by hand could help move the side projects along: Don’t spill tea on your keyboard (Re)learning touch typing Writing by hand for side projects I also wrote about…
In the past few months I made good progress on my side projects ( DDPub , Typingvania ) compared to the previous period of drought. What changed? I started writing about them by hand. (Every journal is 140 A4 pages and I’m halfway through my third.) I’ve been following a practice called “ morning pages ” created by Julia Cameron. I learned about it by reading her book “ The Artist’s Way .”…
Jump directly to “ How did I get started with Godot? ” if you don’t care about me and just want the info. At the end of 2023 I worked on DDPub , the publishing engine that runs this and several of my other websites. (I just noticed I didn’t really write anything about it since I put it in production…) While it was a tool I needed, it lacked public appeal and wasn’t “visual”—it was hard to…
Previous: “ Don’t spill tea on your keyboard .” With the new ortholinear keyboard it was evident that I needed to relearn touch typing, because the rows were not offset against each other and there was now a space between QWERT and YUIOP. I set a baseline on a regular tenkeyless keyboard and typed at a speed that felt “fast” to me and I did not have trouble hitting any of the keys. This is how I…
Almost exactly a year ago in early February 2023 I managed to finally kill my main keyboard that I had since 2014, a Noppoo Nano 75-S. It had Cherry MX Red switches and was one of the cheapest mechanical keyboards I could find at the time because I wanted to “try” one before committing to something better and more expensive like a Matias Ergo Pro . The Nano turned out to be much better than I…
In January 2024 I picked up Godot for the first time and started working on a typing game project. I didn’t yet have a name and simply called it “type2.” The idea has been brewing for a while because after doing some typing practice on a new keyboard last year I wasn’t happy with the options I had in the typing trainers. They all either had a set of disconnected words or short texts, but I wanted…
Advent of Code is a collection of delightful (or infuriating—depending on how you look at them) programming puzzles. A new set is released every year on December 1 st by the creator Eric Wastl . The puzzles can be done in any programming language or even with pen and paper, because the answer is always one line of text (usually a large number). There are two parts to each problem, the second…
The “curse of knowledge” is a common term when we hear about teaching beginners. The experts expect the newcomers to the field to know way more than they actually do. The professionals have forgotten what it’s like to be new. To have the curse of knowledge, then, is to consider simple what many people find hard or impenetrable. You’re stricken with the curse of knowledge if you think “that’s…
I followed my own advice from “ How to get back into C++ ” and read two books from the list, Bjarne Stroustrup’s “ A Tour of C++ ” and Jason Turner’s “ C++ Best Practices .” Both are short (256 and 130 pages) and concrete. I managed to read both in a day. I list both of these books together since they complement each other well: one shows what is available, and the other shows how to best use it.…
Historically all my side projects are in different languages since I either learn a new language to do a side project, or that language is particularly suitable for the task. Apple Swift has been my main working language for many years—unfortunately it isn’t useful outside the Apple ecosystem. Besides, learning new languages is fun. In the recent years I have been drifting more to the languages…
SwiftUI is Apple’s new(ish) “cross-platform” UI framework becoming dominant for new development on iOS, and now viable on macOS . I started writing Swift in 2014 when it just came out ( here’s my first non-toy app on GitHub), but I didn’t yet use SwiftUI. It was too new for commercial work in early 2020, and later I was learning other languages. Here are the resources I use to learn SwiftUI for…
Junior software engineers receive many comments on their pull requests—often about how their code looks and other minor issues like having unused imports—and have to do additional fixes before the team does a “real” code review. Developers who are more experienced, newly assigned to unfamiliar teams and projects, have trouble making the reviewers focus on what the code does rather than remark that…
Jeroen Leenarts, the host of the AppForce1 podcast , invited me to record a special episode in early November, while I was still writing my book. We recorded the interview in late December 2020, when the book just came out, and Jeroen published the episode (after much editing —sorry!) in late January 2021. That was a long wait! You can listen to this special episode on BuzzSprout and hey, while…
I created a blank document on November 2 nd and published my book “ Junior to Senior: How to Level Up as a Software Engineer ” on December 21 st 2020, exactly 50 days later. This initial version of the book is 52,660 words (the PDF file is 135 pages). Here’s why and how I did it. Why write a book? Writing a book is a rite of passage. I was always a hoarder of knowledge and rarely shared what I had…
An attempt to design an interactive input control for a text-based game. Given a question, fill in the blanks in the correct order by selecting parts of the answer from cards. “Hayaku” is a kana speed-reading mobile game that I’m (slowly) making. I’m studying Japanese again after a five-year break, and this time a thing I’ve noticed is that none of the apps teach you to read fast . I believe it’s…