Servidor PHP com Winginx

Sempre usei o EasyPHP como meu servidor de PHP, mas como precisei de mais, achei e analisei o Winginx, que é um complexo servidor web local no Windows para desenvolver em PHP e Node.js usando bancos de dados MySQL, MongoDB, Redis, memcached.
Um excelente substituto que cobre a atual necessidade da minha aplicação que é o Node, MongoDB e memcached, além de outros serviços. Substituindo com maestria o EasyPHP .

Com isso, possivelmente passarei a usar a Digital Ocean para as cloud applications.

Então fica a dica 😉

Yeoman para seu workflow de projetos front-end

Yeoman (yo) é uma ferramenta scaffolding com foco em front-end para automatizar build e gerenciar dependências. Utiliza o Grunt como builder e Bower  como package manager.

O fluxo de trabalho é composto por três ferramentas para melhorar a produtividade e satisfação na construção de um aplicativo web:

  •      Yo scaffolding é um novo aplicativo, escrevendo sua configuração no Grunt e puxando em tarefas relevantes que você pode precisar para sua construção.
  •      Grunt é usado para construir, visualizar e testar o seu projeto, graças à ajuda de tarefas com curadoria pela equipe Yeoman e grunt-contrib.
  •      Bower é usado para gerenciamento de dependência, de modo que você não precisa mais fazer o download manualmente e gerenciar seus scripts.

Todas as três ferramentas são desenvolvidas e mantidas separadamente, mas funcionam bem juntos, como parte de um fluxo de trabalho prescrito para mantê-lo eficaz.

yeoman_edersonmelo

Yeoman também:

  • Compila CoffeScript e Compass automaticamente
  • Verifica JavaScript automaticamente com JSHint
  • Minifica e faz o merge de seus scripts
  • Otimiza suas imagens
  • Faz LiveReload de sua página com um preview server local
  • Realiza testes unitários
  • Realiza scaffolding
  • Permite utilizar o PhantomJS Teste Unitário.

Instalação

Com o  Node.js devidamente instalado antes de utilizar o Yeoman, basta seguir o passo para sua instalação direta:

npm install -g yo

Grunt e o Bower também serão instalados.

 

Leituras:

http://www.edersonmelo.com/node-js/

http://www.edersonmelo.com/node-js-sim-ou-nao/

 

noSQL

Primeiramente utilizado em 1998 o termo noSQL surgiu como o nome de um banco de dados relacional de código aberto que não possuía uma interface SQL. Seu autor, Carlo Strozzi, alega que o movimento noSQL “é completamente distinto do modelo relacional e portanto deveria ser mais apropriadamente chamado “NoREL” ou algo que produzisse o mesmo efeito”(segundo wiki).

O termo noSQL foi re-introduzido no início de 2009 por um funcionário do Rackspace, Eric Evans, quando Johan Oskarsson da Last.fm queria organizar um evento para discutir bancos de dados open source distribuídos. O nome — uma tentativa de descrever o surgimento de um número crescente de banco de dados não relacionais.

nosql-edersonmelo

Arquitetura noSQL

Modernas base de dados relacionais parecem ter uma limitação a transações com grandes volumes de dados e cargas de trabalhos, incluindo o dimensionamento do conjuntos destes dados.

NoSQL provén interfaces muito simples, como arrays associativos ou pares chave-valor (Key-Value pairs).
Os bancos de dados que estão sob estes rótulos não podem exigir esquemas de tabela fixa e, geralmente, não suportam instruções e operações de junção SQL e suas operações são restritas a itens individuais.

MongoDB

Tomando como exemplo uma operação no MongoDB, o equivalente aos registros são os documentos, que utilizam a sintaxe JSON. No item abaixo vamos criar um “documento” chamado Ederson com 3 atributos(nome, sobreNome e cidade), criado de forma muito simples.

Ederson = {

nome: “Ederson”,

sobreNome: “Melo”,

cidade: “Canoas/RS”

}

 

