È andata, il giorno è arrivato. Parte oggi il progetto N3TV, il nuovo “canale” NetTV di Tommaso Tessarolo con moltissime novità interessanti. Ho avuto il piacere di partecipare come CTO allo sviluppo della nuova piattaforma di interazione che fornisce servizi di Poll, Digg e Chat. Complimenti a tutto il gruppo per i consigli, i test, i nuovi video e i testi. Così N3TV rappresenta davvero un nuovo modo di fare e vedere la NetTV, dove interazione e qualità s’incontrano. Tenete d’occhio il sito e partecipate alla prossima trasmissione!
Articoli con Tag ‘Sviluppo’
Nasce N3TV: NetTV 2.0
How I Did It: scrivere un countdown in Flash
Per la serie “How I Did It” (ovvero come lo feci) ecco come realizzare un countdown in Flash per visualizzare, partendo da un data, quanto giorni, ore, minuti e secondi mancano ad un evento! Nel filmato Flash qui sotto, ad esempio, vediamo quanti giorni mancano al primo dell’anno! Possono essere utilizzati i menu a tendina per selezionare un diversa data:
Creiamo tre combo day_cmb, month_cmb ed year_cmb e li inizializziamo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // init combo import mx.controls.ComboBox; // for (var i = 1; i < 32; i++) { day_cmb.addItem(i, i); } var sm:Array = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"); for (var i = 0; i < 12; i++) { month_cmb.addItem(sm[i], i); } // potrei partire dall'anno attuale... for (var i = 2007; i < 2020; i++) { year_cmb.addItem(i, i); } // imposto la data al 1 gennaio 2008 day_cmb.selectedIndex = 0; // -1 month_cmb.selectedIndex = 0; // -1 year_cmb.selectedIndex = 1; |
Il cuore del sistema lo posizioniamo nell’evento onEnterFrame:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | this.onEnterFrame = function() { // var today:Date = new Date(); var currentYear = today.getFullYear(); var currentTime = today.getTime(); // var targetDate:Date = new Date(year_cmb.selectedItem.data, month_cmb.selectedItem.data, day_cmb.selectedItem.data); var targetTime = targetDate.getTime(); // var timeLeft = targetTime - currentTime; // var sec = Math.floor(timeLeft / 1000); var min = Math.floor(sec / 60); var hrs = Math.floor(min / 60); var days = Math.floor(hrs / 24); // sec = String(sec % 60); sec = (sec.length < 2) ? "0" + sec : sec; // min = String(min % 60); min = (min.length < 2) ? "0" + min : min; // hrs = String(hrs % 24); hrs = (hrs.length < 2) ? "0" + hrs : hrs; // days = String(days); days = (days.length < 2) ? "0" + days : days; // var counter:String = days + ":" + hrs + ":" + min + ":" + sec; // time_txt.text = counter; }; |
DatePicker con Prototype e Scriptaculous
Un’interessante e utile libreria Javascript basata sull’accoppiata Prototype e Scriptaculous che permette di aggiungere la funzione di DatePicker (componente presente in ActionScript/Flash) in normali INPUT TEXT HTML.
La sua caratteristica Unobtrusive (non intrusiva) lo rende uno strumento ideale per espandere le funzionalità di un sito già precostituito. Per attivare la funzione di DatePicker basta aggiungere la classe “date” nel nostro TAG INPUT. Nel codice Javascript è possibile impostare una serie di parametri tra cui il suporto per la lingua italiana.
Ecco una porzione di codice esemplificativa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <script type="text/javascript" src="/prototype.js"></script> <script type="text/javascript" src="/scriptaculous.js"></script> <script type="text/javascript" src="/datepicker.js"></script> <style type="text/css"> @import("/css/datepicker.css"); </style> <form> <input type="text" id="date-from" name="date-from" /> </form> <script type="text/javascript"> var dpck = new DatePicker({ relative : 'date-from', language : 'en' }); </script> |
Windows tools: il meglio del freeware
iColorFolder 1.4.2
I felici possessori di Mac hanno sempre avuto un sistema operativo in grado di gestire i colori delle cartelle. Finalmente con iColorFolder, utility open source, anche su Windows XP sarà possibile impostare colori e grafica delle cartelle.
Dexpot 1.4.0
Permette di gestire Desktop virtuali in modo assai efficente. Mette a disposizione tutta una serie di utility per la gestione delle finestre e moltissimi funzioni avanzate per rintracciare anche finestre nascoste, regolare la trasparenza e molto altro. Questo software consente moltissime personalizzazioni e di eseguire uno slide show di tutti i Desktop creati e permette di creare regole per la gestione delle finestre nei relativi Desktop. Inoltre è possibile visuallizzare tutti i Desktop (massimo 20) in un colpo solo!.
Visual Task Tips
Permette di ottenere una miniatura, un’anteprima quindi, delle finestre iconizzate nella barra delle applicazioni, esattamente come accade in Windows Vista. La caratteristica particolare di questa applicazione risiede nella dimensione dell’anteprima, estremamente chiara e visibile e nella capacità di visualizzare in tempo reale le modifiche alla finestra visualizzata, come animazioni in Flash, progress bar, etc…
Vista Wallpaper Collection
Sul sito Web di Hamad Darwish, fotografo, sono presenti alcuni scatti che realizzati per Microsoft due dei quali sono fanno parte proprio di quelli a corredo di Windows Vista. Potete scaricare 22 sfondi davvero magnifici da utilizzare su qualsiasi sistema operativo, XP compreso.
FileHamster
Dedicato sopratutto agli sviluppatori, ma non solo, questo semplice e leggero software permette di tenere traccia delle versioni dei file. Il suo uso è davvero semplice: basta selezionare dall’applicativo una cartella o un file da tenere “sotto controllo”. Da quel momento sarà possibile repristinare una versione precedente. È possibile decidere quali file o cartelle “preservare” tramite classiche wildcard (come *.* o _*) e il numero di revisioni. Funziona, in pratica, con qualsiasi tipo di documento: PSD, DOC, PDF, HTML, etc… Quindi utile a chi scrive documenti, ai grafici che usano Photoshop e agli sviluppatori software.
Aptana IDE update: milestone 9
È disponibile l’aggiornamento ad Aptana IDE, l’ambiente di sviluppo Web che supporta Adobe AIR e Apple iPhone. Tra le novità segnaliamo il miglioramento della sezione PHP con l’aggiornamento del Code Assist sia sulle funzioni che sui parametri. Migliorata anche la "colorazione" del codice. Aggiunto il supporto per gli ultimi framework Ajax tra cui Prototype.js e jQuery. Migliorata anche la gestione di Javascript.

Per la lista complete delle nuove funzionalità clicca qui.
Reflex 1.1: aggiungere effetto di riflessione alle immagini
Nuova versione 1.1 della libreria Javascript Reflex con la quale è possibile aggiungere effetti di riflessione alle immagini. Il vantaggio di usare questa tecnica “non intrusiva” è la rapidità con cui è possibile aggiungere questi effetti senza dover spendere tempo nel realizzare effettivamente l’immagine di riflessione.
Questa versione è stata provata sui browser Mozilla Firefox 1.5+, Opera 9+, Safari e IE6. La minima dimensione supportata per un’immagine è 32×32. Una volta inclusa la libreiria:
Basta inserire class=”reflex” sulle immagini dove desideriamo applicare tale effetto. Sfruttando la proprietà dell’attributo class è possibile manipolare gli effetti di riflessione, il chè rende questa libreria davvero particolare. È possibile, infatti, distorcere anche l’immagine aggiungendo effetti 3D. Ad esempio ecco come aggiungere varie caratteristiche alla rilfessione:
1 | <img class="reflex idistance16 iborder2 iheight24" width="200" alt="" src="images/example.jpg"/> |
Per i dettagli vedi la documentazione sul sito ufficiale.
Sullo stesso sito è possibile scaricare numerosi altri effetti come Edge, Corner, Glossy e molti altri, tutti dedicati alle immagini.
Proto.Menu: menu contestuali in Javascript con Prototype 1.6.0
Proto.Menu è una semplice e leggera (2Kb) soluzione Javascript per aggiungere funzionalità di menu contestuali alle pagine HMTL. Questa libreria sfrutta il recente rilascio di prototype 1.6.0_rc0. Le sue caratteristiche essenziali sono:
- Leggerezza: ~2 KB (~1.5 KB versione ridotta)
- Unobtrusive: non intrusiva
- Supporta tutti i browser
- Personalizzabile a livello di style-sheet
- Estremamente veloce
Per il suo uso è richiesto:
- prototype.js 1.6.0_rc0
- provata sui browser: Firefox 1.5+, Internet Explorer 6+, Safari 3+, Opera 9+, Netscape Navigator 9+
Per utilizzarla basta includere la libreria prototype e proto.menu:
Download Proto.Menu.js (o versione compressa)
1 2 |
Si possono includere file CSS personalizzati
1 | <link rel="stylesheet" href="Proto.Menu.css" type="text/css" media="screen" /> |
E il suo uso è davvero semplice, si crea un array con i link da mostrare:
1 2 3 4 5 6 7 8 9 10 11 | var myLinks = [ {name: 'Back', callback: function(){alert('back function called')}}, {name: 'Forward', callback: function(){alert('Forward function called')}}, {separator: true}, {name: 'Reload', callback: function(){alert('Reload function called')}}, {name: 'Disabled option', disabled: true}, {name: 'Toggle previous option', callback: function(){ var item = oLinks.find(function(l){return l.name == 'Disabled option'}); item.disabled = item.disabled == false ? true : false; }} ] |
Si attivano i menu passando il riferimento all’array creato:
1 2 3 4 5 6 7 | <script type="text/javascript"> new Proto.Menu({ selector: '.contextmenu' // context menu will be shown when element with class name of "contextmenu" is clicked className: 'myContextMenu', // this is a class which will be attached to menu container (used for css styling) menuItems: myLinks // array of menu items }) </script> |
Notare la proprietà selector che indica l’elemento legato al click per questo menu contestuale.
Right Click in AS3: menu contestuali personalizzati
Eliminare i menu contestuali o più semplicemente rispondere al “right click” del mouse del Flash Player è una possibilità non permessa direttamente da codice ActionScript anche nella versione CS3. Questa caratteristica sarebbe interessante sia per i giochi che per le Applicazioni RIA. Paulius Uza ha proposto una soluzione per ActionScript 3 (AS3) che lavora in accoppiata con Javascript. Questa “patch” è ancora in fase di testing in quanto dipende dal Flash Player installato e dal browser. Si può contribuire testando un’applicazione demo qui.
È stato apero anche un “progetto” su Google Code:
The idea is fairly simple:
1-Use Javascript in the HTML container page to disable the right-click on top of the SWF.
2-Capture the event and pass it to a function that communicates with Flash via the External Interface
3-In Actionscript the function called from Javascript does whatever you need to display your own custom context-menu.
Prototype 1.6.0 release candidate
È stata appena rilasciata la release candidate 1.6.0 di prototype con interessanti aggiornamenti all’intero sistema di API. In particolare il metodo observe dell’oggetto Event è stato migliorato e ora fornisce il contesto dell’oggetto che ha rilasciato l’evento. Questo “giusto” comportamento può tuttavia essere sovrascritto. Questo significa che per default this si riferisce all’oggetto che ha rilasciato l’evento. È stata introdotta anche la possibilità di creare eventi personalizzati. Altri miglioramenti riguardano la Function.prototype, le funzioni di DOM, Ajax, le funzioni delle classi e molto altro. Per una lista completa vedi il CHANGELOG.
Download
- Download Prototype 1.6.0_rc0
- Get Prototype help on the rails-spinoffs mailing list or #prototype IRC channel
- Interact with the Core Team on the prototype-core mailing list
- Submit bug reports to Rails Trac
ActionScript: _parent e controllo dei contesti
Quando “scatta” un evento di un oggetto il contesto, ovvero l’oggetto madre che rappresenta l’area di validità di tutte le variabili, diventa l’oggetto stesso. Questa caratteristica, propria della programmazioni Object Oriented, può disorientare provocando errori e malfunzionamenti nel codice. Inoltre, in determinate situazioni, può impedire di accedere ad alcune variabili “prima” disponibili.
Prima di tutto vediamo una caratteristica di ActionScript legata alla gestione dei contesti che, se compresa, ci farà risparmiare alcune ore di inutili prove. Quando abbiamo a che fare con oggetti grafici o più semplicemente di MovieClip innestati uno all’interno dell’altro, la proprietà _parent risolve qualsiasi problema di contesto. Ad esempio se il MovieClip padre_mc contiente un altro MovieClip figlio_mc e si usa il seguente codice:
1 2 3 4 5 | // codice all'interno di padre_mc figlio_mc.onRelease = function() { trace(this); // figlio_mc trace(this._parent); // padre_mc } |
Risalisre al “padre”, quindi, risulta chiaro ed immediato.
Con classi pure, di solo codice, o estensioni di MovieClip, la proprietà _parent non è disponibile e le cose si potrebbero complicare! Immaginiiamo di avere una Classe MyClass:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Il contesto di MyMethod() è, ovviamente, this, ovvero il puntatore alla classe MyClass. La variabile num, ad esempio, ha un ciclo di vita racchiuso all’interno del metodo MyMethod(). È visibile quindi solo all’interno del metodo e verrà distrutta all’uscita. Stessa cosa per la variabile myObject che tuttavia inizializza un evento, in questo caso onLoad. Quando scatterà onLoad() il contesto diventerà myObject lasciandoci, apparentemente, senza il puntatore alla classe madre myClass. Analizzando attentamente il codice ci accorgiamo che la variabile cp, definita nel metodo myMethod(), ha lo stesso contesto della variabile myObject! Infatti la variabile cp(class pointer) sarà visibile all’interno del metodo onLoad dell’oggetto myObject in quanto condivide con esso lo stesso contesto. In realtà il metodo myMethod() non viene deallocato proprio perchè l’oggetto myObject ha necessità di “vivere” più al lungo del previsto visto che ha “allocato” un evento (di tutto questo se ne occupa Flash a nostra “insaputa”).
Consiglio
Per gli eventi legati a bottoni o a MovieClip una buona abitudine sarebbe quella di usare la forma:
1 2 3 4 5 | my_mc.onRelease = myOnRelease; function myOnRelease() { trace(this); // _root trace("Click me"); } |
Al posto della più rapida ed immediata:
1 2 3 4 | my_mc.onRelease = function() { trace(this); // my_mc trace("Click me"); } |
Il vantaggio di usare un funzione esterna è quella di avere un contesto neutro e la possibilità di accedere alla funzione a prescindere dal MovieClip che la controlla. Nel secondo caso, ad esempio, se volessi forzare l’esecuzione del codice legato al “click” del MovieClip dovrei usare un codice di questo tipo:
1 | my_mc.onRelease(); |
In pratica chiamo l’evento come fosse un metodo. Tuttavia devo – appunto – avere a disposizione il MovieClip my_mc. Nell’altro modo, invece, posso eseguire il codice chiamando direttamente myOnRelease(). Ovviamente, come mostrato negli esempi, occhio ai contesti. Nel primo caso il contesto di myOnRelease() è quello dell’oggetto madre dove è scritto, ad esempio _root. Nel secondo caso, invece, il contesto è sempre il MovieClip my_mc!
Forzare un diverso contesto
Concludiamo con un tricks utile in molte circostanze. Flash mette a disposizione una libreria, mx.utils, con un oggetto Delegate in grado di forzare un contesto di un metodo o funzione. Il suo uso è davvero semplice:
1 2 3 4 5 6 7 8 | import mx.utils.Delegate; // var my_mc; // puntatore ad un MovieClip var my_btn; // un bottone function myFunction() { trace(this); } my_btn.onPress = Delegate.create(my_mc, myFunction); |
L’evento onPress del bottone my_btn punta ad un “nuova” funzione creata appunto con il contesto my_mc. Quando si clicca sul bottone my_btn, il codice eseguito in myFunction() avrà come contesto my_mc!











Ultimi Commenti
Giovambattista Fazioli: @Nik: Sono contento! In bocca al lupo dunque!!
Nik: Lunedì ho l’esame di informatica su java, grazie mi sei stato utilissimo, il libro che ho era poco chiaro...
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...