My Blog

Hey, you found my blog - Welcome! I like to share my thoughts and learnings about all kinds of topics. Select a topic that interests you below or scroll down for all posts.

A screenshot of my conversation with ChatGPT that taught me how to use evaluateJavaScript to click elements inside a WKWebView

Building a ChatGPT App With the Help of ChatGPT

Thursday, 29 December, 2022

When I started prototyping Chatterbox for ChatGPT, I decided - as an experiment - to utilize ChatGPT in the process. I know, so meta, right? Here are some of my observations, thoughts and takeaways from that experiment.

Getting Started

I wanted to build the native UI with SwiftUI (+AppKit where necessary) and I knew I’d want to embed the actual ChatGPT website in a WKWebView. I asked ChatGPT how to interact with HTML elements from the surrounding Swift code and learned about the evaluateJavaScript method of the WKWebView class. This allowed me to prototype the app and start experimenting with different ideas and features.

ChatGPT as a Mentor 🧑‍🏫

As I was building the prototype, I continued to ask ChatGPT in order to learn about topics, I have not encountered before (while most of my SwiftUI experience was transferable to macOS, I did learn quite a few new things about AppKit in the process). In a way, ChatGPT played a role in the development of Chatterbox - it helped me learn the skills and techniques I needed to bring the app to life. When it worked, it got me there faster than searching Google and/or Stackoverflow, but I will say that, quite often, it gave results that were either slightly wrong or completely wrong and made up.

The first case is not an issue (IMO) because I only consult it for pointers on “how to get started with something” rather than copying and pasting whole blocks of code verbatim, so fixing minor issues on the fly while implementing a solution is easy enough most of the time. The problematic part is when ChatGPT gives a completely false and made up answer but does it in a way that sounds fully confident and professional. On some occasions it hallucinated completely non-existent APIs (which sounded plausible enough). There’s something particularly disappointing about that experience because I always get my hopes up about this “super convenient magical API that would be a perfect fit for my problem” 🥲

ChatGPT as a Rubber Duck 🐤

Are you familiar with the term “rubber duck debugging”? If not, you should read up on it because it is an absolutely brilliant technique! While developing Chatterbox, sometimes I would ask ChatGPT for help when encountering errors or problems. While the responses where often pretty generic and not too helpful, sometimes the mere act of formulating my question and seeing it reflected in ChatGPT’s response was enough for me to realize what the problem is 💡

Will ChatGPT become my go-to rubber duck debugging companion? No, because:

  1. Formulating questions in writing is tedious (I enjoy typing and think I’m pretty fast too, but just “talking to myself” is quicker)
  2. Anika the Radar Plushy (one of my dearest “souvenirs” from my time at Apple) would be really sad to be replaced by an AI chatbot. She’s such a loyal coding companion, never complaining and always listening to me blabbering on about all the random issues I encounter during my work ❤️

“A photo of Anika, an ant-eater plushy sitting on my desk acting as my “debugging rubberduck”

Summary

Ultimately (like many of you, I’m sure), I have come to the conclusion that ChatGPT is quite impressive and can be very useful, but it is just a tool after all - and a flawed one at that. Used as a research, learning and debugging companion (while reflecting critically about its output) it can speed things up and make you more effective. But it can also be distracting and outright confusing by “teaching you” things that don’t actually exist while sounding absolutely confident, often requiring to “manually double check with Google” after all…

It has certainly earned its place in my toolset (and is always at hand with Chatterbox’s global hot key) and I’m curious to see how it develops and how I and others will continue to find creative uses for it and ways to integrate it into our workflows. Feel free to reach out if you’d like to share any cool use cases for ChatGPT that you discovered for yourself.

A screenshot of the main window of chatterbox depicting an example conversation

New Side Project: A Native Mac App for ChatGPT

Thursday, 29 December, 2022

I’m excited to share with you a new side project that I recently launched: Chatterbox, a native macOS app that makes it easy to interact with the ChatGPT website from your desktop*

It all started when ChatGPT was released. Like many of you, I was excited to try out the new website and start chatting with the Open AI’s Chatbot. But as I was using it, I found myself frustrated by the fact that I had to stitch together multiple screenshots to share conversations with my friends. I also wanted a more convenient way to use ChatGPT on my Mac, with better OS integration and a global hotkey (kind of like “Spotlight for ChatGPT”). That’s when the idea for Chatterbox was born.

Features and Design

