Posts de ‘Emerson Macedo’

[Emerson Macedo] No ar o Globo TV – Novo portal de vídeos da Globo.com

Tuesday, January 31st, 2012

Hoje tenho o prazer de anunciar que colocamos no ar o Globo TV, o novo portal de vídeos da globo.com. Quem acessava os domínios video.globo.com videos.globo.com ou gmc.globo.com perceberá que esses domínios agora são redirecionados para globotv.globo.com.

Os leitores do meu blog devem ter percebido que não coloco nada novo no blog desde outubro. Nesses últimos meses tenho trabalhado duro, junto com meu time no desenvolvimento desse produto. Ta aí o resultado :)

O que é o Globo TV?

O Globo TV agora é o lugar ideal para você consumir os vídeos das organizações Globo. É um produto onde concentra toda a nossa experiência no consumo de vídeos. É o lugar onde você assiste seus canais de tv favoritos na internet. Nós chamamos isso internamente de “Envolvimento irresponsável e inconsequênte em vídeos”.  A busca foi totalmente modificada e agora a visualização dos resultados está muito melhor, inclusive na experiência quando você filtra ou pagina a busca que você fez.

Desenvolvimento do produto

Mudar o portal de vídeos da Globo.com não é uma tarefa simples. O produto anterior estava no ar há mais de 4 anos. Desenvolvemos esse novo em aproximadamente 4 meses. Segue uma foto do que estava no ar até essa madrugada:

O antigo Globo Vídeos (ou Globo Media Center) ficou do jeito que estava por um bom tempo devido a nossa estratégia anterior em focar nos catálogos de vídeo. Recentemente resolvemos ter um produto onde todo o consumo de vídeos é agregado e daí surgiu a idéia de fazer um novo Globo Vídeos, que agora se chama Globo TV.

Próximos passos

Esse novo produto ainda tem muito o que evoluir. Estamos começando a trabalhar em um responsive design para tornar o site mais adequado quando visualizado em dispositivos móveis (i.e. iPhones, iPads e similares). Também desenvolveremos uma experiência cada vez melhor para o assinante, que hoje já pode ver vídeos na íntegra com exclusividade mas terá muito mais atenção a partir de agora. Para esses, disponibilizamos inicialmente uma página com conteúdo exclusivo, com íntegras de jornalismo, novelas, esportes, entre outros. Posteriormente teremos uma experiência de consumo ainda mais rica para esses usuários assinantes.

Feedbacks são muito bem vindos – http://globotv.globo.com

PS: A partir de agora volto a blogar sobre tecnologia (muito de Node.JS é claro) e também aproveito para anunciar que teremos a terceira turma do nosso curso de Node com a e-Genial ainda nesse primeiro semestre. Anunciarei as datas em breve.

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

[Emerson Macedo] Curso de Node.JS – Segunda turma na e-Genial

Tuesday, October 11th, 2011

No fim deste mês, dia 25/10/2011, começará a segunda turma do curso de Node.JS na e-Genial. Nós tivemos o primeiro curso em abril e foi um grande sucesso.

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.

Evolução do Curso

A primeira turma teve uma grande vantagem de ter saído na frente, pois começaram 6 meses atrás. É muito bom sair na frente, pois quando o mercado estiver bem aquecido você já terá conhecimento e experiência so invés de estar iniciando. Muita gente pensou nisso e resolveu fazer o curso, mesmo sabendo que a primeira turma de um curso tem sempre um conteúdo experimental e que será melhorado.

Para a segunda turma, a vantagem é o conteúdo já está mais maduro e nós aprendemos bastante com a primeira turma, o que certamente levará o nosso curso para um outro nível, ainda melhor que o primeiro. A grade também foi totalmente atualizada, trazendo as melhores novidades da tecnologia.

Entendendo melhor e inscrevendo-se

Para entender melhor sobre o curso e a minha experiência no assunto, leia a leitura do post de anúncio da primeira turma.

Além do post, participei do torneio Node.JS Knockout deste ano e meu time venceu na categoria popularidade com a aplicação http://driv.in

Anúncio da primeira turma: http://codificando.com/2011/04/curso-de-nodejs-da-egenial/

Está esperando o que? Matricule-se já no curso, pois começa no próximo dia 25.

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

[Emerson Macedo] Node.JS Knockout – Como foi

Monday, September 5th, 2011

Hoje faz uma semana que participei do Node.JS Knockout, um torneio estilo Rails Rumble, onde os participantes tem 48 horas para desenvolver uma aplicação do zero, sem direito a fazer nada antes nem nada depois. É tudo muito rígido e eles tem diversas técnicas para verificar quem está trapaceando.

Vou tentar resumir como foi essa experiência, pois caso contrário ficaria muito longo, mas antes disso, estamos bem qualificados na categoria popularidade e o voto da galera ajuda muito. Portanto, se puder dar uma ajuda e votar no nosso projeto, basta entrar em http://driv.in, clicar no ícone VOTE KO e autorizar no facebook.

Equipe

Essa foi uma parte bem complicada. Formamos o time mais de 1 mês antes, mas por motivos pessoais 2 amigos não puderam participar e foi necessário chamar 2 novos para participar. A formação final pode ser conferida na página do time no site do evento – http://goo.gl/BdSyI.

O fato de mudar 2 pessoas foi algo um pouco complicado, pois apesar dos 2 novos terem feito um trabalho excepcional, houve um momento no sábado a tarde de alinhar coisas do projeto que já estavam bem definidas e teoricamente não seria necessário, caso esse imprevisto não tivesse acontecido. Mesmo diante dessas circunstâncias, acho que nos saímos muito bem, apesar de achar que perdemos tempo em alguns momentos e nesse caso qualquer tempo perdido compromete bastante.

Idéia de Projeto

Nossas idéias de projeto estavam bem confusas, até que o Quixadá surgiu com a idéia dos vídeos colaborativos e foi aceita por unanimidade. Isso também deu uma injeção de ânimos na galera, pois foi a primeira idéia que gerou empolgação em nós. Todas as outras eram legais, mas nada que nos fizesse achar que chegaríamos em algum lugar. No fim, a idéia se provou excelente e vamos inclusive continuar com o projeto após o término do torneio.

Desenvolvimento

Essa parte é um pouco longa de contar. Mas vamos nessa:

Eu era o único membro do time com conhecimentos de Node.JS. Isso me deixava bem preocupado com o resultado. Mesmo sem conhecimento, o Quixadá validou um cenário básico do nosso projeto e já apresentou, antes mesmo do início. Isso foi bom para ter certeza que a idéia fazia sentido e era possível implementar. Ponto pra ele que teve iniciativa de fazer isso logo de cara, para evitar outras surpresas.

O Everton Carpes é muito envolvido com o Debian e aliviou muito o meu lado fazendo toda a configuração do nosso servidor no Linode (nossas opções eram Joyent, Heroku, Nodejitsu e Linode). Inicialmente eu achei que eu mesmo iria ter que fazer tudo, mas o Everton teve uma participação brilhante configurando todo o servidor. Pouco precisei ajuda-lo, mais especificamente nas configurações de Node e outros pequenos detalhes.

Enquanto o Everton resolvia os detalhes do servidor, eu estava focado em implementar o vídeo iniciando automaticamente ao mesmo tempo em todos os participantes de uma sala. Enquanto isso, o Cainã e o Quixadá trabalhavam na parte visual do projeto (i.e. Design, HTML/CSS).

E essa foi a nossa noite de sexta. Alguns ficaram durante a madrugada, outros foram para casa descansar.

No sábado, trabalhamos bastante para fazer funcionar os vídeos tocando em sequência e a funcionalidade do usuário poder entrar no meio do vídeo e estar sincronizado com todos. Além disso, a playlist de vídeos também foi implementada. Enquanto essas features eram desenvolvidas,  nossa interface também era construída com primor pelo Cainã em conjunto com o Quixadá. Esse foi nosso sábado.

No domingo, apesar das partes principais em termos de features estarem prontas, ainda era necessário alguns ajustes na playlist, desenvolver o chat, controlar os carrinhos aparecendo e sumindo (membros da sala) e uma série de pequenas coisas, que somadas ocupariam todo o nosso domingo, o que de fato aconteceu. Assim que deu 21:00, tivemos que parar tudo, mas conseguimos implementar as principais features do sistema, apesar de alguns bugs.

Iterações/Corte de escopo

