Spinnaker seems kinda’ complicated at first, but it’s not. To get it up and running, first install cask:
brew tap caskroom/cask
brew install brew-cask
Then redis and java:
brew install redis
brew cask install java
Download spinnaker from https://github.com/spinnaker/spinnaker.git (I dropped mine into ~/usr/local/build/spinnaker). From your spinnaker folder make a build directory and then run the script to update source:
~/usr/local/spinnaker/dev/refresh_source.sh –pull_origin –use_ssh –github_user default
From your build directory, fire it up:
Now run hal to see a list of versions:
hal version list
Then enable the version you want (e.g. 1.0.0):
hal config version edit –version 1.0.0
Then apply the version:
hal deploy apply
Then connect to fire up the UI:
hal deploy connect
Viola, now it’s just a GUI tool like anything else!
You know how when you buy apps at home, they show up on your computer at work, if you’re using the same iCloud account for the app store in both locations? Some companies want to disable that. To do so, send a ConfigDataInstall key into com.apple.softwareupdate, which can most easily be done with the defaults command:
This New Years Day, Learn The Jot Command
The jot command is one I haven’t used in awhile. But it’s still useful. Let’s take a look at a few of the things you can do with it. First, let’s just print lines into a new file called “century.txt” which we can do by running with the number of increments followed by the starting number, and then redirecting the output into the file name:
jot 100 1 > ~/Desktop/century.txt
Or to do integers instead, simply put the decimals:
jot 100 1.00 > ~/Desktop/century.txt
Or in descending order,
jot – 100 1 > ~/Desktop/century.txt
Now we could change the output to be just 50 to 100, by incrementing 50 (the first position) and starting at 50 (the second):
jot 50 50
The jot command is able to print sequential data, as we’ve seen. But we can also print random data, using the -r option. Following that option we have three important positions, the first is the number of iterations, but the next two are the lower and upper boundaries for the numbers, respectively. So in the below command we’ll grab 10 iterations (or ten random numbers) that are between 1 and 1000:
jot -r 10 1 1000
Now if we were to add a -c in there and use a and z as the upper and lower bounds, we’d get… letters (this time we’re just gonna’ ask for one letter)!
jot -r -c 1 a z
Something I find useful is just to shove random data into a file infinitely. And by useful I mean hopefully not left running overnight on my own computer (been there, done that). To do this, just use a 0 for the number of iterations:
jot -r -c 0
Something that is actually useful is the basic ASCII set:
jot -c 128 0
We can also append data to a word using -w. So let’s say we want to print the characters aa followed by a through z. In the below we’ll define that with -w and then we’ll list those two characters followed by %c which is where the character substitution goes and then the number of iterations followed by the lower bound:
jot -w aa%c 26 a
You can also do stuttering sequences, useful for the occasional tango dancer, so here we’ll do a 5/3 countdown:
jot – 100 0 -.5
Or we could create a one meg file by creating 1,024 bytes:
jot -b 0 1024 > onemegfile.txt
Oh wait, that file’s two megs. Get it? 😉
And running strings teaches you that you can’t bound random (a good lesson for the New Year). Anything you use jot for?
Before December 30th of 2004, krypted.com was a site with some flat files of notes I’d taken. During the Holiday break that year, I finally converted it into a blog. And now, with over 3,500 posts and netting around 10,000 unique visitors a day, it’s very different. It started out as just some musings and technical notes. Now, it’s… Well, some musings and technical notes.
Actually, back then I’d occasionally write about college football (Go Dawgs!), a lot more about Windows (um, Windows NT sometimes – ick!), and an increasing amount about macOS Server. These days I post less, but I write as much as I ever did. Just more are links to articles I’ve written for other places (Medium, Huffington Post, Inc.com, Jamf, etc). Also, there’s more that’s up on GitHub and contributions to projects at work and for various vendors we all know and love. And there’s more structure, as with the macOS Server guides. Overall, I still love to write, just my interests shift here and there.
Anyway, Happy Birthday, krypted.com!
And a Happy New Year to those who observe tomorrow as the end of the year!
Once upon a time, practically everyone who chatted on the internets used… AOL. Even people that didn’t pay for AOL. Because in a brilliant business move, AOL made their messaging platform free. And it brought a lot of people into instant, online communication. And it was way easier (and prettier) than the predecessors. But it was mostly on computers, not mobile devices. And with constant emoji being added, features being needed, and apps required to make it work on devices, it’s time for AIM to finally be no more.
Sunsetting products is never easy. Especially one as legendary as AIM. So why do it? Text messaging, Signal, Kik, WhatsApp, and even Snapchat replaced AIM. That’s an extremely fragmented industry and I don’t think it matches the image of a media company that the post-merger AOL-Yahoo (Oath) wants to be. But it is the end of an era.
Actually, it’s being shuttered because that era ended years and years ago. And someone finally decided to let the product go. And I’d say they did so with plenty of notice, and provided copious amounts of documentation on what users can do to retain their data. End-to-end a graceful product end of line, as AIM deserves.
If you happen to still use AIM, or want to go back and export some stuff, check out
It seems like every time I turn on the radio, there’s an ad for an email marketing automation tool. Constant Contact, Mailchimp, Emma, iContact and even Salesforce make it pretty easy for small and mid-size businesses to automate beautiful emails. Or for larger organizations, there are offerings like Marketo, Adobe Marketing Cloud and Eloqua.
But while the ads make it sound like these campaigns write themselves, they don’t.
Email marketing is a delicate business. On one hand, you don’t want to be an evil spammer. On the other, email is an efficient way to stay in touch with potential and existing customers.
I’ve been involved in many email campaigns through the years. Here’s what I’ve learned:
1. Choose an email automation tool that fits the size of your marketing team.
Many of the more robust products really need a staff person at the reins. If you can’t afford someone in that position, then turn your attention toward simpler software that requires little overhead.
There are so many things I wish people had told me when I was in school, or earlier in my career. Things that aren’t variable between organizations you work with, or even teams you work in. So I thought I’d jot a few down of these for software development teams (if only to prove that no, despite what product managers say, you aren’t crazy). So here goes:
A project will never have enough people to build all the features you want. Period.
Less features means fewer defects.
As a software project nears completion the amount of work remaining rises in proportion to how many hacks and shortcuts you took.