Posts de April, 2011

[Emerson Macedo] Node.JS – Mudanças arquiteturais na versão 0.6 e suporte a Windows

Wednesday, April 20th, 2011

Na última CodeConf, Ryan Dahl apresentou o Road Map do Node.JS para a versão 0.6. Dentre as mudanças, o foco em fazer funcionar no Windows sem tranqueiras (i.e. Cygwin) teve bastante destaque. Isso resultará em uma grande mudança arquitetural, no que diz respeito ao core do projeto, que é a gerência de I/O Assíncrono.

O problema do Node.JS com o Windows se dá porque sistemas operacionas UNIX e Windows tratam Network Programming de forma totalmente diferente. Enquanto no Unix usamos libev e libeio por cima de select, epoll ou kqueue (isso varia de acordo com o sabor de unix), no Windows esse tratamento é totalmente diferente. Windows até tem suporte a select, porém não é eficiente para sistemas de alta concorrência. O que resolve esse problema no Windows se chama I/O Completion Ports (IOCP), que sinceramente não conheço nada sobre. Eu li a página da documentação mas sequer um teste básico eu fiz. Pretendo fazer e depois escrever alguma coisa sobre isso mais pra frente.

Até onde eu entendi, o I/O Completion Ports já tem o suporte completo para I/O Assíncrono, sem precisar ter um Thread Pool próprio para gerênciar isso (que é o que o Node faz no Unix). Posso estar enganado pois não testei isso.

Junto a essa idéia, criou-se um projeto chamado liboio, que é a nova abstração para o tratamento de I/O de cada plataforma (i.e. Sistema Operacional). Esse projeto será integrado a versão 0.6 do Node.JS.

A nova estrutura fica da seguinte forma:

Estrutura Node.JS 0.6.0

Anteriormente não existia essa segunda camada, nem a parte de IOCP e Windows Kernel, portanto considero a mudança significativa, apesar de a parte *nix receber basicamente uma abstração, o que não deve mudar mundo quando nesses SOs.

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Emerson Macedo] Node.JS – Mudanças arquiteturais na versão 0.6 e suporte a Windows

Wednesday, April 20th, 2011

Na última CodeConf, Ryan Dahl apresentou o Road Map do Node.JS para a versão 0.6. Dentre as mudanças, o foco em fazer funcionar no Windows sem tranqueiras (i.e. Cygwin) teve bastante destaque. Isso resultará em uma grande mudança arquitetural, no que diz respeito ao core do projeto, que é a gerência de I/O Assíncrono.

O problema do Node.JS com o Windows se dá porque sistemas operacionas UNIX e Windows tratam Network Programming de forma totalmente diferente. Enquanto no Unix usamos libev e libeio por cima de select, epoll ou kqueue (isso varia de acordo com o sabor de unix), no Windows esse tratamento é totalmente diferente. Windows até tem suporte a select, porém não é eficiente para sistemas de alta concorrência. O que resolve esse problema no Windows se chama I/O Completion Ports (IOCP), que sinceramente não conheço nada sobre. Eu li a página da documentação mas sequer um teste básico eu fiz. Pretendo fazer e depois escrever alguma coisa sobre isso mais pra frente.

Até onde eu entendi, o I/O Completion Ports já tem o suporte completo para I/O Assíncrono, sem precisar ter um Thread Pool próprio para gerênciar isso (que é o que o Node faz no Unix). Posso estar enganado pois não testei isso.

Junto a essa idéia, criou-se um projeto chamado liboio, que é a nova abstração para o tratamento de I/O de cada plataforma (i.e. Sistema Operacional). Esse projeto será integrado a versão 0.6 do Node.JS.

A nova estrutura fica da seguinte forma:

Estrutura Node.JS 0.6.0

Anteriormente não existia essa segunda camada, nem a parte de IOCP e Windows Kernel, portanto considero a mudança significativa, apesar de a parte *nix receber basicamente uma abstração, o que não deve mudar mundo quando nesses SOs.

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Emerson Macedo] Entendendo a numeração de versões do Node.JS

Wednesday, April 20th, 2011

