
Automating the setup of my perfect developer environment on OSX 10.8 - roderikvdv
http://vanderveer.be/blog/2013/01/02/automating-the-setup-of-my-perfect-developer-environment-on-osx-10-dot-8-mountain-lion/
======
sacrilicious
Vaporware at the moment, but keep an eye out for Github's
<https://github.com/boxen> which purports to do similar with Puppet. Demo'd
here: <http://www.youtube.com/watch?v=YlKXRdSAZhY> While I'm linking up stuff,
another take on masterless Puppet is <https://github.com/unixorn/miyamoto>

So many of these systems are still too big and complicated. I consider myself
an amateur, and therefore I bootstrap with manually getting Dropbox,
1Password, and then update babushka links to do the rest from the canonical
sources via github.

------
FilterJoe
Terrific concept. What tools (if any) exist to do this kind of thing on Linux
VM? Do they work equally well for non Ruby environments (I'm thinking
specifically Python/Django)?

I've spent the last week mucking around with VMware/bitnami to try to get a
nice clean Python/Django/Pycharm VM for myself (with a template Django project
that gracefully does both development and deployment). I'm almost done but
what a long hard slog it's been.

~~~
jlarocco
In theory this should be super easy on most Linux systems because of the
software repos.

On Debian based systems, on your existing development machine, you can do:

    
    
        dpkg --get-selections > installed_stuff.txt
    

Then copy the file "installed_stuff.txt" to the new machine/VM and do:

    
    
        dpkg --set-selections < installed_stuff.txt
    
    

It becomes a little more difficult when there are dependencies that aren't in
the package system.

Another thing I've found useful is to have a git repo with my config files.
Then on a new machine I can clone the repo and have access to all of them.
I've been meaning to write a script that copies everything to the right
location, but haven't got around to it yet.

~~~
roderikvdv
Check out <http://dotfiles.github.com> Most scripts have these bootstrap
files, my dotfiles and more are based on this repo
<https://github.com/mathiasbynens/dotfiles> with a very good setup script.

------
deanclatworthy
Great post. I am currently doing something very similar and documenting the
process :) I'd recommend chef librarian over soloist though.

