Páginas

13 de ago de 2012

Amazon SES ( Simple Email Service )


Continuando com os serviços da Amazon, vou abordar um tema que deve ser um dos pontos de grande interesse para qualquer empresa. O envio de e-mail. Para algumas este assunto é mais importante que para outras, seja qual for o nível de relevância para o modelo de negócio da empresa, e-mail sempre é um assunto complexo e que irrita desenvolvedores e empresas há bastante tempo.

Existem várias formas de enviar emails. Criar uma estrutura de envio própria, instalar e licenciar um serviço de email terceirizado, contratar um serviço de envio especializado. Todos têm seus problemas, sendo um deles, o alto custo. Além disso todos sofrem do mesmo problema, o spam. Regras de palavras, imagens, título, do que pode-se ter no conteúdo e o que não. Todos esses problemas são comuns a qualquer tipo de sistema que enviará emails através da internet. Enviar emails com a certeza que terão 100% de taxa de entrega é uma utopia. Existem métodos, dicas e muitos artigos com dicas sobre. Recomendo esse link com bastante material, em inglês.

Após toda essa explicação, então, porque o Amazon SES?

O Simple Email Service ( Serviço de Email Simples, em tradução livre ) não é somente um serviço, mas sim, uma infraestrutura completa e projetada para o envio otimizado de emails. Atualmente é esse serviço que a própria Amazon utiliza para envio de email de todos os seus serviços, conhecidos e utilizados mundialmente. Essa infraestrutura, segue todos os padrões ISPs com o adicional de existir, com qualidade, há muito tempo no mercado.

Como desenvolvedor, o que muito chamou minha atenção foi o modelo de envio do SES. Fazendo uma chamada à API ou enviando diretamente para o endereço de SMTP do SES você está apto para enviar emails pelo SES, porém, o processo não termina nisso. Após um email ser enviado, a infraestrutura do SES digitaliza esse email e o submete a testes e filtros de spam. Caso o email passe em todos os testes, este será enfileirado para envio, caso contrário, o email, com uma mensagem de erro, será enviado para o Return-Path configurado para devidas correções. A grosso modo, a Amazon não vai se comprometer e enviar um email fora dos padrões, arriscando sua reputação e anos no mercado. (Então, caro spammer, essa não é pra você ¬¬ ).

Dentre os dois modos, escolhi utilizar a API fornecida pela Amazon. Seja por ter considerado-a mais simples e segura, seja por acreditar em um melhor desempenho com a mesma. Após criar uma conta na AWS é criado uma chave e uma chave secreta para utilização da API. Essa API contempla praticamente todos os serviços oferecidos pelo Web Services Amazon. Não está no escopo desse artigo percorrer todas as APIs, vamos nos concentrar no SES, por agora.

Criando o awsSesMailer


A amazon possui uma ótima API com documentação extensa, porém com pequena base de desenvolvimento brasileira ou em português. Sendo assim, decidi criar uma ponte, uma maneira a qual os desenvolvedores estejam mais acostumados. Motivos para tal, são claros. Seja a facilidade de uso, a menor curva de aprendizado e tempo de implantação, assim como, manutenção por outros desenvolvedores que não tiveram introdução e estudo da API completa do SES.

O awsSesMailer é uma classe PHP que extende o SDK disponibilizado pela Amazon na linguagem PHP. A utilização dessa classe é muito simples. O desenvolvedor que já utilizou o conhecido phpMailer encontrará métodos praticamente iguais, em nome como utilização.

A documentação está sendo criada, assim como a classe. Qualquer ajuda é muito bem vinda!

https://github.com/marcosbrasil/awsSesMailer

API e SKD da Amazon para PHP


Quem ficou interessado em conhecer todas as possibilidades do SKD disponibilizado pela Amazon, que abrange não somente o SES mas todos os outros serviços agraciados com a possibilidade de uso via API, segue alguns links bem úteis.

README completo do SDK pela própria Amazon

Repositório oficial da Amazon no github


Leia no Google Drive!

12 de ago de 2012

Notas de um domingo à tarde 12/8

Open Source