Após um tempo usando o Node.JS, talvez você se pergunte quais versões usar em produção, e/ou sob quais versões você deve basear uma biblioteca que está desenvolvendo. O controle de releases do Node.JS é baseado no clássico estilo de versionamento x.y.z, onde x é o major release, y é o minor release e o z é um patch. Se você não sabe muito bem o que é isso, o site sobre Semantic Versioning cobre esse assunto, e vai um pouco mais além.

Historicamente, alguns projetos costumam usar a versão par como stable e a versão ímpar como unstable. O próprio kernel do linux já foi assim. Esse não é o princípio do Semantic Versioning e muita gente considera errado, mas isso não está em discussão aqui. Meu objetivo é apenas explicar como você deve manter atualizado seu runtime do Node.JS.

O Node.JS também se baseia nessa divisão entre par e ímpar. A versão atual é a 0.4.6 e é a que deve ser utilizada em todos os casos, seja para experimentos, seja para produção. O target atual é a versão 0.6.0, e assim como aconteceu com a versão 0.4.0, as versões intermediárias 0.5.x (unstable) serão usadas para fazer as experiências do que irá entrar nas versões 0.6.x.

Sendo prático, a forma mais indicada de lidar com isso é usar sempre as versões pares para desenvolver suas bibliotecas e colocar aplicações em produção e sempre que possível ter uma branch para testar essas bibliotecas e aplicações nas versões ímpares posteriores, evitando assim acumular muita coisa para a versão par seguinte.

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Emerson Macedo] Entendendo a numeração de versões do Node.JS

Wednesday, April 20th, 2011

Após um tempo usando o Node.JS, talvez você se pergunte quais versões usar em produção, e/ou sob quais versões você deve basear uma biblioteca que está desenvolvendo. O controle de releases do Node.JS é baseado no clássico estilo de versionamento x.y.z, onde x é o major release, y é o minor release e o z é um patch. Se você não sabe muito bem o que é isso, o site sobre Semantic Versioning cobre esse assunto, e vai um pouco mais além.

Historicamente, alguns projetos costumam usar a versão par como stable e a versão ímpar como unstable. O próprio kernel do linux já foi assim. Esse não é o princípio do Semantic Versioning e muita gente considera errado, mas isso não está em discussão aqui. Meu objetivo é apenas explicar como você deve manter atualizado seu runtime do Node.JS.

O Node.JS também se baseia nessa divisão entre par e ímpar. A versão atual é a 0.4.6 e é a que deve ser utilizada em todos os casos, seja para experimentos, seja para produção. O target atual é a versão 0.6.0, e assim como aconteceu com a versão 0.4.0, as versões intermediárias 0.5.x (unstable) serão usadas para fazer as experiências do que irá entrar nas versões 0.6.x.

Sendo prático, a forma mais indicada de lidar com isso é usar sempre as versões pares para desenvolver suas bibliotecas e colocar aplicações em produção e sempre que possível ter uma branch para testar essas bibliotecas e aplicações nas versões ímpares posteriores, evitando assim acumular muita coisa para a versão par seguinte.

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Emerson Macedo] Experiência do Usuário sob a ótica do usuário

Tuesday, April 19th, 2011

Na última semana, estive passeando de férias em Natal/RN. Foi uma semana de muita diversão. Apesar disso, vivi algumas situações que me fizeram refletir sobre a experiência do usuário, mas não somente focado na nossa área de TI, mas num âmbito geral, atuando como o próprio usuário/cliente.

Em um dos dias do passeio, resolvi jantar com a minha esposa e um casal de amigos numa pizzaria famosa da região. A pizzaria era bem indicada, tem um website bem legal e tudo que tem direito. Com uma estrutura linda, uma faixada de dar inveja, toda em madeira, com um lugar bem estilizado e com direito a música ao vivo. Para minha surpresa, a pizza não era a das melhores. Eu até sai satisfeito, mas a minha esposa não gostou e acabou nem comendo tudo. De fato a pizza não era tão boa.

