giovedì 11 dicembre 2008

Alcune librerie interessanti in Ruby

Ultimamente ho trovato molto utili o interessanti queste librerie:

Ruby Graph Library
Implementa una struttura dati a grafo, sulla quale e' possibile applicare tutti gli algoritmi piu' comuni sui grafi. Ogni istanza nodo possiede i metodi per aggiungere archi e collegare altri nodi, per gestire vertici, e ciclare sul grafo (anche l'iteratore non e' ottimizzato)

Skynet
Skynet implementa MapReduce di Google. MapReduce e' un modello di programmazione e di elaborazione di dataset enormi. Ecco come Google vi da istantaneamente i risultati della vostra ricerca su un database che rappresenta gran parte di internet. Grazie a questa libreria e' possibile eseguire processi paralleli su piu macchine. Non solo, estendendo ActiveRecord permette facilmente di utilizzare MapReduce nella vostra applicazione Rails.

RubyProf
RubyProf e' un profilatore delle applicazioni scritte in Ruby, evidenzia i colli di bottiglia e permette di analizzare, attraverso i grafici prodotti, le prestazioni di un determinato segmento di codice.

Bye
Piero

MacBook Arrivato...

Dopo un mesetto di utilizzo posso dirmi completamente soddisfatto del mio acquisto. Ottime prestazioni, comodo e schermo ottimo (nonostante il vetro) in ogni condizione.

giovedì 30 ottobre 2008

Olé, MacBook in arrivo

Per comodità, per sfizio, e per aggiornamento è in arrivo il mio nuovo MacBook da 13", riuscirò a passare dai 15 ai 13 pollici? In arrivo a metà novembre...

mercoledì 22 ottobre 2008

Ruby: Getting current method name