Observe os últimos anos, as empresas estão em êxtase pois existem tecnolgias maravilhosas e existe material disponível de como utilizá-las. Com isso, não precisamos reinventar a roda a cada novo projeto, isso poupa tempo, dinheiro, nos deixa mais socais e todos ganham.

Para quem ainda não entendeu, isso tem nome, “Social OpenSource”.

Sou muito feliz por fazer parte de um dos grupos que primeiro começou a se beneficiar dessa ideologia. O software. As empresas desenvolvedoras de software e os próprios desenvolvedores devem muito do que sabem e possuem a essa filosofia. O próprio software deve a essa ideia. Temos computadores utilizando software desenvolvido por várias pessoas ao redor do mundo, o projeto Linux é um grande nome, porém, ele não está só, software em robôs, em grande parte da administração dos governos até mesmo na marinha dos EUA já utilizam essa ideologia.

Existe um lugar para os “opensourcers”, uma rede social, github!

Esse processo está avançado e cada dia estou mais feliz. Empresas que ainda pensam de modo fechado, retrógrado, que possuem visão pequena, estão fadadas a continuarem se enganado, “tapando o sol com peneira”. Empresas são feitas de desenvolvedores, estes, detém o real conhecimento da empresa. Sem o compartilhamento, essas empresas nem existiriam. Desejando ou não, o compartilhamento, o social, já chegou, se instalou e crescerá assistindo as ideias egoístas e idiotas do passado falirem, aos poucos, as empresas que fazem delas sua base.

Leia no Google Docs!

7 de ago de 2012

Entendendo o AWS - Amazon Web Services


Recentemente tive a oportunidade de começar a trabalhar com a plataforma de serviços web da Amazon, o Amazon Web Services ou AWS. A amazon, um dos grandes líderes nos serviços web, iniciou em 2006 sua plataforma Cloud-Computing e acredito que todos conheçam esse fantástico conjunto de ferramentas denominado AWS.

O AWS contempla um leque muito grande, um conjunto de ferramentas capazes de hospedar qualquer aplicação de qualquer tamanho, uso ou complexidade. Até então, parece que simplesmente temos um “super-cloud”, mas, na verdade, o AWS tem um conceito de uso diferente das hospedagens que oferecem máquinas cloud-computing, muito famosas e em crescimento.

Para entendermos os conceitos por trás da plataforma Amazon, vamos, primeiramente, rever qual o conceito de cloud-computing que temos hoje. Acredito que o conceito de cloud-computing esteja bem sólido na mente da maioria dos desenvolvedores, principalmente os web. Cloud-Computing então, de modo simplório, seria uma máquina virtualizada dentro de um servidor de alta performance em algum datacerter de algum lugar. Termos controle total sobre essa máquina é importantíssimo quando temos uma aplicação com um nível de complexidade maior que o comum. Nessa versão virtualizada de máquina, são instalados todos os componentes necessários para o funcionamento da aplicação. Desde um portal com milhões de acessos à um web service para um aplicativo iOS, por exemplo.

O novo conceito introduzido pela Amazon, na verdade, está em suas instâncias computacionais. Com essa nova filosofia, a Amazon divide o trabalho feito por aquela máquina virtualizada em várias instâncias de máquina diferentes. Seria uma modularização dos componentes necessários à aplicação. Cada um dos serviços é entregue através de uma nova instância. Esses módulos entregam um um desempenho computacional muito maior com elevado nível de disponibilidade, sendo esta uma maneira bastante efetiva de se implantar redundância de uma aplicação.

Cada serviço oferecido pela AWS está listado em seu AWS Management Console , onde, com alguns cliques, é possível iniciar instâncias para banco de dados, armazenamento, envio de emails ou mensagens além de gerenciador de DNS, gerenciamento de alarmes. Todas ferramentas muito úteis quando se está lidando com aplicações de alta disponibilidade (meu caso).

A seguir, uma rápida definição dos tipos de instâncias que considero as principais no começo do desenvolvimento de uma plataforma sólida. No meu caso, trata-se de um website com alta disponibilidade, número de acessos considerável e elevado envio de emails.

Amazon Elastic Compute Cloud (Amazon EC2)


