Archive for ottobre, 2007

Sony copia Apple? E Apple chi copia?

// ottobre 30th, 2007 // 1 Comment » // Creatività e Design

Sono da sempre un grande appassionato di gadget e tecnologia: mi piacciono molto i concept creativi realizzati a scopo commerciale perché hanno sia valenza creativa che artistica secondo me. Molto tempo fa Apple aveva realizzato un concept per il lancio di iPod (eccolo qui sotto)…

iPod concept

Sono anche un appassionato di fotografia e seguo l’evolversi del mondo della fotografia digitale e proprio pochi giorni fa leggevo dell’uscita della compatta Sony Cybershot T2, ma guarda caso per il lancio viene creato un concept che mi ricorda qualcosa (eccolo qui sotto):

Sony T2 concept
Ma Apple da parte sua non è una santa. Un post apparso su Engadget dimostra che anche i creativi di Apple traggono spunto (e non si limitano solo a questo) da altre pubblicità o creazioni più o meno famose.

A voi l’ardua sentenza!

Actionscript BitmapData per la gestione di immagini come in libreria

// ottobre 26th, 2007 // 3 Comments » // Sviluppo e tips

La classe BitmapData (flash.display.BitmapData) ci permette di creare e manipolare in piena libertà le immagini tramite Actionscript per la creazione di effetti altrimenti irrealizzabili con i filtri messi a disposizione nell’apposito pannello di Flash.
Un oggetto BitmapData contiene tutte le informazioni sui pixel dell’immagine e può essere assegnato a un MovieClip utilizzando il metodo MovieClip.attachBitmap().
Gli usi possibili della classe BitmapData sono tantissimi e per una trattazione più specifica vi rimando alla guida ufficiale. Io invece mi vorrei soffermare su un uso molto utile di BitmapData nella gestione delle immagini (JPEG, GIF, PNG) caricate esternamente in quei casi in cui si ha il bisogno di riutilizzare più volte le immagini caricate.
Immagino abbiate presente l’utilizzo del metodo MovieClip.attachMovie() per “attaccare” un elemento in libreria a un MovieClip presente sullo stage. Il MovieClip in libreria dovrà essere stato identificato per il Linkage.
In un modo simile possiamo sfruttare il metodo MovieClip.attachBitmap() per gestire, come se le avessimo il libreria pronte all’uso, delle immagini caricate dall’esterno in un determinato momento del nostro movie Flash: vediamo come è possibile ricreare una situazione di questo genere in ActionScript.

Supponiamo che ad un certo istante del nostro movie venga chiamata una funzione che carica N immagini, che per comodità definiremo in un array ma che potrebbero anche essere definite in una struttura XML o altro.
Quindi prendiamo in esame il seguente codice incaricato del caricamento sequenziale delle immagini contenute nella cartella img in un MovieClip temporaneo temp che verrà rimosso al termine di ogni caricamento:

var imgPath = new Array("img/photo1.jpg","img/photo2.jpg");
var count:Number = 0;
function loadImage():Void{
	_root.createEmptyMovieClip("temp", _root.getNextHighestDepth());
	var mcl = new MovieClipLoader();
	var myListener = new Object();
	myListener.onLoadInit = function(target_mc) {
		target_mc.removeMovieClip();
		if(_root.count<_root.imgPath.length-1){
			_root.count++;
			_root.loadImage();
		} else {
			trace("Finito");
		}
	}
	mcl.addListener(myListener);
	mcl.loadClip(imgPath[count], temp);
}
loadImage();

