Será que eu devo aceitar um trabalho em Flex agora?

Flex 24 Comments »

Recentemente houve um debate na FB sobre qual seria um valor justo a se pagar a um programador Flex. A pessoa que começou a thread pode até não ter se dado conta, mas mexeu num vespeiro. Muitas pessoas deram suas opiniões (eu também, lógico!) e parece que o saldo do debate ficou assim:

  1. Programadores ganham pouco porque a profissão não é regulamentada.
  2. Programadores em Flex ganham pouco porque há muitos newbies.

Eu, pessoalmente, não estou competindo com nenhum newbie… Não há um projeto onde eu tenha trabalhado que pudesse ser tocado por eles (menos quando eu era newbie, haha).

Mas eu não estou escrevendo para quem está fazendo a vida em cima do Flex, que ganha bem e entende o framework. Eu queria escrever para aqueles que estão aprendendo Flex e estão entrando num emprego ou aceitando um free-lance.

Eu até ia fazer uma compilação das perguntas absurdamente sem noção que aparecem na FB e na FD, de pessoas que estão trabalhando (e provavelmente desenvolvendo uma gastrite, coitados…), mas isso seria antiético. Então, pegue um lápis e um papel e faça o checklist:

  1. Sei exportar um projeto de forma correta.
  2. Sei debuggar um projeto em Flex/AIR.
  3. Sei a diferença entre Flex e AIR.
  4. Entendo os prós e contras de trabalhar com módulos e RSLs.
  5. Sei disparar e capturar eventos. Entendo as propriedades .currentTarget, o parâmetro bubbles e os métodos da classe EventDispatcher.
  6. Sei o que é deferred instantiation.
  7. Sei escolher os containers de forma a otimizar aplicações.
  8. Sei popular os data controls com coleções do Flex.
  9. Sei recuperar e modificar itens dentro das coleções do Flex.
  10. Sei usar os métodos das coleções do Flex.
  11. Sei recuperar dados de RadioButtons, CheckBox e Repeaters.
  12. Sei construir um ItemRenderer.
  13. Passo objetos entre views (por exemplo, módulos ou seus custom components).
  14. Sei usar um swc de terceiros.
  15. Sei usar o HTTPService, RemoteObjects, WebServices ou a tecnologia que você está usando.
  16. Entendo o que significa assincronismo e aceito que isso não é ruim; é uma característica do framework.
  17. Sei quando o que procuro é uma propriedade, um estilo, um método ou um evento.
  18. Sei ler a documentação.
  19. Sei pesquisar meus problemas na internet (google, flex forums,etc)
  20. Sei elaborar uma questão para alguns dos forums Flex e não espero uma solução pronta com código pra só copiar/colar.

Se você aceitou um freela ou não é estagiário e não passou em TODOS estes itens, saiba que as chances de você ter dificuldades muito grandes durante o seu projeto são enormes. E que você vai ter que depender da boa vontade / paciência / disponibilidade de outras pessoas te ajudarem.

Se você está aprendendo ou é estagiário: você está estudando – PARABÉNS PELO SEU BOM SENSO!

Você pode estudar Flex e encontrar diversos exemplos nestes locais:

  1. Flex Quick Starts: eu comecei ali!
  2. Flex Examples: como o site diz, tem muitos exemplos :0)
  3. Tour de Flex: running code sempre é bom!
  4. E se o seu inglês está em dia, assista ao Video Training da Adobe :0)
  5. E não esqueça que  a documentação é sua melhor amiga :0)

E aos que deram risada desse checklist: aceito sugestões!

Linko – linkography software

Aplicativos, Design Cognition, Flex No Comments »

linkologo Linko is meant to help you build linkographies, which were made popular amongst design researchers after the work of Gabriela (:0) Goldschmidt.

There´s really not much to a linkography: it´s a map of links. But it has a great power to illustrate protocol data. To illustrate how linkographies are well acepted in this research filed, follow this search on Science Direct´s database.