O Amazon EC2 é a versão amazon para um servidor Cloud-Computing. Como explicado anteriormente, a Amazon otimizou o conceito de instância, uma instância EC2 pode ser criada e posta e funcionamento em questão de minutos. Agregado a isso, existe o conceito chamado “Elastic-Cloud”, também presente nessas instâncias EC2 da Amazon.

Acesso SSH à instância é imediato e chama atenção as funções de segurança ofertadas pela Amazon para esse tipo de Cloud. A possibilidade de criar grupos de segurança, abrir ou fechar portas TCP ou UDP, criar snapshots dentre outros, entrega uma experiência bastante simples, confortável e segura ao EC2.

Amazon Simple Storage Service (Amazon S3)


O Amazon S3 é um tipo de instância amazon especializada em armazenamento. Com elevado nível de redundância e prevenção à falhas e quebra nos arquivos. Pode ser escolhido um entre os vários datacenters da amazon, melhorando assim latência ou economizando os gastos. Sistema de usuários e chaves de autenticação, garantindo a segurança dos arquivos, inclusive, funcionando de acordo com os protocolos internacionais PCI e HIPAA.

Amazon Relational Database Service (Amazon RDS) e Amazon DynamoDB


Aplicações web, em sua maior parte, sofrem de gargalo em banco de dados. Por ser a entrada de dados bloqueante da aplicação, por ser não tão bem configurado ou, na maioria dos casos, não ser bem utilizado por desenvolvedores, o banco de dados sempre requer uma maior atenção.

A Amazon fornece 2 soluções nessa área, também no formato de instâncias. Para atender demandas de dados relacionais, o Amazon RDS é escalável, seguro, com baixa latência e oferece instâncias dos mais conhecidos gerenciadores de banco de dados, como MySQL, Oracle o SQL Server.

Paralelamente, aplicações de alta velocidade e que já fazem uso de tecnologias NoSQL, podem utilizar o Amazon DynamoDB. A plataforma NoSQL da amazon é muito sólida, rápida e escalável. A Amazon garante que todas instâncias DynamoDB estão estruturadas e armazenadas utilizando SSDs.

Amazon Simple Email Service (Amazon SES)


O Amazon SES, atualmente meu objeto de estudo, é a instância Amazon para envio de emails. Com filtros digitais de conteúdo, o SES garante a mínima perda ou bloqueio dos email pelos filtros ISPs anti-spam. Antes do envio, a amazon utiliza filtros digitais para garantir que o email a ser enviado está dentro dos padrões especificados, garantindo assim, um envio de qualidade com a menor perda possível. No console de administração do Amazon SES, é possível visualizar a quota diária de envios, bem como o número de email enviados, rejeitados ou que não puderam ser entregues.

Amazon CloudFront


O Amazon CloudFront é uma ferramenta feita para servir conteúdo da melhor maneira possível. Também conhecida de CDN ( Content Delivery Network ) este tipo de entrega de conteúdo, geralmente estático, é otimizada através de servidores espalhados ao redor do globo, que identificam a origem da requisição, redirecionando-a para o servidor fisicamente mais próximo. Diminuindo lantência e ping de resposta é obtido grande qualidade e velocidade na entrega desse conteúdo. Se existe alguma parte de missão crítica na aplicação, seria uma boa ideia migrá-la para o CloudFront.

Se a ideia for servir conteúdo como fotos, músicas e vídeos, o CloudFront integra-se perfeitamente com o Amazon S3. Tornando a tarefa de armazenar e disponibilizar este conteúdo, muito mais simples, fácil e de grande qualidade.

Tem mais?


Sim, a Amazon ainda tem mais uma dúzia de outros serviços e configurações que podem moldar-se perfeitamente ao seu negócio. Todas elas estão listadas e detalhadamente explicadas no site da Amazon AWS em http://aws.amazon.com/pt/console/ .

Enquanto escrevo este artigo, estou desenvolvendo uma integração para simplificar o envio de emails utilizando o Amazon SES. Logo estará no meu GitHub. Publicarei explicando e atualizarei este artigo, adicionando o link para o próximo artigo. Vamos olhar mais de perto a API do AWS e, em especial, suas funções para envio de emails.

