↓ Skip to main content

Blog

All posts
#

2026

Pages CMS

Pages CMS ↗ ↖

Link pagescms.org Zznippets
Pages CMS is a lightweight system for managing short posts in static blogs (e.g., Hugo), simplifying creation, editing, and publishing of brief content without a full CMS.
Eclipse photos!

Eclipse photos!

I’ve decided to start a new “Photos” section of my blog, including some nice new posting workflows (more to come), so I’m inaugurating it with some nice photos I took during the solar eclipse of August 12, 2026, which I watched with my family from the Polyterrasse at ETH, in Zuri
New posting workflow with Pages CMS

New posting workflow with Pages CMS

·84 words·1 min
Testing Pages CMS as a simpler, mobile-friendly alternative to my Emacs Org-mode/ox-hugo workflow — I installed it on the blog and this is a first test post; more details to come.

2025

Website redesign!

Website redesign!

·240 words·2 mins
Eight years ago I announced The Big Website Reboot, when I switched my website to Hugo. I’m happy to announce the first major update since then.

2021

New course: CISSP Training

New course: CISSP Training

·179 words·1 min
I am happy to finally reveal a project I’ve been working on for some time: my new online course “CISSP Training”, now available on Leanpub.

2020

How to insert screenshots in Org documents on macOS

How to insert screenshots in Org documents on macOS

·378 words·2 mins
As I’m taking notes or writing in Org-mode, I often want to insert screenshots inline with the text. While Org supports inserting and displaying inline images, the assumption is that the image is already somewhere in the file system and we just want to link to it. In this post I will show you how to automate the insertion of images from the clipboard into an org-mode document.

2019

Automating Leanpub book publishing with Hammerspoon and CircleCI

Automating Leanpub book publishing with Hammerspoon and CircleCI

I am the author of two books: Learning CFEngine and Learning Hammerspoon, both self-published using Leanpub. The source of my books is kept in GitHub repositories. In this post I will show you how I use the Leanpub API together with Hammerspoon and CircleCI as part of my workflow, to automate and monitor the building, previewing and publishing of my books.

2018

Using and writing completions in Elvish

Using and writing completions in Elvish

·3445 words·17 mins
Like other Unix shells, Elvish has advanced command-argument completion capabilities. In this article I will explore the existing completions, and show you how you can create your own (and contribute them back to the community!)

2017

Just Enough Lua to Be Productive in Hammerspoon, Part 1

Just Enough Lua to Be Productive in Hammerspoon, Part 1

·1324 words·7 mins
Hammerspoon’s configuration files are written in Lua, so a basic knowledge of the language is very useful to be an effective user of Hammerspoon. In this two-part article I will show you the basics of Lua so you can read and write Hammerspoon configuration. Along the way you will discover that Lua is a surprisingly powerful language.
Elvish, an awesome Unix shell

Elvish, an awesome Unix shell

·663 words·4 mins
I’m always on the lookout for new toys, particularly if they make my work more productive or enjoyable. For a couple of months now I have been using a little-known Unix shell called Elvish as my default login shell on macOS, and I love it.
Using Spoons in Hammerspoon

Using Spoons in Hammerspoon

·2016 words·10 mins
In this second article about Hammerspoon, we look into Spoons, modules written in Lua which can be easily installed and loaded into Hammerspoon to provide ready-to-use functionality. Spoons provide a predefined API to configure and use them. They are also a good way to share your own work with other users.
Hosting a Ghost Blog in GitHub - the easier way

Hosting a Ghost Blog in GitHub - the easier way

·1616 words·8 mins
When I was planning the reboot of my website, I seriously considered using Ghost. It has a very nice UI, beautiful and usable theme out of the box, and a very active community. Eventually I decided to use Hugo, but in the process discovered that it is possible to host a statically-generated Ghost website using GitHub Pages.
Getting Started With Hammerspoon

Getting Started With Hammerspoon

·1545 words·8 mins
This is the first installment of a series of posts about Hammerspoon, a staggeringly powerful automation utility which gives you an amazing degree of control over your Mac, allowing you to automate and control almost anything. In the word of Hammerspoon’s motto: Making the runtime, funtime.

