I haven't written here anything in a while. Whatever, I'd like to describe my toolbox and setup.
First of all, most of magic happens on my Macbook Air 13". When I'm not on the go, or laying on the couch, the Macbook is hooked up to Thunderbolt Display.
Macbook Air is really a beautiful, appealing thing. Not only it's a piece of hardware, but also the awesome experience. Small, thin, light, fast.
My OS of choice is, not hard to guess, OS X. Compared to Windows, its main pro is, it's the real UNIX, meaning I have my lovely terminal there, and all UNIX tools. (I can't even imagine myself working without that.)
A few pros of OS X over both Windows and different Linux distros:
- UI/UX, the one I really like it for. Stylish, elegant, Made For Humans™
- could be a part of previous, but I'd rather write it separately: font rendering. If you've ever seen how texts are rendered on Macs, I doubt you'll be able to look at how they are rendered on Windows/Linux machines without your eyes bleeding
- nice application ecosystem
(Shortly: I really do care about simplicily, power, and aethetics at the same time.)
My entire development environment can be bootstrapped on any Mac with a single command1:
bash -c "$(curl -L https://raw.github.com/goshacmd/babushka-deps/master/install.sh)"
Brew for packages stuff.
My favorite coding/terminal color scheme is Solarized. Choice of Light/Dark one depends on whenever I'm working on a perosnal or client project.
Rack/Rails, node.js apps are run through Pow.
I also run a manservant instance using Pow on
man.dev. With it, I'm able to look up manpages right from Safari.
Obviously, my personal & client apps are on Github. Github is especially useful for client app development — each repo has got a wiki for some project-related documents, Issues are awesome for both tracking bugs, offering new features, having discussions, and managing milestones.
For managing ruby versions & environments, I prefer rbenv.
Most of times, I'm using the following stack:
- Ruby 1.9.3
- Rails 3
- MongoDB for DB, and Mongoid as AR-like ORM
- Redis with redis-rb
- Devise for authentification
- CanCan for ability management
- HAML/Slim for templating
- SCSS/Less for stylesheets
- CoffeeScript for JS
- Twitter Bootstrap with some customization
- Old-fashioned, mostly static client side with some jQuery for animations/AJAX
- RSpec, FactoryGirl for testing (and nyan cat rspec formatter)
- Puma/Thin as web server
Whatsoever, I'm currently taking at Backbone.js, Underscore.js, Chaplin, Brunch, CoffeeScript, Less, Handlebars for client side, which is a simple, separate aplication, depending only on backend app API.
Nevertheless, I don't like being locked into one language, I want to be a polyglot. I'm playing with a whole lot of different technologies in my spare time — Node.js, Scala, Erlang/Elixir, Clojure. (And whenever some of those make specific taks better than Ruby, I'm using it over Ruby. So in my recent client app I've got a zoo of a few apps — backend Rails app, utility Node.js application, communicating via REST API/Pusher with frontend Backbone app.)
When building apps, I follow the Twelve-Factor App methodology.
I don't deploy my apps to separate own server, nor I really want to.
Heroku allows rapid, dead-simple deployment. And so, it's my the only deployment option (for now at least, I do understand that some very specific kinds of apps might require separate server). I like its simplicity (in deploying, scaling, managing env vars), I like lots of its hidden power (buildpacks, for example). Deployed apps use MongoLab for MongoDB in the cloud, Redis to go for Redis.
Safari for browsing, Tweetbot as Twitter client app, still Sparrow for email, iTunes for music, Aperture for photos, 1Password for password management, Reeder/Prismatic for news, Readability for read-it-later thing, Cloud app for screenshot sharing, Flint as Campfire client, Grandview for focused writing, Divvy for window management, Bartender, Eon as client for Freckle, OhLife for some sort of journal.
I also store my backups and photo library on 2Tb Time Capsule.