Leia esse documento no Google Docs!

5 de ago de 2012

Notas de um domingo à tarde 5/8

Criamos consciência de nossa existência não sabendo como a própria existência surgiu e perdemos essa consciência sem nunca sabermos o fim da existência por si. Nossa consciência, o que chamamos vida, o nosso conceito de tempo, é apenas uma fração, uma faísca tão rápida que torna-se difícil nota-la.

Você realmente acha que a importância vem no após? No anterior?

O que veio antes da consciência e o que virá depois, é apenas a existência. Bidirecional e infinita em ambas direções. Teus conceitos, teus preconceitos, teus amores, desamores até mesmo tua percepção de tempo, existe agora, enquanto faísca no infinito.

Viver é uma dádiva, não porque você teve a chance de provar algo a algum ser superior. É uma dádiva porque tivemos a chance de sermos mais uma faísca na linha infinita da existência e termos consciência disso!

Leia isso no Google Docs!

29 de jul de 2012

Adicionando suporte ao git para o SublimeText 2

O SublimeText é um editor robusto, completo, muito leve, rápido e multiplataforma. Bem conhecido no Mac e ganhando espaço dentre usuários linux, o Sublime aproxima-se bastante do conceito IDE.

Pra galera que está usando controle de versão com GIT em seus projetos, vamos ver uma forma bem fácil de utilizar comandos GIT diretamente no Sublime.

Sublime Package Control


Para isso vamos instalar agora, o Sublime Package Control. Um sistema de gerenciamento de pacotes muito parecida com a instalação de plugins do Netbeans ou Eclipse, por exemplo.