2016

Fast translation with Google Translator

·56 words·1 min
via https://medium.com/@mrdoro/fast-translation-with-google-translator-and-mac-osx-817e32233b7a https://medium.com/@mrdoro/fast-translation-with-google-translator-and-mac-osx-817e32233b7a Nice article about how to create a service to automatically translate selected text from any application. I use this all the time, I have a “German-to-English” service bound to Command-Alt-Ctrl-Shift-E, so I can just select text off the screen, press the shortcut, and a window with the translation will pop up. Very handy.

Enwrite featured in onethingwell.org!

·86 words·1 min
via http://onethingwell.org/post/140035085825/enwrite I’m so proud (and of course posting this from Evernote using the web clipper) 😃 Enwrite ⇒ Evernote-powered statically-generated blogs and websites.

2015

Clicking on the MacBook Pro is entirely artificial

·169 words·1 min
via http://sixcolors.com/post/2015/10/apple-magic-trackpad-2-review/ This is probably old news for most, but it still blew my mind: only now I realized that the clicking feeling and sound on my MacBook Pro’s trackpad is artificially generated. I did the experiment of turning on “Silent clicking” and turning off “Force click and haptic feedback” on the trackpad preferences panel and, indeed, the clicking is gone. Wow (/ht @jsnell) To aid in the process, the Magic Trackpad apparently even generates its own artificial clicking noise (as the Force Touch trackpads in the MacBook and MacBook Pro do). If you think that’s weird, you can enable Silent Clicking in the Trackpad system preferences pane, and the artificial sound will shut off. (There’s still a sound when you click, though, thanks to the vibration—but it’s much subtler.) As on the MacBook, it’s kind of hard to believe that the Magic Trackpad 2 isn’t actually clicking when you push down. The glass does flex with the pressure a little bit, but that clicking feeling is entirely artificial.

Using Multiple SSH Keys with Github

·78 words·1 min
via http://www.freshblurbs.com/blog/2013/06/22/github-multiple-ssh-keys.html#tldr Since Github doesn't allow us to reuse an SSH Key, the only sane solution is to jump through some hoops and generate + use multiple keys on the server itself. Let's look at some effective approaches of doing that. Short version: define multiple hosts in the SSH config file for each repository, which use different SSH keys, then you can assign different deploy keys to each repo. But read the whole article for the full details.

Fixing Emacs problems with the fish shell

·114 words·1 min
I started getting errors from the TRAMP Emacs package because I was using fish as my default shell, and it does not recognize certain standard syntax elements (such as && to separate commands), and Emacs runs subcommands under the default shell. I fixed this by:

The log: The lifeblood of your data pipeline - O'Reilly Radar

·75 words·1 min
via http://radar.oreilly.com/2015/04/the-log-the-lifeblood-of-your-data-pipeline.html Interesting article. I hadn’t heard of Fluentd, looks useful. The old paradigm — machines to humans, and the new — machines to machines. Image courtesy of Kiyoto Tamura. Over the last decade, the primary consumer of log data shifted from humans to machines. Software engineers still read logs, especially when their software behaves in an unexpected manner. However, in terms of “bytes processed,” humans account for a tiny fraction of the total consumption.

Whisky - Matt Gemmell

·51 words·1 min
via http://mattgemmell.com/whisky/ Nice essay.But then, finally, with one last branch hacked from your way, you set eyes upon it, and stand there. Silent and still. Perhaps you raise a hand, feeling time-worn stone beneath your fingertips. A dream, finally made solid. You’ve come so far, and now, at last, you’re here.

Three levels of GIT config

·119 words·1 min
via http://www.codinginahurry.com/2011/02/05/three-levels-of-git-config/ Very nice explanation, via coding in a hurry There are 3 levels of git config; project, global and system. project: Project configs are only available for the current project and stored in .git/config in the project's directory. global: Global configs are available for all projects for the current user and stored in ~/.gitconfig. system: System configs are available for all the users/projects and stored in /etc/gitconfig. Create a project specific config, you have to execute this under the project's directory. git config user.name "John Doe" Create a global config git config --global user.name "John Doe" Create a system config git config --system user.name "John Doe" And as you may guess, project overrides global and global overrides system.

