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 dot 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.
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 commandgit --version
which installedxcode-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 typesubl
to open Sublime.
- To run it from command line I created a symbolic link in the /usr/local/bin folder pointing
at the installed application
- 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.
Show file extensions in Finder
Following the advice:
- Finder / Settings / Advanced
- "Show all filename extensions"
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 | # https://httpie.io/ |
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