Problemi a capirvi? Scrivetevi il vostro linguaggio da soli

Molto spesso penso al fatto che sarebbe bello dotare il proprio software di un linguaggio di scripting, estensibile e di facile comprensione per i non addetti: il mercato offre davvero ogni ben di dio. Python, TCL, Lua fino ai più recenti Ruby, Boo e Nemerle. Ma da buon (C++/C#/Java)-filo in questi linguaggi trovo sempre antipatico il fatto che non supportino la sintassi tanto a me cara. E’ vero che ora con .Net posso anche utilizzare il C# come linguaggio di scripting ma questo richiederebbe scrivere troppo codice. In definitiva sia che io ne abbia bisogno o meno, vi presento un ottimo progetto, ben documentato, per scrivere i propri interpreti, parser e lexer con possibilità di ottenere il relativo codice in Java, C#, C++ e Python: ANTLR. Dietro questo nome impronunciabile si nasconde un professore, Terence Parr, che da quasi 20 anni si dedica a questo genere di attività ed ha coronato il tutto con questo bel progetto.

Terence Parr

Il sito documenta il tutto con esempi per dummies, presenta distribuzioni per tutti i principali sistemi operativi e soprattutto è un progetto Open Source. Vogliamo dare il nobel a ques’uomo?

SVGZ e Firefox

A grande richiesta (nel senso che me l’ha chiesto una grande persona) ho fatto una ricerca per sapere se Firefox è in grado di leggere i file con estensione “.svgz”. Non è un codice fiscale, ma sta per “SVG compressa con gzip”. Non sto qui a decantare le doti di SVG, se siete curiosi date un’occhiata qui.
La risposta che ho trovato qui e qui è , nel senso che non è possibile aprire direttamente un file svgz mediante “menu File” -> “Apri file…”, ma se il file svgz è incluso in una pagina web, allora il server web può consentire a Firefox di visualizzarlo dicendogli: “questo è un file SVG, ma prima di leggerlo decomprimilo con gunzip”. In altre parole, il server web deve essere istruito perché associ un MIME type opportuno al file svgz.
Per esempio, se il server web è Apache occorre aggiungere nel file .htaccess le seguenti righe:

AddType image/svg+xml svg
AddType image/svg+xml svgz
AddEncoding x-gzip .svgz

Ovviamente nessun problema per Firefox ad aprire file SVG anche in locale.

Un vero gioco Next-Gen

Con il termine Next-Gen si additano i videogames dove il realismo dei motori di rendering la fa da padrone: texture dettagliatissime, motori fisici, rendering HDR, motion capture come se piovesse e quant’altro. Basta dare un occhiata alla lista delle prossime uscite per rendersi conto di cosa si intende oggi giorno per videogioco: una produzione da milioni di dollari (spesso più costosa della realizzazione di un film) e che il più delle volte costringe gli appassionati a procurarsi una console da 500€ o fare un’upgrade del proprio PC spendendo una somma simile. In realtà quello che si aggiunge al divertimento e davvero poco. Se si pensa a quanta goduria da imbracciare un redentore (che risale al 1999!) o un BFG10000 (la Big Fucking Gun di Quake ]I[) ci si meraviglia a quante risorse ci vogliano oggi per giocare.
E allora, per coloro che non intendono avere più ventole che transistor nel loro computer ecco qui il nostro gioco Next-Gen. Cliccate sull’immagine per aprirlo:

linerider


Divertente, immediato e creativo al tempo stesso. Vi lascio vedere da soli di cosa si tratta. E quando avete finito di divertirvi scoprite quanti video si riescono a trovare su YouTube col nostro eroe: Line Rider!

Firefox 2.0

Firefox logoSo di essere prevedibile, ma devo farlo… Questa è la mia applicazione preferita!

Ragazzi è ufficiale l’uscita di Firefox 2.0. In realtà i siti ufficiali non hanno fatto ancora in tempo ad aggiornarsi nel momento in cui sto scrivendo, ma potete già scaricare Firefox 2.0 in italiano da questo indirizzo.

Non voglio fare il solito sermone sulla bellezza del free software e dell’open source, del modello di sviluppo a bazaar, etc. Mi limito a linkare qui un interessante (e disinteressata) opinione sul perché sia utile passare a Firefox.

La dura vita del robot precario…

Il video che vi presento è stato realizzato da quel genio di Neill Blomkamp. Costui è meglio noto per il “transformer” della Citroen o per il robot poliziotto in Sud Africa. Proprio il cugino del citato robot è il protagonista di questo corto da poco meno di 15 minuti che narra le vicissitudini di un robot e della sua quasi fantozziana vita routinaria. Il film mette in mostra il talento di Neill nel mostrare società attuali con quel tocco di immaginario “probabile”, in cui la computer graphic cessa di apparire come orpello scenografico ma diventa strumento necessario alla realizzazione di un personaggio altrimenti impossibile da rappresentare diversamente. Impressionante, ad ogni modo, la resa grafica del tutto resa possibile con le moderne tecniche di rendering con illuminazione HDR.

Da sottolineare che Blomkamp è stato scelto anche nella realizzazione del film tratto da Halo. Comincia a venirmi l’acquolina in bocca se penso agli orribili film tratti dai videogames che circolano di questi tempi.

Aspect Oriented Programming

La tecnica (AOP), che vado ad illustrare, è nata nel mondo Java, grazie al contributo del solito geniaccio della Xerox (ma non facevano fotocopiatrici?). Con un aspect possiamo andare ad influenzare codice già scritto attraverso dei Join Points. Banalmente potremmo utilizzare questa tecnica per fare il logging del nostro codice senza influenzare minimamente il codice già scritto. Nella pratica potremmo estendere del tutto il funzionamento di una classe completamente dall’esterno (dipende da come è scritto il codice ovviamente). Siccome per lavoro sono costretto ad usare Visual Studio .Net, mi sono preoccupato di reperire qualcosa che consenta di utilizzare l’AOP con C# & Co. Quello che in Java è uno standard da tempo per il .Net ha richiesto la smobilitazione del Microsoft Research Center, la riscrittura del compilatore e via di questo passo (sorte noscia). Fortunatamente un professore russo ha messo insieme il tutto in un comodo pacco zip che è possibile reperire qui (per il funzionamento richiede il Phoenix RDK).
Vediamo dunque in cosa consiste questo AOP con un esempio piccolo piccolo (i concetti si applicano in Java alla stessa maniera). Supponiamo di avere una console application col seguente codice:

using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void P()
        { Console.WriteLine("P"); }

        static void Main(string[] args)
        {
            Console.WriteLine("Main");
            P();
        }
    }
}

Si tratta quindi di una chiamata al metodo P. Adesso vogliamo estendere la classe in modo che, quando viene effettuata una qualsiasi chiamata, sia prima che dopo, io possa compiere qualche azione, ad esempio stampare un messaggio di log. Aspect.Net permette di definire ciò con un apposito linguaggio che viene successivamente convertito in C#. Aggiungiamo quindi alla nostra soluzione un progetto di tipo Aspect ML, scritto così:

%aspect Aspect2

using System;
using AspectDotNet;

{
   %modules
      public static void Say (String s)
      { Console.WriteLine(s); }

   %rules
      % before % call *
      % action
      public static void SayHello ()
      { Say ("Hello " + %TargetMemberInfo.Name); }

      % after % call *
      % action
      public static void SayBye ()
      { Say ("Bye " + %TargetMemberInfo.Name); }
}

in cui indichiamo che prima di fare qualsiasi chiamata (%before %call *) dobbiamo eseguire la action SayHello(); subito dopo la chiamata (%after %call *), invece, dobbiamo eseguire la action SayBye(). Se già vi state meravigliando di tutto ciò, sappiate che gli Aspect Oriented Languages effettuano quello che è chiamato Mixing del codice: il compilatore si occupa di scovare quali sono i punti in cui il nostro aspect si può inserire (e questo viene fatto direttamente sugli assembly) e ci crea una versione AOP della nostra console application il cui output sarà:

Hello Void WriteLine(System.String)
Main
Bye Void WriteLine(System.String)
Hello Void P()
Hello Void WriteLine(System.String)
P
Bye Void WriteLine(System.String)
Bye Void P()

Bello vero?
A presto con qualche esempio più complesso ma a voi l’immaginazione di cosa poter fare con uno strumento simile.

Ci fabbrica e sfabbrica nun perde mai tiempu…

Beh, visto che siamo salentini ogni tanto possiamo pur mettere un pò di cultura popolare. Il proverbio (da me mai compreso fino in fondo) indica in modo sarcastico che chi fa le cose e poi le disfa non perde mai tempo. Ma se a farle è una azienda e a disfarle siamo noi di certo il tempo lo perdiamo, ma magari ci divertiamo pure. E per fare ciò nel migliore dei modi ci viene incontro questo sito. Mi raccomando voi a casa…fate attenzione!