Visualizzazione post con etichetta Adobe. Mostra tutti i post
Visualizzazione post con etichetta Adobe. Mostra tutti i post

martedì 25 maggio 2010

HTML5 plug-in in DreamWeaver CS5


HTML5 oramai è alle porte, e Adobe, nonostante resti fedele al supporto Flash (che personalmente ritengo assolutamente necessario per le future RIA) si mette comunque all'opera per diffondere il nuovo standard tramite il suo ambiente di svuiluppo HTML numero 1, ossai DreamWeaver CS5.

E' infatti disponibile per il download dal sito Adobe un plug-in che permetterà una più semplice gestione e utilizzo dei nuovi tag implementati da questo standard (due su tutti, il tag canvas e il tag video, che, con l'aiuto di javascript, saranno i principali rivali di flash almeno per le applicazioni più semplici) e una preview di video e animazioni già nel Live View del programma.

Adesso non resta che attendere che l'utenza e i browser si adeguino ai nuovi standard per iniziare a usufruire del vero Web 3.0

Link: Download

martedì 11 maggio 2010

Master Collection CS5 in Italiano


E' di pochi minuti fa la notizia che anche lo store italiano della adobe ha messo online per il download la Creative Suite 5, che sarà quindi disponibile in trial per 30 giorni.

Ovviamente, il crack qui linkato è perfetto anche per questa versione

lunedì 10 maggio 2010

FlashPlayer per Mac: codename "GALA"


Adobe sembra proprio non voglia avere rimorsi, e sta facendo di tutto per recuperare il gap tra il rendimento di flashplayer su Windows e quello su Mac.

Il frutto di questo sforzo si chiama Gala, ed è la versione espressamente sviluppata per MAC OS del famoso player Adobe. Per farla breve, ecco cosa avrà da offrire ai sempre più esigenti utenti Apple:

  • Finalmente accelerazione hardware H.264 della GPU anche su Mac
  • Lavoro della CPU ridotto di 2/3 rispetto al Flash normale
  • Lavoro delle ventole drasticamente ridotto, se non azzerato rispetto alla routine normale di default in idle
  • Durata della batteria drasticamente aumentata durante la navigazione e riproduzione di contenuti
  • Richiede Mac OS X 10.6.3 (o superiore) e GPU NVIDIA Geforce 9400M/9600M GT o Geforce 320M o Geforce GT 330M
Adobe comunque  informa inoltre che le funzionalità di "Gala" non saranno presenti da subito nella versione finale di Flash Player 10.1, ma saranno rilasciate in un secondo momento sottoforma di aggiornamento. 

Non si può certo dire che Adobe non abbia imboccata la strada della redenzione. Chissà come risponderà Jobs... Che proibisca l'uso di Flash Player anche su MAC?

martedì 4 maggio 2010

Creare apps per iPhone con Flash CS5


Con il rilascio della nuova Creative Suite 5 sono stati aggiornati numerosi ambienti di sviluppo. Una delle migliorie più significative (eh, ahimè, presto inutili) è l'iPhone Packager, ossia un compiler in grado di convertire un sorgente ActionScript 3.0 in un eseguibile per iPhone.

Giusto per testare le effettive capacità del packager, ho provato a implemntare una banale app che reagisca all'inclinazione del telefono. Per farlo occorre utilizzare le nuove classi del package flash.sensor (implementate proprio in vista dei nuovi smartphone).

Vediamo nel dettaglio il codice

import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

stage.scaleMode = StageScaleMode.NO_SCALE;//blocca lo scale dello stage
stage.align = StageAlign.TOP_LEFT;//allinea lo stage in alto a sx (utile per posizionare oggetti al suo interno)
//stage.cacheAsSurface = true;//boh...

Innanzitutto importiamo i package che ci servono. In teoria questi import non servono se non quando si implementa una nuova classe, ma Flash CS5 le ha inserite non appena ho dichiarato gli oggetti, per cui...



