Answering follow-up questions about the Process perspective

I linked yesterday’s post on the Process perspectives in a bunch of places and generated a bit more negative feedback than I expected. I was confused because I still think this is a cool trick to have in your toolbox. As “cornchip” said it on the MPU forums:

This is a nice tactic to add to the swiss army knife of tools needed to break up a stagnant list.

I see great questions emerging in the discussion around this trick, which I wanted to answer here to provide a bit more logic.

Should I replace this with the GTD Clarify and Organize step?

Don’t use a remixed version until you are confident that all the habits around GTD are wired into your brain. Afterward, you can use this perspective to enhance your existing inbox emptying habit progressively.

Do I have to tag everything that goes into OmniFocus?

No, but you can. There is a setting in OmniFocus called “Clean up inbox items which have” which controls when OmniFocus should remove items from your inbox on clean-up. Mine is set to projects; otherwise, the Process perspective won’t show actions grouped by project.

Kourosh mentioned that this could lead to untagged/unprocessed items leaking into the system from the inbox, which is technically accurate, but don’t forget if you use this trick:

  • a: the Process perspective always shows unprocessed items which you can clean up,
  • b: if you do Weekly Reviews properly, you should trust your system, but more importantly, you’ll review everything again and catch these items.

Do you still use the OmniFocus Inbox?

Yes. As I mentioned, this perspective is great for breaking down a long list of unknown stuff, but sometimes I straight use the Inbox because it’s easier.

Isn’t it an unnecessary step?

It depends. I wouldn’t call it “productivity p0rn” because it genuinely helps to clarify the unknown.

Imagine you have to clean up a messy kitchen. First, you start to pre-organize: collect the dishes, throw away junk into a trash bag, etc. Then, you wash the dishes, clean the kitchen table’s surface, and get the trash out; sooner than later, you end up with a clean kitchen.

We do the same thing here: we’re pre-organizing a long list of stuff, so we can make sense of how much cleaning we have to do, then we clean each item in context with their related entities. This way, we keep our attention a bit more focused and keep support material easily reachable (especially if you link associated things in the notes field of your projects).

The point is to reduce the unknown and add structure to the inbox processing habit. You don’t need to do this all the time, but after, let’s say, 20 unprocessed items, this can be a beneficial step.

Don’t you keep too much stuff in your OmniFocus Inbox?

As David Allen says, I keep everything in the inbox which is “potentially meaningful” to me. Maybe, in the end, I only save 10% and throw away 90%, but the point of using an inbox (and GTD, for the matter) is to empty our head, and keep it that way.

There is an excellent video about this topic from the Next Action Associates called “What’s The Difference Between An Input And An Inbox?“.

Why do you need access to projects when you process your inbox?

It’s simple. Because I have support materials linked to projects in their notes field. I need to access them via links (and Hook) to store future actions, notes, etc. Having a list of items grouped by projects lets me easily select the project in the list, invoke Hook, or click on the links in the notes.

I hope this post answers your questions about the Process perspective and makes you reconsider adding it to your OmniFocus toolbox.


Reduce context switches in the OmniFocus Inbox using a Process perspective

I watched a video from Cal Newport on how he uses a simple text file for the sense-making of a bunch of new information. He mentioned that instead of processing his emails one by one, he captures the essence of every email into his text file, then starts to categorize it, organize it by projects, etc. This gave me an idea about solving a similar problem I had with my GTD inbox for a while now.

GTD recommends that we process our stuff in the inbox sequentially, without grouping beforehand. The problem with this approach is that many items related to different projects are scattered in our inbox, so we’re jumping in and out of projects while processing our inbox. This constant context switching drains energy from our brain.

If we want to spare our attention, it is a good idea to group our unprocessed inbox items by project, so we can reduce the context switching when we process them. Using this approach for the GTD Process and Organize steps will ensure that we clean things related to each project in one go, not randomly.

I will show you how to do this inside OmniFocus, but you can also steal this approach for Things using a similar “Process” tag.

Why is this a problem?

The point is to add a temporary structure to information in the inbox. I usually do some form of project planning and next action creation when I’m emptying my inbox. The problem is that I constantly switch thoughts about many different things as I go through each item. It would be nice to have them batched and grouped by their project. This can reduce the attention switching to different topics/projects.

