Venha o Jaunty Jackalop

. Quinta-feira, 2 de Abril de 2009
0 comentários

O Poder do Javascript. [Jogos]

. Quarta-feira, 1 de Abril de 2009
0 comentários

Escrevi este artigo para a comunidade da A2C, como esta difícil atualizar este blog(principalmente depois que criei a eeebrasil), republico ele aqui.


foto


Sempre que os programadores Flash/ActionScript e Flex me mostram algum efeito diferente eu digo que consigo fazer o mesmo em Javascript. Mesmo que na maior parte do tempo seja pura implicância, mais para ficar aquela disputa saudável da melhor linguagem de programação e coisas do tipo, pretendo escrever alguns artigos para mostrar que isto realmente é possível.


Hoje em dia Javascript não é mais um pesadelo, graças aos frameworks como: "MooTools, JQuery, Prototype, Dojo, etc..."


Claro que para todo programador o santo graal dos desafios são os jogos e todas as suas complexidades e técnicas. Então por quê não começar com jogos?




A listagem abaixo servirá mais do que exemplificar e sim como fonte de inspiração, portanto não aprecie com moderação xD




Bunny Hunt



Um clássico jogo de tiro, com uma interface simples.
Olha o poder em misturar XHTML, CSS e JavaScript puro.




Travians



Um jogo do tipo "The Sims" onde você é um aldeão.
É um jogo multiplayer e com recursos 100% Ajax.
Framework utilizado:Xajax




Invaders From Mars




Outro joguinho clássico e com uma fantástica implementação.
O blog dos desenvolvedores está recheado de informação de como fazer um jogo como este.
Framework utilizado:SoundManager2




Jogos de Cartas



Um conjunto com vários jogos de carta do tipo Solitarie(Freecel, Yukon, etc...)
Frameworks utilizados:YUI,Mochikit,Plotkit e MooTools




PacMan



O mais clássico de todos os jogos. Refinado com o toque do JavaScript & XHTML e com o belo uso de sprites em CSS
Framework utilizado:YUI




Bomberman



Ainda é possível jogar contra outro jogador aqui.
Framework utilizado:MooTools e SoundManager2




Real World Racer



Dispute uma corrida pelo google map(Google Maps API).
Ajax Chinese Chess




Um xadres chinês com ajaxt
Framework utilizado:MooTools




Lemmings



Outro clássico, e este ficou similar ao original. Em puroJavascript:




BeSlimed



Versão do popular Bejeweled.
Framework utilizado:MooTools





Battleship



Jogo de batalha naval multiplayer.
Framework utilizado:Prototype e Script.aculo.us





Javascript Super Mario Kart



O ícone da minha geração, Super Mario Kart versão em puro Javascript. Confira também o clássico Super Mario em JS com apenas 14kb.







espero que tenham gostado e até a próxima..
( @henryhamon ) me twittem!!!

#RailsSummit, Inesquecível!!!

. Terça-feira, 21 de Outubro de 2008
0 comentários



Enfrentar 8 horas de estrada debaixo de um sol de rachar realmente não foi
facil.
Pior foi sair da rodoviária de São Paulo e pegar um taxi para o hotel, que
depois de diversas voltas ao descer do taxi percebemos que o hotel era na
frente da rodoviária (Maldito Taxista)... Mas valeu apena participar de
um evento que marcou a historia.
Faltam adjetivos para descrever a experiência ímpar que foi a Rails Summit
2008.
O impressionante foi um evento específico com uma abordagem extremamente
ampla, o foco foi muito pouco em código e mais em metodologia, filosofia,
empreendedorismo e claro TESTES e mais TESTES, tudo isto recheado de muita
originalidade e bom humor.

A estrutura do evento foi fabulosa, tomadas em todos os lugares, recepção
com mulheres maravilhosas e wi-fi(este deixou um pouco a desejar,
principalmente pela quantidade de acessos era dificil se conectar, tenho
pesadelos com a vex até hoje =P)

PRIMEIRO DIA

