kennyledet / MacDevelopmentSetupGuidelines

Disclaimer: These are actions and applications I believe to be the best for setting up an optimal development environment are extensions of my opinion, and not to be taken as objectively proper for every software engineer!

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#1. Tasks


#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”]




###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 ] ——————————————————————————————————————————————

####[ 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) ]

[ Learn how to use the command line program ssh and SSH in general ]




#Git Setup

###[ Install Git ]

####[ 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

Vim Setup

Python Setup

[ 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

Heroku Setup [ if you’re using Heroku ]

[ Install the Heroku Toolbelt ]

Found here!!

[ Setup SSH Keys support ]

heroku keys:add

Java [Development Environment] Setup

[ Install the Java Development Kit (a.k.a. JDK) ]





Applications =

Security

* [ 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.

Development


Core

————
Terminal

Browsers
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
Database Management

IDEs
  • 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. :)
    • Registering as an iOS and Mac developer both cost a separate $99/year
    • 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.


  • 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 the ln call] to whatever you’d like in order to customize this.
          *Subjective Opinion: It may be longer, but I prefer to type sublime instead of subl purely for the sake of explicitness.
      • Quick directions:
        * [ Open current directory in Sublime Text ] — ```sublime .``` * [ *Stupid Example:* Opening my code folder in Sublime Text ] — ```subl ~/code```


####Homebrew Packages [ All Free ] ———————————————————
Core [Or, The Programs Usually Named with 3-4 Letters for some reason]
  • 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
  • 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 ]


  • ffmpeg [ video processing power house ]
    • to add libfaac support, run brew reinstall ffmpeg --with-faac
  • gifsicle [ gif processing power house ]

  • cask [ manage native Mac app installations/removals in the terminal, through a Homebrew extension ]
Python
  • 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

      • 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
    • GUI Toolkits

      • PyQt
        • Homebrew package: pyqt
        • Necessary for building some other Homebrew packages
      • 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)
    • 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)
          • 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
Node.js

  • 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
Ruby
Databases
Misc






General Helpers


Productivity


  • 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

  • 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


  • 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



Entertainment and Media Content

  • 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

  • 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



Connectivity



Maintenence Tools

  • 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 ]


[ Office / Home ] Content Production

Apple
  • 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 ]


Microsoft - $99.99

  • Word [ better than Apple’s Pages for most word processing ]
  • Excel [ better than Apple’s Numbers for processing spreadsheets ]

Other Companies (yes, they’re still relevant in this space)

Design-Specific


Browser Plugins


Misc

  • 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 :)

Gaming [Or, SHIT I really should get back to work!!]

Platforms

  • 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 ]


Games

About

Disclaimer: These are actions and applications I believe to be the best for setting up an optimal development environment are extensions of my opinion, and not to be taken as objectively proper for every software engineer!