martedì 23 dicembre 2008

_

Non sento il Natale. Sarà il troppo lavoro, quest'anno ho sdato veramente, sarà la crisi, sarà che quest'anno ho saltato tutte le fanta-cene-aziendali; comunque, non sento il Natale.
Sarà che sono passati sei anni. Sono già passati sei anni...
questa sera suonerò qualcosa.

mercoledì 26 novembre 2008

Opportunità

La grande crisi ha colpito anche noi. Prima o poi doveva succedere. Ma non sarà - spero - un disastro. Anzi: sarà una nuova, grande opportunità.
L'eco sistema dell'information tecnology torinese è scosso; da un decennio si soffre, e in dieci anni ho maturato delle ipotesi relative a questa interminabile crisi.
Il prodotto informatico medio è di scarsa qualità, è troppo costoso e non mantiene valore nel tempo; le aziende consumatrici di software sono quindi sempre meno propense ad investire capitali per prodotti meno che eccellenti, anche se spesso il ROI di una soluzione software ne copre interamente le spese.
Il punto è che la percezione che il consumatore (azienda) ha del software è di un prodotto costoso, inaffidabile e di difficile manutenzione.
Solo i prodotti affidabili, performanti, e che si evolvono facilmente nel tempo (mantenendo insieme a queste caratteristiche qualitative anche un costo allineato a quello della concorrenza), potranno offrire un valore aggiunto; e dalla crisi, l'opportunità: investendo in tecniche, metodi, risorse e quant'altro possa essere utile allo scopo, i produttori di software di qualità consolideranno il loro mercato, conquistando anche gli spazi lasciati vuoti dai produttori di sw scadente. E presto, quando il rapporto tra domanda e offerta si sarà nuovamente equilibrato, ci sarà un grande, lungo periodo di prosperità. E io poggerò nuovamente le chiappe sul sedile in pelle di una Maserati.

giovedì 30 ottobre 2008

martedì 28 ottobre 2008

HD Utils

Tra ieri ed oggi ho avuto qualche piccolo problemino con alcuni HD... fortunatamente un paio di utility mi hanno consentito di uscirene indenne:
"DiskPart": da linea di comando di windows xp, utility per la gestione delle partizioni
SpeedFAN: permette di monitorare i parametri S.M.A.R.T. dei dischi.

mercoledì 22 ottobre 2008

Scrivere NTFS da Mac

OS X può leggere i filesystem NTFS, ma non può scriverci...
Veloce ricerca sul web, e trovo:
Paragon NTFS for Mac OS X: 10 giorni di trial, $39.95.
Scartabello ancora un po' e trovo su Google code MacFUSE, che come effetto collaterale (!!!) aggiunge il completo supporto ad NTFS (lettura+scrittura): occorre soltanto installare NTFS-3G, e il gioco è fatto!

lunedì 13 ottobre 2008

Sistemi Operativi

Utenti Windows, fedelissimi Mac o Linux geeks?
In questo periodo sto utilizzando tutti e tre i sistemi (Win XP SP2, Mac OS X 10.5.3, Ubuntu 8.04.1) .
Windows XP è flessibile, non ha nessun problema di funzionamento con l'hardware, ha drivers maturi e stabili e può vantare una marea di software - gratuito e non - a sua disposizione; se configurato con attenzione può offrire notevoli performance, ma in un utilizzo general purpose paga il peso del registry e degli indispensabili firewall ed antivirus. Il mio portatile impiega minuti, parecchi, a bootstrappare; inoltre la user experience non è memorabile, anche se oramai mi sono abituato alle shortcuts e sono quindi molto produttivo - da questo punto di vista Windows XP paga la sua vecchiaia. Un'altro punto debole è la gestione del file system, degli applicativi (installazione e disinstallazione), la mancanza di un sistema di backup intelligente integrato; ma grazie a software di terze parti, è possibile comunque ottenere un sistema fruibile e ben strutturato.
Ubuntu 8.04.1 è notevole: ottimo supporto dell'hardware (anche se non perfetto al 100%), continui aggiornamenti, ma sopratutto un'interfaccia utente (anzi 2!) notevoli, ed una semplicità di gestione delle configurazioni eccezionale. E' un prodotto maturo, ed il vantaggio di essere gratuito è un plus non da poco.
Purtroppo non tutto il software di cui ho bisogno (in particolare applicazioni legate al mondo della produzione musicale) è disponibile per Linux, ma devo dire che negli ultimi anni i passi avanti sono notevoli! Quello che manca, è un ambiente di sviluppo RAD per C++ per applicativi Gnome maturo e stabile - per quanto riguarda Java, Netbeans e Eclipse sono invece quanto di meglio si possa chiedere; ma per un utilizzo general purpose domestico o soho (web surfing, office, multimedia) è eccezionale! Uno dei suoi punti di forza è secondo me Compiz, che se utilizzato come si deve aumenta la produttività e la user experience - un passo avanti rispetto a Win, decisamente. Inoltre la gestione degli aggiornamenti e dell'installazione degli applicativi è... commovente. Anche se però occorre essere connessi in Internet.
Mac OS X: quello che mi ha impressionato è stata la velocità. Veramente notevole, il più veloce tra i tre sistemi, di gran lunga. Interfaccia utente splendida, una volta abituatisi alle nuove short cuts la produttività si esprime ai massimi livelli; ma quello che è più intrigante è la maniera in cui la macchina risponde alla volontà dell'utente, coccolandolo con effetti grafici ben centellinati e sopratutto con una responsiveness che nè Windows nè Ubuntu riescono a raggiungere; gli applicativi vengono installati semplicemente trascinandoli nella cartella delle applicazioni, e la disinstallazione è altrettanto semplice; ovviamente il maggior difetto è legato al costo: ci sono pochi software gratuiti per Mac, inoltre l'hardware costa parecchio.
Qual'è il migliore tra i tre? Non saprei proprio... ma del resto perchè scegliere, quando si può avere tutto?

giovedì 9 ottobre 2008

domenica 21 settembre 2008

Misure senza precedenti per affrontare una sfida senza precedenti

Leggi questo articolo

Un'articolo interessante, che tra l'altro sottolinea con quanta facilità gli americani (e anche una buona parte degli italiani) vengono presi per il culo. Più ci penso e più mi cascano le palle...

mercoledì 3 settembre 2008

Google Chrome

Il nuovo rivoluzionario browser di Google.

giovedì 17 luglio 2008

Touch the future

The iPhone has a 3,5" touch screen, an accelerometer, a proximity sensor, a light sensor... and a impressive user interface.
In the near future I expect to see some innovations in computer interface devices too; years ago Octopus and I were trying to design a user interface for computer aided software design based on a virtual glove (such as this one) with very poor results, but touch screens at a low cost and multi touch tecnology could be the real great innovation in user experience.
Right now these tecs are focused in daily use PIM apps (and devices) but we'll surely soon see innovations in technical applications too: technical modeling and designing, web navigation, and so on, but the most interesting evolution from my point of view will be in software developement tools: new user interfaces will drastically improve object oriented software design, with the result of better software produced in less time.
It could be an interesting challenge to design some innovative IDE focused on Object Oriented design, design pattern usage, GUI design, all running on a 3D environment with multitouch screen interoperability functions: and IDE focused on the structure of the software with less new and more re-used code, template/pattern based code writing assuring more quality. And far more fun.
Wanna write sw with an iPhone instead of a mouse ;)

mercoledì 2 luglio 2008

Logging enter/exit into/from methods or functions

Just as easy as (and same principle of) Synchronizing in the previous post:

class MyMethodLogger
{

std::string _methodName;

public
:
MyMethodLogger(const char *methodName):
_methodName(methodName)
{

log << "Entering method " << _methodName << std::endl;
}
~
MyMethodLogger()
{

log << "Exiting method " << _methodName << std::endl;
}
};


Very easy to use: just instance a MyMethodLogger as the first instruction in method body:

void method()
{


MyMethodLogger("method()");
...
}


At the end of the method execution (of after an exception throw) the destructor of MyMethodLogger will trace the exit from the method.

giovedì 26 giugno 2008

Synchronized in C++

