quinta-feira, setembro 02, 2010

Interfaces Divisíveis (Umeboshi Server, Node Knockout parte 3 - final)

Eis uma apresentação do conceito guia do nosso projeto:



Se preferir em Português:



Demoramos um pouco p/ amadurecer o conceito, e ja adianto que ele não está 100% ainda, mas esta é a idéia básica, que consiste em:


  1. Elementos de interface possuem URLs

  2. Ao se acessar estas URLs, o elemento é então transferido ou replicado na tela de quem acessou.

  3. Listeners e dispatchers de eventos são configurados de maneira semelhante à que seriam para ouvir e enviar eventos dentro do contexto de uma página web, mas extendido para ouvir e enviar(pubsub) via rede pelo canal previamente combinado.



Para tornar isto possível, o primeiro passo foi fazer um servidor que criasse um novo canal pubsub para quem quer que precisasse de um. Em uma analogia com seres humanos, seria um instanciador de salas de chat, ou um carinha que reserva salas de reunião p/ quem pede. Este é o Umeboshi Server.

Então a sequência ou ciclo de vida de um aplicativo que quer que seus elementos conversem remotamente seria algo do tipo:


  1. pede para reservar um canal (acessa o entrypoint /channels/new ou /channels/new?fmt=json p/ resultado em json ou /channels/new?fmt=json&callback=foo para jsonp)

  2. passa de alguma forma este canal para as paginas relativas a cada elemento(que vao ser servidas em cada URL de um elemento destacável)

  3. prepara a lógica do que ouvir e do que falar e do que fazer quando ouvir algo relevante



Como se nota, o servidor em si, que foi nosso projeto, não faz muita coisa. Só dá o suporte para que aplicações do tipo das que visionamos, com interfaces quebráveis/divisíveis/espalháveis possam ser rapidamente e facilmente desenvolvidas por quem está habituado a fazer aplicativos single-page em HTML. Basta a inclusão de duas <script> tags extras, uma que é o include do client Faye e outra que é a chamada ao entrypoint JSONp que te retornará o código do canal em uma callback. A partir daí é tudo responsabilidade do developer.

E é isso aí, foi um projeto que gostei de participar, e que quero continuar trabalhando nele, estamos atualmente continuando a conversa na lista de discussões do umeboshi fireteam e desde já convido a todos que se interessarem a participar também, sugestões e patches são muito bem vindos.

[UPDATE 3-Setembro-2010] A votação acabou. Muito obrigado a todos que doaram parte do seu tempo para votar e deixar um review la na página da competição. Ao que parece, conseguimos ficar entre os top 5 na categoria inovação (4º lugar). E nos próximos dias atualizaremos a página do projeto e o código do servidor uma vez que os repositórios e a máquina onde fazemos deploy estão liberadas novamente.

Para acompanhar o progresso, por favor se inscreva na lista de discussão do Umeboshi Fireteam, estamos coordenando os próximos passos por lá.

quarta-feira, setembro 01, 2010

Node Knockout (Parte 2)

Pois bem, quando eu li que haveria uma espécie de hackday/hackaton para desenvover projetos com o node em 48 horas, me empolguei e mandei um email p/ um monte de gente perguntando quem se animava para formar uma equipe, depois de duas confirmações anunciei no meu twitter e consegui completar 4 pessoas. Só gente boa, um designer de mão cheia e mais dois programadores um aluno e um ex-aluno do ICMC.

O Daniel e o Mauricio viriam de São Paulo, e o Armando tinha aula até tarde na sexta, então começariamos mesmo p/ valer só no Sábado (a largada foi Sexta as 21 e o fim no Domingo as 21). Não tinhamos muito bem definido o que seria o projeto, durante a semana estavamos fazendo uns brainstorms num notepad compartilhado, mas só especulando o que daria p/ fazer, que explorasse as coisas boas do nodejs (aguentar muitas conexoes simultaneas, ter libraries de websockets, nosql databases e varias outras "mudernidades").

Então sexta eu comecei com testes do Socket.io, para ver se instalava legal no VPS da Joyent que deram p/ nossa equipe e tentar fazer um chat simples rodar, porque qualquer das ideias que estávamos ainda cogitando iria precisar deste passo inicial de fazer clients diferentes trocarem mensagem. A noite meu irmao chegou, discutimos um pouco e rabiscamos muito o flipchart aqui de casa(preciso tirar fotos e subir pro flickr) para ir amadurecendo tanto o conceito quanto ir limando coisas que pareciam ser inviáveis p/ um período tão curto de tempo, jantamos fora e depois encontramos com o Armando em um café para sincronizarmos o que tinhamos discutido até então.

No sábado chegou o Daniel, e a coisa séria começou de verdade (ele programa melhor que eu), sentamos no mesmo computador e ficamos quase o dia todo pair-programming na minha máquina, quebrando a cabeça para fazer nossos servidores de sockets se comportarem como queriamos. Enquanto isso meu irmão criava no 3D elementos de UI com visual incrível (dê uma olhada!) que poderiam ser utilizados nas demos, e o Armando ia tentando se entender com a API de eventos multitouch do Mobile Safari, pois sabiamos que queriamos mostrar algo no iPod e no iPad, feito em HTML. Um trabalho de equipe muito empolgante apesar de cansativo.

Muito café e muita sinergia num apartamento quente e cheio de poluição sonora vindo da rua (carros de som de políticos com músicas repetitivas, alarme de lojas disparando, enfim…).

Ao fim do sábado parecia que não iriamos dar conta do desafio que impusemos a nós mesmos, e mesmo o conceito e definição do que fariamos ainda estava confuso. E todos poderiam usar algumas horas de sono. Demos o dia por encerrado.

Domingo de manhã o dia começou bem melhor do que o Sábado terminou: o Daniel resolveu trocar a abordagem e abandonamos o Socket.io em favor do Faye, o que foi a sacada para o tipo de objetivo que estávamos tentando alcançar (Mobile Safari não tem suporte a websockets), além disso finalmente chegamos a um consenso sobre o que seria e como vender o projeto, agora era só correr para colocar tudo no lugar. E como corremos… a reta final foi alucinante.

Entregamos no prazo, o que foi inacreditável, e até que não ficou tão ridículo, pelo contrário eu me orgulhei bastante… mas falo do projeto e do resultado em si no próximo post.

Enquanto isso, leia somente a sequência de commit messages do nosso repositório, do começo para o fim como se fossem status updates do twitter… da para ter um pouco de noção da loucura que foi nosso fim de semana :)

[Update] Confiram as partes 1 e 3 deste post.