Transition from Windows to Mac

Advice for developers moving from Windows to Mac OS X.

TL;DR Going from Windows to Mac is very easy for a nodejs developer

who uses a distributed workflow already (github, web apps).

Before actually making the switch, I asked a friend of mine Jeff Whelpley to write a blog post about his recent experience making similar transition. Which he did. Thanks to Jeff, I had much easier time figuring out some steps.

Background

I am a senior software engineer at uTest, working mainly on front-end (think JavaScript), back-end (Python) and everything in between. Before this job I worked a lot in image processing and computer vision field (think C++, OpenCV and OpenGL). I use Windows both at home and at work, which is very typical for image processing jobs. Windows has a very wide variety of input and output devices supported, plus a lot of libraries written for these tasks.

My Windows machine is a sweet, sweet Samsung Series 9 ultra portable laptop. Light, fast, excellent battery life. Beautiful 1600x900 screen resolution, great build quality. It does have issues with trackpad, but to me these were minor. Overall, this laptop is like a cool puppy; it turns heads and strikes conversations.

I am transitioning to MacBook Pro, since everyone at uTest, including the developers is using Macs, and the IT department really wants to minimize the number of configurations. While I could do everything on my personal laptop, I would still prefer to use the company's hardware. Plus using Mac does makes it very easy to setup multiple Python environments.

Things that made the transition easier

  • My development tools are cross platform (nodejs mostly).
  • Using Console2 with bash shell inside (from Github tools) on Windows.
  • Storing my .files from my home directory in a public repo that I could pull to the new Mac.
    • I updated settings again so they work nicely with Mac, use branch mac.
  • Using iPhone and iPad personally. The user interfaces among the Apple products are similar, which makes it easy to find things.
  • Using web applications, like pivotaltracker, Google drive, gmail instead of platform specific local apps.

Baby steps

Install, login, domain, linking my user profile to Google services at work - all done by the IT department.

App called Finder is like Windows Explorer on steroids.

  • Enabled single tap = click on the trackpad (Settings icon / Trackpad)
  • Changed the background to something different from the night sky (Settings / Desktop & Screen Saver)
  • Installed Chrome and logged in (google.com/chrome, download for Mac, click on the downloads icon)
    • I had to guess that dragging Chrome icon into the Applications folder in the popup dialog is Apple's way of installing Chrome.
    • Extensions, bookmarks, websites are synced by Chrome.

I removed most of the items from the Dock row at the bottom, because my contacts, email, etc are all inside the Google web profile. Tap on each icon with two fingures at the same time, select Options | Remove from Dock. I even removed Safari from the Dock.

Nice touch: applications that are currently running have light dots underneath them in the Dock.

Hidden files

A lot of system files are not displayed inside the Finder by default. To display them:

defaults write com.apple.Finder AppleShowAllFiles YES

Restart Finder by clicking on the Apple icon in the top left corner | Force Quit | Finder and relaunch. Hidden files should now be visible, check your home folder.

Hint: you can quickly show your home folder by pressing Shift + Command + h inside Finder.

Common applications

  • We use Skype at uTest to communicate, the install was very simple.
  • installed git by running in the terminal command git --version which installed xcode-select.
  • Installed git tools from github. The install included a wizard, where I logged in, created SSH key and installed command line tools. If only I could see how to open the terminal.
  • Sublime Text 3 is super fast text editor, its installation was very straightforward.
    • To run it from command line I created a symbolic link in the /usr/local/bin folder pointing at the installed application sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl. From now on, inside the Terminal I can just type subl to open Sublime.
  • I blog using a combination of Dropbox + calepin.co, the Dropbox installation is very simple, including a short tour showing where the folder and the quick access button is.
    • I keep my blog entries in the Dropbox / Apps / Calepin folder.
    • I also have a git repo in this folder, remoted to private bitbucket repo, just as a precaution.

update after blogging for an year I moved blog to github gh-pages at glebbahmutov.com. See 1 year of blogging.

Keyboard shortcuts

I do miss the dedicated Home / End / Page Up / Page Down buttons Windows laptops have.

  • Fn + Down arrow = Page Down
  • Fn + Up arrow = Pade Up