var xSpeed:Number = 0;
var ySpeed:Number = 0;
const RADIUS = 20;


Inizializzo le variabili di cui ho bisogno:
  1. accelerometer contiene eventi e relative informazioni riguardo i sensori X,Y,Z dello smartphone.
  2. timer regolerà la frequenza di aggiornamento del movimento della pallina
  3. xSpeed/ySpeed sono le varibili Number della velocità della pallina nel piano
  4. RADIUS è una costante che dovrebbe indicare l'ingombro della pallina nello stage. Ovvio che è a vostra discrezione...

if (Accelerometer.isSupported)
{
    var accelerometer = new Accelerometer();
    accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
    var timer = new Timer(40);
    timer.addEventListener(TimerEvent.TIMER, timerHandler);
    timer.start();
}

Il metodo statico isSupported della classe Accelerometer rileva la configurazione dello SP in modo da capire se ha o no i sensori di accelerazione e se sono abilitati dal suo O.S. E' utile per prevenire eventuali errori in caso di mancato funzionamento di questi ultimi.
  1. Istanzio quindi l'oggetto accelerometer
  2. Creo l'ascoltatore per l'ebento UPDATE, ossia l'evento scatenato al movimento dello SP
  3. Istanzio il timer. Questo oggetto scatena un evento Timer ad intevalli predefiniti specificato nel costruttore in millisec. Ho settato l'evento ogni 40 ms supponendo una framerate dell'iPhone di 25fps: 1000ms/25fps = 40ms, ossia una volta per frame. Un intervallo più basso sarebbe inutile in quanto non visualizzabile dallo SP
  4. Creo l'ascoltatore all'evento TIMER
  5. Faccio partire il timer

franco.x = stage.stageWidth / 2;
franco.y = stage.stageHeight / 2;
addChild(franco); 

Setto la posizione di partenza della pallina e la aggiungo allo stage.


function accUpdateHandler(event:AccelerometerEvent):void
{
xSpeed += event.accelerationX * 2;
ySpeed -= event.accelerationY * 2;
}

Questa funzione viene richiamata ad ogni evento di tipo AccelerometerEvent, ossia ogni volta che lo smartphone assume una posizione fuori asse. L'attributo accelerationX/Y contiene al suo interno un Number indicante l'accellerazione a cui lo SP è sottoposto (nota: qui sarebbe necessaria una distinzione tra Accellerometri e Giroscopi, che rimando a un post futuro): per la cronaca, l'unità di misura è metro/secondo^2, chi ha qualche riminescenza di meccanica classica capirà.

function movefranco():void
{
    var newX:Number = franco.x + xSpeed;
    var newY:Number = franco.y + ySpeed;
    if (newX < 20)
    {
        franco.x = RADIUS;
        xSpeed = 0;
    }
    else if (newX > stage.stageWidth - RADIUS)
    {
        franco.x = stage.stageWidth - RADIUS;
        xSpeed = 0;
    }
    else
    {
        franco.x +=  xSpeed;
    }

    if (newY < RADIUS)
    {
        franco.y = RADIUS;
        ySpeed = 0;
    }
    else if (newY > stage.stageHeight - RADIUS)
    {
        franco.y = stage.stageHeight - RADIUS;
        ySpeed = 0;
    }
    else
    {
        franco.y +=  ySpeed;
    }
}

Queste if altro non fanno che bloccare la pallina quando questa arriva a toccare i bordi. Senza entrare nel dettaglio (anche perchè credo sia tutto molto elementare) si considera l'ingombro determinato dal radius calcolando così quando la pallina deve smettere di muoversi.

function timerHandler(event:TimerEvent):void
{
    movefranco();
}

Questa funzione, richiamata dall'evento TimerEvent scatenato dall'oggetto timer si occupa di aggiornare la posizione della pallina in base alle possibile nuove inclinazioni dello SPhone.

Ecco il codice per esteso

import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;
import flash.display.MovieClip;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//stage.cacheAsSurface = true;