A abertura foi com Gilberto Mautner CEO da locaweb, contando a historia da
Locaweb e sua experiência com o Rails.
Em seguida, a primeira mudança na programação, videoconferência com David
Hansson, uma sessão de perguntas e respostas sobre o futuro do Rails.
Não posso deixar de citar o fantastico vídeo que o pessoal do RailsEnvy
fez para a Summit, outra vez Jason e Greg mostram o lado criativo e
divertido do Rails, Mas Que Bueno!!

Mas até então a Summit era apenas mais um evento de tecnologia, só que
quando Chad Fowler entrou em cena com sua palestra:
"O que significa ser um desenvolvedor Rails em uma má economia?" falando
da importância de se fazer aquilo que se ama e saber vender a você mesmo
fazendo barulho, ficou claro que muito estava por vir.
"Você será a mesma pessoa que é hoje daqui a 5 anos exceto pelas pessoas
que conhecerá e pelos livros que lerá", Chad Fowler falou eloquentemente
sobre ser NOTÁVEL.

* Be remarkable. “remarkable means something that is remarked on” *

Depois chegou a vez de dr.Nic Williams, uma das maiores atrações, falando
sobre "O futuro você", recheado de piadas foi mais um Stand Up Comedy do
que uma palestra.

"O futuro você que será agradecido por ter blogado sobre seu código e por
ter investido em um projeto Open Source"

Em suma Dr. Nic trouxe a necessidade de auxiliar em projetos Open Source.

Logo chegou a vez de George Malamidis e Danilo Sato falarem sobre REST,
passando por protocolos XMPP, SMTP e HTTP. Destaque para a trilha sonora
do final, Black in Black do AC/DC.

Finalizando as palestras do primeiro dia Chris 'Defunkt' Wanstrath, com um
discurso contando a historia da computação e do GitHub. Uma coisa que
gostei foi que ele usou a propria ferramenta(Gist) para a apresentação.
Destaque também para as mensagem enfatizadas por ele:

"Pare de perder tempo lendo RSS, deixe que outras pessoas filtrem para
você. As grandes coisas irão te achar"
"Brinque com novos frameworks, como sinatra, rhino ou johnson"
"Usuários de vi, aprendam porquê as pessoas gostam de Emacs e use esta
informação contra elas"

Então iniciou o "Bird of Fether" ou Desconferência, qualquer pessoa podia
chegar lá e apresentar algo, tudo bem que saíram alguns "bolas foras" como
protestos para que as urnas eletrônicas fosse Open Source (Detalhe que as
Urnas deste ano rodam Linux e 30 dias antes das eleições o código é
aberto) mas tivemos destaques como os chineses da Phusion que ensinaram
como montar um Parser e um Compilador e o Eleomar que ficou famoso
mostrando os valores em montar um grupo.

SEGUNDO DIA

Ninh Bui e Hongli Lai da Phusion fizeram a melhor apresentação de todo o
evento, explicaram o funcionamento do Passenger recheando de citações a
cultura NERD, detalhe que teve até participação especial do Darth Vader.
Por fim Ninh Bui montou um Blog em 5 minutos, tá certo que usando o plugin
criado pelo Hongli Lai é facil fazer isto.

Após fui prestigiar as palestras dos Brazucas acompanhando o que acontecia
nas outras palestras pelo Twitter.
George Guimarães, sobre escalabilidade e como encontrar gargalos em sua
aplicação.
Vinícius Teles com uma aula de motivação e sucesso, detalhe para a
apresentação que ele criou com desenhos de zé palito feito a mão
(realmente muito criativo =] )

Como citei acima, uma das estrelas do evento foi o Twitter, a
interatividade da comunidade durente o evento foi impressionante, graças
ao LiveStream criado pelo blogblogs era possivel saber o que estava
acontecendo em todas as salas.

De nada valeriam as palestras se não fossem colocadas em prática, e
motivados pela palestra do dr.Nic (acho que ele deve ter ficado orgulhoso)
a comunidade criou um projeto chamado "Morena Open Source" para que
contribuíssem com fotos e vídeos das maravilhosas Locawebzetes. Incrível
como em poucos minutos já existiam centenas de fotos, mas o que poderiamos
esperar de um monte de nerds magrelos e lindas morenas para colocá-los na
"linha" hehehe

