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 :   |  |  |

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 applicare i risultati già calcolati e verificare che nel frattempo un altro thread non ha cambiato le carte in tavola.


L'ho trovato descritto nel Portland Pattern Repository http://c2.com/cgi/wiki?OptimisticLocking e anche da Fowler http://martinfowler.com/eaaCatalog/optimisticOfflineLock.html

 

 

 

 Transazioni di compensazione

Questa idea arriva dai transaction processing monitor (come le Transactions e il DTC di COM+) e dalla teoria derivata dalle long running transaction, cioè lo studio delle caratteristiche di sistemi dove vengono rilassate alcune delle proprietà ACID delle transazioni.

L'idea è di spezzare il tempo di lock o di rendezvous in due parti in modo che una parte lunga di elaborazione che sta nel centro possa essere fatta senza lock o rendezvous. Se nella seconda parte l'esecuzione di controlli e veriifiche danno un risultato che invalida la prima parte, non essendo pià possibile annullarla (nel senso che nel fattempo quelle info sono state accessibili e potenzialmente giù utilizzate come buone da altri thread) si esegue una operazione uguale e contraria detta di compansazione.

Ho trovato qui una descrizione: http://en.wikipedia.org/wiki/Long-running_transaction

 


 Double-check 

Ossia il pattern del doppio controllo, uno prima di acquisire il lock o fare il rendezvous e uno durante a lock acquisito o a rendezvous in corso.   E' utile quando il più delle volte il controllo da esito negativo e quindi non è necessario proseguire e fare effettivamente lock/rendezvous.

E' anche un anti pattern perchè la sua applicazione risente fortemente della architettura fisica del processore e dal linguaggio e quindi il codice compilato funziona diversamente da quanto si creda.

 
E' descritto nel Portland Pattern Repository  http://c2.com/cgi/wiki?DoubleCheckedLocking  e anche in wikipedia http://en.wikipedia.org/wiki/Double_checked_locking_pattern  

Nel wiki di UGI http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternSingleton.html  è descritta una implementazione che tiene conto della architettura del processore e del linguaggio ed è garantita di funzionare correttamente.

 


 Read/write lock

Qui l'idea consiste nel permettere più letture contemporanee e invece restringere ad una scrittura alla volta riducendo di molto i casi in cui l'elaborazione di un thread resta bloccata in attesa che venga rilasciara un'istanza o in attesa dell'altra istanza produttore o consumatore con cui sincronizzarsi.

Anche questo è descritto nel Portland Pattern Repository  http://c2.com/cgi/wiki?ReadWriteLock  e in wikipedia http://en.wikipedia.org/wiki/Read_write_lock_pattern


 

Tags :  Progettazione Software |  

 

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 un thread con un compito differente (per esempio quello che esegue i comandi inviati dal client) corrisponde una classe differente. 

Quando ci sono più thread con lo stesso compito ci saranno più istanze dalla stessa classe di active object. La cosa può essere evidenziata con una classe Factory piuttosto che con una Singleton.

Ho trovato l'idea degli Active Object sia nei documenti del Object Management Group sul UML (in fondo a questa pagina c'è l'estratto sugli active object http://www-inf.int-evry.fr/COURS/UML/notation/notation8a.html ) sia nel Portland Pattern Repository (qui http://c2.com/cgi/wiki?ActiveObject)

Ad esempio ...

     una interfaccia IActiveObject con i metodi Run(), Cancel(), GetStatus() può identificare gli oggetti attivi di una applicazione

     il nome della classe può richiamare il compito del thread e può avere il prefisso active object e/o la dicitura singleton per marcare che di quel tipo nella applicazione cen'è uno solo

    la presenza di una classe omonima a un active object con il suffisso Factory può invece inidicare che thread con quel compito ce ne possono essere molti

tipo   ListenerSingletonActiveObject   e   ClientCommandsReceiverActiveObject   in coppia con   ClientCommandsReceiversFactory  

piuttosto che    Listener: ISingleActiveObject   e   ClientCommandsReceiver: IActiveObjects   in coppia con   ClientCommandsReceiversFactory : IActiveObjectsFactory  

Tags :  Progettazione Software |  

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 iTunesMusicLibrary.xml so after a quick edit all the playlists now are imported without errors.

 

Download (719 KB): LibraryXmlVerify v1.0 (beta) 

More infos on the iTunes music library file here Hacking the iTunes Music Library


Scaricalo e lancia il .bat dei test e se hai iTunes verifica lo stato di salute della tua libreria ... e segnalami eventuali bug ;-)

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 :

  1. Illusions of invulnerability creating excessive optimism and encouraging risk taking.
  2. Rationalising warnings that might challenge the group's assumptions.
  3. Unquestioned belief in the morality of the group, causing members to ignore the consequences of their actions.
  4. Stereotyping those who are opposed to the group as weak, evil, disfigured, impotent, or stupid.
  5. Direct pressure to conform placed on any member who questions the group, couched in terms of "disloyalty".
  6. Self censorship of ideas that deviate from the apparent group consensus.
  7. Illusions of unanimity among group members, silence is viewed as agreement.
  8. Mindguards — self-appointed members who shield the group from dissenting information.

 

Quando capita ecco dei suggerimenti :

  1. Leaders should assign each member the role of “critical evaluator”. This allows each member to freely air objections and doubts.
  2. Higher-ups should not express an opinion when assigning a task to a group.
  3. The organization should set up several independent groups, working on the same problem.
  4. All effective alternatives should be examined.
  5. Each member should discuss the group's ideas with trusted people outside of the group.
  6. The group should invite outside experts into meetings. Group members should be allowed to discuss with and question the outside experts.
  7. At least one group member should be assigned the role of Devil's advocate. This should be a different person for each meeting.

Fonte: http://en.wikipedia.org/wiki/Groupthink

 

 

Tags :   |  |  |  |  |