I am using linkographies to depict some of my data, and that was the drive behind my decision of writting a software to do this. They are hard to draw by hand, as you have to focus your attention on a procedural task: linking protocol segments. As I´m not trying to reach Nirvana, I didn´t even gave it a try :0)

So here´s where Linko comes to play. The idea is to feed it with a csv file exported from excel, and voila, you have your graphs.

You can of course use it, but you´ll need to compile it with Flex 3.5. I could write a version that loads a local file, so there won´t be the need to re-compile it to build every graph, but I´ll do that later (now I have to re-turn my attention to the analysys, the coding fun is over!).

The images bellow shows two image generated by Linko, with the useTime parameter to true (the first) and false (the second).

And you see the software in action here (I suggest you turn fullscreen on, by hitting F11 on your keyboard).

And you can download the source here.

Manifesto Flex For Kids

Flex No Comments »

SDC12008-238x300Durante anos estivemos dedicados ao desenvolvimento de Aplicações Ricas. Durante anos estivemos dedicados a tecnologias como o Adobe Flex, BlazeDS, LiveCycle Data Services, Zend AMF, AMF PHP, Adobe Flash Professional, Flash Media Server, etc. Mas, principalmente, durante anos estivemos dedicados a compartilhar o nosso conhecimento com a comunidade. Na Flex Brasil , na FlexDev e em nossos blogs é provável que você já tenha encontrado algo que procura. E nunca pedimos nada em troca.

O que nos move não é nada material, mas sim a paixão pelo que fazemos e a convicção de que ao nos doar um pouco para a comunidade estamos ajudando e evoluindo conseqüentemente. Por estes mesmos motivos, estaremos todos reunidos dia 06 de fevereiro de 2010.

Temos muitas coisas que amamos para compartilhar com vocês. Porém, desta vez, queremos algo em troca. Algo que com certeza não lhe fará falta, mas que fará a diferença na vida das crianças do Cotolengo . Ganham vocês. Ganhamos nós. E, principalmente, ganham as crianças do Cololengo .

Assinam o Manifesto:
Beck Novaes, Carlos Eduardo, Daniel Lopes, Ebertom Consolim, Eric Cavalcanti, Fabio Vedovelli, Gabriela Perry, Igor Costa, Igor Musardo, Mario Junior e Vicente Maciel Junior.

Registre-se agora no Flex for Kids e ajude as crianças do Cotolengo . Porque alguém, já ajudou você um dia (e de quebra assista palestras que estão sendo preparadas com a mesma paixão de sempre).

GentleItemEditor implementado

Aplicativos, Flex 2 Comments »

/*    AS   IS     */

Você precisa ter o Flash player 9 para ver este conteúdo

VIEW SOURCE

Folga da análise, desenho

Design Cognition, Drawings 2 Comments »

Sério, eu precisava de uma folga. Já faz um tempo que minha vida gira em torno da análise: design de interfaces, programação e toda a construção da minha tese. Então achei que eu merecia tirar umas horas de folga e ver se eu ainda tinha mão pra fazer uma coisa realmente bonita, sem usar artifícios de brushes e photoshops. O problema é que eu fiquei com a sensação de ter feito “mais do mesmo”, ou seja, foi um resultado seguro que eu sabia que iria conseguir. Tenho que sair dessa…

original

Moranguinho_1

IMG_0574

Moranguinho_2

10 coisas que todo desenvolvedor AS3 deveria saber

Design Cognition, Flex No Comments »

Vi este video no site do Mauro Martins, e fiquei mesmo impressionada com os primeiros 10 minutos da palestra.

Grant Skinner – sem dúvida um dos mais experiente e reconhecido profissional da comunidade Flash – fala sobre expertise em programação, de como se evolui de um script até um arquiteto, sobre qual o perfil e qual o objetivo de cada um deles. Em paralelo, ele conta sua própria história, como ele deixou de ser um scripter para ser um arquiteto. E ele termina esta parte dizendo que um arquiteto quebra as regras porque ele conhece as regras.

Achei este trecho tão fantástico porque ele se aplica a qualquer atividade de design.

