framework 4

L’insieme cellulare di Wolfram è servito: un programma educativo alla scoperta degli automi cellulari unidimensionali

Dopo i recenti articoli pubblicati Rendering grafico in GDI e WPF e Calcolo parallelo applicato agli automi cellulari ecco un video dimostrativo sul mondo cellulare di Wolfram.

Scritto in C# WPF (.NET Framework 4) e compilato con Visual Studio 2010, il codice sorgente e l’eseguibile sono scaricabili dalla pagina cellular-automata-world ospitata su google code.

Lo sviluppo del cudumar friulano procede spedito verso il successo!

Sono diversi mesi che seguiamo un progetto davvero interessante: cudumar-xmpp. Si tratta di un client XMPP gratuito, innovativo per la sua leggerezza e usabilità.
Nato in terra friulana da un anno e qualche mese, già si è inserito di gran prepotenza tra i client più utilizzati ed apprezzati.
Dopo una prima intervista di qualche mese fa, siamo di nuovo qui a dare la voce ad uno degli ideatori nonchè sviluppatori del progetto, in previsione dell’imminente rilascio della nuova versione del client:

Abbiamo lavorato moltissimo al supporto dello standard vCard, in modo tale da ottene informazioni sempre aggiornate dai propri contatti, visualizzarne avatar personali e impostandone di propri.

– commenta Daniele Tenero.

cudumar xmpp source code

cudumar-xmpp è sviluppato in WPF, C# .Net Framework 4

Il lavoro è stato svolto nel rispetto dei notri tre principi: leggerezza, stabilità, usabilità. Attualmente siamo in fase di test, abbiamo pianificato l’uscita della nuova release stabile a fine giugno 2012, vi terremo aggiornati!

xmpp sasl mechanisms source code

cudumar-xmpp supporta la maggior parte dei sistemi di autenticazione SASL utilizzati attualmente: ANONYMOUS, PLAIN, DIGEST-MD5, X-GOOGLE-TOKEN, X-OAUTH2, X-MESSENGER-OAUTH2, X-FACEBOOK-PLATFORM

Un’altra importante novità riguarda il supporto di nuovi meccanismi di autenticazione, per citarne alcuni: X-GOOGLE-TOKEN, X-OAUTH2, X-MESSENGER-OAUTH2. Soprattutto l’ultimo, il quale permette l’accesso al network MSN (Live Messenger) di Microsoft. In questo modo sarà possibile connettersi ad MSN anche senza il pesante e variopinto Windows Live Messenger.

Bellissima questa ultima notizia, è davvero emozionante che anche Microsoft si sia aperta a standard liberi come XMPP e che giovani friulani subito raccolgano questa opportunità per aprire nuovi orizzonti al proprio progetto.

Per finire, abbiamo l’onore di pubblicare in anteprima il changelog della prossima versione che verrà rilasciata il prossimo mese:
cudumar-xmpp changelog v0.0.3 #
- disco#info support (XEP-0030: Service Discovery)
- caps support (XEP-0115: Entity Capabilities)
- vcard-temp (XEP-0054: vcard-temp)
- vcard-temp:x:update (XEP-0153: vCard-Based Avatars)
- SASL X-GOOGLE-TOKEN authentication supported
- SASL X-MESSENGER-OAUTH2 authentication supported
- urn:xmpp:ping support (XEP-0199: XMPP Ping)

Da questa pagina ospitata su google code è possibile scaricare l’ultima versione e i “source code” del progetto: download cudumar-xmpp.

Calcolo parallelo applicato agli automi cellulari

Un piccolo esempio per tastare la praticità e l’eleganza delle nuove funzionalità di calcolo parallelo introdotte dal .NET Framework 4. La classe Parallel fornisce semplicemente e senza tante complicazioni metodi statici che permettono di sfruttare al meglio l’archittettura multicore in cui viene eseguita l’applicazione. Vediamo un esempio applicato agli automi cellulari, più precisamente al gioco della vita:

public override bool Next() {
  GenerationCount++;
  Environment2D etmp = new Environment2D(Env.Width, Env.Height);
  Parallel.For(0, Env.Width, x => {
    Parallel.For(0, Env.Height, y => {
      etmp.SetValue(x, y, ComputeRule(x, y));
    });
  });
  Env = etmp;
  return true;
}		

dove Next() calcola la nuova generazione dell’automa, computando per ogni cella dell’ambiente il nuovo valore, che come tutti sapranno, dipende dallo stato delle celle dell’intorno.

Vediamo ora la versione non parallela, formata semplicemente da due cicli for annidati, che spazzano in sequenza le celle dell’ambiente.

public override bool Next() {
  GenerationCount++;
  Environment2D etmp = new Environment2D(Env.Width, Env.Height);
  for (int x = 0; x < Env.Width; x++)
    for (int y = 0; y < Env.Height; y++)
      etmp.SetValue(x, y, ComputeRule(x, y));
  Env = etmp;
  return true;
}				

Simpatico e divertente, non come implementare una logica basata su thread che poi chissà cosa ti combinano questi furbi e malandrini thread 😦 bella questa classe System.Threading.Tasks.Parallel!

Per la cronaca, su un Intel Core2 Quad Q6600 (2,40Ghz) con quattro core separati e RAM da 3Gb, il mio algoritmo risulta tre volte più veloce!