var accelerometer:Accelerometer;       
var timer:Timer;
var xSpeed:Number = 0;
var ySpeed:Number = 0;
const RADIUS = 20;

function accUpdateHandler(event:AccelerometerEvent):void
{
    xSpeed +=  event.accelerationX * 2;
    ySpeed -=  event.accelerationY * 2;
}

function movefranco():void
{
    var newX:Number = franco.x + xSpeed;
    var newY:Number = franco.y + ySpeed;
    if (newX < 20)
    {
        franco.x = RADIUS;
        xSpeed = 0;
    }
    else if (newX > stage.stageWidth - RADIUS)
    {
        franco.x = stage.stageWidth - RADIUS;
        xSpeed = 0;
    }
    else
    {
        franco.x +=  xSpeed;
    }

    if (newY < RADIUS)
    {
        franco.y = RADIUS;
        ySpeed = 0;
    }
    else if (newY > stage.stageHeight - RADIUS)
    {
        franco.y = stage.stageHeight - RADIUS;
        ySpeed = 0;
    }
    else
    {
        franco.y +=  ySpeed;
    }
}

function timerHandler(event:TimerEvent):void
{
    movefranco();
}
var ciccio: MovieClip = new MovieClip
//-----------------------------------------------------
if (Accelerometer.isSupported)
{
    accelerometer = new Accelerometer();
    accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
    timer = new Timer(100);
    timer.addEventListener(TimerEvent.TIMER, timerHandler);
    timer.start();
}
franco.x = stage.stageWidth / 2;
franco.y = stage.stageHeight / 2;
addChild(franco);

Link: download

domenica 2 maggio 2010

How to activate the new Master Collection CS5


It has been pasted only one day since the first release of the Creative Suite 5 trial version, and there is a way to activate the Master Collection version without any crack or  .exe.

The way in the windows OS is just the same of the previous CS4 (whitnessing the adobe policy of "today you learn, tomorrow you'll buy"): edit the hosts file, insert one of the provided serials, install with no internet connection active, and that's all folks, the game is done.

So, here is your link, follow the instructions in the .txt file and enjoy :D
(for those of you who have already downloaded the setup from the official website, just select the txt from the torrent).

don't worry, be Creative!

link: Master Collection CS5 + serial + activation

Attivare la Master Collection CS5


Nemmeno è uscita da un giorno, e la nuova Creative Suite 5 è già perfettamente crackabile, e, ancora più sorprendente, il sistema è lo stesso usato per bucare la cs4. Io l'ho testato personalmente su Windows Seven x64 e tutto ha funzionato alla perfezione, senza nemmeno creare confilitti con la CS4, che quindi può tranquillamente coesistere.

Vi basterà scaricare la suite e seguire le istruzioni trovate all'interno del txt che linkerò in questo post. 

don't worry, be Creative!

UPDATE: Il file ora contiene nuovi seriali validi dopo 01-12-2010 e nuovi server da mettere a localhost per raggirare il controllo. Divertitevi! 

new link: Attivazione Master Collection CS5

sabato 1 maggio 2010

Adobe Creative Suite 5 (CS5) disponibile in DOWNLOAD!

E' di poche ore fa la notizia che Adobe ha finalmente messo a disposizione le versioni trial della sua nuova CS5 nel suo sito americano. In effetti, se cliccate su questo link, potrete notare anche voi la comparsa link al download. Ovviamente mi sono subito messo a downloadare, per provare cosa ha davvero di interessante da offrire questa nova suite.

Restate sintonizzati per le prime impressioni. Don't worry, be Creative!

venerdì 23 aprile 2010

Adobe blocca lo sviluppo dell'iPhone Packager incluso in Flash CS5