Você faz hitTest dentro de um for no EnterFrame?

Flash games 3 Comments »

Então você faz hitTestObject no for dentro de um EnterFrame, hein? Deixa eu adivinhar:

hero.addEventListener(Event.ENTERFRAME, testaColisao);
function testaColisao(evt:Event):void{
       var hero:MovieClip=MovieClip(evt.currentTarget);
       var inimigo:MovieClip;
 
       for(var i:int=0; i < inimigos.lenght; i++){
              inimigo=MovieClip(inimigos[i]);
 
              if(hero.hitTestObject(inimigo)){
                     trace("bateu!!!");
              }
       }
}

Tá loco!!!

Quem sabe você pensa diferente e faz com um Array bidimensional? A idéia é que cada vez que (por exemplo), seu hero se mover ou se cenário se moverem, você muda o índice do Array. Se tem alguma coisa com que colidir, o ínidice é 1. Se não, é 0.

var mapa:Array= [
 [0,0,0,0,0,0,0,0],
 [0,0,0,0,1,0,0,0],
 [0,0,0,0,1,0,0,0],
 [0,0,0,0,1,0,0,0],
 [0,0,0,0,0,0,0,0],
 [0,0,0,1,1,1,0,0],
 [0,0,0,0,0,0,0,0],
 [0,0,0,0,0,0,0,0]
];
 
var vel:int=200/mapa[0].length;
var indiceX:int=4;
var indiceY:int=7;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, moveCenario);
function moveCenario(evt:KeyboardEvent) {
	if (evt.keyCode==Keyboard.LEFT) {
		if (mapa[indiceY][indiceX-1]!=1) {
			indiceX-=1;
                            fundo.x+=vel;
	}
}

Neste exemplo o cenário anda apenas quando a tecla LEFT do teclado é pressionada. A posição inicial (os valores inicias das variáveis indiceX e indiceY) é dada pela posição do hero no cenário.
O resultado é este (clique sobre a]o swf para dar foco e use a tecla LEFT):

Você precisa ter o Flash player 9 para ver este conteúdo

O código que está aí não está completo… Você só vai conseguir dar um passo para cima (na verdade, é o cenário que se move) e vai dar de “cara” na parede.  Além disso, se você baixar o fla, vai perceber que não implementei controles de cenário (impedir a movimentação quando chegar nos extremos). Mas tudo isso é implementável. Esta base é usada por engines “isométricas” para controlar tanto a movimentação quanto as colisões e profundidades (o que está na frente e o que está atrás).

Uma engine bem conhecida é esta aqui: http://code.google.com/p/as3isolib/

E se você achou bala esse código (porque eu acho!) pode ler muito mais sobre isso neste site, que é uma importante referência para quem faz games (fpara flash): http://www.tonypa.pri.ee/

1258893321_Flash Baixe aqui o fla

PS: Este post foi escrito porque meus alunos de projeto de games, o Beto e o William me torraram a paciência até eu explicar como fazia isso. Eu não podia deixar eles fazendo hitTest no for dentro de um EnterFrame para um cenário com 5.000 pixels de largura. Boa sorte meninos! Quero ver esse jogo funcionando!

TheWebMind – Conheça! Contribua!

Aplicativos No Comments »

Escrevo para incentivar todos vocês a conhecerem o projeto do meu amigo Felipe Nascimento (felipenmoura@gmail.com), o TheWebMind.

O TheWebMind é uma plataforma que possui um sistema capaz de interpretar o conhecimento humano. A partir deste conhecimento, o TheWebMind agiliza as tarefas de análise e desenvolvimento de um software.
As informações são passadas ao TheWebMind através de uma linguagem própia, a Web-Mind-Language, que é uma linguagem desenvolvida baseada no conceito de linguagem semi-natural(linguagem muito próxima a linguagem humana).
O TheWebMind é capaz de interpretar essas informações, gerando uma base de conhecimento. Com esta base, são aplicadas regras de normalização de banco de dados e padrões de desenvolvimento de software.
O produto final é a estrutura de um sistema complexo e extensível que contempla:

  • Base Relacional de Banco de Dados
  • Estrutura orientada a objetos
  • Mapeamento objeto-relacional
  • Diagramas
  • API de desenvolvimento
  • Formulários HTML
  • Documentação