Encerrando com chave de ouro, Obie Fernandez contando os segredos do
sucesso da HashRocket
eXtreme Programming total com todas as características(Programação em Par,
Fluidez, etc) prova como é possível desenvolver com qualidade e agilidade.

"TAFT- Test All the Fuc*** Time"

Todas as apresentações foram originais e fugiram do estilo tradicional, o
evento foi muito bem organizado, as palestras e palestrantes de alto nível
e muito bom humor transformaram o evento memorável.

Off Topic: Na corrida para Dominar o Mundo

. Terça-feira, 15 de Julho de 2008
0 comentários


O Júlio Monteiro sempre diz uma frase que é: "O sonho de todo programador Rails é Dominar o Mundo".
Ainda não completou um ano, quando eu entrei em contato com meu amigo Millnitz pedindo umas dicas para um projeto que estava planejando desenvolver em .Net, ele simplesmente me disse: "Esqueça .Net e começe a investir em rails" e me enviou este link. Minha cabeça explodiu quando li o Caindo na Real, nunca mais fui o mesmo, entrei de cabeça no mundo do Rails.
E qual foi a minha surpresa quando recebi um email do Acídio sobre a  oportunidade de fazer parte do time de Rails da A2C junto com o meu mestre o Júlio.
 Não posso deixar de agradecer ao Gilmar da FreeLine, onde apesar de ter passado pouco tempo lá fiz grandes amigos tais como Onório, Geisa "Filé", César, Rafael, Aline, etc... Espero encontrá-los na Rails Summit.
E fazendo minha as palavras do Júlio: "Os Railers vão Dominar o Mundo"


Rumo à A2C

Ajudando na tradução do o livro Why’s (Poignant) Guide to Ruby

. Quarta-feira, 25 de Junho de 2008
2 comentários


Já estou a um bom tempo sem postar nada, pois fora alguns contratempos e outras correrias agora estou ajudando na tradução do livro do Why, que diga-se de passagem é ser mais insano do planeta =]
Com isto além de estar aprendendo mais de Ruby e lapidando ainda mais meu inglês já estou com trilhões de idéias para colocar aqui...

Agora se você conhece um pouco de inglês e quiser um pouco de desafio clique aqui e ajude a traduzir o livro Why’s (Poignant) Guide to Ruby para português.

Off Topic: The Joke MAKER...

. Sábado, 10 de Maio de 2008
0 comentários

Nesta semana meu chefe me pediu para que eu analisa-se uma ferramenta de desenvolvimento nacional chamada de MAKER que ele tinha lido na info e ficou interessado. A revista (que para mim não entendem nada, mas acham que entendem) elogia muito a ferramenta, que através de desenhos lógicos ela gera todo o código para você.

