Installing GLPK on a Mac

| Comments

Obsolation note:

Thanks to Dave Coleman’s comment I found out that glpk is available through homebrew now! So you just need these 2 steps to get glpk now:

  1. homebrew
  2. brew install glpk

If you still want to read on, the old way is still here…

So you want copy-paste instructions to install GLPK on your Macbook? Here are the steps:

  1. Download the latest version of GLPK from
  2. Optional: Follow the instructions to verify the download (you might need to get GNU Privacy Guard or gpg for this. You can get it at
  3. Say it’s downloaded to your “Downloads” directory, go there and execute the following commands (using the terminal) cd ~/Downloads tar -xzf glpk-4.43.tar.gz ./configure —prefix=/usr/local # see note 1 make sudo make install

  4. At this point, you should have GLPK installed. Verify it: which glpsol /usr/local/bin/glpsol

  5. … and try help: glpsol —help

Now that you are all set-up, read up this excellent introduction using GLPK:


Russian Peasant Multiplication in Ruby

| Comments

Russian Peasant Multiplication: a very simple and elegant way to multiple.

Read more: School-boy example of how and why it works and about Ancient Egyptian Multiplication on wikipedia

So here’s my simple implementation: (or as a gist on github)

module RussianPeasantMultiplication
  def russian_peasant_multiply(b)
    numbers_to_add = []
    a, b = [self, b].sort #So we have the smaller number as the first

    negative_operands = [a, b].select { |n| n < 0 }
    result_should_be_negative = negative_operands.size.odd? # or negative_operands.size == 1

    # Now get the absoultes
    a, b = [a, b].map { |n| n.abs }

    while( a > 1 )
      a = a >> 1 # halv it
      b = b < < 1 # double it
      if a.odd? # or (a % 2 == 0 )
        numbers_to_add << b
    result = numbers_to_add.inject(0) { |sum, n| sum += n }
    result = result * -1 if result_should_be_negative

class Integer
  include RussianPeasantMultiplication

# Tests
require "test/unit"

class TestInteger < Test::Unit::TestCase
  def test_russian_peasant_multiply
    assert_equal(22 * 70, 22.russian_peasant_multiply(70))

  def test_russian_peasant_multiply_for_negative_numbers
    assert_equal(-22 * 70, -22.russian_peasant_multiply(70))

  def test_russian_peasant_multiply_for_negative_arguments
    assert_equal(22 * -70, 22.russian_peasant_multiply(-70))

  def test_russian_peasant_multiply_for_negative_numbers_and_arguments
    assert_equal(-22 * -70, -22.russian_peasant_multiply(-70))

  def test_russian_peasant_multiply_for_zero
    assert_equal(0 * -70, 0.russian_peasant_multiply(-70))

  def test_russian_peasant_multiply_for_zero_arguments
    assert_equal(-22 * 0, -22.russian_peasant_multiply(0))

  def test_russian_peasant_multiply_for_zero_numbers_and_arguments
    assert_equal(0 * 0, 0.russian_peasant_multiply(0))

Colorado Pictures (2009 Nov)

| Comments

Pics from the Colorado trip back in November, 2009 (with Ujwala and Maa). We spent two days in Rocky Mountain National Park and a day over in Colorado Springs and around (Manitou Springs, Pikes Peak – highest peak in that area).

It’s heavenly – have to go there again in Spring 2010 )along with the parks in Wyoming, Montana).

Click on the photo to get to my SmugMug page – feel free to leave a comment :) [![][3]][3]

Rails - Table Join With Specified Fields in Select

| Comments

Figured this out after a lot of monkeying-around (I mean script/console).


:joins is the only way to do this, using :includes does NOT respect the select clause. Here a gist:

Admittedly, this is hacky, too hacky for my comfort. Comment/suggest a better/cleaner solution?

Note: Found out that there is a gem to do this: ar-select-with-include

A Beautiful Foggy Autumn Morning

| Comments

Echo lake, view from my house. Taken with my iPhone and enhanced with the free app: