Biagio Cosenza
blog
Archives - Previous posts

30 ottobre 2007




Il bivio di Ercole

Questo (forse) ultimo post è diverso dagli altri. Niente tecnicismi o teorie pseudo informatiche. Solo qualche riflessione su ciò che mi sta accadendo, sicuramente più interessante di quanto scritto finora.

Arrivano momenti in cui bisogna fare delle scelte importanti per la propria vita. Scelte cruciali. Di quelle che condizioneranno i tuoi prossimi 3, 5, 10 anni di esistenza.
Il bivio di Ercole.
Ci sediamo, seduti a riflettere, pensierosi, e non ci rendiamo conto che stiamo perdendo tempo, perché non sappiamo scegliere.
Rischiamo di fare, quindi, la cosa peggiore: una mezza scelta.
Tra lo scegliere se andare a destra oppure a sinistra, tra ambizione e denaro, tra cuore e ragione, facciamo la terza scelta, sicuramente la peggiore.

Mi ripeto questo discorso da molto tempo. Osservo molto quello che accade affianco a me, ai miei cari, ai miei amici e a conoscenti (non tanto amici). Ho imparato molto osservandoli in silenzio.
Il rimandare al domani, manifesto o celato, nasconde solo indecisione, staticità.

Credo di avere fatto una scelta. E forse, in realtà, l'ho fatta molto prima di quanto pensassi. Mi mancava solo il coraggio d'esternarla, la coerenza per attuarla.

Ora tocca trasformare questa scelta in decisione.
Percorrere la strada. Cambiare. E in silenzio andare.

Volontà e coraggio.
La volontà nel poter cambiare le cose. La volontà nell'affrontare le cose.
E il coraggio, quello vero. Quelle delle aquile, alte e solitare sul baratro. Quello senza testimoni.

***

Non so se aggiornerò ancora questo spazio. Forse non ha più molto senso, e probabilmente non ne ha mai avuto. Però non cancellerò il blog. E' il segno di un tempo che mi è appartenuto, di una strada percorsa tra mille bivi. Farà effetto rileggerli tra qualche anno, come il diario di un adolescente cresciuto un pò troppo in fretta.

Biagio


24 ottobre 2007

Ci siamo quasi...


14 settembre 2007


NP depth

Ultimamente ho ripreso a leggere questa interessante rivista pubblicata dal MIT. Ed ho ritrovato, tra i blog collegati, quello di Scott Aaronson.

Aaronson, professore al MIT, è un po una via di mezzo tra l'informatico e il fisico. Si occupa di complessità e quantum computing, un ramo di ricerca avvincente e nuovo.
Il bello del suo blog è che mescola concetti semplici di facile comprensione, a quelli tra i più profondi dell'informatica teorica e meccanica quantistica.

Tra i suoi ultimi post si trova questo pezzo, in cui dice del perché il problema P vs NP è il più profondo dei 7 (ora 6) proposti dalla Clay Mathematics Institute:

Apparently the mathematicians had to debate whether P vs. NP was “deep” enough to include in their list. Personally, I take it as obvious that it’s the deepest of them all. And the reason is this: if you had a fast algorithm for solving NP-complete problems, then not only could you solve P vs. NP, you could presumably also solve the other six problems. You’d simply program your computer to search through all possible proofs of at most (say) a billion symbols, in some formal system like Zermelo-Fraenkel set theory. If such a proof existed, you’d find it in a reasonable amount of time. (And if the proof had more than a billion symbols, it’s not clear you’d even want to see it!)
Da come la scrive, sembra una cosa ovvia.
A me sembra come quando qualcuno ti spiega un algoritmo. Ti sembra di aver capito, ma poi vai a scriverlo e non sai da dove cominciare.
Nel leggere il post di Aaronson immaginavo: "Ok, facciamo finta di avere un programma Black-Box che risolve efficentemente un problema NP, ad esempio 3-SAT. Adesso scriviamo un attimo un programma che cerchi tra tutti i teoremi di al più un miliardo di simboli, che utilizzi la Zermelo-Fraenkel Set Theory ..."


Se non sai spiegarlo, probabilmente non lo conosci a fondo.




PS bellissimo anche questo post: i 10 motivi per cui credere che P != NP

Etichette: , ,


21 giugno 2007

Seminario su Google Bombing

Venerdi si terrà un interessantissimo seminario tenuto dal prof. Vittorio Scarano.

Titolo
"Come bombardare un motore di ricerca: Google Bombing e PageRank"

Contenuti
Partendo dalla definizione di PageRank, l'algoritmo di ranking che (insieme a tantissime altre tecniche) viene usato da Google per rispondere alle milioni di query che il "popolo" di Internet fa, presentiamo una riedizione del "cat and mouse game" dove alle tecniche per inficiare i risultati di Google (Google bombing) vengono opposte delle contromisure, e cosi' via.. all'infinito
Cosa
Seminario IsisLab
Quando
28 giugno 2007 alle ore 12.00
Dove
Lab 10 Piano 2 (Fisciano)
Link
Isis Lab

Etichette: , ,


20 maggio 2007

I vantaggi del fare grafica...
La computer graphics è sicuramente uno dei campi più complessi è affascinanti dell'informatica.

Quando qualcuno ti chiede: "Fai grafica... che bello! E in particolare cosa?"
Rispondi dicendo: "Guarda, mi occupo di illuminazione globale con algoritmi di ray tracing, interactive ray tracing, usando strutture dati quali kd tree e grid per la gestione di scene dinamiche, il tutto su architetture parallele come multi core e cluster of workstation"

Ecco... credo che a questa risposta, con probabilità prossima a 1/3000, tutti argomentino: "Che stai a parlà elfico?" oppure "Non ho capito l'ultima dozzina di parole" o simili.

Però... in fondo in fondo, c'è sempre un sistema per far capire cosa stai facendo, pur trovandoti di fronte ad un inesperto totale: farlo vedere!



14 marzo 2007

Seminario su Ray Tracing su Architetture Parallele
Sabato ci sarà un seminario sul mio argomento di tesi all'Università di Salerno.
Contenuti
Illuminazione globale e ray tracing. Le componenti di un ray tracer: traversal, intersezioni, shading e frame buffer. Ray tracing su architetture parallele, dalle estensioni SIMD ai sistemi multi processori a memoria distribuita. Infine le problematiche e gli scenari di ricerca attuali legati al ray tracing.
Cosa
Seminario IsisLab

Quando
2007-03-16 dal 12:00 al 13:00

Dove
Lab 10 Piano 2 (Fisciano)

Contatto e-mail
biacos [at] gmail [dot] com

Etichette: , , ,


09 marzo 2007




Parallelismi nascosti

I nostri computer sono già architetture parallele. Probabilmente lo ignoriamo ma i processori attualmente in vendita hanno già un potente strumento parallelo: le istruzioni SIMD.

Secondo la tassonomia di Flynn, si tratta di istruzioni singole in grado di operare contemporaneamente su più dati. Di fatto sono istruzioni vettoriali presenti oramai in tutti i processori in commercio: i processori Intel (MMX, SSE2, SSE3, SSSE3, SSE4), gli AMD (3d Now), i Motorola Altivec.

Queste istruzioni sono lungamente usate nello streaming e nelle applicazioni multimediali, dove la loro applicazione è banale. Molto più difficile è pensare di utilizzarle nelle normali applicazioni di uso comune. Con queste istruzioni, ad esempio, è possibile eseguire 4 moltiplicazioni al costo di una (ovviamente sotto determinate condizioni).