Vista l'impossibilità di programmare con tool esterni su iPhone, che Apple ha voluto a tutti i costi, Adobe ha deciso di tirare i remi in barca.
Stop dunque allo sviluppo dell'iPhone packager (che verrà comuqnue incluso nella release definitiva), che comporterà (penso io) una concentrazione di risorse su Air 2.0, attualmente utuilizzato come runtime su Android, il più diretto rivale di iPhone.
Da sviluppatore ammetto che mi dispiace non poter sviluppare su iPhone, ma se Apple continua a essere ciò che è, sono ben lieto di migrare su HTC-Android.

C'est la vié (si diceva così, vero?)

martedì 20 aprile 2010

[Adobe CS5] La nuova Creative Suite 5 disponibile gia a Maggio


Chi pensava di dover attendere il prossimo autunno per mettere la mani nel nuovo gioiellino Adobe si troverà una bella sorpresa sotto l'ombrellone: pare infatti che Adobe sia intenzionata a giocare d'anticipo, rendendo disponibile la sua CS5  da metà Maggio, in Italia come nel mondo. Sul sito ufficiale viene infatti indicato come termine ultimo del preorder il 12 Maggio, e l'ultima metà dello stesso mese come periodo ipotizzato della spedizione.
Ricorso comunque a chiunque sia intenzionato all'acquisto di tale Suite che essa è compatibile solo con sistemi operativi a 64bit. I computer più obsoleti ( 3-4 anni fa) saranno quindi incapaci di eseguire il pacchetto di programmi. Fate attenzione quindi.

Che dire, spero di metterci le mani il prima possibile. Nel frattempo, don't worry, be creative! :)

domenica 18 aprile 2010

[Actionscript 3] XMLLoader: Creare una classe che legga e prepari XML

In questo post tratterò di come creare una classe Actionscript 3 che carichi da se un file xml, semplicemente passandole un path, e a caricamenti avvenuto generi un evento ACTION da me definito.


Questa classe non fornisce metodi e proprietà per il parsing (navigazione/lettura/scrittura), dato che quanto fornito di default da AS3 mi sembrava più che sufficiente. Vien da sè che chiunque decida di reimplementarla migliorandola è ben accetto.


La classe è composta solo da poche righe, tuttavia avendo notato che sono praticamente sempre le stesse in qualsiasi progetto Flash, ho preferito raggrupparle tutte in una classe definita. Questo ha snellito i miei progetti e permesso di gestire meglio tutto il procersso di caricmaneto dati da XML.

package _classi{

import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class LoadXML extends EventDispatcher{
public static var ACTION:String = "action";
public var xmlData:XML = new XML();
public var objPath:String;
public var isLoaded:Boolean = false;
private var urlR:URLRequest=new URLRequest();
private var urlLoader:URLLoader = new URLLoader();

public function LoadXML(path) {
objPath = path;
urlR.url=objPath;
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errHandler);
urlLoader.addEventListener(Event.COMPLETE, xmlLoader);
urlLoader.load(urlR);
}
public function xmlLoader(e:Event = null):void {

xmlData=XML(urlLoader.data);
dispatchEvent(new Event(LoadXML.ACTION));
trace(xmlData.@src);
}

private function errHandler(e:IOErrorEvent):void {

trace("url errato");
trace(e.toString());
}

}
}