In ruby 1.9 è possibile utilizzare la variabile __method__ per ottenere il nome del metodo attualmente chiamato. In ruby 1.8 non esiste un modo diretto per accedere al nome del metodo ma è possibile accedere alla variabile caller che, tra le altre informazioni, contiene il nome del metodo chiamante (tips trovato su internet). Ecco come creare un metodo funzionante su entrambe le versioni:
def method_name
if RUBY_VERSION.to_f < 1.9
caller[0]=~/`(.*?)'/
$1
else
__method__
end
end

Se chiamerò da un metodo foo() method_name otterò sempre 'foo'

lunedì 29 settembre 2008

Italian Agile Day 2008!

Venerdi' 21 Novembre 2008 si terrà a Bologna il quinto Italian Agile Day. Si tratta di una conferenza gratuita di un giorno dedicata alle metodologie Agili per lo sviluppo e la gestione dei progetti software rivolta agli sviluppatori, project leaders, IT managers, tester, architetti e coach che hanno esperienze da condividere o che iniziano solo ora ad interessarsi a queste tematiche. La giornata ha come obiettivo la conoscenza pratica, le esperienze sul campo e un attivo coinvolgimento di tutti i partecipanti. L'accesso è libero previa registrazione, i posti sono limitati. L'evento, per la terza volta consecutiva, si auto-finanzierà.

mercoledì 17 settembre 2008

Attrattore di Lorenz in Ruby

Girando per il Web ho trovato diverse implementazioni dell'attrattore strano di Lorenz in C, PovRay o MathLab ma non in Ruby. Così mi sono deciso e in una decina di minuti ho convertito un codice povray C in ruby. Nulla di complicato, il più è capire perchè si comporti in questo modo...
#Calcolo valori per l'attrattore di Lorenz
#dx / dt = p (y - x)
#dy / dt = x (r - z) - y
#dz / dt = xy - c z
#P = 10, R = 28, c = 8 / 3.
#P = 28, R = 46.92, c = 4.

MAX_ITERATION = 10000
h = 0.01;
P = 10.0; #numero di Prandtl
R = 28.0; #numero di Rayleigh
c = 8.0 / 3.0;
x, y, z = 0.1, 0, 0

0.upto(MAX_ITERATION) do |i|
next_x = x + h * P * (y - x);
next_y = y + h * (x * (R - z) - y);
next_z = z + h * (x * y - c * z);
x, y, z = next_x, next_y, next_z;
puts "#{i} - X: #{x} , Y: #{y}, Z: #{z}"
end

Dopo questa... buonanotte!

mercoledì 6 agosto 2008

Safari e Login su Hotmail

Se tentate di loggarvi su Hotmail attraverso Safari potrebbe capitare che il vostro browser incominci a loppare tra diversi siti Microsoft (da hotmail.com a live.com andata e ritorno senza fine...).

Per risolvere questo problema dovete:

  1. Entrare nelle preferenze di Safari (menù Safari -> Preferenze)

  2. Cliccare su Sicurezza -> Mostra Cookie

  3. Digitare nell'input box 'live.com'

  4. Cliccare su 'Rimuovi Tutto'


Da ora potrete iniziare a leggere la vostra posta (leggasi Spam....) su hotmail.com

Fonte: macosxhints.com

Installazione gem mysql su MacOS X

Quando attivi Mongrel su una macchina MacOS X (Intel) puoi avere questo messaggio:

"WARNING: You're using the Ruby-based MySQL library that ships with 
Rails. This library is not suited for production. Please install the 
C-based MySQL library instead (gem install mysql)."


L'installazione corretta della gemma mysql è la seguente:

sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config -with-mysql-dir=/usr/local/mysql


domenica 13 luglio 2008

Caos!

Quando inizia a leggere qualcosa che ti appassiona la vedi ovunque, ma mai mi è capitato di vedere ovunque il caos dopo aver letto il libro di Gleick 'Caos', dove con sobria semplicità spiega come è nata la teoria del caos e i suoi effetti.

Ogni giorno mi capita di vederne gli effetti, dai principi di autosomiglianza manifesti delle montagne, delle nuvole, delle mie vene, a come degli eventi distanti nel tempo non connessi tra di loro producono dei risultati assurdi (effetto farfalla, verificato sulla mia pelle!).

L'altro ieri un collega commentava un grafico sull'uptime di un server che sembrava difettoso. Con mia estrema sorpresa intravvidi uno schema simile alla polvere di Cantor nel grafico, stupefacente! Mandelbrot stesso pensò ad un modello matematico sugli errori di trasmissione nelle reti basato sul lavoro di Cantor. Vedere nella reatà tutto ciò è meraviglioso, affascinante.

martedì 8 luglio 2008

Essap 2008

Anche quest'anno a Varese si è tenuta la European Summer School for Agile Programming a Villa Toepliz, organizzata come sempre dai mitici Matteo Vaccari, Federico Gobbo e da quest'anno con Vieri del Bianco, i ragazzi di Agilmente e Andrea Gervasini.

Purtroppo per motivi lavorativi e non, non ho potuto partecipare all'evento, ma so che quest'anno gli organizzatori hanno sfruttato il know how pregresso e hanno fatto davvero un ottimo lavoro!

Complimenti a tutti ragazzi, continuate così!

Foto Evento 2008

Video sessioni 2008

Spero che nel 2009 sarò con voi....

giovedì 3 luglio 2008

Allevi e la sua evoluzione

Sto ascoltando ora l'eccellente cd di Giovanni Allevi 'Evolution'.

Rispetto al penultimo cd (Live), questo è stato registrato con maggiore cura. Live, che come si può comprendere dal nome è un disco registrato dal vivo, conteneva non solo rumori di fondo legati al pubblico dei teatri, ma anche certi fischi bassi e fastidiosi (se non ricordo male in 'Prendimi'), tantoché la prima volta che li sentii pensavo fossero i freni dell'auto nuova a fare i capricci...(non scherzo)

Le versioni sinfoniche di 'Prendimi' e 'Come sei veramente' sono all'altezza delle originali, la prima traccia del cd è un pochino deludente (sarò presuntuoso ma mi sembra che ci siano poche variazioni sul tema principale), '300 Anelli' e 'Corale' sono molto toccanti e 'Angelo Ribelle' è veramente emozionante, allegra e malinconica, un'opera in miniatura. Il resto delle traccie sono tutte geniali...

Un cd che si ascolta più che volentieri! Consigliato a tutti

UPDATE: dopo qualche ascolto... non so mi sembra molto "colonna sonora di un film di Hollywood"....

martedì 17 giugno 2008

Firefox Download Day!

Download Day - Italian

acts_as_nested_set e order by

In una mia applicazione stò utilizzando un nested set salvato su una tabella grazie al plugin 'better nested set'.

Non capisco perchè l'ordinamento dei nodi figli, che ho correttamente specificato dev'essere calcolato su un campo, non viene preso in considerazione.

Nel mio modello ho:
class NestedSurveyElement < ActiveRecord::Base

acts_as_nested_set :order => 'orderby ASC', :dependent => :delete_all, :scope => :survey_id

#........

end

Per ovviare temporanemente al problema, riordino l'array restituito dal metodo children() di acts_as_nested_set in questo modo:
children = root_element.children.sort_by{|c| c.order_field}

Purtroppo in questo modo aggiungo tempo di calcolo non necessario (anche se un ordinamento nel mio caso è piuttosto trascurabile ) al mio processo... ma per ora funziona...

sabato 14 giugno 2008

Anche i numeri sono sexy

In piena "crisi mistica" mi sono messo a sfogliare uno dei miei libri preferiti: Storia della Matematica di Boyer.

Comprai questo libro quando frequentavo ancora la terza superiore, all'epoca completamente ignorante in termini matematici. Perchè lo comprai? Ero certo che un giorno lo avrei letto, e forse anche compreso.

Non mi sono mai considerato un buon matematico, anzi non credo di aver mai avuto alle superiori più di un sei stiracchiato, quando andava bene. Eppure ne venivo attratto, affascinato, e stregato da quella materia che pareva tanto difficile. Qualcuno disse che a molti la matematica appare difficile perché non si rendono conto di quanto in realtà sia complicata la vita. (credo che sia stato von Neumann, qualcuno mi conferma/smentisce?).  Prendendo atto di questo mi sono messo a ri-studiare la matematica, senza i preconcetti di difficoltà imposti da altri. (in effetti credo che la vera difficoltà della matematica ci sia imposta da genitori, amici ed altri che non vedendola come qualcosa di pratico, la snobbano).

Ho incominciato con cose semplici, aiutandomi con le oramai indispensabili mappe mentali, dall'insiemistica ai numeri primi, cercando di imparare e capire le dimostrazioni, e non ragionando semplicemente per assiomi. Credo che la matematica vada vista così, non presa per oro colato, ma spulciata e assaporata. Ci viene insegnato da bambini, ma anche da ragazzi, che bisogna studiare per prendere buoni voti, e che se hai preso già un buon voto, ti dovrai sforzare per arrivare sempre più in alto. Questo è un concetto completamente errato. Sono pronto a scommettere che se chiedessi alla secchiona del primo banco a ragioneria che mi stava tanto sulle scatole di risolvermi oggi un'equazione semplice non ne sarebbe capace. Eppure il dieci in pagella lo aveva. Gli alunni devono imparare a studiare, e lo dico da primo interessato, per comprendere non solo le nozioni imposte, ma quelle che ci nascono dall'interno. Molti di coloro che smettono di chiedersi il perchè delle cose finscono in quel circolo vizioso che la società moderna vole costringerci a percorrere, seppur senza rendercene conto, per poi non accorgersi che il loro cervello si sta impigrendo talmente tanto che per soddisfare l'innato desiderio dell'uomo di conoscere, vanno a leggere riviste che, pur di essere vendute, pubblicano idiozie. Oppure si rivolgono alla televisione, diventando zombie. Nel migliore dei casi, sfruttiamo il poco tempo che il circlo malefico societario ci lascia, per dedicarci a qualche hobby costruttivo.

Ma è così che dobbiamo comportarci? Abbiamo a disposizione, ogniuno di noi, salvo eccezioni patologiche, una capacità di immaginazione e una capacità di elaborazione sconfinata, che si adatta in ogni momento. Possiamo viaggiare con la mente, trasformare pensieri in fatti, il tutto usando il nostro cervello. Possiamo imparare (che già di per sé è una cosa fantastica), effettuare scelte, e fare proiezioni nel futuro delle nostre azioni. Con questo non voglio dire che ognuno di noi deve comportarsi da scenziato. Ognuno di noi non deve mai smettere di chiedersi il perchè delle cose, rimanendo un po' peter pan, ma anche un po' Buck il cane del richiamo della foresta di J. London, cercando di staccarci dalla della socità, seguendo il nostro istinto naturare ad Imparare, a nutrire il nostro cervello.

Ho iniziato questo post parlando di Matematica e del libro che racconta la sua storia, vorrei concludere con un pensiero di Socrate (riportato nel Fedone di Platone) tratta da questo libro (p. 99), nella quale mi vedo e che mi piacerebbe condividere con chiunque passi di qui.
"Non posso sentirmi soddisfatto quando so che, se si aggiunge uno a uno, l'uno con cui viene fatta l'addizione diventa due, o che le due unità sommate insieme fanno due in virtù dell'addizione. Non riesco a capire come questo avvenga che, quando erano separate l'una dall'altra, ciascuna di esse era uno e non due, e ora, quando sono unite assieme, la loro giustapposizione o il loro sempice incontro debba essere la causa del loro diventare due"

Socrate, Platone e altri filosofi greci, che consideriamo dei grandi illuminari, rimanevano esterefatti da problemi che a noi appaiono semplici ("perchè 1+1=2" o "perche 2 x 2 = 4 e 2 + 2 = 4").

Chiedersi e chiedere il perché di cose in apparenza piccole o banali, non significa perdere tempo, ma significa, iniziare a pensare in grande.

---

P.S. Qualcuno si chiederà il perchè del titolo. Non sono pazzo, i numeri sexy esistono veramente, e sono una classe di numeri primi... ora non vi resta che andare a gustarveli cercando in biblioteca o su internet ... in this case google is your friend...

ciao Piero

mercoledì 28 maggio 2008

Il mio pomodoro

Scrivo questo post solo per farvi vedere qual'è il mio pomodoro:

Il mio pomodoro, ovvero il mio iPod Touch

in basso a sinistra, appoggiato alla docking station del ThinkPad del lavoro, c'è il mio iTouch con il timer partito.

Perché è lo uso? Si imposta facilmente, è comodo, ben visibile e leggibile e non disturba con il tikketio me e i miei colleghi.

(ps ho impostato apposta il timer a 17 minuti... non stavo pomodorando :D )

Update (nota di fine giornata): tenere i'Touch sempre acceso con lo schermo attivo e luminoso per otto ore... ciuccia la batteria quindi stasera niente musica in treno :( (fare lo sborone costa batteria...)

domenica 25 maggio 2008

SQL e la sua pronuncia

Per la serie 'maccheronic inglisc'.

SQL è una sigla che identifica lo Structured Query Language (Liguaggio di Interrogazione Strutturale). Come si deve pronunciare? Esistono diverse scuole di pensiero.

La prima è l'italianissimo ESSE-Q-ELLE (o esse-cu-elle), nulla da dire, siamo italiani, possiamo leggerlo nella nostra lingua.

La seconda, quella che viene considerata corretta, è lo spelling anglofono, ovvero [ˈɛsˈkjuˈɛl] (ES-KJU-EL)

La terza, la più comune che molti considerano sbagliata è un mix di italiano, inglese e tagalog (sull'ultima ovviamente scherzo): [ˈsiːkwəl] (SII-KJU-EL) che suona come Sequel (la continuazione di un film).

Questa pronuncia non è del tutto errata dato che in origine (1974/Laboratori IBM) SQL si chiamava SEQUEL! Il nome venne cambiato in SQL per motivi legali nella seconda release del lingiuaggio.

Conclusione? Chiamatelo come vi pare..

Ruby e Del.Icio.Us per Spotlight

Forse avrò scoperto l'acqua calda amici rubysti e maclover, ma questo importer/plugin per spotlight è veramente comodo.

Per chi fosse uno utente windows Spotlight è una utility straordinaria di MacOs che permette di cercare in pochissimi istanti un file, esso sia sul disco o sulla rete, basandosi non solo sul nome del file ma anche sul suo contenuto. L'indicizziazione avviene per una gran moltitudine di formati, dai semplici file di testo, alle mail, ai pdf, ai file OpenOffice/Office/iWork, ecc... (ovviamente questa cosa è stata mal copiata in windows vista)

Questo plugin permette di:

"Extracts metadata including modules, classes, methods, text and comments from Ruby scripts. Use Spotlight to search for every source file that references a particular class, or search for a comment you know you added to a particularly interesting method whose name you can’t remember." (apple)

Clicca qui per la pagina di download sul sito di apple

Se invece siete utenti dell'utilissimo del.icio.us esiste anche l'importer per la famosa piattaforma di shared bookmarking: Delimport

Ciao Piero

Esercizio con le mappe mentali (per tutti)

Cosa fare quando il sabato sera si è a casa influenzati? (troppa acqua presa in moto)

Ho deciso di fare una mappa mentale per descrivere ciò che faccio nella realtà e quello che vorrei fare. E' un esercizio che tutti potrebbero farsi, sia per analizzarsi, sia per imparare la tecnica delle mappe mentali.

Ho messo qualche BOIs di troppo (più di sette) ma credo che sia una buona mappa...

Who Am I - Mind Map

Ciao Piero

mercoledì 21 maggio 2008

Una shell Ruby

Per chi non seguisse la Mailing List nazionale di Ruby, un utente questa mattina ha segnalato l'esistenza di rush, una shell unix con sintassi Ruby.

Dedicata ai ruby-maniacs e ispirata alla M$ PowerShell di .NET utilizza il paradigma object oriented come punto di forza nella sintassi.

L'ho subito provata, mi è sembrata un po' scomoda (ad esempio non si ha il concetto di CWD, che viene rimpiazzato da una istanza di un oggetto directory che possiede i metodi classici tipo 'ls').

Questa shell potrebbe essere molto comoda da integrare nella console Rails o in Capistrano...

La potete installare come gemma seguendo le istruzioni su

http://rush.heroku.com/

e leggere una migliore recensione su infoQ

http://www.infoq.com/news/2008/02/rush-oop-shell

lunedì 19 maggio 2008

Lotus Notes 7, Ubuntu 8.04, Firefox 3

Se avete i Ubuntu 8.04 (quindi anche firefox 3) probabilmente non riuscirete ad installare Lotus Notes 7 a causa dell'errore “Could not validate mozilla version” / "Impossibile convalidare la versione di Mozilla"

Questo a causa di un bug dell'installer che genera un script bash che controlla la versione e le dipendenze corrette delle librerie GTK/XulRunner/Mozilla. Per ovviare a questo inconvegnente ho utilizzato un workaround, non molto elegante, ma funzionante.

Ecco come funziona l'installer:

1) L'installazione di notes avviene normalmente nella cartella /opt da utente non root

2) L'installer scrive il file il risultato del comando ldd (che controlla le dipendenze) in un file temporaneo (/tmp/iwcttmp.out)

3) L'installer controlla il risultato in iwcttmp.out e fallisce (non ho capito perché, ho sclerato un paio di ore con strace ma niente da fare...)

Ecco come ho installato notes:

1) Ho eseguito da ROOT il comando

ldd "/usr/lib/mozilla/libgtkembedmoz.so" | grep gtk>&/tmp/iwcttmp.out

in questo modo l'utente normale non avrà i permessi di scrittura su quel file quindi non potrà rigenerarlo

2) Si può ora eseguire l'installazione di Lotus Notes 7 (da utente non root) tranquillamente!

Non sarà una soluzione elegante.... ma funziona...

Ciao Piero

UPDATE: Sembra che questo 'trucchetto' abbia funzionato solo sulla mia macchina, in un altra il problema è persistito.

venerdì 16 maggio 2008

NoMachine e aggiornamento ssh

Recentemente è stato scoperto un baco nel pacchetto Debian (e ubuntu) di ssh dovuto ad un packager che ha commentato due linee di codice nel sorgente del generatore di chiavi. Se avete aggiornato il vostro server se chiavi ssh saranno state rigenerate, facendo scadere vecchie chiavi salvate sui client.

Per una sessione ssh "normale" è sufficiente eliminare (o modificare) sul proprio client il file ~/.ssh/known_host che verrà rigenerato alla prima connessione.

Se avete NoMachine come client X (una X-client molto comodo per gestire le sessioni sui server in modo simile a RDP di Windows) dovrete aggiornare le chiavi sul server anche nella cartella home di NX.

1) eliminate il file  known_hosts di NX: "sudo rm /usr/NX/home/nx/.ssh/known_host"

2) copiate la nuova chiave ssh nella cartella home di NX: "cp /etc/ssh/ssh_host_rsa_key.pub  /usr/NX/home/nx/.ssh/known_host"

3) That's all!

mercoledì 2 aprile 2008

Mappe mentali... anche nei db!

Oggi ho dovuto effettuare qualche lavoro di aggiornamento su un database, utilizzando delle query - per me - piuttosto complesse dal punto di vista logico.

Per organizzare il lavoro e pensare ai risultati aspettati, mi sono preparato una mappa mentale delle tabelle e delle procedure in questione, utilizzando diversi simboli grafici per dare un significato istantaneo alle tabelle. Il risultato? Ora il db mi è molto più chiaro e qualla parte di lavoro è stata effettuata correttamente.

Per me, questa è una dimostrazione della flessibilità delle mappe mentali e del radiant thinking, tecnica molto ben spiegata nel libro 'Mappe mentali' di Tony e Barry Buzan.

E' molto importante associare un simbolo grafico ad un elemento testuale di una mappa, per me questo è stato un passo piuttosto difficoltoso, anche perchè ero convinto di non avere nessuna abilità grafica, ma con l'esercizio mi è stato possibile migliorare anche sotto questo aspetto. Oltremodo mi è stato utile fare 'mindmapping' a mano piuttosto che con software come FreeMind. Sebbene il computer sia più semplice da usare e permette correzioni più veloci, non mi consente di esprimermi al meglio: se voglio fare uno scarabocchio con la matita per indicare movimento o una azione nel tempo il foglio di carta è sempre il più indicato... quindi armiamoci di un bel bloccone di carta bianca (non quadrettata) e di qualche pennarello colorato e alleniamo e istruiamo le nostre sinapsi con le mappe mentali!

lunedì 25 febbraio 2008

Ottenere la revisione SVN nella vostra applicazione Rails

Se volete stampare il numero di revisione della vostra applicazione Rails su una pagina potete fare come segue:

  1. Aprite il file config/environment.rb

  2. Aggiungete questa linea
    "MY_APP_REVISION = %x[(cd "#{RAILS_ROOT}" && svn info | grep Revision | cut -c 11-)].strip"

  3. Salvate e aprite la view dove volete visualizzare il numero di revisione

  4. aggiungete la linea "<%= MY_APP_REVISION %>"


Il comando funziona come segue:

  • %x[] è simile alla funzione system() di ruby e permette di eseguire un comando in una shell e catturarne l'output

  • tutti i comandi sono rinchiusi all'interno di due parentesi tonde in modo da aprire una nuova shell esclusivamente per questo comando

  • prima mi posiziono della directory principale di rails, se ho successo, lancio il comando 'svn info' che mi ritorna tutte le informazioni sul mio repository svn

  • redirigo l'output a grep che mi filtra le linee contenenti la parola 'Revision' (in questo caso una sola), otterrò così la stringa 'Revision: 580'

  • redirigo di nuovo l'output ('Revision: 580') al comando cut che taglia una stringa. I parametri passati a cut sono '-c 11-' ovvero taglia dal carattere 11 fino al termine della linea

  • L'output ottenuto da %x[] sarà una stringa terminata da 'n', per eliminare il carattere di fine linea utilizzo il metodo standard della classe string strip().


Naturalmente questo tip funziona solo su sistemi unix-like

Ciao Piero

mercoledì 20 febbraio 2008

Sessioni vecchie e Rails 2.0

Se stupidamente, come me, avete utilizzato le sessioni nella vostra WebApp memorizzando molto più che lo stretto necessario avrete qualche problema con Rails 2.0 ricevendo errori di Cookie Overflow.

Infatti di default Rails 2.0 utilizza CookieStore per salvare le sessioni limitando così a 4Kb la dimensione massima della sessione. Per 'tamponare' questo problema potete tornare ad utilizzare il vecchio metodo di Rails 1.x: PStore.

Modificate il vostro file config/environment.rb e aggiungete questa linea:

config.action_controller.session_store = :p_store

e tutto tornerà a funzionare come prima.