Para conhecer melhor o projeto, visite: http://docs.thewebmind.org/index.php?title=Main_Page

Para ajudar (como tester, documentação e outras coisas): http://thewebmind.org/contribute/

Escolhendo a melhor interface: protótipos

Design cases, Flex 3 Comments »

Marquei o teste com usuários para quinta que vem. Vamos ver o que sai.  Para adiantar as coisas, já tenho os protótipos prontos.

Pra quem está interessado no código, tem os fontes disponíveis…. Só peço que lembrem do significado da palavra “protótipo”: o código está uma zona, nem venham me falar nada disso, beleza?

Protótipo DD (nova janela)
Tempo de desenvolvimento: 10 horas

  • abrir nós da árvore ao clicar nos galhos
  • item renderer para tree
  • desabilitar itens de uma tree
  • arrastar de tree para container
  • identificar item da tree ao clicar no objeto do container
  • atualizar itens da tree durante drag n drop
  • verificar área de drop, verificar lixeira
  • usar fade para remover item
  • inserir item ao clicar na árvore
  • verificar área de drop, se colocado sobre outro item ao clicar na árvore, reposiciona
  • user fade para posicionar item se originado do click na árvore

Protótipo Tree (nova janela)
Tenpo de desenvolvimento: 2 horas

  • abrir nós da árvore ao clicar nos galhos
  • atualizar itens da tree durante uso do slider
  • mostrar a slider quando clica nos itens
  • feedback na árvore do valor da associação slider-tree
  • mostrar a slider usando um fade

Era isso! Até o teste!

Escolhendo a melhor interface: tempo de desenvolvimento

Design cases, Flex, HCI 3 Comments »

Seguimos então com a análise deste problema: como escolher entre duas interfaces que dão suporte à mesma tarefa? Para quem não está acompanhando, as interfaces em questão são mostradas nas figuras 1 e 2.

Figura 1, à esquerda. Interface com drag n´drop. O usuário arrasta um conceito para a área ao lado da tree, e o local (y) onde ele largou o conceito define o quanto o material está associado ao conceito.

Figura 2, à direita. Interface com HSlider. O usuário seleciona um item na Tree. Na tela ao lado, há uma HSlider, que o usuário usa para dizer o quanto o conceito se asssocia com o material. Na Tree se podem ser, ao lado dos conceitos que estão associados com o material, o quanto (%) o conceito se associa ao material.

Estas interfaces foram avaliadas utilizando um conjunto de heurísticas  e o KLM. Estes são dois métodos que pertencem mais ao design que ao desenvolvimento, e que são usados para informar a escolha. No entanto, eles não consideram a complexidade da implementação, que é um fator determinante na escolha. Por este motivo, pedi para alguns colegas avaliarem as duas interfaces e dizerem o quanto uma interface é mais trabalhosa que a outra. Além disso, pedi que, se possível, comentassem cada uma das propostas.

Pedi que a todos os avaliadores que considerassem a implementação na mesma linguagem de programação (AS3, usando Flex). Todos têm pelo menos 2 anos de experiência com a linguagem, e todos são desenvolvedores reconhecidos (à exceção de um, todos são moderadores de listas com mais de 2000 membros). Eles avaliaram o seguinte cenário:

/*******************************************************
CENÁRIO
O projeto é uma materioteca, usada para auxiliar no processo de seleção de materiais. Será usada por designers, arquitetos e eventualmente, por engenheiros.
A tela em questão é para associar conceitos a um dado material que está sendo criado pelo administrador da materioteca (você :0). Estes conceitos são palavras, e são características abstratas do material. Pense que isso pode ser importante para um designer fazer sua escolha. Exemplos de conceitos podem ser: inovador, sensual, moderno, vibrante, vulgar, barato etc.
Você não irá criar conceitos, apenas usar os que estão disponíveis.

As implementações possíveis estão nos pngs anexos*
*******************************************************/