Para armazena-lo em banco, bastaria executar: db.nomeDoMeuBanco.save(Ederson)
Neste mesmo banco poderíamos armazenar documento abaixo. Que é completamente diferente do documento anteriormente criado. E que será da mesma forma aceito.

Pedro = {
nome: “Pedro”,
sobreNome: “Haack”,
cidade: “Canoas/RS”,
caes:[{nome:”Lilica”, raça:”vira-lata”}, {nome:”Scott”, raça:”Labrador”}]}
}

Para salvar: db.nomeDoMeuBanco.save(Pedro)

Temos diversas formas de utilização para o noSQL:

  • Gerenciamento de grandes streams de dados não-transicionais: logs Apache, logs de aplicativos, logs MySQL, clickstreams etc.
  • Sincronização de dados online e offline. Este é um nicho que CouchDB segmentou.
  • Rápido tempo de reposta em todos os carregamentos.
  • Evite joins pesados quando o carregamento da query se tornar
  • muito grande para RDBMS.
  • Sistemas simples de tempo real no quais a baixa latência é crítica.

couchDB_black

Mesmo parecendo muito simples e interessante é importante entender que o noSQL não elimina o bancos de dados relacionais, mas coexiste como uma alternativa.

Veja também a entrevista brilhante com o criador do SQL, Michael “Monty” Widenius.
Conduzido por Dmitry Sotnikov, COO da Jelastic.:http://blog.websolute.com.br/entenda-melhor-o-nosql-e-o-big-data/

Fonte(s):

http://pt.wikipedia.org/wiki/NoSQL

http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html

Node.js, sim ou não?

Node, para que ele serve e para que ele é bom ou não.

Para o que ele é bom
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.

Seguindo os textos(copiados das fontes citadas abaixo), que muito bem exemplificam.

Para que ele serve:

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.

nodejs-logo

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.

Technically-Speaking-Node-Js
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).

 

Fonte(s):

http://nodejs.org

http://nodebr.com

http://www.ibm.com/developerworks/br/library/os-nodejs/

Node.js

Continuando a montagem e testes com ambientes e novas arquiteturas, uma me chama muito a atenção, Node.js.

Node.js é uma plataforma construída sobre o motor JavaScript do Google Chrome (JavaScript V8) para facilmente construir aplicações de rede rápidas e escaláveis. Node.js usa um modelo de I/O direcionada a evento não bloqueante que o torna leve e eficiente, ideal para aplicações em tempo real com troca intensa de dados através de dispositivos distribuídos.

nodejs-logo

Na JSConf 2009 Europeia, um programador jovem chamado Ryan Dahl, apresentou um projeto em que estava trabalhando. Este projeto era uma plataforma que combinava a máquina virtual JavaScript V8 da Google e um laço de eventos. O projeto tinha apontava para uma direção diferente das outras plataformas em JavaScript que rodam no servidor: todos I/O primitivos são orientado a evento. Aproveitando o poder e a simplicidade do Javascript, isso tornou tarefas difíceis de escrever aplicações assíncronas em tarefas fáceis.

Como o Node funciona

O Node roda em uma JavaScript V8 VM. JavaScript no lado do servidor pode ser um conceito novo para todos que trabalharam exclusivamente com o JavaScript no lado do cliente, mas a ideia em si não é tão absurda, eu diria, nem um pouco.

O que é V8?

O motor JavaScript V8 é o motor que a Google usa com seu navegador Chrome. Poucas pessoas pensam sobre o que realmente acontece com o JavaScript no lado do cliente. Bem, a engine JavaScript realmente interpreta o código e o executa. Com o V8 a Google criou um ultra-rápido interpretador escrito em C++, com um outro aspecto único: você pode baixar a engine e incorporá-la em qualquer aplicação desejada. Isso não está restrito em rodar em um navegador. Para que criar uma nova linguagem quando há uma boa solução já disponível?

 

Fonte(s):

http://nodejs.org

http://nodebr.com

http://www.ibm.com/developerworks/br/library/os-nodejs/