Por ser um torneio rápido (48 horas), foi necessário cortar escopo a todo momento, fazendo pequenas interrupções (de alguns minutos) para alinhar expectativas sobre o que já sabíamos que não daria tempo de ser feito. Isso foi um exercício bem interessante, pois muitos projetos ao invés de cortar escopo, adicionam mais pessoas e trabalham de forma sobrecarregada pra ver se é possível entregar tudo (o que eu acho uma grande furada). Como o torneio não permite mais do que 4 participantes e o prazo é fixo, cortar escopo era a nossa única alternativa. É interessante que tudo que cortamos do escopo será desenvolvido, só apenas não foi na primeira versão. O que fizemos foi um exercício de priorizar coisas. Todas as features que levantamos eram importantes, mas precisávamos ter bem claro quais eram prioritárias para a entrega do nosso primeiro release (o do torneio). Essa é a parte difícil pra muita gente, principalmente para que tem responsabilidade sobre o produto (i.e. Product Owners). Por vezes já passei por situações onde era necessário priorização mas quem era responsável pelo produto colocava tudo como prioridade. Quando tudo é prioridade, nada é prioridade. Você coloca tudo no mesmo nível de importância e não sabe o que é Core Feature do seu produto. Acho que isso poderia até fazer parte de algum teste para P.O, se é que posso dizer assim.

Problemas

No geral fomos bem. Sabíamos que as dificuldades viriam e não seria simples vence-las e desenvolver uma aplicação em 48 horas. A primeira das dificuldades foram os horários desencontrados. Alguns trabalharam até tarde na sexta, outros no sábado. Por conta disso houveram horários em que nem todos estavam juntos e dúvidas demoravam a ser respondidas/solucionadas. Da próxima vez acho que combinar um horário pode ser mais interessante.

Outro ponto foram os bugs. Como o chat foi implementado já no apagar das luzes, esquecemos de escapar o input do usuário, permitindo XSS (Cross-Site Scripting) no nosso aplicativo. Isso foi uma falha grave, que está nos custando preciosos pontos na avaliação dos juízes. Outro bug foi do usuário entrar no meio do vídeo. A estratégia para o usuário que entra no meio do vídeo é adianta-lo 10 segundos (ssekTo) e pausa-lo, para que o mesmo gere um pouco de buffer. Quando todos os demais chegam nesse momento de 10 segundos pra frente, é hora de dar play nesse usuário. Por conta disso, em alguns momentos que faltavam menos de 10 segundos para terminar o vídeo, acontecia um bug e dava crash no servidor. Nós usamos o monit para garantir que sempre o processo dava start novamente, sendo assim não existia downtime da aplicação. Ao tentar resolver esse bug (ainda tinhamos tempo), geramos outro e a partir daí, ninguém mais conseguia entrar no meio do vídeo. #epicfail. No momento que percebemos isso, já havia estourado o tempo e nada podíamos fazer. Chegamos a editar o arquivo direto em produção apenas para validar o bug (que era ridículo de resolver) e em seguida voltamos o código, pois a regra não permitia alterações após o término do horário.

Resultado do projeto

Nós ficamos muito satisfeitos com o projeto. Tanto é que pretendemos continuar com ele. Já clonamos o projeto numa conta nossa privada do github e estamos adicionando issues para assim que a votação encerrar e estivermos liberados para fazer mudanças.

Balanço final

Contar como foi o Node Knockout de maneira resumida é bem complicado. Posteriormente entrarei em detalhes técnicos do projeto, que agora tornariam esse post muito longo. O que posso dizer sobre esse torneio é que valeu muito a pena em todos os aspectos. Tanto na parte técnica, quanto na parte de produto, mas principalmente na parte de auto-organização e gestão de prioridades e tempo. Certamente repetirei em outras oportunidades.

Um agradecimento especial para os membros do meu time: Cainã Nunes, Everton Carpes e Leonardo Quixadá. Todos foram fantásticos.

PS: Não se esqueçam de votar no nosso projeto. Encerra as 21:00 do Brasil, hoje, dia 05/09/2011. Segue o link novamente – http://driv.in, clicar no ícone VOTE KO e autorizar no facebook.

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

[Emerson Macedo] Linkedin refaz seu mobile stack com Node.JS

Tuesday, August 16th, 2011

Hoje pela manhã, o likedin lançou a nova versão mobile do software. O líder de desenvolvimento mobile Kiran Prasad, deu uma entrevista sobre o assunto.

Um dos grandes destaques técnicos foi a escolha de todas as partes que não necessitam de funções nativas dos aparelhos serem feitas usando HTML5.

O ponto de destaque desse meu post é que todo o stack mobile foi refeito em Node.JS (o antigo era feito em Rails). Eles sairam de 15 servidores com 15 instâncias para apenas 4 instâncias, conseguindo servir o dobro  do tráfego.

