Mudança de Planos 1

Posted by JoEh on July 31, 2008

Decidi que não vou mais migrar meu blog para o Mephisto, vou fazer melhor, vou desenvolver meu próprio blog, obviamente, usando Ruby on Rails.

Vou fazer isso por que acho que para mim que não trabalho diariamente com Rails, é uma forma de aprender mais, e é muito melhor do que pegar alguma coisa pronta.

Ele já está quase pronto, daqui a pouco esse blog estará de cara nova, aguardem! :)

Colocando mais Ruby na minha vida 1

Posted by JoEh on July 15, 2008

Pronto, está decidido, tenho que tomar vergonha na cara e começar a me afundar no Ruby, não posso ficar na metade do caminho, indo para um lado e para outro, e para começar, vou migrar o esse blog para mephisto, usando edge :) Meu próximo post será quando a migração estiver completa, reportando tudo o que aconteceu.

até!

Atualizações na Engine de Template

Posted by JoEh on July 14, 2008

Hoje liberei algumas melhorias que fiz na engine de template que eu criei para PHP5, ela é bem simples, e não veio para ser nada muito elaborado no que diz respeito a engine de templates em um modo geral, na verdade, ela partiu de uma necessidade minha de poder restringir os programadores da minha equipe de programarem de qualquer jeito, ou do jeito que estavam acostumados, sem perder o poder da própria sintaxe da linguagem, e ainda facilitando a manutenção dos projetos por qualquer outro programador, seja ele um veterano ou um novo membro.

O projeto está hospedado no github, pra variar, e está aceitando contribuições, então sinta-se a vontade para criticar, questionar, parabenizar e obviamente, contribuir. :)

Eu ainda preciso documentar ele melhor, essa parte eu fiz meio na corrida, e foi um dos meus primeiros projetos no github, então ainda estava meio perdido no começo do meu aprendizado.

Então, dois trechos de código para exemplificar: o primeiro exemplo é um código válido

<p>
<?
    if($loggedIn) {
        echo 'User logged in'
    }
    else {
        echo 'User not logged in';
    }
    ?>
</p>

o segundo não

<p>
    <? if($loggedIn) { ?>
        User logged in
    <? } else { ?>
        User not logged in
    <? } ?>
</p>

A idéia é basicamente a seguinte: As tags PHP devem obrigatoriamente abrir e fechar na mesma linha, se não fechar, um erro de sintaxe é lançado e o script não roda. Também existe a possibilidade de criação de helpers, para facilitar o trabalho com os templates, o framework virá com alguns prontos - em desenvolvimento ainda.

Aplicação usando Shoes 2

Posted by JoEh on July 04, 2008

Criei ontem de noite um aplicação de teste para traduzir palavras/frases usando Ruby, Shoes e Google AJAX Language API, ela é bem simples, não tem nada que não foi feito por aí, mas futuramente vou colocar a opção de salvar outras palavras/frases em um banco de dados local, usando SQLite provavelmente, já que estou reforcando meus estudos em inglês, acho que isto vai me ajudar bastante ;)

Mas nem tudo são flores nessa vida de programador, passei um trabalhinho para poder rodar o Shoes com as gems que eu usei, ele não funciona com gems instaladas usando gem install, por que ele tem uma espécie de “interpretador” próprio ou coisa parecida. Depois de instalar o Shoes tive que colocar as gems (json, rest-client) e a lib rexml dentro da Shoes-land - como vi uns chamando por ai.

Fiz um passo a passo de como rodar. Isso também serve para outras apps feitas usando Shoes que você queira rodar, não apenas para este projeto.

Copie as gems/libs - verifique antes se os diretórios são os mesmos

json - usei json_pure por que a outra é nativa, então não sei se funcionaria

sudo cp -R /usr/lib/ruby/gems/1.8/gems/json_pure-1.1.2/lib/json* /usr/local/lib/shoes/ruby/lib/

rest-client