One of the standout features of Chatterbox is the ability to easily take screenshots of your entire conversation with a single button press or keyboard shortcut (⌘ S). And if you want to quickly delete or export those screenshots, the in-app screenshot manager makes it a breeze with drag-and-drop functionality.

But that’s not all - Chatterbox also comes with a global hotkey (⌥ Space, or a custom hotkey of your choice) that allows you to summon ChatGPT from anywhere, just like Spotlight. Plus, there are convenient keyboard shortcuts for all the important actions, such as ⌘ N for “New Chat.”

The app’s UI elements are fully designed to look and feel right at home on your Mac and it even includes automatic dark mode switching based on your system settings.

I’m sharing Chatterbox for free on Gumroad. If you feel like supporting the app, you can share it with your friends or on social media, or consider leaving a tip on Gumroad.

I hope you enjoy using Chatterbox as much as I enjoyed creating it. Stay tuned for more updates on this and my other projects.

*Footnote:

The app has actually been available for over two weeks, but I have not gotten around to writing an appdate blog post for it yet 😅. I’ll try really hard to post here more regularly going forward (#newyearsresolutions 🙃)

A view of our balcony in our Bonn apartment where I'm watching the sunrise and writing my first blog post for the new website. There's a cup of freshly brewed espresso next to my Laptop.

Hello World. Anyone Still Out There?

Sunday, 04 September, 2022

Wow, a blog post - must’ve been a while since I wrote one of those… In fact, I had to go back and revisit my old blog to find the last one was from September 2016 - six years ago!

Someone call pest control, cause we’ve got a serious infestation of Time Flies! 🕰 🪰 🪰

Seriously though, as I’m typing these lines and chuckling about my brilliant joke (sorry not sorry; the terrible puns are gonna be a thing ‘round here 🤷‍♂️) while enjoying a fresh morning brew and watching the sunrise from our balcony, I’m thinking to myself that I’ve really been missing this whole blogging thing and I definitely don’t want to wait another six years to write the next post - I promise (more to myself than anyone else because at this point I expect my regular readership to be… nil)

Quick Intro

So, you’ve not only somehow stumbled on this post but for whatever reason are still reading despite the time flies pun? Well, I have a feeling we might get along pretty well, so let me introduce myself 🤓

Background, Interests and Experience

My name’s Manuel, I’m originally from Germany (where I now live again) but have lived in Scotland, England and California over the last seven years. I’m a software engineer and designer but also a hobbyist musician (guitar, singing) and like to dabble in “the arts” and explore the outdoors (especially hiking and mountain-biking).

Some of the topics I’m most interested in are “Tech” in general (both hard- and software; specifically iOS, macOS, watchOS, smart home, automation and app development) but also “lifestyle topics” like outdoor adventures, travel, mindfulness, productivity and many more. Expect random posts about all sorts of things on this blog but rest assured I implemented a category filter so you can only read what’s interesting to you and ignore the rest.

For the five years prior to my relocation back to Germany, I’ve been working as a software engineer at Apple, where I had the exciting opportunity to help build some of the software that I personally use on a daily base and learn so much about software development in general and the Apple ecosystem in particular. Most importantly though I got to work alongside very kind, passionate and brilliant folks - many of which I have the honor to call my friends today. If one of you is reading this, I really miss y’all 🥲

The Road Ahead

After moving back to Europe, I decided my next step will be working as an “independent iOS & macOS developer” doing a mix of freelance work and my own app projects. So far this has been a lot of fun and quite a wild ride to say the least. Starting a business for the first time can be challenging, starting one in Germany (where we love bureaucracy) even more so, and doing this while still dealing with the aftermath of a transatlantic relocation with all that it entails? Well, let’s say, there’s been a bit of “admin overhead” going on over the last half year and I cannot wait until the dust has fully settled so I can really get into my groove and have a bit of a “routine” again for a change 🙃

I will say though that I have been spending more and more time doing the things I love (building cool stuff) lately, with this new website being one of them! Expect more to come going forward; in particular, I am hoping to launch a beta test for my first app Zenitizer on TestFlight soon. Stay tuned for Appdates.

Why the Radio Silence?

You might be asking why it took me such a long time to write a blog post? Well, “it’s complicated” and ultimately due to a number of factors, but in a nutshell mostly because Apple had fairly strict policies around any kind of public speaking or publishing of content related to Apple itself or “The Tech Industry” and while there was not a blanket ban on blogging/social media, I definitely would’ve needed to be careful about what I write online and how it’s worded so I decided to play it safe and just not post anything for a while.

About This Website

If you are reading this, it means I have finally published my redesigned website 🎉 As I pointed out above, I’ll be blogging about a number of topics and, of course, this will be the primary channel to learn about My Apps and get any Appdates about them.

Feel free to reach out (via Email, Twitter, Mastodon, or LinkedIn) if you have any thoughts or questions, whatsoever. And please let me know if there are particular topics you would like me to blog about. I will certainly follow up with a more technical post about the design and architecture of this website in the coming weeks.

For the curious and impatient: I’m still using a static site generator but I switched to Hugo in the meantime. This time, I completely designed and implemented the theme myself using the lightweight and highly flexible CSS framework Bulma which has been a joy to use.

But I’m getting ahead of myself here… Coffee’s empty and the sun is up, so I’ll stop writing for now.

Until next time ☕️ ☀️

“A view of our balcony in our Bonn apartment where I’m watching the sunrise and writing my first blog post for the new website. There’s a cup of freshly brewed espresso next to my Laptop.”

macOS Sierra - First Impressions banner image

macOS Sierra - First Impressions

Wednesday, 21 September, 2016

📜 Archived

Yesterday was the day I have been waiting for since the WWDC in June: the release of macOS Sierra featuring Siri on the mac. Why is this a big deal for me? Because my favourite personal computing platform is the desktop (or laptop for that matter) but I am also a huge fan of voice-controlled assistants which have been most prominent on smartphones - until now.

The Update Procedure

The update was an extremely fast, pleasant and uncoplicated procedure. Having used Linux on the desktop for years I am used to “installing a new distro on top of another” thus retaining my home directory and various config files, but keeping all apps and system-wide configurations in tact without inducing any unforseen complications made the transition even smoother than I expected.

What’s New?

The new macOS looks familiar at first glance. In fact, apart from the slightly redesigned notification center, the “desktop shell” looks pretty much like El Capitan. Some of the core apps have been updated with Photos being especially notable. Its UI has been improved with an awesome visualisation and layout mechanism for moments, memories and albums as well as advanced machine learning for face, object and scene recognition “under the hood”.

Why I Like Talking to My Computer

As stated earlier macOS Sierra supports voice commands via Apple’s personal assistant Siri. Maybe it’s just me being a fan of “talking to machines” but I am totally thrilled about this addition and have been using it a lot today. Sure this is mostly due to the fact that you tend to play around a lot when you get a brand new toy but I am sure that I will stick to using it for a particular group of tasks:

Minor tasks that are not worth a UI context switch while being focussed on a different primary task. I can very well imagine asking Siri to play a particular song, playlist, artist or genre via Apple Music while coding. Opening iTunes would be a remarkable distraction that can be avoided.

Another example is the creation of reminders. When I am scheduling my next day I will probably always prefer a graphical user interface (Reminders and Calendar app) to organise my agenda, but when a (sub) task comes to mind while working on something else it is nice to be able to just quickly say “remind me to write documentation for module X in 2 hours”.

We Developed an Assistant Application for Pokémon GO This Weekend

Monday, 18 July, 2016

📜 Archived

Like almost everyone else on this planet I have been out there catching Pokémon and conquering gyms last week whenever I took a break from uni work and went outside. In case you have no idea what I am talking about, well, no offense, but you must have been living under a rock for the last weeks - I am of course referring to the highly popular augmented reality game “Pokémon GO”.

Tobi and I were both excited about the game’s release but as computer scientists we don’t “just play” such a game. We systematically try to find ways of optimizing our progress with as little effort as possible. We experimented and did research on the best ways of boosting our XP points quickly. It turned out that there is a very common technique to achieve this: Try to evolve as many Pokémon in a row as possible (ideally under the influence of a lucky egg which doubles your XP gain).

While this is a good strategy there are a few parameters which need to be considered in order to optimize the outcome of that approach. Evolutions cost candy, transferring Pokémon gives you candy but also makes you loose a potential evolution candidate. So we figured out the maths to solve this simple optimization problem and wrapped it up in a pair of nice, little mobile apps so you too can benefit from our insights. Find out more on my corresponding project page.

New App and Minor Go For It! Update banner image

New App and Minor Go for It! Update

Sunday, 17 January, 2016

📜 Archived

During the Christmas break, I found the time to do some free time coding again and I would like to share my results with you.

First of all, I have developed an Android app for smart, rule-based phone silencing. Silentio allows to put your phone into silence or vibrate mode based on fixed times or calendar events. It is currently in open beta stage and I highly encourage you to have a look at it and tell me what you think. More information can be found here.

Moreover I have released a new version of Go For It! (1.4.5) with a small update suggested by a Github user: Automatic refresh of your task list, when the content of your Todo.txt has changed. This is especially interesting if you synchronize your task list or use multiple Todo.txt frontends.

What Operating System is That?! banner image

What Operating System Is That?!

Wednesday, 04 November, 2015

📜 Archived

During the last month or so, a remarkable number of people have asked me, “what OS is that on your laptop”? When I got my new laptop, I have put quite some time into setting up my personal Arch Linux installation and apparently I am not the only one to appreciate its looks and workflow.

The sad part of the story is that I cannot give a simple answer, because it is, in fact, a compilation of various software packages, themes and configurations, that make it what it is. This is why I have decided to write a blog post which allows others to replicate my “desktop experience”.

Desktop Environment

I cannot even specifiy a particular desktop environment, because even that consists of modules from various projects, most of which are located in the “GTK camp”. Most of the time I, point people to elementary OS, if they want something “similar” out of the box, because I use Deepin WM, which is a fork of their window manager and elementary’s dock Plank, which make up the most relevant part of the desktop. Readers of my blog or Google+ followers know that I have been quite keen about the elementary project - and I still am! I just consider Arch the most attractive distribution for me personally due its rolling release model, “DIY philosophy” and the amount of packages available in the AUR.

The panel on top is Budige Panel from the Solus projectes. The new version features Raven, a sliding panel with calendar, music player and sound widgets as well as an overview of missed notifications, which is both beautiful and highly functional. I really like the whole budgie desktop experience and can recommend trying Solus, if you do not need a window manager with “fancy window and workspace overview” modes.

Look and Feel

Regarding look and feel, the Arc GTK theme and the Numix Circle icon set are most notable. Not only are these the (imho) best-looking, flat themes in the Linux world, but also are both astonishingly complete, that is, almost every app installed has a a corresponding Numix icon and Arc looks functional and consistent with all sorts of different apps. There is even an Arc Firefox theme, which makes Firefoox look 100% native. I might mention at this point that I have created an eclipse theme that is supposed to match Arc as closely as possible.

Software

A “representable excerpt of my everyday software stack” is listed below:

  • Nautilus (file manager)
  • Gnome Terminal (terminal emulator)
  • Kupfer (command launcher)
  • Firefox (for general web browsing)
  • Chromium (as “webapp runtime”)
  • Geary (mail client)
  • California (calendar)
  • Gnome Contacts (contact manager)
  • Go For It! (productivity, sorry for shameless self-promotion…)
  • Corebird (twitter client)
  • Okular (PDF reader)
  • Sublime Text (text editor)
  • Lollypop + Spotify (music players)

You might ask yourself, what I mean by “webapp runtime”. I prefer to think of websites like Google+ or Facebook Messenger as apps, rather than websites. Thus I do not want them to clutter my browser tab list, but interact with them as if they were native applications. This is done by creating .desktop files with mLauncher, which execute chromium with the --app=url parameter and specify the corresponding icon.

My favourite tool on any Linux desktop is the Kupfer command launcher for which I have written a few plugins myself. To enable multi touch (up to 4 fingers) gestures on my Thinkpad t450s, I run xSwipe and I use xbindkeys to define keyboard shortcuts.

If you wonder, why I use KDE’s PDF reader on a GTK setup I can understand you. Basically, I need it for “academic reasons”: Okular’s highlighting functionality is unbeatable. I read a lot of scientific papers and I rely on the ability of using differently coloured markers. Morever it plays nicely together with LaTeX in regard to biderectional search and it is well integrated into KBibTex, which I use to organise my references. Also if you set your KDE settings to match the GTK theme and disable the toolbar, Okular actually looks quite clean and well integrated.

Session and Login

The whole desktop session is initiated via startx using my custom .xinitrc, which is based on a snippet from the Arch Wiki. If I want to lock my screen, I use i3lock for which I have created a .desktop file with mLauncher, aswell.

Conclusion

The above is far from being complete. There are many settings and details that I might not have mentioned in the post. Feel free to ask, if you encounter any questions or problems.

Enjoy customizing your Linux desktop ;-)