The First Apple Homepage

·37 words·1 min
via http://kfury.com/the-first-apple-homepage Looks positively old-fashioned now, but the memories! I don’t remember this particular page, but I do remember compiling and using Mosaic as my first web browser on an old DECstation 5000, my first Unix workstation.

Moving files between git repositories, preserving history

·238 words·2 mins
I needed to copy a directory between two git repositories while preserving its history. I found some good instructions at http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/, which got me started, but I figured out a way to avoid having to move all the files into their directory again (lines 5-6 in Greg’s instructions) by reversing the filter to remove everything I don’t want instead of only including the directory I want. Here are the steps (the idea is the same as in Greg’s post, so please read that to get the explanation, I’m only listing the commands here for reference):

Watching for changes (Polling notifications) in Evernote

·317 words·2 mins
via https://dev.evernote.com/doc/articles/polling_notification.php Useful note about how to poll an Evernote account for new content. Also a test of web clipping with Enwrite. Polling If your app wants to know about changes in a user's Evernote account, you'll probably consider calling the NoteStore.findNotesMetadata function periodically to search for new notes. findNotes is incredibly powerful, but it's also expensive for our servers - we need to load the user's Lucene index, perform the search across all of their notes, hit the database to pull out the results, and send those results over the network to your app. If you're building a web application, you should use webhooks instead of polling. If you have to poll, you should follow the guidelines below.

How to create a new KVM VM using command line tools

