{ Criar templates no FlashDevelop. }

4 08 2008

Se nesta altura está a pensar o que será o FlashDevelop, aconselho a leitura de um post anterior (Flash em ambiente Open Source).

A utilização de templates pode aumentar bastante a produtividade ganhando tempo em tarefas repetitivas, e.g. ao utilizar uma framework regularmente.

Ao criar um projecto já existem alguns disponíveis (Class, Event, MXML, etc) que servem a maioria dos propósitos, mas podemos adaptar/criar templates às nossas preferências pessoais (ou equipa) e assim uniformizar o código.

Exemplo
Criar o um interface com um bloco de comentário com uma licença (MIT neste caso).

  • "Tools->Custom Arguments" inserir um par de valores, sendo assim possível adicionar qualquer argumento não disponível.
  • "Tools->Applications Files" abre a pasta onde estão os ficheiros que permitem personalizar a aplicação. Crie um ficheiro "Interface.as.fdt" na pasta "./Templates/ProjectFiles/AS3Project/" com o seguinte:
Actionscript:
$(LicenceMIT)
package $(Package)$(CSLB) {

public interface $(FileName)$(CSLB) {
$(EntryPoint)

}

}

Agora está disponível para adicionar a qualquer projecto AS3.

Template de um interface

O código gerado:

Actionscript:
/**
Copyright (c) 2008 Nuno Rosa, http://www.nunorosa.com

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/
package com.nunorosa.sample
{

public interface SampleInterface
{

}

}

Simples e eficaz, mais informações disponíveis na documentação do FlashDevelop.



{ 42 69 6e e1 72 69 6f 73 20 65 6d 20 41 53 33 - PARTE I }

10 06 2008

Mas que raio de título!!

Num post anterior mencionei a possibilidade de na nova versão do Flash Player (10) ser possivel ler um ficheiro localmente, mas com a limitação de apenas termos acesso aos dados do ficheiro; nunca temos acesso à sua localização física propriamente dita. Esta limitação deve-se sobretudo a preocupações de segurança por parte da Adobe.

Em certos casos, pode ser suficiente (ficheiros ASCII, imagens, swfs) mas para outros não. Desde a introdução da versão 9 do player (e consequentemente Actionscript 3.0) que é possível manipular informação binária através da classe ByteArray do package flash.utils. Não sei se já imaginaram as possibilidades que isto permite, mas para mim o mais óbvio é manipular quase qualquer tipo de dados desde que conhecida a organização do formato.
Exemplos:

* Gerar documentos pdf's simples
* Editar video/áudio
* Codificar imagens (jgp, png, etc)

Exemplo:

Um ficheiro WAV, é um formato simples de áudio e que normalmente não tem a informação "comprimida" o que faz com que seja simples ler as amostras PCM e injectar no buffer de som (ler post anterior). O objectivo é criar uma classe simples que possa ler os dados, fazer o parse dos dados e finalmente fazer o playback do áudio da maneira mais semelhante possível à API da classe Sound.

Primeiro passo, encontrar informação sobre o standard (se o for) ou o mais consensual possivel. Podem ver o que consultei no seguinte link.
A estrutura de um ficheiro Wav utiliza o standard RIFF (Resource Interchange File Format) que está organizado em blocos. Esses blocos têm sempre a mesma estrutura independetemente dos dados que contêm.

Bloco ID - 4bytes (ASCII)
Tamanho dos dados - 4bytes (unsigned int)
Dados - n bytes descritos no campo anterior

Apesar de um ficheiro poder conter mais blocos os únicos que nos interessam são o cabeçalho do ficheiro, o bloco "fmt" (informações sobre taxa de amostragem, codificação, etc) e o bloco "data" (amostras).

Podem ver o exemplo (LINK), o código fonte fica para um próximo post porque ainda queria acrescentar algumas funcionalidades e confesso que o tempo escasseia.
(Nota: De momento apenas ficheiros codificados a 16bits e com uma freq. de amostragem 44.1KHz)



{ AS3 Workshop slides, Grant Skinner }

5 06 2008

Muitos dos oradores em conferências/eventos têm o excelente hábito de disponibilizar o seu material de apoio após as mesmas.

O  Grant Skinner disponibilizou hoje os slides (167!!) utilizados num workshop dado por ele ao longo do último ano que consistia num dia intensivo sobre as novidades em AS3, migração de AS2 e dicas.
Apesar de normalmente os slides apenas terem alguma informação para apoiar a audiência a seguir o orador "in-loco" posso dizer que estes slides são +/- fáceis de seguir e contêm exemplos que permitem ver em funcionamento o assunto que abordam.

Isto conjugado com um bom livro de referência em AS3, acho que se pode tirar um bom proveito. Boas experiências.

PS: Nos próximos dias vou postar um exemplo de como fazer o parse de um ficheiro wav local e injectar os dados no buffer de som.