Claudio Cherubino's blog Life of a Googler

26Mar/083

Cecchini per gioco

Girovagando su Internet è molto facile imbattersi in numerosi casual games, ovvero quei semplici giochini molto spesso realizzati in Flash, che vengono normalmente sfruttati in ufficio per distrarsi dal lavoro per una decina di minuti.

Qualche giorno fa mi sono imbattuto in uno di questi casual games chiamato Tactical Assassin, sicuramente poco educativo ma in compenso molto divertente, peccato solo per la sua breve longevità.

Nel gioco impersoniamo un cecchino che dovrà affrontare una serie di missioni, ovviamente tutte volte all'eliminazione di qualche bersaglio, evitando di farsi beccare dalle guardie.

Conoscendolo bene, sono sicuro che rielax si fionderà sul sito del gioco, e voi?

20Mar/081

La sigla live di Ken il Guerriero

Uno dei cartoni animati cult della mia infanzia (e immagino valga anche per molti di voi) è stato sicuramente Ken il Guerriero (Hokuto no Ken), le cui innumerevoli repliche possono ancora essere ritrovate nei canali televisivi più improbabili.

Ovviamente, se qui ne siamo appassionati, in Giappone ci sono veramente un sacco di fanatici della serie e un gruppo di essi ha pensato di riprodurre la sigla del cartone in versione live, con risultati che fanno abbastanza ridere.

L'idea è molto simpatica, ma gli attori non sono azzeccatissimi, Ken ad esempio non ha nemmeno un muscolo!

Ecco il video:



18Mar/080

Dieci piccoli indiani all’italiana

Non so quando è stata l'ultima volta che ho visto un film italiano al cinema, ma di sicuro non è recente.

Certo, considerando che i film italiani più di successo degli ultimi anni comprendono capolavori del calibro di Natale in India o tutte le trasposizioni dei "romanzi" di Moccia, non credo di essermi perso molto, però ho appena scoperto un progetto cinematografico nostrano che per una volta sembra voler osare un pò.

Si tratta di MissTake un lungometraggio indipendente girato in Veneto, ma che comprende anche alcuni attori noti, quali Remo Girone, Anna Valle, Vittoria Zinni e Guido Palliggiano.

Anche l'atmosfera si distacca pesantemente dai canoni classici del cinema italiano e presenta forti tinte noir, oltre ad una evidente ispirazione a Dieci Piccoli Indiani di Agatha Christie.

La storia narra di un gruppo eterogeneo di persone che si ritrovano a cenare insieme in una villa palladiana, dietro invito di un misterioso conte che li attira facendo loro credere che voglia privarsi della villa.

Durante la cena, però, uno degli invitati morirà, cambiando radicalmente la sorte della serata.

A me intriga abbastanza, chissà che non sia la volta buona che ritorni a vedere un film italiano al cinema.

Vi lascio con la locandina, anche quella, insieme al sito ufficiale, non è niente male.


MissTake - Il film

11Mar/081

Decoding RLE in F#

Encoding techniques are useless if you don't have a way to restore the original message from the compressed data.

A couple of days ago, we saw how to implement the Run-Length Encoding (RLE) algorithm to encode an array of elements and now we are going to describe how to restore the original array.

To decode an array encoded with RLE we take the (length, element) couples, replicate each element by its length and then concatenate the output.

Let's see the F# implementation:

#light

let decode src =
  let rec decode_block (num, elem) =
    match num with
    | 0 -> []
    | _ -> elem :: decode_block (num-1, elem)
    in List.concat (List.map decode_block src)

At line 8 we concatenate the output of the decode_block function applied to each couple of the src array.

Decode_block is a recursive inner function, which is very easy to understand. In fact, it just repeats elem the number of times indicated by num.

This is everything you need to know to encode and decode arrays (or anything else) by using the RLE algorithm. There are, of course, better compression techniques, if you want we can try to look at them in the future.

7Mar/081

Run-Length Encoding in F#

According to Wikipedia:

Run-length encoding (RLE) is a very simple form of data compression in which runs of data (that is, sequences in which the same data value occurs in many consecutive data elements) are stored as a single data value and count, rather than as the original run. This is most useful on data that contains many such runs: for example, relatively simple graphic images such as icons, line drawings, and animations.

Run-length encoding is used in fax machines. It is relatively efficient because most faxed documents are mostly white space, with occasional interruptions of black.

