#Initial Sensible [ well, for software developers ] Mac Defaults
———————————————————————————————————————————————————————————————
###Mandatory:
####[ Make an obligatory code path!! ] !!
mkdir ~/code
###Recommended:
[ Organize your Favorites in the Finder’s sidebar ]
- Apple Guide
- Organize according to your own current personal tastes*
- *My preference is to sort Finder Favorites in descending order based on the folders I already am or am planning on accessing most frequently
####Setting zsh as your default shell [Or, “The Radical Beginnings of an Extremely Superior Terminal Experience”]
- ####It’s actually quite easy to join the master race! Visit this nice Github repo to see!
- Here’s a useful site — for typing in commands and getting back detailed explanations of what they do, for various UNIX shell programs
- Slide presentation on the benefits of using zsh over other options
###Optional:
[ Show all hidden files — note: this might be annoying for you on the Desktop ]
defaults write com.apple.finder AppleShowAllFiles YES
[ Disable key press hold/Enable key press repetition — note: kkkkkkkkkkkkkeeeeeennnnnyyyyyyyy rockkkkkkkssssssssssssss!!!!! andddddddd so do youuuuuuuu!!!! (it may be annoying to read, but that would have been really annoying to type without this keyboard modification) ]
defaults write -g ApplePressAndHoldEnabled -bool false
##Setup SSH [ secure, passwordless identification and connection protocol ] ——————————————————————————————————————————————
- First, learn about SSH if you don’t know what it is yet, because chances are you will need to use it in some way, at some point in your development career.
####[ Make a default path in your Home folder to store SSH keys ]
mkdir ~/.ssh
cd ~/.ssh
#####[ Create a default local public SSH key pair (of the RSA type) ]
- Using ssh-keygen , which comes pre-installed on all Macs
ssh-keygen -t rsa
[ Learn how to use the command line program ssh
and SSH in general ]
-
Documentation
- Type
man ssh
to read the manual within your terminal, orrrr… - …. View the manual pages online on Apple’s site
- Type
-
Guides
#Git Setup
###[ Install Git ]
- Easy Mode: Using Homebrew
- run
brew install git
in the command line. that’s it.
- run
- Takes a bit more time Mode: Using native installer package
####[ Init your Git configuration with some sensible (and open-source) defaults ]
run ```curl -O https://raw.githubusercontent.com/nicolashery/mac-dev-setup/master/.gitconfig```
####[ Setup personal Git configuration ]
git config --global user.name “Your Name”
git config --global user.email “youremail@domain.com”
git config --global credential.helper osxkeychain
- Defer to the Vim section in nicolashery’s mac-dev-setup repo for now*
[ Install the recommended package manager ]
sudo easy_install pip
sudo pip install --upgrade distribute
sudo pip install --upgrade pip
[ Install a better interactive Python interpreter console ]
sudo pip install ipython[zmq,qtconsole,notebook,test]
[ Make path to store virtual environments in ] mkdir ~/envs
[ Install virtuenv module globally to create virtual Python environments ] sudo pip install virtualenv
[ Install the Heroku Toolbelt ]
[ Setup SSH Keys support ]
heroku keys:add
[ Install the Java Development Kit (a.k.a. JDK) ]
-
Type
java
in the terminal to check and see if you have any form of JDK installed-
If you don’t have a JDK installed
- OS X will show a pop-up dialog informing you that you need to install a JDK in order to use this
java
command-line tool - It should have a More Info … option. Click this to go to the download page for the JDK …. orrrr….
- … Take this shortcut to the JDK Download page — Valid as of January 15, 2015 ….ORRRR….
- … Save this shortcut to the JDK v8.25 download link — Valid as of January 15, 2015
- OS X will show a pop-up dialog informing you that you need to install a JDK in order to use this
-
If you do have a JDK installed, and you know it’s the official JDK, but you want to install an open-source version of the JDK, see below
-
If you want to use an open-source Java Development Kit
-
-
Run this in the terminal to list the JDK distributions you have installed on your Mac
ls /System/Library/Frameworks/JavaVM.framework/Versions
-
Run either of these in the terminal to check the version of
java
your environment is currently usingjava -version
javac -version
Applications = * [ Hands Off - Free version works fully for a set time period, can re-enable](https://www.oneperiodic.com/products/handsoff/) — [ protect your Mac’s internet and disk access ] * I prefer this over the more popular and well-known *Little Snitch*, because *Hands Off* also helps protect against file tampering.
————
-
iTerm 2 — [ lightyears ahead of the default Mac Terminal ]
-
Homebrew — [ install tailored Mac ports of UNIX software ]
- Also install Homebrew Cask to use Homebrew to manage native Mac apps in addition to UNIX ports
- Install with
brew cask install google-chrome
- Homepage
- Install with
- Also install Homebrew Cask to use Homebrew to manage native Mac apps in addition to UNIX ports
- Firefox Developer Edition [ Beta Firefox geared specifically toward web developers ]
- Or Chrome Canary, if that’s your style, smh
Virtualization [or, How to Disgrace Your Mac and Shame Your Family and Friends by Running Operating Systems That Aren’t the OS X Master Race
-
Bootcamp [ for Windows ]
-
VirtualBox [ for everything else, including GNU/Linux distributions ]
- Sequel Pro — [ for SQL, freely available ]
- Xcode - Free — [ the industry standard IDE for native iOS and Mac software development ]
- Main languages are Objective-C and Swift
- Plus good support for C/C++ and more — [ thanks to Clang/LLVM, the whole toolset now even supports most C++11 and C++14 features ]
- Great Git integration (though I do still prefer to use the command line [ I do whenever I can ], this is still nice to have )
- Also install the Command Line Tools for extra brownie points
- To install, simply run this in your terminal —
xcode-select --install
- I mean, you’ll need them to install many Homebrew packages anyways..Save yourself some frustration by getting it out the way now. :)
- To install, simply run this in your terminal —
- Registering as an iOS and Mac developer both cost a separate $99/year
- Allows you to publish apps on each respective App Stores
- Apple provides free Beta releases for registered developers
- This includes betas access for — [ iOS, OS X, Xcode and Safari ]
- Extend Xcode with Alcatraz, an easily installable (just paste 1 command in the terminal) extension
- Built-in plugin/theme management that fits right into Xcode
- Access in the standard menu — [ Window -> Package Manager ]
- Shortcut — [ Shift + Command + 9 ]
-
*Subjective Opinion:
As a registered developer who is currently using Xcode 6.2 beta 4, I can say that Xcode has vastly improved since, say, the dreaded days of Xcode 4-5.
It’s grown into quite a respectable IDE that I’ve come to really enjoy working with on a daily basis. It’s especially nice when using Swift as your main language. Swift is technically still a beta language, and It has its quirks, but Apple is quickly fixing them, and I highly suggest you learn Swift and use it for all new, non-legacy iOS/Mac development. It’s more than developed enough to be production-ready for most apps’ cases, IMHO. It’s only the icing on the cake that it’s exponentially more pleasurable to use and look at, and much quicker to develop in, than Objective-C.
- Main languages are Objective-C and Swift
-
Android Studio - Free, Open-Source — [ open-source Android Java IDE ]
-
Also, *Google themselves now recommend using Android Studio for all modern Android development
-
Git and Github integration!!
-
See Section on Java Development Environment Setup to prepare your Mac for Android Java development
-
*Subjective Opinion:
Haven’t hacked Android in a bit, ***but even when I was using Android Studio in pre-release it absolutely crapped all over Eclipse.
-
-
Sublime Text - Free w/ license bugging — [ code editor for pretty much everything else ]
- Free version gives pretty much full-featured access to stable versions, just bugs you to pay for a license after so many amounts of file saves
- Full license gives you access to development versions, but they honestly aren’t released that often * Technically, mainly a code editor, but the massive amount of plugins available for it allow you to easily transform it into a fully-functional custom-tailored IDE
- Can code your own plugins in Python
- Install Package Control for plugin discovery and management
- Create a symbolic link to the automatically installed supplementary shell program
subl
….- ….which can be used to quickly open Sublime sessions with a folder you’re in inside a terminal
ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/sublime
- This creates the link to be called from your command line with
sublime
…
….Rename this word [at the end in theln
call] to whatever you’d like in order to customize this.
*Subjective Opinion: It may be longer, but I prefer to typesublime
instead ofsubl
purely for the sake of explicitness.
- This creates the link to be called from your command line with
- * [ Open current directory in Sublime Text ] — ```sublime .``` * [ *Stupid Example:* Opening my code folder in Sublime Text ] — ```subl ~/code```
####Homebrew Packages [ All Free ] ———————————————————
git
[ industry-standard version control system ]- Is now used all across the software development field
- It is obligatory and commonly expected of a modern software developer to know how to use at least the basic commands, so….
- …Git gud. — [official book]
- Fun Fact: It’s the underlying technology and driving force behind Github (which you’re most likely reading this on right now) ]
- Can be used to manage version control for much more than software
- Example: The new hotnesses on Github seem to be ”awesome-“ compilations — [ curated meta-lists of resources for specific topics ]
vim --override-system-vi
[ installs fresher vim release ]- The
—-override
flag does what you might think — [ it overrides the out of date default Vim distribution Apple provides with OS X ]
- The
-
wget
[ download files from terminal ] -
tmux
[ manage terminal sessions ( a.k.a. multiplexer ) ]
ffmpeg
[ video processing power house ]- to add libfaac support, run
brew reinstall ffmpeg --with-faac
- to add libfaac support, run
gifsicle
[ gif processing power house ]
cask
[ manage native Mac app installations/removals in the terminal, through a Homebrew extension ]
-
Python Distributions
python3
[it’s newer than Python 2]pypy
[it’s faster than Python 3]
- Essential Frameworks
TODO: Move the recommended frameworks/libs to more sensible sections; they don’t belong here! (holy shit I’m tired) — or develop a visual indicator for Homebrew packages so they can be under any heading
-
Web Development
-
Django, a powerhouse web framework
- Provides most the bells and whistles and has its own set of rules and ways it thinks things should be done
- Better for fuller feature-set for content-based websites
- More jobs available for it
- Disclaimer: This is the first web framework I truly learned and became proficient in
- Tons of freelance projects completed and delivered on time [or, if not, close enough at the very least] using it and, thus, tons of money made with it
- Also see my old [ remember this key fact before you laugh at any line of code or bad decision in it; I was like 15 years old and my skillset, practices and general proficiencies as a good engineer have since grown much, much higher in quality ! ] open-source media platform (began as Youtube clone) hosted right here on Github . It was my first relatively sizable Django project, and my first web application project that was more complex than the usual traditionally beginner-friendly blogs, todo lists, one-off script wrappers and Twitter clone implementations in general. It taught me TONS about web development, and I have the utmost respect for its developers and everyone in the community contributing plugins and learning resources. HOWEVER: These days I prefer to use Flask for most tasks.
-
Flask, a minimalist web framework
- My go-to web framework when a specific language isn’t a requirement
- Not even just because Python is my favorite lang [and even then, Swift is swiftly becoming my new favorite!]
- Because it objectively sets the bar of how a modern minimalist web framework should look and act
- Provides a nice core API along with an easily extensible architecture;
- Many plugins that solve most common web development problems are now available for you to pick, choose and freely combine in your application’s architecture, interchangeably [dat decoupling]
- Along with Blueprints, the extensibility of the plug-in system essentially allows you to ultimately form your own specialized, domain-specific web frameworks, optimized for each of your projects’ specific intents and purposes.
This is a bit more difficult to pull off in Django (at least at the core level)
- Better-suited and much quicker for developing APIs and web services
- Easier to deploy
- My go-to web framework when a specific language isn’t a requirement
-
-
GUI Toolkits
- PyQt
- Homebrew package:
pyqt
- Necessary for building some other Homebrew packages
- Homebrew package:
- Pyside
- I highly prefer using Pyside over the original PyQt module for developing GUIs in Python
- More lenient licensing than PyQt policy, especially important for commercial applications [ See comparison ]
- They’re mostly interchangeable other than that; here is a list of more differences (note that PySide is limited to PyQt API 2, if that matters for you)
- I highly prefer using Pyside over the original PyQt module for developing GUIs in Python
- PyQt
-
Automation
- selenium [ web testing (see: automation, scraping) ]
- If I can get away with only using Python, I love and highly prefer to use splinter a lot more — especially in my own projects
- Cross-platform, higher-level wrapper around selenium’s core functionality
- It’s lesser-known and, by extension, used less and has much less documentation and online support available for it, buttttt—
- It benefits from a much more respectably Pythonic interface which helps in making it simpler to use, more comfortable to learn for experienced Python developers and
MUCH
quicker for development (think C relative to Python, C being selenium and Python being splinter)
- It benefits from a much more respectably Pythonic interface which helps in making it simpler to use, more comfortable to learn for experienced Python developers and
- selenium and its multi-platform library distributions are still used more often across the industry (since more people know it, of course) — so if you want better chance at jobs involving web testing and/or automation, you’ll still be learning selenium
- It’s lesser-known and, by extension, used less and has much less documentation and online support available for it, buttttt—
- Cross-platform, higher-level wrapper around selenium’s core functionality
-
-
Node.js Distributions
-
- Installing the core
node
package also installsnpm
, the default package manager for Node.js
- Installing the core
-
-
Essential Tooling
nvm
— [ Node.js version management script ]
-
Essential Frameworks
TODO: Move the recommended frameworks/libs to more sensible sections; they don’t belong here!
- Web Development
- Meteor
- I used this when it first came out, before it was the hot new Javascript framework of the month(s), and while it was nice back then too it really has grown up into quite the powerhouse node.js based web framework
- Geared towards real-time web applications
- Derby
- Similar to Meteor in that it’s meant for real-time apps, but I like Meteor much better ;)
- Express
- Minimalist node.js framework — gets out your way but provides the basics necessary for modern most web applications
- Still in heavy use in the industry
- Meteor
- Web Development
-
Tooling
-
rbenv
[virtualenv, but for Ruby] -
bundler
[gem manager for ruby]
-
-
Web Development
-
[
mongo
[ MongoDB: open-source document-based database, the leading NoSQL db ] ](http://www.mongodb.org/) -
redis
[ open-source key-value cache and store (or data structure server) ]
-
xquartz
[ open-source Mac port of X.Org X Window System found on GNU/Linux ] -
the_silver_searcher
[ search files on your drive in the terminal, like ack, but faster ]
- ClipMenu 1.0.0a1 alpha - Free — [ awesome clipboard management tool ]
- Access extensive clipboard history
- Image and code previews ( code previews have syntax highlighting )
- Caffeine - Free — [ keeps your Mac awake ]
- Unobtrusive; simply sits in menubar
- Flux - Free — [ changes screen warmth based on the time of day ]
- Bartender - Paid w/ free trial — [ Organizes menubar app icons (can hide them for cleaner look) ]
-
General
- Alfred - Free w/ paid upgrade — [ swiss army knife style Mac productivity shortcut beast ]
-
Paid “Powerpack” upgrade provides even more features and extensions named “Workflows”
-
Subjective Note: I mainly just use it for quickly emptying the Trash since Yosemite brought a Spotlight pop-up that can search files and the web in much the same way Alfred does, but natively
-
- Alfred - Free w/ paid upgrade — [ swiss army knife style Mac productivity shortcut beast ]
-
Mail
- Mailbox - Free — [ awesomely productive Gmail management ]
- Can sort your mail for you in smart and actually useful ways
-
Subjective Opinion: Could really use support for more than just Gmail
- Mailbox - Free — [ awesomely productive Gmail management ]
- Cloud Notes
- Simplenote - Free — [ Like the name says, it’s simple (much more-so than Evernote) ]
- Evernote - Free w/ premium subscription — Cloud notes powerhouse
- Supports tons of media options and scanning from app
- More widely supported and integrated into 3rd party applications, if that matters to you
- Markdown Editors
- Markdown - Free — [ free Markdown editor with live preview pane ]
- Mou Beta - Free — [ like above, is a bit better when it actually works and isn’t crashing ]
-
Password Managers
- 1Password - Free w/ paid desktop licenses — [ beautiful and functional cross-platform password management (including iOS), if you’re into that sort of thing ]
- Lastpass — [ password manager with apps and extensions for most platforms ]
-
Lastpass works, but less attractively so than 1Password. I’m still using it alongside 1Password for purely legacy reasons, though I do plan on transferring all my logins to 1Password
- Has mobile apps, but you gotta pay for a premium subscription ($11.99 / year) to use them
-
- Ambient Noise [ for when you want to listen to something other than music while programming ]
- Sleep Pillow - Free — [ nice presets ]
- Relax Melodies - Free w/ IAP — [ more customizable ]
- Misc
- CheatSheet - Free — [quick shortcut to pull up guide of all shortcuts along with their associated keyboard combinations
- Works for any Mac app you have open
- CheatSheet - Free — [quick shortcut to pull up guide of all shortcuts along with their associated keyboard combinations
-
Music
- Spotify - Free w/ premium subscriptions — [ awesome streaming music player ]
- HUGE catalog, radio features, playlists and tons of plugins for Desktop (called apps)
- Now has a neat built-in remote feature for controlling the Desktop apps from the Mobile apps
-
*Protip: “Save” feature [ free for all users ] can technically be used to organize a cloud-based iTunes-like library
-
*Protip: Download feature [ requires a Premium subscription ($9.99 / month) ] can be used for actually saving songs to local drive, on both Desktop and Mobile
- Spotify - Free w/ premium subscriptions — [ awesome streaming music player ]
-
Videos
- MplayerX - Free — [ top-notch video player ]
- Can play most any type of video file you can throw at it (hasn’t failed me yet!!)
- Faster and more aesthetically pleasing than VLC
- MplayerX - Free — [ top-notch video player ]
- Transmission - Free (just asks for donations) — [ top-notch torrent downloader ]
- Colloquy - Free — [ for chatting on IRC ]
- Cyberduck - Free — [ connectivity powerhouse for everything else ]
- Supports FTP/SFTP, WebDAV, Amazon S3, Google Cloud Storage and Rackspace Cloud Files
- VPNReactor - Pro and Free (Limited) Options — [ Virtual Private Network with native Mac app ]
- Browse the internet securely and safely with a private IP address.
- Appcleaner - Free — [ remove ALL (well, usually it’s most) core files associated with a Mac Application, not just the .app file ]
- Onyx - Free — [ Mac maintenance power house ]
- It seriously kicks extensive ass, get it
- The Unarchiver - Free — [ unarchives compressed files + support for tons more extensions than the native OS X solution ]
- Disk Inventory X - Free — [ nice tool to visualize how your Mac’s storage is being used, file by file ]
-
Keynote - $19.99 — [ better than Microsoft’s PowerPoint for making presentations ]
-
Pages - $19.99 — [ better than Microsoft’s Word for some word processing (like cool and stylish flyers and resumes) ]
-
Logic Pro X / Garageband - $199.99 — [ professional and amateur DAWS(Digital Audio Workstations), respectably, for producing music on Apple platforms ]
- Word [ better than Apple’s Pages for most word processing ]
- Excel [ better than Apple’s Numbers for processing spreadsheets ]
- Ableton Live - $79.99 - $599 — [ professional music production tool with features for live performances, loved by a lot of Electronic producers ]
- Sketch - $99.99 w/ free trial — [ hot new vector tool ]
- Heavily used in the iOS and Android app design communities nowadays
- Photoshop CC - Fucking Subscriptions — [ industry standard bitmap-based design & editing tool ]
- Pixelmator - $29.99 — [ cheaper version of Photoshop, with a one-time payment.. ]
- Paintbrush - Free — [ Mac equivalent for Microsoft Paint and spiritual successor to Apple’s own MacPaint ]
- Paintcode 2 - $99.99 — [ for designing graphic elements translatable into code for Apple’s platforms ]
-
Microsoft Silverlight - Free — [ used for watching Netflix ]
-
Adobe Flash - Free, at the cost of hogging your processor and battery power — [ if absolutely necessary..ugh ]
- Mactracker - Free — [ a neat library-like application for exploring the entire catalog of Apple product releases throughout history up to the current iterations ]
- Very nice to have for die-hard Apple fanboys(or girls!) such as myself :)
- Bookmark the Humble Bundle homepage and check back frequently
- They regularly add great new deals on games to their Store — for [Windows, Mac, and Mobile]
- They also release a weekly bundle , as well as a less frequent, but usually better bundle [ The “Main” Humble Bundle ] on the homepage
- Proceeds go to different charities!
- **Choose what you want to pay; but you have to pay a minimum of $1 to receive Steam keys **
-
Steam - Free platform, Free and Paid games — [ like the App Store for Mac games, plus social/community features and achievements (ok, ok, so it’s more like Xbox Live for Mac) ]
-
OpenEmu - Free — [ bomb ass, open source, extensive collection of emulators for every relevant past-gen gaming platform, wrapped up in one nice Mac application ]
- I’ve been supporting them since near day one, and the initial devs are a great group of engineers. Check out the Github repo!
-
League of Legends - Free to play w/ IAP — [ most popular MOBA out, now has native Mac client ]
- Extremely fun, rewarding and addicting time-waster
- Add me: KennyTheHitman93
-
Hearthstone - Free to play w/ IAP — [ popular trading card game based in Warcraft universe ]
- I’ve downloaded it, and plan on playing it, but I’m much too busy right now to give my actual opinion. Everyone says it is a must-have so I’m still listing it here