August 27th, 2011
CakePHP, Experimentos, PHP
Lucas Ferreira
3 comments
Há algum tempo a Amazon lançou um serviço muito interessante relacionado ao envio de e-mail em grande escala com um custo bem baixo. Este serviço chamado Amazon SES fornece uma boa API para envio de e-mails.
Um dos frameworks que mais utilizo em minha rotina de trabalho é o CakePHP, um ótimo framework MVC escrito em PHP.
O CakePHP possui um componente para envio de e-mails sobre a função mail do PHP ou por SMTP.
Como estava querendo testar o serviço da AWS de envio de e-mails resolvi criar uma solução compatível com o CakePHP.
Criei um novo componente que estende o EmailComponent chamado EmailServiceComponent para ter as habilidades de operar com o Amazon SES.
O código fonte deste componente pode ser baixado no projeto que crie no GitHub, clicando aqui.
Como utilizar:
Primeiro devemos baixar o Amazon SDK PHP, neste link.
Descompacte o arquivo na pasta vendors de sua aplicação, e renomeie a pasta principal da SDK para aws-sdk.
Logo após renomeie o arquivo config-sample.inc.php para config.inc.php e insira suas credenciais de acesso nele.
Uma vez a SDK estando configurada e devidamente colocada em seu projeto, baixe o EmailServiceComponent disponível aqui e coloque em sua pasta controllers/components.
Quando for necessário enviar um e-mail usando o Amazon SES basta carregar o componente no controller:
var $components = array('EmailService');
E habilitar o aws_ses como função padrão para envio de e-mails:
$this->EmailService->delivery = 'aws_ses'; // ou 'aws_ses_raw' se você desejar enviar um e-mail complexo ou com anexos...
Depois disso é só seguir o procedimento padrão de envio de e-mails do Cake, só lembrando de sempre usar EmailService ao invés de Email.
Se tiverem dúvidas deixem no espaço de comentários deste post.
Tags: amazon, CakePHP, component, ses
October 17th, 2010
Experimentos, Google App Engine, Internet, WebDev
Lucas Ferreira
3 comments
Após um pequeno hiato de 2 anos estou de volta no Blog 
Nos últimos meses venho estudando Python focado no Google App Engine. Para quem não conhece o Google App Engine ou GAE é um serviço de desenvolvimento e hospedagem baseado em Python ou Java cedido pelo Google para uso dos desenvolvedores em geral. Ou como eles mesmos definem:
“O Google App Engine oferece um conjunto completo de desenvolvimento que utiliza tecnologias familiares para criar e hospedar aplicativos da web.“
Estou achando as possibilidades de desenvolvimento em Python muito interessante, em especial com a facilidade de desenvolver algo para o GAE e em como hospedar lá.
Meu primeiro “projetinho” público hosteado e desenvolvido para o GAE sobre Python é o Twitter Avatar Image Cache ou Twitavatar. É um serviço bem simples com apenas uma finalidade (inicialmente) que é acessar de forma fácil a imagem de avatar de um usuário do twitter.
A forma de se utilizar é a mais direta possível, confira:
http://twitavatar.appspot.com/COLOQUE_O_USUARIO_DO_TWITTER_AQUI.png
Normalmente um avatar do twitter têm uma URL complexa baseada nos servidores de armazenagem de arquivo deles. Resumindo seria pegar uma URL de avatar assim:
http://a1.twimg.com/profile_images/1124040897/at-twitter_reasonably_small.png
E deixa-la assim:
http://twitavatar.appspot.com/twitter.png
E você ainda têm a vantagem que se o usuário mudar sua imagem de exibição o seu link estará automaticamente atualizado já que ele se baseia no usuário do twitter e não no nome do arquivo de imagem.
Simples não?
Espero que este não seja o meu único projeto no GAE, já estou com outras idéias legais e depois contarei as novidades por aqui.
Abs!
Tags: gae, python, WebDev
December 2nd, 2008
Experimentos, Flash, JavaScript, WebDev
Lucas Ferreira
71 comments
Olá,
Devido a grande quantidade comentários em um post sobre este mesmo assunto, resolvi dar uma revisada na técnica.
Fato que eu prefiro e utilizo em meus projetos o Shadowbox por ser muito mais completo, extensível, adaptável e ainda por cima funciona com jQuery. Se alguém quiser saber como operar Flash + Shadowbox confira aqui.
Porém neste post iremos trabalhar novamente com Lightbox, dado a quantidade de dúvidas e também por ser mais popular.
Abordarei inicialmente e como sempre com ActionScript 2.0 porém farei também em outro post como utilizar a solução em AS 3.0.
A idéia é a mesma, baixa-se o script do Lightbox, descompacte-o na pasta de seu projeto e depois é só ligar o flash ao mesmo.
O objetivo final é termos uma ação semelhante a este exemplo que disponibilizarei no final do artigo. Não abordarei, assim como no outro post, como instalar o Lightbox em sua página HTML, dado que isto está na página do script.
Mãos a obra
Um dos problemas mais relatados em comentários no artigo/post anterior é a questão de que as últimas versões do Lightbox estarem com uma ação embutida na sua execução que esconde os SWFs da página, o que para muitos esteticamente não é interessante.
É aí que entra o foco principal desta nova postagem. Eu fiz um hack em JavaScript para o Lightbox afim de evitar essa ação de esconder os SWFs o máximo possível e também facilitar a chamada de ação junto ao flash. Este script pode ser baixado aqui e deverá ser carregado junto com o seu HTML. Desde que o SWF tenha fundo(wmode) transparent ou opaque, e com excessão de versões mais antigas do FlashPlayer em ambiente linux, no restante dos sistemas operacionais e navegadores não terá problema algum com SWFs.
Além deste pequeno hack, criei uma função para auxiliar a chamada do Lightbox pelo Flash, confiram:
ACTIONSCRIPT:
-
//lightBox function for call JavaScript...
-
function Lightbox(src, title)
-
{
-
if(typeof src == "string") src = [src];
-
if(typeof title == "string") title = [title];
-
if(typeof title == "undefined") title = [];
-
-
function addSlashes(str) { return "'" + escape(str) + "'"; }
-
-
if(flash.external.ExternalInterface && flash.external.ExternalInterface.available)
-
{
-
flash.external.ExternalInterface.call("Lightbox.start", src, title);
-
}
-
else
-
{
-
for(var i=0; i<src.length; i++) src[i] = addSlashes(src[i]);
-
for(var i=0; i<title.length; i++) title[i] = addSlashes(title[i]);
-
-
getURL("javascript:Lightbox.start([" + src.join(",") + "],[" + title.join(",") + "]);void(0);");
-
}
-
}
Com essa função podemos chamar a execução com maior facilidade, também implementei a possibilidade abrir um grupo de fotos por vez, aproveitando dos recursos de galeria do Lightbox. Coloquei a possibilidade de colocar uma legenda/title por foto. Ficou bem mais completo que a nossa primeira tentativa.
Copie a função acima e coloque dentro de seu arquivo .fla e depois basta colocar uma chamada para função Lightbox em seu objeto para que a mágica aconteça. Exemplo:
ACTIONSCRIPT:
-
bt1.onRelease = function()
-
{
-
Lightbox(['images/image-1.jpg', 'images/thumb-1.jpg'], ['Legend Test', 'çóh?']);
-
};
No código acima, estamos setando uma ação de clique/release a um botão chamado bt1. Ao clicar, será aberto um grupo de imagens(array de valores no primeiro argumento), com suas respectivas legendas(array de valores do segundo argumento).
Finalizando
Então é isso pessoal, creio que agora ficou redondinho. Se alguém achar algum bug ou quiser testar melhor no Internet Explorer(só dei uma testada assim por cima :P) fiquem a vontade.
Para baixar um exemplo completo de utilização junto com todos os scripts clique aqui.
Abraços!
August 14th, 2008
AJAX, Internet, JavaScript, Tutoriais, jQuery
Lucas Ferreira
no comments
Bom,
Quero ver se tiro um tempinho para falar sobre a super biblioteca de funções JavaScript chamada jQuery, que muda/facilita a vida de qualquer desenvolvedor web, chega até a ser um caso de depedencia
Pois bem, vo indicar aos leitores dois belos tutoriais para iniciantes, overview geral mesmo:
Usando jQuery na prática do Nando Vieira
e este Guia completo sobre jQuery para iniciantes que vi no site Pinceladas da Web
Abracetas.. 
June 1st, 2008
Experimentos, Internet, O cotidiano do dia-a-dia, PHP, WebDev
Lucas Ferreira
no comments
Olá =D
Vou abrir este pequeno parênteses aqui para avisar sobre a minha contribuição no Projeto BoletoPHP.
Ajudei o projeto desenvolvendo o boleto do banco BESC, confiram lá.
E veeeva o open source!
Abracetas... 
February 11th, 2008
Uncategorized
Lucas Ferreira
45 comments
Opa?
Nesta vida de desenvolvedor web alguns desafio tendem a surgir em nosso caminho, um deles sem dúvida será este que abordarei aqui, de forma rápida de direta, o Cálculo de Frete dos Correios. Com base em cep de origem, cep de destino e o peso da encomenda, obteremos o valor do SEDEX. Recurso muito utilizado em lojas virtuais e sistemas com delivery na web =)
Algo que muitas pessoas não sabem, é que os Correios disponibilizam um serviço de consulta web, com resposta em XML(as possibilidades iniciam aí :P), de forma simples, acessado via URL, sem webservices, ai vai um exemplo deste acesso:
http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=xml&servico=40010& cepOrigem=17012-350&cepDestino=01102-000&peso=0.31
Percebam que ao acessarmos o endereço acima, obtemos um XML simples, com todos os dados necessários para a consulta. Tudo que devemos fazer é completar a URL acima com nossos dados, da seguinte forma:
servico=40010 é sedex, outros serviços tem que procurar no site dos correios
cepOrigem=17012-350 -> CEP de Origem (do teu cliente no caso)
cepDestino=88818-400 -> de quem vai receber
peso=0.62 -> peso da encomenda
Uma vez com nossa requisição devidamente configurada, basta tratarmos o XML da forma mais interessante para seu projeto. Javascript, Flash, PHP, Java, Ruby on Rails e por aí vai =P
Neste caso, criaremos uma função de exemplo em PHP para tratarmos esta resposta, e obtermos os dados de forma fácil e direta. Aí vai ela "mastigadinha":
PHP:
-
<?php
-
-
function getSEDEX($cepOrigem = "88818-520", $cepDestino = "88818-400", $peso = 0.5)
-
{
-
$urlCorreios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=xml&servico=40010&cepOrigem=%s&cepDestino=%s&peso=%s";
-
-
$urlCorreios =
sprintf($urlCorreios,
$cepOrigem,
$cepDestino,
$peso);
-
-
//carregando url dos correios...
-
//caso o seu servidor não permita o uso da função file para url's externas
-
//recomenda-se a utilização de CURL - http://www.php.net/manual/en/ref.curl.php
-
$carrega =
file($urlCorreios) or
die("Problemas em obter os dados dos correios");
-
-
//tratando string xml obtida. Removendo espaços e linhas para facilitar...
-
-
-
if(strlen($conteudo) <
1) return false;
-
-
//informações de origem tratadas com RegExp...
-
preg_match_all("/<uf_origem>(.+)<\/uf_origem>/",
$conteudo,
$uf_origem);
-
preg_match_all("/<local_origem>(.+)<\/local_origem>/",
$conteudo,
$local_origem);
-
preg_match_all("/<cep_origem>(.+)<\/cep_origem>/",
$conteudo,
$cep_origem);
-
-
//informações de destino tratadas com RegExp...
-
preg_match_all("/<uf_destino>(.+)<\/uf_destino>/",
$conteudo,
$uf_destino);
-
preg_match_all("/<local_destino>(.+)<\/local_destino>/",
$conteudo,
$local_destino);
-
preg_match_all("/<cep_destino>(.+)<\/cep_destino>/",
$conteudo,
$cep_destino);
-
-
//informações sobre a encomenda tratadas com RegExp...
-
-
preg_match_all("/<preco_postal>(.+)<\/preco_postal>/",
$conteudo,
$preco_postal);
-
-
//objeto contendo as informações sobre o frete...
-
-
"uf_origem" => $uf_origem[1][0],
-
"local_origem" => $local_origem[1][0],
-
"cep_origem" => $cep_origem[1][0],
-
"uf_destino" => $uf_destino[1][0],
-
"local_destino" => $local_destino[1][0],
-
"cep_destino" => $cep_destino[1][0],
-
-
"valor" =>
floatval($preco_postal[1][0])
-
);
-
-
return $sedex;
-
}
-
-
//informações processadas. Cep de Origem, Cep destino, Peso...
-
$sedex = getSEDEX("88818-520", "88818-400", 0.750);
-
-
//enfim exibimos o valor de nossa encomenda...
-
echo "R$ " .
number_format($sedex["valor"],
2,
",",
",");
//valor do sedex, já formatado em reais...
-
-
?>
Uma vez com a função getSEDEX executada, obtemos todos os dados tratado no retorno da mesma.
Fácil não?
Abracetas...
August 27th, 2007
Uncategorized
Lucas Ferreira
2 comments
Opa,
Blog morto é pros fracos
Também criei um, mais ainda não descobrir muito bem pra que que server, mais o lance no talk é massa =D
http://twitter.com/lucasferreira

