My favorite 12 side projects in 2022
Looking back at 2022, I worked on a whole lot of side projects. I do this mostly for learning purposes, solving problems that I personally have in my own workflow.
This year I did a lot of “development live threads”. I’d make coffee in the morning and pull an idea out of my backlog and see how far can I get it by about lunch time. I post screenshots or comments every 10-20 minutes and a lot of people engage on twitter during the time. It’s fun!
In this post I’d like to share an overview of 12 of my favorite side-projects from this year!
1. Data Tile
Debugging can often be challenging. Many of the tools that I’m building are solving micro-problems that I have while developing. The data tile is addressing many of these in a more general way β it lets you print or log useful data and then monitor it seamlessly in an automated way.
π Here's last night's progress β I added tiling so you can observe multiple data points and using different views π¬ pic.twitter.com/oDmpZADs4R
— Marin Todorov (@icanzilb) October 28, 2022
This is something I’m actively polishing and aiming to release as a product. I think just about any iOS or macOS developer can get value off using this.
2. Got jobs?
Got jobs is a Safari extension I developed to help me quickly check if a company is hiring. Often times the jobs page is hidden in a footer or a sidebar and it can be very frustrating to find it. I’m looking at you companies that insist on having crazy on-scroll animations.
“Got jobs?” scrapes the current web page and finds the Jobs/Careers link automatically.
π Announcing "Got Jobs?"
— Marin Todorov (@icanzilb) November 7, 2022
A Safari extension to ask any company website: Got Jobs?https://t.co/4h6KAvZ5ff
More info in the π§΅
3. Rex Tables
In the last years I worked a lot on optimization, performance, automation and code quality. This required that I work most of the time with text logs, JSON files, test logs, and more.
This year I built a tool that helps me “unlock” all the structured data automatically instead of scrolling through text files and trying to make sense of the data hidden inside.
I posted a lot of development updates on Twitter but here’s a short walkthrough video:
π¬ I uploaded a 5 min video to showcase some of the basics of Rex Tables. If you got a little time and been following the development have a look here: https://t.co/6qXXgnaxp6 pic.twitter.com/K5IsCfZlGG
— Marin Todorov (@icanzilb) October 25, 2022
4. Swift Light
My Swift scripting IDE. I use predominantly Swift for scripting on the mac but the experience isn’t as streamlined as I wish it to be β that’s why I made myself a scripting IDE where I can quickly add features as I please.
I worked on many of the IDE features posting progress publicly on Twitter. Here are just some of them:
Instrumenting code
π¬ Here's the video showing today's work - you can select pieces of the source code and time them. If the same code runs multiple times you see each iteration (should probably also show the total of all runs at the bottom too) ππΌ pic.twitter.com/XE8HYyBKIo
— Marin Todorov (@icanzilb) January 28, 2022
Pinning messages in the editor
π§΅And that's a wrap. I can now use "π" to pin prints in the code editor so I don't have to search for them in the app output. Not sure who works on the Xcode editor but please, please take this and merge it in π pic.twitter.com/l70DM7TboP
— Marin Todorov (@icanzilb) June 17, 2022
Ultimately, I ran a beta with a closed group and some of the feedback felt so aggressive that after some time I lost motivationg to work on this. The lesson learned here is to more carefully select the group to talk about product ideas, especially early on.
5. Timelane 3
Timelane is a custom Xcode instrument helping with debugging RxSwift, Combine and other reactive code. You can download Timelane 2 from here: https://timelane.tools
This year I worked on Timelane 3 that included special features for debugging async/await:
π Really committed to having the new Swift Concurrency Xcode Instrument feature complete by end of today. Here's a preview of logged async tasks showing active/finished/cancelled states, priority and hierarchy information, various filters, and more ππΌ pic.twitter.com/ies8Rgb6wh
— Marin Todorov (@icanzilb) December 8, 2021
Xcode came with a pretty good built-in async/await instrument so I felt there was no need to compete with it and canned the Timelane 3 release.
6. SwiftUI Bot
I’m very visual and using SwiftUI constants for font size just doesn’t work for me. It’s been a while that I wanted to have a little tool that helps me when building SwiftUI user interfaces and I took a day to create it.
𧡠... I fiddled a bit more with "pinning" a style so you can more comfortably try out the rendering but I think that's gonna be all for today. I honestly don't think this needs more "features" since it's got to be as non-distracting as possible π (end of thread) pic.twitter.com/0VDdYPkgkb
— Marin Todorov (@icanzilb) October 5, 2022
7. MarkCodable
I love markdown and I use it for a whole range of interesting things. It only made sense to also use it as a data storage format.
I released an open source package that adds Codable
support for markdown.
π𧡠Today, I'm releasing MarkCodable β a Codable implementation that uses Markdown as storage: https://t.co/YCnknNZGYM
— Marin Todorov (@icanzilb) September 5, 2022
Read below to learn more about my key motivators for this new Swift Package: pic.twitter.com/erwpoI1s1v
Here’s an example of what kind of workflows using MarkCodable enables β I made a walkthrough for Rex Tables in literally no time by combining Pow and MarkCodable.
𧡠I've put this walkthrough quite quickly because it's a single markdown file, decoded with MarkCodable and fed directly into Pow (cc @DLX). It literally took no time so I scraped the old one in favor of this π pic.twitter.com/iuogFsMbyL
— Marin Todorov (@icanzilb) September 9, 2022
8. timeui
Similarly to other of the tools I’ve built β this is a tool that helps you on the command line to debug and profile.
This is a GUI powered command line tool that runs a timer and shows you signpost regions of another process:
𧡠I love this & needed it for a long time π besides the total time, now I dynamically track the duration of any signpost intervals too β±β±β± (here's a run targeting the source in the prev. tweet) pic.twitter.com/KyjpzT7P5G
— Marin Todorov (@icanzilb) February 18, 2022
This is open source so you can grab it and use it: https://trycombine.com/posts/introducing-timeui/
9. DoNilDisturb
In summer I worked on an Xcode plugin that prevents you from working outside of working hours and on public holidays.
Once you add the plugin to your project, Xcode will fail to compile your code outside of business hours. As simple as that!
I love this plugin.
𧡠pic.twitter.com/nA7ZpOQ2B9
— Marin Todorov (@icanzilb) June 15, 2022
ππ€ Released a new version of DoNilDisturb on the weekend β now you can drop an .ics file with public holidays in your project's folder and Xcode will fail to compile your code on those holidays too: https://t.co/smjp4tKkgx pic.twitter.com/oE0s0akcqN
— Marin Todorov (@icanzilb) June 20, 2022
10. Core Game
I worked on this pretty much in private, posting only a few screenshots. It’s a story-driven game that happens in Xcode’s documentation window.
The story, as it is in the moment, is following through your career as a software engineer. Here’s the game dialogue when you get fired and looking for a new position:
It's a day off so I'm playing with a game idea I had for a while. Putting together some simple screens to get a feel for the gameplay π pic.twitter.com/Nkgy823lvs
— Marin Todorov (@icanzilb) June 6, 2022
I still think the idea is really fun. I have the game infra and the layout but I think to build a complete game I need to pair with someone with more experience in this.
11. Powerups
While working on Timelane 3, I also built a markup language for building custom Xcode instruments to avoid having to work with 1000s of lines of XML in a single file.
ALSO: No wonder the project became unwieldy, this is how I ended up splitting the sections in the huge Instrument file: https://t.co/ZKLhOJvNpp
— Marin Todorov (@icanzilb) December 6, 2021
This was a nice excercise to bring forward my understanding about what build tools can do. I posted a blog article about this here: https://trycombine.com/posts/xcode-powerups/
12. Heaviest running-time trace
While brainstorming on interesting developer tools, I built a simple prototype that takes your Swift project, injects runtime logging, compiles and then instruments it.
Ultimately, you can use it to automatically gather insights about command line apps built with Swift (of which I do a lot).
I had a little bit of fun today and built this crude profiler that injects logging into a given Swift app and shows a timeline of the heaviest executions. It's pretty neat because you could expand it to profile apps running on Linux and more π pic.twitter.com/GVc4JuAijI
— Marin Todorov (@icanzilb) January 26, 2022
I think this is handy tool, but hardly a product so it just stays in a folder somewhere around here.
Where to go from here?
I was fairly focused on some niche problems the last years while working with my team at Apple and shipping Swift DocC. 2022 was a year of learning for me and I loved it. Building a whole range of fun side projects felt really good and I feel totally recharged and inspired. I’m looking forward to 2023.
If you’d like to support me, get my book on Swift Concurrency:
Β» swiftconcurrencybook.com Β«
Interested in discussing the new async
/await
Swift syntax and concurrency? Hit me up on twitter at https://twitter.com/icanzilb.