Todos os posts de felipe

Avatar

Sobre felipe

Experiência na área de tecnologia da informação atuando em empresas de São Paulo e tendo como especialidade a área de desenvolvimento Full Stack Web Developer e administração de servidores linux. Ampla experiencia em banco de dados relacionais entre eles Oracle, Mysql , Sql Server e Postgre. Analista de Sistemas, Programador PHP, Java, Node e outras linguagens, Analista de Configuracao de Ambiente, Analista Linux, Analista de Bancos de Dados Mysql, Oracle, SQL Server e Postgree.

Scrum Agile

Como funciona o Scrum?

Se você está pensando em iniciar uma viagem para o mundo ágil e decidiu escolher o Scrum como companheiro, esse post lhe será bastante útil. O Scrum é um framework para gerenciamento de projetos complexos, sendo um dos métodos ágeis mais populares do mundo. Muitas empresas estão abandonando modelos tradicionais e migrando para o modelo de trabalho proposto pelo Scrum, o que tem possibilitado entregas em menor tempo e com mais valor agregado para o cliente. Porém, muitas pessoas sentem uma dúvida comum ao tentar aplicar o Scrum, a de como ele funciona exatamente, quais seus eventos, artefatos e papéis. Nesse post eu explico como o framework Scrum funciona e quais os pontos mais importantes, trazendo uma visão geral do método.

O Scrum em ação

Scrum busca entregar resultados de maneira mais rápida e com menor custo, focando em fornecer produtos e serviços que se alinhem as necessidades do cliente. Ao implementar o Scrum em sua organização, é importante que todas as partes envolvidas se concentrem com a ideia de o “cliente em primeiro lugar”. Estando com essa visão bem estabelecida, será possível entregar produtos que realmente impactem os negócios do cliente.

Implementar o Scrum não precisa ser uma coisa assustadora. Claro, o Scrum é sim diferente das abordagens tradicionais para gerenciamento de projetos, mas essa diferença é a principal razão pela qual ele funciona. Como em qualquer tipo de adoção você irá passar por pontos altos e desafiadores, mas os resultados poderão ser bem gratificantes. O Scrum fornece resultados para melhorar suas taxas de sucesso e, ao mesmo tempo, consegue construir equipes mais engajados e com níveis mais altos de satisfação.

É isso, espero que tenha gostado da aula e do Scrum… 😉

PORQUE O LARAVEL É O MELHOR FRAMEWORK PHP

Um framework é uma estrutura, ou plataforma, em que você pode escolher e desenvolver um software.

Isso vai decidir a estrutura do seu aplicativa, e ajudar a conectá-lo com vários APIs.

O Laravel é um framework PHP que permite que os desenvolvedores avancem no processo de desenvolvimento sem aumentar o overhead dos projetos.

Ao contrário de outros frameworks, o Laravel garante grande performance e escalabilidade, o que faz com que ele seja o preferido para o desenvolvimento de inúmeros projetos.

Porque escolher o Laravel entre os outros Frameworks PHP

Para começar a falar sobre a escolha do laravel, vamos compará-lo aos outros frameworks PHP. Vamos falar sobre as principais categorias que devem ser levadas em consideração pelos desenvolvedores.

#1 – Ferramentas e compatibilidade

Começando pela fase das ferramentas e compatibilidade, separamos os frameworks em três categorias: Vanguarda, Consagrados e Revelações. Vamos falar mais sobre eles e suas principais qualidades e defeitos

Vanguarda

O grupo de Vanguarda contém aqueles frameworks com uma base de código mais madura, que são utilizados para o desenvolvimento há vários anos. Qualquer um destes frameworks funciona de forma excelente, mas não têm suporte as ferramentas de linguagem mais recentes.

CodeIgniter – Este framework é uma plataforma estável, e é compatível com as versões mais antigas de PHP. Ele possui um grande número de adeptos e é popular entre a comunidade de desenvolvimento PHP.

CakePHP – Parte de um projeto que commeçou em 2008, ele continua sendo desenvolvido, mas deve uma queda de popularidade devido as novas opções disponíveis na comunidade de desenvolvimento.

Consagrados

As opções consagradas são aquelas que possuem grande uso, uma comunidade de desenvolvimento ativa, base de códigos testada e são frequentemente escolhidos para novos sites. Eles podem estar começando a diminuir a compatibilidade com novas linguagens, sendo mais relacionados a versões mais antigas de PHP, que outros frameworks decidiram abandonar.

Zend Framework – O Zend faz quase tudo, e mostra serviço. Muitas lojas e projetos comerciais são construídos por ele, já que ele é atualizado constantemente, além de testado. Apesar do tamanho, e o processamento e memória necessários, este framework possui poucos ponto fracos.

Kohana – Inspirado no CodeIngiter, este framework se mantém atual ao adicionar novas ferramentas, mas acaba com um problema comum de alguns softwares: a documentação. É como se ela praticamente não existisse.

Yii – Este framework é pouco utilizado, mas é uma boa escolha, e além de tudo é pequeno e serve para completar completar tarefas comuns. Este framework também se aproveita de sua compatibilidade com o PHP 5.3+.

Symfony – Este framework tem um número extenso de referências de terceiros a seu dispor, como o PHPUnit (usado para testes), SwiftMailer (e-mail), e Twig (templates). Eles possuem um desenvolvimento de qualidade, e tudo é facilmente configurável.

Revelações

As revelações foram adotados no desenvolvimento de grandes projetos há poucos anos, tem novas ferramentas PHP, e um desenvolvimento inteligente.

FuelPHP – A equipe de que construiu este framework adotou um grande números de ideias vindas do CodeIngniter, assim como muitas inspirações de outros frameworks. Como resultado ele se apresenta como um  produto mais leve e modular. Ele possui uma boa documentação, e um grande número dos desenvolvedores que utilizavam o CodeIgniter migraram para este framework.

Laravel – Este framework já existe há algum tempo, mas parece que só se estabeleceu em sua terceira versão, e sempre é remodelado em versões subsequentes. Além de ser, inicialmente, inspirado pelo CodeIgniter e alguns outros frameworks, ele tomou um novo caminho em sua jornada de desenvolvimento.

#2 – Revisão do Código

Além da ferramentas disponíveis, é preciso levar em consideração um grande número de funções dos frameworks disponíveis. Entre elas, na construção do código, itens como a legibilidade, complexidade e estrutura devem ser avaliados, assim como a organização da estrutura de um projeto.

É fácil encontrar um tema dentro da estrutura de pastas, apesar de alguns frameworks utilizam uma terminologia própria. A ideia geral de “Application/App” e “System/<nome do framework>/etc” é comum na maioria dos frameworks.

#3 – Diminuindo a competição

Para a avaliação mais avançada, vamos seguir com os mais utilizados: CodeIgniter, FuelPHP e Laravel. Mesmo que existam muitos fatores a serem levados em consideração, vamos falar apenas do principais:

Estrutura de Pastas

A estrutura comum de pastas, citada anteriormente, diz respeito a esta etapa. Todos os frameworks selecionados para a avaliação separam o código de forma lógica, a fim de ajudar no desenvolvimento de um projeto mais extenso.

Suporte a Bundles e Módulos

Modularidade e a compatibilidade com conteúdo externo é importante. Enquanto um framework leve tem suas vantagens, ele também deve se integrar a outros códigos de forma simples. Nenhum site importante existe em um mundo que não entra em contato com outras formas de desenvolvimento. Um projeto pode precisar se conectar a serviços e APIs relacionadas ao MailChimp, SendGrid, Vimeo, Facebook, Amazon, etc.

Tamanho da base de código

Enquanto podemos ter certeza que um framework robusto contém muitas ferramentas, eles podem gerar ciclos de processamento e memória dentro de sua hospedagem. É claro que esta etapa deve ser avaliada de acordo com as ferramentas necessárias e os requisitos de cada projeto, mas existem formas simples de entender os resultados. Nesta etapa, um framework como o Zend não performa de um jeito favorável.

#4 – Projetos Modelo

Os frameworks PHP tem se desenvolvido de forma interessante nos últimos anos. A criação de projetos modelo no FuelPHP, Laravel e CodeIgniter são incríveis. Por serem parecidos, é impossível eliminar algum das escolhas com facilidade, apesar que a disponibilidade de módulos (“bundles”) é melhor no Laravel.

#5 – Hora de Escolher

No fim, a escolha fica entre FuelPHP e Laravel. Como o CodeIgniter é um produto mais antigo, não é possível ter certa que ele irá evoluir de forma correta, a medida que novos projetos forem surgindo. Mesmo que não seja uma preocupação atual, pode vir a se tornar um problema futuro.

Quando é levado em consideração a comunidade de desenvolvimento de cada framework, alguma diferenças aparecem. O Laravel é, claramente, o vencedor. Enquanto eles já falam de PSR-2, e estão abraçado o sistema Composer, com componentes de terceiros. o FuelPHP fica pra trás. No fim, a equipe responsável pelo Laravel é mais robusta e se atualiza de forma mais rápida, tanto para se adaptar quanto para inovar.

Tanto o FuelPHP quanto o Laravel tem bons níveis de desenvolvimentos, e os projetos modelo desenvolvidos em ambos os frameworks são grande exemplos do que o PHP pode ser: algo que serve de suporte, que acelera e padroniza o desenvolvimento, enquanto não atrapalha.

Com tudo levado em consideração, consideramos o Laravel o melhor framework, por causa dessas 5 primeiras comparações. Agora, vamos falar sobre 5 outras razões pelas quais o Laravel é um framework popular.

5 Motivos pelos quais o Laravel é um framework popular

O Laravel é um framework PHP avançado, que incorpora um ecossistema amplo com hospedagem instantânea e desenvolvimento. Abaixo, vamos falar sobre 5 ferramentas que se destacam neste framework:

1. Autenticação e Lógica de Aplicação

Uma das partes cruciais do desenvolvimento de qualquer aplicativo web é a autenticação, e os desenvolvedores costumar gastar muito tempo gerando estes códigos. O Laravel facilita este processo por organiza a lógica de autorização, enquanto organiza também o acesso aos recursos disponíveis. Além disso, um dos últimos redesigns do Laravel oferece um código de validação pré-construído, e que vai diminuir exponencialmente o tempo necessário para compor estes grandes códigos.

Por outro lado, a lógica de aplicação pode ser executada em qualquer aplicativo, através de controles ou diretamente, utilizando a sintaxe. Em resumo, o Laravel oferece flexibilidade para os desenvolvedores, assegurando um ecossistema adaptável, perfeito para a construção de aplicativos empresariais ou pequenos sites.

2. Blade