Isso é mais um case de sucesso no uso de Node.JS, fazendo com que a plataforma seja promissora para os próximos anos.

Disclaimer: Um ponto importante para tomar cuidado é não determinar que Node.JS é melhor que Ruby on Rails ou coisa do tipo. Faz pouco tempo que o twitter trocou Rails por Java em partes do seu sistema, mas a maior mudança na verdade foi arquitetural, como o próprio artigo mostra. Portanto, não devemos tomar conclusões precipitadas, até porque existem diversos casos de aplicações com grande volume de acesso que utilizam essa tecnologia muito bem.

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

[Emerson Macedo] Node.JS Knockout 2011

Thursday, July 14th, 2011

Foi anunciado nessa madrugada a abertura para registro dos times para o Node.JS Knockout 2011. Já é a segunda edição, já que em 2010 aconteceu a primeira. Pra quem não sabe, o esse evento é uma espécie de competição/maratona, onde as equipes tem 48 horas para desenvolver uma aplicação do zero que depois será julgada e rankeada. Os melhores recebem premiações. Esse evento é semelhante ao famoso Rails Rumble, que já acontece desde 2008.

Apesar da premiação, esse tipo de evento motiva mais pelo fato de criar uma aplicação em 48 horas, com total ownership do que está sendo feito. Outro ponto importante desse tipo de competição é que os membros do time precisam ser muito pragmáticos. Firulas desnecessárias de interface, como arredondar bordas em browsers que não dão suporte a isso (i.e Internet Explorer) não tem vez nesse tipo de projeto. Aprender a cortar escopo e gerênciar tempo são outros desafios que importantes.

Até o dia 20/08 estão abertas as inscrições e a competição acontece entre os dias 27 e 29, também de agosto.

Aproveite e veja se percebe alguma coisa legal na página do evento. Existe uma forma de interagir bem legal :)

Até lá !!!

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

[Emerson Macedo] FISL12 – Slides da apresentação sobre Javascript

Wednesday, July 6th, 2011

No último sabado, estive no FISL12, fazendo uma apresentação sobre Javascript. O objetivo da minha apresentação foi ajudar a despertar na comunidade brasileira uma cultura de escrever um código Javascript melhor. Muitos desenvolvedores não tem idéia que Javascript é uma linguagem Orientada a Objetos além de Funcional. Nessa apresentação eu falo da parte O.O, fundamentando os conceitos e mostrando exemplos. Seguem os slides:

Javascript Orientado a Objetos – Fisl12

View more presentations from Emerson Macedo

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

[Emerson Macedo] Como foi o primeiro encontro Node.JS Brasil

Friday, June 10th, 2011

Na última quarta-feira, dia 08/06/2011, aconteceu o primeiro encontro do grupo Node.JS Brasil na Caelum do centro do Rio de Janeiro. Depois de algumas vezes marcando e adiando, dessa vez fizemos o encontro e foi bem legal.

Antes de qualquer coisa, quero agradecer a todos da Caelum por terem disponibilizado o espaço e o coffee break para nosso encontro. Como sempre eles investem nas comunidades de desenvolvimento e em novas tecnologias. Meu sincero obrigado …

Voltando ao encontro, fiz 2 apresentações, uma que falava sobre o ecossistema atual do Node.JS (que cresceu rápido demais) e a outra sobre aplicações Realtime, a mesma apresentação que fiz no BrasilJS.

Sobre o ecossistema, apresentei alguns números importantes sobre como anda o crescimento do Node.JS no cenário mundial, falei sobre as principais ferramentas, fontes de estudo, frameworks, opções de hospedagem e mais alguns detalhes. Prometi para o pessoal os links de todas as referências que mostrei e esses links estão no final do post.

Talvez o mais legal disso tudo foi conhecer gente nova e bater papo com o pessoal. Conversamos sobre casos de uso para o Node.JS, perspectiva de mercado aqui no Brasil e outras coisas mais.

A idéia é que aconteçam encontros 1 vez por mês e comece a comparecer mais desenvolvedores. Segue abaixo os slides e os links prometidos:

1 encontro Node.JS Brasil

View more presentations from Emerson Macedo

BrazilJS – Node.JS Realtime Web Applications

View more presentations from Emerson Macedo

Estatísticas e referências:

