Hong Kong



ImageMagick caches

Lately I have been noticing how my laptop was becoming more and more sluggish. Not to the point of being plain slow, but in a kind of “you should start thinking about a replacement” way.

Considering the machine is a bit more than one year old, and that it was maxed out when I purchased it, well, that was not a nice thing to notice.

So, I started looking around, to see if there was something off, and indeed there was:

That’s not too much free space

So I run GrandPerspective, a little app that shows the space used by the disk visually, and immediately found the reason: a few really large ImageMagick caches.

It turns out that as part of the process to document pull requests, sometimes I use a little app called DropGif to generate gifs from screen recordings of the features / fix in the PR to add it to its description. It seems someone here is not doing their cleanup properly.

So, after clearing the ImageMagick caches:

Much better!

It’s like having a brand new computer!


Activating Apple ID 2FA and adding separate dev accounts to an iOS device

The starting point

I registered my Apple ID before iCloud existed. It is the Apple ID I use for App Store purchases, Apple Music, and, because I registered as a developer before iOS existed, it is also my developer account.

So all my devices are setup with two Apple IDs: the one I just mentioned, let’s call it my primary Apple ID, and my iCloud account, which was registered back in the days of .Mac.

The primary account did not have 2FA turned on, but the iCloud account did.

Activating 2FA and adding separate developer accounts

Apple is now requiring Developer accounts have 2FA turned on as a security measure. So I needed to:

  1. Activate 2FA for my primary Apple ID (the one I don’t use for iCloud)
  2. Add a separate developer account to my primary device, so that I can get 2FA codes when needed.

Activating 2FA for my primary Apple ID

Just to recap, this is the Apple ID that I don’t use for iCloud.

I thought activating 2FA for this account would be just a matter of logging in to appleid.apple.com, and enabling it. It turns out, there was no way to enable it, and there was no way to add a phone number to the account (which I guess might be the ultimate reason why it was not possible to activate 2FA)

And when I say it was not possible, I mean there was a button to do so, that when clicked, showed a popup advising to activate 2FA from an iOS device, in Settings.

But again as this account is not an iCloud account, there is no way to do that from an iOS device. Dead end.

What I ended up doing was a second iOS device, log into iCloud on that second device using my primary Apple ID, add a trusted phone number, and finally activate 2FA.

First problem solved. My primary Apple ID is 2FA enabled now.

Adding separate developer accounts to my primary device.

This turned out a two step process that is perfectly described in these two posts: first, activating 2FA for the second account and then adding the second account to my primary device.

The first step is simple. To activate 2FA for the second developer account, I added a second user to my Mac, switched to that second user, logged into iCloud using my second developer account, added a phone number (to receive the validation codes), and activated 2FA.

After that, on my primary device, add the second developer account as an iCloud account, sign into it turning off all data (email, contacts, iCloud Drive) validating the log in with my Mac.

Good to go

Now I can receive 2FA codes for three developer accounts on my main device.

The process was not very intuitive, to say the least. Having one device with three iCloud accounts setup in it does not make me feel particularly safe, and I think I am going to try to setup a separate device, without any personal data, just for 2FA codes for my developer accounts.

CodingAdventures, Swift

TIL: protocols and lazy var

TIL this builds:

Swift never ceases to amaze me

CodingAdventures, Personal

WordCamp Taipei 2018

I am still on the long bus ride home from the airport, after an exhausting weekend in Taipei.

Earlier today I spoke at WordCamp Taipei. The experience has been draining, and at the same time extremely rewarding. So rewarding that I might actually consider doing it again 😊

Anyway, I would like to thank the organisers of the first ever WordCamp Taipei for the amazing work they have done. The event run smoothly, so smoothly that you can’t help but thinking “wow, these people have put lots of work and care into this”.


Stuff I’ve read between August 5th and 12th 2018

As a follow up to the “I’m out of Twitter” post, I am starting a weekly recap of what I’ve read.

Stuff from the internets

There’s a limit to the amount of knowledge a single person can cram into their head in a lifetime

When knowledge is the limiting factor

Sunshine, sensuality, and a dash of danger… the ‘warm south’ has fascinated writers and artists for hundreds of years. But why are the Brits so obsessed?

From EM Forster to Mamma Mia! Why we can’t resist the Mediterranean

… You have created all these classes and complexity to replace only one line of code, which is unlikely to be changed.

Dependency Injection smells

We’re not used to thinking about the tech industry in terms of labor […] But tech, like any industry, is composed of workers and owners. The labor of the former generates profits for the latter

Can Silicon Valley workers rein in big tech from within?

From vaccines to climate change to genocide, a new age of denialism is upon us

Denialism: what drives people to reject the truth


Greeks Bearing Gifts

The Male Factor

CodingAdventures, Swift

TIL: Swift 4 and protocol composition.

One of the things I like most about Swift is that almost every day I learn something new, more often than not, something new that makes me write more readable and cleaner code.

Today I realised that protocol composition, which I kind of knew could be used to compose a SuperClass and a Protocol, can help remove some downcasts at runtime, and substitute those downcasts by the compiler yelling at you when writing the code.

Let’s take this code. As usual, it is difficult for me to come up with a relevant example that illustrates what I want, but is also simple enough to be understood without too much context.

Notice how I have to check, at runtime, that the parameter I pass to deliverPresentation implements the Presentable protocol.

If we rewrite the Presenter to be like this, we can make the compiler enforce that whatever we pass to deliverPresentation as a parameter also implements Presentable, so we can avoid the downcast.

A real life example? From this:

To this: