nunojob:~ dscape/08$ echo The Black Sheep

Archive for April, 2008

Functional vs Imperative: Round 1

Imperative in python
Functional on a object oriented flavor in ruby

Note: You can do the opposite, ruby in imperative and python in functional (I’m guessing on the python part, but it’s probably true)

# choose all values from a list that are not in a matrix

# imperative in python
res = []

for value in list:
  present = False
  for mlist in matrix:
    if value in mlist:
      present = True
      break
   if not present:
     res.append(value)
# functional in ruby
res = list.select { |value| !matrix.flatten.member? value }

# restrict the matrix to values in list

# imperative strikes back
res = []

for mlist in matrix:
  current_mlist = mlist[:]
  for mvalue in mlist:
    if mvalue not in list:
      current_mlist.remove(mvalue)
  res.append(current_mlist)
# functional responds
res = matrix.map do |mlist| 
  mlist.select { |mvalue| list.member? mvalue } 
end

Requiem for a Dream

Vieram-me perguntar de onde tinha tirado a foto do meu perfil do last-fm.

A resposta é simples. De um dos mais brilhantes filmes que já vi. Se gostas de cinema e ainda não viste, este é para ti. (Para ver e rever)

Cartaz Enterro da Gata 2008

Cartaz do Enterro da Gata 2008

Enterro da Gata 2008

Dia 10 – Jorge Palma, Gabriel o Pensador – 9 euros estudante / 12 não estudantes
Dia 11 – Linda Martini, James – 9 estudante / 12 não estudantes
Dia 12 – Rita Redshoes, David Fonseca – 8 euros estudante / 11 não estudantes
Dia 13 – Mind da Gap, Irmãos Verdades – 8 euros estudante / 11 não estudantes
Dia 14 – Neurónios Abariados, Quim Barreiros – 9 estudante / 12 não estudantes
Dia 15 – Banda Vencedora do UMplugged, Xutos e Pontapés – 9 estudante / 12 não estudantes

Camionetas UM -> Gatódromo

Polo Azurém: Ida entre 22h e a 1h. Volta entre as 4h e as 6h30

Polo Gualtar: Ida entra 21h30 e as 2h. Volta entre as 3h e as 6h30

Vemo-nos lá?

( Provavelmente pela última vez. )

Problemas com a bateria do MacBook

Acabadinho de vir da garantia, onde passou um mês para trocarem a board sem que tenham conseguido resolver nenhum dos outros problemas que indiquei.

Olhem para a bateria e digam-me se isto é normal:

The mona Lisa

Nova Versão do Ubuntu – Hardy Heron

Está mesmo a sair o novo Ubuntu.

Enquanto não sai – e antecipando os habituais problemas de uma estreia, ou seja, servidores atulhados – deixo uma palavra amiga a apontar para o mirror de Software Livre do Centro ao Apoio ao Open-Source que vai ter os CD’s disponiveis para download em:

PS. Já lá esta o release candidate.

links for 2008-04-22

ROTD: Having fun with Ruby sort and sort_by methods

Simple sorting.

First comes a demonstration of the most common error :P
Then a simple sort
After that comes a first sort_by
And then a complete sort_by (sorted first by fname and then by lname).

>> h = [{'fname' => 'Nuno', 'lname' => 'Job'},
  {'fname' => 'Nuno', 'lname' => 'Fonseca'},
  {'fname' => 'Catarina', 'lname' => 'Pinto'},
  {'fname' => 'Nuno', 'lname' => 'Pinto'},
  {'fname' => 'Nuno', 'lname' => 'Antunes'}
]
>> h.sort
NoMethodError: undefined method '< =>' for 
{"lname"=>"Job", "fname"=>"Nuno"}:Hash
from (irb):35:in `sort'
from (irb):35
from :0
>> h.sort{|a,b| a['fname'] < => b['fname']}
=> [{"lname"=>"Pinto", "fname"=>"Catarina"},
{"lname"=>"Job", "fname"=>"Nuno"},
{"lname"=>"Fonseca", "fname"=>"Nuno"},
{"lname"=>"Pinto", "fname"=>"Nuno"},
{"lname"=>"Antunes", "fname"=>"Nuno"}]
>> h.sort_by{|p| p['fname']}
=> [{"lname"=>"Pinto", "fname"=>"Catarina"},
{"lname"=>"Job", "fname"=>"Nuno"},
{"lname"=>"Fonseca", "fname"=>"Nuno"},
{"lname"=>"Pinto", "fname"=>"Nuno"},
{"lname"=>"Antunes", "fname"=>"Nuno"}]
>> h.sort_by{|p| [p['fname'], p['lname']]}
=> [{"lname"=>"Pinto", "fname"=>"Catarina"},
{"lname"=>"Antunes", "fname"=>"Nuno"},
{"lname"=>"Fonseca", "fname"=>"Nuno"},
{"lname"=>"Job", "fname"=>"Nuno"},
{"lname"=>"Pinto", "fname"=>"Nuno"}]