Confesso que sempre quando ouço algo sobre ferramentas geradoras de código sinto um frio na espinha,
cerca de quatro anos atrás trabalhava em uma softwarehouse que resolveu apostar numa ferramenta nacional
que prometia ser "revolucionária" chamada de WebIntegrator, que com alguns poucos cliques e arrastes
gerava o código da aplicação em jsp. Bom de fato para fazer um cadastro simples de usuários era prático e rápido mas também só...
Depois de algo em torno de R$15.000,00 gastos e mais algumas semanas de treinamento, a primeira e única
aplicação construída nesta ferramenta foi um fracasso total, hoje esta empresa tenta esquecer que
algum dia investiu no WebIntegrator.
Mas vamos ao Maker, realmente depois de ler a matéria realizada pela revista info e o site da
Softwell esta ferramenta parece ser a 8° maravilha do mundo, algo em que o desenvolvedor teria que
se preocupar unica e exclusivamente com a lógica do aplicativo e ele faz o resto, gerando no final
todo o seu Banco de Dados, Stored Procedures, Triggers e o seu aplicativo em .wad ou .jar que são as
"compilações" do Java.
Dentro das premissas interessantes da ferramenta estão: a promessa de reutilização de código, velocidade no
desenvolvimento, deploy fácil e uma curva de aprendizagem pequena. O primeiro ponto negativo que encontrei é que
não existe uma versão de avaliação da ferramenta, apenas exemplos de aplicativos criados por ela (que são muito lentos).
Pelo fato de não poder testar para saber se a ferramenta "engessa" e como nunca vi um vendedor
falar mal de seu produto, fui em busca de casos com os reais benefícios,
não foi difícil de encontrar um tópico quente num forum respeitado no mundo de desenvolvimento Java
que é o GUJ (www.guj.com.br/posts/list/78806.java).
Infelizmente os usuários de Maker e os 'defensores' não conseguiram responder sobre o impacto
num ambiente de desenvolvimento complexo, sempre que alguem fazia uma pergunta mais técnica se enrolavam para responder, foram levantados também diversos pontos negativos tais como:
- Fluxograma
Todo o desenvolvimento do Maker é baseado em Fluxograma, ou seja, uma ferramenta de análise da
programação procedural, ou seja, regredir uns 30 anos, voltamos a desenvolver proceduralmente perdendo todas as
vantagens e a estruturação da Orientação a Objetos. pois como se faria uma reutilização no maker?
Como definir objetos? Como usar herança e polimorfismo?
- Manutenção
Por mais que este produto permita entregar sistemas rapidamente (disso não há duvidas),
a manutenção sempre tem um custo exponencial.
- Debugger
Como seria possível fazer um debugger de fluxograma? Refactoring e busca estruturada?
- Testes Autômatos
Até então o Maker não demonstra nenhum tipo de ferramenta de automação de teste, sendo que
hoje em dia um projeto moderno prima pela automação dos testes já que a manutenção sempre será
progressivamente mais cara.
- Custo
Pela revista o custo da ferramenta está em torno de R$ 13.900,00 fora o treinamento
que sai por R$ 1.950,00


Não quero fazer aquelas discussões de qual a melhor linguagem de programação que acho baboseira e perda de tempo, sou fã confesso de Rails e mesmo tendo que usar linha de código para desenvolver com ele (e bem poucas linhas =D ) o desenvolvimento é ágil e com total liberdade.

Mas mesmo assim se alguem tenha vontade de utilizar estas ferramentas RAD, aconcelho o uso das ferramentas de UML/MDA tais como o AndroMDA, mas é necessário muito cuidado com as ferramentas RAD, aconcelho a leitura deste

artigo (http://blog.fragmental.com.br/2008/01/20/programacao-radioativa/)



A Máquina de Estado Finito

. Quarta-feira, 23 de Abril de 2008
1 comentários



Calma não se assuste, não vou falar de nenhum maquinário tecnológico maluco. A Máquina de Estado Finito ou FSM( Finite State Machine ) é uma forma de programar.
O conceito de uma Máquina de Estado Finito segundo a wikipedia é: Uma modelagem de um comportamento, composto por estados, transições e ações.
Num modo prático, se você já participou de uma "aventura solo" dos antigos livros-jogo, clássicos para iniciação ao mundo do RPG, naturalmente entenderá a FSM. Eu como todo bom NERD passei a infância rodeado dos livros-jogos de Peter Jackson e Ian Livingstone.

Os livros-jogos são livros interativos em que o leitor encarna um personagem inserido em várias situações, ele era todo dividido em trechos numerados onde no final de cada um destes exisitiam escolhas em que o leitor precisava escolher uma que conduziria para outro trecho.
Apenas para exemplificar segue um pedaços de uma aventura retirado da revista Só Aventuras #2 da Dragão Brasil.

"1) Você é um jovem iniciante nas artes mágicas. Tudo o que sabe atualmente foi ensinado por um velho homem da cidade que, outrora, foi considerado um grande feiticeiro.
Mas este
conhecimento não é o suficiente para você. Sua sede pela magia, têm motivado-o a buscar mais conhecimentos mágicos.
Você ouve boatos sobre um lugar ao norte, além da Floresta
Maldita, onde a magia reina absoluta.
O unico caminho que leva a Floresta Maldita dizem que esta repleto de ladrões e criaturas famintas. Após horas de caminhada, você tem a impressão de que alguém o
observa, mas não vê nada, continua a andar até que escuta um graveto estalar muito próximo.
Quando subitamente quatro criaturas saltam para a trilha. Pele cinzenta, cheiram mal e empunham espadas curtas. Um deles, toma a frente e grita:
'Passe suas moedas para cá!'

O que você faz?
Entrega as moedas para evitar confusão. Vá para 4

Saca o punhal e enfrenta os assaltantes. vá para 2

Tenta uma magia. vá para 3

2)
Você saca seu punhal de prata e grita: "Venham criaturas! E encontrem a morte em minha lâmina!" Mas... o que você pensa que está fazendo? É um mago, não um guerreiro. Esta tolice lhe custou a vida.