Una semplice idea per implementare qualcosa di simile alla synchonized di Java in c++:
definiamo una classe base Synchronizable:
class Synchronizable
{


friend class
Synchonizer;

CCriticalSection theLock;
/* O qualunque implementazione di un oggetto del genere fornito dalla libreria */


protected
:

void
Lock() { theLock.Lock(); }
void
Unlock() { theLock.Unlock(); }

};





e poi una classe Synchonizer:

class Synchronizer
{


Synchronizable *s;
public
:
Synchronizer(Synchronizable *_s): s(_s)
{
s->Lock(); }

~
Synchronizer() { s->Unlock(); }
};



A questo punto, sarà possibile implementare delle classi derivate da Synchronizable, e laddove si vogliano sincronizzare le funzioni membro basterà:

void MyClass::doSomething()
{


Synchronizer s(this);
.....
}




All'uscita dal metodo (sia attraverso una return che a fronte dell'innalzamento di un'eccezione), il distruttore di s effettuerà l'Unlock.
Inoltre è possibile usare questa tecnica anche all'interno di scope diversi dal corpo dell'intero metodo:

void MyClass::doSomething()
{
...
{


Synchronizer s(this);
// questo scope è in critical section
....
}
...
// qui siamo fuori dalla cs
}



Ovviamente questa tecnica non impedisce l'utilizzo "manuale" dei metodi protetti Lock() e Unlock()...

mercoledì 18 giugno 2008

Wine 1.0

Il Wine team è felice di annunciare la versione 1.0 di Wine! Dopo 15 anni di sviluppo ora abbiamo la prima stable!
Su http://appdb.winehq.org c'è una bella listona degli applicativi funzionanti.
Mi aspetto che anche ReactOS faccia un bel salto in avanti...

martedì 17 giugno 2008

Rage live in Modena 2008


C'ero anch'io!
Fantastico... veramente grandi!
Cazzi vostri che ve lo siete persi! ahahahh

lunedì 2 giugno 2008

Energy saving computers