No dia seguinte, saímos novamente para comer a noite, mas dessa vez tinha que ser algo rápido, pois era necessário dormir cedo devido ao voo ser as 5 da manhã do dia seguinte. Perguntamos ao recepcionista da pousada se havia algum lugar por perto onde tinha lanche e ele nos indicou comer uma Pizza (novamente ?!?) ali bem próximo, no quarteirão seguinte. Ele também disse que os donos da pousada eram frequentadores. Depois que ele nos explicou onde ficava a pizzaria, saímos a pé mesmo pois era muito perto. Chegando em frente ao local, percebemos ser um lugar bem simples, ao ponto de nos fazer pensar se era aquele realmente o lugar que os donos da pousada frequentavam. Para ter uma idéia, nem lembro de como era a fachada/letreiro/etc. O recepcionista do hotel havia dito que esse lugar servia apenas pizzas individuais (um pouco maior que uma pizza brotinho) e confirmamos isso, tenho assim certeza que estávamos no lugar certo. Olhei o cardápio e vi que tudo era bem barato. Fizemos o pedido e aguardamos. A pizza era simplesmente muito gostosa. Muito mesmo. Em poucos lugares eu comi uma pizza tão gostosa por um preço tão barato. E olha que não é questão de custo/benefício. Se a pizza fosse mais cara que na outra pizzaria eu pagaria certamente, mesmo sendo uma pizza menor. Saímos dali muito satisfeitos e entendi o motivo que fazia os donos da pousada frequentarem aquele local. Por sinal, nem lembro o nome do lugar, mas lembro exatamente onde fica e se eu voltar algum dia a Natal certamente irei nessa pizzaria. E o que raios essa pizza tem a ver com experiência do usuário?

Essa minha passagem pelas pizzarias não foi premeditada, simplesmente aconteceu. Como cliente (ou usuário se você preferir), fiquei mais satisfeito com a pizzaria mais simples do que com a pizzaria mais bonita, requintada, que tinha website e tudo mais. E por que eu gostei da mais simples? Será que é por que eu não gosto de coisas requintadas? Claro que não. Eu gostei do lugar simples porque eles me serviram uma pizza melhor. O mais importante de uma pizzaria é a pizza ser gostosa ora bolas. Não adianta ter uma cadeira linda, usar um iPad pra fazer pedidos, guardanapo imperial e talher de outro se a pizza não for saborosa. É simples assim. E o que isso tem a ver com a nossa área?

Vamos pensar nas aplicações que fazemos no dia a dia. O Youtube, por exemplo, tem um site bem simples. Não considero o site deles uma obra de arte, muito pelo contrário. O player de vídeos deles provavelmente é um dos mais simples e feios que existem na web. Então por que será que ele é um produto de sucesso? Simples: o youtube da muita importância para o que tem realmente valor para o usuário do site deles, que é ver e compartilhar vídeos. É muito simples enviar um vídeo e mais simples ainda ver videos. Qualquer leigo consegue fazer isso. O player de vídeos deles funciona perfeitamente bem, apesar de não ter uma aparência linda. E o usuário se importa com essa aparência não muito bonita? Alguma vez você pensou em deixar de acessar o Youtube porque o site não é lá tão bonito? Acredito que não. Eu poderia citar diversos exemplos de produtos de sucesso que são extremamente simples e as vezes feios mas que são sucesso exatamente por focarem na necessidade do usuário, mas nem preciso citar porque acho que já deu pra entender onde eu quero chegar.

Parece chover no molhado, mas é impressionante o número de vezes que me pego discutindo ou observando discussões sobre se um site/aplicação precisa de borda arredondada, gradiente, se o cinza está um pouco mais claro ou escuro, ou se o botão está 1 píxel pra direita ou pra baixo, quando por vezes o que tem mais valor para o usuário nem está ótimo ainda. Não que esses detalhes não tenham importância, muito pelo contrário. O ponto aqui é que o foco deve estar primeiro no core business e depois nos acessórios. É o exemplo da pizzaria. Me lixei pra decoração linda, música ao vivo e requinte da primeira pizzaria, pois a pizza não era tão boa (se fosse certamente eu voltaria). Ao meu ver eles se preocuparam demais com coisas secundárias e esqueceram de contratar ótimos pizzaiolos. Certamente me lembrarei muito mais da segunda pizzaria, que era um lugar bem mais simples mas tinha uma deliciosa pizza.

