off: Locaweb sux

30 03 2008

Não tenho postado muita coisa aqui (apesar de ter o que postar) principalmente por falta de tempo.

De forma resumida, ultimas duas semanas, problemas na locaweb em 14 dias…

Problemas pra resolver nomes, lentidao, servidor web fora, e nesse momento servidor mysql fora. Só espero que não tenham sumido com meu banco, últimos 4 backups remotos não foram bem sucedidos…

locaweb

E um viva para locaweb…

Update:
Segundo o internetsupervision





PHP5 ? Blah!!!

17 07 2007

Alguns dias pra terminar de escrever isso, pode parecer batido:
gophp5.org

Leia.

Leu ? Ótima iniciativa, não ?

Será ?

Vejamos:

– Migrar um servidor de php4 para php5 não é apenas atualizar os pacotes e “plim”, esta pronto. Sempre há um custo.
– “As coisas instaladas” (softwares de quem contratou o serviço) provavelmente vão quebrar. Ponto!
– Aqueles que ainda não utilizam php5 para desenvolver provavelmente vão reclamar de “suas coisas quebradas”. Ponto!
– Quem migrou um servidor e teve problemas (não será apenas um, nem dois, nem três) vai se arrepender da escolha algum tempo depois.

Parece óbvio, ao menos para mim.

E qual o problema nisso tudo ?

PHP6.

Assim que tivermos todo mundo usando PHP5, feliz da vida, após o trauma da transição do PHP4 para o PHP5, com todas as coisas supostamente funcionando, e blablabla, teremos o PHP6, recém saido do forno, com suporte a namespaces, unicode e outras coisas interessantes mais (se não tivesse nada de interessante a mais, seria o PHP5.3, PHP5.4, …).

E ai, começamos a campanha “abaixo PHP5, viva PHP6” ? E os custos ? E as “coisas quebradas” da (in)feliz migração PHP4/PHP5 ? E os arrependimentos ? E as reclamações ? E e e ???

Um tiro no pé! É o que acho da iniciativa e das constantes “pressões” na adoção do PHP5.

Não que ele seja ruim, longe disso. Mas se coisas não funcionarem, quando tivermos uma boa quantidade de gente desenvolvendo em PHP6, estaremos vendo cada vez mais Aqueles_Nomes_De_Classes_Gigantescos em PHP5 e o PHP6 estará fadado a ser ignorado por empresas de hosting (consequentemente milhares de programadores ?).

Só espero estar errado. E que venha PHP6!





OFF: Netbeans GUI Builder

5 05 2007

Nunca gostei do eclipse.
Quando comecei a programar em java (há um tempo já) comecei com netbeans. Gostava muito dele, bem simples, organizado e vinha “com tudo” que eu precisava.

Cheguei a instalar e utilizar o eclipse durante um tempo, mas sempre achando o netbeans melhor. E em algum momento que não lembro quando, deixei de utilizar essas IDEs, utilizando editores mais simples e mais leves (sentia dor na alma quando utilizava kde+firebird+tomcat+eclipse/netbeans, por isso “abandonei”).

Quando passei a trabalhar mais intensivamente com PHP, voltei a utilizar o eclipse com plugins para habilitar desenvolvimento em PHP, e como trabalhava também com java, acabou que o eclipse voltou a tornar-se meu ambiente de desenvolvimento único. Era java e PHP no mesmo local. Simples assim.
E nesse tempo havia esquecido quase que completamente do netbeans, apenas acompanhando de longe o desenvolvimento do matisse, que era um “gui builder” em fase alpha dele.

Hoje vejo o estado que está esse “gui builder” e… Tirem 10 minutos e assistam:

netbeans 6 gui builder

Tão ou mais simples criar uma aplicação em java para desktop quanto o delphi (não, não o delphi4php :) )

Será que fazem isso no eclipse ?





PHP / refactoring: Como ?

15 04 2007

Refatorar código em PHP normalmente não é simples.

As IDEs que mais utilizei até hoje, como pdt (aka eclipse + plugins), zend studio e quanta plus não oferecem (ou não ofereciam na época) suporte a nenhum tipo de refatoração. Nada de renomear variável, função, classe, método.

Talvez a maior dificuldade em se trabalhar com com isso seja a tipagem fraca do PHP (somente talvez). Mas alguns trabalhos encontrados na internet, como por exemplo o phc – php compiler (não se deixe enganar pelo nome), podem ajudar: Há aqui um exemplo de como modificar chamadas de uma função para outra. Bastante trabalho para uma tarefa relativamente simples; O phc transforma o código php em uma AST – Abstract Syntax Tree e o exemplo atravessa essa árvore efetuando as modificações.

Algumas classes implementadas em PHP mesmo também são encontradas no PEAR. Mas também não há nada que seja muito utilizável.

