May 2008 Blog Posts

Spacchi pietre, sbarchi il lunario o costruisci cattedrali ?

( Gypsy di Susanne Vega : la notte è la cattredrale in cui si rivelano i segni del nostro destino ) Segnalo un articolo interessante : Stonecutters, Paycheck Earners, or Cathedral Builders?  Alcuni estratti “I’m cutting stone, what does it look like? I cut stone today, I cut stone yesterday, and I will cut stone tomorrow!” “I’m making a living for my family.” “I’m building a Cathedral!” . . . if a person is annoyed with his job, does he: Complain? He is probably a stonecutter. Ignore it? He is probably a paycheque earner. Fix it? He...

Progettazione di app. multi-threading: conclusioni

  Sviluppare applicazioni che leggono, scrivono, interrogano e modificano un database in modo concorrente è enormemente più facile che scrivere applicazioni multi-threading eppure le similitudini tra questo tipo di  applicazioni sono più delle differenze I libri, gli articoli e gli esempi di codice reperibili   si focalizzano   sui modi di implementare le primitive di locking e sincronizzazione tra hw, sistema operativo, framework e linguaggio, sulla correttezza di un meccanismo di locking o su come scrivere correttamente un algoritmo concorrente. In questa serie di post invece ho raccolto un repertorio di idee e riferimenti a beneficio della fantasia di chi progetta applicazioni multi-threading più semplici da capire ed...

Arte digitale e informatica - bis

  Queste librerie abilitano la comunicazione e l'interazione multi-canale Canale   V isivo:  Con la computer vision in real-time è possibile riconoscere oggetti, facce, gesti e movimenti acquisendoli da una varietà di telecamere digitali disponibili in commercio Con la image processing  è possibile riprodurre filmati e immagini rielaborate e alterare e con la grafica vettoriale creare animazioni grafiche 2D e 3D Canale  A uditivo E' possibile registrare, modificare, creare e riprodurre suoni         Canale  M otorio: Attraverso cui accettare input da un touch screen, muovere oggetti collegati al PC e farli interagire con il mondo esterno         E molto altro ancora         Gli skill utili  a un informatico vanno dalla programmazione object oriented e C++ all'utilizzo spinto di librerie esterne           Per modifiche ed evoluzioni...

Progettazione di app. multi-threading: pattern per il modello a sincronizzazione

Il modello a sicronizzazione è più semplice da disegnare, è sufficente individuare la terna  produttore, consumatore e risorsa e renderla evidente nel disegno.     La terna Produttore, consumatore e buffer  Il produtore e il consumatore possono ad esempio venire marcati con una interfaccia (es. IProducer e IConsumer) lo stesso vale per la risorsa che concettualmente si presta bene a essere considerata un buffer (es IBuffer). Il buffer segue comunemente il pattern del buffer circolare: http://c2.com/cgi/wiki?CircularBuffer mentre la sincronizzazione tra produttore e consumatore può avvenire secondo il disegno per pattern Observer o detto anche Publisher-Subscribers : http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternObserver.html Anche quando il buffer non c'è perché l'elemento...

Arte digitale e informatica

Incuriosito da questo post  e guidato dagli articoli di Simone su Processing  sono partito all'esplorazione dei software che vari artisti/designer di tutto il mondo hanno realizzato e usato  per plasmare delle opere d'arte interattive Delle varie sperimentazioni che ho visto queste 2 mi hanno intrigato parecchio : Funky forest, un ecosistema interattivo con cui giocare (qui il video Quick Time)   Delicate Boundaries, piccoli animaletti di luce escono dal video e camminano sulla pelle     Un incontro tra design e informatica nato da persone del mondo della creatività e dell'arte che ha attratto energie per realizzare tool e librerie software che rendono possibili cose altrimenti impensabili per tempi, costi e sforzi. Tags :  Creatività | Innovazione |

Progettazione di app. multi-threading: reagire al deadlock

  + Accorgersi del Deadlock Come accorgersi quando un deadlock è in corso ? Mantenere il grafo di allocazione dei lock sulle istanze man mano che vengono acquisiti a run-time e cercare cicli nel grafo è una possibilità ... che non viene quasi mai utilizzata. Quasi sempre si preferisce imporre un time-out nella acquisizione del lock a un'istanza. Quando scatta il time-out probabilmente è un deadlock. Ad esempio anche il Db Oracle fa cosi. L'istruzione per acquisire un lock con timeout in .NET è Monitor.TryEnter(istanza, timeout)   + Scegliere il time-out Se è troppo breve potrebbe scattare il timeout a causa di una operazione un po più lunga del...

Informatica materia viva per fare arte?

                            ...Pare che il software comincia a superare la soglia di tool a supporto di realizzazioni creative e comincia a diventare materia da plasmare per realizzare creazioni artistiche...   In vacanza, durante la visita a un museo di arte contemporane  ...   potreste all'improvviso sentirvi a casa vostra! prodigi da developer ;-)  -  http://www.jacksonpollock.org/  -  http://www.chrisoshea.org/projects/out-of-bounds/description/   Due software che vanno in questa direzione  Open Computer Vision Library  (anche per VC++ .NET) e   openFrameworks C++ library for creative coding (anche per visual studio).   Fonte: http://2005to2007.fabrica.it/blog/2008/04/shining_through_walls.html  http://www.fabrica.it/blog/2007/10/jackson_pollock_goes_digital.html Tags :  Creatività | Innovazione |

Progettazione di app. multi-threading: prevenire il deadlock

L'obiettivo è quello di far emergere dal disegno in modo evidente la politica di gestione dello stallo che si  vuole seguire e aiutare ad applicarlo in modo consistente in tutta la applicazione. Elenco qui un repertorio di pattern che trovo utili quando si implementa la strategia di prevenzione del deadlock [1].  Ordered Lock  Quando l'esecuzione di un metodo e la sequenza che segue di chiamate ad altri metodi richiede di acquisire più lock insieme, si previene il deadlock acquisendo sempre i lock con ordine dato (per esempio i lock su istanze della classe ServerListener vanno fatti sempre prima di quelli sulla classe ConnectedClient che...

Visualizza la blogsfera

  Dalla elaborazione dei dati sulla blogsfera nascono queste rappresentazioni grafiche dei dati : i nodi sono i blog e gli archi i link/referrals tra blog   E' una applicazione di data mining: http://datamining.typepad.com/gallery/blog-map-gallery.html Fonte: http://www.creativereview.co.uk/crblog/mapping-the-blogosphere/ Tags :  Complessità | Creatività | Innovazione |

Progettazione di app. multi-threading - altri pattern comuni

Proseguo col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i  modelli a competizione e a sincronizzazione. Quelli che hanno lo scopo di ridurre il tempo di lock di una istanza condivisa (= attraversata da più thread = i cui metodi sono richiamati da più thread) o la durata del rendezvous per una sincronizzazione tra produttore e consumatore.    Optimistick Locking L'idea è la medesima di quella usata con i db, cioè quella di fare le elaborazioni e i calcoli lunghi prima ancora di mettere i lock o avviare il rendezvous per poi poter essere velocissimi dovendo solo...

Progettazione di applicazioni multi-threading - pattern comuni

      Comincio col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i  modelli a competizione e a sincronizzazione.    Active Objects  pattern   Lo scopo è riconoscere quanti thread ci sono in una applicazione, distinguere i compiti di un thread da quelli di un altro e identificare come quando e chi crea nuovi thread. L'esecuzione di un nuovo thread ha inizio in active object.  Le istanze di active object sono in relazione 1 a 1 con i thread. A un thread con un compito (per esempio quello restare in ascolto delle richieste di connessone di un client) cnrrisponde una classe di active object, a...

iTunes Music Library Hacking

       After hard-disk crashed I tried to restore iTunes play lists to the brand new hard-disk importing the music library xml file (menu File, Import...) exported days before (menu File, Expert Library...) for backup.        Unfortunately iTunes Import command was not able to correctly import all the playlists: some track was silently discarged by the Import command (because some mp3 file now is on a different folder and because iTunes saved some mp3 file location with the wrong format).        So I wrote this small command line utility  LibraryXmlVerify.exe  that check an exported iTunesMusicLibrary.xml music library, verifies the file format and the location of the music files. LibraryXmlVerify.exe reported every error of the...

Resurce Oriented Architecture: il contratto

  Segnalo il post http://blogs.ugidotnet.org/PierreGreborio/Default.aspx   Tags :  | Progettazione Software |

Resource Oriented Architecture

Segnalo questo post molto interessante su Resource Oriented Architecture di Pierre Greborio che affianca al SOA un nuovo concetto architetturale: http://blogs.ugidotnet.org/PierreGreborio/archive/2008/05/10/92606.aspx Altri 2 link che mi hanno aiutato a capire: http://en.wikipedia.org/wiki/Representational_State_Transfer e http://en.wikipedia.org/wiki/Resource_oriented_architecture   Tags :  | Progettazione Software |

Groupthink

           Un indicatore importante in un team è che quando funziona ci si diverte - all'impegno che si mette segue la soddisfazione per le difficoltà superate A volte si può essere team, coesi, e ... Si chiama Groupthink e consiste nella perdita delle capacità critiche del team (leggi anche reparto o azienda) a causa della lealtà verso il team stesso.    8 indicatori : Illusions of invulnerability creating excessive optimism and encouraging risk taking. Rationalising warnings that might challenge the group's assumptions. Unquestioned belief in the morality of the group,...

Progettazione di app. multi-threading: modelli di programmazione

  Esiste una terza         metafora in base alla quale impostare il modello di programmazione        per la gestione della concorrenza: Il modello a monitor lo scopo di questo modello è sollevare il programmatore delle complessità legate alla gestione della concorrenza che invece viene lasciata al compilatore e al sistema che eseguirà il codice. 2 esempi noti sono il Single Thread Apartment del Visual Basic 6 e le Activity dei componenti COM+. Ma anche il Syncronize del Java e il MethodImplOptions.Synchronized di .NET.   Il modello...

Il primo computer fu meccanico, la prima programmatrice ... fu una donna!

Mi ha un po sorpreso ricordare che il primo computer fu meccanico e non elettrico. Blaise Pascal a 19 anni inventò e costruì una macchina meccanica che calcolava somme e sottrazioni. Era il 1642. In suo onore fu dato il suo nome al linguaggio di programmazione. Qualche anno più tardi W.B. Leibniz inventò e costruì una macchina meccanica che faceva anche moltiplicazioni e divisioni . Oltre a inventare il calcolo binario e preparae basi utili alla realizzazione della macchina di Touring. Solo 150 anni più tardi Charles Babbage costrui un macchina in grado di risolvere equazioni polinomiali e progettò una macchina meccanica programmabile dotata di memoria e...

Progettazione di app. multi-threading: modelli di programmazione

            La successiva scelta di progettazione da fare è su     la metafora in base alla quale impostare il modello di programmazione      per la gestione della concorrenza. Sono due le metafore più comuni, la prima è          il modello a sincronizzazione           in cui due (e più) istanze su due differenti thread si scambiano messaggi per coordinarsi nel fare i compiti/operazioni/calcoli necessari all'applicazione. Mentre l'altra è          il modello a competizione          in cui due (e più) istanze su due differenti thread competono per usare in modo esclusivo un'istanza che è in esecuzione su entrambi i thread (*). ...

Intelligenza collettiva, altre definizioni 3°

  Concludo la terna con degli esempi di varie forme di inteligenza collettiva: political parties, military units, trade unions, and corporations: __Queste 3 nuvole le trovo molto evocative Coordinazione ... immagino una figura di nuoto sincronizzato      Cooperazione ... immagino una touche del rugby, i piloni alzano il saltatore durante una touche            Cognition~Conoscenza ... immagino le conquiste appena consolidate e la nascita di nuove idee per il futuro durante una retrospective Fonte: http://en.wikipedia.org/wiki/Collective_intelligence  Tags :  Team Work | Complessità | Team | Conflitto | Negoziazione | Creatività | Team building |

Progettazione di app. multi-threading: obiettivi

 L a progettazione comincia con la scelta di un modello di programmazione della applicazione multi-threading da queste 2 cose: In che modo il disegno renderà riconoscibili gli oggetti che vengono eseguiti su/attraversati da più thread e avranno bisogno di una gestione della concorrenza? Una nota tecnica utile, la gestione della concorrenza serve quando thread diversi scrivono sullo stesso  field della classe oppure uno ci scrive e un altro ci legge. Queste sono chiamate le condizioni di Bernstein [1] Quale politica...

Alan Turing sulle ... Congetture

Una citazione di Alan Turing del 1950 « L'opinione popolare che gli scienziati procedano inesorabilmente da un fatto ben stabilito a un altro fatto ben stabilito, senza che intervenga mai l'influenza di una congettura non ancora provata, è del tutto errata. Purché venga chiaramente messo in evidenza quali sono i fatti provati e quali siano le congetture, non può risultare alcun danno. Le congetture sono di importanza fondamentale , dato che suggeriscono utili linee di ricerca. » Tags :  Team Work | Creatività | Innovazione |

Progettazione di applicazioni multi-threading

  L'obiettivo di progettare una applicazione multi-threading - oltre a garantire che funzioni correttamente - è di scriverla in modo comprensibile e che aiuta a modificarla e evolverla con tempi e sforzi sostenibili.  Facendo manutenzione e evolvendo l'applicazione mi troverò ad esempio a cercare risposta a domande come queste, e vorrò riuscire a farlo senza bisogno di sacrifici eroici : Sto aggiungendo una nuova classe all'applicazione, quanti thread avranno accesso contemporaneo all'istanza della classe? Sto modificando il metodo di una classe per aggiungergli chiamate a metodi di altre classi, dovrò aggiungere dei lock ? quali e dove ? ...

Intelligenza collettiva, altre definizioni 2°

  Ancora altre descrizioni-definizioni di intelligenza collettiva raccolte dalla rete : Collective intelligence , the most rigorous definition would require a capacity to respond to very arbitrary conditions without orders or guidance from "law" or "customers" that tightly constrain actions Fonte: http://en.wikipedia.org/wiki/Collective_intelligence Individuals who respect collective intelligence, say Atlee and Pór, are confident of their own abilities and recognize that the whole is indeed greater than the sum of any...

Nota: ricordarsi di deregistrare gli eventi... è importante!

Deregistrare un evento è una pratica poco pubblicizzata nonostante in alcune applicazione non farlo  provoca l'esaurimento di tutte le risorse disponibili. E' sufficente che una applicazione crei molte istanze di oggetti utilizzati per un tempo limitato durante il quale si registrano ad un evento. L'evento mantiene un riferimento ad ogni istanza e impedisce che venga rilasciata anche quando nella applicazione non c'è più nemmeno un solo riferimento a quella istanza. Tulle le risorse in ogni istanza (es. connesioni al db, thread fisici, memoria managed o unmanaged, file aperti in modo esclusivo, etc) restano allocate e inutilizzabili sino a quando l'evento stesso viene rilasciato (cioè quando l'oggetto che lo espone viene rilasciato)...

[OT] Il mantra del programmatore

Cayce Pollard in   L'Accademia dei Sogni    di Gibson ripeteva questo mantra per esorcizzare eventi spaventosi: si è preso un’anatra in faccia a 300 km all'ora ... si è preso un’anatra in faccia a 300 km all'ora ...   A scudo dalle deformazioni professionali dell'informatico ecco ... :D Il mantra del programmatore                 sono bravo anche quando non c'è nessun problema da risolvere                 non è un peccato essere felice                 quando faccio uno sbaglio divento più umano e simpatico                 sono unico per quello che sono, anche quando seguo una moda   Ripetere ad libidum e attenzione a trasformarsi in un commerciale :D http://it.wikipedia.org/wiki/Mantra