Pra finalizar, pense um pouco sobre os motivos que fazem do iPhone um produto de sucesso. Provavelmente você perceberá que um dos menos relevantes é a sua beleza.

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Emerson Macedo] Curso de Node.JS da e-Genial

Monday, April 18th, 2011

Na próxima semana, começa a primeira turma do curso de Node.JS da e-Genial. Este curso será uma grande oportunidade para quem quer estar por dentro dessa nova tecnologia e gosta de estar sempre atualizado. Pra quem não sabe, o professor desse curso sou eu, e tenho me envolvido com Node.JS quase desde o seu início.

Conteúdo do Curso

Este curso não é apenas um conjunto de tutoriais para você aprender a fazer determinadas aplicações. O curso é voltado para ensinar o know why do Node.JS. Nele você aprenderá como as coisas realmente funcionam, mas sem deixar de ensinar também como fazer as coisas acontecerem, ou seja, você aprenderá a fazer, mas também aprenderá os porquês.

Por que aprender Node.JS ?

Node.JS é uma tecnologia de fato emergente. Surgiu em Maio de 2009 e vem evoluindo muito rapidamente, com uma comunidade muito forte se formando.

O Node.JS basicamente foi feito para resolver alguns problemas conhecidos, de forma eficiente e eficaz, como I/O não bloqueante e assíncrono, alta concorrência de usuários, conexões persistentes, streaming, entre outros. É uma tecnologia baseada na linguagem Javascript e no poderoso runtime V8, que é usado no Google Chrome, browser bem conhecido pelos desenvolvedores.

Aprender Node.JS certamente abrirá seus horizontes na programação. Ele trás o grande desafio da programação assíncrona, baseada em Reactors, que não é muito comum no nosso dia a dia de programação com Java, DotNet, Ruby e Python (apesar dessas possuirem frameworks para tal). Além disso, a facilidade que o Node.JS nos dá para desenvolver aplicações em tempo real é impressionante, dado a quantidade de bibliotecas e frameworks disponíveis para esse fim, não se esquecendo que o próprio Node puro já é feito para esse propósito.

Mercado de trabalho

Sobre o mercado de trabalho para Node.JS, pense no Rails em 2004/2005. Nessa época, existiam poucas vagas, mas os que aprenderam a tecnologia no começo se deram bem, tendo hoje bastante experiência no assunto. A grande maioria ocupa uma ótima vaga de emprego em alguma empresa aqui no Brasil ou até mesmo no exterior. Com Node.JS a história é a mesma: quem aprender agora está saindo na frente, e quando as vagas bombarem aqui no Brasil (já existem algumas no exterior), quem já conhecer o Node terá vantagem e poderá ocupar facilmente essas vagas.

Por que fazer o curso com o Emerson Macedo?

Alguns podem se perguntar se sou a pessoa mais indicada para ministrar um curso de Node.JS. Acho a pergunta totalmente válida. Quando vamos contratar um serviço devemos sempre nos perguntar se vale a pena ou não fazer com profissional A ou B. Portanto, entendo esse tipo de dúvida e apenas vou falar um pouco do meu envolvimento com o mundo Node.JS, da minha experiência como professor e deixar que você tome essa decisão.

Não sou presunçoso a ponto de achar que sou o cara que mais conhece Node.JS na face da terra, mas ao mesmo tempo tenho noção de que sou um dos que tem investido em conhecer bem essa tecnologia.

Meu envolvimento mais profundo com Node.JS começou no início do ano passado, quando resolvi investir na tecnologia. De lá pra cá, não consigo mensurar a quantidade de material que consumi sobre o assunto. Foi quando em agosto tive a oportunidade dada pelo pessoal do DevInSampa (Tino Gomes e Cia) para apresentar algo sobre o Node). Depois disso, apresentei diversas palestras sobre o assunto, fiz alguns projetos Open Source que estão no meu GitHub, um projeto para própria e-Genial (que está sendo testado em Beta), e tenho testado algumas soluções na Globo.com que quando eu colocar alguma coisa de fato no ar publicarei aqui mesmo no blog.

