Advertising, advertising, advertising

I ragazzi di Stanford, che vi presento ora, devono essere dei grandi fan di Steve Ballmer e dei suoi motti tripli, visto che hanno messo a punto una tecnologia che magari vedremo presto in azione nei video(giochi) di nostra quotidiana fruizione. Se si pensa che la prossima piattaforma ludica di id software, Quake Live, baserà i suoi introiti esclusivamente sulla pubblicità in game, possiamo pensare che il sogno di PCZ finalmente sta per avverarsi: media gratis per tutti ma infarciti fino all’esasperazione di video pubblicitari.

La tecnologia in questione si chiama ZunaVision e consente con pochi semplici click di identificare un’area che il software è in grado di seguire e sostituire con un video di qualsiasi natura.

In se la tecnologia non ha nulla di sconvolgente, se non l’adozione congiunta di molte tecniche note, in un prodotto di facile fruizione. Lascia però intravedere che, in un prossimo futuro (per non copiare il motto di un blog amico), i video potranno essere manipolati da chi li manda in onda o da chi li vende inserendo pubblicità che li riguardano. Si può pensare che gli stessi produttori di video potranno predisporre aree opportune, nelle loro inquadrature per favorire questi inserimenti. Se ciò porterà a dei vantaggi per i fruitori non è dato saperlo, ma se l’idea che io e due miei colleghi avemmo nel lontano 1995 si dovesse avverare, potremmo sperare di ottenere media gratuiti ripagati dagli introiti pubblicitari. E pensare che non ci abbiamo guadagnato niente…

Zac

NetBeans 6.5, per tutti voi

In quest’ultimo anno la Sun ha preso seriamente a cuore le necessità di noi poveri sviluppatori che ci barcameniamo senza un attimo di pace tra tanti IDE e altrettanti sistemi operativi, senza mai concederci quella tranquillità d’animo di sviluppare in un unico ambiente. Le versioni di NetBeans si sono succedute a ritmo davvero incalzante, regalandoci dapprima Matisse, ossia l’estensione di NetBeans per sviluppare applicazioni Java per i nostri Desktop, in grado, più o meno, di competere con gli editor di Microsoft e Borland. Poi hanno arricchito l’ambiente per supportare altri linguaggi: e così ora anche Ruby, Groovy, Javascript, Python, PHP, C/C++, oltre che Java, cosi come altri tool di gestione di Database, source control, Profiler e così via trovano tutti posto nell’unica applicazione che prende il nome di NetBeans.

Il merito di questa escalation è da attribuire alla Rich Client Platform su cui si basa NetBeans stesso: ossia un’infrastruttura di servizi e librerie, ottimamente bilanciate per consentirvi di scrivere le vostre applicazioni in modo organizzato e con moduli separati ma ben collegati tra di loro. E NetBeans ci viene incontro in questo sviluppo consentendo di creare lo scheletro di un’applicazione, ma anche di uno dei suoi moduli (eventualmente utilizzabili dentro NetBeans stesso) con dei facili wizard.

L’impareggiabile GeertJan Wielenga, sul suo ottimo blog, ci illustra molti dei segreti della NetBeans RCP e come essa possa essere sfruttata anche per integrare tool Java già esistenti all’interno di NetBeans o in uno dei suoi moduli. Inoltre su DZone, ha pubblicato una serie di video in cui spiega l’architettura RCP con dei facili esempi (vi consiglio, laddove disponibile, il link alla versione originale, con video di dimensioni maggiori e, quindi, più facili da seguire).

In conclusione, un’ottima opportunità di dare uno sguardo a questa validissima alternativa ad Eclipse. E poi è Open Source!

Zac

Gaaahhh…altro che maritozzi

La notizia non è di primo pelo, ma ho aspettato a darvela perché non mi chiamo Steve Jobs e quindi non mi piace torturarvi con attese spasmodiche, ne tantomeno sono un giornalista che deve battere sul tempo altre testate giornalistiche o stimolare l’hype sotto pagamento.

Si tratta di un’ennesima idea geniale e succulenta che John Carmack e soci hanno tirato fuori dal cilindro: Quake Live. Nessuna novità nelle modalità di gioco, nessuna grafica particolarmente sofisticata ma….ma si gioca in un browser, senza bisogno, spero, di molto altro se non quel filo di sete di sangue virtuale che scorre nei palati dei veri blasterizzatori.

Quindi affilate i pulsanti del vostro mouse, lucidate i tasti WASD della vostra tastiera che ha breve torneremo a gioire col nostro bravo BFG9000 in mano e soprattutto iscrivetevi al beta program per essere tra i primi ad impugnare le armi in questa nuova, colossale arena (scusate l’entusiasmo ma l’idea è davvero avvincente)!

Sappiamo tutti che la pausa pranzo è fatta per la blasterizzatina quotidiana e per cause di forza maggiore avevo mestamente sostituito con gli “Aggiornamenti in tempo reale” di facebook…ma non c’è davvero storia. Le “due da 10” stanno per tornare BD…preparatevi a sentir dire che “Mi basta un pixel has taken the lead”!

Zac

Dynamic, Dynamic, Dynamic

Riprendo alcune informazioni diffuse attraverso i talk del PDC2008 che la Microsoft ha furbescamente distribuito gratuitamente al popolo di internet. Ho trovato molto interessanti quelli relativi alla programmazione dinamica in C#4 (che debutterà ufficialmente nel 2010 ma che è disponibile in CTP – come immagine Virtual PC – già adesso) ma sono rimasto deluso per non aver trovato (almeno, io non l’ho ancora trovato) il giusto approfondimento sui costrutti per la programmazione parallela.

Per quelli che avessero difficoltà a seguirmi riepilogo brevemente gli argomenti di cui sto parlando:

  • Programmazione dinamica: si tratta di un costrutto con cui possiamo dichiarare una variabile di tipo dynamic: fatto questo possiamo chiamare metodi e attributi di questa variabile anche se a compile-time questi non erano presenti;
  • Programmazione parallela: il nuovo C# introdurrà dei costrutti per semplificare la scrittura di algoritmi paralleli.

Sulla programmazione dinamica, nel talk di Jim Hugunin (TL10) ed in quello del mitico Anders Hejlsberg (TL16), si è fatto la dovuta distinzione che un oggetto dynamic non è un object ma una variabile su cui si possono effettuare chiamate di tipo dinamico su cui, cioè, il compilatore non effettuerà controlli sull’esistenza di metodi e attributi. Il tutto può essere utile laddove vogliamo avere la massima flessibilità nel funzionamento delle nostre classi: metodi ed attributi possono essere creati e chiamati dinamicamente in funzione di input esterni al software ed adattarsi in funzione di queste esigenze.

Per far questo possiamo utilizzare diverse strade. La più semplice è quella di poter accedere a variabili dinamiche richiamando i loro metodi senza passare dai metodi Invoke (che voi che smanazzate con la reflection conoscete a memoria).

La seconda è quella di crearsi una classe derivata da IDynamicObject che consente l’aggiunta di metodi ed attributi a run-time. Il tutto viene ottenuto sovrascrivendo i metodi GetMember, SetMember ed InvokeMember:

  • GetMember: indicherà cosa fare quando richiediamo un membro di una classe (che ovviamente potrebbe non esistere);
  • SetMember: indicherà cosa fare quando aggiungiamo un membro ad una classe;
  • InvokeMember: indicherà cosa fare quando richiamiamo un membro con un certo set di parametri.

Quindi, in realtà il dinamismo visto nelle presentazioni, è leggermente meno flessibile di quello visto in Python o in Ruby in cui, qualsiasi object è anche dynamic. Qui si è fatto il tentativo di portare il dinamismo all’interno di un linguaggio essenzialmente statico senza stravolgerne l’architettura. In realtà anche così il sistema offre le stesse potenzialità all’utente ma, soprattutto, consente una migliore integrazione con IronPython ed IronRuby che, a partire da questo PDC diventano fratelli di latte con C#, Visual Basic e C++. Ora classi python, ruby e .net vengono eseguite nello stesso spazio e, quindi, accedono le une alle altre senza alcun limite.

Supponiamo di avere il seguente file Calculator.py

def GetCalculator():
    return Calculator()

class Calculator(object):
    def Add(self,x,y)
        return x+y

ed ora scriviamo il nostro codice C#:

using System;
using IronPython.Hosting;

class Program
{
    static void Main(string[] args)
    {
        dynamic python = Python.CreateRuntime().UseFile("Calculator.py");
        dynamic calc = python.GetCalculator();
        calc.Add(100,5);
    }
}

L’esempio ci fa capire che l’embedding ora avviene in modo molto semplice rispetto a prima ed il suo utilizzo risultà molto più intuitivo ed efficace.
Il sistema di chiamate dinamiche consentirà inoltre di avere un dialogo più immediato con i Web Service (un pò come vedemmo in Groovy tempo fa): avendo una variabile di tipo dynamic che punta all’istanza di un web service, potremo chiamare un suo metodo senza costrutti strani ma semplicemente considerando la variabile come istanza di un oggetto che quei metodi ce li ha già.
Vedremo cosa sapremo tirar fuori da C# con queste nuove possibilità.

Zac

Mono e PDC2008

La scorsa settimana si è tenuta a Los Angeles la Professional Developer Conference di Microsoft, conferenza dedicata interamente ai tool di sviluppo per Windows o di tecnologie ad esso riconducibili. Una delle novità è stata la presenza di Miguel de Icaza che ha tenuto una presentazione sullo “Stato della Nazione” di Mono e dei progetti ad esso affini.

La novità è di rilievo se si pensa che Mono è il presunto cavallo di troia all’interno dei nostri PC con GNU/Linux installato sopra, ma anche che Microsoft presenta al suo pubblico di sviluppatori un progetto Open Source che rende libero ed accessibile il codice relativo a .Net e potenzialmente li spinge pensare alle loro applicazioni anche su sistemi non-Windows come Linux e Mac OS X. Tenuto conto che Mono è ormai compatibile al 100% con le WinForms 2.0 e con LinQ e che presenta dei tool che .Net ancora non ha, il keynote di Miguel è stato un fatto che mi ha piacevolmente sorpreso.

Tra le novità presentate in questo keynote citiamo:

  • Mono è l’ambiente di riferimento per chi voglia portare applicazioni .Net su piattaforme non Windows
  • Mono supporta pienamente i maggiori standard legati a .Net
  • Mono è calibrato per essere portato anche su dispotivi embedded (Console come Wii e iPhone ad esempio) e a tale scopo si può sfruttare l’ottimo Mono Linker che consente di estrarre da librerie esistenti solo il minimo indispensabile per quello che ci serve, senza portarci appresso codice inutile
  • Mono ora supporta una procedura di SIMD (Single Instruction Multiple Data) che consente di velocizzare di molto i calcoli matriciali e, di fatto, rende Mono adatto anche per lo sviluppo di video games
  • per la prima volta si introduce gsharp, una shell per C# che, al pari di quelle esistenti per Python e Ruby, consente di eseguire codice .Net al volo con tanto di output grafico. Ha inoltre la capacità di agganciarsi ad un processo Mono in esecuzione e di variarne il comportamento a Run-Time
  • non ci ho capito molto ma mi è sembrato di capire che ora Mono presenta anche un compilatore AOT: non vorrei sbagliare ma, al pari dell’analogo per Java non presenta una migliore efficienza nell’esecuzione del codice
  • viene introdotto il Mono Debugger, che fino ad ora mancava all’intera suite.

Le novità sono davvero tante e, per quanto gli “You Know” di Miguel non diventeranno mai famosi come le triplette di un certo Steve o come gli “huuuge” di un altro Steve, vale la pena guardare anche il video (wmv) del keynote per imparare a conoscere un personaggio che già fa, e in futuro lo farà ancora di più, parlare di se.

Al solito non vedo di buon occhio il fatto che Mig indichi Visual Studio come ambiente di sviluppo per Mono e ancor meno capisco la necessità di scrivere MonoDevelop quando si poteva scrivere un plugin per Eclipse/Netbeans. Ma fino a che le buone idee dietro la piattaforma .Net si diffonderanno come Open Source ben venga Miguel e tutto il suo entourage, ma state attenti che la Microsoft è sempre in agguato dietro le sue spalle ed il rischio di avere un Linux che gira alla velocità di Windows Vista è qualcosa da evitare come la peste.

Zac