Penso che la fattura di questa funzione sia comune a molti soprattutto per quanto riguarda l’utilizzo del metodo MovieClipLoader.loadClip() associato all’Event Listener onLoadInit. In pratica la funzione loadImage() viene richiamata da se stessa tante volte quante sono le immagini definite nell’array imgPath. Questa funzione non fa altro che posizionare un MovieClip temporaneo sullo stage e caricarci dentro l’immagine, controllare che sia caricata e poi rimuovere il MovieClip temporaneo. In effetti in questo modo non serve a niente tranne che a mettere in cache le immagini.
Vediamo ora come usare BitmapData per memorizzare le informazioni sulle immagini. Per fare questo dobbiamo importare la classe e per ogni immagine caricata creare un nuovo oggetto BitmapData e poi utilizzare il metodo BitmapData.draw() per “disegnare” una nuova immagine BitmapData a partire da ogni MovieClip temporaneo che nel nostro caso è identificato con target_mc.

import flash.display.BitmapData;
var bData:BitmapData = new BitmapData(target_mc._width, target_mc._height);
bData.draw(target_mc);

Inseriamo questo codice nella funzione e ad ogni ciclo memorizziamo l’oggetto bData in un nuovo array che chiamiamo bmp:

import flash.display.BitmapData;
var imgPath = new Array("img/photo1.jpg","img/photo2.jpg");
var count:Number = 0;
var bmp:Array = new Array();

function loadImage():Void{
	_root.createEmptyMovieClip("temp", _root.getNextHighestDepth());
	var mcl = new MovieClipLoader();
	var myListener = new Object();
	myListener.onLoadInit = function(target_mc) {
		var bData:BitmapData = new BitmapData(target_mc._width, target_mc._height);
		bData.draw(target_mc);
		bmp.push(bData);
		target_mc.removeMovieClip();
		if(_root.count<_root.imgPath.length-1){
			_root.count++;
			_root.loadImage();
		} else {
			trace("Finito");
		}
	}
	mcl.addListener(myListener);
	mcl.loadClip(imgPath[count], temp);
}

loadImage();

In questo modo le immagini vengono caricate nel MovieClip temporaneo, immagazzinate in un BitmapData ed eliminato il MovieClip temporaneo. Al termine del ciclo di caricamento ora chiamiamo una funzione che visualizzerà le immagini facendo il procedimento inverso: verranno creati dei MovieClip sullo stage tanti quanti i BitmapData registrati e attaccati ad essi le informazioni di ogni BitmapData come se le immagini fossero in libreria con Linkage specificato.

Lo script finale diventa quindi:

import flash.display.BitmapData;
var imgPath = new Array("img/photo1.jpg","img/photo2.jpg");
var count:Number = 0;
var bmp:Array = new Array();

function loadImage():Void{
	_root.createEmptyMovieClip("temp", _root.getNextHighestDepth());
	var mcl = new MovieClipLoader();
	var myListener = new Object();
	myListener.onLoadInit = function(target_mc) {
		var bData:BitmapData = new BitmapData(target_mc._width, target_mc._height);
		bData.draw(target_mc);
		bmp.push(bData);
		target_mc.removeMovieClip();
		if(_root.count<_root.imgPath.length-1){
			_root.count++;
			_root.loadImage();
		} else {
			showImages();
		}
	}
	mcl.addListener(myListener);
	mcl.loadClip(imgPath[count], temp);
}

loadImage();

function showImages():Void{
	for(var i=0; i<bmp.length; i++){
		_root.createEmptyMovieClip("copy"+i, _root.getNextHighestDepth())
		_root["copy"+i]._x = 200*i;
		_root["copy"+i]._y = 200*i;
		_root["copy"+i].attachBitmap(bmp[i], 1);
	}
}

In qualsiasi momento potrete richiamare e visualizzare i BitmapData semplicemente usando il metodo MovieClip.attachBitmap() come se fosse MovieClip.attachMovie(). Ci sono molti altri aspetti interessanti di questo utilizzo sia legati alle possibilità di smoothing offerte dall’attachBitmap() che dalle innumerevoli possibilità di modifica sulle immagini dal momento che sono dei BitmapData… a voi continuare lo studio.
Spero vi sia stato utile.

Adobe Flex gratuito per gli studenti

// ottobre 25th, 2007 // No Comments » // Accade nel Web, Tecnologie