https://github.com/languages
http://www.google.com/trends?q=nodejs
http://groups.google.com/group/nodejs
http://groups.google.com/group/nodebr

Realtime:

http://socket.io/
http://nowjs.com/
http://faye.jcoglan.com/

Database:

http://mongoosejs.com/
http://www.sequelizevjs.com/
http://cloudhead.io/cradle
https://github.com/mranney/node_redis

Web:

http://senchalabs.github.com/connect/
http://expressjs.com/

Template:

http://jade-lang.com/
http://embeddedjs.com/
https://github.com/visionmedia/ejs
https://github.com/visionmedia/haml.js
https://github.com/visionmedia/sass.js

Testing:

https://github.com/caolan/nodeunit
http://vowsjs.org/
http://zombie.labnotes.org/
http://sodajs.com/

Deployment/Hospedagem:

http://no.de
http://nodester.com
http://www.nodejitsu.com/
https://www.duostack.com/
http://devcenter.heroku.com/articles/node-js
http://guides.webbynode.com/articles/rapidapps/nodejs.html
http://learnboost.github.com/cluster/

Learning:

http://nodebeginner.org/
http://nodeguide.com/
http://howtonode.org/
http://visionmedia.github.com/masteringnode/
http://nodecasts.org/
http://egenial.com.br/nodejs
http://www.slideshare.net/emerleite

Acho que com esse material o pessoal vai poder dar um bom start nos seus estudos de Node.JS e nos próximos encontros podemos falar sobre coisas mais específicas.

Que venham os próximos !!!

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

[Emerson Macedo] Heroku agora com suporte oficial a Node.JS

Wednesday, June 1st, 2011

Ontem o pessoal do heroku postou no blog sobre o suporte oficial ao Node.JS que começou nas suas opções hospedagem, que em princípio segue o mesmo modelo da hospedagem Ruby/Rails, ou seja, você não paga nada enquanto não precisar de mais recursos.

Essa nova opção de hospedagem está na nova stack Celadon Cedar, que tem suporte a Ruby MRI 1.9.2, Node.JS 0.4.7 (no momento a versão mais nova é 0.4.8) e é baseada no Ubuntu 10.04 (as antigas eram baseadas no Debian). Essa nova stack ainda é beta, assim como a Bamboo foi tempos atrás, mas certamente se tornará stack oficial em breve.

Em abril do ano passado (2010), o Heroku havia lançado um suporte experimental para seus usuários. Esse suporte foi posteriormente desativado nos meados de setembro. Apesar das explicações, eu sinceramente pensei que eles haviam abandonado o projeto, pois pouco se falou e ótimas opções surgiram, como DuoStack, Joyent Node Machines, Nodester, entre outras.

Uma fato interessante é que em pouco tempo surgiram muitas opções de hospedagens para Node.JS. Isso mostra a força da tecnologia no cenário de desenvolvimento mundial.

Para mais informações sobre hospedagem de Node.JS, recomento a leitura das publicações que fiz aqui mesmo no blog e também nessa thread da lista Node.JS Brasil.

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

[Emerson Macedo] Conhecendo o NPM 1.0

Wednesday, May 25th, 2011

No dia primeiro deste mês, foi lançado a versão 1.0 do NPM (Node Package Manager). Pra quem não sabe, o NPM é o gerenciador de pacotes oficial do Node.JS. É com ele que criamos e baixamos bibliotecas para desenvolver nossas aplicações em Node.JS.

Não vou explicar aqui como funcionava até a versão 0.3.18 (a última antes das pré 1.0) para não ficar um artigo grande (já vai ficar), mas a explicação sobre o funcionamento da versão 1.0 deve ser suficiente para você conseguir migrar.

Instalando

Existem algumas instruções de instalação, mas basicamente a melhor forma é instalar limpando as coisas velhas. Digo isso porque agora que chegou na 1.0 e quase todas as libs já atualizaram para essa versão e novo modelo, não faz sentido manter libs, a não ser que você tenha alguma lib muito específica. Execute o seguinte:

$ curl http://npmjs.org/install.sh | clean=yes sh

Certifique que você tem permissão para escrever no diretório /usr/local.

Isso vai instalar o NPM 1.0.6 (versão do momento que escrevo o artigo) e limpar suas libs antigas). Se preferir, desinstale antes seu NPM antigo (npm uninstall npm) e apague o diretório ~/.npm. Novidades da instalação:

/usr/local/bin/npm #executável
/usr/local/lib/node_modules/ #pacotes globais