O Blade representa um modelo simples, porém dinâmico, de mecanismo de template, construído junto ao Laravel, para utilizaão de PHP puro. Os outros frameworks restringem que seus usuários utilizem códigos desta forma. Já o Laravel dá suporte a esta ferramenta.

3. Artisan

O Artisan é uma interface disponibilizada pelo Laravel. Ela oferece vários comando prontos, para ajudar com o avanço do desenvolvimento de seu projeto. Tipicamente, os desenvolvedores interagem com o framework utilizando linhas de comando manuais. Através do Artisan, ele podem criar várias tarefas tediosas da programação com facilidade e precisão.

4. Laracasts

O Laracast é um tutorial de aprendizado de grande qualidade, que incorpora vídeos grátis e pagos, que foram criado especificamente para ajudar os usuários a se acostumarem com os principais conceitos do Laravel. Os vídeos são criado por Jeffrey Way, e são claros e concisos, além de satisfazer o principal propósito.

5. Melhor documentação e suporte a MVC

Todos os desenvolvedores que utilizam o Laravel podem confirmar a existência de uma documentação detalhada. Ele utiliza o Flysystem apra conseguir isso, e todas as opções de documentação podem ser organizadas em um framework remoto.

Quanto ao MVC, o Laravel utiliza o padrão model-view-controller. Ela entrega várias funções já incorporadas, e faz com que seja ainda mais fácil desenvolver seus projetos.

6. Segurança

O Laravel garante uma segurança extrema aos seus usuários, já que nunca salva suas senhas, no formato de texto, em sua base de dados, utilizando um algoritmo para a criação de uma senha criptografada. Além disso, a homologação do SQL garante uma segurança ainda mais avançada.

7. Migração de banco de dados

Manter o banco de dados em sincronia com as ferramentas de desenvolvimento pode ser uma tarefa cansativa, mas com as migrações de banco de dados do Laravel, isso pode ser feito sem muito esforço.

Concluindo

O desenvolvimento através do Laravel posiciona este framework entre os melhores da atualidade, já que sempre consegue sucesso em satisfazer todas as principais demandas do desenvolvimento web. Qualquer empresa que trabalha com o desenvolvimento de aplicativos pode confirmar as contribuições das ferramentas citadas dentro de um grande projeto. Apesar disso, a escolha de u framework deve ir além de apenas ferramentas. Ela deve incorporar um conhecimento profundo do mercado, desafios, requisitos e mais.

Se você precisa de uma equipe para o desenvolvimento do seu projeto, podemos te ajudar. Com mais de 15 anos de mercado, e a expertise de uma fábrica de software que produziu inúmeros casos de sucesso no desenvolvimento de aplicativos mobile e web.

Plataforma Rede Social

Rede para viajantes possibilita a criação de álbum impresso de viagens

EM

O Ministério do Turismo adverte: os brasileiros estão viajando mais. Com o aumento de pessoas que saem pelo mundo em busca de novos horizontes e experiências, ferramentas tecnológicas são lançadas para facilitar as viagens e também o compartilhamento sobre elas.

Entre elas, está a plataforma Whisgo, uma rede social para troca de experiências e consulta de informações sobre viagens, destinos, roteiros e lugares.

qi_viagem

“Além de dar acesso às informações, funciona como um moleskine virtual para viajantes que pode se transformar em um verdadeiro diário de bordo com fotos e depoimentos”, explica o sócio-fundador da empresa, Mariano Camara. “No final, ainda é possível imprimi-lo e recebê-lo em casa, como um álbum personalizado para compartilhar com a família.”

A ideia surgiu quando Camara, ao programar uma viagem para o Peru, em 2011, sentiu falta de um mecanismo integrado de consulta de destinos e elaboração de roteiro. “Pensei em criar uma plataforma que agrupasse outros serviços já existentes, como Google Place e Maps, para facilitar o planejamento de uma rota criativa. Daí veio a ideia dos cadernos de viagem”, conta Camara.

Ao compartilhar memórias e traçar novos roteiros, o usuário do Whisgo pode adicionar amigos para também contribuir com o conteúdo e com a programação. O sistema pontua quando há indicações do caderno dentro da rede e com o acúmulo de pontos o usuário pode monetizar sua criação. Blogueiros viajantes também podem personalizar suas informações em um caderno para vender.

O site ainda oferece mais três modelos de guias de viagem como foco em empresas: os cadernos oficiais, usados por estabelecimentos comerciais e espaços culturais interessados em divulgar suas agendas de programação; os cadernos comerciais, elaborados por empresas que oferecem pacotes promocionais de viagem; e os cadernos patrocinados, que permitem às empresas publicar conteúdo associado a suas marcas.

Fonte: Catraca Livre

Sistema Operacional Linux

Porquê escolher Linux?


Fonte : Tech&Net

 

Ok, então o que é o Linux?

Sem entrar em detalhes técnicos, o Linux é um sistema operativo tal como o Windows, com a diferença de que o Linux devido à forma como é construido, permite uma versatilidade, uma plasticidade, uma capacidade de adaptação que poucos sistemas operativos conseguem atingir.
O Linux corre em praticamente tudo o que é hardware, tendo por vezes alguma dificuldade com hardware mais exótico. Muitos são os equipamentos que correm Linux, normalmente as pessoas surpreendem-se ao descobrir que usam Linux sem se aperceberem, por exemplo ao usar o Google ou o Youtube ou 90% dos sites na Internet estamos a usar serviços que correm em servidores Linux. Alguns eletrodomésticos usam Linux, desde frigoríficos, televisões etc. As probabilidades de estar a usar Linux no seu smartphone são muito altas uma vez que o sistema operativo Android detém a maior quota de mercado, e este é uma versão modificada de Linux. A razão, em parte, destas qualidades do Linux é o facto de que Linux é software Livre.