O resultado até agora é:

  • Desenvolvedor 1 -> Interface A(Drag n´ Drop)=2 * Interface B (HSlider)
  • Desenvolvedor 2 -> Interface A(Drag n´ Drop)=10 * Interface B (HSlider)
  • Desenvolvedor 3 -> Interface A(Drag n´ Drop)=4 * Interface B (HSlider)
  • Desenvolvedor 4 -> Interface A(Drag n´ Drop)=3 * Interface B (HSlider)

Além disso, alguns ainda enviaram comentários:

Desenvolvedor 1

  • “Preferiria implementar a segunda forma, acho que é bem mais intuitiva para o usuario”.
  • “[...] Ok… pode ser até mais dificil de implementar, mas a real importancia não é a dificuldade da implementação mas a experiencia do usuario em usar essa app”.

No email de resposta ainda haviam exemplos de interfaces que suportam a mesma tarefa, referidos pelo Desenvolvedor 1 como sendo de pior qualidade. Os dois exemplos estão mostrados abaixo.

—————————————————–
| Conceito A      |  <combo box de %> |  Selecione o valor percentual de associação
—————————————————–
| Conceito B      |  <combo box de %> |
—————————————————–
| Conceito G      |  <combo box de %> |
—————————————————–

Ou pior ainda… :
——————————————————————
| Conceito A      |  <textInput / NumericStepper> |  Digite o valor percentual de associação
——————————————————————
| Conceito B      |  <textInput / NumericStepper> |
——————————————————————
| Conceito G      |  <textInput / NumericStepper> |
——————————————————————

Desenvolvedor 3

  • “Então, olhando as duas opções, a primeira usando um HSlider me parece muito ‘tradicional’, mais fácil de manipular mas mais difícil de analisar o todo. Gosto mais da segunda opção, apesar de mais complexa para o usuário final manipular”.
  • “Obviamente que o usuário final não está tão acostumado com o drag and drop nos softwares como ele usa no sistema operacional, mas dá uma dimensão muito melhor, acredito até que ele acharia ruim essa opção em um primeiro momento, mas depois de começar usar se sentiria mais confortável em poder analisar todos os conceitos de determinado material de uma única vez.”
  • Em uma conversa via MSN, este desenvolvedor sugeriu uma “solução intermediária”, na qual ao arrastar o conceito para o Canvas, uma janela é criada, com uma barra deslizante, usada para definir a associação ao conceito.

Desenvolvedor 4

  • “Usaria o hslider/vslider em vez do cenário do canvas”.
  • “Bem, colocaria os itens em ordem decrescente de %, facilitando assim ao usuário a associação visual.”**
  • “Uma sugestão também é em vez de usar um slider, usar um itemRenderer que mostre um NumericStepper. Na minha opinião usaria o NumericStepper, porque daria menos trabalho sem perder a funcionalidade e agregando maior agilidade para o usuário. Usando NumericStepper como itemRenderer acredito que levaria menos tempo ainda que o slider, talvez 0.6x, além que área que deixaria de ser usada pelo slider poderia ser usada para outra coisa.”

Dois desenvolvedores manifestaram preferência pela interface com Drag n´Drop, um pela interface com HSlider e um não manifestou preferência. No entanto, todos afirmaram que a interface com Drag n´Drop é mais demorada.

Assim como as avaliações anteriores, estes pareceres não foram conclusivos em favor de nenhuma das opções, pois, mesmo que dois desenvolvedores tenham manifestado clara preferência pela interface com Drag n´Drop, é preciso avaliar se o tempo de implementação é um fator importante.

Cada vez mais acho que vou precisar de um protótipo para dar o veredicto :0)

Acompanhe!

PS: Se você também quer mandar sua estimativa e seus comentários, comente aqui ou mande por email. Vou incorporar no post.

* As imagens do início deste post, com descrições sobre detalhes da implementação e sugestões para os algoritmos.

** No HSlider

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in