~~~
sciurus
I'll admit that I don't see what the advantage of soloist is. What I would
probably do is build the runlist via include_recipe statements in
pivotal_workstation::default. Then I would create a Berkfile
(<http://berkshelf.com/>) for it, use 'berks install --path' to bundle
pivotal_workstation and all its dependencies, and tar that up and upload it
somewhere.

The bootstrap then becomes something like

    
    
      gem install chef
      echo {"run_list": "recipe[pivotal_workstation]"} > node.json
      chef-solo -j node.json -r http://example.com/pivotal_workstation.tar.gz
    

The JSON could of course be customized if you needed to set any attributes.

------
specialist
Great tips. Thanks.

I also use TotalFinder (tabbed finder replacement) as well as Asepsis
(prevents .DS_Store files) from binaryage.com.

I'm a Java dev, flipping back and forth between IntelliJ and Eclipse. Using
Eclipse since the pre-1.0 alpha, I still find it more comfortable. But
IntelliJ's rate of improvement has prompted me to use it more.

I've become good friends with SSH. We do lots of deploy/ops work at this gig.
I'd love to figure out how to put the remote host's hostname into the
tab/title/prompt. I haven't tried zsh yet, not excited about putting zsh on
all the remotes (which are a mix of Windows and Linux).

Our databases are Oracle, SQL Server, some legacy mainframe stuff. I use
Squirrel SQL. I don't like it much. I haven't found any generic SQL clients as
clean and smooth as MySQL's Sequel Pro client.

~~~
martinced
_"I'm a Java dev, flipping back and forth between IntelliJ and Eclipse. Using
Eclipse since the pre-1.0 alpha, I still find it more comfortable. But
IntelliJ's rate of improvement has prompted me to use it more."_

I think you get it really backwards... Back in the days IntelliJ was just
soooo much more better than Eclipse it wasn't even funny to compare the two.
It was just plain sad.

But... As a lot people predicted, Eclipse being Open Source and IBM having put
some of its weight behind it, Eclipse started to get quite good.

Nowadays Eclipse as nearly caught up and it's just a matter of time before
Open Source, once again, shall win.

It hasn't prevented me from buying IntelliJ at 70% during their doomsday
sales.

Anyway the "rate of improvement" you're talking about is definitely on
Eclipse's side (and this come from some using IntelliJ since version 3 or 4,
don't remember), not on IntelliJ.

IntelliJ is still banking on its slight edge, but as time passes by that edge
is eroding more and more...

~~~
pretoriusB
> _I think you get it really backwards... Back in the days IntelliJ was just
> soooo much more better than Eclipse it wasn't even funny to compare the two.
> It was just plain sad._

I beg to differ. Eclipse always had a better model of the project and workflow
for me. Never could tolerate IntelliJ.

Now, IntelliJ indeed had _more_features_, at least back in the day, compared
to Eclipse. But I always found the implementation cluttered and confusing.

------
dhotson
Babushka is also great for this kind of thing: <http://babushka.me/>

~~~
sacrilicious
Absolutely, similar-looking ruby, too. I was disheartened by the wheel
reinvention, but to each his own.

------
liamk
I've started doing something similar, except I also use vagrant to ensure that
my development OS is the same as production. I also find it easier keeping
everything for dev within a VM.

~~~
nachteilig
I'm doing this too, and it's funny because one of the things I originally
liked about OS X was that the UNIX roots allowed me to run my dev environment
locally.

Still, Vagrant makes this all pretty easy.

~~~
roderikvdv
I'm a big fan of Vagrant but all our developers use MacBook Air's with 4GB
memory and lots of different projects at the same time it's just a pain to use
Vagrant.

We compensated this by using a few staging servers and using Vagrant if there
are issues at this level (almost never btw)

------
ylem
Anything similar for windows?

------
jrogers65
Easier way to get a good development environment and not have to deal with a
crippled window manager: <http://www.ubuntu.com/>

On a more serious note, what is with the fad of running OSX and doing all of
your work in a VM? OSX is terrible for anything serious and is enough of a
pain in the ass that one must use a VM just to run their web application on
their development machine. Why not just use Linux? Why not use Windows and run
a VM in that? At least you'll get the benefit of being able to run more
software.

I'm finding it very difficult to understand the justification for such setups
and, from personal experience, I find that it's better to avoid shops which
operate in such a way altogether.

~~~
mitchty
And what if your development environment is for iOS apps?

How will ubuntu help you out installing xcode? Ubuntu is not the end all of
things.

The "fad" of running things in a vm is so that you can validate that you've
not forgotten something about your setup and deploy process. If you run it
locally on your workstation that you've tweaked umpteen million ways you may
have forgotten about some tweak you made and boom your deploy doesn't work.
Fully automating a vm build and setup for local use helps work those kinks
out. I'm not a web guy but do the same thing for my ec2 setups.

Also some of use prefer not to use Linux or Windows as our workstation. At
work now I am typing this on an Arch linux box, but prefer osx for regular use
primarily because of the less bs situation. In addition using windows for the
base os means things like having to deal with stuff like cygwin/etc.... and
their stupid peculiarities and quirks.

~~~
jrogers65
The problem of replicating environments was already a solved issue for me.
When I'm setting up an environment for the first time, I make note of all of
the commands required to set it up and put them in a shell script. I guess
it's nice to not have to tweak them when there's an OS upgrade.

The other side of solving this is writing tests to check that, for instance, a
particular language extension is loaded. The application should be throwing a
fit if something is missing in the environment.

~~~
mitchty
No arguments there. All this is is just chef recipes to do basically that.

This blog post is a good start but if you have an osx environment you can
setup netboot and have a truly automatic install+setup with chef.

I'm a bigger fan of using chef/puppet/whatever over personal shell scripts as
then you can test your automation out in a vm. I just build osx vm's and
validate my osx automation with that.