1. Entre no console do SublimeText com o atalho ctrl+` ou indo no menu View>Show Console. No console cole o seguinte código:

import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text to finish installation'

2. Espere alguns segundos, após, reinicie o Sublime Text

Sublime Text 2 - Git Plugin


Agora vamos instalar o Sublime Text 2 - Git Plugin que irá adicionar a possibilidade de executarmos comandos git diretamente no Sublime.

1. Abra o Command Pallet do Sublime (Command+Shift+p on OS X, Control+Shift+p on Linux/Windows).

2. Selecione "Package Control: Install Package".

3. Quando Git aparecer, selecione e o plugin será automaticamente instalado.

OBS: Não há necessidade em preocupar-se com atualizações. Segundo a Wiki do plugin, elas serão executadas automaticamente.

Para finalizar reinicie o Sublime e abra a Command Pallet. Comece a digitar algum comando git e veja a lista dos comando disponíveis. Isso pode ser uma boa ajuda para quem não gostar de ter um terminal constantemente aberto.

Eu testei essa instalação no Debian 6 com Sublime Text2 v.2.1

https://github.com/kemayo/sublime-text-2-git/wiki
http://wbond.net/sublime_packages/package_control/usage

21 de jul de 2012

Como evitar que números de telefone sejam convertidos para links do skype

Quando o skype é instalado em alguma máquina, ele automaticamente instala um conversor que busca e transforma números de telefone em links que podem ser facilmente utilizados para discar. Na maioria dos casos, isso é bom. Porém se esse não for o objetivo e você quiser desaparecer com eles existem formas simples de fazer isso.

Forma idiota de fazer isso, mas funciona

Essa forma seria mais uma gambiarra do que realmente a solução. Porém, para efeito de comparação, vou explicá-la aqui. Basicamente consistem que escrever o número de telefone em tags separadas.
Ex.
<address>
       <span>0800</span>
       <span>555-</span>
       <span>555</span>
</address>

Forma recomendada e que funciona melhor ainda!

O skype consegue ler as metas tags de uma página assim como consegue converter os números em link. Adicione a meta tag abaixo no <head> da página e o skype entenderá que não deve converter os números.
Ex.
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />

É somente isso! Espero que ajude, qualquer dúvida ou sugestão de melhoria, fico muito feliz em recebê-las!

4 de jul de 2012

História do PHP

Muitas vezes, nos preocupamos tanto em aprender algo que acabamos negligenciado todos os processos e fatos que ocorreram até que esta se tornasse um sucesso mundial.
Quase sempre quando se vai contar a história de uma determinada linguagem, pensa-se logo em um texto chato, massante e que parece não acrescentar nada realmente útil ao nosso conhecimento. Porém na maioria das vezes percebo que é justamente o contrário, e que o conhecimento e os atos de grandes nomes da história acaba motivando e servindo de inspiração para todos.

Para começar, nada melhor que falar do criador da linguagem, Rasmus Lerdorf, nascido em novembro de 1968 na Groelândia, Rasmus cresceu na Dinamarca e no Canadá. Desde o início sempre foi apaixonado por tecnologia (curiosamente não gostava muito de programação) e em 1993 concluiu sua graduação em Engenharia de Sistemas na Universidade de Waterloo no Canadá.
Certa vez, trabalhando para uma empresa brasileira situada em Mountain View, Califórnia, viu o Mosaic , primeiro navegador web criado no Centro Nacional de Aplicações de Supercomputação (NCSA), em Ilinóis. Logo de cara, Lerdorf percebeu que a web poderia ser uma plataforma alternativa para o desenvolvimento de sistemas. Acreditando nesse mercado potencial, ele resolveu pedir demissão e voltar para o Canadá, onde começou a prestar serviços de consultoria para manter sua renda enquanto desenvolvia algo maior.
Durante 6 meses de trabalho, em 1993 ele se viu desenvolvendo repetidamente os mesmo scripts CGI em linguagem C. Para simplificar se trabalho Rasmus criou uma biblioteca com esses programas, que analisavam o codigo HTML e faziam chamadas a rotinas C. Um dos seus primeiros códigos foi:



<HTML>
  <HEAD>
    <TITLE>My Personal Home Page</TITLE>
  </HEAD>
  <BODY>
    This is my cool page
    <P> And look at my counter<P>
    <IMG SRC="/cgi-bin/counter.pl">
  </BODY>
</HTML>



Em 1994 a ideia inicial era fazer funcionalidades para seu site pessoal, principalmente voltadas para a análise de dados vindo de formulários, e por isso batizou se parser (analisador) de “Personal Home Page / Forms Interpreter” ou PHP/FI.
Além de criar sua biblioteca, Rasmus resolveu também disponibilizar o código-fonte abertamente para que outros programadores pudessem realizar aprimoramentos e correções. Aos poucos a biblioteca de instruções suportadas foi aumentando e todos os códigos eram injetados em meio os comentários HTML:


<HTML>
  <HEAD>
    <TITLE>My Personal Home Page</TITLE>
  </HEAD>
  <BODY>
    <!-- sql database select * from table where user = '$user' -->
  </BODY>
</HTML> 


Em 1995 o parser foi modificado para suportar múltiplas linhas em uma mesma supertag, que passou a ser representado por <? e >.


A partir daí, o PHP/FI começou a crescer pelas mãos do seu fundador e em 1997 foi lançada a versão 2.0, com novos recursos. Note, que até o momento, não se menciona o termo “Linguagem de Programação” pois até então o PHP/FI não era mais do que uma biblioteca de instruções simplificadas que eram analisadas pelo parser criado por Lerdorf.
Mesmo sendo um projeto bem pequeno, o PHP/FI já tinha conseguido conquistar desenvolvedores no mundo inteiro, e aproximadamente 50mil domínios já faziam uso do parser (cerca de 1% da web, na época). A prova disso surgiu em novembro de 1997 quando 2 programadores israelenses descobriram que o código de Lerdorf poderia auxiliar em um projeto da faculdade: criar um site de e-commerce.

Zeev Suraski, Andi Gutmans e outros programadores resolveram utilizar apenas o fundamento utilizado por Lerdorf e reescrever completamente o parser do PHP/FI, transformando-o em uma verdadeira linguagem de programação.
A versão 3.0 surgiu em junho de 1998 e ganhou tantos recursos que o termo “Personal Home Page” ficou muito modesto para representar o real tamanho do projeto. Porém Zeev e Andi não queriam se desvincular da sigla e resolveram manter a sigla PHP.
Historicamente um dos recursos que confere grandiosidade às siglas, é usar acrônimos recursivos. Nesse formato, uma das letras é a própria sigla o que cria uma interessante e infinita referência circular, como nos exemplos:
  • GNU significa GNU is Not Unix
  • BING significa BING Is Not Google
  • VISA significa VISA International Service Association
Sendo assim a sigla PHP ganhou um novo significado: PHP Hypertext Preprocessor o que conferia à linguagem um nome mais intenso. Mas essa alteração do nome não foi a maior mudança pela qual a versão 3.0 passou. A biblioteca ganhou características de linguagem, além de uma API que permitia a construção de extenções, fato que contribuiu para conquistar ainda mais desenvolvedores interessados em criar aprimoramentos para o PHP.
Paralelamente Zeev e Andi começaram a melhorar ainda mais o parser do PHP e criar uma engine que permitisse a execução de scripts ainda mais poderosos. Essa nova engine foi batizada de “Zend Engine” (uma junção de ZEev e aNDi) e trazia novidades, como suporte a múltiplos servidores, sessões HTTP, manipulação segura de inputs e buffer de saída.

Baseado na Zend Engine, em maio de 2000 surgiu o PHP 4.0, com um grande ganho de performance, já que deixava de analisar o script em tempo de execução e gerava uma pre-compilação para um código intermediário, que era interpretado pela Zend Engine. Além disso, a preocupação com segurança foi um dos pontos mais importantes na versão 4.0, já que nesse ponto o PHP já estava instalado em mais de 20% dos servidores da web.


Em 2002 as linguagens orientadas a objeto ganharam força. Pensando em manter o PHP Zeev e Andi resolveram reescrever o núcleo, dando origem a Zend Engine 2.0 que foi a base para o lançamento do PHP5 em 2004

Atualmente Zeev e Andi estão à frente da Zend Technologies, que entre outros projetos desenvolve o Zend Framework, o Zend Studio, e oferece a certificação oficial PHP. A Zend Technologies está situada em Copertino na Califórnia, mas possui filiais em Israel, França, Itália e Alemanha.
Desde 2002 Rasmus Lerdorf trabalha na Yahoo! como engenheiro de infraestrutura e já veio no Brasil em diversas ocasiões inclusive a poucos dias em uma palestra via videostreaming no Serpro, sobre novidades do PHP5.3, ferramentas de debug como o Xdebug e o call_grid entre outros.
Atualmente estamos na versão 5.3.6 (stable) do PHP, sendo que o desenvolvimento do PHP6 já está em andamento há muito tempo. Para essa nova versão existem duas grandes mudanças positivas, agora na versao 6 do PHP, o mesmo dará suporte a Unicode, tornando as aplicações escritas em PHP mais internacionalizáveis, aumentando a flexibilidade do que pode ser escrito com a plataforma. A segunda mudança, positiva, é o aumento de performance do núcleo.Muitas outras mudanças já foram declaradas e estão sob constante discussão nas listas oficiais do PHP. Em um próximo post podermos discuti-las em mais detalhes.
Espero que essa história não o tenha entendiado durante a leitura, e que sirva de inspiração para tocar seus projetos pessoais, mesmo aqueles que já o levaram a perder as esperanças. Não desanimem!

11 de jun de 2012

Qual a diferença entre "Snippet", "Library", "Framework" e "Toolkit"?


Para tentar esclarecer as dúvidas, vamos dar algumas definições:

Snippets


Sempre quando você está desenvolvendo alguma aplicação, acaba por existir pequenos trechos de código interessantes para serem reutilizados. Esses pequenos trechos, são chamados de Snippets. Geralmente são códigos para copiar e colar, simples e geralmente de uso genérico.
Somente pequenos códigos e que não executam função, podem ser chamados de Snippets , quando seu Snippet realizar, por exemplo, um redimensionamento de imagem, você deverá convertê-lo a uma Library.

Library


Geralmente são coleções de funções ou de classes estáticas tornando-as facilmente adaptáveis a qualquer aplicação. Quando a aplicação já está terminada, é possível adicionar uma Library e usá-la sem necessidade de ajustes na aplicação.
Uma Library pode ser grande, ter classes e dependências. Um exemplo de Library é a Zend. Uma Library sempre oferece funcionalidades bastante específicas e poupa linhas de código.

Framework


Um Framework não deve apresentar nenhuma funcionalidade. Ele apenas implementa um determinado padrão aos nomes dos arquivos da aplicação. Adicionalmente, ele pode conter alguns princípios de como organanizar o código de sua aplicação.
Um Framework dita a arquetetura de uma aplicação. Por isso, é muito complexo adotar o uso de um, em uma aplicação já existente. Cada Framework pode carregar princípios, conceitos e padrões únicos, ditados por seus desenvolvedores.
Geralmente, um Framework por si só, fará você escrever bastante código extra.

Toolkit


Usar um Toolkit é um nível acima no desenvolvimento de aplicações. Os Toolkits podem implementar um série de objetos e classes facilitando bastante o desenvolvimento da aplicação.
O conceito surgiu no desenvolvimento de software desktop onde existem vários Toolkits provendo User Interface ou Widgets. O projeto GTK+ é um exemplo conhecido disso.
Geralmente Toolkits farão você economizar bastante na hora de escrever seu código!

Hybrids


Na realidade, a maioria dos pacotes que ajudam o desenvolvimento de software, seja ele web ou não, são formados da composição de dois ou mais tipos. Frameworks como Symfony, Yii, CakePHP, não somente fornecem uma estrutura organizacional, mas também fornecem um conjunto de funções o que nos remete a uma Library, ainda tendo classes completas como helpers o que pode ser caracterizado como Toolkits completos. Facilitando bastante nosso trabalho.

Analisando alguns dos sistemas mais conhecidos, seriam, por exemplo:
jQuery = framework e library, Modo de escrever javascript é alterado e ainda existe um conjunto de algumas funções prontas.
jQuery UI = toolkit, Oferece uma abstração maior e melhorada para UI do jquery.
CodeIgniter = framework com algumas libraries
Zend = Várias Library
Phpclasses.org = Uma vasta coleção de Snippets
Yii = Framework e Toolkit
Facebook API = Library
Smarty = Library

17 de abr de 2012

Baixando e instalando o NodeJS



Afim de ajudar uma galera que está começando com NodeJS, vou demonstrar rapidamente o que é, e como funciona o NodeJS e como instalá-lo corretamente em SOs derivados do Debian (Ubuntu, Mint …)

O que é NodeJS?

NodeJS é uma nova e fascinante plataforma desenvolvida por Ryan Dahl, permitindo que desenvolvedores JavaScript possam criar servidores de alto desempenho , aproveitando a V8 engine do Google Chrome como interpretador JavaScript, e chamadas assíncronas de I/O.

Como funciona?

NodeJS tem seu funcionamento bastante diferente das principais tecnologias web. Nessas tecnologias existe sempre a abertura de threads ou processos como no caso do java que apenas 1 processo abre várias threads. Todo esse processo de abertura de threads torna uma consulta de I/O em disco ou rede, uma consulta bloqueante. Entenda como “bloqueante” a consulta que requer dados do disco ou da rede e como “não bloqueante” aquela consulta que requer dados do cache L1, L2 e memória ram. Com isso existe todo um processo de troca de contexto do SO, como também pilhas de execução, isso tudo consumindo memória e fazendo com que, sobre alta concorrência o servidor comece a enfileirar requisições e posteriormente, cair.

NodeJS resolve o problema da alta concorrência com a utilização de apenas 1 pilha de execução e um Event-loop. Sempre que uma requisição de I/O bloqueante é feita, ela é direcionada para o Event-loop enquanto que servidor volta a ficar idle podendo continuar a atender outras requisições. Assim que a requisição bloqueante tiver sido feita e os dados retornados, é emitido um evento o retornado os dados para o cliente e novamente o servidor volta a ficar idle. Para quem conhece o Nginx, é um processo bastante semelhante. Com isso NodeJS consegue atender muito mais clientes simultaneamente sem enfileirar requisições e sem bloqueá-las também.
Instalando NodeJS em derivados do Debian

Então vamos ao que interessa! Mão na massa!

Estou instalando o NodeJS em um Ubuntu 11.04 mas essa instalação deve funcionar em qualquer derivado do Debian. Em caso de algum problema com alguma distro ou versão mandem um feedback…=)

Primeiro vamos instalar as dependências:
sudo aptitude install git-core curl build-essential openssl libssl-dev
Agora faremos o download da última versão estável do NodeJS e descompacte :
wget http://nodejs.org/dist/node-v0.4.9.tar.gz tar -vzxf node-v0.4.9.tar.gz
Compile o código fonte e espere terminar…
cd node-v0.4.9 ./configure && make && make install
Quando terminar, você já deve ter o NodeJS instalado em sua máquina, para verificarmos a instalação basta buscar a versão no NodeJS como abaixo:
node -v
Esse comando deve retornar a versão instalada do NodeJS. Caso ele retorne o número correspondente a versão que instalamos significa que tudo deu certo e você já está pronto para desenvolver usando NodeJS!

Fica para um próximo post a instalação do repositório de módulos do NodeJS onde podemos encontrar uma grande variedade de módulos, frameworks e drivers de bancos de dados, dentre outras coisas bastante úteis.

Espero que ajude, e mandem um feedback, dúvidas, sugestões, correções… enfim… =D
Até a próxima!

16 de abr de 2012

Facilitando a integração com pagamentos Cielo e Locaweb


Olá! Depois de um longo período sem escrever, volto, e estou muito feliz por estar de volta. =)

Mas vamos deixar de rodeios e sigamos ao que interessa. Hoje vou disponibilizar e dar algumas explicações a respeito de uma classe php que desenvolvi para facilitar a integração de quem pretende usar pagamentos pela internet usando a operadora Cielo e gateway de pagamentos Locaweb.

Isso mesmo, estou utilizando Cielo, por ser, atualmente, uma das empresas que operam o maior número de cartões (nacionais/internacioais) além de ser, também, uma das empresas com a melhor API para nós programadores web trabalharmos. O Gateway Locaweb, bem, eu já trabalho com Locaweb a bastante tempo, considero um ótimo serviço de host e a Cielo exige que o logista utilize um dos Gateways cadastrados e autorizados pela Cielo. Claro que nada te impede de ter teu próprio gateway, bastando seguir as regras do padrão PCI. Nessa página você confere os gatways cadastrados, em processo de cadastramento, e ainda tem informações para montar um gateway próprio.

Então vamos dar uma passada rápida pelos estágios de integração estabelecidos pela cielo. Basicamente a cielo divide sua integração em 3 partes, sendo: 1-Afiliação, 2-Desenvolvimento e 3-Homologação.

1-Afiliação: É quando o estabelecimento entra em contato com a cielo para solicitação dos serviços. É bem fácil através deste link

2-Desenvolvimento: Após seu estabelecimento estar corretamente cadastrado na cielo. É quando a cielo espera que você leia os manuais (que irei disponibilizar no final) e que desenvolva ou instale toda a infraestrutura necessária ao funcionamento dos pagamentos. Caso isso esteja pronto, então deve-se entrar em contato com a cielo para prosseguir direto ao próximo passo, homologação.

3-Homologação: Assim que seu estabelecimento entra em homologação, a cielo irá enviar uma chave para um ambiente de testes. Essa chave ainda não é da sua empresa. Com essa chave você deverá deixar o sistema funcionando para que os técnicos da cielo possam testar seu sistema. Geralmente essa é a fase que demora mais, no máximo 1 ou 2 dias desde que tudo esteja de acordo com o que exige a cielo. Um aviso aos desenvolvedores, o ambiente que é usado para testes geralmente será Internet Explorer 7, então previnam-se!

A locaweb disponibiliza um manual e alguns arquivos de exemplo para o uso da cielo através de seu gateway. Então peguei esses arquivos e meio que “compilei” tudo em uma classe php que disponibilizei no meu github. Existe além da classe um arquivo index e um README com exemplo do uso de todos os métodos da classe, digamos que um sumário do que está nos manuais da Locaweb e Cielo.