Sembra che il tema dell'anno, almeno per quanto riguarda il settore IT, sia il risparmio energetico; non si fa altro che parlare di server ad alta efficienza, CPU a basso consumo, addirittura qualcuno introduce il software che fa risparmiare energia (ho letto di un deframmentatore per windows che a detta dell'azienda che lo commercia, consente un risparmio energetico per grosse infrastrutture IT ottimizzando l'accesso al disco..).
Salvo poi vedere obbrobrietà tipo aziende che allestiscono "sale server" in cui stivare un mobile rack con 2 o 3 macchine server ultra-striminzite da 10k euro (di cui 3k solo per l'ingenierizzazione dei flussi di raffreddamento) e poi montare un mega impianto di climatizzazione... alla faccia del risparmio! Metti 3 server con tradizionali case tower sparsi per gli uffici sfruttando la climatizzazione degli uffici stessi, e valuta poi il risparmio energetico...
In ogni caso, interessante questo post sul formum di HWUpgrade: come dotarsi di un "mulo" da tenere acceso 24/7 selezionando componenti a basso costo-consumo-rumore.
E poi qualche componente:

Il futuro è nell'uso responsabile, intelligente ed efficiente dell'energia. Amen.

venerdì 30 maggio 2008

Il pattern "catena di montaggio"

Applicabilità:


quando a fronte di una sorgente di dati più o meno complessi, occorre effettuare una catena di operazioni condizionate dal contentuto degli eventi stessi, operazioni che possono anche essere condizionate l'una dall'altra rispettando però la sequenza temporale. La catena di montaggio può prevedere instradamento multiplo per il prodotto in elaborazione, ed inoltre in macchine che dispongono di più unità di elaborazione, ogni stazione di montaggio può lavore su un Thread separato utilizzando il meccanismo del pipelining.

Struttura:


il pattern è composto da un oggetto "costruttore della catena" il cui compito è quello di assemblare la catena di montaggio, un oggetto "catena di montaggio" il cui compito è quello di eseguire il ciclo di montaggio, ed una sequenza di oggetti implementanti l'interfaccia "stazione di montaggio", che effettuano le operazioni necessarie per assemblare la soluzione finale.

Implementazione:


Stazione di montaggio
Una stazione di montaggio è un thread che effettua operazioni su dati prelevati da un unico input (una coda FIFO sincronizzata) e che può, in funzione del contenuto del dato da elaborare, instradare in output su una o più code il prodotto della sua elaborazione verso altre stazioni.

Catena di montaggio
questo oggetto si occupa dell'instradamento del "semilavorato" all'interno delle stazioni, fornendo la struttura, il percorso ed i meccanismi di trasporto dei semilavorati.

Costruttore della catena
Ovviamente questo à l'oggetto più importante: ha il compito di costruire la catena di montaggio, cioè interpretare correttamente la configurazione richiesta e posizionare le specifiche stazioni nell'ordine corretto. In questa situazione si può utilizzare un Factory Method delegando quindi alle implementazioni della factory la logica di assemblamento della catena di montaggio.

Un esempio


Ho utilizzato questo pattern per un applicativo di monitoring di una rete: ogni sessione di monitoring ha le sue caratteristiche particolari, per cui viene costruita una catena di montaggio ad hoc in funzione di una configurazione presente in un database; al passaggio di un pacchetto di dati, viene effettuata una sequenza di operazioni:

  • Calcolo di una funzione di valorizzazione di una parte del pacchetto determinata dal valore dell'intestazione del pacchetto e da dati contenuti nel DB

  • Aggiornamento di una cella di una tabella, la cui posizione e contenuto vengono calcolati dalla prima stazione di montaggio

  • Trace su un file in funzione dell'intestazione del pacchetto

  • Entry in un report HTML o XML

  • Aggiornamento di un grafico


Utilizzando la costruzione "al volo" della stazione di montaggio ho semplificato drasticamente il codice di interpretazione degli eventi, rimosso gran parte delle istruzioni condizionali e, cosa più importante, ho la possibilità di estendere a piacere le operazioni da svolgere al variare della configurazione.
Inoltre, utilizzando una catena di montaggio "multilinea", dove cioè gli eventi vengono instradati verso direzioni diverse ad ogni stazione, sono riuscito ad ottenere la variazione di comportamento in funzione dell'evento in modo molto semplice.

lunedì 19 maggio 2008

Sun catame lo strument!


"Mag-nifico!". Un piccolo gioiello di liuteria!
Un meraviglioso basso 4 corde fretless, manico in acero e wenge, tastiera in palissandro, corpo in frassino con un meraviglioso colore "natural", 2 pickups Bartolini, elettronica attiva, ponte in ottone, meccaniche Hipshot.
Detto tutto? Bhe.. no... manca il "suona da dio!"

lunedì 28 aprile 2008

Inheritance in SQL


While having a brief look at PostgreSQL, I saw a very interesting feature: table inheritance.
(Please refer to the documentation for a more precise description.)

This brilliant feature can lead to a very easy and efficient object to relational mapping!

venerdì 25 aprile 2008

Open source e modelli evolutivi

Ubik ha sollevato una questione molto interessante: ihho l'open source ha la tendenza a disperdere le energie piuttosto che concentrarle in una direzione vincente, nella misura in cui lo sforzo richiesto per la comprensione del sorgente di un prodotto non banale (per non banale intendo "grande") è a volte così elevato da scoraggiarne l'acquisizione, la customizzazione, e spesso succede che piuttosto di riprendere un'artefatto già esistente ne viene creato uno ex-novo; naturalmente questo porta ad un grande dispendio di energie intellettuali ed a una non-competitività dei prodotti open nei confronti dei prodotti closed.
Sono d'accordo, più o meno.
In passato ho letto alcuni cose interessanti inerenti la teoria dell'informazione e di come essa possa eventualmente essere estesa fino a far parte della grand unification theory; in particolare, in una visione olistica, di come l'universo abbia una ben delineata ed intrinseca tendenza evolutiva, che viene attuata attraverso una precisa strategia. Per semplificare, possiamo anche prendere in considerazione la "congettura evolutiva di Darwin" meglio nota come teoria dell'evoluzione: attraverso il randomico rimescolamento genetico, le specie evolvono per meglio adattarsi all'ambiente. O meglio, vi è una naturale tendenza delle mutazioni migliori a sopravvivere a discapito di quelle peggiori, e la conseguenza a lungo termine di questo cammino selettivo è l'evoluzione - ovvero l'orientamento delle strutture complesse verso un più efficiente ed economico sfruttamento delle risorse. Nonostante questo sia un processo tendenzialmente più dispendioso se relazionato alla soluzione idealmente ottima, credo che sia comunque il più efficiente tra i processi di evoluzione a lungo termine realmente attuabili, un pò come lo può essere un algoritmo dinamico se confrontato con un algoritmo greedy.
Questo approccio all'evoluzione delle strutture complesse può essere in qualche modo accostato allo sviluppo di software open source; se è infatti vero che la dispersione delle energie intellettuali porta un singolo progetto open più o meno lontano dalla più efficiente delle realizzazioni possibili, è altresì vero che a lungo termine, e per quanto riguarda l'intero insieme dei progetti, ci sia un'importante, ed innegabile evoluzione; inoltre, esattamente come l'evoluzione biologica si appoggia sulla diversificazione, anche lo sviluppo di software open promuove lo sviluppo di più di una soluzione a fronte di una specifica problematica: anche se questo può sembrare uno sperpero di energia consente comunque una maggior probabilità di sopravvivenza ad almeno una delle soluzioni (peraltro tipicamente vi è un travaso di tecnologia tra più progetti - in natura esiste un effetto assimilabile, il rimescolamento genetico - che consente alla singola sniplet di codice di persistere anche dopo la "chiusura" di uno dei progetti in cui viene utilizzata).
Considerando i fattori ambientali, culturali, e insomma le varie condizioni al contorno che condizionano lo sviluppo di software, imho il modello di sviluppo open - nonostante le sue dispersioni di energia intellettuale - risulta comunque il modello evolutivo che a lungo termine consente la "migliore evoluzione possibile".
Fattori ambientali e culturali? Si, mi riferisco in particolare alle capacità delle macchine, alle features dei sistemi operativi, alle tendenze tecnologiche e all'integrazione con l'ambiente operativo e con altri applicativi: tutti questi fattori spingono in direzioni precise i software, senza che necessariamente la direzione intrapresa sia quella che porta alla massima efficienza di un particolare applicativo; ad esempio credo che il vecchio M$ Office 2K sia una suite per ufficio veloce ed efficiente che sostanzialmente fa tutto quello che deve fare, mentre invece la nuova versione 2007 è enorme, lenta, e non da nessun vantaggio particolare (questo è un esempio di evoluzione verso uno stato peggiore), mentre la controparte Openoffice sta diventando un ottimo software: dove una volta era lento e pensante in fatto di richieste hardware, oggi è equilibrata e brillante, oltre a supportare standard aperti (e questo è invece un esempio di evoluzione verso uno stato migliore).
Concludendo, anche se di primo acchito può non essere vero per un sottoinsieme di progetti o in un ristretto frame di tempo, credo che l'open source offra un modello evolutivo efficiente in un'ottica a lungo termine.

lunedì 7 aprile 2008

Powua - Il supercomputer su Internet



E' con grande piacere che vedo realizzata la mia idea di virtual super computer!
Powua è una grid di qualche centinaio di processori accessibili tramite un'interfaccia remota (Java). Molto, molto interessante:
www.powua.com

giovedì 3 aprile 2008

Aforisma

Vi è una sottile bi-implicazione tra la definizione di un problema e la sua soluzione.

giovedì 27 marzo 2008

Make the computer give me answers

Dal brainstorm di Ubuntu escono idee spettacolari. In particolare questa:

Make a new application or improve Beagle, Tracker or Deskbar.

It do acronym lookups, math calculation, fact lookup, data generation, unit conversion, etc.

So that when I ask it something, it answers me.
RAM? = Random access memory
91*74-26 = 6708
Capital of Sweden? = Stockholm
22 inch in centimeter = 55.88 centimeter
chemical formula for water? = H2O
#0000ff = shows the color blue
01101000 01100101 01101100 01101100 01101111 = hello
68 65 6C 6C 6F = hello
Hello in Italian? = ciao
Time in Tokyo? = 19:46
Weather in Paris? = 7°C, sunny.
rot13 hello = uryyb

So right from the Deskbar (or something) on the desktop, I can ask something, and it will answer me.

mercoledì 26 marzo 2008

Open source e nuovi modelli di marketing

Parliamo di aziende produttrici di software. Piccole aziende. In Italia.
Parliamo di quelle micro realtà locali, fatte di giovani e promettenti tecnici che si affacciano al mondo dell'imprenditoria con prodotti magari eccellenti, ma che non riescono a ritagliarsi una fetta di mercato e cedono alle tentazioni della consulenza, finendo per vendere know-how e non prodotti.
Mi riferisco a tutto quel potenziale di creatività e competenza tecnica che non riesce ad esprimersi se non conformandosi alle esigenze di un mercato troppo dipendente dalle strategie di pubblicità e marketing, quindi svendendosi in consulenze che non rendono giustizia a idee troppo innovative, a tecnologie troppo avanzate: hey tu! si, proprio tu! sto parlando proprio di te... e di te... e anche di te!
E di me?

Sono rimasto colpito dalla recente acquisizione da parte di Sun di MySql, e dal nuovo modello di business che Jonathan Schwartz sta imprimendo alla Sun: sempre più prodotti open source, da Java ad OpenOffice, da NetBeans ad OpenSolaris, da SugarCRM allo stesso MySql: ma cosa ci guadagna la Sun da tutto questo software free? Una risposta viene dal core business di Sun, e cioè dall'offerta di soluzioni complete hw + sw per enterprise di fascia medio grande, soluzioni tecnologicamente molto avanzate ma ad un costo concorrenziale rispetto a quelle offerte da Microsoft o IBM.
Ed è interessante il fatto che Sun riesca a mantenere il focus sulla tecnologia, e non sul marketing, affidando quest'ultimo al fenomeno dell'open source. In pratica i prodotti si pubblicizzano da soli attraverso la loro eccellenza tecnologica e l'utilizzo che i responsabili IT ne fanno in quanto prodotti gratuiti; inoltre, grazie al contributo della community questi prodotti sono arrivati al punto di competere con i prodotti commerciali a livello di features (OpenOffice e MySql sono degli esempi lampanti), oltre ad avere qualche asso nella manica (aderenza agli standard, qualità, sicurezza).
Ma questo modello di business potrebbe essere applicato anche a realtà differenti?
Immagino uno scenario in cui un brillante sviluppatore mette in campo un software particolarmente interessante, ma senza avere le risorse per mantenerlo ne tantomeno pubblicizzarlo; dopo qualche operazione burocratica di copyright, apre un progetto open source, e con l'aiuto della community riesce ad arrivare ad una soluzione solida e funzionale. Nel frattempo la voce si sparge e molte aziende cominciano ad utilizzare questo software; pian piano il nostro sviluppatore comincia ad offrire consulenze alle aziende che utilizzano il suo prodotto ed entra nel turbinio di un circolo virtuoso: più il prodotto cresce, più aziende lo utilizzano; più lo utilizzano, più necessitano di supporto a pagamento; più business riesce a fare il nostro eroe, più cresce la sua piccola attività, e crescendo fornisce al prodotto software sempre nuova linfa.

lunedì 17 marzo 2008

db4objects: un db engine object oriented

db4objects è un engine db object oriented con doppia licenza (alla MySQL) disponibile in versione open e in versione commerciale ed è in grado di integrarsi con Java e con la piattaforma .NET.
Sembra disporre di tutto ciò che serve (transazioni, query language avanzato, sistemi per il supporto al refactoring) per lo sviluppo di applicazioni orientate ai dati di nuova generazione.
Staremo a vedere.

mercoledì 27 febbraio 2008

ReactOS su VMWare Player

"ReactOS® è un sistema operativo avanzato libero e di codice aperto che fornisce un implementazione completa di un sistema operativo compatibile con Microsoft Windows® XP. Gli obiettivi di ReactOS sono la realizzazione di una completa compatibilità binaria con le applicazioni e i driver di periferiche per i sistemi operativi NT e XP, usando un'architettura simile e fornendo un'interfaccia pubblica completa ed equivalente."

Fantastico.

"Run virtual machines on your Windows or Linux PC with VMware Player 2.0. This free desktop virtualization software application makes it easy to operate any virtual machine created by VMware Workstation, VMware Server or VMware ESX Server, as well as Microsoft virtual machines and Symantec LiveState Recovery disks. You can also use Player to evaluate one of the many virtual appliances available from the VMware Virtual Appliance Marketplace."

Ok, ora mettiamo le due cose insieme e....

venerdì 25 gennaio 2008

Null coalescing operator

Geniale, utile, elegante.

public static Singleton getInstance()
{
return theInstance ?? (theInstance = new Singleton());
}



Per il momento, disponibile in C# 2

martedì 22 gennaio 2008

Violare la legge di Amdahl?

La Legge di Amdahl pone un limite all'incremento di prestazioni di un sistema multiprocessore (nella sua versione generalizzata pone un limite all'incremento atteso di prestazioni di un sistema di elaborazione quando vengono migliorate alcune componenti dello stesso): in particolare (rimando al link su wikipedia le formulazze), se P è la porzione di calcolo interamente parallelizzabile, mentre S è la restante parte di calcolo non parallelizzabile, il fattore di incremento è uguale a (P + S) / ((P/N)+S) [dove N è il numero di processori] - ovviamente senza considerare l'overhead dovuto al parallelismo.
Questo è un limite deprimente, soprattutto adesso che i sistemi multiprocessore (o multicore) sono oramai ovunque (e sopratuttto a casa mia... ;)
Ed ecco quindi, prendendo spunto sopratutto da un fantastico post di Carlo, una piccola disserzione sulle strategie che si possono adottare per ottenere un incremento di prestazioni in qualche modo superiore a quello che potremmo attenderci con un approccio tradizionale; in particolare, (visto che è impossibile violare la legge di Amdahl) si può lavorare per ottenere il massimo incremento possibile spostando quanto più possibile il "lavoro" nellla variabile P:
  • Dove non è possibile parallelizzare un algoritmo, si può tentare di parallelizzare i dati
  • Dove non si può parallelizzare un processo seriale, si può "pipeline-izzare"
  • Dove non si può migliorare la performance, si possono introdurre nuove features sfruttando comunque il parallelismo e senza deteriorare le prestazioni
