Setup
(Last updated: )

PHPStorm's keybinding system is ridiculous

It is no news that I am pretty skeptical that PHPStorm is actually a good IDE. I especially question their handling of international keyboards. You see, on an international keyboard like the German one the keyboard shortcuts cmd + shift + 7 and cmd + / are virtually the same, because there is no way to type a / without typing shift + 7.1

To my knowledge the only modern IDE that offers a default keymap for macOs that doesn’t work out of the box with my default international keyboard is Jetbrain’s offering. The reason is that some genius thought to implement key bindings without any understanding what symbols are necessarily typed by using a modifier key. So you end up with a keyboard shortcut like cmd + / that doesn’t work in PHPStorm, but will work out of the box in VS Code.2

P.S.: The problem is old btw.: The offical issue in their bug tracker is 7(!) years old.

P.P.S.: Is this a hard problem? Maybe. The more interesting question to my mind is, though: Why is it a solved problem in all other IDEs? This is table stakes.


  1. By chance you can also type cmd + devision symbol, but that is not the same as a forward slash and is indeed - and this time correctly - its own shortcut in PHPStorm. Try to type that one on a keyboard without a numpad, though - which means this shortcut is useless on all(!) MacBooks - if you don’t have an external keyboard attached. ↩︎

  2. To be fair: The shortcut ends up being displayed as shift + cmd + 7, but at least vsc won’t act like cmd + / and cmd + shift + 7 are completely different key bindings (which they are not). ↩︎

(Last updated: )

Previously.

Short follow-up:

  • Sometime has not worked out for me. I never got the hang of it. I think it’s a good app, it just didn’t click with me.
  • TeuxDeux is used very lightly. I would want to use it more, but I believe doing is more important than organizing or even tracking the doing.

Forward (task managers).

The way I journal - Part 1: Overview

My journal is in some ways similar to what ratfactor has described, only its not a hybrid analog/digital system. When I have time I will publish the second part, which describes how I implemented this workflow in Obsidian.

Without further ado, here is my workflow for keeping a digital journal:

  1. Have a daily note, that logs what important things have happened that day. One thing per dash. I don’t bother to log the time, because it’s information I do not use (it also prevents redundancy). NB: I sometimes have only one or two things logged for that day. Logging too much just drowns out the actually important stuff.
  2. If there is more to say: Instead of writing paragraphs about the thing in the daily note, branch it out into its own note and leave a link at the dash.
  3. This is basically a special case of point 2: Always create a note for ongoing projects: Write down what you’re doing in the project note. Use headings that link themselves back to the dailies - and link from the daily note to the project note: In this way you can see the progress made per project and don’t clog up your dailies, while at the same time retaining a list of the things you did that day.
  4. At the beginning of the next week, you do a weekly wrap-up: Last weeks weekly note gets populated by the important thoughts, projects, observations, ideas, etc. that occurred that last week: This often doesn’t take very long, because more often than not, you can copy and paste your most important bullet points from the dailies to your weeklies. You may want to add an extra comment to those here and there, or an extra thing, like an observation for stuff that didn’t get logged in the dailies but is deemed important enough to be remarked upon for the weekly.
  5. This pattern of taking the most important stuff from the dailies and putting it into the weeklies is repeated for each periodic note: The monthlies get populated by the weeklies, the quarterlies by the monthlies and the yearlies by the quarterlies. The most important stuff gets distilled even more the longer the timespan is the note covers. In this way the workload is kept relatively small, although the first round of wrap-ups every year can take a while, since you have to do a weekly, monthly, quarterly and yearly wrap-up all at the same time. But even then: It shouldn’t take longer than maybe an hour.

This little workflow is not too time intensive and at the same time gives me peace of mind: I do have a kind of journal of my life, which I can use to look back on what happened in my life.

I have been more or less doing this kind of journaling for two years now and can really recommend it. A word to clarify something important though: A journal kept in this way is not going to be a literary delight. Individual thoughts and observations might rise to that level, but the journal as a whole is much more utilitarian. If this is not a problem and you’d like the idea of distilling what’s been important this might be for you.

 

After three months with Agenda, which is still a very good app, I’m back with Obsidian for all the types of notes that I take.

I sang the praises of not having to maintain my setup and instead use apps in the most default way possible recently: Let others deal with the maintenance of the features and use the provided way of doing things, instead of figuring everything out on my own.