Acredito que o que se tenha de mais “útil” no momento são as funções da extensão tokenizer (que é compilada por padrão). Com ela podemos trabalhar mais facilmente com um script, para criarmos algum tipo de ferramenta útil para refatoração. Vejamos por exemplo, como criar uma função para modificar o nome de uma variável:


<?php
// arquivo sample.php

$foo   ‘foo’;
$hello “Ola $foo\n”;

// variavel $foo no comentario nao sera modificada

function foo()
{
    
// variavel $foo neste contexto sera modificada
    
$foo ‘1’;
    echo 
$foo;
}
    
echo 
$hello;
?>


<?php
// arquivo change_var_name.php

/**
 * Funcao que ira modificar o nome de uma variavel
 *
 * @param  array  $tokens  Array com os tokens a serem analisados
 * @param  string $oldName Nome da variavel que sera modificada
 * @param  string $newName Novo nome da variavel
 * @return string Codigo-fonte referente aos tokens fornecidos, com a 
 * variavel devidamente modificada
 */
function changeVarName($tokens$oldName$newName)
{
    
// variavel que ira conter o codigo-fonte a ser retornado
    
$ret ;
    
    
// como $tokens e’ um array, utilizamos foreach para
    // passar por todos os seus itens
    
foreach ($tokens as $token) {
    
        
// quando se obtem os tokens de um arquivo, eles vem em um 
        // array contendo o numero do token e o valor ou em uma string,
        // contendo apenas o valor. Entao verificamos qual o caso.
        
if (!is_array($token)) {
            
$tokenName  false;
            
$tokenValue $token;
        } else {
            
$tokenName  token_name($token[0]);
            
$tokenValue $token[1];
        }

        // se nao ha o nome/numero do token, siginifica que ele nao e’ uma variavel,
        // pois elas contem o numero e o valor. Entao podemos adicionar o token ao
        // codigo-fonte que sera retornado e passar para o proximo token
        
if (!$tokenName) {
            
$ret .= $tokenValue;
            continue;
        }        
        
        
// verificamos se o token e’ uma variavel – T_VARIABLE. Se nao for, adicionamos
        // o valor do token ao codigo-fonte que sera retornado e passar para o proximo token
        
if ($tokenName != ‘T_VARIABLE’) {
            
$ret .= $tokenValue;
            continue;
        }

        // verificamos se o valor do token, ou seja, o nome da variavel, e’ o mesmo
        // que queremos modificar. Se nao for, o processo e’ o mesmo do anterior, adicionamos
        // o valor ao codigo-fonte e passamos para o proximo token
        
if ($tokenValue != $oldName) {
            
$ret .= $tokenValue;
            continue;
        }

        // se chegou ate aqui, significa que o token e’ uma variavel e tem o nome que
        // precisa ser modificado. Entao modificamos o valor do token e o adicionamos ao
        // codigo-fonte que sera retornado
        
        
$tokenValue $newName;
        
$ret .= $tokenValue;
    }
    
    
// retornamos o fonte
    
return $ret;
}

// exemplo de uso da funcao

// obtemos o conteudo do arquivo que iremos modificar
$arquivo file_get_contents(‘sample.php’);

// e utilizamos a funcao token_get_all para obter todos
// os tokens do arquivo. Observe que tudo no script e’
// tratado como sendo um token
$tokens  token_get_all($arquivo);

// modificamos $foo para $bar
$bla changeVarName($tokens‘$foo’‘$bar’);

echo $bla;

E, executando:

$ php change_var_name.php
<?php
// arquivo sample.php

$bar = ‘foo’;
$hello = "Ola $bar\n";

// variavel $foo no comentario nao sera modificada

function foo()
{
// variavel $foo neste contexto sera modificada
$bar = ‘1’;
echo $bar;
}

echo $hello;
?>

Exemplo bem simples de como poderiamos utilizar tokenizer para refatorar código. Observe que o nome da variável foi modificada tanto no contexto global, quanto no contexto da função “foo”. Alguns outros detalhes poderiam ser observados, mas quem sabe em um post futuro.

É bem possível (e acho que relativamente fácil) trabalhar melhor neste exemplo para se definir onde se deseja modificar a variável. E quem sabe nos próximos dias escrever uma classe para refatorar realmente, permitindo modificar nome funções, classes e outras coisas úteis.

E para quem não sabe o que é refatoração, vale uma lida no artigo da wikipedia e em Refactoring Home Page.





Notícias e links – 05/04

5 04 2007

Sim, há notícias de várias semanas… Fazer o que…

Validating Incoming Data by Using Polymorphism with Objects in PHP 5
Building Interpreter Classes with PHP 5
Building Dynamic Web Pages with Polymorphism in PHP 5
Bons artigos (como normalmente são) no devshed

650 PHP Tutorials
Falando sobre diversos assuntos, desde básicos até mais “avançados”

111 PHP Articles
Com os outros 650, é leitura para o resto do ano : )

Five common PHP design patterns
Mais sobre design patterns (que acho que nunca é o bastante); Fala um pouco sobre factory, singleton, observer, chain-of-command e strategy. Todos com exemplos de código e diagrama descrevendo o funcionamento. Leitura rápida, vale uma passada.

PHP Sessions – Files vs Database Based
Dicas para utilização de mysql como “session handler”.
Notei um dia desses que php 5.2 (não sei se outras versões também) é compilado com suporte a sqlite por padrão e com isso, suporte a sqlite como “session handler”. Verei algum esquema em breve para compartilhar sessão entre servidores futuramente.

CodeGear™ Announces General Availability of Delphi® for PHP
Após muita espera (não minha, mas de muita gente) foi liberado o Delphi4php, com trial de 1 dia 14 dias de funcionamento.
Não consegui testar, não tenho windows instalado (e nem pra instalar) e não funcionou no wine, chegou no segundo ou terceiro passo e dava um erro de uma função não implementada (no wine).
Consta que já há um crack para o delphi4php, para tornar full a versão trial.
Para quem tiver curiosidade, assim como eu tive, foi disponibilizado também o vcl4php que são os componentes utilizados. Lá você encontrará adodb, jscalendar, nusoap, smarty e xajax, para citar apenas os mais conhecidos. Ou seja, é a cola da cola (parafraseando o “php is glue”). Há também código próprio lá, que… bem, prefiro não comentar…

Instant SQL Formatter
Interessante, as vezes encontra-se subqueries super-aninhadas, terriveis de ler… Funciona com diversos dialetos de sql.

Data Generator
O Lorem Ipsum do sql. Conheci hoje, muito legal.

Emulating Analytic (AKA Ranking) Functions with MySQL
Using the New MySQL Query Profiler
Mais dicas sobre mysql. Esta última é bastante interessante, pode ajudar a encontrar gargalos em uma aplicação.

PHP Search Engine Showdown

FPDI Import existing PDF documents into
“FPDI is a collection of PHP classes that allow developers to read pages from existing PDF documents and to use them as templates in FPDF by Olivier Plathey.”

Interessante. Não testei, mas de qualquer forma é interessante.





Notícias e links: 21/03

21 03 2007

CSS+Javascript power. Fancy menu
Não é PHP, mas vai dizer que nunca precisou de um menu pra alguma aplicação ? Este menu é bem estiloso.

What separates a professional PHP web developer from a scripter?

Quebec Slides
Slides de duas apresentações: Securing PHP Applications e Migrating to PHP 5.2.1
O primeiro contém dezenas de dicas de como aumentar a segurança de uma aplicação em PHP e a segunda fornece diversos motivos para se migrar para php 5.2. Vale o tempo investido.

Object Interaction and Mediator Classes in PHP 5
Abstracting Database Access Using Polymorphism with Objects in PHP 5
Mais artigos sobre design patterns do devshed. O interessante nestes artigos (a grande maioria ) é que realmente falam sobre o pattern e onde / como utilizar, o que faz com que eles sejam úteis não somente enquanto se desenvolve em PHP, mas em qualquer linguagem.

CodeIgniter vs. CakePHP
Comparativo entre CodeIgniter e CakePHP. Não da pra tirar muitas conclusões sobre qual é o melhor ( se é que algum é melhor que outro, no geral ), mas é possível conhecer algumas features de cada um deles.

XML for PHP developers, Part 3: Advanced techniques to read, manipulate, and write XML
Terceira parte do artigo sobre XML para desenvolvedores PHP. Não lembro se postei a segunda, então segue ( e a primeira também:
XML for PHP developers, Part 2: Advanced XML parsing techniques
XML for PHP developers, Part 1: The 15-minute PHP-with-XML starter

Command-line PHP? Yes, you can!
Breve introdução ao uso de PHP em linha de comando. É, muita gente utiliza PHP apenas como uma linguagem voltada à web, embora muitos já a considerem (eu estou entre estes muitos) uma linguagem de uso geral.
PHP em console + ncurses é bastante simples e interessante de se usar:

r2s

Tão eficiente quanto uma interface web : )





espeak-php: v0.1 alpha

13 03 2007

Criei o projeto no sourceforge e enviei algumas informações para lá.

O “site” do projeto pode ser visto aqui. O site, por algum motivo obscuro, não está funcionando corretamente (as vezes funciona, as vezes não), mas já da pra ver como instalar e alguns exemplos de uso. Nos próximos dias escrevo uma documentação decente…

Para interessados, o repositório subversion do projeto esta em https://espeak-php.svn.sourceforge.net/svnroot/espeak-php/trunk e há um pacote disponível aqui