Desde a versão 0.4.x do Node.JS, o diretório node_modules passa a ser o diretório de armazenamento de pacotes, sempre contextualmente ao diretório do projeto que você está trabalhando. Tanto isso é verdade que as bibliotecas instaladas em /usr/local/lib/node_modules/ não ficam automaticamente visíveis para você dar require nelas. Falarei mais sobre isso adiante.

Sendo assim, a nova forma de trabalhar com o NPM é a seguinte:

  • Pacotes que contém executáveis (nodeunit, express, etc) instale com npm install pacote -g
  • Pacotes sem executáveis instale com npm install pacote

Qual a diferença?

A diferença é que a instalação utilizando -g deve ser utilizada primariamente para pacotes que contém executáveis, pois os executáveis já ficam visíveis no path. Outro uso é quando você quer compartilhar algum pacote com diversos projetos. Isso é feito criando um link, que falaei adiante. A instalação local limita o pacote ao escopo do projeto/diretório que foi instalado, ou seja, somente dentro desse diretório e seus subdiretórios esse pacote estará disponível para require.

Para listar os pacotes instalados localmente, basta executar o seguinte comando:

$ npm list
database-cleaner@0.3.2 /Users/emerson.leite/Pet/node-database-cleaner
├─┬ cradle@0.5.5
│ ├── vargs@0.1.0
│ └─┬ vows@0.5.8
│   └── eyes@0.1.6
├── mongoose@1.0.10
├── nodeunit@0.5.1
└── redis@0.6.0

Esse comando lista apenas os pacotes instalados no diretório node_modules dentro do diretório que aparece logo abaixo do comando npm list (ou npm ls)

Para listar os pacotes globais basta executar:

$ npm ls -g
/usr/local/lib
├─┬ connect@1.4.1
│ ├── mime@1.2.2
│ └── qs@0.1.0
├── nodeunit@0.5.1
└─┬ npm@1.0.6
  ├── abbrev@1.0.3
  ├── node-uuid@1.1.0
  ├── nopt@1.0.4
  └── semver@1.0.5

Repare que a lista é bem diferente. Nenhum desses pacotes podem ser utilizados sem que sejam linkados. Vamos fazer isso agora para que eles fiquem disponíveis localmente.

$ npm link connect
./node_modules/connect -> /usr/local/lib/node_modules/connect

E agora veremos novamente nossos pacotes locais:

$ npm ls
database-cleaner@0.3.2 /Users/emerson.leite/Pet/node-database-cleaner
├─┬ connect@1.4.1 -> /usr/local/lib/node_modules/connect extraneous
│ ├── mime@1.2.2
│ └── qs@0.1.0
├─┬ cradle@0.5.5
│ ├── vargs@0.1.0
│ └─┬ vows@0.5.8
│   └── eyes@0.1.6
├── mongoose@1.0.10
├── nodeunit@0.5.1
└── redis@0.6.0

Repare que o pacote connect aponta para um diretório na instalação global. Com esse link, é possível utilizar o pacote no projeto/diretório atual.

Alguns desenvolvedores utilizam a variável de ambiente NODE_PATH apontando para /usr/local/lib/node_modules/ porque seus projetos não estão enxergando os pacotes globais. De fato isso funciona, mas não é a maneira adequada, pois se você instalar um pacote local e outro global utilizando essa configuração, o pacote global vai prevalecer sobre o local, o que não deveria ser o comportamento esperado.

É importante entender que o escopo local é definido tão somente pelo diretório que você está. Se você voltar um diretório e listar novamente os pacotes perceberá que não tem nada instalado ou a lista de pacotes instalados é diferente (no caso de você ter instalado algo nesse diretório). Vejamos:

$ cd ..
$ npm ls
/Users/emerson.leite/Pet
(empty)

Voltemos para o diretório anterior e vamos remover o link ao pacote connect.

$ cd -
/Users/emerson.leite/Pet/node-database-cleaner
$ npm unlink connect
$ npm ls
database-cleaner@0.3.2 /Users/emerson.leite/Pet/node-database-cleaner
├─┬ cradle@0.5.5
│ ├── vargs@0.1.0
│ └─┬ vows@0.5.8
│   └── eyes@0.1.6
├── mongoose@1.0.10
├── nodeunit@0.5.1
└── redis@0.6.0

Nesse momento não temos mais o link para o pacote connect e portanto não podemos mais fazer um require dele.