sudo cp /usr/lib/ruby/gems/1.8/gems/rest-client-0.5.1/lib/* /usr/local/lib/shoes/ruby/lib/

rexml

sudo cp -R /usr/lib/ruby/1.8/rexml /usr/local/lib/shoes/ruby/lib/

Feito isso, clone o projeto

git clone git://github.com/rafaelss/shoes-translator.git

e quando terminar execute

cd shoes-translator
shoes translator.rb

Kohana PHP Framework

Posted by JoEh on June 25, 2008

Estou testando o Kohana, framework para PHP5, e ele me surprendeu bastante, conheci ele testando o CodeIgniter, que pelo que puder notar da comunidade, tem alguns problemas de releases, que demoram um pouco e tal.

O fato que mais me agradou nele é que ele foi feito para funcionar somente no PHP5, tem um sistema que permite criar extensões do core, de helpers muito bem feito, e sem ficar lento, pelo contrário, ele é muito rápido.

Na verdade ele tem só um problema, não usa E_STRICT por padrão para tratamento de erros, mas isso é barbada de resolver ;)

Template Engine para PHP5 3

Posted by JoEh on May 27, 2008

Disponibilizei ontem um projeto de Template Engine para PHP no github, quem quiser contribuir sinta-se a vontade :)

A idéia é fazer algo bem simples, onde a sintaxe usada é a do próprio PHP, porém com algumas restrições para tentar manter o código mais organizado possível. O projeto não está pronto ainda, faz algum tempo que tenho essa idéia mas só coloquei em prática no final de semana passado.

Então como eu já disse, quem quiser contribuir, não se acanhe, acesse o projeto no github, baixe o projeto, entre em contato comigo, entenda bem a idéia, implemente a suas e me mande um pull request para que elas sejam incorporadas no projeto.

Ah, vale lembrar que para que a contribuição seja aceita, ela precisa estar acompanhada de testes ;)

Curl wrapper para PHP5

Posted by JoEh on May 25, 2008

Sexta-feira passada (23/05) disponibilizei no github um wrapper para cURL utilizando Fluent Interface, para usar é muito fácil:

require_once "lib/Joeh/Net/Curl.php";
$curl = new Joeh_Net_Curl("http://www.joeh.com.br/blog/");
$curl
    ->followLocation(true)
    ->userAgent("MyBrowser 0.1")
    ->referer("http://www.mysite.com.br/");
$response = $curl->execute();

if($response->statusCode() == 200) {
    echo "Welcome to Joeh's Blog\n";
}
else {
    echo "Oopss, error " . $response->statusCode() . "\n";
}

Se você não usa git pode fazer o download do tarball com os fontes - porém, recomendo que você aproveite a oportunidade e aprenda a usar o git :)

Para quem não conhece git, recomendo ler o excelente Micro Tutorial de Git do Akita, que dá uma boa idéia de como funciona esse excelente controle de versão. Sobre Fluent Interface, recomendo a leitura desse artigo, do próprio autor do conceito.

strtoupper melhorado - minha versão 2

Posted by JoEh on May 20, 2008

O DGmike postou sobre sua função para dar upper em string com caracteres acentuados e eu resolvi postar a minha

public static function toUpper($string) {
    if($string === null) {
        return $string;
    }
    
    if(function_exists("mb_strtoupper")) {
        return mb_strtoupper($string, mb_detect_encoding($string));
    }
    $string = strtr($string, "àáâãäåæçèéêëìíîïðñòóôõöøùúûüý", "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ");
    return strtoupper($string);
}

Como o código acima faz parte de uma classe com vários métodos para tratamento de strings, ele foi modificado, a linha que testa se a função mb_strtoupper existe na verdade usa uma variável, que carrego no inicio da requisição.

A minha lista de caracteres também não estava tão completa, então copiei da função dele :D

Usando Ubuntu

Posted by JoEh on May 13, 2008

Como falei nesse post, estou usando o Ubuntu, rodando pelo Windows (foi minha única opção, por enquanto!), e passei um bom trabalho para fazer funcionar o 3G da Claro nele, mas com a ajuda desses três artigos está tudo rodando beleza.

Para mim não funcionou seguindo apenas um deles, mas se não fosse pelo menos a base de cada um não teria conseguido, ou teria demorado mais uma cara de tempo.

Fica a dica então ;)

Mudanças do PHP 5.2.4 para o 5.2.5

Posted by JoEh on May 13, 2008

Se você usa uma classe de conexão com o banco que estende a classe PDO e sobreescreve o método prepare usando uma assinatura parecida com essa:

public function prepare($statement, array $driverOptions = array()) {
}

A partir da versão 5.2.5 essa assinatura é inválida, gerando um Strict standards error. Para resolver é só retirar o type hint do segundo parametro, ficando assim:

public function prepare($statement, $driverOptions = array()) {
}