È di ieri la notizia apparsa sul sito web Adobe dell’annuncio dell’imminente rilascio di Adobe® Flex™ Builder™ 2 a costo zero per studenti e per uso didattico. Penso sia una mossa molto strategica nell’ottica di dare maggior impulso alla comunità di Flex developer e designer che al momento fatica a crescere, poi non lo possono negare, la competizione con il neonato Microsoft Silverlight inizia a farsi sentire e Adobe probabilmente vuole mettersi al riparo cercando di mantenere il grosso vantaggio acquisito.
Ma tornando al tema di questo post sono felice di questa iniziativa, che si mormora avrà inizio entro fine anno, perché darà a tanti studenti la possibilità di entrare nel fantastico mondo dello sviluppo delle rich internet application (RIA). Rimane solo il dubbio su “chi” farà lezioni a questi studenti: ci sono aziende italiane, come la nostra, che stanno investendo molto nell’acquisizione di competenze su Flex e Air e ogni giorno si rende conto di quanto ci sia da imparare anche a seguito della crescita esponenziale delle caratteristiche di questo software ormai giunto alla versione 3. Conosciamo per esperienze vissute che l’università ha i suoi metodi e che spesso chi si di distingue è chi ha passione per quel che studia e chi riesce a staccarsi dalla visione “esamificio” del corso degli studi, quindi pensiamo che la vera forza sta nello studente e nelle sue capacità di acquisire contenuti e informazioni dalla rete. Per questo motivo di seguito riporto alcuni link a pagine in cui è possibile trovare risorse su Flex (in italiano e non):

Buono studio ragazzi!

Layer comps. in Photoshop: un must per i web designer

// ottobre 24th, 2007 // 1 Comment » // Sviluppo e tips

I Layer Comps non sono una vera e propria novità in Photoshop: sono stati introdotti a partire dalla versione CS ma personalmente inizio a utilizzarli seriamente solo dalla versione CS3. Secondo me sono utilissimi e permettono un risparmio notevole di tempo nella fase di creazione di layout web complessi in cui è necessario progettare stati/configurazioni diverse dello stesso layout (ad esempio uno per la homepage e uno per ogni altra pagina del sito). Rappresentano un diverso modo di gestire i layer (livelli): il “vecchio metodo” costringeva il designer a utilizzare tantissimi layer o a raggrupparli all’interno di cartelle una per ogni configurazione ed eventualmente a marcare con dei colori i livelli corrispondenti a uno stesso stato… un lavoraccio. Ma ora i layer comps. ci vengono in aiuto e ci fanno risparmiare tantissimo tempo.
Per farvi capire concretamente il loro funzionamento prendo come esempio uno degli ultimi progetti che abbiamo realizzato in Webgriffe: il sito web di JDentalCare Srl.

Fig.1Abbiamo iniziato (vedi fig.1) progettando la home page e raggruppando i vari livelli in cartelle per una maggiore pulizia del file di progetto. Il cliente voleva avere una idea di come poter in futuro implementare la visualizzazione di prodotti da mettere in evidenza in home page, così la prima cosa che si sarebbe fatta nel vecchio metodo sarebbe stata quella di creare una nuova cartella di livelli duplicando quella della Home e modificarla di conseguenza… ora non più. Basta accedere al tab Layer Comps. (Window > Layer Comps) e con il pulsante in basso “Create New Layer Comp”.

Fig.2

A questo punto una finestra vi pone alcune scelte (vedi fig.2):

  • Name: il nome che volete dare a questa configurazione (HOME)
  • Visibility: memorizzare lo stato visibile o nascosto dei livelli
  • Position: memorizzare la posizione dei livelli
  • Appearance: memorizzare gli stili applicati ai singoli livelli
  • Comment: una descrizione libera

Dopo aver cliccato su OK ci viene creato il Layer Comp. HOME che ha “fotografato” lo stato attuale del nostro pannello Layer e di tutti i livelli in esso contenuti, comprese le loro posizioni, visibilità ed eventualmente gli stili associati. A questo punto per fare la nuova versione della home page non dobbiamo far altro che tornare nel pannello livelli e spostare o creare nuovi livelli. Alla fine della modifica torniamo nella finestra Layer Comp. e creiamo la nuova configurazione HOME PRODUCTS. Ora possiamo attivare l’una o l’altra configurazione e di conseguenza vedremo sullo stage i due diversi layout creati. La bellezza di questo metodo sta nel fatto che potete spostare a piacere i livelli e salvarne le posizioni: questo vale anche per gli smart objects ovviamente e non c’è più bisogno di duplicare livelli ma si usano sempre gli stessi spostati e nascosti all’occorrenza.
nel nostro progetto abbiamo poi realizzatola sezione PRODUCTS, PRODUCTS DETAILS e COMPANY (vedi fig.3).

Fig.3

Pensate ad esempio alla comodità di spostare a piacere il footer di una pagina quando il layout è di tipo verticale e si adatta al contenuto: un unico layer in cui è definito il footer potrà essere spostato a piacere e “registrato” nei diversi Layer Comps.

Ma la bellezza dei Layer Comps. non finisce qui.
Pensate a quando, giunti al termine della fase di progettazione, si devono esportare i singoli screenshot per realizzare una presentazione (PDF, HTML ecc.) da mostrare al cliente. Anche in questo caso Photoshop ci viene in aiuto: apriamo il menu File > Scripts e troviamo una serie di automatismi (vedi fig.4).

Fig.4

Le opzioni a disposizione sono le seguenti:

  • Layer Comps to Files… : esporta i singoli Layer Comps. in differenti formati immagine (JPG, PNG, BMP, TIFF ecc.)
  • Layer Comps to PDF… : crea una presentazione PDF con i Layer Comps. selezionati
  • Layer Comps to WPG… : crea una Web Photo Gallery con i Layer Comps. selezionati

A voi ora provarli e a scrivere cosa ne pensate.

Sei un creativo del web?

// ottobre 22nd, 2007 // No Comments » // Per chi il Web lo fa

Dopo il mio post sui miei 5 più grandi errori da freelance mi hanno contattato molte persone (freelance e non) che condividono il mio pensiero. Addirittura visitatori non italiani che hanno tradotto il post nella loro lingua usando uno dei tanti strumenti di traduzione automatica reperibili on-line. Beh è stato molto bello scambiare pareri e ancora adesso con alcuni siamo rimasti in contatto via e-mail. Grazie davvero a tutti e ora veniamo al nuovo post…

Tra i tanti che mi hanno contatto molti hanno approfittato per inviare il proprio curriculum professionale essendo anche venuti a conoscenza che la mia azienda sta cercando collaboratori. Stiamo in particolare cercando web designer e creativi specializzati nella progettazione e ideazione di contenuti e grafica per il web. Cerchiamo appunto dei freelance in grado di garantirci una buona qualità delle realizzazioni. La nostra azienda è a Reggio Emilia ma siamo i primi a incentivare (vuoi perché ci siamo passati) il lavoro a distanza: ormai gli strumenti di comunicazione via web ci danno la possibilità di mantenere rapporti costanti con chi desideriamo.

Vi faccio un elenco disordinato di alcune caratteristiche che per noi fanno la differenza nella scelta di un potenziale collaboratore:

  • professionalità ed efficacia nella gestione delle differenti fasi di un progetto
  • elevate capacità nella creazione di layout grafici originali
  • elevate conoscenze di Actionscript 2.0 e avanzate conoscenze e capacità nella realizzazione di applicazioni e progetti in Adobe Flash
  • web site e/o blog con la possibilità di visionare un portfolio lavori online
  • interesse per il mondo della grafica e della creatività legata al web e alle nuove tecnologie
  • possesso di una p.iva
  • la vicinanza alla nostra sede e la possibilità di potersi incontrare di persona può essere un elemento di preferenza
  • altre conoscenze legate alla modellazione 3D o alla video produzione possono essere elementi di preferenza

Gli interessati possono lasciare commenti o scrivere a job@webgriffe.com