Finally! Some Love for Windows Users banner image

Finally! Some Love for Windows Users

Saturday, 23 May, 2015

📜 Archived

Windows users of Go For It! have not seen many updates lately. Apart from my general, omnipresent “lack of time” forcing me to focus on what I consider most important, this was mostly due to the former dependency on the unstable Gtk 3.10 release for Windows.

Thanks to Jonathan Moerman’s support in porting Go For It! to an older Gtk version, less “hacks” need to be applied to the Windows version, thus allowing for an easier synchronization between the Linux and Windows branch.

More Updates in the Future

Apart from translation support which I simply cannot get to work on Windows (at least for now), all future features of the Linux version will hopefully transition into the Windows branch without much extra efforts. The consequence of this will be more regular updates coming to a proprietary operating system near you!

An Update Notifier for Windows

Unfortunately Windows does not provide the convencience of a “proper package manager” capable of handling all updates automatically. Still I don’t want to require you to check my website for a new version every day. This is why I created a simple update notifer that leads you to the download page as soon as an update is available.

It Is Not Ugly Anymore!

But I decided to go even further! Shipping a Gtk application for Windows can be a pain in many ways. One problem being the fact that each application is supposed to come with its own Gtk settings instead of relying on system wide settings. This might be okay if the defaults were not that ugly, including icons that look out of place and choppy font rendering.