Innanzitutto definiamo il package (ossia la cartella all'interno della quale salvare la nostra classe. Io normalmente utilizzo "_classe", ma è ovvio che ognuno la definisce a suo piacimento e a seconda della sua posizione relativamente all'SWF che poi la utilizzerà.

Successivamente importiamo i package a noi necessari, quindi tutti gli eventi, il loader (colui che caricherà/conterrà fisicamente l'XML), l'URLRequest (che si occuperà di fornire al loader l'url da cui caricare).
package _classi{

import flash.events.*;


import flash.net.URLLoader;


import flash.net.URLRequest;
Ecco la prima nozuione interessante: definiamo la classe come estensione della EventDispatcher (traducibile all'incirca con 'Dispensatrice di Eventi').
Questa scelta è motivata dalla necessità di poter creare un evento proprio della classe che indichi quando l'XML è stato caricato. Eviteremo l'ingombro di dover definire ogni volta un ascoltatore dell'evento Event.COMPLETE nel nostro ipotetico SWF con tutti i relativi annessi e connessi (cosa fare se l'url dell'XML non esiste).
Ci basterà infatti definire nell'SWF target un ascoltatore all'evento ACTION, qui definito, senza preoccuparci di errori di url, che saranno tutti gestiti internamente alla classe.
public class LoadXML extends EventDispatcher{
public static var ACTION:String = "action";


public var xmlData:XML = new XML();//sarà il contenitore finale del nostro XML


public var objPath:String;//il path dell'XML


public var isLoaded:Boolean = false;//una variabile flag, che cambierà valore a caricamento ultimato


private var urlR:URLRequest=new URLRequest();//il contenitore dell'url dell'XML


private var urlLoader:URLLoader = new URLLoader();//il loader
Vediamo il costruttore. La prima azione che svolge è quella di associare assegnare alla proprietà url dell'oggetto URLRequest quanto passatogli nel parametro path. Assegnamo poi all'oggetto URLLoader (da non confondere con Loader) un ascoltatore che ci avvisi di eventuali errori nel url che andremo ad assegnargli e un ascoltatore che richiami la funzione xmlLoader, in caso l'url sia esatto, dell'avvenuto caricamento dei dati da XML.

Ora che tutti gli ascoltatori sono definiti, passiamo pure l'url all'oggetto URLLoader.
public function LoadXML(path) {
objPath = path;

urlR.url=objPath;


urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errHandler);


urlLoader.addEventListener(Event.COMPLETE, xmlLoader);


urlLoader.load(urlR);
}
La funzione XMLLoader è quella che si occupa di 'travasare' i dati dall'URLLoader all'oggetto XML.

Ci si potrebbe chiedere come mai è necessario questo travaso, e perchè non far tutto con l'uno o con l'altro. Semplicemente perchè le proprietà/metodi dell'oggetto XML non sono sufficienti a caricare fisicamente i dati da file e le proprietà dell'oggetto URLLoader non sono sufficienti a gestire lalettura/navigazione dei dati una volta caricati. Dall'oltreonde, se così fosse, non avremo bisogno di implementare questa classe ;-)

Questo metodo viene richiamato a caricamento dati ultimato. Nella proprietà data dell'oggetto URLLoader avremo dunque, in sequenza binaria, il contenuto del nostro file XML. Da notare che ci saremo potuti appoggiare alla proprietà target dell'oggetto e, che tutti sappiamo puntare al 'target' dell'evento, e cioè urlLoader. O preferito tralasciare questa finezza per una maggiore chiareza del codice.

A questo punto utilizziamo il metodo dispatchEvent(), della classe EventDispatcher, che 'lancera' l'evento ACTION. Non abbiamo bisogno di instanziare un oggetto di questa classe per utilizzarla, in quanto ereditandola disponiamo gia adesso di tutti i suoi metodi/proprietà (esclusi i protected).

Questo metodo vuole come parametro l'oggetto Event che dall'esterno sarà il segnale che l'XML è stato caricato ed è pronto ad essere utilizzato. L'oggetto Event a sua volta vuole come parametro la stringa che lo identifica, notare che saràè la stessa proprietà statica che verrà utilizzata poi nell'ascoltatore che creeremo nell'SWF esterno.

Infine facciamo un trace del path dell'xml, a testimonianza che tutto è andato nel verso giusto.

public function xmlLoader(e:Event = null):void {

xmlData=XML(urlLoader.data);


dispatchEvent(new Event(LoadXML.ACTION));

trace(xmlData.@src);
}

Ora che la nostra classe, è completata, non ci resta che testarla all'interno di un qualsiasi SFW. Se tuttò va bene, otteremo un oggetto LoadXML la cui proprietà xmlData conterrà il nostro tanto agognato XML.

Spero di essere stato sufficientemente chiaro, buon lavoro a tutti in attesa del nostro prossimo tutorial! :D