We will implement now the RLE algorithm in F#, writing a function that will take a list as argument and return a new list of couples (N,E), where N is the number of duplicates of the element E.

Let's show the code:

#light

let pack src =
  let rec pack2 src tmp out =
    match src with
    | [] ->
        if (tmp = [])
          then out
        else (List.append out [tmp])
    | h::t ->
      if (tmp = [])
        then (pack2 t [h] out)
      else
        if (h = (List.hd tmp))
          then (pack2 t (h::tmp) out)
        else (pack2 t [h] (List.append out [tmp]))
    in (pack2 src [] [])

let encode src = List.map (fun b -> (List.length b, List.hd b)) (pack src)

let source = ['a'; 'a'; 'a'; 'a'; 'b'; 'c'; 'c'; 'a'; 'a'; 'd'; 'e'; 'e'; 'e'; 'e']
let answer = source |> encode

First of all we need to pack consecutive duplicates of list elements into sublists, and this is done by the pack function.

Inside pack we define an inner function, called pack2, which is not accessible from outside this block. This also allows us to transform each call like "pack src" to "pack2 src [] []", adding two more arguments to the call.

This inner function moves elements from src to tmp while they are duplicates, and when a different element appears, the list contained in tmp is appended to out.

This process continues until the source list is exhausted, then the out list contains the packed output.

If you want to follow this procedure step-by-step, in the following image you can see the content of src, tmp and out at the beginning of each iteration, using ['a'; 'a'; 'a'; 'a'; 'b'; 'c'; 'c'; 'a'; 'a'; 'd'; 'e'; 'e'; 'e'; 'e'] as input.


Run-length encoding in F#

Now, the actual run-length encoding is trivial. We just have to pack the source list and then apply a function on each element that takes a list of duplicates and returns a couple (N,E), where N is the number of elements and E is the first element (they are all the same).

In our case the final result will be:

[(4, 'a'); (1, 'b'); (2, 'c'); (2, 'a'); (1, 'd'); (4, 'e')]

In the next article I'll present the decoding algorithm, even if I'm quite sure you can easily write it on your own.

5Mar/087

Il miglior posto di lavoro

Ogni anno il Great Place to Work Institute stila una classifica dei migliori ambienti di lavoro in Italia e nel mondo e al primo posto per il 2008, senza grandi sorprese, troviamo Google.

Eppure ho scoperto che esiste un'azienda nel mondo che tratta i dipendenti meglio di Google e si tratta di una software house chiamata 37Signals, famosa per i suoi prodotti dall'interfaccia innovativa, primo di tutti Basecamp.

Cosa rende 37Signals tanto speciale?

Come si può leggere nel blog aziendale, in 37Signals si lavora solo 4 giorni la settimana, dal Lunedì al Giovedì, per dare al dipendente più tempo per riposare.

Inoltre, l'azienda partecipa alle spese legate alle proprie passioni, siano esse lezioni di volo, di cucina o di qualunque altro genere.

Infine, ad ogni dipendente viene fornita una carta di credito aziendale, con l'unica raccomandazione di "non esagerare" nelle spese!

Non avevo ma visto un'altra azienda motivare in questo modo i lavoratori, voi avete anche uno solo di questi benefit?

3Mar/084

Regalare un seno nuovo

Ogni giorno vediamo o sentiamo parlare di molte ingiustizie, la guerra, la povertà, le malattie, ma ce n'è una che molto più grave e di cui nessuno parla: il seno piccolo!

Provate ad immedesimarvi in quelle povere ragazze che vorrebbero rifarsi il seno e non hanno i soldi necessari per pagare l'operazione. Voi riuscireste a vivere questo dramma?

Per fortuna, grazie ad Internet, anche per questo terribile problema c'è una soluzione.

E' nato il sito MyFreeImplants, che consente alle giovani sfortunate di iscriversi, mettere in mostra la propria mercanzia e restare in attesa di quei gentiluomini che saranno lieti di donare qualche spicciolo per pagare loro l'operazione di chirurgia plastica.

Magari le ragazze che hanno ottenuto una donazione potranno mettere online le foto del nuovo seno, in modo da mostrare riconoscenza verso quei benefattori che le hanno aiutate.

Si tratta di un'idea geniale, non so come non ci avessimo mai pensato prima.

Anzi, perché non aprire anche un servizio analogo per gli uomini che vorrebbero fare concorrenza a Rocco Siffredi?