This time I put some time and effort into creating flat icons that blend in more nicely with Windows 8. I am neither a designer, nor have I studied any Metro HIGs, so send me a pull request if you have a better proposal!

I even managed to replace the default Gtk application icon. This is a particulary cumbersome task on Microsoft’s operating system as it involves adding a particular binary ressource at link time! For everyone interested in how this can be accomplished, I recommend Kevin Boone’s article about Gtk applications on Windows.

Besides I have experimented to find Gtk settings that result in pleasant and “native looking” font rendering.

All in all I hope that the overall UX is far better for Windows users now and Go For It! does not appear like a halfhearted portation anymore.

Download

The new version can be downloaded here. If the update notifer works as expected, you should receive all future updates just in time.

Enjoy!

Information for Developers

The old Windows branch on Github has been completely replaced, because it was easier to base the new version on the Linux branch than on the bunch of hacks and tweaks that the former Windows version was. If you want to get it involved just have a look at the corresponding branch on Github.

Why I Moved From Drupal to Jekyll

Friday, 20 March, 2015

📜 Archived

When I started to learn about web development it felt to me as if everyone was suggesting to use a CMS for everything. Back then I have chosen to get started with Drupal after considering also Wordpress, Joomla and a few others and I have to say that it served me well all the time.

Nevertheless I have become tired of the amount of maintenance that a full blown CMS demands.