Let’s say we have an inbox like this:

  • Item 1 (could be about Project X)
  • Item 2 (could be about Project Y)
  • Item 3 (could be about Project Z)
  • Item 4 (could be about Project X) ← This is where I will have to return to “Project X” again. This item can even be connected to “Item 1” somehow.

I hate when I have to switch my current context (not my GTD context, but the current mindset that I’m in) and go back to a project I already thought about and assigned a next action to; possibly, I even closed its support material since then.

Having new information pre-organized by projects (or topics) can reduce the load of thinking about a project twice or more in an inbox processing session.

Using the Process workflow

  1. The first step is to create a new perspective in OmniFocus called Process with the rules shown on the screenshot above. You’ll use this perspective to process things instead of the standard OmniFocus Inbox.
  2. It’s essential to have everything corralled into the OmniFocus Inbox, so you can stop jumping around different inboxes, but more importantly, have everything pre-organized by the project. Go through your inboxes (email, Slack, DEVONthink, etc.) and link a new action to all unprocessed items in OmniFocus. The Hook app can help a lot with this step.
  3. Open the Process perspective, where you’ll see your unorganized stuff sitting in the Inbox waiting to be pre-organized. You must quickly go through each item and assign it to an existing or new project (don’t assign tags). You don’t have to come up with the final name for a new project. Set whatever comes to your mind; the important thing is to pre-organize unprocessed items in this step. If you don’t know where to assign it, just skip it, or move it into a singular action list related to an area.
  4. When you have pre-organized everything, you can click the clean-up button (or press Command-K) to see all of your unprocessed items grouped by project. Now you can go through each item and deal with them in the context of its project instead of having them all over the place.

Why having a pre-organized inbox is better than a flat list of unknown stuff

I always get annoyed when I deal with something related to a big project in my inbox, and then 5 minutes later, another thing pops into my view about the same subject. I have to open the project and its support material again, get into the same mindset, and maybe even reconsider everything I figured out 5 minutes ago. It is a dumb way to plan things.

I’ve been pre-organizing inbox actions by the project for about a month now, and I can assure you that having unprocessed stuff grouped by the project can make a big difference. I can process my OmniFocus Inbox about 15-20% faster than before, but more importantly, I don’t feel tired after doing it. I stopped switching contexts for every item; instead, I’m spending more time at the project level and dealing with new things from this perspective.

I wrote a follow-up post to this one answering reader questions about this workflow.





Can paper still be a storage format?

I watched a video from Patrick Rhone where he mentioned that paper is still the best medium to store text-based information in the long run. We have books from thousands of years ago still available. Nobody knows how long the best digital medium will last, but we have already seen how durable paper can be.

Classics are survived hundreds of years. Of course, it was reprinted and stored in multiple places, but digital information nowadays is too tied to its format. For example, what will this blog look like in 20-30-40 years?

I try to use open standards when it comes to archive things, but still, sometimes it’s not enough. I lost the early music I made, photos, and blog posts (although I found some on archive.org) because I wasn’t paying attention to back them up, or it was easy to delete them accidentally.

Meanwhile, stuff I printed years ago is still okay. My parents even have old family photos, which are existing since at least I was born 35 years ago.

Paper can be a long-standing format to store information (or at least be a tertiary backup) if we don’t use it actively. Almost all digital storage formats are rotting away quickly (except some forms of optical media and tape), which means that we, a computer, or time will corrupt them. On top of that, we can accidentally delete anything from it, or ransomware could encrypt it, so we have to back them up. I use optical disks (more precisely 25 GB archival grade BD-R discs) to archive information because it’s made for cold storage. However, I still have to keep a reader around, which is an already a fading technology.

On the other hand, paper is a simple, free-form medium that can store limited types of information. I can print text and photos on it, and that’s it. If I want to keep it long-term, I can store it inside hanging folders or simple boxes which protect and organize it.

Sure, it can be damaged, but any other digital storage can be. If we take good care of it, it can give us a nice warm feeling when we stumble into an old notebook or a photo.


Today’s notetakers be like:

Hello, [[this]] is [[my]] [[Zettelkasten]] which I use [[for]] [[writing]] all kinds of [[articles]] for the [[web]] about [[my]] [[Zettelkasten]].





Reply to @gklka:

