Mac OS X application installation automation

Mac OS X “application installation automation” – now say that 3 times quickly!

This is a post about Homebrew and Cask, two package management projects for OS X CLI and GUI applications respectively, and why they’re so useful when it comes to setting a new Apple Mac.

This week I started a new job at VMware. Yes, I’ve moved on from Coho Data (an awesome scale-out, high performance, high-bandwidth enabled, distributed, shared nothing, enterprise-class, freakishly good storage product – give them a call if you have storage needs for VMware, docker images, OpenStack, Big Data, etc).

I’ve joined VMware’s Validated Design team within the Integrated Systems business unit as one of their product managers. There’s lots of super interesting work going on there, and very cool, smart folks to learn from. I’m sure I’ll be writing some articles here about what we’re up to in the coming months. Trust me, if you’re an architect or engineer responsible for designing and/or implementing VMware solutions in your datacenter, then the technology this team is working on will have a material impact on how you do what you do in the next couple of years.  If you get the chance to speak to anyone from this team at VMworld, your local VMUG, etc, then ask them why and take the time to listen carefully.

So starting a new job means amongst many other (far more important) things, setting up your new work computer. OS X has its App Store, which should in theory make this sort of menial task a breeze. Installing all your must-have apps on a smartphone is easy-peasy, especially if you’ve already been living in the same ecosystem with your previous phone. And yes, in fact, Apple’s App Store for Macs does something pretty similar – you log into your account and it lists all the apps you had previously installed via the App Store. The problem is only about 10% of the tools and applications I use on a Mac are listed in Apple’s walled garden. There’s lots of reasons why, but fundamentally most application developers don’t agree with Apple’s T&C and know that most folks are happy to roam across to their website to chase down each app. But where’s automation potential there? If each one take 10 minutes to find and install, multiplied by say 50 (yeah, you’d be surprised how much stuff you install), that means I’m spending a chunk of my first week at work not figuring out the coffee situation (seriously , that only makes it to #5? facepalm).

(Now, in reality my shiny new MacBook Pro is waiting for me at home, while I’m in Palo Alto for my first week. But I’ll be following these instructions once I actually get my paws on it.)

Homebrew – what’s this?

This is where I started looking for a tool with a more ubiquitous reach.

You look like a beer coaster. Okay, I’m sold.

I’ve used Homebrew before. If you’re familiar with Linux package managers such as apt-get for Debian, then you’ll understand the concept. Brew focuses on CLI tools and packages. You may also have heard of MacPorts and Fink, but Homebrew is arguably most popular of the trio these days. Homebrew refers to each package as a formulae and currently they’re over 3,500 different formulaes to pick from in their default repository. Pretty much any non-UI tool, application, app stack you can think of for a Mac is in there. And it’s trivial to use.

Cask – what’s that?

Great, but OS X has this wonderous Graphical User Interface thing that I sometimes like to use to search for pictures of cats, and other critical work related things. This is where Cask comes to the rescue. It’s its own distinct project (separate team), but they’ve taken the Homebrew ethos and way of doing things, and extended it to the most common UI applications. When I say most common, they cover over 3,000 of the most popular UI apps out there in the primary tap (think repo). This might not sound like a lot in comparison to Apple’s app store, but unlike all the shoot-em-up games filling Apple’s coin-operated machine, it provides over 90% of the apps I use everyday. Check out my own script at the bottom of this post – I’ll bet you use lots of the same tools.

Hate the CLI?

Okay, so as I’ll show you, both Homebrew and Cask are as pimpsicle to use as “brew install foo” and “brew cask install bar“, but how about UI options here for the heathens among you. Yes, the irony of recommending a CLI tool to install a bunch of GUI tools is not lost on me. This is about using the best tool to automate something inherently repeatably (and dull).

I did hunt around for something, and I found two potential tools that seem to work in a very similar to the awesome Windows ninite tool.

I haven’t used either as the coverage wasn’t anywhere near that of Cask, but both look easy ways to install a handful of the more common apps out there. It might just scratch your itch sufficiently.

Here be Dragons!


So, you’ve thrown caution to the wind and decided to follow me on the journey into the murky CLI option. Here goes nothing.

Setup Homebrew

To get started, we use the only scary looking command in this post. Promise. Open a Terminal window and paste this in:
/usr/bin/ruby -e "$(curl -fsSL"

Don’t fret over what it means or does. Just do it, forget it, and move on with your life. Now comes the fun stuff.

Using Homebrew

Brew is super easy, with only a handful of commands that you’ll actually use. There is a man page, but you can probably see all you need by just typing:



Here’s my top pick of commands, and probably the only ones you’ll need:

First, run the doctor command to do a health check of the install:
brew doctor

Let’s search for a tool to see what’s available and the package name used:
brew search top
The results of this command lists several different top-style commands such as dnstop, iftop, apachetop.

I find two versions of htop (htop and htop-osx) and I’m not quite sure which to go for, so I look at the info page for each with:
brew info htop-osx and brew info htop
From that, I can see htop-osx is a much older legacy version.

To install htop I simply use:
brew install htop


To remove it I’d just need:
brew uninstall htop
(BTW, don’t uninstall htop. It’s awesome)

There’s probably only a couple more commands I use that often:
– To update brew itself: brew update
– To upgrade all the apps: brew upgrade (you can specify specific apps if you want to)

Two more that are worth taking a look at are:
brew tap to manage additional repositories
brew cleanup which removes the cached install files. The doctor command shows how much space can be freed up by this.
To get a full listing of all the current brew formulaes available, do something like this:
brew list > brew_listing.txt

Setup Cask

Now we get to those GUI applications that our trackpad loves so much. Setting up casks these days is as easy as:
brew install cask
That’s it.

Using Cask

If you read the section on using brew, then you know how to use cask. Cask is implemented as a subcommand of Homebrew, just insert cask after the brew command. For example, to install the very handy cheetsheet tool:
brew cask install cheatsheet
(A great little app to help you learn all the keyboard shortcuts you ever wanted:

Just like brew itself, run brew cask to see a list of the main cask commands.

To get a full listing of all the current apps available from the default cask tap, do something like this:
brew cask list > cask_listing.txt

But where’s my new applications?

By default cask installs all its apps into directories under /opt and creates symlinks to your ~/Applications folder (in your own home directory, under /Users). If you want them in /Applications for easier access, just drag and drop the shortcuts across there yourself.

I tend to use Alfred to launch applications when I’m keeping my hands on the keyboard, so this isn’t a big deal for me as my good man finds the apps there without adjusting his bowler.

Alternatively, it seems you can add a line to your .bash_profile file. See here for the instructions:, but I suspect you’ll need to run some commands with elevated privileges – YMMV.

My own script

Below is the simple shell script that I’ll use next week to install my app list. I’m dropping it here for my own reference as much as anything, but I thought some of you might find it a useful starting point for your own use. I suspect that if you’ve followed the post this far you’ve probably share many of the poor tastes in applications as I do.

# Check that Homebrew is installed and install if not,
if test ! $(which brew); then
echo "Installing homebrew…"
/usr/bin/ruby -e "$(curl -fsSL"

# Update any existing homebrew recipes
brew update

# Install my brew packages
brew install wget
brew install fish
brew install git
brew install htop
brew install calc
brew install tree
brew install ncdu
brew install irssi

# Install cask!
brew install cask

# Add tab completion for bash and fish to cask commands
brew install homebrew/completions/brew-cask-completion

# Install my cask packages
brew cask install abricotine
brew cask install adobe-reader
brew cask install airdroid
brew cask install alfred
brew cask install android-file-transfer
brew cask install angry-ip-scanner
brew cask install atom
brew cask install banshee
brew cask install boot2docker
brew cask install caffeine
brew cask install cakebrew
brew cask install calibre
brew cask install cheatsheet
brew cask install cpumeter
brew cask install day-o
brew cask install dockertoolbox
brew cask install dropbox
brew cask install evernote
brew cask install filezilla
brew cask install firefox
brew cask install flux
brew cask install git
brew cask install gitbook-editor
brew cask install github-desktop
brew cask install gmail-notifr
brew cask install google-chrome
brew cask install google-hangouts
brew cask install gpodder
brew cask install grandperspective
brew cask install iterm2
brew cask install keepassx
# brew cask install libreoffice
# brew cask install microsoft-intellipoint
# brew cask install microsoft-intellitype
# brew cask install microsoft-lync # Lync 2011
# brew cask install microsoft-lync-plugin
# brew cask install microsoft-office # Office 2016 installer
brew cask install movelinks
brew cask install pencil
brew cask install pomodone
brew cask install prey
brew cask install royal-tsx
brew cask install skim
brew cask install simplifyextras # Spotify mac keyboard control
# brew cask install skype
brew cask install slack
brew cask install spotifree
brew cask install spotify
brew cask install spotify-notifications
brew cask install teamviewer
brew cask install the-unarchiver
brew cask install transmission
brew cask install visual-studio-code
brew cask install vlc
brew cask install vmware-appcatalyst
brew cask install vmware-fusion
brew cask install vmware-horizon-client
brew cask install wireshark
brew cask install xmind

# Add other things from the beta "versions" tap
brew tap caskroom/versions
brew cask install google-chrome-canary

# Remove brew cruft
brew cleanup

# Remove cask cruft
brew cask cleanup

# Link alfred to apps
brew cask alfred link

Remember to make it executable: chmod a+x

Other tools I install

As a reminder to myself, here’s a list of the other apps that I install that unfortunately aren’t available via brew or cask:
1. FreeSpace Tab (App store)
2. Lightshot Screenshot (App store)
3. Memory Monitor
4. Microsoft Remote Desktop (App store)
5. Pocket (App store)
6. Pomodoro Time
7. ReadKit (App store)
8. Simplenote (App store)
9. TweetDeck (App store)
10. VMware Client Integration Plug-in
11. VMware Remote Console (VMRC 8.01)

I can probably find replacements for some of these utility apps, i.e. # 1, 2, 3, 4, 6, 9 – suggestions in the comments section are most welcome!

Bonus: Cakebrew

One last thing I found while writing this article is something called cakebrew which provides a nice little GUI tool to install brew apps.


Unfortunately it doesn’t seem to support cask (GUI) apps yet. Yeah, there’s a very weird snake eating itself there – a GUI app to install CLI tools. Installed via the CLI: brew cask install cakebrew. The feature request ticket for adding cask is here.

What’s your must have OS X apps?

What are your must-have applications for when you set up your MacBook? Let us know in the comments.

A simple markdown editor that’s actually rather good

A short blog (actually started as tweet but I couldn’t do it justice in 140 characters) to let you know about a new markdown editor that caught my attention this week called Abricotine.

Abricotine 1

Here’s the rub

For those of you who are markdown aficionados, you probably follow a similar search for the ultimate markdown editor that is elegant, frictionless, distraction-free; all while being powerful, feature-rich and endlessly extensible. Yeah, seems like a good way to procrastinate. Of late I’ve bounced between Github’s Atom and Microsoft’s surprisingly nice Visual Studio Code.

Unfortunately most markdown editors fall into one of two categories:

  • Too cold. An editor that you write in, that can easily preview via a keystroke/menu click by opening a second window/pane to render your markdown text as an HTML page. This is nice as it allows a straightforward writing experience which stays true to what you are typing, but it isn’t particular intuitive to preview the formatting, causes a jarring switch of focus when you do, and uses double the real-estate causing your eyes to flit between the two.
  • Too hot. An editor which transforms markdown as you type, replacing the text with the formatted rich text. This saves any need to switch to a different view and seems simple for new markdown users, but the problem is you lose the formatting immediately. This approach doesn’t make much sense to me as one of the primary reason I write in markdown is its portable nature. Open, save, edit anywhere – it’s just a text file, but it retains the bare minimum markup a writer needs while still being mostly readable in it’s raw format. For example, if I just wanted a quick way to bold a word without leaving the keyboard, I’d learn how to use ctrl+B. I use markdown because it’s easier to type than enclosing HTML tags, leaves the text easy to read, while keeping the formatting separate. To me, this is where the new inline editor in WordPress gets it wrong (also, online editors take time to build up trust – gmail’s editor is about the only one I’ll not worry too much about.  Even then, if it’s more than a couple of paragraphs I reach for a real text editor). See the following animated gif to see what I mean about “too hot”.
Image courtesy of
Image courtesy of

Just right

I’ve seen some editors attempt to blend these approaches although up to now I find most don’t do it well. For example Visual Studio Code, has a strange mix of providing a rendered split window, but also tries to format things in the text entry pane but is limited by the single font size. It ends up with odd results such as applying bold and italics appropriately, but not strikethrough or underscores. Headings aren’t a larger size than body text, but a different colour – mix this with f.lux in the evening when writing and you’ll think things are very odd.

This is where Abricotine seems to get the balance right. It lets you see the formatting syntax and the resulting impact inline, without trying to hide or convert the syntax. It probably looks ugly if you’re not used to markdown, but for someone that writes that way I think it’s a perfect balance.

abricotine icon

For example, inserting images via a URL works really nicely in practice, showing the image, while still retaining the link correctly in pure markdown whenever you move the cursor over that line or copy the text somewhere (click on the image below to see it larger – normal on the left, focus on the right).

Abricotine 2

Open, lots of flavours and potential

There are lots of other markdown editors out there, but unlike most of the new high-quality options Abricotine is open source (GPLv3), cross-platform (Windows, OS X and Linux) and developed in the open on its GitHub site.


There are a few minor rough edges and feature requests I discovered during my initial trials (based on build v0.2.2). This shouldn’t detract from how useful I’m already finding this tool, but I thought I’d list them here in case anyone from the project is listening – yes, I know I should file these on their GitHub site 😉

  • Spell check underlining works, but there is no suggestions provided on right-click.
  • No recently opened files list.
  • I’d like to see tabbed documents.
  • Some preferences are only changeable via the config.json file.
  • Inserting a table via a menu is great (typing/inserting separators can be tedious in markdown), but the static menu options for this presently are limiting.
  • There’s a nice link to quickly view the page in your browser – it would be great to have some easily editable CSS options for its format (and the export function):
  • I’d like to see the “save as” option suggest “.md” as the file’s extension.
  • The help’s homepage link still points directly to the GitHub project, not their new website.
  • The “Copy as html” option is an awesome idea for quickly grabbing sections of text, but it seems to do a regular copy at the moment.
  • Word count would be a nice addition.
  • Support for PDF exporting via the Pandoc library would be great.
  • The ability to do full screen for distraction-free writing is super nice, and I like the default limit on characters per line, but this should probably be adjustable.
  • Support for Grammarly/Hemingway type functionality, or ability to seamlessly integrate with either/both would be great. Not sure if they have public APIs for this.

The intermission bell is now ringing

After quite the extended hiatus, I’m back on the blogging train. Over the last 18 months, I’ve been super occupied at Coho Data as their Technical Product Manager, participated (and trained for) some ultra trail running events, and generally been busy with life – unfortunately, as a result, I let my blog posting suffer. Anyway, enough excuses. Just to let you know that I intend to get back to churning out irregularly scheduled blogs with a few interesting projects that have been percolating on the back burner long enough.


Over the last couple of months, I’ve actually been making small tweaks to this site, such as a newer theme, done some optimization work, etc, and generally getting things ready. I’ve also been blogging a little over on Coho Data’s site as well:

During the break, I renewed my VMware certification status last summer by completing version 6 VCPs for both DCV (Data Center Virtualization) and NV (NSX). As soon as the v6 VCAP-DCV Admin exam (now called “Deploy”) is available I’ll be upgrading and grabbing myself a VCIX6 if I can – no doubt I’ll publish some articles about what I learn during that journey. As a Product Manger these days it can be tough to keep my hands-on skills relevant and not too dusty, but I think the VCAP-Admin exams are a good *forcing function*. I completed both the Design and Admin VCAP exams for v5, so I was glad when VMware relaxed the rules for VCIX and allowed candidates to elect to take either option for the upgrade (see the comments in this thread: Great to see a large company like VMware listening to their customers on this one.

Also, last week I was delighted (if not a little surprised) to be designated as a vExpert again. I feel personally that this was somewhat of an emeritus status for me, as during 2015 there wasn’t as much going on (at least publicly on this site) on the virtualization advocacy-side. Regardless, I’m delighted to stay on the list. I find access to the NFR licenses from VMware and their partners, and access to the VMworld sessions, invaluable to creating blog content and keeping skills honed in my home lab. I will endeavour to use the vExpert badge with greater gusto this year.

I may also write-up 1 or 2 running articles this year. This is not something I’ve done before, and obviously not related to my normal distribution audience, but it might prove to be an interesting diversion. Don’t get me wrong, I’m not a good runner. But I enjoy the challenge of these longer distance trots, and I know I like reading about the tribulations of the common-runner more, as they’re usually more entertaining and instructive than those written by the athletes that operate in a seemly different world.

I don’t want to promise on any projects yet, but I’ll have some more news on some of them shortly I hope.  The one area I spent quite a bit of time on last year, although nothing has surfaced on this site yet, is a refresh to my reference cards. I’m still super keen to get out a version 6 card and plan to use the power of GitHub to allow greater transparency and collaboration from now on. <aside>I saw Duncan’s announcement this morning, and was delighted that they’ve decided to share their deepdive book in a similarly open way – I’ll need to take a look at GitBook as an option for accepting contributions.</aside>

To conclude I wanting to quote something ethereal, noteworthy and markedly considered. So I leave you these important words:

VMworld 2014

It’s a popular thing to do at this time of year so I thought I’d grab your attention for a few minutes and tell you why I’m super excited for VMworld this year.

This year will be my sixth VMworld US conference. Every year I get a different perspective. Obviously the technologies and products change and evolve, and as the conference matures and grows, it broadens its scope. It’s easy to say things like “the talks just aren’t as technical as they used to be”, but I think that misses the real value of such a conference. For me the conference’s greatest reward has always been about the opportunity to meet and chat with my peers. The chance to discuss upcoming cool technologies, the design challenges we’re facing, what solutions we’re putting together, how the products and wider markets are changing, growing, diverging and consolidating. As ever I’m looking forward to talking to as many people as possible.


This year Scott Lowe and I will be back with a vSphere Design focused session. We’re looking at how the new software-defined approaches will impact, and can improve your vSphere design. As ever, Scott and I will do our best to get the discussion flowing in the room. This is always a fun session and I’m really looking forward to being there, talking about the design process and how things like SDN and SDS technologies are changing the landscape.

VMworld 2014 session details

There are still some seats left, so add it to you session builder line-up, come over, and join us. I was pretty humbled that Duncan Epping put this session on his must see list: Thank Duncan!


I’m also looking forward to Andy Warfield’s session (Coho’s CTO) which is a panel with luminaries from Tintri, Pure, Tegile and DataGravity. I know most of the guys on the panel, and it’ll be great to watch them discuss where the storage industry is at, and where it’s going. Submit your questions beforehand, head along and see who’s crystal ball provides the most clarity.

Andy Warfield's session






Solution Exchange hall

Another thing I’m excited about this year is the experience working in the solutions exchange “on booth duty”. This will be my first year at VMworld that I’ll be attending while working for a vendor. One of the great privileges of my job as a Technical Product Manager are the chances I get to chat to users about their infrastructure needs. There isn’t a single place on the planet that’s as densely-packed with as many fellow nerds, that I can chat to about the cool stuff we do at Coho. VMworld to me has always been about geeking out over awesomesauce technology. The difference this year is that I’m expected, nay employed, to gas with others who share the same passions about smoking-hot tech as me.

Seriously, don't go to this booth. Instead, come to ours - 835!
Seriously, don’t go to this booth. Instead, come to ours – 835

Come over to the Coho Data booth 835 and tell them Forbes sent you. Chances are I’ll be there and I can show you some of the new stuff we’ll be revealing at the show.

BTW, if you’re a vExpert, sign up for some extra goodies here:

New Coho Stuff

Which leads me on to the next thing I’m excited about at the show. Andy Warfield has already alluded to a few areas that Coho will be showcasing. We’ll be presenting some sweet previews of things like our OpenStack support and our vCenter Plugin that we’re in the process of building at Coho.

I think the really interesting bits are the early signs of where we’re taking Coho Data in the future. We already have a fascinating story around our ability to scale-out both performance and capacity, but as we look at some new hardware options in the booth you start to understand how different our offering is to other products in the vSphere market place. We’ll be able to scale performance and capacity independently from each other. We’re looking at providing all-flash storage devices that use our granular auto-tiering where SAS flash is the lower performance tier! Outrageous. Imagine being able to add 4U capacity behemoths chocked full of SATA disks totalling close to ½ PB of raw disk. All managed as one device. Like Lego bricks, you add the bits you need to fit your own environment. And when your needs change, you add only the bricks required. That’s part of the vision.

Fast, flexible, forever
No, not the American movie franchise about illegal street car racing. Coho Data’s storage.

The second bit to this is something were calling Cascade. Having a tremendously flexible storage system is cool-an’-all, but we know how complex it can be to figure out what storage is really needed. Particularly when you’re trying to predict a capacity management strategy for the next 5 years. Capacity itself is usually the easy bit, but understanding your performance needs is like milking unicorn tears. Unless you’re the bravest of technical architects, you’ll add in a fudge factor of muchos dolares. Cascade aims to figure this out for you. No need to wait until your users are hammering the service desk, complaining that their mega_corp_mission_critical_app is loading like molasses again, or their VDI desktop is now taking longer to boot up than it takes them to grab the first cup of morning joe – “who idea was it to replace my computer with this virtual thing?”. Yep, we’ve all heard it before. Cascade understands your actual workload and shows you what type of bricks you need to add. It can tell how much better your life would have been last week during that monthly billing cycle run that fell over just as you were about to tuck into that delicious double-double animal-style, if you were to add another shelf of this or that. That’s where we’re going and you’ll see previews of the hardware and the software at VMworld.

Don't let poor storage planning ruin that double double moment
Don’t let poor storage planning ruin that double double moment

Come say hi

When I’m not in the booth, I expect I’ll be flying around trying to meet as many folk as possible. There’s a reasonable chance I’ll be in the Hang Space by the bloggers table and the vBrownBag setup cranking out a blog post or catching up on twitter. Get in touch if you want to meet up.

When the conference doors are closed, I still hope to be soaking up as much as possible and talking technology whenever I can. Here’s my plan at the moment:

Saturday night

Community kickoff at Johnny Foley’s:



Hopefully I’ll be at the vBrownBags/VMunderground opening events in the afternoon:

Then it’s v0dgeball Charity Tournament where I’ll gallantly display my distinct lack of hand-eye coordination for the Coho team.

Last, but certainly not least, in the evening I’ll be hanging out at the VMunderground event (still tickets available!):


Monday night

I’m planning to start off socializing with my brethren from Tegile and SolidFire at their respective Monday night events (looks like I was too slow to grab a Nutanix ticket). I might compete with these guys during the day, but this is one big community where I know several friends that work for these companies. Fortunately VMworld is one of those special occasions where we can leave our nametags at the door and be respectful of each other.

Then off to the main event for the evening, the vFlipCup tournament and tweetup – should be fun.


Tuesday night

It’s always a crazy busy evening on the Tuesday. First, the vExpert/VCDX party to meet some community rockstars.
Then on to VMware’s Office of the CTO party in the vaults of the Old Mint Building. This event was hosted here last year and what an amazing place for a soiree. If you get invited you want to make sure you go.
After that I’ll pop over to meet my Veeam buddies (a new venue this year), and finally to the vBacon session down at the Ferry Building for some hard-earned bacon refreshment.


Wednesday night

I dunno. Is there a party on Wednesday night? 😉



Although I won’t be there I want to give a shout out to Crystal Lowe’s Spouseivities event. If your spouse, significant other, or buddy that’s dossing in your conference hotel room while you’re geeking it up during the day, is in town; then maybe they’d like to hang out with other hangers-on. It looks like another great line-up: