Se alguém usa o netbeans no Windows, deve sofrer com a interface traduzida.

Pra conseguir usar o netbeans em inglês, só tive que adicionar alguns parâmetros no netbeans.conf.

Procure pela propriedade netbeans_default_options e adicione “-J-Duser.language=en -J-Duser.region=US” no final.

Meu arquivo de configuração está em C:\Program Files (x86)\NetBeans 7.1\etc\netbeans.conf

Ficou assim:

netbeans_default_options=”-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.zip.disableMemoryMapping=true -J-Duser.language=en -J-Duser.region=US”

Tagged with:
 

Preciso me conectar a vários bancos de dados ao mesmo tempo.

Para isso encontrei uma solução simples.

No exemplo usarei dois bancos, um rodando no Microsoft SQL Server 2005 e outro no PostgreSQL 9.1.

Observação: A versão do gerenciador não influencia em nada neste exemplo, só coloquei ali porque sou hipster.

Primeiro configuro os bancos de dados no application.ini:

application/configs/application.ini


resources.multidb.mssql.adapter = "sqlsrv"
resources.multidb.mssql.dbname = "badass"
resources.multidb.mssql.host = "192.168.0.200"
resources.multidb.mssql.username = "badass"
resources.multidb.mssql.password = "lollipop"

resources.multidb.pgsql.adapter = "pdo_pgsql"
resources.multidb.pgsql.host = "192.168.0.201"
resources.multidb.pgsql.username = "badass"
resources.multidb.pgsql.password = "lollipop"
resources.multidb.pgsql.dbname = "badass"

Esse exemplo está rodando no Windows, então eu estou usando a extensão SQLSRV (http://php.net/manual/en/book.sqlsrv.php).

Na maioria dos casos você precisará usar a pdo-dblib (http://php.net/manual/en/ref.pdo-dblib.php) que no ubuntu você encontra no pacote php5-sybase.

No caso de você estar usando a pdo-dblib, a configuração para o primeiro banco mudará um pouco.

O parâmetro adapter é “pdo_mssql”, pois ela tem que encontrar a classe Zend/Db/Adapter/Pdo/Mssql.php (assim como o adapter com o valor “sqlsrv” tem que encontrar Zend/Db/Adapter/Sqlsrv.php) e o parâmetro adicional “pdoType” está lá para que ele adicione o prefixo “dblib” no início da DSN.

Observação: Se você não sabe nem o que é DSN por favor, GTFO!! _o/

Segue o arquivo de configuração usando pdo-dblib:

application/configs/application.ini


resources.multidb.mssql.adapter = "pdo_mssql"
resources.multidb.mssql.dbname = "badass"
resources.multidb.mssql.host = "192.168.0.200"
resources.multidb.mssql.username = "badass"
resources.multidb.mssql.password = "lollipop"
resources.multidb.mssql.pdoType = "dblib"

resources.multidb.pgsql.adapter = "pdo_pgsql"
resources.multidb.pgsql.host = "192.168.0.201"
resources.multidb.pgsql.username = "badass"
resources.multidb.pgsql.password = "lollipop"
resources.multidb.pgsql.dbname = "badass"

Lindo né?

Vamos em frente.

Agora preciso inicializar ambos e gravar com Zend_Registry para que fique disponível na aplicação inteira.

Segue meu Bootstrap:

application/Bootstrap.php


<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    protected function _initDatabase()
    {
        /* @var $resource Zend_Application_Resource_Multidb */
        $resource = $this->getPluginResource('multidb');
        // inicia as conexões aos bancos de dados
        $resource->init();
        Zend_Registry::set('db_mssql', $resource->getDb('mssql'));
        Zend_Registry::set('db_pgsql', $resource->getDb('pgsql'));
    }

No Bootstrap é só pegar o MultiDb Resource Plugin, inicializar as conexões dos bancos e adicionar cada banco no Zend_Registry.

Se você quiser que um dos bancos seja default, é só adicionar o parâmetro “default” com o valor “true” no application.ini e chamar o método getDb() sem parâmetro algum.

Pronto, agora é mágico.

Acessando ele de uma controller action:

application/controllers/IndexController.php


<?php

class IndexController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $sql = "SELECT * FROM tracker";

        /* @var $db Zend_Db_Adapter_Sqlsrv  */
        $db = Zend_Registry::get('db_pgsql');

        /* @var $statement Zend_Db_Statement_Sqlsrv */
        $statement = $db->query($sql);

        $results = $statement->fetchAll();

        Zend_Debug::dump($results);
        die;

    }

Observação: Não se esqueçam dos comentários que dão uma ajudinha pra IDE auto-completar o código.

Espero ter ajudado.

Tagged with:
 

Algumas vezes o netbeans não tem como seguir as referências necessárias para autocompletar eficientemente.

Nós podemos resolver isso especificando o tipo do objeto com phpdoc.

Tente.


<?php

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        /* @var $db Zend_Db_Adapter_Sqlsrv  */
        $db = Zend_Registry::get('db_mssql');

        /* @var $statement Zend_Db_Statement_Sqlsrv */
        $statement = $db->query('SELECT TOP 10 * FROM rodcli');

        $results = $statement->fetchAll();

        Zend_Debug::dump($results);
    }
}
Tagged with:
 
vim ~/netbeans-7.0.1/etc/netbeans.conf

Adicione o conteúdo em vermelho nesta linha:

netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m
-J-XX:MaxPermSize=200m-J-Dapple.laf.useScreenMenuBar=true
-J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true
-J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=on"

Testei no Ubuntu 10.04.3 LTS.

Tagged with:
 

Uso pra pegar todos os resultados do mês.

Alguém conhece um método melhor?


<?php
//...
$fromDate = DateTime::createFromFormat('d-m-Y H:i:s', '01-' . date('m-Y') . ' 00:00:00');
$toDate = clone $fromDate;
$toDate->modify('+1 month');
$toDate->modify('-1 second');

var_dump($fromDate, $toDate);
//...
?>
?>

Resultado:

object DateTime(3) {
    public date => string(19) "2011-11-01 00:00:00"
    public timezone_type => integer 3
    public timezone => string(17) "America/Sao_Paulo"
}
object DateTime(3) {
    public date => string(19) "2011-11-30 23:59:59"
    public timezone_type => integer 3
    public timezone => string(17) "America/Sao_Paulo"
}

Gambi né? rs

Tagged with:
 

<?php

class Simp_Validate_CPF extends Zend_Validate_Abstract
{

    const INVALID = 'cpfInvalid';

    /**
     * @var array
     */
    protected $_messageTemplates = array(
        self::INVALID   => "'%value%' is an invalid CPF",
    );

    public function isValid($value) {

        $this->_setValue($value);

        $value = preg_replace('[-|.]', '', $value);

        for ($i = 9; $i < 11; $i++) {
            for ($d = 0, $c = 0; $c < $i; $c++) {
                $d += $value{$c} * (($i + 1) - $c);
            }

            $d = ((10 * $d) % 11) % 10;

            if ($value{$c} != $d) {
                $this->_error(self::INVALID);
                return false;
            }
        }
        return true;
    }
}

Atualização:
15 Novembro 2011 – Substitui ereg_replace por preg_replace.

Tagged with:
 

Tagged with:
 

Estávamos encucados com um companheiro de profissão e suas respostas sagazes.

Hoje o amigo Iacami (http://www.facebook.com/enapupe) encontrou o algoritmo sagaz:

http://www.amatilha.com.br/blog/como-falar-bonito-sem-dizer-nada/

Não satisfeito, o amigo Iacami implementou a bagaça:

http://www.enapupe.com.br/giverny/

Pra facilitar eu e meus amigos de trabalho fizemos a simulação.

Parecemos ou não mais sagazes falando bonito desse jeito?
Aprendendo com o Giverny na hora do almoço:

[youtube http://www.youtube.com/watch?v=PX7vKqgQ7lk]

[youtube http://www.youtube.com/watch?v=pqEHxys-isI]

[youtube http://www.youtube.com/watch?v=IOv0xrmmCOA]

Abraço.

Tagged with:
 

O meu favorito:
$('.meucheckbox').is(':checked');

Uma alternativa:
$('.meucheckbox').attr('checked');

Trabalhar com múltiplos:
$("input[type=checkbox][checked]").each(function(index, element){
// itera cada um dos checkboxes "checkados".
});

O último é útil quando você quer implementar ações em múltiplos elementos, igual o gmail por exemplo.

Espero ter ajudado.

Tagged with:
 

Vídeo muito engraçado e bem feito que eu achei no youtube.

Tagged with: