quarta-feira, 28 de setembro de 2011

QUANDO A VERDADE DÓI


QUANDO A VERDADE DÓI
Um amigo verdadeiro é aquele que tem a coragem de falar a verdade a você, mesmo que essa verdade venha lhe provocar alguma dor. Isto porque ao conhecer a realidade da sua situação, você poderá começar a lidar com ela de maneira bem sucedida. Daniel Brother
Quando a verdade dói a tentação é de ignorá-la ou negá-la. Porém, quando a verdade dói, esta é precisamente a hora de prestar atenção no que esta verdade está dizendo. Quando a verdade dói, essa dor pode ser dilacerante.

Porém, se você ouvi-la atentamente, você poderá ganhar a sabedoria a fim de evitar uma dor ainda maior. Ao se defrontar com uma verdade que é dolorosa de ouvir, aquela dor estará lhe fazendo um enorme favor. Ela está lhe providenciando uma oportunidade de mudança para melhor para muito melhor.

Quando a verdade dói você tem a oportunidade de buscar um novo poder e vitalidade à sua vida. Apesar da dor que a verdade provoca, a longo prazo, ela pode salvar a sua vida de dores muito maiores, e livrá-lo de situações extremamente dolorosas.
Nélio Silva: 
Para Meditação
Assim como o ferro afia o ferro, o homem afia o seu companheiro. Provérbios 27:17

Fonte; http://goo.gl/RUkz6 

terça-feira, 27 de setembro de 2011

INSPIRAÇÃO


INSPIRAÇÃO Hoje nasceu um novo dia, e com ele magníficas e portentosas oportunidades que não podem ser desperdiçadas. Basta apenas que você as identifique, e seja muito grato por elas. Miles Kending


Levante a cabeça, olhe para o alto e desfrute a beleza, a maravilha e o milagre da vida que você está experimentando. Não existe nada de errado em se sentir bem a respeito de si mesmo. E a razão para isso é que, quanto melhor você se sentir em relação a si próprio, maiores chances você terá de fazer uma diferença positiva na vida das outras pessoas.

Inúmeras são as razões para fazer deste dia um dia realmente inspirado. A coisa mais amorosa e responsável de você fazer é responder positivamente ao incrível potencial que Deus lhe deu. Você tem muitos dons preciosos para oferecer. Seja portanto, tanto quanto possível, o melhor com aquilo que tem em mãos.
Obviamente que existem problemas mais do que suficientes neste mundo. Só que você não precisa dar a eles nenhum poder a mais do que aquele que já têm. Em vez disso, use este dia para compartilhar bondade, esperança, fé, alegria e amor. Ao manifestar esses frutos do Espírito de Deus você estará agindo positivamente, inspirando outros e refletindo o caráter de Deus em suas atitudes.

Nélio DaSilva

Para Meditação:
Este é o dia que o Senhor fez; regozijemo-nos e alegremo-nos nele.. Salmos 118:24

segunda-feira, 26 de setembro de 2011

PODEROSA HUMILDADE


PODEROSA HUMILDADE
A vida é uma longa lição de humildade. James Matthew Barrie

Em uma genuína humildade, existe uma enorme vitalidade e influência. Liberte-se das demandas do seu ego e você não encontrará limitações em tudo o que você deseja alcançar. Liberte-se do seu desejo de controlar as pessoas porque assim você irá aprimorar e expandir ainda mais a sua habilidade de controlar, focar e dirigir as suas ações.

Vá para muito além da necessidade de culpar outras pessoas e você irá ganhar um mais alto nível de responsabilidade. Supere o impulso de julgar os outros e você será capaz de focar mais claramente em matérias de real e duradouro valor. Renuncie ao pensamento de achar que você é melhor que os outros e um novo mundo de oportunidades se abrirá para você. Pare de buscar vantagens injustas e você estará livre para desenvolver uma eficiência que você jamais alcançou.

Viva cada momento com humildade, amor, respeito, gratidão pela bela vida que está ao seu redor porque, ao fazer isso, você encontrará um tesouro sem fim.


Para Meditação:
todo o que se exalta será humilhado, e o que se humilha será exaltado.Lucas 14:11
Fonte: Nélio DaSilva ( http://goo.gl/1b1F6 )

sexta-feira, 23 de setembro de 2011

O QUE VOCÊ DIZ


 
O QUE VOCÊ DIZ
Uma das maneiras mais fáceis e mais rápidas de melhorar o seu mundo é melhorando a qualidade das palavras que você usa ao pensar sobre si mesmo ou ao falar com outras pessoas. Robert Framing

Oque é que você está dizendo a si mesmo? O que é que você está dizendo aos outros? Palavras podem limitar seus pensamentos ou elas podem expandir os seus horizontes. Palavras podem trazer desencorajamento e desespero ou podem prover encorajamento e levá-lo a grandes realizações.

Sem nenhuma dúvida, você já experimentou o enorme impacto do que uma gentil e encorajadora palavra pôde fazer-lhe. Portanto, lembre-se de que em vez de deixar que suas palavras venham a aumentar uma situação problemática, escolha as palavras que possam levá-lo para uma mais positiva e agradável realidade.

O que você diz a si mesmo e a outros realmente tem muita importância. Quando você faz da sua linguagem algo mais consistentemente positivo, a resposta que a vida lhe dará não será outra a não ser resultados surpreendentemente agradáveis. Consequentemente, isso pode afetar as suas ações e novos resultados positivos virão naturalmente. Suas palavras positivas podem verdadeiramente criar um mundo mais positivo.

Nélio DaSilva
Fonte: http://reverendoalexander.blogspot.com/2011/09/pare-e-ore-meditacao_21.html 

quinta-feira, 15 de setembro de 2011

Diagrama de Caso de Teste


Diagrama de Caso de Teste tem por objetivo, auxiliar na visualização do Cenário como um todo do ponto de vista do Analista de Testes e o Testador. Ele testa um Cenário com suas principais funcionalidades e suas integrações.


Notação:

* Atores
* Casos de Teste
* Relacionamento entre estes elementos


Estes relacionamentos podem ser:

* Associações entre Atores e Casos de Teste
* Generalizações, extends, includes entre os Casos de Teste
Os Casos de Teste podem estar opcionalmente estar envolvidos por um ou mais retângulos (herdado dos Diagramas de Casos de Uso), onde representam os limites do Cenário.
Em maiores detalhes:
  •     Atores 
Um Ator é representado por um boneco e um rótulo com o nome do Ator. Um Ator, na situação em questão, o Analista de Teste ou o Testador que pode ser um usuário humano ou um sistema computacional. 
 
  •  Casos de Teste
Um
Caso de Teste é representado por uma elipse e um rótulo com o nome do
Caso de Teste (herdado do Diagrama de Caso de Uso). Um Caso de Teste
define o que será testado dentro do Cenário e suas funcionalidades.

 
  • Relacionamentos
 
o Ajudam a descrever Casos de Teste
o Entre um Ator e um Caso de Teste
* Associação
Define uma funcionalidade do sistema do ponto de vista do usuário. 
 
o Entre Casos de Testes

Include
Um relacionamento include de um Caso de Teste A para um Caso de Teste B, indica que B é essencial para o comportamento de A. Pode ser dito também que B é_parte_de A.
Extend
Um relacionamento "extendido" de um Caso de Teste B para um Caso de Teste A, indica que o Caso de Teste B pode ser acrescentado para descrever o comportamento de A (é facultativo). A extensão é inserida em um ponto de extensão do Caso de Teste A.
Ponto de extensão em um Caso de Teste é uma indicação de que outros Casos de Teste poderão ser "adicionados" a ele. Quando o Caso de Teste for invocado, ele verificará se suas extensões devem ou não ser invocadas.
Quando se especifica B extends A, a semântica é:
• Dois Casos de Teste são definidos: A e A é "extendido" por B;
• B é uma variação de A. Contém eventos adicionais, para certas condições;
• Tem que ser especificado onde B é inserido em A.
 
o Generalização ou Especialização (é_um)

* O Caso de Teste B é_um Caso de Teste A (A é uma generalização de B, ou B é uma especialização de A).
* Um relacionamento entre um Caso de Teste genérico para um mais específico, que herda todas as características de seu pai.
 
  • Cenário
* Limites do Cenário: representado por um retângulo envolvendo os Casos de Teste que compõem o Cenário.
* Nome do Cenário: Localizado dentro do retângulo.
 
Caixa de Expedição de Documentos – Exemplo Básico 1

 
 
 
 
 
 
 
 
 
Cadastro de Clientes – Exemplo Básico 2

    


Fonte Atrigo Completo  http://www.testexpert.com.br/?q=node/1381
Por : Ricardo Franco

Brasileiro graduado recebe 156% mais que trabalhador com nível médio, diz estudo


Pesquisa da OCDE constatou que Brasil oferece maior bônus salarial para os graduados, entre os 32 países avaliados


Uma pesquisa da OCDE (Organização para a Cooperação e Desenvolvimento Econômico) divulgada na terça-feira (13) aponta que o Brasil paga o maior bônus salarial aos trabalhadores com Ensino Superior. Para se ter uma ideia, enquanto os graduados de outros 32 países recebem, em média, 50% mais que os trabalhadores com nível médio, no Brasil, este percentual sobe para 156%.
De acordo com o "Education at a Glance2011", a evasão escolar também tem interferido, e muito, no rendimento dos trabalhadores. Aqueles que não completaram o Ensino Médio, por exemplo, chegam a receber, em média, 50% menos que aqueles que possuem certificado de conclusão escolar. Atualmente, entre os países da OCDE considerados mais desenvolvidos, esta média costuma ser de 77%.
Custos do trabalhoA avaliação aponta ainda que os custos do trabalho e ganhos brutos anuais no Brasil são menores que os dos demais países da OCDE.
Na base comparativa, por exemplo, um trabalhador de 25 a 64 anos que não tenha concluído o Ensino Médio chega a receber por ano cerca de US$ $ 8.175,24. Já um trabalhador desta mesma faixa etária que tenha concluído tal nível educacional chega a receber em 12 meses US$ 14.110,74.
Segundo a pesquisa, nestes casos, a renda pode variar entre os profissionais que se encontram na faixa de 45 a 54 anos. Nestes casos, a remuneração pode apresentar um adicional bruto de 65%, ou seja, mais US$ 7.187,12 por ano, se comparado à renda dos profissionais entre 25 e 34 anos de idade.
Graduados recebem maisOs valores, no entanto, costumam ser brutalmente diferentes para aqueles que conseguiram concluir o nível superior. Nestes casos, a remuneração a ser paga pode chegar a US$ 34.974,50 por ano, o equivalente a US$ 2.914,54 por mês para cada trabalhador.
Os mais experientes com graduação superior também costumam ser mais beneficiados neste ponto. De acordo com o estudo, nesta categoria, os profissionais podem receber um adicional bruto de 62% sobre o salário base - o que equivale a US$ 16.637,63 mais por ano.
VulnerabilidadeA qualificação profissional também foi analisada no estudo. Segundo os dados apresentados, no Brasil, cerca de 30% dos jovens entre 15 a 19 anos não estudam. Deste total, 4,3% estão desempregados e 9,7% estão fora do mercado.
A situação é mais grave ainda para os jovens de 15 a 29 anos. De acordo com o levantamento, 26% deles não estudam e não fazem parte da força de trabalho do País – tal fato se mostra um sério impedimento para a busca por oportunidades de trabalho e emprego.
“Brasileiros jovens que não concluíram o Ensino Médio possuem menos chances de encontrar um emprego”, informa o estudo. Tal valor é de menos 21 pontos percentuais.
Fonte: Administradores.com http://goo.gl/83IJX

QUALIDADE DE VIDA – 15 dicas de comportamento para Você exercitar.


01 – PLANEJAMENTO - Planeje á sua semana, o seu dia, e até as próximas oito horas, porém não abra mão de sua liberdade de ação, criatividade e improviso, e acima de tudo não seja dependente de nada e de ninguém e tão pouco faça com que as pessoas sejam dependentes de Você. (“Não acrescente dias à sua vida, mas vida aos seus dias” – Harry Benjamin – Sexólogo alemão, 1885-1986).

02 – CONCENTRAÇÃO – Centralize o seu foco de corpo e alma em cada coisa que vá fazer, procurando faze-la de forma certa e na primeira vez. Não se permita tentar fazer varias coisas ao mesmo tempo. Pesquisas comprovam que quando se tenta fazer inúmeras coisas ao mesmo tempo, nada sai próximo do razoável, além da sua mente ficar em frangalhos. (“Nossa mente nunca está bem a não ser quando está em paz consigo mesma.” – Sêneca – Corduba, Hispânia, 4 a.C. — Roma, 65 d.C. ).

03 – SE DESLIGAR – A cada duas horas de trabalho concentrado, de uma pausa de dez a quinze minutos. Saia para se arejar, tomar uma água e aproveite para falar com pessoas sobre outros assuntos. (“O trabalho mais produtivo é aquele que sai das mãos de uma pessoa alegre.” – Victor Pauchet – médico francês, 1869-1936).

04 – IGNORE O SER INSUBSTITUIVEL – Pense! O que vai acontecer seu Eu der uma parada agora! Saiba que nada vai acontecer e no outro dia, as coisas vão estar como deixou. O mesmo ocorre em qualquer atividade humana seja na vida familiar, entre amigos ou profissional. (“Você está sempre livre para mudar de idéias e escolher um futuro ou um passado diferente.” – Richard Bach – Escritor – E.U.A. - 1936).

05 – IGNORE O SER RESPONSAVEL POR TUDO E POR TODOS – Principalmente quando se trata de fazer com que as pessoas estejam felizes todo o tempo. Claro que dentro do possível Você pode até tentar, mas na grande maioria das vezes são as pessoas que não querem. (“A felicidade não depende do que nos falta, mas do bom uso que fazemos do que temos.” – Thomas Hardy – novelista e poeta inglês – 1840-1928).

06 – SER HUMILDE – Quando precisar de ajuda deixe ao lado o orgulho e a vaidade, peça a aquelas pessoas que Você considera que são neutras, de bom senso e experientes. (“Quando venço, não sou eu quem vence. De certa forma, termino o trabalho de um grupo de pessoas.” – Ayrton Senna – piloto brasileiro – 1960-1994).

07 – DIGA NÃO SEM SE MAGOAR – Você não é obrigado a agradar todas as pessoas e tão pouco se sentir culpado achando que magoou uma ou outra pessoa. Saiba que um “não” bem colocado e no momento certo evita inúmeras e variadas situações. (“È pior cometer uma injustiça do que sofrê-la, porque quem a comete transforma-se num injusto e quem a sofre não.” – Sócrates – filósofo ateniense - (470–399 a.C.).

08 – IDENTIFIQUE QUANDO UMA SITUAÇÃO É REAL OU IMAGINÁRIA – Procure diferencia-los identificando-os rapidamente. Uma das maiores perdas de tempo e ocupação de nossa capacidade mental são perdidos com situações imaginarias ou adivinhações. Utilize o seu tempo e sua mente somente com os fatos e situações reais. (“A primeira regra é manter o espírito tranqüilo. A segunda é enfrentar as coisas de frente e toma-las pelo que realmente são.” – Marcus Aurelius – Romano – 121, imperador romano de 161 a sua morte em 180).

09 – ANSIEDADE E TENSÕES – Ao exercitar os itens acima, com certeza, Você não deverá ter qualquer tipo de tensões e ansiedades, a não ser que se envolva com situações de outras pessoas. Neste caso é melhor observar os diálogos, comportamentos e ações, para se tomar uma posição. (“A arte de escutar é como uma luz que dissipa a escuridão da ignorância.” – Dalai Lama - monge budista Tibetano - Tenzin Gyatso – 1935 –).

10 – VALORIZE O SEU DIA A DIA – Descubra a satisfação e o prazer das coisas simples que a vida oferece como alimentar-se, passear na praça, ouvir as pessoas mais experientes, dormir algumas horas a mais, tomar três banhos ao dia, ler um bom livro, curtir a família e os amigos, porém manter o que foi conquistado na vida pessoal e profissional e ficar atento para novos desafios. (“Plante seu jardim e decore sua alma ao invés de esperar que alguém lhe traga flores” – William Shakespeare – dramaturgo e poeta inglês -1564-1616).

11 – ATUALIZAÇÃO – Num mundo globalizado são de vital importância ser atualizado, informado e usando todas as facilidades que os avanços tecnológicos proporcionam, porém não cometa com Você, a indelicadeza de se tornar um escravo das tecnologias. (“Pessoas inteligentes acreditam em apenas metade do que ouvem. Os perspicazes sabem em que metade deve acreditar.” – Anônimo –).

12 – HARMONIA NO LAR – Nunca transporte qualquer situação ou dificuldades do seu dia a dia para o seu lar. Faça de sua casa uma espécie de refugio espiritual, de alegria, de confraternização e de satisfação em reencontrar todos os dias os seus entes queridos que adoram compartilhar com Você o seu jeito de Ser. (“Um herói é uma pessoa comum que encontra força para perseverar e resistir aos mais esmagadores obstáculos.” – Christopher Reeve –ator de cinema estadunidense - 1952-2004 –).
13 – APRECIE O VERDE DA NATUREZA – Visite a natureza, faça caminhadas e transpire com a umidade das arvores. Caminhe pela praia entre no mar e encha-se de energias que a Mãe natureza proporciona tanto emocional como fisicamente. (“Quem olha para fora, sonha; quem olha para dentro, desperta." - Carl Young - político e advogado canadense – 1941 –).
14 – FLEXIBILIDADE – Toda a rigidez de uma rocha, fica bem numa rocha e jamais nos seres humanos. Para os homens cabe a flexibilidade com firmeza. (“Apenas os sábios e os estúpidos nunca mudam.” – Confúcio –filósofo Chinês - 551 a.C. - 479 a.C.)
15 – FALE COM DEUS – Aprenda a estar em sintonia com Ele, e tudo que está ao seu redor, e em especial dentro do seu coração. Independente do local que Você esteja procure falar e acreditar na existência de um Ser muito maior que nos encaminha e nos conforta. (“Achar que o mundo não tem um criador é o mesmo que afirmar que um dicionário é o resultado de uma explosão numa tipografia.” – Benjamin Franklin – estadunidense – 32º. Presidente E.U.A - 1882-1945).
Por " GEMIR CASSAN - Consultoria de Gestão "
Fonte: Ti Especialistas - http://goo.gl/LbURc

segunda-feira, 5 de setembro de 2011

Realizando uma busca avançada no Google


Pesquisar por algo no Google e não ter como retorno exatamente o que você queria pode trazer algumas horas de trabalho a mais, não é mesmo? Por mais que os algoritmos de busca sejam sempre revisados e busquem de certa forma “adivinhar” o que se passa em sua cabeça, lançar mão de alguns artifícios para que sua busca seja otimizada poupará seu tempo e fará com que você tenha acesso a resultados mais relevantes.
Os mecanismos de buscas contam com operadores para filtro de conteúdo. A maior parte desse filtros, no entanto, pode não interessar e você, caso não seja um praticante de SEO. Contudo alguns são realmente úteis e estão listados abaixo. Realize uma busca simples e depois aplique os filtros para poder ver o quanto os resultados podem sem mais especializados em relação ao que você procura.
-palavra_chave
    Retorna um busca excluindo aquelas em que a palavra chave aparece. Por exemplo, se eu fizer uma busca porcomputaçãoprovavelmente encontrarei na relação dos resultados informaçõe sobre “Ciência dacomputação“. Contudo, se eu fizer uma busca por computação -ciência , os resultados que tem a palavra chave ciência serão omitidos.
    +palavra_chave
      Retorna um busca fazendo uma inclusão forçada de uma palavra chave nos resultados. De maneira análoga ao exemplo anterior, se eu fizer uma busca do tipo computação, terei como retorna uma gama mista de resultados. Caso eu queira filtrar somente os casos em que ciências aparece, e também no estado de MG, realizo uma busca do tipo computação + ciência MG.
      “frase_chave”
        Retorna uma busca em que existam as ocorrências dos termos que estão entre aspas, na ordem e grafia exatas ao que foi inserido. Assim, se você realizar uma busca do tipo “como faser” – sim, com a escrita incorreta da palavra FAZER, verá resultados em que a frase idêntica foi empregada.
        palavras_chave_01 OR palavra_chave_02
          Mostra resultado para pelo menos uma das palavras chave citadas. Faça uma busca por orkut OR msn, por exemplo, e terá como resultado de sua busca, páginas relevantes sobre pelo menos um dos dois temas- nesse caso, como as duas palavras chaves são populares, os dois resultados são apresentados em posição de destaque.
          filetype:tipo
            Retorna as buscas em que o resultado tem o tipo de extensão especificada. Por exemplo, em uma buscafiletype:pdf jquery serão exibidos os conteúdos da palavra chave jquery que tiverem como extensão .pdf. Os tipos de extensão podem ser: PDF, HTML ou HTM, XLS, PPT, DOC
            palavra_chave_01 * palavra_chave_02
              Retorna uma “busca combinada”, ou seja, sendo o * um indicador de “qualquer conteúdo”, retorna resultados em que os termos inicial e final aparecem, independente do que “esteja entre eles”. Realize uma busca do tipoorkut * msn e veja o resultado na prática.
              Se deseja tomar nota de todos os operadores que o Google trabalha, siga o link – em inglês. Os mecanismos de buscas trabalham com tipos de operadores diferentes – apesar de que os listados acima sejam praticamente um padrão. Portanto, um operador encontrado na lista do Google, por exemplo, pode não funcionar no Bing. Além disso, considere que os algoritmos de buscas empregados nos mecanismos não são idênticos, o que trará naturalmente resultados diferentes.
              Lembre-se que uma busca otimizada traz resultados mais relevantes. Utilizar um mecanismo de busca com bons algoritmos é fundamental, mas saber dizer a ele o que você procura, também é!
              Retirado de Eu Faço Programas

              O que exatamente é o Node.js?


              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.

              Recursos

              Aprender
              Obter produtos e tecnologias

              Discutir
              *
              Artigo originalmente publicado em IBM developerWorkshttp://www.ibm.com/developerworks/br/library/os-nodejs/index.html
              Autor: Michael Abernethy, Programador Freelancer. Trabalha como Gerente de Desenvolvimento de Produto para a Optimal Auctions, uma companhia de software de leilões. Seu foco hoje em dia está em Rich Internet Applications e em torná-los ao mesmo tempo mais complexos e mais simples.