git: Pushing (Only) Some Commits
Occasionally I’ll find myself deploying to Heroku but for one reason or another I’m not ready to roll out all of the commits I have on master. Maybe I’d like to roll out some of the changes, test, and then roll out the rest later. You don’t want to just run a git push heroku master because that would push (and therefore deploy) everything. Instead, use git log to get hash of the commit you want to push up to (and including), and then run:GitX Commit Keyboard Shortcut
It took me way too long to figure this out: from the commit view (⌘2) in GitX you can use ⇧⌘⏎ to commit.Moved to Octopress
Well, no fanfare necessary, I switched to Octopress and moved this blog to Github Pages. I’m enjoying the new setup and planning to actually post again (*gasp*).Decisions are Bullshit
So many new things to say, so many thoughts, so many feelings…I’m not particularly interested in leaving California (70°F as I write this, among other reasons) but I have affairs to settle in Dallas as well as people I’d like to see. Again I’m struck with the feeling that I need to make better use of the time I spend in Dallas. Not only because life is short and I need to always be making the best possible use of the time that I have, but also because of a growing awareness that the sun is setting on my time with that city.Ruby: Implementing progn from Lisp
While hacking on some Ruby code today I started to miss progn
from my Common Lisp programming days. If you’re not familiar with progn
, it’s a special form which evaluates all of the contained expressions and returns the value of the last one.
Background
The progn
construct is more important in the (more-or-less) functional1 programming world than in the imperative world because it allows us to insert multiple expressions where, syntactically, we could otherwise only insert one.
Let’s start with a trivial example:
(if (> x 0)
x
0)
If x
is greater than zero, return x
, else return 0.
But what if we also wanted to output a message whenever x
is not greater than 0? We can’t just add our printing line in before (or after) 0
because the compiler knows what’s what based on the positions of the subexpressions in the if
expression: it has to be (if test-form then-form [else-form])
2.
Enter progn
:
(if (> x 0)
x
(progn
(print "Returning zero!")
0))
Boom! It works. How very exciting. Ok, maybe not. In fact, I called progn
a “special form” earlier—which basically means that it’s something which defies the basic evaluation rule of the language—but the truth is it’s probably the least special of the special forms. In fact, implicit progns are all over the place in Lisp: case
forms, catch
forms, when
forms, let
forms, but most importantly, function bodies.