Utilizando o package.json para gerenciar suas dependências

O arquivo package.json é um arquivo que descreve um pacote NPM. Nesse arquivo também pode/deve ser utilizado para especificar os pacotes que seu projeto depende. Dessa forma, basta estar no diretório e executar npm install que o NPM já instalará as dependências necessárias. Vejamos um exemplo:

{
  "name" : "database-cleaner",
  "description" : "Database Cleaner for node.js",
  "keywords" : [ "database", "cleaner", "mongodb",
                 "redis", "couchdb", "tests", "package.json" ],
  "version" : "0.3.2",
  "author" : "Emerson Macedo ",
  "repository" : {
    "type" : "git",
    "url" : "git://github.com/emerleite/node-database-cleaner.git"
  },
  "dependencies" : {
    "mongoose" : "1.0.10",
    "redis" : ">=0.5.7",
    "cradle" : ">=0.5.x"
  },
  "main": "index",
  "engines" : { "node" : ">=0.2.5" }
}

Vamos limpar o diretório e instalar novamente as dependências para ver como funciona. Primeiro vou apagar o diretório node_modules, listar para mostrar que está vazio e instalar as dependências.

$ rm -fr node_modules/
$ npm ls
npm WARN cradle >=0.5.x Unmet dependency in /Users/emerson.leite/Pet/node-database-cleaner
npm WARN mongoose 1.0.10 Unmet dependency in /Users/emerson.leite/Pet/node-database-cleaner
npm WARN redis >=0.5.7 Unmet dependency in /Users/emerson.leite/Pet/node-database-cleaner
database-cleaner@0.3.2 /Users/emerson.leite/Pet/node-database-cleaner
├── UNMET DEPENDENCY cradle >=0.5.x
├── UNMET DEPENDENCY mongoose 1.0.10
└── UNMET DEPENDENCY redis >=0.5.7

A resposta mostra que as dependências não estão instaladas, o que vamos resolver agora:

$ npm install
redis@0.6.0 ./node_modules/redis
mongoose@1.0.10 ./node_modules/mongoose
vargs@0.1.0 ./node_modules/cradle/node_modules/vargs
eyes@0.1.6 ./node_modules/cradle/node_modules/vows/node_modules/eyes
vows@0.5.8 ./node_modules/cradle/node_modules/vows
cradle@0.5.5 ./node_modules/cradle

Agora vamos listar apenas para conferir.

$ npm ls
database-cleaner@0.3.2 /Users/emerson.leite/Pet/node-database-cleaner
├─┬ cradle@0.5.5
│ ├── vargs@0.1.0
│ └─┬ vows@0.5.8
│   └── eyes@0.1.6
├── mongoose@1.0.10
└── redis@0.6.0

Pra fechar

O NPM tem uma série de outros recursos que vou tentar destacar em outros artigos, mas vejo que muita gente não estava entendendo bem a forma mais adequada de usar a versão 1.0, inclusive apelando para o uso inadequado da variável de ambiente NODE_PATH. Espero que este artigo possa ajudar a explicar um pouco do NPM 1.0.

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

[Emerson Macedo] BrazilJS – Como foi

Monday, May 16th, 2011

Na última sexta e sábado, 13 e 14 de maio, aconteceu o primeiro BrazilJS, conferência Brasileira relacionada a Javascript. Os organizadores foram: Cristiano Milfont, Felipe Nascimento, Francisco Barroso, Henrique Soares e Jaydson Gomes.

Só pude comparecer no sábado, infelizmente. Mas mesmo indo apenas um dia, fiquei impressionado com a empolgação do pessoal e como a comunidade Javascript Brasileira curtiu o evento. As palestras foram de alto nível. Teve palestra de Javascript no iOS, Android, desenvolvimento de Jogos, Node.JS, testes, qualidade de código, programação funcional e outras coisas mais.

Em breve a organização do evento deve disponibilizar os vídeos e um lugar com link para todos os slides publicados. Acompanhe na hashtag #braziljs no twitter.

Sinceramente o evento superou todas as minhas expectativas. Pra quem não viu ainda, segue os slides e o código da minha apresentação sobre aplicações Realtime com Node.JS.

BrazilJS – Node.JS Realtime Web Applications

Código: http://goo.gl/DKmiN

No fim da minha palestra fiz o sorteio de uma bolsa para a próxima turma do nosso curso de Node.JS da e-Genial. O ganhador foi o Jonathas Jivago

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