promotion
Powerful debugging in Xcode,
no code changes or 3rd party frameworks required.

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. …

Posted on

Introducing: Got Jobs?

Today I’m releasing a Safari extension on the Mac App Store called “Got Jobs?”. This new extension lets you ask any website that you’re browsing: “Got Jobs?” by pressing Cmd+Shift+J. That’s it. That’s the extension. I’ve been using it since summer and it still sometimes feels like magic! Got Jobs? “Got Jobs?” is a game-changing time saver for people who are actively or casually browsing for new opportunities. This Safari extension makes finding and opening the Jobs/Careers page on the currently visited website as simple as pressing Cmd+Shift+J. …

Posted on

Introducing MarkCodable

I had a lot of fun listening to “A releational database using Markdown” episode with John Sundell and Gui Rambo: After taking a moment though, I started realizing that there is a whole plethora of use cases where Markdown could be a great storage for some of my data. Markdown supports tables and they are pretty easy to view, parse and edit by hand. On the other hand, JSON isn’t very easy to view or edit by hand, which is sometimes more important for me, given I work on a lot of small tooling that automates or performs specific tasks and usually doesn’t need a large dataset. …

Posted on

Introducing timeui

A little while ago I coded a minimal profiling tool for the macOS command line and called it timeui. Last week I pushed the source code online in the hope other people would like it and use it (and eventually contribute some code too). In this post I’ll introduce you quickly to timeui and what it can currently do for you. What is timeui? timeui is a command line tool that profiles an app you provide it and shows duration, apple’s universal logging intervals, CPU usage and memory footprint: …

Posted on

Optimization in Swift, part 4

In Part 3 I wrote about trying to optimize my filter code by using an unsafe API from the standard library. This helped a tiny bit but barely improved the performance of my initial fictional use case (all about the test setup you can find out in Part 1). Updating the Memory Buffer Concurrently Looking at the results of both code variants so far, I got an idea — I could fuse together using concurrency to do the collection filtering and using a buffer in memory so I can update the array storage directly. …

Posted on

Optimization in Swift, part 3

In Part 2 I wrote about trying to optimize a very tight filter function with async/await. This helped when the filter performs some heavy work for each of the collection elements but not with my initial fictional use case (all about the test setup you can find out in Part 1). Taking to the Standard Library Since I already know that I’m not going to keep pushing the async/await variant of the code, I think it’s a good idea to look into the standard library. …

Posted on

Optimization in Swift, part 2

In Part 1 I wrote what this mini-series would be all about. Given the default array filtering is a performance bottleneck for my fictional app, I’m going to explore if I can write code that performs better in my specific use case. In this part, I’m going to rewrite my initial filtering function and use the new async/await Swift concurrency syntax. An async filter function Since TaskGroup still has a performance issue in the current version of Swift, I’ll use a simplified code that uses only top tasks (e. …

Posted on

Optimization in Swift, part 1

This will be yet another exploratory series on my blog — this time around, I want to write a little about optimizing performance in Swift code. This is, of course, an endless topic so what I’m going to do is, similarly to previous posts, focus on a problem and then track my way through working on it. Also, since this might turn into a somewhat longer read, I thought I’d split it into several short parts; so if you are in fact interested to read through you don’t have to put in all the time at once. …

Posted on

TaskGroup as a workflow design tool

For my talk at iOS Conf SG 2022 I wanted to showcase some Swift concurrency use-cases that don’t fall into the common scenarios. Revisiting the slides some weeks later, I think it’d be fun to cover my TaskGroup example in more detail. In this post I’ll show how to use TaskGroup to design a complete (but fictional) user login-sequence. What is TaskGroup good for? Most examples floating around show using a TaskGroup to add a number of identical tasks to a group and execute them concurrently. …

Posted on

The issue with task groups or how I discovered a solved problem

This post is not my usual format but there is a moral at the end, so hang around if you have a little time to waste. The setup I’m working on a longer blog post about the process of optimizing some concurrency Swift code. At a point I used John Sundell’s CollectionConcurrencyKit to compare the performance of different approaches. After I had my numbers, I peaked into his code to double check what exactly am I measuring. …

Posted on