This sounds good, however, I discovered I had to use a lot of energy to keep things that are important to me going.

  • Taking durable notes about my work almost didn’t happen anymore
  • Writing up what had happened during the week by distilling down my daily notes became too much of a chore
  • Taking notes on read materials, let alone reading challenging materials, just didn’t happen as much

In hindsight, I also noticed that my posts about what apps to use and how to use them were a symptom of the necessity of constantly having to reframe my approach to be okay with not switching back to Obsidian.

To switch from one app for journaling to another for more serious note taking proofed to be too big of a context switch as well. I didn’t “live” in my notes as much as I like to do.

Another big reason for being fine with paying the price of maintaining things myself is the recent development of Obsidian: it now supports multiple windows, something that Agenda lacks and something that makes distilling a bunch of notes into a new one pretty hard.

Finally, I think that working on plugins for Obsidian is a way to lessen the load of maintenance and - since I’m a developer - a way to actually gain some expertise. So in my case, it is not a terrible investment of time and effort.

 

I recently tried Sorted, a "hyper-scheduler", which is just a fancy task manager that will automatically schedule my tasks around the events for the current day, giving me a clear picture of what, based on my own estimates, I will be able to do.

As great as this sounds, software development is notorious for being hard to estimate, which means that it didn't make much sense to schedule my whole day in this way.

I was interested in an app like this, because it seemed to be a digital cousin of the time blocking practice that Cal Newport employs to get more focused work done, which I also tried for a while but lead to a similar result: I am lucky enough to actually do important work. What I'm struggling with is too much scaffolding.

Now, I also know about the willpower/structure problem: Relying on willpower to do something is bound to fail in the long run, whereas putting structures in place that foster me to do the right thing, if I want it or not, is the sustainable choice.

But: Even structures like task managers can be or become a source of ego depletion, which is exactly the opposite of what they are supposed to be.