3)
Você recorda que já ouviu falar dessas criaturas, são goblins, seres imensamente covardes, com pavor de magia. Você começa a dizer as palavras mágicas e fazer gestos necessários para invocar um feitiço, mas antes que consiga terminar o encantamento, aquele que parece o líder grita:
'Ele é um feiticeiro! Vai nos transformar em humanos feios! Fujam!!'
E você segue o seu caminho tranquilo.


4)

Achando mais prudente entregar as moedas às pequenas criaturas, voc6e joga a pequena bolsa de veludo para o líder. Então eles fogem por entre as árvores, sumindo da visão deixando-o livre para prosseguir sua jornada."


Tá bom mas o que isto tem a ver com Máquina de Estado Finito? Bom, tudo...
Seguindo a estória apresentada no trecho 1 nos deparamos com 3 escolhas, ao escolher uma destas alternativas é gerado um evento que acarreta numa consequência, a opção 2 leva a morte =D

Assim como no jogo você possui opções pré-definidas na FSM você determina as ações de acordo com o estado.

Agora vamos utilizar a FSM no Rails, um plugin bem funcional é o acts_as_state_machine, existe muito pouco material sobre ele.
A instalação não tem segredo:
./script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/


Vamos criar uma FSM para controlar um Forno Microondas em Rails para entender o funcionamento do acts_as_state_machine.

Funcionamento do Forno Microondas:
O Forno tem um botão de Ligar para iniciar e um Temporizador que determina o período de cozimento. O Cozimento pode ser interrompido a qualquer momento que a porta do Forno for aberta. Depois de fechada a porta o cozimento continua. O cozimento irá terminar quando o temporizador estiver zerado.




1 class Microondas < ActiveRecord::Base

2 # Inicialmente o Microondas estará no estado "Desligado"
3 acts_as_state_machine :initial => :desligado
4
5 state :desligado
6 state :ligado
7 state :interrompido
8 state :concluido
9
10 # No evento 'iniciar' eh realizada a transicao do estado "pendente" para "iniciada"
11 event :iniciar do
12 transitions :from => :desligado, :to => :ligado
13 end
14
15 event :concluir do
16 transitions :from => :ligado, :to => :concluido unless self.temporizador > 0
17 end
18
19 event :interromper do
20 transitions :from => :ligado, :to => :interrompido
21 end
22
23 event :continuar do
24 transitions :from => :interrompido, :to => :ligado
25 end
26 end

OBS: O plugin assume que o estado de seu model fica no campo state.





1 microondas = Microondas.create
2 microondas.state # "desligado"
3 microondas.temporizador = 5
4 microondas.iniciar? # true
5 microondas.interromper
6 microondas.state # "interrompido"
7 microondas.continuar
8 microondas.state # "ligado"
9 microondas.concluir?

A utilização de uma FSM é além dos limites da imaginação. Um exemplo clássico de utilização é um cadastro de usuário.
O cadastro de usuário pode ter, por exemplo, os seguintes estados:
Recém Cadastrado (aguardando confirmacao de email), Membro e Banido(desativado).
Outro exemplo seriam os estados de um documento dentro de um GED(gestor eletronico de documentos), ou um projeto em um gestor de projetos, ou um ticket em um BPM (bussiness process management).


Mais sobre aventuras-solo http://www.sobresites.com/rpg/aventurassolo.htm
Mais sobre FSM http://www.programmingbasics.org/en/fsm.html
http://www.brasiltech.net/developez/2008/02/22/mini-tutorial-de-maquina-de-estado-state-machine-parte-1/