'Add to 2Do' Firefox Add-on


screenshot of the 'Add to 2Do' Firefox extension

TL;DR I created a Firefox add-on which will throw the current page into your 2Do inbox. It’s available from addons.mozilla.org and the sources are up on Github.

How it came to be

I find myself often having tasks for the websites I’m currently on. Be it for wiki pages I’m supposed to edit at a later point or other people’s JIRA tickets I want to comment on. As my colleagues might confirm, I suck at keeping something like that in my mind for more than 5 minutes. So as an avid 2Do user I started creating tasks for myself in 2Do. Usually by copy and pasting URLs from my browser (Firefox) to 2Do.

Doing this manually, over and over again on my Mac feels especially annoying since you can do this with the Share-Sheet directly on iOS. Turns out you can do the same from the macOS Safari, but I won’t switch browser because of this. So I gave myself a go at Firefox extensions.

Quite quickly — thanks to x-callback-url (2Do documentation) — I was able to quickly hack together my first public Firefox Add-on “Add to 2Do” (Sources are at mkleucker/firefox-2do-extension) and submitted it to addons.mozilla.org. After a first rejection due to unnecessary files being part of the packaged extension, I was quickly able to get it live.

icon of the 'Add to 2Do' Firefox extension

A special thanks goes out to the creator of 2Do who allowed me to use the official 2Do icon in a grayscale version as icon for the add-on.

So what does the add-on do for now? It will create a new task in 2Do (in the Inbox) where the title is the title of the current tab. The URL will be added to the note-field, as will be any selected text.

Pretty straight forward for now. But I’m looking to improve it further. Feel free to add feature requests as issues on Github.

Developing an add-on for Firefox

Actually I have created a Firefox add-on before, but just for the private usage in a study for my Master Thesis. And that was a few years ago. So coming back to this, a lot has changed: Currently Firefox is trying to also support Chrome’s extension format. This will make it very easy to have your extension in both browsers with only a bit additional work. Yet the current version of my extension is built on the current Add-on SDK, which has matured since I used it last.

Will there be a Chrome extension?

I already made a small announcement that I’m working on Chrome version as well. I also do have a first proof-of-concept running locally. But I want to move the Firefox extension over to the WebExtension first, so both add-ons / extension can share the better part of the code. I hope to keep the maintenance low that way.

Also I came across a similar Chrome extension, pepelsbey/add-to-things, which offers the same functionality for Things. It seems that I can learn a bit from it for when converting to the WebExtension format.

Quickly open a Bash in your Docker Container

development, docker

I find myself using Docker more and more, whether for quickly trying out things but also for developing larger projects1. Especially when I am just about to try something quickly I most often find myself creating a Bash in the Docker container, to poke around or look at logs. I grew a bit tired always typing the same stuff over and over and looked for a way to do so easier.

So I am still a bit caught in between having a docker-compose setup and “bare” Docker containers. So it was always a bit of forth and back between docker exec -ti and docker-compose exec. With a bit of fiddling I was able to come up with a small shell script to try both variants.

The script

