Desde ontem está disponível no Google Code o código fonte, documentação e um novo exemplo que melhor demonstra como utilizar a livraria.
Mais uma vez, feedback é sempre bem-vindo.
Categorias : AS3, Open Source
Desde ontem está disponível no Google Code o código fonte, documentação e um novo exemplo que melhor demonstra como utilizar a livraria.
Mais uma vez, feedback é sempre bem-vindo.
O título deste post pode não ser o mais feliz, mas à falta de melhor tradução é que se pode arranjar.
O que quero eu dizer com localizar o conteúdo? Disponibilizar ao utilizador da aplicação/site informação no idioma que melhor se adeque, trocando por miúdos… multilíngua.
O Flash IDE de algumas versões para cá que incorpora uma ferramenta para o fazer, Strings Panel, mas nunca me predispus a perceber até que ponto era flexível para colocar a funcionar fora do ambiente Flash IDE.
Posto isto, há cerca de 6 meses resolvi tentar criar uma pequena livraria que simplifica o processo mas até há pouco tempo nunca tinha tido a oportunidade de a testar num ambiente de produção. Como fiquei satisfeito com o resultados resolvi abrir este projecto ao público para ter um maior feedback e conseguir evolui-lo.
A estrutura é a seguinte:

Isto é a base e algo que é efectuado “under the hood“, o exemplo seguinte mostra a simplicidade em utilizar esta solução.
O plugin de syntax highlight da minha instalação do wordpress tirou o dia para me por fora do sério e parece-me mais saudável para o meu teclado que disponibilize o exemplo juntamente com a source e documentação.
Gostava de receber algum feedback se experimentarem com exemplos/sugestões/correcções que ajudem a melhorar o projecto.
Após 8 meses e 2 dias volta a existir “vida” por aqui, tanto tempo que a primeira tarefa foi a actualização do Wordpress para a release 2.7.1 (ainda tinha a 2.5).
Agora que voltei a ter um contacto diário com a plataforma, não prometo… mas espero colocar conteúdo mais regularmente.
Até já.
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).
Agora está disponível para adicionar a qualquer projecto AS3.

O código gerado:
Simples e eficaz, mais informações disponíveis na documentação do FlashDevelop.
O desafio foi lançado (no início do mês), criar uma aplicação simples em Flex que carregue um texto dinamicamente contendo uma frase específica e esperar que o Google a indexe.
A ideia de um concurso veio do Platform Evangelist, Ryan Stewart, e todas as participações têm de seguir as seguintes regras:
O que realmente interessa aqui é saber se o Google está a indexar conteúdos percorrendo uma aplicação como pseudo-utilizador e o que se nota é que ao colocar a variável concurso se desvirtua o concurso.
Eu percebo que o Ryan apenas tenha colocado a hipótese de prémios para tentar que o máximo de programadores tentassem as mais variadas maneiras de contruir a aplicação mas o que se viu é que sem regras que foquem o objectivo final isso é difícl. Por exemplo:
Finalmente a minha participação:
Esta tentativa baseia-se em 3 pressupostos que penso serem os que garantem melhores hipóteses de o Google realmente indexar o conteúdo, lembro que são apenas palpites e que aparte do Google/Adobe ninguém sabe o que se passa.
Sem mais demoras e com código fonte disponível (Right-Click > View Source):
http://blog.nunorosa.com/wp-content/uploads/exemplos/Flex/SEO/
PS:Estou a fazer o tracking dos clicks através do Google Analytics mas penso que este não regista a passagem de bots. Alguém tem uma dica de como fazer isso?
A Adobe anunciou que tem estado a trabalhar com a Google e Yahoo! para melhorar a indexação de conteúdos contextualizados dentro de ficheiros SWF.
Esta nova tecnologia consiste num "Flash Player" modificado que permite aos bots dos motores de pesquisa interagirem com uma aplicação flash como se de um utilizador se tratasse activando os vários estados da aplicação e indexar o conteúdo carregado dinâmicamente do exterior do Flash Player. É uma signigicativa diferença do que acontecia até aqui em que apenas o texto estático presente na aplicação aquando da compilação era indexado.
Mas não se pense que basta compilar a aplicação/website colocar online e esperar que os resultados apareçam, ainda assim é necessário ajudar o conteúdo a ficar mais acessível fornecendo por exemplo pontos de entrada para determinados estados (deeplinking).
Exemplo: o google indexa os contactos e localização num certo estado do website. Se esse estado não tiver um url que permita aceder directamente, quando o utilizador carregar no resultado da pesquisa o website vai abrir no seu estado inicial e não onde está a informação que se queria.
Dúvidas
Qual a melhor forma de embeber um SWF no HTML?
Hoje em dia o SWFObject é o mais consensual e está previsto ser incluído no Dreamweaver/Flash CS4. Mas lendo o blog do Google sobre o assunto é esclarecido que o bot não executa alguns tipos de javascript o que pode fazer com que este nem se aperceba que existe um SWF para indexar.
E se o conteúdo dinâmico forem outros SWF's?
Esta parece ser quanto a mim a grande limitação desta tecnologia, novamente recorrendo ao anúncio do Google, todos os ficheiros carregados externamente pelo SWF que está a ser indexado não vão ser tratado como parte dele mas sim indexados separadamente (será do algoritmo utilizado pelo bot ou do próprio FP?).
Isto é um grande problema porque na maioria dos websites desenvolvidos no Flash utilizam como workflow vários ficheiros SWF para separar secções distintas sendo o principal apenas um contentor com a interface. Voltando ao exemplo anterior o resultado da pesquisa iria direccionar o utilizador para contacto.swf em vez de um link para o endereço principal com deeplinking.
Conclusão
Por enquanto as informações disponíveis ainda não indicam claramente aquilo que o programador pode fazer para obter o melhor partido destas novas alterações, as experiências da comunidade podem ser uma boa ajuda, no entanto as antigas técnicas continuam válidas (deeplinking, sitemaps, etc).
Fontes
Após 3 semanas offline, o fórum que começou como suporte aos tutoriais do Lee Brimelow em 2006 (já é uma comunidade por si só) voltou hoje ao activo.
Mudanças mais significativas:
Obrigado ao Lawrence Job, Ludvig Jernqvist e Erik Hallander pelo tempo dispendido a trazer de volta um dos melhores locais para discutir/ajudar descontraidamente sobre Flash Development.
Hoje a Adobe disponibilizou a versão 1.1 do AIR (Adobe Integrated Runtime) com suporte para localização (idioma Português-PT não está contemplado, apenas Português-BR).
Juntamente com esta release foram também lançadas algumas novidades relativas ao runtime.
.
"Todos os videos que foram até hoje filmados pelo RiaPT foram agora migrados para um canal próprio no Blip.TV. Todos os futuros videos passarão a estar disponíveis neste novo canal e poderão ser observados dentro do Adobe Media Player caso pretendam visualiza-los em modo offline."(Ler post no blog RIAPT).
Como podem ver na imagem acima já adicionei a feed do Blip.TV ao Adobe Media Player (AMP) o que torna muito mais cómodo visualizar/descarregar os vídeos e saber quando existem novos conteúdos.
Para quem ainda não está convencido a experimentar o AMP fiquem a saber que é também possível visualizar conteúdos distribuídos por cadeias como MTV, CBS e Comedy Central.
Para adicionar a feed dos videos RIAPT basta:
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)
UPDATE: Este post foi publicado quando o flash player 10 ainda estava em fase beta, algumas parte da API mudaram para a versão release o que faz com que o código deste exemplo não funcione.