Last Thursday was rough. If I were to explain everything that went down both with my computer and my personal life, you’d think I was making the whole thing up.
It’d be like the adult equivalent of “my dog ate [the last month of] my homework.” Or something like that.
First, as far as my personal life is concerned, this has nothing to do with the well-being of my family. Just a local debacle of waiting two hours during the workday to get something handled. Irrelevant other than, you know, taking a hefty chunk out of a workday.
Secondly, the computer stuff can all be summed up easily: There was a completely pathetic series of unfortunate events that led to its demise. Essentially, “I killed the car.”
So I had to order a replacement in short order (which is not something I wanted to do), had to have to delivered the next day before noon (which is not something I like to pay for) nor is it something that I had planned as a business expense for at least another year or two.
But here we are.
And this leads me to write this post: It’s a walkthrough of the process I follow and of the applications I install whenever setting up a new machine and how I configure it.
It’s not going to be incredibly detailed, but it’s a starting place for if this ever happens again or for any developer looking to set up a new machine or repurpose an existing machine.
MacBook Pro For WordPress Development
I’ve thought about how to group all of the applications together, how to group my setup together, and how to group the miscellaneous setup together in a way that seems to flow well.
And I think it’s easiest just to list out everything I use, link to things where I can, and then provide the details on the various steps I use. So that’s what I’ve done and what you can expect.
Here we go.
After running all of the necessary updates and restarting the machine, I begin going through and installing and configuring all of my tools.
The following list is a comprehensive list of everything I install. Some of them are free applications, some of them are not. I’ve tried to give a short description of what each does, but your mileage may vary should you choose to install any or all of them.
- Atom. Though I used to use this as a general IDE, I now use it as a text editor, markdown editor, and so on.
- Bartender 3. This is my favorite application for cleaning up my Mac menu bar. It helps to keep distractions to a minimum while making sure I still have access to all of the apps I need quickly.
- Better Rename 9. I’m compulsive about how I organize and back up my photos and videos so I use this app to use the media’s EXIF data to organize it based on the timestamp.
- CardHop. This is a newer application to my arsenal (at the time of this post, at least) and it’s simply used because I get easily frustrated with Apple’s Contacts app and because I think Flexibits writes good software.
- CleanMyMac. MacPaw is another company that produces good software. I run this at the end of each week to make sure I’m getting rid of a lot of junk (generally various cache files from various applications) that has accrued over the week. Further, it helps in the uninstallation process if you’ve installed something and you’re looking to fully remove it.
- CodeKit. I’ve written about this app in a number of posts. I still recommend it, but it depends on the project. I also use tools like Gulp and various packages (which I cover later in this post).
- Dropbox. This is for general file syncing between applications (like Transmit) and sharing files with designers and family and friends.
- Droplr. This has become my de-facto application for sharing images, screencasts, and other media with peers. It’s fast, provides useful stats, is minimal, and is worth the yearly subscription.
- Evernote. I take a lot of notes using my iPad and Notability and no other app yet has the handwriting recognition search than Evernote.
- ExifPurge. This is useful for whenever you want to share media with others but I don’t want them to have the ability to extract data on where or when the media was shot.
- Fantastical. It’s the best calendar application I’ve used. I’ve tried to break up with it before, but I keep coming back. It’s yet another Flexibits product.
- Gemini. I use this in conjunction with Better Rename 9 (which I covered above). In short, it removes any duplicates). Though I don’t often have many, it’s nice to make sure I’m removing any that I do have before storing them in external storage.
- Handbrake. Though I’m a fan of Super265 (which I meantion later in this article), sometimes I’m less concerned about filesize than I am about encoding into a different codec. And when that’s the case, Handbrake is what I use.
- Homebrew. I’ve not always used this, but once I started, it became harder not to use it especially when it relates to development tools (which I’ll cover below). It’s a package manager but I find it extremely useful when working with development-related tools.
- ImageOptim. Removes metadata, saves space, compressing images, and does so in a lossless way. Great for anyone who uses images in their blog posts, documents, or simply shares lots of images with others who don’t have a lot of bandwidth.
- Kaleidoscope. Every developer working with a team or working on open source software needs a good diff tool. Some prefer the command-line, others prefer a GUI. I’m in the latter camp and this has always been my favorite application.
- Mac DVD Ripper. If you’ve got DVDs you’re looking to backup or you have kids and you’re looking to load up an iPad with videos, this application makes it as easy as possible: Select which part of the DVD to rip and then let it do its thing.
- Mac VideoRipper Pro. This is the easiest ways to download videos from the web from sources like YouTube. It’s great for when you want to watch talks, presentations, or videos offline.
- Postman. If you work with any APIs, especially REST APIs, Postman is solid at helping you test your API or someone else’s before trying to integrate calls to it within your application.
- ScreenFlow. This is the best app for whenever you have to do some serious high-level screencasting.
- Sequel Pro. This is my preferred database front-end.
- Slack. At this point, I don’t think this app needs any type of description. It’s how my team and I keep in touch with one another, integrate our services, and generally get work done.
- Skitch. This is good for quickly annotating images, though Droplr isn’t bad at this either. It depends on what you need, really, but I still recommend it for certain use cases.
- Spotify. Though we have an Apple Music membership as well, this is my choice app for streaming services. Its discover features and it’s ability to generate playlists on my listening habits are what’s made it hard to quit. So I don’t.
- Spotify Notifications. A solid application for giving notifications about what song is playing along with its album art, etc. It’s a missing feature of Spotify and does a good job bringing it full circle to things iTunes offers.
- Super265. Though I’m a fan of Handbrake as well, I’ve found that this particular app – and it’s newer, to be sure – does a stellar job of taking a video and compressing it (sometimes via 50%) with lossless quality.
- Things. Hands-down, my favorite “get things done” app and it’s integration with Apple’s Reminders and Siri along with iOS syncing make it all the better.
- Tower. In the last year or so, I’ve gotten more and more comfortable with Git on the command-line, but there are still projects I’m working on that I’ve used Tower since the initial commit. It’s my preferred Git GUI.
- Transmit. My preferred S/FTP client.
- TweetBot. My preferred Twitter client (and it’s integration with Pocket and Droplr make it all the better, too) on both macOS and iOS.
- uTorrent. If you have to download anything via torrents, this is the client I recommend.
- Versions. If you need a solid Subversion GUI (such as if you’re keeping up with the bleeding edge of WordPress), I really like this. Cornerstone is a nice alternative, but I don’t use it as much as I used to and I don’t use Subversion for much so Versions simplicity is what has won me over.
- VLC. Every now and then there are certain video files in the format of, say, mkv that I don’t want to bother to convert. This is a fantastic open source video player (for a variety of formats, too).
- Windscribe. This is my favorite macOS and iOS tool for using a VPN when browsing the web. Its price is fair and the apps (and browser extension) are solid.
- Xcode. Apple’s proprietary development platform that’s also needed for a number of things to run that you’ll see later in this post.
I try to keep things lean, but there are reasons that I use the applications that I do. And despite my attempts to be as secure as possible, there are some applications that I use for reasons other than “just storing stuff.”
So, you know, the usual disclaimer about being careful what you store and what you use to store it. Be smart about how you’re saving sensitive information.
The following list of tools isn’t necessarily exhaustive. That is, some projects require certain packages that simply don’t make sense to list here.
Instead, this is the general set of tools I use for my development environment. It covers everything from what font I prefer to the IDE of my choice and everything in between.
- Fira Code. This is my favorite font for any IDE or text editor.
- Material Theme. This is completely subjective (as are most things in this list) but I’ve found this to be the theme I’ve stuck with the longest when using PhpStorm.
- PHP. The runtime that’s needed for WordPress and general PHP development. I’ll have configuration instructions for this (and other tools) later in this document as to how to install it using Homebrew to make managing the package easier.
- Composer. If you’re working with various dependencies in your projects, then you should be using Composer to manage those packages.
- WP-CLI. This is a fantastic command-line interface for WordPress that’s under some seriously fantastic development that makes working with WordPress at the command-line level not only possible but easy, too.
- PHPUnit. If you’re going to be writing unit tests for your project, then this is the framework I recommend.
- PHP Code Sniffer. This is the library to make sure your code is following any of the standards I list in the next item. It makes sure that you’re following proper guidelines and writing things properly.
- PHP Coding Standards. There are two general types of coding standards that you’re likely to use (if you’re reading this blog) and that’s either the PSR or WPCS. Depending on which one you use will depend on how you install them. Regardless, each requires PHP Code Sniffer to be installed first.
- Valet. I’ve written about other out-of-the-box tools like MAMP in other posts, but I’ve been using Valet for the better half of 2017 and it really, truly “just works.” It’s really easy to work with and makes setting up new sites and projects a cinch.
- Xdebug. If you’re writing server-side code (and if you’re writing PHP, you are), then there’s more to debugging than echo and var_dump. Enter Xdebug.
Once you have all of this installed, there is still configuration that needs to happen. I’ll cover that, as well.
Configuring My Development Tools
As mentioned earlier, many of the packages that I install at this point are done via Homebrew so this assumes you have Homebrew installed.
So the first step will be installing Homebrew. Everything after that is exactly what’s needed to enter into your terminal to install it and nothing more.
If there are any notes around a particular package, I’ll incorporate it into the associated gist.
A Note About Homebrew
The reason I recommend using a package manager is that it makes it much, much easier to install and uninstall particular packages as you need them.
It makes things more, ahem, manageable. And it keeps things a bit cleaner on your system (for those who get [oddly] compulsive about that stuff).
1. Installing Homebrew
6. PHP Code Sniffer
Once Valet is installed, you may need to add it to your path (which is what you see starting on the second line. You then officially install it as you can see on the third line.
If you’re using Valet, then you’re also going to need to add a few lines of configuration so you can properly use Xdebug with Valet in conjunction with PhpStorm.
To do that, add the following lines to /usr/local/etc/php/7.0/conf.d/ext-xdebug.ini:
Of course, your idekey and configuration file location will vary based on what version of PHP you’ve installed and what IDE you’re using.
I’ve included just a few of the browser extensions I use below. These are primarily for development purposes or to cut the crap out of the web that I can’t stand seeing whenever I’m browsing it:
- Facebook Ad Blocker. I don’t use Facebook much, but when I do I want a little distraction as possible.
- Awesome Screenshot. For when you need to take a shot of something to send to someone else, of course. Works well with Droplr.
- Buffer. I like to buffer a lot of my tweets and this makes it easy to do so.
- ColorZilla. When you’re grabbing colors for an existing image, design, or theme, this helps to get the RGB and hex values.
- Ghostery. People have mixed feelings about this (and that’s fine with me), but this is to stop advertising and tracking.
- Grammarly. To make sure that I’m actually doing a decent job of constructing sentences and writing words.
- Merge Windows. First, we had too many windows, so we introduced tab browsing. Now we just have too many windows with too many tabs. This merges all of the windows into a single window.
- Remove W3Schools. Removes W3Schools from Google search results so you can get better results.
- Tab Sorter. When your tabs get out of control between Asana, Trello, Pocket, Reddit, and so on, this helps to organize them by their type.
- Throttle. This works in conjunction with the Throttle web service to create throwaway email addresses (that you can still use to read email) for services with which you don’t necessarily want to keep up.
- Toby for Chrome. Great for saving and groups tab sessions (if you opt not to use Tab Sorter) so you can come back to work on whatever it is you were doing when you stepped away, restarted, or whatever.
- Xdebug Helper. Works in conjunction with Xdebug to help debug, profile, and trace the performance and code in a local web application.
There are other extensions I use for applications like 1Password and Pocket but they don’t seem to be as relevant so I’ve opted to exclude those especially because those services are less development-oriented.
Why are my browser extensions last? I know, it seems kind of silly – wouldn’t they be part of, say, my standard set of applications?
Simply put, there are a few that are more development-related, so I wanted them to come after I’d covered everything else.
On another note, there are times where I have to change things around from using, say, PHP7 to PHP5.6 depending on a project. There are also times where I use other libraries like PHPMD, etc., that I haven’t covered here because they are project-specific tools.
But from setting up my system, this is the general overview. So now I have a documented reference of what I need to install from the Mac App Store, from various places around the web, the commands I need to run, and how I can get a machine up and restored quickly should something ever break again.
With all of that said, I’m wondering if it’s not worth buying a cheap backup machine just in case.
But I dunno. That’s another post.
If you’re looking for yet another post to follow that’s similar though more details with regard to some tooling, I recommend checking out Carl Alexander’s post.