Milyen automatizációid vannak? Érdekelne.

  • Pick Date: megjelenít egy date pickert, kiválasztok egy dátumot és azt a clipboardra másolja YYYY-MM-dd formátumban.
  • Podcast Note: leállítja az adott podcast lejátszást, bekér egy szöveget, beírom, elmenti, majd folytatja a podcast lejátszását.
  • Take a Nap: beállít egy ébresztőt 25 perccel későbbre és bekapcsolja a “Hagyjál békén” fókuszt szintén 25 perce.
  • Archive: bezippeli a kijelölt doksit, mappát és elteszi az Archive lemezemre.
  • Archive to Disk Image: hasonló mint az előző, csak DMG-t készít.
  • Track in Tyme: (time tracking), a kijelöt Things to-do projektjét elkezdi trackelni a Tyme-ban.
  • Weekly Log: lementi az adott héten történt eseményeket, elvégzett tennivalókat egy listaként a Day One-ba.
  • Quick Share: feltölti a blogom szerverére a kijelölt fájlt és visszatér egy linkkel.
  • Post to Decoding: gyors státusz posztolása a blogomra.
  • Respond: adott weblapot tudok lájlolni, bookmarkolni, kommentelni a blogommal és egy kis Indie Web magic-kel.
  • Search Live Video of Current Song: az éppen Musicban játszott zene live verziójára rákeres YouTube-on.
  • Translate to (Hungarian|English): kijelölt szöveget lefordítja a Google Translate-tel egy pici pop-up ablakban.
  • Export OTP XLS to YNAB: az új OTP netbankról letöltött XLS-t kiexportálja Numbersből és átalakítja olyan CSV formátumba, amit be tudok egyből importálni a YNAB-be.
  • Make Monthly Invoice Project: létrehozza a havi számlázási projekteket Thingsben külön minden ügyfélre.
  • Show (Radar|Cloud Cover): letölti az Időképről a radar vagy felhőképet és betölti egy kis QuickLook ablakban.




Winnie Lim » this website as a learning and reflection tool

This website is essentially a repository of my memories, lessons I’ve learnt, insights I’ve discovered, a changelog of my previous selves. Most people build a map of things they have learnt, I am building a map of how I have come to be, in case I may get lost again. Maybe someone else interested in a similar lonely path will feel less alone with my documented footprints. Maybe that someone else would be me in the future. Maybe all of this would be interesting when I am dead, assuming I find a way to keep this site alive.

Archive Hook bookmarks with DEVONthink

I was in a Tinderbox Meetup last week, which was more about Hook than Tinderbox. I’m not a Tinderbox user, but I’m interested in how other people use their tools.

In the middle of the call, somebody had a question about Hook bookmarks. More specifically, can Hook archive its bookmarks as archive.org does with websites in general? Well there is no feature like that in Hook, and to be honest, doesn’t even need to be, because Hook has great Apple Script integration, so we can query bookmarks from its database.

In conjunction with DEVONthink, we can archive our bookmarks from Hook and save them as Pinboard does. I made a script for this a while back and it’s really helpful. It runs once a week, archives all websites from my Hook database into DEVONthink.

Setting up the script

First, download the script from here.

The scripts collect everything into one group in DEVONthink, so you have to create one where the archive can be stored. I would advise a new database even if you don’t have something similar already.

Open the script you downloaded. You’ll see two lines at the top of the file.

set webArchiveDatabaseUUID to "databaseUUID"
set hookedWebsitesGroupUUID to "groupdUUID"

You have to replace the databaseUUID and the groupdUUID part with the UUID of the database and group from DEVONthink. To do this, open DEVONthink, ⌃click on the database in the sidebar, and pick “Copy Item Link”.

Now, replace databaseUUID, with the link you copied. You’ll see something like this.

set webArchiveDatabaseUUID to "x-devonthink-item://CA3A9072-0650-4AF3-A608-1786F9D1A98D"
set hookedWebsitesGroupUUID to "groupdUUID"

Now, remove the x-devonthink-item:// part, so the top of the script should look like this.

set webArchiveDatabaseUUID to "CA3A9072-0650-4AF3-A608-1786F9D1A98D"
set hookedWebsitesGroupUUID to "groupdUUID"

Go back to DEVONthink and copy the group’s link from the same database (it is important to keep the group in the same database) by ⌃clicking on it and picking “Copy Item Link” again.

Replace groupdUUID with the copied link in the script again.

set webArchiveDatabaseUUID to "CA3A9072-0650-4AF3-A608-1786F9D1A98D"
set hookedWebsitesGroupUUID to "x-devonthink-item://B6C2C659-5682-45B5-8D59-107A641F8C2D"

Remove the x-devonthink-item:// part and then save your changes. The top of the script should look something like this now.

set webArchiveDatabaseUUID to "CA3A9072-0650-4AF3-A608-1786F9D1A98D"
set hookedWebsitesGroupUUID to "B6C2C659-5682-45B5-8D59-107A641F8C2D"

Now comes the fun part. You can run the script and DEVONthink will start downloading your Hook bookmarks into the group you choose.

The first run can take a while depending on the size of your Hook database. Subsequent runs should be faster since the script downloads only newly added bookmarks.

It is important to know that the script doesn’t sync Hook and DEVONthink, deleted bookmarks from Hook will still be present in DEVONthink.

Also good to know, if you want to archive sites behind a login, you have to sign-in in DEVONthink before you run the script.


I keep this script in the ~/Libary/Scripts/Applications/DEVONthink 3 folder, so it’s available from the script menu in macOS – or in my case, from FastScripts. This way, you can run the script manually from DEVONthink.

You can even make it run automatically. If you use FastScripts, you can create a new DEVONthink reminder on the group you created to store Hook’s bookmarks and set it to run an Apple Script like this every week.

on performReminder(theRecord)
	tell application "FastScripts"
		set scriptItem to first script item whose name is "Archive Hook Bookmarks"
		tell scriptItem to invoke
	end tell
end performReminder

If you want to run it outside of DEVONthink, you can use for example Lingon, which makes it possible to run any Apple Script in the background daily, weekly, monthly, or whatever interval you want.



Portable thoughts is a website built using a single HTML file.

It simply uses URL #fragments and the :target CSS selector to show and hide “pages”. The result is a self-contained website, digital book, interactive document, or whatever you want to call it.

So, you have a single HTML file that contains everything and is easily navigable without any JavaScript by just showing and hiding sections via CSS. This is smart.

I don’t know what I’m going to use this idea yet, but it will be useful one day.

I collected my reading notes and highlights from “Digital Zettelkasten: Principles, Methods, & Examples” by David Kadavy.

daunting projects to compete with little dopamine hits

How can I increase the dopamine hit of completing a project?

When you have a digital Zettelkasten, there’s a third option: do small things with small notes, straight from your phone.

When we have a small amount of time, we can do small things with our notes, even on our phone.

A lot of small steps can take us very far.

Yet instead of these tiny actions adding up to essentially nothing, they feed your curiosity in a productive way and drive your projects forward.

GTD takes us closer to our goals with small steps.

We have to set up small next actions when we are tired, so we can do a lot of small things which gives us some form of baseline success.

Instead of using my brain power to try to remember things, I’m using it to write better articles, newsletters, and books. I finally found a bicycle for my mind.

We have to use the brain for doing creative stuff, not remembering things.

Yes, we should rethink educational curricula centered around memorization, but looking things up is at some point a waste of working memory. That’s brain power that could be used to think creatively, rather than to try to grasp a bunch of facts just retrieved.

Instead of looking up information that we have to understand, we can use the energy of the brain for creative things.

Sometimes ignorance is more comfortable than learning, because learning means we have to go through the work of changing.

Learning is harder than ignoring facts.

It’s not so easy it’s boring, and it’s not so hard it’s a slog.

We can create new permanent notes with Craft inline of another note, which can be extracted out into a new note.

Some examples of fleeting notes, from my own Zettelkasten:

Uses of fleeting notes:

  • highlights from books
  • highlights from articles, blog posts
  • our ideas

Yes, Henry Ford’s assembly line went quickly by eliminating waste, but the cars had to be designed first – a process that wasn’t so easy to speed up.

It’s easier to automate a system than invent it. That’s a long and hard process.

As you read, make fleeting notes.

Once you’ve exported your highlights, review them and highlight, once again, the parts of those highlights that are the most interesting.

Look at the highlights of your highlights and re-write the interesting ones in your own words.

I’m taking notes as I read, I don’t rewrite them afterward.

Associative thinking promotes a positive mood, so it shouldn’t be a surprise how fun this task is.

It feels good when we find a connection between two Zettelkasten notes.

Now take only the most interesting ideas from the literature notes, and turn each into individual permanent notes.

Next, I have a link back to the literature note from which I wrote this permanent note. That looks like this:

We can link permanent notes from literature notes, so we can see in backlinks where it’s coming from.

If you try this process and it feels boring to you, it may be because the material you’re reviewing doesn’t feel relevant, doesn’t interest you

It is a warning sign if we are bored while writing our Zettelkasten. It means that we don’t care about the topic, or we know it well already.

The main con of Folgezettel is it’s unnecessary in a digital Zettelkasten. Folgezettel is most advantageous in a paper-based Zettelkasten, because it allows you to easily arrange paper based upon how a sequence of notes follow one another.

Having a series of notes (or outline of notes) can be helpful in a digital Zettelkasten too because we are forced to stop and think about where a new note should fit in the outline.

create keywords based upon patterns you see, which inform theories you’re working on.

Having an index is the same as having “Table of Contents” notes.




Refactoring my GTD system – part 5: the Mobile inbox

I’m using GTD for almost ten years now. I consider myself an advanced user, but I want to simplify my system, my tools and return to the basics to get better at the end. I started refactoring every aspect of my GTD system—digital and analog as well. This is a series about how I did it and why.

Paper is still with us, and we have to be prepared to keep it somewhere temporarily until we process it. GTD says that we have to keep a physical inbox at home and the office, but what about those times when I’m on the road?

The best way to manage incoming, paper-based material when away from my inbox is to keep a folder in my bag: it is my mobile inbox where I can collect stuff when I’m out for multiple days or going to a meeting where I expect to receive papers. I can park notes from my Capture Wallet, contracts, quotes, reference documents, invoices, contact cards, etc.

Following David Allen’s advice, my mobile inbox is a plastic manila folder. I use a plastic one because it’s more durable—a paper folder would quickly fall apart in my bag. I like the manila style because it’s easy to throw stuff into it, which is one of its disadvantages too: I have to be a bit more careful when I lift it because things can slip out.

For some reason, manila folders are not very popular in Europe. I couldn’t find plastic ones in A4 size, so I had to order a couple of them from Amazon. Smead is a US-based company that makes excellent quality manila folders, although these are letter-sized ones. In my opinion, the difference between letter size and A4 is negligible for a folder that I use to hold papers temporarily.

It is vital to treat the mobile inbox the same way as I do my other inboxes. When I arrive back at my desk, I unload the contents of my mobile inbox into my physical one for later processing. When I’m on the road, the folder is my physical inbox, so I process stuff directly from it.


Tot for iOS is on sale, so I bought it, but I’m not sure if I need it when I’m already using Drafts. Tot almost does the same thing, but I like that is very fast. I used it multiple times today to draft Slack messages, store random pieces of information, keep a bunch of temporary links around for a coding session.

It is a better version of Stickies which syncs with my iPhone and my iPad.

I assigned ⌃⇧T as a global keyboard shortcut for Tot, which opens it from my menubar. Speaking of keyboard shortcuts, I like that I can open each slot via ⌘ paired with its corresponding number key; ⌘1 opens the first slot, ⌘2 opens the second one, etcetera.

Right now, I’m tinkering with Tot. I have Drafts running next to it, and I feel like they overlap too much, but Tot is just better for storing random pieces of bits and blobs.

Maybe at the end each of them will have its place in my tool chain.



Today is my last workday for this year. I finished so many cool Rails projects this year at Nearcut.

Now I can play.

Using an old MacBook Air for a home server

I just assembled this temporary home server “rack” with my 2018 MacBook Air on top.

MacBook Air server on a self

It does the following things:

I plan to get a proper Mac mini after we moved into our new house, but for now, this is more than sufficient.

A deep dive into an NSO zero-click iMessage exploit: Remote Code Execution

The whole thing is fascinating, but this part just blows my mind. Very smart and really terrifying.

JBIG2 doesn’t have scripting capabilities, but when combined with a vulnerability, it does have the ability to emulate circuits of arbitrary logic gates operating on arbitrary memory. So why not just use that to build your own computer architecture and script that!? That’s exactly what this exploit does. Using over 70,000 segment commands defining logical bit operations, they define a small computer architecture with features such as registers and a full 64-bit adder and comparator which they use to search memory and perform arithmetic operations. It’s not as fast as Javascript, but it’s fundamentally computationally equivalent.

The bootstrapping operations for the sandbox escape exploit are written to run on this logic circuit and the whole thing runs in this weird, emulated environment created out of a single decompression pass through a JBIG2 stream. It’s pretty incredible, and at the same time, pretty terrifying.


So this is my workflow for blogging from Craft at the moment. It is fine, but I’m eager to write an extension that does this automatically, maybe with post formats and image uploads too.