No matter how well the update mechanism is designed (Drupal’s drush up is super convenient), it is still a somewhat tedious procedure. Things may break. Thus one has to create, maintain and, in the worst case, re-deploy backups.

Another critical aspect is the fact, that security updates often allow for no more than a few hours to pass until vulnerabilities are widely exploited. This may not be a problem for companies capabable of paying staff all around the clock to react quickly in such scenarios, but it surely is a challenge for individuals like me running their own websites.

Keep It Simple

I basically wanted to get rid of two things: The database and all server side code.

Databases Are Cumbersome

Not relying on a database makes various things so much easier. One can quickly migrate to another host by uploading a bunch of files without even bothering to export/import SQL or change database credentials in some configuration file. One of the most outstanding advantages for me is the fact that, without a database, your complete website can be tracked using a version control system.

So Why Do You Want to Get Rid of PHP?

The simple answer is: Because I can. Given the type of content I provide on this website, there simply is no necessity for dynamic, server side code. PHP only imposes superfluous performance and security drawbacks, which I hereby avoid.

The Jekyll Workflow

I personally consider Jekyll’s workflow another major selling point for this system. Other CMSs come with heavy web interfaces for content creation, which often feel sluggish and are anything but a pleasure to interact with. In the worst case you may end up waiting for the post you have been typing for the past 2 hours to be processed just to find that the system decides to give you a timeout instead and discard your data (been there).

Jekyll uses plain text files formatted in Markdown. Therefore you can use your editor of choice to compose your posts. Simply type jekyll serve in the corresponding directory and it processes your files and even hosts a local web server to test your page. Setting up a web development environment has never been so easy.

Conclusion

There are many valid examples for projects that demand CMSs, databases and server side logic. It took me a while to realize that my personal website is not one of them, but now I am very content about the new found simplicity that Jekyll offers.

In the end of the day there is no such thing as the “best CMS”, as it all boils down to the maxim of choosing the right tool for the job.