And so I strive for a kind of intuitive and mostly maintenance-free productivity setup: Give me a structured writing surface like Agenda (Agenda is a very nice garbage bin for notes that don't really matter), remind me to do things when it is absolutely necessary by using Due. Otherwise either rely on the project management tools at work (tickets and kanban board) or use Reminders to make sure that things that need to be done but are not work in progress and/or are not work related won't be forgotten.

In an effort to make my blog perform better - lots of images means slow load times - I have updated all my images to use this somewhat undocumented micro.blog feature that resizes images:

Micro.blog offers an endpoint to resize uploaded images. Once you upload the image, if you do [micro.blog/photos/](https://micro.blog/photos/#)##x/, but replace ### with the pixel width you want, followed by the full URL to the image, you’ll show an image with that width. For example, if I wanted the image at [json.blog/foo.jpg](https://json.blog/foo.jpg) to be 480px wide, I could use <img src=“https://micro.blog/photos/480x/[json.blog/foo.jpg](https://json.blog/foo.jpg)”>.

@jsonbecker in the Micro.Blog Forums

This first page load still takes a long while, since my home page weighs in at about 25 mb of mostly image data. But it's a start.

(Last updated: )

Nicht jedes Scheitern ist tatsächliches Scheitern

Wichtiges Konzept: Zu unterscheiden, ob das Ausbleiben einer Handlung, die man sich vorgenommen hatte, um damit ein Ziel voranzutreiben am Ende Scheitern ist, oder nicht. Letzteres kann der Fall sein, wenn sich herausstellt, dass die Handlung nicht (oder nicht mehr) zum Ziel beiträgt.

Wenn das eigene Task-Management-System zu schwergewichtig ist und z. B. aus zu vielen wiederkehrenden Aufgaben und Wartungstätigkeiten besteht, so dass die Aufrechterhaltung des Systems selbst den Hauptteil des Arbeitsaufwandes ausmacht, dann ist die Nichtdurchführung der Wartungstätigkeiten kein Scheitern, sondern notwendig, um dem Ziel näher zu kommen, obwohl man das System einst zum Erreichen des selben Ziels aufgebaut hatte.

Stock Is Better

The best feature is one that is provided and maintained by the platform. A feature that can be built using an API or through extensions/plugins is of course better than a feature that does not exist all. But: Building a feature means maintaining a feature.

An example: You can cobble together a functioning journaling/project notes solution, with daily, weekly and other periodic notes in Obsidian (using a handful of plugins and a carefully thought through file organization scheme). That works. You just have to remember how everything works the next time you touch that part of your setup. And hope that nothing breaks, between those loosely coupled building blocks and the next update. Or you could just use Agenda. Is Agenda perfect? No. But it is much more well suited out of the box for this kind of note taking.

There is also a risk of drift: If you're trying to organize your notes, you probably don't do so just for the sake of it, but because you try to become better at doing other things. The notes and also the notes setup are just helping to accomplish a task at hand. If your setup is complicated and some parts are even written by yourself, you might end up accomplishing everything else but the task you set out to check off in the first place.

Therefore, when I try to improve my current system, I always look for ways to use a less customized system. The more stock features I use the better. The burden of maintaining those features lies with the app developer.

Of course, there will be lots of cases where a feature just doesn't exist. In that case I try to live without this feature first. Maybe I don't need it as much as I first thought. If I can't live without it, I look for a plugin solution, again, to lessen the maintenance load on myself. I have to be aware, that I may not need to maintain the plugin providing the feature, but I am now responsible to make it all work, i.e. the burden of maintenance of the integration of plugin and setup lies with me.

Finally, I might write a plugin, script or customize an existing piece of code to make it do what I need it to do, but this is really a last resort. Very often this is not worth the time.

(Last updated: )

IDE Troubles: PHPStorm and VS Code

I work as a programmer for my day job. Right now I am working on two php projects. Coming from Sublime Text but having had the need for more IDE features I came to love Visual Studio Code and made it my home. VS Code is a great editor for PHP development, especially if you use the Intelephense extension. However, the bigger the project, the more it becomes apparent, that the performance of the language server is not that great.

I lived with this for many months now. Yesterday I started working on a new issue and thought to myself: “All of my dev team members use Jetbrains PHPStorm, I should give it a try.”. I had used Jetbrains Intelij Idea for a brief moment a while back and only remembered being fairly unimpressed, but not exactly why I felt that way. Having now tried getting into their PHP IDE product, I have to say my impression has not really changed and now I also remember why.

Although the code intelligence performance is clearly better, it is the small stuff that gets me. The impetus for this post for example was that you can’t use standard shell shortcuts with the integrated terminal: Control + R (backwards history search) being one of my most often used commands.

I appreciated that they offer a keymap for people coming from Code to PHPStorm and as far as I can tell, the commands in it work. But customizing an IDE is more than just having the same default shortcuts for common tasks available in the new app. I have a bunch of my own shortcuts in code that use the pattern CMD + H <Key> (press CMD + H and then <Key>). I use CMD + H, because my last name start with H, so it was (and is) easier to remember. It just so happens that CMD + H is also a system wide shortcut for hiding an application. So when I tried to set up a frequently used shortcut to reveal the currently opened file in the sidebar navigation, CMD + H S the PHPStorm app was just hidden. In other words it did not “shadow” or override system shortcuts when asked. This feels even more arbitrary if we take those two things together: On the one hand standard shortcuts of the shell running inside the integrated terminal are shadowed per default - and this can also not be disabled -  and on the other hand wanting to shadow a system wide shortcut like CMD + H is not possible without remapping the shortcut within the OS. I feel like the IDE is not really playing along, but instead makes me jump through hoops.

These are only two compounding cuts of a thousand that make PHPStorm hard to love in my opinion. I have an especially hard time understanding the design decisions to remove long standing functionality from a shell by shadowing standard shortcuts. It’s just a bad idea. It does explain why my colleagues never use the integrated terminal, but have an extra shell window open to the side, to run terminal commands.

All in all I am very unimpressed by PHPStorm, but also worried: If the performance of Intelephense stays as bad much longer, I might have to look at other options. I know that Netbeans and Eclipse also have PHP features, I just don’t know anyone using, let alone loving these apps for PHP development…

Forward.

(Last updated: )

Thoughts on the WWDC Keynote in Light of My Recently Bought iPad Pro and M1 MacBook Air

I recently bought new hardware for my personal use: An M1 MacBook Air and an 11” iPad Pro. My thoughts after the keynote:

  • I couldn’t be more excited about the new iPadOS features
  • I am slightly sad that the two new MacBook models - the new M2 MacBook Air and the new 13-inch MacBook Pro - would have been options for my needs and budget

Since the iPad Pro was supposed to be my main machine - not least because I wanted to see if that is possible and fun - I’m even more excited to double down on that. Yeah, I just bought the older MacBook Air, but I bought it because I assume that the light coding I’m doing in my free time and the heavier reading/writing/note taking/processing workflow I have, will lead me to use a machine that can run a less walled in OS with multitasking capabilities. We’ll see.

I wonder if I would have picked a beefier M2 Air over my two machine solution, but I’m also happy I got both devices. We live in a time of exciting technology in which we can pick the right digital tool for the job at hand and I’m happy that I can experience this exciting future.

In any case: My new hardware - I’m still waiting on my new Air - is/is going to be an amazing upgrade to my technological status quo. My personal laptop has been a 13-inch Mac Pro from 2013. And although that computer is still working (I just upgraded it to Monterey this morning!), it was time to upgrade. I’m really looking forward to leaving the sluggish, syrupy Mac experience behind.

UPDATE: My thoughts after a few months of use

(Last updated: )

Setting up code-server again, because the iPad pro is my main personal machine. Last time it took me about a weekend to do so. It seems this time it will too…

(Last updated: )

How I deal with notifications

I think notifications are a rich vein for thinking about my setup, because it requires me to be clear about my intentions as regards to what I want to be notified about and where (and how and when).

Analyzing The Problem Space

A notification is a way to let me know that something has happened, will happen, is available. It is an event that can interact with me and potentially makes me do things. It’s a trigger (or cue).

Notifications can be desirable, overwhelming, unhelpful or outright spam. They are not inherently good or bad, but they are not a neutral thing in the world either: They make a difference.

Judging the usefulness of a notification is a involved process. The complexity of getting notifications right increases when realizing that you have to set them up beforehand, which means you have to expect the future.

1. What do you not want to miss? - Not wanting to miss something doesn’t mean you need to know about it immediately.

Missing something means that a change of state in my world passed me by. Notification, on or not: If I missed it, the knowledge of having missed it implies that I now know that my world has changed (it) and I noticed afterwards. For things I don’t want to miss, I am interested in the changed state of affairs. But this doesn’t mean that I need to know about it now.

2. Is the change of state in itself important? - A change of the status quo doesn’t necessarily mean the info is going to be relevant forever (or relevant temporarily).

As compared to the things I don’t want to miss, here I’m more interested in the change of state: Something became available. A window of obligation/opportunity opened (or is about to close). Something was like this now it’s like that. Depending on the change, I might be interested in it forever or only for a limited period. In either case, time sensitivity itself is not the same as a change of state. It’s another property that alters this one.

3. How time sensitive is it? - Time sensitivity is not the same as the importance of the change occurring or the importance of the new status quo.

Time sensitivity doesn’t mean any change of state needs to be known now. Sometimes it needs to be known depending on a location or on a certain date and time. “Now” is one, but not the only possibility. The reasons for a notification being time sensitive can be manifold in practice. Abstractly speaking, it is a question of priority and urgency - which are also not the same thing.

Whilst priority is trying to rank items by importance (which itself is a relative measure of impactfulness of the thing in question) to my world, urgency re-ranks those items according to currently open windows of opportunity and/or obligation.


Not only is it hard to keep all these distinctions in mind when I’m trying to predict my future, I’m also prone to getting it wrong, because my world is not made of numbers. Parts of my world aren’t measurable, some parts are not even comparable. Still other parts might not even be identifiable as parts!

And if this wasn’t making it difficult enough, this is surely not even close to a complete description of the problem space and none of this is available to me objectively, either. So what to do?

Keeping It Simple

Understand the notification system of your setup

I’m an Apple user and have an iPhone, a work Mac, a personal Mac and an iPad. For me, it was important to understand that while focus modes can be shared across devices, the per-app notification settings are not.

Which makes sense, since not every app is available, let alone installed on every device.

Some notification specific settings are adjusted within the app itself, while others are adjusted through the settings of the os.

Start with no notifications, badges, anything

By disabling all notifications (individually), I am making sure that noise doesn’t even reach me. The default answer to any new app asking for permission to push notifications to me is “No”.

Same goes for badges, space on my home screen, or an app even getting installed. By radically reducing the apps that I have to manage, I reduce the problem a lot, by following this principled approach.

Try the least distracting, simple thing first

I knew some apps needed some way to inform me. And although my analysis above was important to get a feel for the difficulty of the problem, an 80% solution for 20% of effort may be good enough in practice. So I try that first for any app that actually really needs to inform me.

The harder part of this heuristic is figuring out what the least distracting thing is. I find a badge count of the right measure to be pretty good. But sometimes, actual notifications on one or more devices might be the obvious choice.

If I don’t act on it, I remove it

If something is only noise to me, it’s not worth getting informed about. Remove, simplify.

Manage the baseline first

Before even getting into things like focus modes, I make sure my baseline of notifications has a high average of usefulness. This is hard to measure. A good quick test is maybe if notification center is a useful place to me, or not. I tinker with the baseline before I’m even introducing new focus modes (which add extra complexity).

Use focus modes sparingly

I currently have the following focus modes:

  • “Sleep” - for the night

  • “Work” - for working

  • “Do Not Disturb” - for when I need to focus or can not be disturbed (except in extraordinary circumstances).

(Last updated: )

My Current Highlighting And Annotation Setup

Currently my highlighting and annotation setup looks like this:

  • Ebooks: Kindle - Even though Amazon as a company is not without its problems, their ebook reader just works and highlighting and annotating for ebooks works with Readwise flawlessly and without friction.1
  • RSS and misc. articles: Reeder and Instapaper Premium - I recently tried out Feedbin and Inoreader, but the most versatile “read an article on the web and annotate it” setup is this: Send articles from your feed reader (and anywhere else) to Instapaper and annotate them there.2
  • Podcasts: Airr - I don’t think, that I will ever switch my main podcatcher from Overcast to Airr, but if I have the need to capture a part of a podcast, I can open the episode I would like to annotate and create a note that is available in Readwise through this app.
  • Paper books: Readwise iOS app - I’ll have to wait and see how much of a hassle this will end up being, but in theory I could capture highlights from paper books through the iOS app. I would need to take a photo of a page and after text recognition I can highlight what I would like to keep. I have not read a paper book since I have started using Readwise, though.
  • PDFs: Readwise Web App - This is one of those someday/maybe list items. It’s possible in theory to import highlights from PDFs via uploading those files and it is something I would like to have done, but not something I want to do. Most of my studying time I annotated PDFs digitally and most of those PDFs are still living in my Zotero-library.

Why even have a setup like this? Because Readwise is actually awesome. I was skeptical at first, but after reviewing highlights for about two weeks now, I can honestly say: The added engagement with my previously read stuff helps to keep me reading.3

The real kicker is something else, though: Readwise offers an official Obsidian - the note taking software - plugin that syncs my highlights to my own markdown file based knowledge base. So even if I decide to stop using Readwise, the highlights and notes will still be there, in an open and somewhat future-proof format.

Forward


  1. And I own the 6th generation Kindle Paperwhite (from 2014) already. Throwing it away doesn’t seem to be smart. As long as it works, this works. … While writing this I looked into e-reader alternatives, but it seems that the Kindle is the most convenient choice for a consumer with my needs. ↩︎

  2. Instapaper Premium is needed for the annotations (since you only get 5 per month on the free tier). Premium includes some other features like text-to-speech and speed reading, but I don’t really use these features. ↩︎

  3. And writing. Which is one of the goals of this year. There is more to say about this, when framed more theoretically, but this is not the post for this. ↩︎

(Last updated: )

Goals And Ideas For 2022

In January I did a yearly Review and planning session, a thing I always try to do every year.

This year I have the following goals and ideas which I'd like to try out:

  • Becoming an early riser - Status Quo: Big success! So much more time1 to do my projects. Se also my unter two minutes podcast "The Early Riser" that I record every single morning right after I have woken up.
  • "I will start" - Explanation: Be the one who initiates communication, anticipate things to do before anybody has to bring them up - Status: Eh. Could be better, but I am not so bothered by this.
  • Evidence-based living - Explanation: Track things and find metrics to make more informed decisions about different areas in my life.
  • "Commit" - Explanation: Inspired by 4000 Weeks, I'll try to commit to only three work-in-progress items at a time and if I'm committed try to bring those things to an end that is satisfactory while also resisting other demands - internally or externally - on me and my time and attention. Status: Okay, actually.
  • "Read and Write more" - Status: Meh. I am trying, though. I found that playing around with Readwise2 has motivated me to do more in this regard.

  1. A day has only 24 Hours, so how is changing the start of the day making a difference? It's all about not snoozing and using time in bed effectively. If you need 10 hours in bed to get 6 hours of sleep that's not very effective. On the other hand: If you sleep 7 hours while laying in bed for 8 that's pretty good. Changing my sleep schedule made me a more effective sleeper. ↩︎

  2. I can't decide if it's a great thing or overpriced, yet. [EDIT: I have decided that I like it. A lot.] But I have noticed the little boost of interest of doing more reading (and re-reading) with every resurfaced highlight. So maybe it'll end up being worth it. ↩︎