Brian Maher

software engineer

Read this first

OS X @ permissions and quarantine

Whilst correcting the permissions of my ssh key files on my Mac, I noticed a permissions flag that I hadn’t seen before, an @ sign.

$ ls -la
> -r--------@  1 bmaher  staff   1.7K  4 May  2017 id_rsa

Turns out that this signifies that OS X has applied extended attributes to the file.

I wanted to see what information OS X was adding to the file so I ran:

$ xattr -l id_rsa
> 0001;56d4c0a9;Google\;85AF15BC-7CAE-4D1C-A208-60E2BB234258

This tells me that OS X has quarantined the file (against trojans etc.), noting that it was downloaded through Chrome.

Looks like this is the attribute that determines whether or not that ‘this file was downloaded from the internet…’ message appears when you try to open it.

Since I knew the source of this file, and I won’t be opening it through Finder, I removed the file from quarantine by removing the attribute:


Continue reading →

A foray into sketchnoting

I’ve always admired people who can clearly visualise complex topics. I’ve sat and watched Draw my Life videos on YouTube. I’ve watched Scrum Masters quickly and beautifully visualise a Sprint retrospective in real-time. I’ve seen companies describe their processes with awesome diagrams. And I’ve tried poorly to emulate both of these in my day-to-day work (no examples available 😅).

I recently came across a technique of visual note-taking called sketchnoting. I was inspired by this video to look give it a go.
After buying the book, watching a ton more videos and pouring over other people’s examples on their blogs, this weekend I finally got the confidence to reach for a pen and some paper and actually start drawing.

As I hadn’t seriously tried to draw since school, I started off by first practicing lettering. I was surprised to find out just how much I sucked, especially at writing...

Continue reading →

Monitoring tools for *nix

There are many tools available on *nix for monitoring network traffic and system resources. Personally, I prefer ones with a bit of a graphical flavour; here are a couple of my favourites:

network monitoring

$ sudo apt-get install slurm
$ slurm -i eth0


system resource monitoring

$ sudo apt-get install htop
$ htop

N.B. if running on OSX, you’ll need to use sudo htop


View →

Bugs & Scrum

Bugs, those pesky errors that you didn’t foresee.

As defined by Wikipedia, a bug is:

… an error, flaw, failure or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways.
– Wikipedia

Scrum, the process we all know and (some) love.

As defined by the the creators, Scrum is:

… a simple framework for effective team collaboration on complex software projects.

What isn’t so well defined is when and how to document a bug whilst working in Scrum.
Most people will agree that bugs should be documented somewhere; the simplest being on a piece of paper, the more advanced being in an issue management system such as Bugzilla or JIRA.
Should you then document every bug you find during a sprint? I don’t think so, in fact I think doing so can be detrimental to your team.

Let’s look at the definition of a bug...

Continue reading →

Peak sandwich

A haiku

Wholewheat bread, hummus
Avocado, cherry tomato
olive oil, pepper

peak sandwich.png

View →

Cleanup after Docker

I often find myself in a situation where I have several redundant Docker containers and/or images; usually after development of a new container/image and forgetting to use a flag like run --rm.

Unfortunately, Docker doesn’t provide a built-in command to cleanup after itself.

Instead, one must call Docker’s remove commands with the output of Docker’s list commands.

To remove all containers:

$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)

To remove all ‘untagged’ images:

$ docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

View →

Archived posts

From my old blog circa 2011

View →