martedì 8 ottobre 2013

Postgres su ZFS

Recentemente Oracle/SUN ha presentato una nuova generazione di storage appliance ZFS, la famiglia ZS3. Questi sistemi vengono proposti come piattaforma ideale per il dispiegamento di database (Oracle, ovviamente) grazie alle caratteristiche di ZFS, quali snapshot a caldo in tempo costante, clonazione degli spazi di storage, e gestione ultra sicura dei dati.
Effettivamente ZFS ha delle caratteristiche straordinarie, ed un paper dell'università dello Utah sottolinea come gli "scenari di disastro" che si propongono più comunemente nella gestione dei database, o le esigenze di testing e sviluppo siano gestite in modo particolarmente efficiente da ZFS.
Ispirato da queste considerazioni, ho creato una virtual machine con Oracle Solaris 11.1, su cui ho creato delle zones, ed installato Postgres. Ho fatto qualche piccola prova di management e replicazione di database, disaster recovery e clonazione e devo dire che la semplicità di gestione del tutto è straordinaria.
Morale? Credo che ZFS offra delle caratteristiche così interessanti, che nessun server possa ormai farne a meno. Inoltre esistono diverse distribuzioni di unix, tra cui i vari flavor di solaris (OmniOS, Illumos, Open Indiana, ecc...) e FreeBSD che offrono sia ZFS che zones o analoghi sistemi di light virtualization, che li rendono piattaforme ideali come NAS, database server, web server o application server, sia come sistemi di sviluppo, che testing che produzione.


lunedì 4 febbraio 2013

TotalTerminal per OS X

TotalTerminal è un plugin per l'applicazione Terminal.app che consente di utilizzare una hotkey system wide per richiamare il terminale. La particolarità è che il terminale viene richiamato in stile "Quake", come in Yakuake et similia.
Plugin gratuito e altamente consigliato!

sabato 19 gennaio 2013

Appunti di C#

Per rispondere in modo stringato ad eventi:
btnSubmit.Click += (sender, e) => MessageBox.Show("You clicked save!");

Per ogni elemento di un tipo enumerabile:
List elems = new List { "a", "b" };
elems.ForEach(el => Console.WriteLine(el));
elems.ForEach(el, Console.WriteLine);


Modifica elementi GUI cross thread:
private void SetupMainStepCount(int c)
{
   if (InvokeRequired)
      BeginInvoke(new Action(SetupMainStepCount), c);
   else
      totalProgress_.Maximum = c;
}