No meu último projeto eu estava trabalhando em uma função de confirmação de e-mail. Funciona assim, o usuário se registra no site e depois clica em um link enviado para o e-mail que ele registrou. É relativamente simples de se fazer, o problema é que eu queria passar o e-mail deste usuário na url do link que foi enviado para ele, mas na configuração padrão do CodeIgniter isto não é possível.
No arquivo de configuração do CodeIgniter (system/application/config/config.php) existe uma configuração chamada 'permitted_uri_chars'. O padrão dela deve ser mais ou menos assim:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
Basicamente este parâmetro diz do CodeIgniter quais caracteres são válidos nas urls interpretadas por ele. Para ser possível enviar e-mails na url o @ deve figurar nesta configuração. Você só tem que tomar cuidado para deixar o traço(-) na última posição (não me perguntem porque). Assim enviar e-mails na url pode ser possível com a seguinte configuração:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_@\-';
É isso aí, espero que isso possa ajudá-los.
domingo, 28 de março de 2010
terça-feira, 16 de fevereiro de 2010
Jason Fried (37signals) falando um pouco sobre desenvolvimento de software
Apresentação muito muito boa de Jason Fried onde ele fala sobre como eles tocam o negócio de desenvolvimento de software na 37signals.
A visão dele mostra como eles são autorais ao criar os produtos deles. Ele fala sobre dizer não mais frequentemente que sim (principalmente para as requisições de usuários), software inchados de funcionalidades, como eles não possuem plano de negócios, etc. E tem muitas outras dicas bem legais. Recomendo assistir o vídeo.
Apresentação Jason Fried.
A visão dele mostra como eles são autorais ao criar os produtos deles. Ele fala sobre dizer não mais frequentemente que sim (principalmente para as requisições de usuários), software inchados de funcionalidades, como eles não possuem plano de negócios, etc. E tem muitas outras dicas bem legais. Recomendo assistir o vídeo.
Apresentação Jason Fried.
sábado, 6 de fevereiro de 2010
Tradução - Enviando e-mail via Gmail usando CodeIgniter
Olá galera. Estou trabalhando em novo projeto e nele preciso enviar e-mails. Acontece que por enquanto o código só está na minha máquina de desenvolvimento e eu não tenho um servidor e-mails. Procurando por uma solução achei este artigo do Joel Gascoigne. Nele o Joel ensina como usar a biblioteca de e-mails do CodeIgniter para enviar e-mails usando uma conta gmail, o que é excelente para quando você quer testar funcões de envio de email localmente. Com autorização do autor original aí vai a tradução do artigo dele.
Eu acabei de implementar esta funcionalidade para o OnePage e gostaria de compartilhar no caso das pessoas acharem útil.
Porque enviar e-mail usando o Gmail ao invés de usar uma configuração de um servidor SMTP?
Existem algumas vantagens que vejo fazendo desta forma:
Agora que decidimos que este é o caminho que tomaremos, vamos começar! Na verdade é bem simples, especialmente com o fantástico framework CodeIgniter sua classe Email. Isto deve funcionar bem somente com o PHP regular ou com outros frameworks se você usar os mesmos conceitos demonstrados aqui. E também devo dar créditos para o usuário wrs dos Fórums CodeIgniter, uma vez que minha solução foi baseada no post dele.
Um novo arquivo de configuração - email.php
Coloqueo o código seguinte dentro de um novo arquivo de configuração chamado "email.php" e coloque este arquivo dentro do diretório application/config. Arquivos de configuração nomeados com o mesmo nome de uma biblioteca são incluidos automaticamente, é isso que estamos fazendo aqui.
Tenha certeza de alterar 'seu email gmail aqui' e 'sua senha gmail' apropriadamente.
Enviando email, agora através do Gmail
Agora qualquer e-mail enviado usando a classe Email do CodeIgniter vai na verdade ser enviado da conta Gmail escolhida:
Uma inconveniência deste método
Existe uma inconveniência deste método, que é que você não pode especificar o email "from" para outro email que não seja seu endereço Gmail ou um endereço de e-mail associado com sua conta Gmail. Todo e-mail vai ser enviado da conta de e-mail que você configurou como padrão na sua conta Gmail.
Possível Erro - "Unable to find the socket transport 'ssl' - did you forget to enable it when you configured PHP?"
Se você recebeu este erro, como eu recebi, então você precisa habilitar o SSL na configuração do PHP. Abra o php.ini e encontre uma linha como a seguir:
;extension=php_openssl.dll
Simplesmente remova o ";" e reinicie o Apache e você deve estar pronto. O ";" denota que a linha é um comentário, e removendo isso é habilitado a extensão SSL para o Apache. Crédito - http://www.boringguys.com/2007/07/20/unable-to-find-the-socket-transport-ssl-did-you-forget-to-enable-it-when-you-configured-php/
Isso é tudo!
Eu espero que isso seja útil para algumas pessoas :) Eu uso isso principalmente para densenvolvimento local - é muito bom ser possível testar tudo.
Se você acha meus posts úteis , você deve checar meu site OnePage e me seguir no twitter.
Fim tradução.
É isso aí pessoal, eu testei usando minha conta gmail e funcionou direitinho, qualquer dúvida ou problema comentem aí. Até a próxima.
Eu acabei de implementar esta funcionalidade para o OnePage e gostaria de compartilhar no caso das pessoas acharem útil.
Porque enviar e-mail usando o Gmail ao invés de usar uma configuração de um servidor SMTP?
Existem algumas vantagens que vejo fazendo desta forma:
- A possibilidade de desenvolver localmente e testar o envio de e-mails sem ter o trabalho de configurar um servidor local de e-mail.
- A possibilidade de usar os emails Google Apps para enviar e-mails a partir de e-mails que estão sobre seu próprio domínio.
- A possibilidade de ter referências dos e-mails que você envia usando este método na sua pasta "Enviadas" na sua conta Gmail.
Agora que decidimos que este é o caminho que tomaremos, vamos começar! Na verdade é bem simples, especialmente com o fantástico framework CodeIgniter sua classe Email. Isto deve funcionar bem somente com o PHP regular ou com outros frameworks se você usar os mesmos conceitos demonstrados aqui. E também devo dar créditos para o usuário wrs dos Fórums CodeIgniter, uma vez que minha solução foi baseada no post dele.
Um novo arquivo de configuração - email.php
Coloqueo o código seguinte dentro de um novo arquivo de configuração chamado "email.php" e coloque este arquivo dentro do diretório application/config. Arquivos de configuração nomeados com o mesmo nome de uma biblioteca são incluidos automaticamente, é isso que estamos fazendo aqui.
Tenha certeza de alterar 'seu email gmail aqui' e 'sua senha gmail' apropriadamente.
Enviando email, agora através do Gmail
Agora qualquer e-mail enviado usando a classe Email do CodeIgniter vai na verdade ser enviado da conta Gmail escolhida:
Uma inconveniência deste método
Existe uma inconveniência deste método, que é que você não pode especificar o email "from" para outro email que não seja seu endereço Gmail ou um endereço de e-mail associado com sua conta Gmail. Todo e-mail vai ser enviado da conta de e-mail que você configurou como padrão na sua conta Gmail.
Possível Erro - "Unable to find the socket transport 'ssl' - did you forget to enable it when you configured PHP?"
Se você recebeu este erro, como eu recebi, então você precisa habilitar o SSL na configuração do PHP. Abra o php.ini e encontre uma linha como a seguir:
;extension=php_openssl.dll
Simplesmente remova o ";" e reinicie o Apache e você deve estar pronto. O ";" denota que a linha é um comentário, e removendo isso é habilitado a extensão SSL para o Apache. Crédito - http://www.boringguys.com/2007/07/20/unable-to-find-the-socket-transport-ssl-did-you-forget-to-enable-it-when-you-configured-php/
Isso é tudo!
Eu espero que isso seja útil para algumas pessoas :) Eu uso isso principalmente para densenvolvimento local - é muito bom ser possível testar tudo.
Se você acha meus posts úteis , você deve checar meu site OnePage e me seguir no twitter.
Fim tradução.
É isso aí pessoal, eu testei usando minha conta gmail e funcionou direitinho, qualquer dúvida ou problema comentem aí. Até a próxima.
terça-feira, 2 de fevereiro de 2010
Apresentação do Hip-Hop
Acabei de assistir a apresentação "oficial" do pessoal do Facebook sobre o Hip-Hop, o "transformador de código" como eles disseram. Basicamente o pessoal disse o que já estava neste link Agora tem este outro link para uma página do projeto dentro do site deles. Mas mesmo assim ainda não consegui acessar nada no GitHub.
O Hip-Hop de acordo com a apresentação funciona muito bem o código "mundano", ou seja aquele código mais simples que não usa os recursos "mágicos" do PHP. Coisas estáticas como classes e varáveis se beneficiam muito das otimizações do Hip-Hop. Mas os recursos dinâmicos não obtém o mesmo retorno. Um exemplo interessante que eles mostraram foi a função "function_exists", já que no PHP uma função pode estar declarada antes ou depois da checagem com function_exists. Mas muita coisa dinâmica eles conseguem suportar como extract, chamadas de funções dinâmicas, redeclaração de funções e classes, etc.
Como o apresentador disse, quem vive no mundo de hosts compartilhados (meu caso) não deve tirar muito proveito do Hip-Hop por agora. E pelo que entendi, somente no mundo *nix o Hip-Hop está disponível.
O fluxo de desenvolvimento é basicamente o mesmo existente, você cria um arquivo .php coloca seu código nele testa em um servidor e quando estiver pronto você roda no Hip-Hop e coloca em produção. Eles queriam aproveitar esta característica de rápido desenvolvimento do PHP aliado com o desempenho do C++.
Eles basicamente tiveram que reescrever todas as extensões da linguagem PHP, uma coisa engraçada foi quando um cara perguntou como eles contornaram a questão de que muitas extensões PHP não eram thread-safe e o apresentador respondeu que eles tiveram que "resolver" estes problemas.
Por enquanto é só, quando eu conseguir por as mãos no Hip-Hop quero postar alguma coisa aqui. Valeu!
O Hip-Hop de acordo com a apresentação funciona muito bem o código "mundano", ou seja aquele código mais simples que não usa os recursos "mágicos" do PHP. Coisas estáticas como classes e varáveis se beneficiam muito das otimizações do Hip-Hop. Mas os recursos dinâmicos não obtém o mesmo retorno. Um exemplo interessante que eles mostraram foi a função "function_exists", já que no PHP uma função pode estar declarada antes ou depois da checagem com function_exists. Mas muita coisa dinâmica eles conseguem suportar como extract, chamadas de funções dinâmicas, redeclaração de funções e classes, etc.
Como o apresentador disse, quem vive no mundo de hosts compartilhados (meu caso) não deve tirar muito proveito do Hip-Hop por agora. E pelo que entendi, somente no mundo *nix o Hip-Hop está disponível.
O fluxo de desenvolvimento é basicamente o mesmo existente, você cria um arquivo .php coloca seu código nele testa em um servidor e quando estiver pronto você roda no Hip-Hop e coloca em produção. Eles queriam aproveitar esta característica de rápido desenvolvimento do PHP aliado com o desempenho do C++.
Eles basicamente tiveram que reescrever todas as extensões da linguagem PHP, uma coisa engraçada foi quando um cara perguntou como eles contornaram a questão de que muitas extensões PHP não eram thread-safe e o apresentador respondeu que eles tiveram que "resolver" estes problemas.
Por enquanto é só, quando eu conseguir por as mãos no Hip-Hop quero postar alguma coisa aqui. Valeu!
Saiu! HipHop o compilador PHP feito pelo Facebook
Aí vai o link para o post sobre o projeto, feito por um dos envolvidos. Na verdade não é um compilador, ele transforma seu código PHP em C++ e compila usando o g++, ou seja, é um tradutor PHP->C++.
Agora é tentar testar o cara! Até mais.
Update: O repositório do projeto no GitHub está fora do ar, ou melhor, o GitHub está fora do ar.
Update II: Na página indicada pelo link acima eles vão fazer uma apresentação ao vivo falando do HipHop. No horário brasileiro deve ser as 01:30. Depois desta apresentação o código deve ser liberado.
Agora é tentar testar o cara! Até mais.
Update: O repositório do projeto no GitHub está fora do ar, ou melhor, o GitHub está fora do ar.
Update II: Na página indicada pelo link acima eles vão fazer uma apresentação ao vivo falando do HipHop. No horário brasileiro deve ser as 01:30. Depois desta apresentação o código deve ser liberado.
Facebook pode estar preparando um compilador para a linguagem PHP
Estão dizendo por aí na web que o Facebook deve lançar um novo projeto open-source hoje. E que esse projeto provavelmente é um compilador PHP. Ou seja, você poderia pegar seu código fonte escrito em PHP e transformá-lo em código nativo da máquina. Em teoria isso poderia aumentar muito a velocidade de execução dos códigos da linguagem.
Uma boa parte da base de código do Facebook é escrita em PHP, e com os milhões e milhões de usuários que a rede social tem, um pequeno ganho na velocidade de execução pode significar muita coisa. Vou ficar de olho na página de projetos open-source deles a partir de hoje, talvez sai alguma coisa lá.
Uma boa parte da base de código do Facebook é escrita em PHP, e com os milhões e milhões de usuários que a rede social tem, um pequeno ganho na velocidade de execução pode significar muita coisa. Vou ficar de olho na página de projetos open-source deles a partir de hoje, talvez sai alguma coisa lá.
sábado, 23 de janeiro de 2010
O PHP e suas surpresas
Graças a um erro em uma função criada por mim, meu site estava com um bug constrangedor, pelo menos agora já está corrigido.
O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:
$nome = "Maria";
echo $nome[0]; // escreve M
Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:
$nome = "Maria";
echo $nome['valor']; //????
Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.
Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.
O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:
$nome = "Maria";
echo $nome[0]; // escreve M
Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:
$nome = "Maria";
echo $nome['valor']; //????
Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.
Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.
Assinar:
Postagens (Atom)