March 29th, 2007
Experimentos, Flash, JavaScript, O cotidiano do dia-a-dia, Tutoriais, WebDev
Lucas Ferreira
67 comments
UPDATE: Atenção povo, fiz um novo artigo sobre este mesmo assunto, desta vez melhorado, cliquem aqui para acompanhar.
Opa?
Acho que a maioria dos desenvolvedores web já conhecem o Lightbox. É um efeitinho super supimpa (tirando o peso) de ampliar imagens, baseado em Javascript e CSS.
Pois bem, devido ao fato de ser JS e CSS, muita gente fica na mão se deseja utilizar o recurso no Flash, contando que estejam sem tempo ou sem conhecimento, para desenvolver tal efeito 100% Flash. Aí que entra a integração que apresentarei aqui
Lightbox + Flash
Para utilizar o LightBox acionado a partir do flash, primeiro você deve fazer o de praxe como apresentado neste link(carregar os arquivos .js e .css, as imagens e etc), deixar tudo certinho como se fosse usar o LightBox normalmente, isso tudo você acerta no HTML que receberá o SWF(Flash) com a ação em questão.
Depois coloque a seguinte função JavaScript(entre as tags SCRIPT) no mesmo HTML:
JavaScript:
-
function showFoto(src)
-
{
-
//criando um link falso, para o LightBox captar as informações
-
var a_false = document.createElement("A");
-
a_false.rel = "lightbox";
-
a_false.href = src;
-
//chamando a função do lightbox responsável pelo início das ações
-
myLightbox.start(a_false);
-
//anulando o link
-
a_false = null;
-
}
E no Flash, em nosso botão, chamamos na ação onRelease, o seguinte AS:
ACTIONSCRIPT:
-
getURL("javascript:showFoto('MINHAFOTOAQUI.jpg');", "_self");
Agora, é só publicar, botar o SWF no html preparado e só alegria =D
Obs.: Para o efeito ficar completo, é necessário o SWF estar com fundo transparent(wmode=transparent) ou opaco(wmode=opaque), para que o lightbox não fique por trás do SWF.
[update]
Na ultima versão do LightBox, colocaram uma função para esconder os SWFs da página na hora do efeito, logo quem notar que seu SWF sumiu do fundo ao aciona-lo, já sabe o porque :S
Neste link http://www.huddletogether.com/projects/lightbox2/#download tem o changelog da versão, com as mudanças que teve.
Abracetas... 