dssh() {
COMPOSE_CONTAINER=$(docker-compose ps -q "${DOCKER_CONTAINER}" 2&>1)
if [[ $? == 0 ]]; then
docker exec -ti "${DOCKER_CONTAINER}" /bin/bash


dssh laravel

I added this to my ~/.zshrc, so I can use it at any time. While I only tested it in a ZSH environemtn, it should also work in most other shells, e.g. Bash (.bashrc).


docker-compose will create container names based on the schema <folder>_<name>_<count>. So for example, I have a docker-compose.yml in my project folder mailsystem defining a container named laravel. Internally docker-compose will resolve this to mailsystem_laravel_1. Now it would have to always type out docker exec -ti mailsystem_laravel_1 /bin/bash. Way too lazy for this. That’s why there is also docker-compose exec laravel /bin/bash which will do the same.

A cirectly created Docker container will have that exact name I gave it, so it would be docker exec -ti laravel /bin/bash. To combine both, we can take advantage of docker-compose ps -q <container>. This returns the ID of a docker container, which can be fed to docker exec as well. Of course, if none of these attempts succeed, to command will ultimately fail.

I hope it saves you some typing as well.

  1. I still have to jump ship for running Docker in production.

Talk @ PHP UG Munich: Mircoservices and Queues


On Wednesday I gave a talk at the PHP UG Munich. While the working title was an all-and-nothing “PHP Microservice Development as an Example of a Mail Transfer Service”, I used the time to talk about Queues in PHP and how the different PHP frameworks handle them.

While the project, where this topic originated from, is still in its beginning, the follow-up discussion on scaling and maintaining queues were very interesting.

From Things to 2Do

I have a long history with various productivity systems and was always eager to try a new app and/or system. But for the past three years I mostly relied on Things. After a short stint with paper notebooks I moved over to 2Do.

Things is an extremely stable task management application that worked particularly well for me when I was still a student: Having the inbox and a loose sorting of tasks within projects and areas of responsibility merged everything into one perspective for me: the “today” list. It synchronized flawlessly across all my devices. Here and there I pondered on missing some sort of sub-tasks. But aside from short dives into Wunderlist and Omnifocus I was quite happy with Things.

But once I started working full-time this changed a bit: I wanted to have a better separation between work and personal stuff. And also there were way more circumstances in which I wanted to jot down subtasks. So I started using paper notebooks again. Inspired by the Bullet Journal I was using one page a day where I would write down the todos of a day. Stuff I didn’t do yesterday would be on the start of todays list again. For planing longer ahead I would try to make notes into my calender.

I still liked this system a lot and carry a paper notebook with me every day. But should I really have to use two separate systems? The analog day-to-day solution made me feel overwhelmed from time to time when planing out the week ahead. So after listening to CGP Grey talking about 2Do I decided to give it a try. And after the trial expired I still stuck around with it and finally migrated all “Someday” tasks and projects over to it.

There are two three particular features that make the switch worth it:
(1) Timed reminders: Things only knows due dates, with 2Do I can also set due times, often it’s nice to be reminded at a specific time.
(2) Sub-tasks: In Things projects felt like an organizational overhead, but here it’s much more convenient and I use it more like a task – sub-task kind of thing.
(3) Differentiating between different perspectives: I use the List Groups as my kind of personal-vs-work filter, so I won’t constantly stumble over the fact that I should grab some lightbulbs for my kitchen when finishing a work project.

I am just a few weeks into using 2Do and probably still have to find the sweetspot for when to use which type of task/project/list/subtask. And of course I am looking forward to the long-awaited Things 3, but for now I have a system that works quite well for me.

The Renaissance of E-Mail Newsletters


Just as the weekend rolls around and I start clearing out my inbox from the stuff that has accumulated of the week, I find myself enjoying a particular kind of mails: Curated newsletters.

Over the past couple of months I subscribed to a growing number of newsletters. Newsletters which mostly feature a digest of what has happened in technology this week, allowing me to be aware of what’s going on in the world of (web-related) technology.

It’s a funny prank of history that email became one of my sources of information again. As that’s also how it all started for me. When I started getting into development I signed up for e-mail lists, although mostly to observe whats going on, I can’t recall actively participating in discussions. Later RSS rolled around where I would find myself in a list of well over 100 individual subscriptions and especially falling for blogposts including lists like “21 awesome items of something (which you will never need)”. With the dead of Google Reader, RSS died for me as well. At that time I picked up on all the various social media channels as a substitute: subscribing to more Twitter accounts than anyone could seriously follow. All for the main premise of knowing what’s “important”. A few years ago I started clicking through Hacker News and skimming through Reddit and Medium on a regular basis. The godfathers of timesinks.

I still fall for these way to often, but I try to avoid them. The current cure for my Fear-Of-Missing-Out comes from e-mails on a relatively fixed schedule. They all feature a similar structure: A categorized list with a small number of links and short explanation or quote. This also allows me to often just skim the mails completely and still satisfies my inner completionist.

So here some of my current favourites: