Verona Speech on 23rd of Feb 2010
Hi guys I’m sharing as always the full source code and video about my speeches, and, as you already know each seminar is different, each demo is new, and hopefully you’ll enjoy them
The full video of my speech you’ll find in Code Zero TV, and here the sources.
Please take a look even to Roby’s blog (and src) and Giuseppe’s blog (link to post)to get source codes.
Here goes a picture of Giuseppe during the speech
enjoy
Di ritorno…
Di ritorno da dove?
Ma dal Game Day di Napoli naturalmente. Per chi non ha potuto esserci, non ha voluto esserci, o non sapeva dell’esistenza di quest’evento la faccio breve: un’intera mattinata dedicata alla realizzazione di videogames tramite l’utilizzo di due tecnologie di punta del macrocosmo Microsoft : Silverlight e XNA. La giornata del 25 è stata decisamente intensa, dopo una dovuta e necessaria introduzione del Prof. Peron, Presidente del Corso di Laurea in Informatica dell’Università Federico II, e di Mauro Minella, Academic Relations Manager di Microsoft, ha preso la parola l’ospite d’onore della giornata, ovvero Joe Wilson, Senior Director of Academic Initiatives in Microsoft ( o genio, profeta, scienziato come ha scritto un giornale
), che ha parlato delle potenzialità degli studenti e dei motivi per cui Microsoft punta tantissimo su di essi, proiettando una fantastica presentazione in WPF, molto american-style, ma che ha quasi fatto piovere dell’intimo femminile sul palco della Sala Azzurra del complesso di Monte Sant’Angelo dove si è svolto l’evento.
Terminati i convenevoli è arrivata la sostanza, la polpa, ciò per cui gli studenti erano lì : lo sviluppo dei videogames.Ha preso la parola Davide Luzzu (Dave) MSE ed esperto di UI Design, che ha subito catturato l’attenzione dei presenti con il suo modo di esporre e con delle slide simpatiche e (come sempre) curatissime. La sessione Silverlight, durata circa 50minuti, è stata intensa, impegnativa e molto incentrata sul design, ma stando tra il pubblico ho notato grande curiosità ed interesse, che si è mantenuto vivo fino alla fine della sessione. Il momento topico è stato sicuramente la scenetta di Dave Developers VS Designers, una piece teatrale di spessore!
Non c’è tanto tempo da perdere. Rapido coffee-break e sale sul palco Giuseppe Maggiore MSP (super)senior ed esperto di XNA, che impiega pochissimi minuti ad ammaliare i presenti, me compreso. Parlantina sciolta, accento veneziano D.O.C. e grande conoscenza della materia, ha tirato su in 50 minuti un mini-videogame X-Wing VS Tie-Fighters stile Star Wars con gestione dei danni,sistemi particellari, esplosioni, grafica accattivante e il tocco finale di una nebulosa spaziale da applausi, che sono partiti prima ancora che la session fosse terminata.
In definitiva la giornata è stata un ottimo successo di pubblico, sia in termini di numero che in termini di gradimento. Per questo onore va ai ragazzi di Napoli : Raffaele, Tino e Michele ( e gli altri che non ho avuto modo di conoscere) che hanno tirato su un evento con i controfiocchi.
Infine mi permetto una piccola parentesi personale:
sono stati due giorni molto piacevoli in cui ho avuto modo e piacere di conoscere Mauro e Francesca, e gli altri MSP che prima del 25 erano più che altro nomi ed indirizzi e-mail. Inoltre ho potuto toccare con mano quali sono gli obbiettivi di questa iniziativa e del ruolo di MSP.
Non mi dilungo oltre… anche se ci sarebbe tanto da dire e raccontare.
Ke’
P.S. ecco gli speakers Dave e Giuseppe :
P.P.S. Gli indispensabili link ai loro personal blog su Academic Club:
Funzioni temporizzate in Python
Buona nerdlettura.
Il linguaggio Python offre, fra le sue librerie standard, almeno due opzioni per realizzare la temporizzazione delle funzioni o detto altrimenti, per eseguire una funzione ad un certo orario o dopo un tot di secondi.
La libreria “sched” (http://www.python.org/doc/2.5.2/lib/module-sched.html) è la prima opzione ma non ci piace perché non consente di restituire il controllo al main durante l’attesa.
La seconda, focus di questo articolo, è la funzione Timer della libreria “threading” (http://docs.python.org/library/threading.html).
Osservando il codice di threading.py (che trovate ad esempio in /usr/lib/python2.6/):
[...]
def Timer(*args, **kwargs):
return _Timer(*args, **kwargs)
class _Timer(Thread):
"""Call a function after a specified number of seconds:
t = Timer(30.0, f, args=[], kwargs={})
t.start()
t.cancel() # stop the timer's action if it's still waiting
"""
def __init__(self, interval, function, args=[], kwargs={}):
Thread.__init__(self)
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.finished = Event()
def cancel(self):
"""Stop the timer if it hasn't finished yet"""
self.finished.set()
def run(self):
self.finished.wait(self.interval)
if not self.finished.isSet():
self.function(*self.args, **self.kwargs)
self.finished.set()
[...]
si nota che il costruttore prende in ingresso:
– interval: il numero di secondi dopo i quali eseguire la funzione
- function: il nome della funzione
- args: lista opzionale di argomenti della funzione
- kwargs: dizionario opzionale di argomenti con nome
Nel metodo run, si può infatti notare che la chiamata: self.function(*self.args, **self.kwargs) accetta una lista e/o un dizionario.
Per capire come utilizzarli si può far riferimento a questo articolo:
“the mysterious miss args and mister kwargs”
Vediamo ora alcuni esempi di utilizzo di un Timer.
import time
from threading import Timer
def print_time():
print "From print_time", time.time()
def print_some_times():
print "From print_some_times", time.time()
Timer(2, print_time).start()
print_some_times()
Dentro print_some_times() invochiamo print_time() che verrà eseguita tra 2 secondi.
import time
from threading import Timer
def print_time(arg):
print arg
print "From print_time", time.time()
def print_some_times():
a = ["my_arg"]
print "From print_some_times", time.time()
Timer(2, print_time, a).start()
print_some_times()
Stesso di sopra ma con un parametro passato alla funzione print_time().
Nota bene: il parametro – anche se singolo – deve essere passato come lista di elementi.
Il passaggio di più parametri può avvenire utilizzando:
def print_time(arg1, arg2, ..., argN)
con relativo:
a = ["my_arg1", "my_arg2", ..., "my_argN"]
oppure con la sintassi:
def print_time(*args)
e relativo:
a = ["my_arg1", "my_arg2", ..., "my_argN"]
Lo script diventa quindi:
import time
from threading import Timer
def print_time(*args):
print args
print "From print_time", time.time()
def print_some_times():
a = ["my_arg1", "my_arg2", "my_arg3", 1, 5, "ancora_stringa"]
print "From print_some_times", time.time()
Timer(2, print_time, a).start()
print_some_times()
e così via.
Lo stesso discorso vale per kwargs usando la sintassi:
b = {"name1":"value1", "name2":2, ...}
import time
from threading import Timer
def print_time(*args, **kwargs):
print args
print kwargs
print "From print_time", time.time()
def print_some_times():
a = ["quattro", "otto", "quindici", 16, 23]
b = {"name1":"jack", "name2":"kate", "name3":"sawyer", "number": 42}
print "From print_some_times", time.time()
Timer(2, print_time, a, b).start()
print_some_times()
Buona nerdpratica.
XNA: the Sample & the Game
Questo progettino in XNA che vi presentiamo è un semplice “simulatore di volo spaziale” dove il giocatore dovrà comandare un’astronave e distruggere tutti i nemici che incontra in mezzo al percorso.
Partiamo dal presupposto che la nave in realtà non va mai avanti (ovvero non modifica mai la sua posizione Z): poco più in basso del modello dell’astronave è infatti posizionato un modello simil-sferico (molto grande) che ruota in continuazione attorno al suo asse X, creando così un effetto di movimento in avanti molto suggestivo ed efficace.

Le astronavi si muovono verso il giocatore con un moto rettilineo uniforme, e viene fatto in continuazione un calcolo delle intersezione tra:
• bounding box di nemici e astronave (metodo TestCollisionBetweenShips)
• bounding box di nemici e i missili che lanciamo (metodo TestCollision)
A seconda del fatto che colpiamo o veniamo colpiti dai nemici, possiamo guadagnare o perdere punti (e vite). I punti appaiono in alto a sinistra in un HUD molto semplice. I nemici non sparano missili, però se “oltrepassano” l’astronave del giocatore, si perdono comunque dei punti… e siccome lo scopo del gioco è quello di arrivare alla fine del percorso (ovvero dopo una trentina di nemici) facendo il maggior numero di punti possibile, ovviamente bisogna cercare di eliminare più nemici possibili.
Dopo aver colpito 10 nemici, è possibile usare lo scudo (una sfera che ruota attorno all’astronave) premendo il tasto Z, che vi proteggerà dai nemici che vi vengono incontro.
Aggiungere nemici è molto semplice: c’è un metodo setOstacoli() chiamato da Update, che si occupa di specificare per ogni nemico:
• il modello da caricare, con eventuale texture
• eventuale ridimensionamento
• vettore di posizione iniziale da cui deve partire (X e Y in un intervallo ben determinato, mentre la Z quasi sempre a -4000)
• velocity vector
• quanti punti deve assegnare al giocatore, nel caso venisse eliminato
• quando deve apparire (scrivendolo in millisecondi)
• un’eventuale flag (is_vita) se la nave in avvicinamento non è un nemico ma una vita in più per il giocatore
Sono tutti attributi definiti nella classe GameObject, che si occupa di gestire tutti i modelli 3D.
thanks to: DeviantArt per i modelli 3D
Enjoy!
Naples on 25th of February: The Game Day Opening
Hi guys on 25th of February 2010 I’ll be giving a speech in Naples with Giuseppe Maggiore, in presence of Joe Wilson, Microsoft Senior Director of Academic Initiatives for Developer and Platform Evangelism, and that’s a big deal
I’ve created in no-time the graphics for blog, cards, posters…hopefully youìll like them
you can find the official blog @ http://blogs.academicclub.org/gameday , definitaly a cool template
hope you like!
-dave
Php : Mysqli
Ciao a tutti ragazzi, datochè devo tenere un mini-corso ne approfitto per redigere una mini guida dove andrò a spiegare l’interafacciamento a un Database di tipo Mysql sfruttando le potenzialità del linguaggio PHP versione 5 utilizzando un approccio alla programmazione di tipo OOP (Object Oriented) e le classi fornite dal suddetto linguaggio.
Iniziamo dal Database che possiamo considerarlo come un’oggetto a se stante, al quale faremo riferimento per le operazioni di lettura/scrittura e modifica. Per poterlo richiamare avremmo bisogno di alcuni parametri di base, quali: [Host/User/Password/Nome Database], quindi iniziamo a creare una classe dove memorizzeremo queste informazioni e facciamo che questa erediti (cioè sia figlia) della classe mysqli che possiamo trovare tra le specifiche di PHP5!
class database extends mysqli{}
protected $connection;
protected $host = "numero ip host";
protected $user = "Sql277074-1234";
protected $pwd = "password sql";
protected $db = "nome del Database che utilizziamo"; //nel senso che base di dati, non l'applicativo
Avendo impostato tutti i parametri della connessione, ora possiamo tranquillamente creare una funzione per connetterci al Database. Ma come si fa? Bè non c’e nulla di più facile che utilizzare qualcosa scritto da qualcun’altro e che già funzioni. Come già annunciato la nostra classe è figlia della classe mysqli che contiene tutti i metodi che servono per interfacciarsi con il database, quindi l’unica cosa che dovremmo fare è controllare il manuale di reference, ed andare a vedere che tipo di metodo possiamo utilizzare : www.php.org
Vediamo un’esempio di connessione :
public function accesso(){
parent::__construct($this->host,$this->user,$this->pwd,$this->db);
if ($this->connect_errno) {
die('Connect Error (' . $this->connect_errno . ') '. $this->connect_error);
}
}
Questo è un metodo valido per poterci connettere al database e che possiamo dunque includere nella nostra classe, anche se sarebbe meglio raffinarlo con più controlli, ma per quello che dobbiamo fare queste poche righe bastano e avanzano.
Ma in realtà come facciamo a comunicare veramente con il database? Cioè a mandare delle interrogazioni e ricevere dei risultati? Ovviamente c’e più di un modo, ma vi illustrerò quello che a me piace di più in termini di scrittura di codice e di sicurezza contro SQL-Injection.
Avendo ereditato la solita classe mysqli, disponiamo di un metodo che ci permette di preparare le query Sql, fare un BIND dei parametri ed eseguirli. Facciamo un’esempio
-
Preparo la mia query per es. SELECT * FROM Evento WHERE ID_evento = ?
-
Una volta preparata la query faccio un BIND dei parametri, cioè assegno ai parametri un valore, quindi al posto del “?” andrò a specificare un esatto valore, e ne dichiarerò anche il tipo in modo da filtrare possibili “false stringhe”
-
Eseguire quello che abbiamo appena dichiarato
-
Memorizzare i risultati in delle variabili che utilizzeremo per la visualizzazione/etc.
Vediamone dunque un’esempio pratico :
#class Database
class database extends mysqli{
protected $connection;
protected $host = “62.149.150.100″;
protected $user = “Sql277074″;
protected $pwd = “93df69a5″;
protected $db = “Sql277074_1″;
public $results;
public function __construct(){}
public function accesso(){
parent::__construct($this->host,$this->user,$this->pwd,$this->db);
if ($this->connect_errno) {
die(‘Connect Error (‘ . $this->connect_errno . ‘) ‘
. $this->connect_error);
}
}
}
#CLASS eventi
class evento{
public function __construct(){
}
public function view_detail($id){
$db = new database(); //creiamo una istanza della classe DB.
$db->accesso(); // Richiamiamo il metodo accesso in modo da essere collegati al db
$stmt = $db->prepare(“SELECT * FROM Evento WHERE ID_Evento = ? “); //prepariamo la query
$stmt->bind_param(‘i’,$id); // facciamo il BIND dei parametri (in questo caso passatro tramite valore)
$stmt->execute(); //eseguiamo quello che abbiamo dichiarato prima
$stmt->bind_result($ID_Evento,$FK_Azienda,$FK_Evento_categoria,$Descrizione,$Data_evento_inizio,$Data_evento_fine); //facciamo un’altro bind per ricevere i risultati tutte queste variabili sono associate a tutte le colonne che ha la tabella interrogata!
//fino a quando c’e qualcosa da “prendere” tu prendila e stampa il campo descrizione
while($row = $stmt->fetch()){
print(”
Descrizione completa:
“);
echo $Descrizione; //Stampa a video Descrizione
?>
Richiamando dunque la funzione view_detail da una pagina che andremo a creare, dunque saremo in grado di poter visualizzare ciò che c’e nel nostro database a quell’interrogazione! Ovviamente se non si ha comprensione del linguaggio SQL, PHP e non si hanno basi di OOP questo articolo potrebbe risultare futile. In caso contrario questo è un buon metodo per poter fare interrogazioni sfruttando la classe mysqli e ponendo fine all’uso di vecchi metodi “old syle & dangerous”.
CodeZero SL App lands on Microsoft
Uhhh …. hot release today gusy! I’ve been in contact last few montsh with Francesca e Mauro developing a Silverlight application to explore the Academic Tours going around Italy this year!
You can find the app @ Microsoft.it/studenti
Enjoy it!
p.s. let me know if you find any bug
Wallpaper Desktop
Rispogliavo vecchi lavori fatti in passato prima ancora di sapere cosa era un’esame universitario e dove le giornate trascorrevano molto più leggere di questi giorni passati a studiare numeri teoremi e definizioni.. Questo è un mio piccolo lavoretto fatto con Lightwave versione 7.5? Eh si, mi sa che è passato un bel pò di tempo dall’ultima volta che lo ho toccato!
Comunque vi regalo questo sfondo, che con qualche giusta modifica potrebbe diventare veramente carino
Io lo avevo fatto per il mio pc, datochè su internet non avevo trovato uno sfondo che mi piacesse, ed avevo voglia di imparare a usare un modeler 3D, ho fatto tutto di mano mia!
Splendida 28enne cerca uomo con guadagno di almeno 500mila $
Una donna di New York ha scritto a un sito di finanza americano chiedendo consigli su come trovare un marito ricco: già ciò di per sé é divertente, ma il meglio della storia é quello che un tizio le ha risposto.
LEI: Sono una ragazza bella (anzi, bellissima) di 28 anni.Sono intelligente e ho molta classe.
Vorrei sposarmi con qualcuno che guadagni minimo mezzo milione di dollari l’anno.
C’é in questo sito un uomo che guadagni ciò?
Oppure mogli di uomini milionari che possono darmi suggerimenti in merito?
Ho già avuto relazioni con uomini che guadagnavano 200 o 250 mila $,ma ciò non mi permette di vivere in Central Park West.Conosco una signora che fa yoga con me, che ha sposato un ricco banchiere e vive a Tribeca, non é bella quanto me, e nemmeno tanto intelligente.Quindi mi chiedo, cos’ha fatto x meritare ciò e perché io non ci riesco?Come posso raggiungere il suo livello?
LUI: Ho letto la sua e-mail con molto interesse, ho pensato profondamente al suo caso e ho fatto una diagnosi della sua situazione.Premetto che non sto rubando il suo tempo, dato che guadagno 500 mila $ l’anno.Detto ciò, considero i fatti nel seguente modo:Quello che Lei offre, visto dalla prospettiva di un uomo come quello che Lei cerca, é semplicemente un pessimo affare.E ciò per i seguenti motivi:Lasciando perdere i blablabla, quello che Lei suggerisce é una negoziazione molto semplice.Lei offre la sua bellezza fisica e io ci metto i miei soldi.Proposta molto chiara, questa. Ma c’é un piccolo problema.Di sicuro, la Sua bellezza diminuirà poco a poco e un giorno svanirà, mentre é molto probabile che il mio conto bancario aumenterà continuamente.Dunque, in termini economici, Lei é un attivo che soffre di deprezzamento, mentre io sono un attivo che rende dividendi.Lei non solo soffre un deprezzamento ma questo é progressivo ed aumenta ogni anno!Spiego meglio:Oggi Lei ha 28 anni, é bella e continuerà così x i prossimi 5/10 anni, ma sempre un pò meno e all’improvviso, quando Lei osserverà una foto di oggi, si accorgerà che é diventata una pera raggrinzita.Questo significa, in termini di mercato, che oggi lei è ben quotata, nell’epoca ideale x essere venduta, non x essere comprata. Usando il linguaggio di Wall Street, chi la possiede oggi deve metterla in "trading position" (posizione di commercio), e non in "buy and hold" (compra e tieni stretto), che, da quanto sembra, é quello per cui Lei si offre. Quindi, sempre in termini commerciali, il matrimonio ("buy and hold") con Lei non é un buon affare a medio/lungo termine. In compenso, affittarla per un periodo, può essere, anche socialmente, un affare ragionevole e potremmo pensarci su. ..Potremmo avere una relazione per un certo periodo…..Huuummm…. Pensandoci meglio e per assicurarmi quanto intelligente, di classe e bellissima lei é, io, possibile futuro "affittuario" di tale "macchina", richiedo ciò che é di prassi: Fare un test drive.La prego di stabilire data e ora.Cordialmente
Suo Investitore
Fonte: www.finanzaeinvestimenti.it
WPF per Beginners
Ciao ragazzi!
questa volta presentiamo un piccolo webcast fatto con altri due MSP di eccellenza: Matteo (MVP & Microsoft Student Partner) e Andrea (MSP & Central & South Team Lead).
Trattiamo di WPF per beginners, ma non la solita pappardella, qualcosa di più intrigante…
vedere per credere.
Disponibile nella web TV di Code Zero Zone
Commenti sono sempre ben graditi!
-dave








