

Babushka. Sane deployment. - speek
http://babushka.me/#demo

======
ben_h
Thanks for submitting this, speek :)

For those that are interested in trying out babushka, here's a 30 second crash
course. To install:

    
    
        bash -c "`curl -L babushka.me/up`" # If you're on a Mac
        bash -c "`wget -O - babushka.me/up`" # If you're on Ubuntu
    

Some good examples to start with:

    
    
        babushka rubygems # Installs, updates, or adds gem sources as required for your system
        babushka homebrew # Sets you up for sudoless `brew install`s
        babushka Cucumber.tmbundle # Clones the latest, installing / restarting TextMate as required
        babushka Chromium.app # Pulls the latest Chromium nightly to /Applications
    

If you want to see what will happen without making any changes, use `--dry-
run`:

    
    
        babushka Transmit.app --dry-run
    

If you're on a Mac, you can follow along in TextMate too using `--track-
blocks` — babushka points out each piece of each dep as it runs them. (This
also works with `--dry-run`, so you can inspect the code a tree of deps would
run.)

    
    
        mate /usr/local/babushka
        babushka 'Ruby on Rails.tmbundle' --track-blocks
    

Any questions, get in touch with @babushka_app on Twitter, #babushka on
Freenode, or email hello@babushka.me.

Cheers — @ben_h

[edit: fixed the babushka.me/up links.]

~~~
drhodes
bash -c "`wget -O - babushka.me/up`" # If you're on Ubuntu

Needs a closing tick before the last double quote there.

This project will no doubt save a significant amount of time. Thanks for
sharing your work.

~~~
ben_h
I should have copied and pasted instead of typing it out :) Thanks for the
correction, fixed.

------
shazow
Thought I'd point out that Babushka means "grandmother" or "old lady" in
Russian.

Based on your logo, you were thinking Matryoshka.
<http://en.wikipedia.org/wiki/Matryoshka_doll>

It's also known as a "Babushka doll" (because it features a grandmother-like
image) but the doll is definitely not the first thing that comes to mind when
hearing "Babushka".

I have no feedback on the actual product. Looks fun, best of luck. :-)

~~~
ben_h
Yep, I was aware of that :)

I chose babushka because here in Australia at least, the nested Russian dolls
are known as babushka dolls. (Also, Matryoshka is kind of already taken by the
video container format <http://www.matroska.org/>).

And hey, I'm cool with babushka being a kindly grandmother that helps you
remember things you've researched, as long as you explain them in its DSL
first :)

~~~
hristov
Little known fact, babushka also means butterfly in Russian (if you put the
stress on a different syllable). So if you do not like the old lady as a
marketing image you can always go with a pretty butterfly.

~~~
d0mine
grandma and butterfly are different words in Russian. Listen
<http://tts.imtranslator.net/A3Xz>

~~~
hristov
yes butterfly is technically babochka, but they sound the same to the english
ear.

~~~
gruseom
There's no "technically" about it. That's just what the word means. It's
irrelevant how similar they sound to the English ear; you might as well argue
that "the" is interchangeable with "duh".

Also, contrary to the GP, there's no difference in stress, which is on the
first syllable in both words. The reason they're different words is that "sh"
vs. "ch" is a phonemic distinction in Russian, just as it is in English.
That's why we distinguish between "sheep" and "cheep", for example, and would
regard it as bizarre to conflate them.

~~~
Groxx
Maybe they can go for a near-homonym pun? A nested grandmother doll with
butterfly wings?

------
pedoh
Some people might lean towards this instead of Puppet / Chef / cfengine
because the "normal" way to use Puppet is in a client / server model, and that
might seem overly complex for some projects. But Puppet can be used in a
serverless way.

At it's simplest, Puppet can do what it looks like Babushka is doing, without
the interactive nature of Babushka (which could be viewed as a positive or a
negative). Getting more complex, rules about what gets done / installed /
modified can be pulled from a central location, even without a Puppetmaster
(server).

I'm not saying the Babushka author is crazy for creating this. Perhaps he had
an itch that needed scratching and wanted to build this just for the pleasure
of it, or felt that Puppet was overly complex for his needs. I think the work
he's done is pretty slick, but there doesn't appear to be much add-on value
for anyone who is already using Puppet or Chef or cfengine.

If Ben is lurking around here, I'd enjoy hearing his motivations for creating
this. He might disagree with my assessment, too, and that'd be interesting to
hear.

~~~
ben_h
Hi, great questions.

Chef and puppet have a lot to offer. In particular, there are things that chef
and puppet can do that babushka can't, like orchestrating ecosystems of
multiple machines, and provisioning new hardware automatically.

Deployment is a problem that I'm very interested in, being a web developer and
maintaining my own production machines, and I think babushka has a lot to
offer in that area. However, I don't think of babushka as a deployment tool. I
think of it as a "remember what I researched or learned the first time" tool,
and part of that is deployment.

In building it, I'm aiming to build the most concise, powerful DSL I can for
automating chores, and at focusing it as hard as I can towards the "no job too
small" end of the scale.

My other main motivation is making babushka immediately useful and
approachable, both as a user and a contributor—i.e. I want you to be running
deps and seeing results within 2 minutes of discovering the app. And I want
you to be able to write your own deps as easily and quickly as possible, push
them to github with a single command, and have anyone else run or incorporate
them into their own trees of deps equally easily. Most of that is already
possible today using automatic dep sources, and the remainder I'm working on.
:)

For example, Josh Bassett has been building a template for installing vim
plugins: [http://github.com/nullobject/babushka-
deps/blob/master/vim_p...](http://github.com/nullobject/babushka-
deps/blob/master/vim_plugins.rb) \- which means you can automate the
installation of your own plugins by writing a babushka dep like Josh's:

    
    
        vim_plugin "vim-cucumber" do
          source "git://github.com/tpope/vim-cucumber.git"
        end
    

You can run that dep with a single command, even if you've never used Josh's
dep source before:

    
    
        babushka nullobject/vim-cucumber
    

And so on, to configure anything and everything you like. It's already doing
this job, which I'm really excited about.
<http://twitter.com/harvinius/status/13116470017>

Similar things are already working well for textmate bundles, OS X app bundles
and installer packages, git repos, and so on. The idea is that babushka is
purely the engine (plus enough deps for it to install itself), and it should
be as fast and pleasant as possible to not only write deps like the vim-
cucumber one above, but to create new templates and make new tasks I've never
thought of. You can extend the DSL using the DSL. :)

So — I have a lot of time for tools like chef, and probably have a lot to
learn from them too. I'm building babushka to be complementary to those tools.
For example, part of larger deployments is doing specific, more focused jobs
at certain points, which is something that babushka is just right for.

------
mitchellh
I've look around shortly (github page, website) and I couldn't find anything
so I'm going to ask what I think is the obvious question here:

Why not Chef?

Why not Puppet?

Why not _X_?

Babushka looks very cool, don't get me wrong. But I'm curious about the above
questions.

~~~
ben_h
It's a really good question, and one I probably should answer more directly on
the website and in the README.

As I wrote above, I have a lot of time for these other tools—in fact the
creators of sprinkle (Marcus Crafter) and deprec (Mike Bailey) are both mates
of mine here in Melbourne, Australia—and I don't want to just duplicate their
work. I'm trying something different here. Deployment is definitely still
important to me with babushka, but I'm trying to build a more general tool
that makes it as fast and pleasant as possible to automate getting to some end
goal.

And that's one of the other differences—babushka is goal-oriented, not task-
oriented. Unless there's some specific incompatibility, you can install
babushka on (for example) any Mac in any state with this

    
    
        bash -c "`curl -L babushka.me/up`"
    

And then running this

    
    
        babushka homebrew
    

Will get you all set up with homebrew. But what it does is achieve the end
goal of having homebrew set up—which might mean doing nothing, or cloning a
git repo, or possibly just doing a `git reset --hard` to drop a binary in
place. It depends on the system. The upshot though, is that if you're working
on some other problem and a new colleague needs homebrew, you can run one
command and you're done, instead of getting sidetracked for 15 minutes.

In focusing on that, I sacrifice usability in other areas—for example, right
now there's not really any such thing as an unattended run using babushka,
because most complex dep trees require user input at runtime. It's still very
much a hands-on process. And that's cool with me—there are already tools out
there that solve those problems, and solve them well.

I'm looking at working on deployment with babushka more with @glenmaddern,
@dgoodlad and some other Melbourne hackers soon. But I'm very conscious of all
the existing tools out there, and I'm a strong believer in deferring to the
right tool for the job whenever possible. So I'm looking to integrate with
existing tools where it makes sense, and solving old problems in novel and
awesome ways whenever I can. :)

------
ELV1S
Unrelated question. How did you make syntax highlighting for bash prompt? I
mean, yellow strings ('user exists' on 5:40) and orange wrong commands
(enclosed string "'use").

I've found no clue in <http://github.com/benhoskings/dot-files>

~~~
a-priori
I believe that's a feature of Fish.

<http://fishshell.org/index.php>

------
ams6110
Your website is useless to people who don't have Flash.

~~~
ben_h
Agree to disagree :)

The only Flash component is the embedded screencast, which is hosted at Vimeo
and downloadable as an mp4: <http://vimeo.com/6782671>

------
Legion
If you had spelled it "Babooshka" like Kate Bush, there's no way I could have
refused to use this tool.

I would have been "all yours".

(For those too young to know who Kate Bush is, imagine if Lady Gaga took the
effort she puts into weird & eclectic outfits and made weird & eclectic twists
on pop music instead)