·42 words·1 min
I got tired of clicking through virt-manager to create new VMs, so I found the command needed to create one from the command line (thanks https://acidborg.wordpress.com/2010/02/18/how-to-create-virtual-machines-using-kvm-kernel-based-virtual-machine/): virt-install --name=hostname --arch=x86_64 --vcpus=2 --ram=4096 --os-type=linux --os-variant=rhel7 --hvm --connect=qemu:///system --network bridge:br-fabric --cdrom=/var/lib/libvirt/images/CentOS-7.0-1406-x86_64-Minimal.iso --disk path=/var/lib/libvirt/images/hostname.img,size=32 --accelerate --vnc

Find all single-note tags in Evernote

·109 words·1 min
I’ve been working on cleaning up my Evernote, and noticed that I have a lot of tags assigned to a single note. I had successfully used Veritrope’s excellent Evernote empty tag remover applescript, so I made some small changes to write the attached script, which will find all single-note tags in your Evernote and list them in a new note, including links to each note. This makes it much easier to go through them and see which of those tags could be removed. Just download the script, open it in Script Editor and run it. Tip of the hat to Justin for his excellent collection of scripts at Veritrope!

2014

You’re probably using the wrong dictionary

·62 words·1 min
You’re probably using the wrong dictionary « the jsomers.net blog > Which is to say you get a feeling about English that Calvin once got with his pet tiger on a day of fresh-fallen snow: “It’s a magical world, Hobbes. Let’s go exploring!” Very nice article. I ended up using the package from this page, which has slightly-better formatting in my opinion.

Mac keyboard shortcuts by Matt Gemmell

·63 words·1 min
Another great article by Matt Gemmell. I knew most of them, but learned a few things. The golden part for me were the third-party utilities, in particular Shortcat, which I didn’t know and is amazing: > It’s basically Spotlight but for all visible controls and objects on the screen: it’s type-to-select for *everything you can see*. The whole article is worth a read.

How to solve truncated docker output in Mac OS X using boot2docker

·123 words·1 min
If you are using docker on Mac OS X using boot2docker (http://docs.docker.io/installation/mac/), you may see truncated output from docker run, and also may have noticed that docker attach does not work properly, producing only some output and then exiting. This bug is documented here: https://github.com/boot2docker/boot2docker/issues/150, where I also found the following workaround. Documenting it here in case anyone finds it useful:

Working from home - Matt Gemmell

·103 words·1 min
Great article. I’ve been working from home full-time for more than seven years, and running my own business for the same amount of time. Many of us at least have the opportunity to occasionally work from home, and I daresay that many people would like the chance to do so permanently. It’s not just as straightforward as pulling out a laptop in the living room, though. Working from home has a number of difficulties and challenges. In many ways, it’s a battle for mastery of yourself. I’d like to talk about a few of the issues I’ve faced, and how I handle them.

Airmail tip: prevent "Save to Evernote" action from opening the created note

·197 words·1 min
I’ve been trying out Airmail as my main email app. It’s quite nice, I like the built-in integrations, particularly with Evernote. By default, when you use the “Save to Evernote” action, it saves the current message to Evernote and opens the newly-created note. I went spelunking into the Airmail application directory, and found the way to disable the note-opening. Follow these steps: Quit Airmail (don’t know if this is necessary, but it can’t hurt) Open the Terminal app Run the following command in the terminal (all in a single line): sudo /Applications/Utilities/AppleScript\ Editor.app/Contents/MacOS/AppleScript\ Editor /Applications/Airmail.app/Contents/Resources/Evernote.applescriptThis will ask you for your password and then run the AppleScript Editor. Note: in my experience, the AppleScript Editor app may open behind the terminal window - look at the Dock for its icon, and bring it to the front. In the AppleScript Editor window, find this line: open note window with the noteand comment it out by inserting a # at the beginning, like this: # open note window with the note Save the modified file and quit AppleScript Editor. Restart Airmail. That’s it! Now the “Save to Evernote” action saves the current message to Evernote, but does not open it.

How to stop com.apple.dock.extra from "using significant energy"

·96 words·1 min
I’d been having for some time a problem with `com.apple.dock.extra` appearing in the “Apps using significant energy” section of the battery menu. I just learned the solution (from http://forums.macrumors.com/showthread.php?t=1651662): remove BusyCal 1.6 (I upgraded to BusyCal 2, but left the old version around in case I had to go back to it). After removing it and restarting the Dock, the problem stopped. From the same thread, it seems the problem was caused by BusyCal’s “animate transitions” preference. I didn’t try that, but if you are still using BusyCal 1.6 and have this problem, it’s worth trying.

Explanation of temperature scales

·148 words·1 min
Interesting explanation, via http://ralfmaximus.tumblr.com/post/73635353732/spinningyarns-doctorbee-xwidep-scales This is because Fahrenheit is based on a brine scale and the human body. The scale is basically how cold does it have to be to freeze saltwater (zero Fahrenheit) to what temperature is the human body (100-ish Fahrenheit, although now we know that’s not exactly accurate). Fahrenheit was designed around humans. Celsius and Kelvin are designed around the natural world. Celsius is a scale based on water. Zero is when water freezes, 100 is when water boils. Kelvin uses the same scale as Celsius (one degree, as a unit, is the same between the two), but defines zero as absolute zero, which is basically the temperature at which atoms literally stop doing that spinning thing. Nothing can exist below zero Kelvin. It’s the bottom of the scale. So. Fahrenheit: what temperatures affect humans Celsius: what temperatures affect water Kelvin: what temperatures affect atoms

2013

Testing markdown support

·45 words·1 min
I’m giving an Ignite talk for the first time at DevOps days Paris. It’s an interesting format: a 5-minute talk with 20 auto-advancing slides, every 15 seconds. I found How to Give a great Ignite Talk by Scott Berkun very useful, including the accompanying video.

Ignite talks

·45 words·1 min
I’m giving an Ignite talk for the first time at DevOps days Paris. It’s an interesting format: a 5-minute talk with 20 auto-advancing slides, every 15 seconds. I found How to Give a great Ignite Talk by Scott Berkun very useful, including the accompanying video.

On the other side

·217 words·2 mins
About a year ago, Posterous was acquired by Twitter. A month ago, it was announced that it will be completely shut down by April 30th. I’ll spare you my rant about how the awesome customer service that characterized Posterous pre-acquisition completely disappeared after the acquisition :)

2012

HowTo: Changing the available display formats for Evernote's "Insert Date" command

·172 words·1 min
Evernote introduced some time ago an "Insert Date" keyboard shortcut, which is very handy. However, the options for the format of the inserted date seemed limited (only four options). I finally learned how this works, and how to change it on the Mac. The formats offered are those that are configured in the "Languages & Text" preferences panel. If you go to "Region" and then click the "Customize button" in the Dates part of the panel, you will see and be able to customize the formats for short, medium, long and full date representations. Those are the options that are offered to you by Evernote. Just change them to whatever you want, and they will be available for selection. What I specifically wanted to do was to use the YYYY-MM-DD format, so I changed it to the following:

Letters of Note: Regarding your dam complaint

·69 words·1 min
I would like to challenge you to attempt to emulate their dam project any dam time and/or any dam place you choose. I believe I can safely state there is no dam way you could ever match their dam skills, their dam resourcefulness, their dam ingenuity, their dam persistence, their dam determination and/or their dam work ethic. via lettersofnote.com Amazing letter - read the whole thing, it's incredibly funny.

When a Dragon mated the space station /ht @BadAstronomer

·67 words·1 min
At 16:02 UTC, Friday, May 25, 2012, the SpaceX Dragon officially became the first privately-owned commercial spacecraft to be captured by and berthed at the International Space Station. It is (if I’ve done the math correctly) the 114th spacecraft to dock with ISS, including the missions sent up to build the station. It is the first privately-owned commercial spacecraft in history to do so.

CFEngine talks at PICC'12 conference

·159 words·1 min
There will be several CFEngine-related classes and talks at the PICC'12 conference (Professional IT Community Conference) on May 11-12th, in New Jersey. I will be talking about using CFEngine as part of your security infrastructure. My colleague Joe Netzel will be talking about migration from CFEngine 2 to CFEngine 3, so if you are using CF2 and have been considering (or dreading) the migration, make sure to come by! Aleksey Tsalolikhin will give an introductory class to CFEngine. And Mark Burgess will give a class not related to CFEngine, but to the perils and skills needed to survive as a technical person in the "business world".

Bezos Expeditions | F-1 Engine Recovery

·56 words·1 min
Photo credit: NASA I'm excited to report that, using state-of-the-art deep sea sonar, the team has found the Apollo 11 engines lying 14,000 feet below the surface, and we're making plans to attempt to raise one or more of them from the ocean floor.

GitHub: Instantly Beautiful Project Pages

·39 words·1 min
Ever pushed a new project to GitHub and wished you had the time or talent to make a beautiful page for it? Stop wishing. We're proud to present the new GitHub Page Generator. via github.com Very nice new feature.

Purdue at Night

·78 words·1 min
I am at Purdue to give a CFEngine talk and visit some old colleagues, here are some photos I took during a night walk right after checking into my hotel. I graduated in 2001, and the last time I visited was almost 10 years ago. Time really flies, there are many new things in campus (including the shiny new Computer Science Building, which I had never seen), but so many others remain unchanged. It's awesome to be back.

Analytics put to a good cause

·52 words·1 min
Well, here's a good use of web analytics. From LinkedIn: Seeing a lot of daily digests piling up?

github/gitignore

·10 words·1 min
A collection of useful .gitignore templates via github.com Useful resource.

Lists of Note: Henry Miller's 11 Commandments

·143 words·1 min
COMMANDMENTS Work on one thing at a time until finished. Start no more new books, add no more new material to "Black Spring." Don't be nervous. Work calmly, joyously, recklessly on whatever is in hand. Work according to Program and not according to mood. Stop at the appointed time! When you can't create you can work. Cement a little every day, rather than add new fertilizers. Keep human! See people, go places, drink if you feel like it. Don't be a draught-horse! Work with pleasure only. Discard the Program when you feel like it—but go back to it next day. Concentrate. Narrow down. Exclude. Forget the books you want to write. Think only of the book you are writing. Write first and always. Painting, music, friends, cinema, all these come afterwards. via listsofnote.com Excellent advice for any line of work, not only writing.

I broke my Zagg Smartbuds :(

·27 words·1 min
The cable caught on my knee while working out and snapped off the microphone unit :( Hope to get it repaired or replaced, I love these headphones.