I compilatori possono in qualche modo venirci incontro, utilizzando tecniche come il loop unrolling o il riordino delle istruzioni. Tuttavia queste tecniche sono piuttosto complesse da implementare (questo paper dell'ACM ne da una panoramica). Attualmente l'unico compilatore che le implementa seriamente è quello dell'Intel.
Inoltre solo il programmatore può essere in grado di gestire ottimizzazioni avanzate di alto livello, quali ad esempio l'allineamento della memoria (segnalo un interessante articolo al proposito).


Un ultimo esempio viene dalla computer grafica. L'utilizzo di tecniche SIMD nel ray tracing ha evidenziato un enorme aumento delle prestazioni. Queste ottimizzazioni si possono effettuare su quasi tutte le componenti di un ray tracer (intersezioni, traversal, shader), a dimostrazione di quanto il loro utilizzo possa essere applicato ovunque.

Certo, non vi aspettate di poterlo fare in Java!

Etichette: , ,


26 dicembre 2006


Ho sentito qualcuno sostenere che Homer Simpson è il più grande filosofo americano.
Guardate attentamente questa snapshot presa da una vecchia puntata.

Non solo è il più grande filosofo americano, ma a questo punto è anche il più grande informatico teorico!

Certo che Matt Groening fosse un appassionato di problemi NP... io non l'avrei mai detto!

Etichette: , ,


24 dicembre 2006


La rivoluzione parallela

Il 2006 è ormai finito ma sono già visibili i segni di quello che sarà un'enorme rivoluzione nel mondo dell'informatica per i prossimi anni: il calcolo parallelo.

Le architetture parallele, da sempre area di studio di accademici e grossi centri di ricerca, stanno arrivando su desktop e portatili.

Le cause sono molteplici.
Quella principale risiede nei problemi di sviluppo di macchine a processore singolo sempre più potenti. I limiti fisici ed economici legati alla costruzione di processori con più elevate frequenze di clock sembrano rallentarne lo sviluppo, tanto da poter invalidare la famosa e discussa legge epirica di Moore (a questa, probabilmente, mai nessuno ha creduto veramente).
La soluzione naturale è stata quindi lo sviluppo di sistemi paralleli, ed in particolare (e qui sta la novità recente), lo sviluppo di sistemi multi core.

Ma la vera rivoluzione non sta nelle architetture, ma nel software.
Lo sviluppo di software parallelo, negli ultimi 50 anni, è sempre stato rivolto ad architetture più o meno costose, affidate a centri di calcolo ed università. Dopotutto programmare parallelo è di gran lunga più difficile che programmare in seriale. E la maggior parte dei programmatori odierni non ha le conoscenze (e forse neanchè le capacità) di effettuare questo enorme passo in avanti.

Parallelizzare seriamente
significa reinterpretare un problema, studiando come e dove sfruttare la concorrenza, analizzando soluzioni legate al data parralelism e control parallelism, costringendo probabilmente a buttare nel cestino buona parte del vecchio software seriale.
Nuove problematiche si aggiungono a quelle già presenti nel sw seriale:
"Stiamo parallelizzando nel miglior modo possibile? Posso eliminare barriere e sincronizzazioni? E' possibile migliorare il load balancing tra i processori? L'hit cache ratio è ottimale? L'algoritmo è scalabile all'aumentare del numero dei processori?"
Per non parlare della comunicazione, del debugging, dei modelli di sviluppo, delle tecnologie ancora non sufficientemente standardizzate e di mercato.

Esiste poi la concreta possibilità di trovarsi di fronte a problemi difficilmente parallelizzabili, dove lo speed-up è minimo. Prendiamo ad esempio 2 algoritmi sui grafi da tutti noti: la BFS e la DFS. La BFS è facilmente parallelizzabile, mentre la DFS non lo è affatto!

Un altro esempio è il sorting: il miglior algoritmo di ordinamento seriale (senza ipotesi sull'input) è il quicksort. Ma il miglior algoritmo di ordinamento parallelo è il sorting bitonico, estremamente più complesso del quicksort.

Ancora un esempio: per risolvere un sistema di equazioni lineari viene comunemente usato il metodo di Gauss-Seidel. Tuttavia in una macchina parallela dove la comunicazione ha un costo elevato, viene preferito il metodo iterativo di Jacobi. Ma il miglior algoritmo per una architettura parallela risulta essere una combinazione dei due metodi!

Infine, parallelizzare per un sistema multi-computer (ad esempio un cluster of workstation) richiede approcci diversi rispetto ad un multi-processore o addirittura un multi-core.
Ma architetture ibride richiedono comunque approcci ibridi.

Ecco perchè questa è una vera e propria rivoluzione parallela, e ci vorrà del tempo finché si arrivi davvero a comprendere come sfruttare pienamente le macchine su cui lavoriamo.

Etichette:


16 dicembre 2006

Appena tornato dalla Patagonia Argentina, ritornando faticosamente al quotidiano (dopo 300 mails in inbox), mi trovo a leggere una bellissima intervista a Bjarne Stroustrup.

Questa è per me la parte più significativa:

"The idea of programming as a semiskilled task, practiced by people with a few months' training, is dangerous. We wouldn't tolerate plumbers or accountants that poorly educated. We don't have as an aim that architecture (of buildings) and engineering (of bridges and trains) should become more accessible to people with progressively less training. Indeed, one serious problem is that currently, too many software developers are undereducated and undertrained. Obviously, we don't want our tools--including our programming languages--to be more complex than necessary. But one aim should be to make tools that will serve skilled professionals--not to lower the level of expressiveness to serve people who can hardly understand the problems, let alone express solutions. We can and do build tools that make simple tasks simple for more people, but let's not let most people loose on the infrastructure of our technical civilization or force the professionals to use only tools designed for amateurs."


Potete trovarlo per intero a questo link
http://technologyreview.com/InfoTech/17868/page1/


28 ottobre 2006

Seminario sul Calcolo Parallelo
Presto un mio seminario in IsisLab di introduzione al calcolo parallelo

Una breve panoramica ai modelli per il Calcolo Parallelo, quali il message passing e memoria condivisa, le metodologie di design per la parallelizzazione di un problema, la comunicazione, i limiti e le implementazioni concrete dei modelli: Message Passing Interface e OpenMP. In conclusione alcuni esempi di applicazioni e un approccio combinato di parallelizzazione a due livelli con entrambi i modelli (OpenMP+MPI).

Cosa
Seminario IsisLab
Quando
2006-10-31 dal 12:00 al 13:00
Dove
Lab 10 Piano 2 (Fisciano)
Nome
Biagio Cosenza
Contatto e-mail
biacos [at] gmail [dot] com

Maggiori informazioni sul portale dell'Isis Research Lab.

Etichette: ,


23 settembre 2006


Introducing Hydra
Ecco una delle (poche) immagini di Hydra, il nuovo cluster in dotazione all'Isis Lab, sui cui ora sto lavorando.
Qualche caratteristica:
  • Server IBM di 3 Blade Center e 37 Blade Server
  • 38 macchine in parallelo collegate da una rete Gigabit da 1000 Mbit/s
  • ogni nodo di calcolo ha un processore Intel Xeon da 2,80 Ghz
    e doppio hard disk SCSI
  • sistema operativo Linux Red Hat Avanced Server
Costa circa 70 000 euro, e verrà usato per calcolo parallelo intensivo.
Utilizzeremo (almeno al momento) come piattaforma di sviluppo diverse implementazioni di MPI, quali LAM e OpenMPI.

Cercherò di aggiornare il blog con i nostri lavori e studi più interessanti.

Happy coding!

Etichette:


21 settembre 2006

Seminario sul Calcolo Parallelo
Dopo tanti seminari, finalmente il mio!
Cosa
Seminario IsisLab
Descrizione
Breve panoramica sulle architetture parallele, in particolare sui cluster di workstation per il calcolo parallelo e alla configurazione del nostro cluster, Hydra.
Quando
2006-09-22 dal 12:00 al 13:00
Dove
Lab 10 Piano 2 (Fisciano)
Contatto e-mail
biacos [at] gmail [dot] com
Maggiori informazioni sul portale dell'Isis Research Lab.

Etichette: ,


06 settembre 2006


Seminari all'Università di Salerno
Il prof. Ben Zhao e la prof.ssa Haitao Zheng (University of California, Santa Barbara) saranno in dipartimento (DIA) in visita il giorno 11 settembre. E' previsto un seminario alle ore 11.30 nella aula P18 (IV piano della sede della presidenza di Facoltà si Scienze Matematiche Fisiche e Naturali).

Ben Zhao si occupa di networking e sistemi Peer-2-peer. Tra l'altro, è uno degli ideatori di Tapestry, un famoso algoritmo P2P puro di nuova generazione, basato su ipercubi.

Haitao Zheng, invece, si occupa prevalentemente di Wireless e Mobile Computing.


Seminario di AT&T all'Università di Salerno
Balachander Krishnamurthy di AT&T Labs sarà in dipartimento in visita da oggi fino all'8 settembre. Il 7 settembre (domani) alle ore 11.30 nella aula P18 (IV piano della sede della presidenza di Facoltà) terrà il seguente seminario. Siete tutti invitati.

Titolo del seminario: "Cat and Mouse: Content Delivery Tradeoffs in Web Access"
Balachander Krishnamurthy, AT&T Labs--Research

Abstract: This talk examines extraneous material (e.g., advertisements) on Web pages that may be viewed as undesirable by some users and the increasing requirement to register before accessing a Web site. Users have predictably reacted to this by avoiding downloading and/or rendering of extraneous material and bypassing registration. Such tension between content owners and users hasresulted in a cat and mouse game. I will report on a recent measurement-based study characterizing the nature of extraneous content, manner of
distribution, its impact on performance as perceived by users, the effectiveness of blocking mechanisms, and attempts to circumvent registration. Preliminary results show that extraneous content exists on a majority of popular pages and that a 25-30% reduction in
downloaded objects and bytes with corresponding latency reduction can be attained by blocking such content. A majority of popular sites require some form of registration and they can be bypassed. I will discuss possible future stages in this cat and mouse game.


09 agosto 2006

Sun punta su Grid

Grid is a type of parallel and distributed system that enables the sharing, selection, and aggregation of geographically distributed "autonomous" resources dynamically at runtime depending on their availability, capability, performance, cost, and users' quality-of-service requirements [www.gridcomputing.com]



Sono notevoli gli sforzi e gli investimenti di Sun Microsystem su Grid.

Innanzitutto ha mosso una delle sue pedine più importanti: Jim Waldo (un guru: ha lavorato in HP sulla prima implementazione di un object broker CORBA e in Sun su Jini; consiglio vivamente di leggere il suo famoso articolo "Note on distributed computing", una perla di computazione distribuita, dove viene illustrata la "filosofia" del'"end-to-end argument").

A prova di ciò questo suo intervento su Artima, davvero illuminante, mostra il suo lavoro all'interno del progetto Neuromancer (tra cui l'esempio in cui un sistema software gestisce i sensori medici di 300 milioni di americani). E anche se non viene citata espressamente il termine Grid, siamo molto vicini alla definizione sopra.

Un altro fatto che mi ha sorpreso è stato l'uscita di Sun Grid Compute Utility: una libreria java che punta ad utilizzare la potenza di calcolo di enormi reti di calcolatori in maniera semplice, attraverso un approccio task-based. L'idea di Sun è quella di offrire un enorme rete di 5000 macchine (SunGrid) e poterla affittare su richiesta (i costi sono per processori per ora). Insomma, pensate che la potenza di calcolo diventi qualcosa di fruibile e utilizzabile nelle stesse modalità con cui usiamo energia elettrica.

A completare l'opera, Sun ha anche organizzato un developer contest con ben 50.000 $ di montepremi: Cool Apps Developer Contest.

Non c'è che dire... alla Sun in molti credono a questo progetto, e i soldi investiti lo dimostrano.
A me rimane un po di scetticismo su come convincere i centri di ricerca legati al calcolo parallelo intensivo, che poi dovrebbero essere i grandi utilizzatori di questa tecnologia, ad usare Java. Davvero qualcuno di loro rinuncerebbe all'efficienza di sistemi C-based (ad esempio MPI), per la facilità d'uso di Java?

Etichette: ,


27 maggio 2006







Gara di programmazione per studenti

Il CAD di Informatica dell'Università di Salerno indice una gara di programmazione tra gli studenti di Informatica. La gara si terrà nel mese di giugno 2006 e sarà strutturata come l'ACM Programming Contest. Per 'assaggiare' il tipo di problemi che si devono affrontare, e capire le regole di valutazione per i problemi, consigliamo http://acm.uva.es/problemset.
Mini FAQ

1. Cosa bisogna saper fare?
I partecipanti devono conoscere almeno un linguaggio tra C e Java. L'ambiente di lavoro sarà Unix. Padronza delle tecniche di progetto di algoritmi aiuta. Inoltre la conoscenza della lingua inglese è necessaria in quanto i problemi sono in inglese.

2. Quale è lo scopo di questa gara?
Per divertirci e cercare di vincere il primo premio (da definire). Inoltre, gli studenti che si saranno messi in evidenza faranno parte del pool di studenti da cui attingere per una futura squadra di UNISA per le selezioni europee dell'ACM programming contest.

3. Se volessi iniziare subito ad allenarmi?
Consiglio di iscriversi al sito http://acm.uva.es/ dove trovate più di 1500 problemi. Inoltre il sito permette di sottomettere per ciascuno problema la propria soluzione (sotto forma di codice C, Java, Pascal). Il codice viene testato su un test set segreto. Per ogni problema il sito mantiene una graduatoria (per tempo di esecuzione) di tutti i codici che hanno superato il test di correttezza.
Il libro Programming challenges di Steven Skiena e Miguel Revilla può costituire un valido supporto all'allenamento.
Ovviamente i due testi fondamentali per ogni programmatore C sono The C Programming Language di Kerningham and Ritchie e Programming Pearls di Jon Bentley.
I libri invece. Introduction to Algorithms di T.H. Cormen, C.E. Leiserson, R Rivest, C. Stein e The Algorithm Design Manual di Steven Skiena costituiscono un buon supporto per gli aspetti algoritmici della gara.
Infine il sito Top Coder può essere d'ulteriore stimolo.

4. Chi posso contattare?
Mandate un messaggio di posta elettronica al Prof. G. Persiano che è responsabile per l'iniziativa. L'indirizzo è sul web.

Tieni d'occhio libeccio.dia.unisa.it/ACM per ulteriori info.


28 aprile 2006


Eclipse Day at Università degli Studi di Salerno


Doug Tidwell, un Senior Software Engineer dell'IBM, verrà a Salerno per un workshop in cui illustrerà l'architettura di Eclipse e di vari utili plugins disponibili.


Ecco il programma dell'evento previsto il 3 maggio 2006 a Fisciano (SA), presso la facoltà di scienze matematiche fisiche e naturali (aule di informatica):

10:30 Welcome and University Relations introduction
10:40 The Italian Eclipse Community
10:50 Eclipse overview
11:00 Installing, running, and updating Eclipse
11:05 Java development with Eclipse, including Ant, JUnit, and Javadoc
11:20 Building graphical applications
11:50 Break
12:10 Extending Eclipse with plug-ins
12:40 Eclipse plug-in architecture
13:00 Lunch

Credo che valga davvero la pena dare un occhiata all'evento.
Io ci sarò sicuramente...

Happy coding!


19 marzo 2006

Java, sfatiamo un mito: System.gc().

E' recentemente apparso un interessante articolo su JavaWorld. L'articolo, disponibile a questo link parla di come si possa incorrere in memory leaks in programmi java, problema di indubbio spessore soprattutto se parliamo di applicazioni J2EE.

Sembra strano sentir parlare di memory leaks in java. Infatti anche gli ambienti che forniscono una gestione automatica della memoria non sono immuni a questo problema.

Secondo l'articolo citato, in java, è quanto accade quando:
  1. vengono manenuti riferimenti ad oggetti sconosciuti o non voluti, impedendone la garbage collection
  2. esistono oggetti statici o oggetti dal ciclo di vita lungo, come gli oggetti di sessione
  3. avvengono dei fallimenti nella deallocazione di memoria in metodi nativi (in tal caso, l'errore può stare nel codice C++ sottostante)
  4. bugs nell'SDK o in librerie (cosa vera per alcune vecchie implementazioni delle AWT, ad esempio).
Qui occorre però fare alcune precisazioni. Anche se i memory leaks rappresentano un problema, probabilmente è più importante preoccuparsi dei resource leaks, spesso collegati ai primi. In un ambiente distribuito mantenere delle connessioni inattive è certamente più costoso di un qualunque memory leaks.
Inoltre i 3 e 4, per quanto plausibili, risultano poco probabili in un usuale ambito J2EE.

L'articolo prosegue con come identificare memory leaks, l'utilizzo di profiler ed una carrellata di esempi su dove è possibile migliorare la gestione della memoria.

Arrivando alle conclusioni, si legge quanto segue:
"Even those objects that could have been potentially garbage collected may actually stay in memory for a long time. So explicitly cleaning the heap may be a mandatory programming requirement in some applications; doing so must be considered on a case-by-case basis."
Ebbene, questa è una grossa falsità!

Ripulire esplicitamente l'heap forzando la garbage collection è una storia non nuova, ma comunque una falsità. Molti sostengono che System.gc() fa questo, ma non è così.
Se si fa una ricerca su Google su cosa questo metodo faccia, ci si accorgerà che i 2/3 delle pagine trovate afferma questo.

Il metodo System.gc() è un suggerimento, non un comando. E dopo tutto non dovrebbe davvero essere altrimenti, se si segue la filosofia del "don't care about memory management".

Una minima interazione con la garbage collection è possibile nella 5.0, ma anche in quel caso l'interazione è limitata a suggerire alla macchina virtuale quali politiche di garbage collection siano migliori in un caso specifico (ma si tratta difatto di un tuning della garbage collection, e non di un effettiva interazione a run time).
Cercare ottimizzazioni di questo tipo in un ambiente la cui filosofia è "nessuno gestisca la memoria!", significa marcarne immediatamente i limiti.

Ho commentato l'articolo su Artima, e concludo con la stessa frase:
this is a little loss of "don't care of memory management" philosophy


03 gennaio 2006

C'est la vie

Gli informatici sanno essere spesso molto ironici. Quante volte vi sarà capitato di trovare frasi profonde o battute inaspettate nel mezzo del "How-to" di un programma? Guide introduttive, tutorial, descrizioni di API, perfino nel codice, si arriva a trovare un qualcosa del tipo:

// that's a funny method, isn't so?
Credo che da qualche parte ci sia scritto che obbligatoriamente chiunque scrivi una seria (o semi-seria) documentazione di un software, debba spezzare i toni con una battuta fuoriluogo.

"I conclude that... DUMB is the bestest music player in the world because... Complete this sentence in fifteen words or fewer... D'OH!"
[dalla guida di DUMB, una libreria C per player di MOD, sezione deprecated]
Immaginate poi cosa avrei mai potuto pensare quando sfogliando la licenza della stessa libreria mi sono trovato di fronte ad un'annotazione del genere:

[punto 4 della licenza GLP-like]
"4. If you are using the Program in someone else's bedroom on any Monday at 3:05 pm, you are not allowed to modify the Program for ten minutes. [This clause provided by Inphernic; every licence should contain at least one clause, the reasoning behind which is far from obvious.]"
Incredibile!

Ad ogni modo, finchè si da un occhiata a piccoli progetti, fatti da pochi simpatici programmatori, non credo ci sia da stupirsi più di tanto...

Ma immaginate qualcosa di grosso, ma veramente grosso. Immaginate per un attimo un azienda, anzi una multinazionale come la Sun. E poi pensate ad un qualcosa come le Java Collections API. Infine pensate ad un GURU della programmazione, dell'algoritmica e dell'ingegneria (...e di molto altro ancora) quale Josh Bloch.

Ebbene, se vi trovate per caso i sorgenti del SDK 1.4 di Java (per la 1.5 non ho ancora controllato...), package java.util, classe Arrays, riga 460.

Noterete subito che si tratta di una classe estremamente procedurale e ricca di codice praticamente identico. Ed ecco che anche lui, uno dei migliori al mondo nel campo, l'autore di un capolavoro di Design e pulizia qual'è appunto Java Collections Framework, eccolo commentare così quel codice così poco pulito:

/*
* The code for each of the seven primitive types is largely identical.
* C'est la vie.
*/
Ecco cosa intendo io per grande. Lui è davvero grande. E lo ha dimostrato anche con quel commento...

Quindi cari colleghi, che tra una riga di codice e l'altra vi preoccupate di un commento non proprio troppo ortodosso... fatelo pure, se l'ha fatto lui siete tutti giustificati...

c'est la vie!


PS
ho saputo che recentemente il mitico Josh Bloch ha lasciato la Sun per passare a Google. E' inutile dire quanto questa notizia mi rattristi, in quanto credo che la Sun aveva bisogno di persone come lui. Sono tuttavia felice che le sue abilità trovino sfogo proprio lì dove si fa un enorme esaltazione del talento, ovvero a Google.

Good luck Josh!


16 ottobre 2005

La stanza dei bottoni e i castelli di lego

Il modo di concepire le cose oggigiorno può essere ben riassunto con una famosa espressione del gergo informatico: "information hiding".
Sembra un paradosso: siamo nell'era dell'informazione, ovunque ed in ogni momento, in qualsiasi forma (e aggiungo, con qualsiasi qualità) e paradossalmene nell'era dell'"information hiding".

Tante informazioni... ma solo quelle superficiali. Non importa il dettaglio, le sottigliezze. Non badiamo più alla qualità di tali informazioni, né al contenuto.

Pensiamo un attimo alla romanzata figura del programmatore.
Non è più quella di un tempo, dello smanettone e cervellone che sa fare di tutto con il pc. Non è più il "programmatore/analista" (...ma si userà ancora?) esperto di matematica e formidabile in algoritmica.
No. Non serve.

Adesso va di moda il programmatore/operatore. La nuova moda in programmazione si chiama "programmazione come sequenza di click".
"Come si fa quella cosa?"
"Guarda è semplice! Basta usare questo programma qui, 2 click li per fare quello, altri 2 li per fare questo, e uno li per completare".

Non serve più neanche la tastiera, solo il mouse! Insomma un operatore alla Homer Simpson, seduto davanti alla stanza dei bottoni: a destra bottone per fare quello, a sinistra quello per la creazione guidata per fare quell'altra cosa, ... insomma la logica del basta che funzioni.

Nell'epoca del copia&incolla non solo si è persa l'originalità di un tempo, ma anche quella morbosa curiosità che faceva "diverso" l'informatico.
Manca quella curiosità che identifica i primi hacker (che in italiano andrebbe in realtà tradotto con il termine "smanettone")... quelli di un tempo, quelli veri!

Forse sono esagerato, ma divido il nostro mondo in due:
  • quelle che premono i bottoni
  • quelli che i bottoni gli smontano

I primi sono gli operatori. Il suo profilo standard è quello di uno che usa solo sw di alto livello, tool grafici, (praticamente tutti Microsoft), è un entusiasta di Bill Gates e programma prevalentemente in Visual Basic (anzi, programma in Visual Studio). Credo che Visual Studio sia un ottimo strumento, ma diamine, non stiamo forse esagerando. Rischiamo di arrivare ad un punto in cui chi usa questi strumenti non conosce neanche cosa faccia (...in fondo credo che ci siamo già arrivati).

Gli altri invece incarnano la curiosità morbosa degli hacker di un tempo. Provano, formattono, modificano, scassano. E poi provano, provano e provano ancora.

E' la categoria di chi giocava con i lego da piccolo sognando di costruire castelli.
Quella di chi ha letto più volte la scritta "kernel panic".
O quella di chi ha scritto il suo proprio worms (il giochino) in una settimana (o in una nottata).

Ecco la vera differenza. Da un lato la stanza dei bottoni, dall'altro castelli di lego: fantastici, enormi, colossali castelli di lego.

Che bei castelli che costruivo da piccolo, con i lego...


23 luglio 2005

Hello blog!
Ecco il mio primo blog di prova... e certamente non poteva chiamarsi diversamente!

Perdonatemi per la'eterogeneità dei contenuti, ma spero che almeno in un blog non venga richiesta troppa razionalità!

Trattandosi di è un weblog, quello che c'è qui dentro è per "quelli che passano".
Si tratta di opinioni, pertanto siete liberi di discuterle, approvarle o contestarle aggiungendo il vostro commento.

Un caldo saluto con la speranza che ci sia qualcosa in questo blog,
un post, un argomento, o anche una sola frase,
che vi stimoli e vi colpisca.