E o que é Software Livre?

O software Livre ou de código aberto(Open Source), é todo o software que adota uma licença Livre, sendo a mais comum a GPL – General Public License (Licença Pública Geral). Esta Licença em particular garante ao utilizador 4 liberdades fundamentais.

  • A liberdade de usar o software, para qualquer propósito.
  • A liberdade de estudar o software e adaptá-lo para as suas necessidades.
  • A liberdade de redistribuir cópias do software de modo a que possa ajudar o próximo.
  • A liberdade de aperfeiçoar o programa, e redistribuir as alterações, de modo que toda a comunidade beneficie delas, as alterações devem estar também sob a licença GPL.

Para garantir todas as liberdades da licença GPL, o(s) programador(es) autor(es) do software devem providenciar o código fonte do programa, trocando por miúdos, o autor do programa deve disponibilizar a receita que permite fazer o programa funcionar a quem quer que o queira ver.

Ok, mas qual é a Importância destas Liberdades?

Imaginemos o seguinte cenário, a Microsoft decide que o próximo Windows só dá em computadores muito mais potentes e por sinal muito mais caros. E descontinua completamente o Windows atual, sendo o código deles eles podem fazer isso, obrigando os consumidores a fazer uma atualização de hardware isto se quiserem continuar a usar o sistema operativo Windows. E em cima disto tudo aumenta o preço das licenças para o dobro. É certo que é um caso muito improvável de acontecer no mundo real.

Se estiver preso ao Windows não há muito que fazer, tinha de obedecer e atualizar o hardware e as licenças quer em casa quer no trabalho, isto se quisesse permanecer seguro e com atualizações. Depende do software de uma só companhia, e não pode fazer nada.

Tem em mãos um serio problema. Está super-dependente de uma só firma e tem de lhe confiar cegamente os destinos do seu computador para que ele continue a funcionar normalmente.

E se o Windows tem um bug ou uma vulnerabilidade que o incomoda e a Microsoft não a encontra, ou imagine que a Microsoft se lembra de alterar completamente a forma de interagir com o Windows, e faz com que tenha de aprender quase que de novo a forma como interage com o seu computador. Não há muito que possa fazer a não ser aguentar, pode instalar mais uma ou outra aplicação, mas nunca desinstalar o que vem predefinido, esse vai estar sempre em plano de fundo a ocupar recursos preciosos do seu computador.

No mundo Open Source se um projeto em particular segue um determinado caminho que não agrada à comunidade, nada se perde, sendo o código-fonte livre a comunidade pode juntar-se e bifurcar(em inglês fork) o projeto de forma a manter as qualidades que a comunidade tanto gosta e continuar a melhorar o projeto sem ir na direção que o projeto inicialmente decidiu ir. Exemplos disso são o GNOME e o MATE, quando a GNOME traçou o caminho para a sua versão 3, parte da comunidade não gostou dessa direção, então pegou na ultima versão disponível da versão 2(2.32) do projeto e formou o projeto MATE que mantém as qualidades que a comunidade tanto gosta. No fim quem ganhou foi o utilizador, tendo assim mais uma opção de escolha.

No caso de ser um bug a incomodar, podemos enviar um relatório de erro com bug, ou mesmo falar com o programador autor do programa, ou ainda melhor, corrigi-lo nós mesmos(ou contartar um programador para o fazer) e enviar as alterações de volta para o projeto de forma a que outros beneficiem do melhoramento que fizemos. Com software proprietário nós não poderíamos corrigir o bug pelas próprias mãos. E comunicar o bug à empresa proprietária pode ser extremamente complicado e, ainda temos que esperar que a pequena equipa de programadores da empresa veja e corrija o erro atempadamente, independentemente do tamanho da empresa, esta nunca tem uma comunidade de milhões de programadores dispostos a participar e ajudar, assim quando uma vulnerabilidade ocorre em Linux, normalmente esta é corrigida muito rapidamente o que não permite que haja a proliferação de tantos vírus em Linux.

Fonte: Why Linux Is Better

PHP + Json

json-php-transferencia-de-dados-eficiente

Use JSON e PHP no lugar de XML

 

O que é JSON?

JSON é um sigla para o termo JavaScript Object Notation (Notação de Objetos JavaScript). Como o próprio termo sugere, é uma forma textual para definir objetos usando um caminho diferente do que aprendemos ao estudar JavaScript.Mas não se engane, JSON não é uma nova tecnologia, é apenas um recurso da própria linguagem JavaScript.

Não é pretensão deste artigo explicar detalhadamente as diferenças de objetos tradicionais JavaScript e a notação de objetos usando JSON, mas mostrar sua utilidade como tecnologia para integração com outras aplicações.

Então… Porque o JSON e não XML?

Por ser uma linguagem de notação de objetos JavaScript, JSON não possui apenas a função de transferir dados, mas é possível também transferir objetos com métodos e propriedades do lado servidor para o cliente (navegador de internet), assim como criar objetos dinâmicos para as interfaces de interação com os usuários. As seguintes características contribuíram para que o JSON fosse utilizado como alternativa ao XML:

  • Por ser parte da linguagem JavaScript, JSON é completamente entendido e interpretado por todos os navegadores de internet que possuem suporte à JavaScript.
  • JSON é mais rápido de escrever, ler e entender que o XML.
  • JSON é executado de forma mais rápida que o XML, principalmente em requisições Ajax.
  • Um objeto em notação JSON pode ser criado a partir de uma string com um simples comando eval.
  • Por tornar-se popular entre os desenvolvedores, muitas outras tecnologias adicionaram suporte ao JSON, como o PHP, Java, C++, Python…
  • PHP possui a capacidade de transformar seus arrays em notação JSON e vice-versa, usando as funções json_encode e json_decode.
  • Por possuir uma sintaxe semelhante aos arrays, listas, hashmaps, e dicionários em outras linguagens, JSON se tornou uma notação com baixa curva de aprendizado para a maioria dos desenvolvedores, incluindo o programador PHP.

Como o JSON funciona?

Como já mencionei, o JSON entende como objeto tudo que estiver entre {} num formato de nome:valor. O nome é um texto que representa o atributo do objeto e o valor é um valor do tipo existente em JavaScript como: String, Number, Boolean ou null.

Assim, eu posso criar um objeto pessoa com os atributos nome e idade seguindo o padrão mencionado acima. Abaixo segue o código de exemplo:

Para acessar os valores dos atributos do objeto pessoa, basta usar o padrão objeto.atributo. Para modificar e adicionar dados ao atributo, usa-se o mesmo parão. Em JavaScript, isso poderia ser feito assim:

Outro recurso interessante do JSON são as listas, um array simples onde eu posso armazenar qualquer valor ou tipo de objeto. Toda lista em JSON é adicionada entre [] e cada item da lista está separado por “,”.

Como demonstrado no código acima, temos uma lista de objetos JavaScript em notação JSON com os atributos nome e idade.

E onde entra o PHP?

O PHP entra em ação quando é necessário gerar ou recuperar dados no formato JSON. Quando você precisa gerar uma informação em JSON, o caminho mais simples é criar um array e depois imprimir o resultado da função json_encode, passando o array como parâmetro para a função.

O código acima imprime um objeto em notação JSON que pode ser lido por uma requisição Ajax ou uma página PHP. Note que antes de imprimir o JSON, indicamos o tipo de conteúdo da página para o navegador de internet do usuário, assim o navegador irá se preparar para o conteúdo JSON que está por vir. Se você fosse escrever um arquivo JavaScript para ler o resultado do código acima, deveria escrever algo assim:

Note que usei jQuery para criar o JavaScript de leitura do JSON gerado pelo PHP. Se você não conhece jQuery, sugiro uma estudada no assunto. Um bom lugar para começar é o sitejquery.com.

No caso da linguagem PHP, você poderia escrever um código PHP para ler os objetos JSON degerar-json.php e manipular os objetos. Para isso, você poderia escrever um código como o mostrado abaixo:

No código acima, usamos a função file_get_contents para ler o conteúdo de gera-json.php e armazená-lo numa variável. Em seguida, transformamos o conteúdo JSON num array associativo da linguagem PHP, com objetivo de tornar a manipulação dos dados mais fácil.

Fonte PHP Mais

NodeJS Escalabilidade

Se você ouviu falar do Node, ou leu artigos que proclamam como ele é maravilhoso, poderá estar pensando: “Afinal, o que é Node.js?”. Apesar de não ser para todos, o Node pode ser a escolha certa para algumas pessoas.

Este artigo buscará responder o que é o Node.js resumindo o problema que ele pode resolver, como ele funciona, como executar um aplicativo simples e, finalmente, quando o Node é ou não é uma boa solução. Ele não abordará como escrever um aplicativo Node complicado nem será um tutorial completo sobre Node. A leitura deste artigo o ajudará a decidir se você deverá buscar aprender Node para usar em seu próprio negócio.

Que problema o Node soluciona?

O objetivo declarado do Node é “fornecer uma maneira fácil de criar programas de rede escaláveis”. Qual é o problema com os programas de servidor atuais? Vamos fazer as contas. Em linguagens como Java™ e PHP, cada conexão inicia um novo encadeamento que, potencialmente, é acompanhado de 2 MB de memória. Em um sistema que tenha 8 GB de RAM, isto define o número máximo teórico de conexões simultâneas em cerca de 4.000 usuários.

À medida que sua base de clientes cresce, você deseja que seu aplicativo da Web suporte mais usuários e, portanto, será necessário adicionar mais servidores. É claro, isso se soma a custos de negócios, especificamente custos de servidor, custos de tráfego e custos de mão de obra. Adicione a esses custos o problema técnico potencial de que um usuário poderá usar diferentes servidores para cada solicitação, de forma que quaisquer recursos compartilhados deverão ser compartilhados por todos os servidores. Por exemplo, no Java, variáveis estáticas e caches precisam ser compartilhados entre as JVMs em cada servidor. Este é o gargalo de toda a arquitetura de aplicativos da web, o número máximo de conexões simultâneas que um servidor pode tratar.

O Node soluciona o problema mudando a forma como uma conexão é feita no servidor. Em vez de iniciar um novo encadeamento do SO para cada conexão (e alocar a memória correspondente com ele), cada conexão cria um processo, que não requer que o bloco de memória o acompanhe. O Node alega que nunca ocorrerá um impasse de bloqueios, pois não são permitidos bloqueios e ele não bloqueia diretamente para realizar chamadas de E/S. O Node também alega que um servidor que o execute pode suportar dezenas de milhares de conexões simultâneas. De fato, o Node altera o panorama do servidor ao mudar o gargalo do sistema inteiro do número máximo de conexões para a capacidade de tráfego de um único sistema.

Portanto, agora que você tem um programa que pode tratar dezenas de milhares de conexões simultâneas, o que você pode de fato criar com o Node? Seria ótimo se você tivesse um aplicativo da Web que exigisse tantas conexões. Este é um daqueles problemas do tipo “se você tem esse problema, ele não é um problema”. Antes de chegarmos a isso, vejamos como o Node funciona e como foi projetado para ser executado.

O que o Node definitivamente não é

Sim, o Node é um programa de servidor. No entanto, ele definitivamente não é como o Apache ou o Tomcat. Esses servidores são produtos de servidor independentes, prontos para instalar e implementar aplicativos instantaneamente. Você poderá ter um servidor em execução em um minuto com esses produtos. O Node definitivamente não é isso.

O Apache pode adicionar um módulo PHP para permitir que os desenvolvedores criem páginas da Web dinâmicas, e os programadores usando Tomcat podem implementar JSPs para criar páginas da Web dinâmicas. O Node definitivamente não é isso.

Neste momento inicial da vida do Node (atualmente na versão 0.4.6), ele não é um programa de servidor pronto para ser executado, onde você espera instalá-lo, colocar seus arquivos dentro dele e ter um servidor da Web totalmente funcional. Ele ainda requer uma quantidade de trabalho não trivial para obter até mesmo a funcionalidade básica de um servidor da Web funcionando depois de concluir a instalação.

Como o Node funciona

O Node propriamente dito executa V8 JavaScript. Espere, JavaScript no servidor? Sim, você leu corretamente. O JavaScript no lado do servidor é um conceito relativamente novo, e há cerca de dois anos, aqui no developerWorks, ele foi mencionado em uma discussão sobre o produto Aptana Jaxer. Apesar de o Jaxer nunca ter chegado a tanto, a ideia em si não era tão absurda — por que não usar no cliente a mesma linguagem de programação que você usa no servidor?

O que é o V8?

O mecanismo V8 JavaScript é o mecanismo subjacente do JavaScript que o Google usa com seu navegador Chrome. Poucas pessoas pensam sobre o que de fato ocorre com o JavaScript no cliente. Um mecanismo JavaScript, de fato, interpreta o código e o executa. Com o V8, o Google criou um interpretador ultrarrápido escrito em C++ que tem um aspecto exclusivo: é possível fazer o download do mecanismo e integrá-lo em qualquer aplicativo que você desejar. Ele não é restrito à execução em um navegador. Portanto, o Node, na verdade, usa o mecanismo V8 JavaScript escrito pelo Google e o redireciona para uso no servidor. Perfeito! Por que criar uma nova linguagem quando há uma boa solução já disponível.

Programação direcionada a eventos

Muitos programadores foram ensinados a acreditar que a programação orientada a objeto é o projeto de programação perfeito e a não usarem nada mais. O Node utiliza o que é chamado de modelo de programação direcionado a eventos.

Listagem 1. Programação direcionada a evento no lado do cliente com jQuery

// jQuery code on the client-side showing how Event-Driven programming works

// When a button is pressed, an Event occurs - deal with it
// directly right here in an anonymous function, where all the
// necessary variables are present and can be referenced directly
$("#myButton").click(function(){
     if ($("#myTextField").val() != $(this).val())
         alert("Field must match button text");
});

O lado do servidor, na verdade, não é diferente do lado do cliente. Verdade, não é preciso pressionar botões, nem digitar em campos de texto, mas, em um nível mais alto, eventos estão ocorrendo. Uma conexão é feita – evento! Dados são recebidos pela conexão – evento! Dados param de chegar pela conexão – evento!

Por que este tipo de configuração é ideal para o Node? O JavaScript é uma excelente linguagem para programação direcionada a eventos, pois permite funções e fechamentos anônimos e, mais importante, a sintaxe é familiar para quase todos que alguma vez já programaram. As funções de callback, que são chamadas quando um evento ocorre, podem ser escritas no mesmo local onde você captura o evento. Portanto, é fácil de codificar, fácil de manter, sem estruturas orientadas a objetos complicadas, sem interfaces e sem potencial para excessos na arquitetura. Basta aguardar um evento, escrever uma função de callback e a programação direcionada a eventos toma conta de tudo!

Exemplo de aplicativo Node

Finalmente vamos ver algum código! Vamos juntar tudo o que discutimos e criar nosso primeiro aplicativo Node. Como vimos que o Node é ideal para tratar aplicativos com alto tráfego, vamos criar um aplicativo da Web muito simples, criado para oferecer velocidade máxima.

Eis as especificações de nosso aplicativo de amostra transmitidas pelo “chefe”: criar uma API ReSTful geradora de números randômicos. O aplicativo deverá receber uma entrada, um parâmetro chamado “number”. O aplicativo, a seguir, retornará um número randômico entre 0 e este parâmetro, e retornará o número gerado para o chamador. Como o “chefe” espera que esse aplicativo seja extremamente popular, ele deverá tratar 50 mil usuários simultâneos. Vamos ver o código:

Listagem 2. Gerador de número randômico do Node

// these modules need to be imported in order to use them.
// Node has several modules.  They are like any #include
// or import statement in other languages
var http = require("http");
var url = require("url");

// The most important line in any Node file.  This function
// does the actual process of creating the server.  Technically,
// Node tells the underlying operating system that whenever a
// connection is made, this particular callback function should be
// executed.  Since we're creating a web service with REST API,
// we want an HTTP server, which requires the http variable
// we created in the lines above.
// Finally, you can see that the callback method receives a 'request'
// and 'response' object automatically.  This should be familiar
// to any PHP or Java programmer.
http.createServer(function(request, response) {

     // The response needs to handle all the headers, and the return codes
     // These types of things are handled automatically in server programs
     // like Apache and Tomcat, but Node requires everything to be done yourself
     response.writeHead(200, {"Content-Type": "text/plain"});

     // Here is some unique-looking code.  This is how Node retrieves
     // parameters passed in from client requests.  The url module
     // handles all these functions.  The parse function
     // deconstructs the URL, and places the query key-values in the
     // query object.  We can find the value for the "number" key
     // by referencing it directly - the beauty of JavaScript.
     var params = url.parse(request.url, true).query;
     var input = param.number;

     // These are the generic JavaScript methods that will create
     // our random number that gets passed back to the caller
     var numInput = new Number(input);
     var numOutput = new Number(Math.random() * numInput).toFixed(0);

     // Write the random number to response
     response.write(numOutput);

     // Node requires us to explicitly end this connection.  This is because
     // Node allows you to keep a connection open and pass data back and forth,
     // though that advanced topic isn't discussed in this article.
     response.end();

   // When we create the server, we have to explicitly connect the HTTP server to
   // a port.  Standard HTTP port is 80, so we'll connect it to that one.
}).listen(80);

// Output a String to the console once the server starts up, letting us know everything
// starts up correctly
console.log("Random Number Generator Running...");

Iniciando esse aplicativo

Coloque o código acima em um arquivo chamado “random.js”. Agora, para iniciar esse aplicativo e executá-lo (portanto, criar o servidor HTTP e aguardar conexões na porta 80), simplesmente execute o comando a seguir em seu prompt de comando: % node random.js. Eis o que se parecerá quando o servidor estiver em execução.

root@ubuntu:/home/moilanen/ws/mike# node random.js
Random Number Generator Running...

Acessando esse aplicativo

O aplicativo está em execução. O Node está aguardando conexões neste momento, então vamos testar o aplicativo. Como criamos uma API RESTful simples, podemos acessar o aplicativo usando nosso navegador. Digite o seguinte endereço (assegure-se de ter completado a etapa anterior): http://localhost/?number=27.

A janela de seu navegador mudará para um número aleatório entre 0 e 27. Pressione recarregar em seu navegador e obterá outro número randômico. E aí está, seu primeiro aplicativo Node!

Node, para que ele serve?

Depois de ler tudo sobre o Node, você poderá responder o que ele é, mas ainda imaginará quando deverá usá-lo. Essa é uma pergunta importante a fazer, pois existem certas coisas para as quais o Node é bom e, de forma contrária, há certas coisas para as quais o Node, no momento, provavelmente não é uma boa solução. Você precisa decidir cuidadosamente quando usar o Node, pois usá-lo na situação errada poderá levar a MUITA codificação extra.

Para o que ele é bom

Como você viu até agora, o Node é extremamente bem projetado para situações em que um grande volume de tráfego é esperado e a lógica e o processamento necessários do lado do servidor não são necessariamente volumosos antes de responder ao cliente. Bons exemplos de onde o Node seria excelente incluem:

  •  Uma API RESTful Um serviço da Web que forneça uma API RESTful recebe alguns parâmetros, interpreta-os, monta uma resposta e envia-a (normalmente uma quantidade relativamente pequena de texto) de volta ao usuário. Esta é uma situação ideal para o Node, pois você poderá criá-lo para tratar dezenas de milhares de conexões. Ela também não requer um grande volume de lógica; ela simplesmente procura valores em um banco de dados e monta uma resposta. Como a resposta é uma pequena quantidade de texto e a solicitação de entrada é uma pequena quantidade de texto, o volume de tráfego não é grande, e um computador poderá provavelmente tratar as demandas de API mesmo da API da empresa mais movimentada.
  • Fila do Twitter – Pense em uma empresa como a Twitter, que precisa receber tweets e gravá-los em um banco de dados. Existem literalmente milhares de tweets chegando a cada segundo e o banco de dados não consegue acompanhar o número de gravações necessárias durante os momentos de pico de uso. O Node torna-se uma engrenagem importante na solução deste problema. Como vimos, o Node consegue tratar dezenas de milhares de tweets que chegam. Ele pode gravá-los rápida e facilmente em um mecanismo de enfileiramento em memória (memcached, por exemplo), a partir do qual outro processo separado pode gravá-los no banco de dados. A função do Node é rapidamente coletar o tweet e passar essa informação para outro processo, responsável por gravá-lo. Imagine outro projeto — um servidor PHP normal que tenta tratar gravações no banco de dados em si — cada tweet causaria um pequeno atraso ao ser gravado pelo banco de dados, pois a chamada ao banco de dados estaria sendo bloqueada. Uma máquina com este design só poderia ser capaz de tratar 2000 tweets por segundo, devido à latência do banco de dados. Um milhão de tweets por segundo requer 500 servidores. O Node, em vez disso, trata cada conexão e não bloqueia, possibilitando que ele capture o máximo de tweets possível. Uma máquina com Node, capaz de tratar 50.000 tweets por segundo, requer somente 20 servidores.
  • Servidor de arquivos de imagem – Uma empresa que tem um grande Web site distribuído (pense no Facebook ou Flickr) poderia decidir dedicar servidores inteiros a simplesmente servir imagens. O Node seria uma boa solução para esse problema, pois a empresa pode usá-lo para codificar um recuperador de arquivos fácil e, a seguir, tratar dezenas de milhares de conexões. O Node procuraria pelo arquivo de imagem, retornaria o próprio arquivo ou um erro 404 e não faria mais nada. Essa configuração permitiria que esses tipos de Web sites distribuídos reduzissem o número de servidores necessários para servir arquivos estáticos, como imagens, arquivos .js e arquivos .css.

Para o que ele não serve

É claro, o Node não é a escolha ideal em algumas situações. Eis alguns cenários em que o Node não seria bom:

  • Páginas criadas dinamicamente – Atualmente, o Node não fornece uma forma padrão para criar páginas dinâmicas. Por exemplo, ao usar a tecnologia JavaServer Pages (JSP), é possível criar uma página index.jsp que contenha loops em snippers JSP, como <% for (int i=0; i<20; i++) { } %>. O Node não permite esses tipos de páginas dinâmicas direcionadas a HTML. Novamente, o Node não é idealmente adequado para ser um servidor de páginas da web, como o Apache e o Tomcat o são. Portanto, se quisesse fornecer uma solução no lado do servidor para isto no Node, teria que codificar a solução inteira você mesmo. Um programador PHP não gostaria de programar um conversor PHP para o Apache toda vez que implementasse um aplicativo da web, mas, neste momento, é o que o Node exigiria que você fizesse.
  • Aplicativos pesados em bancos de dados relacionais – O Node foi projetado para ser rápido, assíncrono e sem bloqueio. Os bancos de dados não necessariamente compartilham desses objetivos. Eles são síncronos e com bloqueio, pois chamadas ao banco de dados para leitura e gravação bloqueiam até que um resultado seja gerado. Portanto, um aplicativo da Web que solicite muitas chamadas ao banco de dados, muitas leituras e muitas gravações com cada solicitação seria uma aplicação ruim para o Node, pois o banco de dados relacional em si estaria negando muitos dos pontos fortes do Node. (Os novos bancos de dados NoSQL são uma escolha melhor para o Node, mas este é um tópico totalmente diferente).

Conclusão

A pergunta “O que é Node.js?” deve estar respondida. Depois de ler esse artigo, você deverá ser capaz de explicar, em poucas frases claras e concisas, o que é o Node.js. Se puder fazer isso, você está à frente de muitos codificadores e programadores. Muitas pessoas com quem conversei sobre o Node ficaram confusas sobre o que exatamente ele faz. Eles estão, compreensivelmente, com a postura mental do Apache — um servidor é um aplicativo no qual você coloca seus arquivos HTML e tudo funciona. O Node é direcionado a finalidade. É um software que usa JavaScript para permitir que os programadores rápida e facilmente criem servidores da Web rápidos e escaláveis. Onde o Apache é pronto para executar, o Node é pronto para codificar.

O Node atinge seus objetivos fornecendo servidores altamente escaláveis. Ele não aloca um modelo de encadeamento por conexão, mas usa um modelo processo por conexão, criando somente a memória que é necessária para cada conexão. Ele usa um mecanismo JavaScript extremamente rápido do Google, o mecanismo V8. Ele usa um projeto direcionado a eventos para manter o código mínimo e fácil de ler. Todos esses fatores levam ao objetivo desejado do Node — é relativamente fácil escrever uma solução altamente escalável.

Tão importante quanto entender o que o Node é, é entender o que ele não é. O Node não é simplesmente uma substituição para o Apache que tornará seu aplicativo PHP da Web mais escalável. Isto não pode estar mais longe da verdade. Neste estágio preliminar da vida do Node, ele tem um potencial limitado para uso por muitos programadores, mas nas situações em que faz sentido usá-lo, ele funciona extremamente bem.

O que se pode esperar do Node no futuro? Essa é, talvez, a pergunta mais importante a levar deste artigo. Agora que você sabe o que ele faz, procure saber o que ele fará a seguir. No próximo ano, espero que o Node ofereça melhor integração com bibliotecas de suporte de terceiros existentes. No momento, muitos programadores terceiros desenvolveram plugins para o Node, incluindo a adição de suporte ao servidor de arquivos e ao MySQL. Espero que o Node comece a integrar isso na funcionalidade principal.

Eventualmente, também espero que o Node suporte algum tipo de módulo de página dinâmica, permitindo fazer os tipos de coisas em um arquivo HTML que é possível fazer no PHP e JSPs (talvez uma NSP, página de servidor Node). Finalmente, em algum momento, espero um servidor Node pronto para implantação, que você faça o download, instale e simplesmente coloque seus arquivos HTML dentro dele como faria com o Apache ou o Tomcat. Ainda é cedo na vida do Node, mas ele está crescendo rapidamente e poderá, em breve, estar em seu horizonte.

Fonte Imasters