Se "lato server" è relativamente facile ottenere netti vantaggi dalla presenza di più unità di elaborazione, è "lato client", cioè per le applicazioni monoutente, che la legge di Amdahl pone seri limiti all'incremento di performance, e diventa veramente difficile ottenere dei vantaggi significativi.
A questo punto, è interessante il concetto di "velocità percepita", cioè la qualità di prestazione fornita dal computer percepita dall'utente. In questi termini diventa fondamentale il tempo di risposta ai comandi, il feedback fornito dal sistema, più che l'effettivo tempo di esecuzione dei job. In questo caso il fatto di avere più unità di calcolo potrebbe non tanto accelerare l'esecuzione di un processo quanto piuttosto dare la possibilità all'utente di continuare a sfruttare la macchina anche durante l'esecuzione di un compito pesante.

sabato 19 gennaio 2008

My new box


E' finalmente arrivata la mia ultima creatura: un case booksize contiene un Pentium E2140, 2Gb di RAM, un disco da 500Gb, e un DVD Lightscribe; la sk video integrata è una Intel GMA950.

E' la mia prima macchina only linux (per ora ho messo Ubuntu 7.10) e... funziona benissimo!
Pochissimo rumore, poco calore, prestazioni sufficienti; funziona persino il dongle Wi-fi della Netgear!
Al più presto installerò anche il software Lightscribe. Tra l'altro, il tutto con una spesa veramente ragionevole...

venerdì 18 gennaio 2008

Sun to Acquire MySQL


Leggo or ora la notizia...
Un bel colpo per Sun che integra nella sua struttura uno dei migliori DB open, un bel colpo per MySQL AB che si affaccia al tradizionale mercato ERP.
Solaris + ZFS + MySQL su hardware Sun: un ottimo prodotto per i partner Sun Italia ;)