I had to guess the meaning of the weird key symbols, because only the Command key actually has an icon, the rest - just guess.

I am ok using Command key instead of Control key, but it took some time to figure out how to navigate quickly inside the text documents.

  • Command + (left | right) arrow moves to the (start | end) of the line.
  • Option + (left | right) arrow moves to the (start | end) of the word.
  • Text selections can be made by holding Shift key.
  • To quickly switch the previous application use Command + Tab

I have yet to figure out how to move the selected text up or down a line using shortcuts.

Application / tab shortcuts

  • Command + tab switches between the running applications
  • Control + tab switches between the tabs inside an application (Chrome)
  • Command + Shift + [ or ] changes the tab in the current application

Window position shortcuts

Almost every application can be viewed in fullscreen mode (Control + Command + F).

I used quick application window position and resize shortcuts a lot (Fn + left | right). After doing some internet searching, I settled on SizeUp as a window manager. Now I can use Control + Option + Command + (left|right) to move and resize an application window to take left|right half of the screen. I am not 100% happy with this approach yet, because the positioning shortcuts have no effect when the application is in fullscreen mode. SizeUp can change the application to occupy the entire client desktop area, using Control + Option + Command + M, which is excellent shortcut.

Mac App store and other apps

I do agree with Jeff that every Windows developer should try installing an application from Mac app store. Once they stop sobbing, ask them how many steps it took. One. Just beautiful, and very similar to the iOS app store.

I installed Alfred, and I do like using it to search for things, which goes back a couple of years when I used Google desktop search on Windows (I believe it has been discontinued). There is also an awesome collection of Alfred extensions adding nodejs, development and github shortcuts to the search.

  • 1Password for all my passwords, keeping multiple vaults (one for the company stuff, another one for personal items, another one for shared family items)
  • I use Clipy to have multiple clipboard items.
  • I used spectacle to move windows using keyboard shortcuts, now I use Rectangle
  • I use Dropbox to sync my notes and slides

Terminal setup and first git call.

To change the computer name use sudo scutil --set HostName <new name>

Initially the Terminal application is not part of the Dock. To add it, first find it, for example using Spotlight. After starting it once, it will be displayed in the Dock. The default terminal window is small with white background / black font. Not optimal, but works. Other color schemes can be selected, if you want to, and they will be used for new terminal windows.

Having standard copy / cut / paste commands is super sweet.

To initialize my terminal settings (bash prompt, aliases, git shortcuts) to what I am used to on Windows:

cd ~
git init
git remote add github https://github.com/bahmutov/dot-files.git
git pull github master

The bash settings worked almost perfectly, except for some minor unary operator syntax errors. Git aliases worked right away, but I had to change the text editor to Sublime.

Ignoring stupid Icon files

Often Finder places Icon file in each folder, which is hard to tell git to ignore from command line. I could not get the .gitignore solution to work properly, see open question.

Developer tools

Install Brew

brew provides super easy command line package manager. Seems lots of tools can be installed through brew without need for compiling, for example to install wget:

brew install wget

That's it.

The installation requires single ruby command execution, plus installing Apple's command line tools. brew comes with a diagnostic command brew doctor that you should run first to make sure all environment settings (like PATH) are set properly. Run it and fix all (if any) issues until you get the message Your system is ready to brew.

Install NVM

To install and maintain Node versions, I recommend nvm

CLI utilities

I commonly install

1
2
# https://httpie.io/
$ brew install httpie

Video recording

Install OBS and configure the display capture, microphone, camera (with green screen). To play videos, use VLC. To edit videos and remove silences, I use Recut. For converting videos to different formats, use ffmpeg, basic guide.

To capture the screen and create Gif and other videos, I use Kap.

Tip: to see video file information ffmpeg -i <filename> -hide_banner as describe here

Fonts

On Mac I often use the following fonts (install by dragging TTF files into "Font Book" Mac application)

Things I have not figured out yet

Any help in figuring out how to do these steps is welcome

  • Should I look into boxen? No
  • How to ignore Icon files, still a problem, even after trying this solution

See also