Transproc is awesome!

I’m a big fan of the Elixir programming language, so when I saw at one of the Trójmiasto Ruby Users Group meetings that its pipe operator (|>) can be imitated in Ruby, I was immediately hooked. In Elixir you use it like this:

1..100_000
  |> Enum.map(&(&1 * 3))
  |> Enum.filter(odd?)
  |> Enum.sum

Which means that the result of the preceding expression/function will be passed as the first argument to the next function. This allows writing code, which looks beautiful. Sure, it’s just a syntactic sugar, but what a beautiful one.

Now in Ruby, you can achieve a very similar thing if you use the transproc gem by our own Piotr Solnica. It’s a little bit more cumbersome as this is not built in into Ruby.

Let’s say you have a Hash, which you would like to transform to deep symbolize the keys and rename one key. Here’s how you do it:

require 'transproc/all'

# create your own local registry for transformation functions
module Functions
  extend Transproc::Registry

  import Transproc::HashTransformations
end

class SomeClass
  def transform hash
    transformation.call hash
  end

  private

  def transformation
    t(:deep_symbolize_keys) >> t(:rename_keys, user_name: :name)
  end

  def t *args
    Functions[*args]
  end
end

And if you now run it you’d get this as a result:

irb(main):022:0> hash = { 'user_name' => 'Paweł', 'country' => 'PL' }
=> { "user_name" => "Paweł", "country" => "PL" }

irb(main):023:0> SomeClass.new.transform hash
=> { :country => "PL", :name=> "Paweł" }

Neat, isn’t it?

Ruby 1.9.2 via rvm installation woes

I’ve just had to upgrade Ruby to 1.9.2 (from 1.8.7) on the EC2 instance, but ran into a weird error while running rvm install 1.9.2:

Compiling yaml in /home/ubuntu/.rvm/src/yaml-0.1.4.
ERROR: Error running 'make ', please read /home/ubuntu/.rvm/log/ruby-1.9.2-p290/yaml/make.log
Installing yaml to /home/ubuntu/.rvm/usr
ERROR: Error running 'make install', please read /home/ubuntu/.rvm/log/ruby-1.9.2-p290/yaml/make.install.log

and in the log:

src/Makefile.am:2: Libtool library used but `LIBTOOL' is undefined
src/Makefile.am:2:   The usual way to define `LIBTOOL' is to add `AC_PROG_LIBTOOL'
src/Makefile.am:2:   to `configure.ac' and run `aclocal' and `autoconf' again.
src/Makefile.am:2:   If `AC_PROG_LIBTOOL' is in `configure.ac', make sure
src/Makefile.am:2:   its definition is in aclocal's search path.

Fortunately the solution was rather simple, although Google was not really that helpful this time, hence this post:

sudo aptitude install libtool

Basically the libtool library was not installed.

Dream notebook for 2010

Would include:

  • 14-15″ OLED screen
  • <1,0 kg weight
  • 100GB on-board integrated SSD (pushing 1GB/s read/write speeds)
  • >3GHz Core i3/i5 (yet TBA on 2010/1/3)
  • no ide, no sata, no cd/dvd/bluray just USB 3.0 and hdmi

All of this is possible to make. No new technology needed. There are SSDs on PCI-E. There are OLEDs like this (AUO, LG). There are laptops on CULV processors below 0,8kg (Vaio X). There is just not a single laptop (not even announced!) that would combine it all.

I’m quite positive there would be lots of folks willing to pay the premium price (around 3-4K$ should be sensible) for this package. I would probably buy it for 50% a year later. Sadly, this system is just a dream.

On the other hand – I’m certain we will see similar designs in 2012/2013.

Happy New Year!

Update: Concept 16″ OLED Dell laptop is here. That’s a first.

Synecdoche, New York

Great movie and a great quote (or rather a monologue):

Everything is more complicated than you think. You only see a tenth of what is true. There are a million little strings attached to every choice you make. You can destroy your life every time you choose. But maybe you won’t know for 20 years and you may never, ever trace it to its source.

And you only get one chance to play it out. And they say there is no fate, but there is, it’s what you create. And even though the world goes on for eons and eons you are only here for a fraction of a fraction of a second.

Most of your time is spent being dead or not yet born. But while alive, you wait in vain wasting years for a phone call or a letter or a look from someone or something to make it all right. And it never comes, or it seems to, but it doesn’t really. So you spend your time in vague regret or vaguer hope that something good will come along.

Something to make you feel connected.
Something to make you feel whole.
Something to make you feel loved.

And the truth is I feel so angry.
And the truth is I feel so fucking sad.
And the truth is, I’ve felt so fucking hurt for so fucking long.
And for just as long, I’ve been pretending I’m okay just to get along, just for…

I don’t know why. Maybe because no one wants to hear about my misery because they have their own. Well, fuck everybody.

– Amen.