A Ovest Di Paperino

Welcome to the dark side.

  • Sparalink #6 a tema

    Versus - ovvero recensioni e confronti scriteriati (*) in ordine sparsoVERSUS

    In ciascuno di questi link sono sepolte perle di "obiettività" senza paragoni. Sfida per i lettori: elencare le migliori.

    Windows Thinking

    It just works?

    Da quest'ultimo link cito solo un pezzo molto bello:

    I have to admit, though, all this complaining about the brand promise of the Mac does make me laugh to a certain degree. Have you people ever seen a commercial before?

    Qualcuno potrebbe spiegare a Scott Granneman, l'autore dei primi due confronti, che la pubblicità in generale e quella Apple in particolare non può essere usata come fonte attendibile di informazione? Grazie! Smile

    -quack

    (*) scriteriato = scegli un vincitore e poi in base a quello scegli cosa confrontare.

    Technorati Tags:

  • SSS statistiche senza senso

    Numero di mesi per conoscere i primi baresi a Seattle: 110

    Numero di baresi conosciuti nell'ultimo mese: 4

    Numero di baresi conosciuti al party di Riccardo ieri sera: 2 (un record: mmo' e che cosa!!)

    Numero di commenti nel momento in cui scrivo: 2177

    Numero di post nel momento in cui scrivo: 500

    Eppoi qualcuno non crede nei processi di Poisson!! Smile

    -quack

  • Migrazioni - i problemi

    Un grande saggio un giorno disse che migrare dati da una qualsiasi stazione di partenza ad una qualsiasi stazione di destinazione è sempre un'operazione che lascia ferite difficilmente rimarginabili. Nello specifico, migrare un blog, è un'impresa che definire ardua significa minimizzare per la presenza di tanti ingredienti. Circoscrivendo il tutto allo stack ASP/ASP.Net sMigrazionei potrebbe sintetizzare in

    1. La fine del XCOPY deployment
      Fino a qualche anno fa ASP imperava ed i siti a "basso traffico" usavano il mitico Access Jet Engine come backend. Questo permetteva di "installare" un sito web semplicemente copiando dei file via FTP. Purtroppo il mitico Jet Engine è stato mandato in pensione e pare una versione a 64bit non ne vedrà mai la luce
    2. 64bit e medium trust
      Alcuni host supportano solo 64bit e la quasi totalità di chi offre hosting per ASP.Net forza l'uso della medium trust (e fanno bene!).

    Per ovviare a tutto ciò ovviamente si può scegliere di sostituire Access con qualcosa altro oppure passare ad una piattaforma che fa uso di un backend vero e proprio: il secondo tipo di soluzione però non permette di spostare facilmente i contenuti da un host all'altro.

    Infine la classica ciliegina sulla torta: purtroppo le piattaforme di blogging ancora non sono "standardizzate" al punto da permettere una migrazione indolore da una piattaforma ad un'altra. Un paio di formati sono stati proposti (BlogML o Wordpress XML) ma ahimé non funzionano bene o sono incompleti. Laddove lo fossero ci si metterebbe di mezzo il formato dell'URL: ogni piattaforma ha il suo tipo di URL e una migrazione trasformerebbe i permalink in odiosi tempalink.

    Nel frattempo ho trovato tantissime informazioni interessanti che sto valutando: i risultati spero di pubblicarli in un prossimo post intitolato "Migrazioni - le soluzioni" Smile

    -quack

  • Addii

    Davide ha impacchettato le sue ultime cose per andare in Cina a tempo indeterminato.

    Riccardo torna in Italia.

    Comcast - la stessa azienda che blocca alcune tipologie di traffico sulla loro rete internet - comunicava nove giorni fa che sei giorni fa avrebbero "spento" RAI International, tanto alcune partite le danno sul canale spagnolo; l'ha fatto davvero.

    Intanto Paolo VI non c'è più, è morto Berlinguer, ecc. [cit.]

    Se non fosse per Michele e Alessandra, arrivati da poco, mi verrebbe da chiedere:

    Ragazzi, mi vorrete mica lasciare qui da solo? [cit.]

    -quack

  • Privacy e segreti di Pulcinella

    Leggevo il post di Casper dedicato al Windows Feedback Program, un software a scelta per i tuoi click di usabilità:

    Gelosi come siamo dei nostri segreti di Pulcinella, preferiamo che a Redmond continuino ad arrovellarsi il cervello su come vorremmo che il sistema operativo fosse impostato, piuttosto che dirglielo a chiare lettere pulcinella e goderci i risultati.

    Mi chiedevo: vuoi scommettere che tra la stessa gente che (giustamente!) si chiede dove vanno a finire certi dati di poco valore c'è  più di qualcuno che usa la toolbar di Google integrata con FireFox per le ricerche, prende appunti importanti - magari anche qualche password - con Google Notebook, usa Google Apps per tenere la contabilità spicciola e dulcis in fundo ha un indirizzo at-gmail-dot-com?

    Perché sarebbe un paradosso... ed i paradossi mi affascinano; come ad esempio chiedere, ad un convegno sulla sicurezza, quante donne(*) hanno le chiavi di casa ed un documento di identità nella stessa borsetta.

    P.S. Da slashdot mi sarei aspettato un trattamento ben peggiore. Non si finisce mai di stupirsi

    -quack

    (*) non perché le donne siano meno security-aware degli uomini, ma perché gli uomini comunemente non usano borsette; altrimenti sarebbe peggio!

  • Senza Parole #2

    kamasutra

    (credo che il titolo in russo significhi Kamasutra del 21° secolo)

    -quack

  • Virtualismi

    Core2Duo A casa mia è arrivato finalmente l'agognato momento di passare a Windows Home Server. La mia idea è quella di costruirmi un server from the scratch mettendo insieme un po' di componenti che tra un upgrade e l'altro avevo accumulato.

    L'ultimo upgrade in ordine di tempo è stato un combo Intel Core 2 Duo E4500 + scheda madre per pochi spiccioli al posto dell'esistente Pentium D820 e avere finalmente la virtualizzazione hardware anche sul desktop. Ed invece...

    ...a guardare questa tabella si scopre che non tutti i Core 2 Duo supportano la virtualizzazione. All'inizio - dando un'occhiata ai risultati di questo tool - pensavo fosse solo un problema di BIOS. In realtà per quanto riguarda la virtualizzazione su Core 2 Duo ci vuole almeno un E6xxx. Porca paletta. Così tocca restituire il combo e passare ad uno un po' più evoluto. Per gli scettici questa pagina racconta il guadagno che si ottiene attivandola nelle macchine virtuali: a dare un'occhiata fugace ai numeri si tratterebbe di almeno il 25%. Mica poco.

    A fine assemblaggio seguirà un rapporto dettagliato sulla configurazione del server.

    -quack

    Technorati tags:

  • Every build you break

  • Sparalink #5

    -quack

  • Your money back

    Una mail che ho ricevuto qualche giorno fa riguardo XYZ mi ha lasciato un po' perplesso. XYZ è un "prodotto" di cui ho avuto a lamentarmi nel gennaio 2007 (il motivo per cui non lo nomino sarà chiaro fra breve) e nella mail, un po' come altrove su questo blog, mi si diceva money che:

    • i problemi di XYZ si fermano a casa mia (nel senso che me li sono inventati)
    • XYZ è un prodotto immaturo e per fare quello che voglio veramente dovrei usare ZYX, adducendo l'ipotesi che usassi XYZ per parlare male in realtà di tutti prodotti di "marca" ABC incluso ZYX che è "perfetto" Indifferent

    Le due affermazioni sono in palese contraddizione, ma la conclusione della mail è stupefacente: "se ABC ti fa schifo non ne parlare sul tuo blog". Al che mi è venuta in mente la risposta di Roy a dei commenti sul suo blog:

    My apologies. Please let me know what you'd like me to write about next. In fact, it would be great if you could also send me the full text of the post you'd like me to write.

    You are free to get your money back if this blog has not lived to its SLA.

    In realtà qualcuno ha osservato, checché se ne dica, che questo tipo di "aggressività" è molto tipica di alcune "comunità dalle scapole ampie che pensano solo a risolvere i problemi". Lo ha fatto Cesare Lamanna in questo post illuminante che a sua volta cita un altro post di Rob Enderle di cui già avevo parlato in passato. 

    Rob Enderle aggiunge che "The Register" teorizza l'esistenza di uno strike team che si abbatte, con aggressività inaudita, contro chiunque critichi il verbo ABC:

    According to The Register, there is actually some kind of a strike team that comes after me every time I say something positive on CBA or negative on ABC. And I’m not alone: Laura DiDio at Yankee gets sexual harassed, and Dan Lyons over at Forbes is attacked regularly, although he does have supporters as well.

    Può darsi che parlare di strike team sia esagerato ma il log dei referrals mi ha confermato che c'è davvero gente, che immagino oltre ad avere scarso sense of humor abbia davvero poco di interessante da fare nel tempo libero[1], che spende tempo cercando su google "ABC fa schifo" per poi lasciare commenti impietosi alla stregua della mail all'origine di questa mia assurda pippa mentale. Cesare conclude il suo post citando la frase di Rob:

    How can anything be “Open” if honest discussion isn’t allowed?

    Io ci metto del mio:

    How can anybody appreciate "free products" (as in free speech) if free speech about them isn't allowed?

    Di nuovo il tutto sembrerebbe ridursi ad una contraddizione. Ma da una contraddizione si può ottenere tutto (ex falso quod libet). Fanatismo incluso. Mi sbaglio?

    -quack

    Technorati Tags:

    [1] avrei una mia teoria al riguardo sul perché

  • Come funziona il secure boot

    Nell'ultimo post dedicato al trusted computing mi ero ripromesso di spiegare come funziona praticamente un dispositivo TPM.

    L'architettura tipica di un dispositivo TPM 1.2 come quello di Infineon è descritta dalla seguente figura:

    TPMArchitecture (fonte)

    Come si può vedere un chip TPM fornisce diverse svariate funzionalità: è infatti possibile ad esempio di usare il TPM come generatore di numeri casuali (RNG), oppure come memoria (limitata) non volatile, ecc. Ogni funzionalità può essere usata in maniera più o meno indipendente dalle altre.

    Per quanto riguarda il secure boot la funzionalità associata è quella dei platform configuration register (PCR). Ogni TPM viene fornito con un numero svariato di PCR: le specifiche richiedono che ne siano forniti almeno 24, i primi sedici dei quali (PCR0-PCR15) devono essere non resettabili. Per semplificare d'ora in poi mi riferirò con il termine PCR ai PCR non resettabili. Un PCR è un registro schermato e come tale protetto da interferenze e occhi indiscreti. Il PCR permette solo due tipi di operazioni 'semplici': lettura ed estensione.

    • la lettura restituisce al chiamante il valore contenuto nel PCR
    • l'estensione prende come input un valore di 160 bit e scrive nel PCR l'hash (comunemente si usa SHA-1 e quindi i PCR stessi sono grandi 160 bit) della concatenazione tra il valore del PCR e il valore in ingresso. In parole povere esegue la seguente operazione:
      PCR = SHA-1(PCR && input-value)
      il valore in ingresso rappresenta l'evento che si va a "misurare". Non è possibile sovrascrivere direttamente il valore dei vari PCR

    Le specifiche del TCG per PC definiscono anche l'uso che si va a fare di ogni PCR:

    PCR Uso
    0 CRTM, BIOS and Platform Extensions
    1 Platform Configuration
    2 Option ROM Code
    3 Option ROM Configuration and Data
    4 IPL Code (MBR)
    5 IPL Code Configuration and Data
    6 State Transition and Wake Events
    7 Reserved for future usage

    e cioé per esempio nel PCR4 sarà caricato il valore finale di tutte le misurazioni del MBR (nella maggior parte dei casi una sola).

    Altra nota importante: durante l'accensione tutti i PCR vengono resettati (e cioé conterranno 0).

    Per comprendere come funziona il secure boot, bisogna introdurre un altro elemento della piattaforma, il Core Root of Trust Module (CRTM). Per banalizzare il concetto, il CRTM è il pezzo di codice IMMUTABILE che su una piattaforma TC viene eseguito per primo e che si occuperà di misurare se stesso ed il BIOS per poi passarvi il controllo. Questo avviene con il seguente pseudocodice:

    Extend( PCR0, SHA1 (CRTM))
    Extend( PCR0, SHA1 (BIOS))

    Dopo di che il controllo viene passato al "BIOS" che procederà alla misurazione degli altri componenti (opzioni del BIOS, MBR, ecc.) e alle normali operazioni di boot. La fase di esecuzione del CRTM e del BIOS, che termina con il passaggio del controllo al MBR, è sempre la stessa e l'unico elemento variabile in gioco è il contenuto finale dei valori dei PCR. Questo significa che il codice contenuto nel MBR verrà eseguito comunque e sarà compito di tale codice prendere in considerazione o meno quanto registrato nei PCR.

    A questo punto dovrebbe essere chiaro come funziona il secure boot, almeno in linee generali: si installa un SO che supporta il secure boot su una macchina da zero, il sistema operativo "prende nota" dei valori del PCR considerati da questo interessanti dopodiché se i valori non coincidono vuol dire che qualcosa è cambiato e sta al sistema operativo decidere come notificare l'utente e cosa fare.

    I più curiosi invece si chiederanno come è possibile memorizzare tali valori da qualche parte senza che il malintenzionato di turno possa sostituirli e vanificare la protezione offerta dal secure boot. La piattaforma viene in aiuto degli sviluppatori di OS con due API simmetriche, TPM_Seal e TPM_Unseal. La prima prende in input una bitmask (rappresentante i PCR da usare) e un array di byte: l'array viene criptato e "firmato" usando come chiave i valori dei PCR specificati nella bitmask. La seconda fa esattamente l'opposto ma in più restituisce errore se i valori dei PCR, usati per firmare, non coincidono. Il compito del sistema operativo, una volta effettuato il primo boot, è quello di sigillare dei dati (volendo anche casuali) e memorizzarne il risultato sul disco. Nei boot successivi, se si riesce a desigillare il file, vuol dire che il sistema è integro altrimenti qualcosa è cambiato.

    La sequenza di misurazioni/esecuzioni è rappresentata da questa figura:

    ChainTrust (fonte)

    dove in cima alla chain of trust c'è il CRTM. Il CRTM quindi, insieme al chip TPM, è di fondamentale importanza per l'integrità di una trusted computing platform. Un sistema che rispetta le specifiche TCG deve garantire una protezione "assoluta" contro attacchi software contro il TPM e CRTM. Per quanto riguarda la protezione da eventuali attacchi hardware cito da Trusted Computing Platforms:

    The TCPA specification requires a limited but specified amount of physical protection for the TPM and CRTM. This reflects reality. In many cases it is impractical to provide a high level of physical protection, and in any case, it is impossible to provide absolute physical protection. If someone wants to physically interfere with a TPM and CRTM, they can (given enough time and money), and there is nothing that can be done to stop them.

    Nella maggior parte dei sistemi TCP odierni (come il mio Vaio di lavoro) il CRTM è memorizzato in una parte non modificabile via software del BIOS. Le specifiche prevedono che - laddove il CRTM sia in qualche modo aggiornabile - possa essere aggiornato solo dal vendor del sistema (nel mio caso Sony). Le specifiche tuttavia non prescrivono in nessuna maniera come e dove implementare il CRTM, infatti in questo paper viene preso in considerazione un approccio diverso e proposta una soluzione con il CRTM embedded nello stesso TPM su cui non esprimo nessun parere personale. Nel prossimo post ho intenzione di entrare nei dettagli implementativi della funzionalità bitlocker di Vista che fa uso del TPM laddove presente.

    Linko-bibliografia:

    Trusted Computing Platforms
    TCG Architecture Overview
    TCG specifications for PC
    How To Build Hardware Support For Secure Startup
    A New Approach of TPM Construction Based on J2810
    Trusted Computing for Linux
    TCPA Misinformation Rebuttal
    Trusted Computing Platform
    The CRTM and authenticated boot process

    -enjoy

    Technorati tags: ,

  • La mia vita lavorativa con Outlook

    Giovy chiede: quante e-mail ricevete al giorno?

    Questa è la statistica di ieri, lunedì, giorno piuttosto "moggio": 287Items  Di queste ben 165 risultano ad oggi non lette e probabilmente non saranno mai lette. Questo secondo numero è meno preoccupante di quello delle email importanti lette ma dimenticate, soprattutto se si aggiunge la mia carenza cronica di disciplina.

    Eppure Outlook, che è molto di più di un client di posta elettronico arrivando a scandire l'andamento delle giornate lavorative del campus, ha tutti i mezzi tra search folders, plugins, rules, flags e compagnia bella per venirmi incontro. Ciononostante ogni sera vado a casa con il senso di colpa per qualcosa d'importante sfuggito tra i meandri della mia memoria. Ieri è successo davvero:

    revoked

    e così oggi sto fermo un giro di lancetta di minuti e mi metto qui a scrivere cosa non si deve fare e cosa vorrei fare meglio, riassunto nel consiglio di due libri fichissimi tra il predicare bene e il razzolare male:

    1. Getting things done conosciuto ormai con l'acronimo GTD
    2. Never check E-mail in the morning

    Interessante la combinazione GTD + outlook che si può ottenere integrando ClearContext. Sto pensandoci davvero di farmelo finanziare in questi giorni di e-mail perdute.

    Tornando alla questione originale: sul lavoro la mail e i meetings li ricevo realtime. Purtroppo molto spesso ad essere processate realtime sono le cazzate, a finire in coda dimenticatoio sono le cose importanti. L'email personale non la controllo quasi mai sul lavoro, tranne quella collegata al messenger solo perché "fa rumore"; a casa - per fortuna - ne ricevo così poca che il processing è quasi sempre immediato nonostante usi ormai 5 account diversi. Il "quasi" mi salva da eventuali reclami in commento a questo post! Smile

    -quack

    Technorati Tags: ,

  • Predicatori di Sofia

    Il quartiere 'storico' di Pioneer Square è uno dei pulpiti improvvisati preferiti dai predicatori ambulanti. Tra questi uno dei più eclettici ha deciso di tappezzare qualche parete della città con una foto di Sofia Loren:

    Sofia

    per predicare e ricordare al mondo la sua bellezza.

    La teoria della long tail è applicabile anche alle religioni.

    -quack

    Technorati tags:

  • Time Machine vs Windows Backup

    windowsbackup vs Leopardtime

    Questi giorni mi son ritrovato a leggere per caso un paio di post che ringuardano le funzionalità di backup di Vista e di Leopard. Siccome la questione mi riguarda da vicino (per colpa del mio NAS non ho ancora fatto un backup completo dei miei PC visto che il famoso NAS in questione non supporta file più grandi di 2GB) ed incuriosito da una domanda di FDG che chiedeva conferma sul fatto o meno che Time Machine faccia di più di Vista, ho deciso di raccogliere quanto finora trovato in giro e pubblicare questo post con delle conclusioni personali.

    • Guida completa alle tecnologie di backup di Windows Vista. La pagina spiega tutto quello che c'è da spiegare sulle varie funzionalità di backup di Vista e come interagiscono tra loro.
    • Descrizione del funzionamento Time Machine da parte di Ars Technica. Purtroppo è un link di "terze parti" ma mi sembra tecnicamente ineccepibile. Sul sito ufficiale di Apple ho trovato solo questo scarno link. Se qualcuno ha di meglio da linkare mi faccia sapere e aggiorno subito.
    • Infine qualcosa di più frivolo sull'origine - per me "dubbia" - del nome Time Machine. In Windows Server 2003 il nome in codice per le "Previous Versions" era timewarp come conferma questo post del solito Raymond Chen datato Settembre 2005; come dice Benigni, si fa per scherzare!

    Riassumo brevemente quali mi sembrano i vantaggi della soluzione Windows ordinati in base ad un mio personalissimo criterio di importanza:

    1. La funzionalità di base, quella relativa alle Previous Versions, non richiede un supporto esterno per essere disponibile
    2. Il backup differenziale di Windows è a livello di "blocco" anziché di file; questo riduce enormemente la quantità di tempo e di spazio necessaria per i backup differenziali, soprattutto in presenza di file enormi come possono essere i vari hard disk virtuali
    3. il backup di Windows usa formati standard come file zip per la modalità file-backup e vhd per la modalità full-pc che possono quindi essere salvati su qualsiasi supporto (DVD, hard-disk esterno, NAS, WHS, ecc.)
    4. è possibile il ripristino di un backup completo senza sistema operativo tramite il windows recovery environment

    Invece questi mi sembrano i vantaggi della soluzione Apple:

    1. Il restore avviene, dal punto di vista dell'interfaccia, a livello applicativo laddove l'applicazione supporta Time Machine; immagino, ma non voglio fare il Gutmann della situazione, che per essere compatibile con Time Machine l'applicazione debba "registrarsi" in qualche modo
    2. La UI di ripristino, proprio per quanto riguarda il punto precedente, è davvero semplice; non mi riferisco agli effetti speciali, che dopo un paio di ripristini diventerebbero una scocciatura, ma ai comodi pulsanti e alla comoda time line.

    Voglio infine far notare che alcune feature del backup di Vista sono disponibili solo nelle edizioni più avanzate (Premium, Business e Ultimate) ma che sono disponibili anche su tutte le altre - incluse versioni precedenti come XP - con il client di Windows Home Server (che è molto simile, se non identico, alle funzionalità di backup completo di Vista).

    Riassunto: ho l'impressione che guardando le feature in modo più o meno soggettivo a fare molto di più sia il sistema di backup incluso in Windows Vista; io odio gli hard-disk esterni e adoro la possibilità data dalle Previous Version anche in assenza di backup mentre non ho bisogno di una interfaccia a prova di idiota per fare ripristino, quindi almeno sulla carta i vantaggi della soluzione Windows sembrerebbero superiori. Anche Oliver Rist sulla questione backup sembrerebbe sarcasticamente concordare con me dalle pagine di PC Magazine:

    So why doesn't Time Machine do block-level backups? I have no idea. Apple controls the file system. It controls the backup application. Generally, that's all you need. Maybe Apple couldn't spare the programmers working on the hugely important Star Wars core animation splash-screen project.

    Altre esigenze potrebbero però portare a preferire Time Machine.

    -quack

    Technorati tags: , ,

  • Sparalink #4

    • Quelli "sicuri": cosa si ottiene combinando quelli del browser più sicuro al mondo insieme allegriaa quelli con la security in mind sin dal primo giorno? Si ottiene l'unico browser al mondo vulnerabile al baco di QuickTime . Come direbbe Mike Buongiorno: allegria!
    • Bachi conosciuti: un giorno racconterò la storia del baco internamente più famoso del Framework 1.1; nel frattempo mi consolo con il fatto che "qualcuno" rilascia un update software pur sapendo che potrebbe rendere un sistema in-operativo; quando l'unica soluzione è cancellare tutti i dati senza neanche "spostarli"
    • I migliori clienti di Vista? indovinate su cosa gira usa il 10% delle copie retail di Vista (secondo qualcuno circa 2,4 utenti visto che in tutto sono state vendute 2 dozzine di copie)? Lo dice Joe Wilcox. In tutta onestà non so se sia un bene o un male. Smile
    • È uscito Visual Studio 2008 già da una settimana. La feature più interessante del C# 3.0? Linq, ancora meglio Linq2SQL degno erede di ObjectSpaces. Scott Guthrie parla nel suo blog di come una LINQ diventa SQL.

    -Allegriaaaaaaaaaah!

  • Metodi dinamici di delegazione

    Questi giorni sto giochicchiando con i DynamicMethod di .Net e ho pensato di condividere. Lo scopo di tali classi - conosciute anche come lightweight code generation - è di generare codice IL (il P-code di .Net) dinamicamente. Accoppiandoli con i metodi delegate (puntatori a funzione) si possono fare cose veramente interessanti. Gli esempi che seguono sono alquanto banali (il classico "Hello World"), ma con la LCG si possono fare cose moooolto deliziose: esempio 1, esempio 2.

    Altrettanto interessante è il funzionamento della Virtual Machine stack based di .Net: il set di istruzioni è documentato qui ma se si vuole giocare seriamente a questo tipo di giochi pericolosissimi (roba impossibile da debuggare capace di creare codice a fungo atomico in men che non si dica) consiglio _IL_ testo di riferimento che è "Compiling for the .Net Language Runtime" il cui unico neo è quello di essere basato sulla CLR 1.0 (niente template e altre corbellerie "moderne"). Volendo, la via più breve per capire l'IL da generare, è l'uso "a posteriori" di reflector.

    Ed ora gli esempi, giusto per stimolare l'appetito:

    using System;
    using System.Reflection;
    using System.Reflection.Emit;
    
    public class TestClass
    {
        string message;
        public delegate void TestMethod();
        TestMethod myTestMethod;
    
        public TestMethod MyTestMethod
        {
            get { return myTestMethod; }
        }
    
        public TestClass(string aMessage)
        {
            this.message = aMessage;
        }
    
        public void RealTestMethod()
        {
            Console.WriteLine(this.message);
        }
    
        public void CreateMethod()
        {
            /*
             * this is equivalent to:
             * Console.WriteLine("Hello world!");
             * there is no access to object members 
             * so the method can be declared as 'static'
             * 
             */
              
            // declare the method signature as void HelloWorld()
            //
            DynamicMethod dm = 
                new DynamicMethod("HelloWorld",  // name of the method
                typeof(void),           // return type
                new Type[] { },         // input types
                typeof(TestClass)); // class to 'attach the method to
            ILGenerator il = dm.GetILGenerator();
    
            // create a constanst string using the 
            // message and put it on the stack
            il.Emit(OpCodes.Ldstr, this.message);
    
            // invoke Console.WriteLine(string)
            // since it's a static method it only 
            // requires a string (the one on the stack)
            il.Emit(OpCodes.Call, 
                typeof(Console).GetMethod("WriteLine", 
                new Type[] { typeof(string) }));
    
            // return
            il.Emit(OpCodes.Ret);
    
            // create a delegate
            this.myTestMethod = 
                (TestMethod) dm.CreateDelegate(
                typeof(TestMethod)
                );
        }
    
    
        public void CreateMethod2()
        {
            /*
             * this is equivalent to:
             * Console.WriteLine(this.message);
             * there is access to object members 
             * so the method cannot be declared as 'static'
             * 
             */
    
            // declare the method signature as 
            // void HelloWorld(TestClass implicitThis)
            // it will be mapped to 
            // TestClass.HelloWorld() as instance method
            //
            DynamicMethod dm = new DynamicMethod(
                "HelloWorld",                      // name of the method
                typeof(void),                      // return type
                new Type[] { typeof(TestClass) },  // input types
                typeof(TestClass));     // class to 'attach' the method to
            ILGenerator il = dm.GetILGenerator();
    
            // puts the arg_o (this) on the stack
            il.Emit(OpCodes.Ldarg_0);
    
            // puts (POP)->message on the stack
            il.Emit(OpCodes.Ldfld, typeof(TestClass).GetField("message", 
                BindingFlags.NonPublic | BindingFlags.Instance));
    
            // invoke Console.WriteLine(string)
            // since it's a static method it only 
            // requires a string (the one on the stack)
            il.Emit(OpCodes.Call, 
                typeof(Console).GetMethod(
                    "WriteLine", new Type[] { typeof(string) }
                    )
                );
    
            // return
            il.Emit(OpCodes.Ret);
    
            // create a delegate
            this.myTestMethod = 
                (TestMethod)dm.CreateDelegate(typeof(TestMethod), this);
        }
    }
    
    
    public class HelloWorld
    {
     
        public static void Main(string[] args)
        {
            TestClass myTestClass = new TestClass("Hello World!");
            myTestClass.CreateMethod();
            myTestClass.MyTestMethod();
    
            myTestClass.CreateMethod2();
            myTestClass.MyTestMethod();
        }
    
    }
    

    -quack

  • Burocrazie

    Oggi nella casella della posta ho trovato una simpatica sorpresa: la patente americana rinnovata. Non che sia una patente grande sorpresa perché il "rinnovo" - per la prima volta - l'ho fatto online alcuni giorni fa. Però mi ha portato a riflettere della differente burocrazia tra il paese che mi ospita e l'Italia.

    Innanzitutto non so neanche se la mia patente italiana è scaduta o meno: questo perché la scadenza del documento italiano è legata alla data di rilascio e di quella data mi ricordo a malapena l'anno. Il documento americano invece, intelligentemente, scade il giorno del proprio compleanno. Vuoi mettere tra le due date quale sia la più facile da ricordare?

    Poi ci sono i costi: 25$ tutto compreso pagabili via carta di credito. Da aggiungere la completa informalità della lettera che mi invita a rinnovare il documento con tanto di torta con le candeline e scritta con un linguaggio ultra-semplice. In Italia, tutte le comunicazioni ufficiali, sono seriose e scritte in gergo burocratico.

    Infine la comodità: tra rinnovare online e fare 30-40 minuti di fila allo sportello non c'è proprio paragone. Tanto in tutti e due i casi la patente verrà comunque spedita a casa per verificare l'indirizzo fornito. Una delle tante cazzate geniali!!

    -quack

    Technorati tags:

  • Venerdì nero

    Il giorno dopo il Thanksgiving (che appunto è il quarto Giovedì di Novembre) si chiama Venerdì Nero. È un giorno in cui tutti i commercianti fanno sconti pazzeschi su alcuni articoli molto appetibili come regalo di Natale. La teoria più accreditata su tale nome fa coincidere con il Venerdì nero, sia per gli sconti che per la posizione strategica nel calendario, il giorno in cui le attività commerciali raggiungono "la parità". Tutti i giorni precedenti sono considerati "rossi" quelli successivi "verdi". I negozi aprono molto presto (Fry's apriva i battenti alle 5 e mezza) e la gente fa ore ed ore di fila per accaparrarsi gli articoli più convenienti. Dietro questa manovra molto consumer friendly parrebbe nascondersi un interesse molto subdolo dei commercianti: pare che in base ad una legge ammerigana, se si restituisce un prodotto senza essere provvisti di scontrino, il commerciante ha il diritto di restituire il prezzo storicamente più basso durante i 30 giorni precedenti alla restituzione; con un paio di giorni di supersaldi strategicamente piazzati (come appunto il Venerdì Nero) è possibile garantirsi un interesse economico non trascurabile su tutti i regali di Natale - ovviamente senza scontrini - non perfettamente azzeccati! Quanto sia vera questa storia, non lo so neanche io: mi è stata raccontata da Forrest - mio collega quasi-onnisciente - tanto, troppo tempo fa

    Questo è il primo anno in cui ufficialmente ho deciso di fare shopping. Attirato a Fry's come una allodola allo specchietto da un paio di offerte molto interessanti: combo Intel QuadCore (Q6600) + scheda madre SiS (di quelle che danno i problemi coi mouse su Ubuntu Big Smile) a 200$, prezzo di molto inferiore al costo del processore soltanto; drive USB da 8GB a 30$ (con rebate!); drive da 4GB a 13$ (sempre con rebate). Purtroppo siamo arrivati tardi (circa 10AM): l'affare più goloso (il processore) era andato già esaurito. La fila alle casse, che si estendeva labirinticamente per tutto il negozio, stimabile in circa 120 minuti di attesa non è valsa la pena per gli altri deal (sono un freddo e cinico calcolatore).

    E così io e Beppe, anche lui alla prima esperienza di VN, abbiamo abbandonato sconsolati il paradiso di Fry's alla ricerca di altri lidi. Siamo approdati da Circuit City che aveva una super offerta su Guitar Hero II + chitarra per XBOX 360 a 60$.

    GuitarHero2

    Ormai scettici ci siamo avventurati lo stesso ma per fortuna, vuoi perché tutti magari erano da Fry's, ne abbiamo trovata una (ce n'erano diverse). Per par condicio abbiamo pensato anche alla formichina, ormai dietologa iscritta all'albo, con una confezione di Dance Dance Universe corredata di tappeto sensore allo stesso prezzo nonostante l'adesivino indicasse 20$ in più. Per la prossima stagione festiva siamo ormai ben attrezzati. A questo punto, la foto commemorativa di Beppe in versione rock-star, non poteva mancare:

    BeppeRockStar

    Un paio di canzoni ed il dolore del mancato (?) affare sul processore è sfilato via.

    Enjoy!

    Technorati tags:

  • Happy turkey weekend

    turkey

    No c'è un refuso. Parlo di questo "turkey":

    turkey

    P.S. il weekend comincia oggi.

    -quack

  • Brevetto ep287578

    Il brevetto ep287578, non so se sia un numero ufficiale ma come titolo fa figo, è quello considerato come il "brevetto base MP3".musical_note
    Mai più che mai vale il disclaimer quello che segue è farina del mio sacco personale.

    La mia microanalisi che segue si basa su una voce wikipedia per un motivo semplice: se wikipedia su questi articoli fosse di parte penderebbe dal lato della "fondazione". Cominciamo dal LAME. In passato è stato detto che il codec LAME è "brevettualmente pulito" in quanto non usa l'implementazione di Fraunhofer. Wikipedia è abbastanza chiara, nonostante l'uso del condizionale:

    Like most (if not all) MP3 encoders, LAME may implement technology covered by patents owned by the Fraunhofer Society and other entities. The developers of LAME do not license themselves the technology described by these patents. Distributing compiled binaries of LAME, its libraries, or programs which are derivative works of LAME in countries which recognize those patents, may be considered infringing on the relevant patents.

    Il codec LAME potrebbe infrangere il brevetto e gli sviluppatori non ne hanno mai comprato la licenza che lo ricopre. Gli sviluppatori di LAME, ignari su tale infrazione, danno però un consiglio abbastanza chiaro:

    they advise obtaining a patent license for any relevant technologies that LAME may implement before including a compiled version of the encoder into a product

    In poche parole, se volete compilare e ridistribuire il codec, compratevene una licenza (come hanno fatto quelli di Linspire). Ma perché secondo tali sviluppatori non c'è nessuna infrazione? Semplice. I brevetti sono considerati documenti pubblici e come tali consultabili e - immagino - ripubblicabili liberamente. Probabilmente nessuno mi vieta di prendere un brevetto scritto in Inglese, tradurlo in Ostrogoto, e pubblicarlo sul mio blog. Quello che hanno fatto gli sviluppatori del codec LAME è altrettanto semplice, solo che invece dell'Ostrogoto, è stato scelto un linguaggio di programmazione e la "traduzione" pubblicata sul loro sito. Geniale vero? Per gli increduli, la stessa fonte recita:

    The LAME developers state that since their code is only released in source code form, it should only be considered as a description of an MP3 encoder, and thus does not infringe any patent by itself when released as source code only.

    Una ulteriore nota: i brevetti - in quanto pubblici - non impediscono assolutamente la libera circolazione della conoscenza come qualche crociato vuole far credere. Chiunque può scegliere un brevetto e implementarselo per uso personale (o compilarsi il codec a piacimento). Quello che non si può fare con i brevetti - e qualcuno mi corregga se sbaglio - è ridistribuire commercialmente prodotti che ne fanno uso nei paesi che riconoscono tali brevetti senza pagare la licenza all'intestatario del brevetto. Ops.

    Ora gli sviluppatori di LAME hanno un senso dell'ironia formidabile (al mio paese si userebbe una espressione colorita che coinvolge due parti anatomiche ben distinte): hanno protetto la loro "traduzione" di qualcosa che non gli è mai appartenuto con la licenza LGPL. Per cui Sony, che del brevetto sugli MP3 avrà licenziato milioni e milioni di copie ma ha deciso di usare l'implementazione LAME, è stata chiamata in causa per adempiere agli obblighi della licenza LGPL:

    In November, 2005 there were reports that the Extended Copy Protection software included on some SONY Compact Discs includes portions of the LAME library without complying with the terms of the LGPL.

    Morale della favola: scherza con i santi brevetti, ma lascia stare i fanti le licenze. Aggiungo: nel frattempo occhio a coloro che si professano "maestri di etica".

    -quack

    P.S. scusate le eventuali ripetizioni; spero che questo sia il post tombale sulla questione "brevetto MP3" e sul perché penso la scelta di Canonical sia filosoficamente ma anche pragmaticamente sbagliata.