No fim do ano passado, fui convidado pela e-Genial (conhecida pela sua ótima plataforma de cursos online, o Treina Tom, e também por ser inovadora em cursos) para criarmos um curso de Node.JS. Eles me perguntaram se eu toparia montar um curso e resolvi aceitar. Pra quem não conhece a minha trajetória como professor, faço isso desde os 17 anos, quando eu dava treinamento do sistema para diversos clientes de uma empresa de automação de ponto e acesso, empresa essa que trabalhei de 1998 a 2000 com eletrônica e informática. Depois de um longo período sem lecionar, voltei a faze-lo em 2007, ministrando cursos de Java no famoso centro de treinamento da DBA Engenharia de Sistemas, onde trabalhei por quase 3 anos. Em 2008, também ministrava treinamentos em cursos de extensão na Faculdade Simonsen. Além disso, fora da profissão, sou professor de jovens na Escola Bíblica Dominical na igreja onde faço parte, ministrando aula todos os domingos pela manhã (Deixo claro aqui que no curso de Node.JS não contém nem conterá nenhum conteúdo religioso ou relacionado a isso. O fato de eu mencionar ser professor na igreja é apenas para ilustrar minha experiência no assunto).

Dado essas informações, dá pra perceber que não sou um aventureiro em lecionar, nem tão pouco um oportunista que está aproveitando a onda do Node.JS para se dar bem. É claro que todo o investimento que tenho feito na tecnologia está dando esse retorno, mas poderia não ter dado em nada. O fato é que tenho me envolvido bastante com o Node.JS e tenho ampla experiência como professor.

Mas não dá pra aprender tudo sozinho?

Claro. Estamos na era da informação. A única diferença é que se você fizer o curso, receberá tudo mastigado :p. Ao invés de você começar do zero, vai ganhar um start ótimo, sem precisar penar como eu penei. Meu objetivo é preparar os alunos deste curso para desenvolver qualquer aplicação que o Node.JS permite, passando pelos conceitos, pela base da tecnologia (know why) e também pela prática, com aplicações reais e que fazem uso do que o Node tem de melhor.

Aprender isso tudo sozinho é possível, mas você pode aprender muito mais rápido com um baixo investimento, ao meu ver.

Outras referências

O Daniel Lopes, que é coordenador e instrutor da e-Genial, publicou no Blog da empresa a respeito do curso e dos porquês de aprender Node.JS e fazer o curso. Leitura recomendada.

Está esperando o que? Matricule-se já no curso, pois começa na próxima semana !!!

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Francisco Souza] Coding dojo na Globo.com: sucesso!

Monday, April 18th, 2011

No último sábado rolou a primeira edição do dojo.globo, o coding dojo da Globo.com. Trata-se de mais uma iniciativa de reunir a comunidade de desenvolvedores no Rio de Janeiro. O dojo aconteceu no Bloco 7  do Shopping Città América, e contou com mais de trinta participantes: incluindo desde estudantes até profissionais experientes, incluindo um convidado internacional (que eu esqueci o nome)! . O evento começou com uma rápida apresentação, onde expliquei o que é e como funciona um coding dojo. Em seguida, os participantes foram divididos em dois grupos para duas sessões simultâneas!

 

Apresentação sobre Coding Dojo

Explicando para a galera o que é coding dojo e como essa bagunça funciona :)

 

Apesar da divisão, algumas pessoas (leia-se: eu) “flutuaram” entre os grupos e conseguiram participar da construção dos problemas nos dois grupos, pulando de uma sala pra outra em momentos oportunos.

 

Cláudio Berrondo em um momento "ééé, tem que fazer esse negócio passar" x)

Cláudio Berrondo em um momento "ééé, tem que fazer esse negócio ficar verde" x)

 

Os dois grupos utilizaram Python para implementar três problemas: FizzBuzz, Encontre o telefone e Cheque por extenso. Houve uma parada para um generoso coffee break, oportunidade valiosa para um incrível momento de networking (dois pontos mega positivos da nossa retrospectiva).

 

Coffe break e networking

Coffee break e networking

 

Os códigos das soluções estão disponíveis no Github, assim como a retrospectiva e uma lista com os problemas sugeridos. Essa foi apenas a primeira de muitas edições que ainda virão! Se você é do Rio de Janeiro, ou quer saber quando vai rolar o próximo dojo, não perca tempo! Inscreva-se hoje em nosso grupo de discussão e fique por dentro da programação de próximas edições.

 

Galera I Globojo

Foto final, conseguida depois de muita luta com o timer da câmera

 

No mais, um muito obrigado a toda a galera presente e envolvida, foi sensacional! :)

[Emerson Macedo] Webbynode também suporta Node.JS

Saturday, April 9th, 2011

O serviço de hospedagem Webbynode, muito conhecio na nossa comunidade Ruby on Rails (pra quem não sabe programo em Ruby já faz um bom tempo e faço parte também dessa comunidade), também tem suporte a Node.JS nos seus Rapid Apps. Eu acho que esse suporte já existe faz algum tempo, mas somente agora me dei conta disso.

Ainda não testei o serviço. Estou até disposto a gastar $20 pra ver se funciona bem. Assim que eu fizer posto aqui um feedback sobre o assunto.

Segue o link pra quem quiser ver a documentação – http://guides.webbynode.com/articles/rapidapps/nodejs.html

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

[Tiago Peczenyj] Perl Workshop 2011

Thursday, April 7th, 2011

Dia 7 de maio, em São Paulo, acontecerá a segunda edição do São Paulo Perl Workshop.

Será um grande evento com as participações de Larry Wall (criador da linguagem Perl), Brian d Foy (autor de vários livros incluindo Mastering Perl ) e Brian Fitzpatrick (fundador da Danga, responsável por projetos como Memcached, MoguileFS entre outros). A lista completa de palestrantes do evento pode ser encontrada aqui.

Pessoalmente acho uma excelente oportunidade para conhecer o que está sendo feito atualmente com Perl bem como conhecer uma das melhores comunidades de desenvolvedores do Brasil. Enquanto alguns acham que perl é uma linguagem write-only em virtude da sua filosofia TIMTOWTDI (There’s more than one way to do it) porém hoje existem excelentes soluções para web (framework como Catalyst, Dancer, Mojolicious), metaprogramação (com Moose – que será assunto do Brian d Foy), mapeamento objeto-relacional (DBIx::Class) sem falar nos milhares de módulos no CPAN disponíveis.

Larry Wall apresentará o que de mais novo há no desenvolvimento do Perl6, linguagem que terá uma boa dose de orientação a objetos e funcional. Imperdível. Sem falar na apresentação sobre camlistore, um sistema de storage voltado para a web.

A programação do evento pode ser encontrada aqui.

Vale a pena comparecer!

[Tiago Peczenyj] Perl Workshop 2011

Thursday, April 7th, 2011

Dia 7 de maio, em São Paulo, acontecerá a segunda edição do São Paulo Perl Workshop.

Será um grande evento com as participações de Larry Wall (criador da linguagem Perl), Brian d Foy (autor de vários livros incluindo Mastering Perl ) e Brian Fitzpatrick (fundador da Danga, responsável por projetos como Memcached, MoguileFS entre outros). A lista completa de palestrantes do evento pode ser encontrada aqui.

Pessoalmente acho uma excelente oportunidade para conhecer o que está sendo feito atualmente com Perl bem como conhecer uma das melhores comunidades de desenvolvedores do Brasil. Enquanto alguns acham que perl é uma linguagem write-only em virtude da sua filosofia TIMTOWTDI (There’s more than one way to do it) porém hoje existem excelentes soluções para web (framework como Catalyst, Dancer, Mojolicious), metaprogramação (com Moose – que será assunto do Brian d Foy), mapeamento objeto-relacional (DBIx::Class) sem falar nos milhares de módulos no CPAN disponíveis.

Larry Wall apresentará o que de mais novo há no desenvolvimento do Perl6, linguagem que terá uma boa dose de orientação a objetos e funcional. Imperdível. Sem falar na apresentação sobre camlistore, um sistema de storage voltado para a web.

A programação do evento pode ser encontrada aqui.

Vale a pena comparecer!