:: Blog do Guilherme ::
Tecnologia da Informação, Música, Carro e muito mais…
Tecnologia da Informação, Música, Carro e muito mais…
09/04/10
Quem usa o ZendFramework, provavelmente já passou muita raiva pois ele gera aquela mensagem “simpática”: “A table must have a primary key, but none was found”. Isso se deve ao fato de a classe Zend_Db_Table / Zend_Db_Table_Abstract tentar fazer os mapeamentos de nome da entidade, colunas e chave primária – em suma, efetuar um describe da entidade informada.
Mas há momentos em que o modelo não representa uma entidade do banco. Por exemplo, pode-se usar o modelo para executar uma função, uma procedure ou uma consulta à uma “View” de banco. Trabalhando nessa estrutura, onde o modelo representa os dados persistidos no banco, esse paradigma é quebrado.
O Zend Framework é bastante flexível em vários quesitos; um deles é o quesito mapeamento de dados, é possível sobrescrever algums métodos da classe herdada (Zend_Db_Table / Zend_Db_Table_Abstract). Um desses é o método “_setupPrimaryKey”, responsável por instanciar a chave primária da tabela; metódo, também, responsável por gerar a exceção quando, no mapeamento, não é encontrada a chave primária à partir das colunas buscadas à partir de um describe da tabela. Todo esse processo é executado automaticamente pelo Zend_Db.
Para resolver esse problema, é necessário forçar o mapeamento manual de algumas variáveis utilizadas pela classe “pai”. Nessa situação, foi suficiente forçar a variável “$this->_cols” para um vetor vazio. Adicionalmente, foi informado como vazio o nome da tabela, porém a classe pai define como sendo o nome da Classe filha o valor dessa variável ($this->_name).
Portanto, para trabalhar nessa estrutura, onde o modelo não representa uma entidade no banco basta sobrescrever o método “_setupPrimaryKey”:
public function _setupPrimaryKey() {
$this->_cols = array();
$this->_name = “”;
}
27/02/10
Bem pessoal, essa semana passei por uma problemática toda. Instalei o Debian Lenny numa máquina (servidor), configurei todos os serviços que necessitava e, ao fim de tudo, surgiu uma necessidade, montar um Raid. A máquina possuía apenas um HD de 80 GB e sugeri meu cliente comprar dois HDs de 1.5TB – pois a placa-mãe só tinha disponível dois conectores SATA -, e nessa situação montei um RAID 1 via hardware.
Inicialmente, eu clonei o HD de 80 GB e esperei pra ver o que aconteceria. Infelizmente não deu muito certo. Como meu tempo era pouco, preferi reinstalar o S.O, mas o Debian continuava reconhecendo 2 HDs. Porém, nada como nosso parceiro Google e as palavras-chave corretas pra encontramos as respostas pra tudo. Encontrei várias soluções, inclusive algumas na verdade sugeriam RAID via Software. Mas um dos documentos foi muito útil. Esse documento, faz parte da Wiki do Debian¹.
Conhecido o cenário e o contexto, vamos à solução. Quando o instalador iniciar na tela onde se escolhe a opção de instalação – Gráfica, Modo Texto, Recuperação…. – basta teclar “TAB”, após isso, aparecerão as opções de boot do instalador. Ao final da linha de configuração do inicializador, digite a opção “dmraid=true”. Pronto! Agora o instalador reconhecerá apenas o disco em RAID.
Obs.: Essa configuração funcionou para o Debian e provavelmente vá funcionar no Ubuntu também. Outras distribuições podem ter essa opção também.
Simples, não?
18/02/10
Olá pessoal.
Pra quem já teve a mesma dificuldade que eu, pra instalar o componente xdebug no PHP, vai ai uma ajuda e tanto. Como utilizo o repositório do Ubuntu pra instalar meus serviços e programas, passei por uma dificuldade com a instalação do componente xdebug.
Eu utilizo o ZendServer Community Edition – um Apache + PHP + Componentes básicos do ZendServer todos num pacote -, e nessa situação, executei o comando padrão: “aptitude install php-5.3-xdebug-zend-server“.
Ao restartar o Apache, a surpresa, o serviço não estava no ar e ao analisar os logs a mensagem, que “diz tudo” e não diz nada:
[notice] caught SIGTERM, shutting down
Pesquisando nas listas do xdebug, encontrei algo que poderia resolver meu problema. Mas antes, tentei mais uma opção, compilar a extensão com o phpize. Fiz o download da última versão do xdebug, e executei os seguintes comandos:
# sudo su
# wget http://xdebug.org/files/xdebug-2.1.0beta2.tgz
# /usr/local/zend/bin/phpize
# ./configure –enable-xdebug –with-php-config=/usr/local/zend/bin/php-config
# make
# cp modules/xdebug.so /usr/local/zend/lib/php_extensions/
Como já havia instalado o xdebug do repositório, ele criou em /usr/local/zend/etc/conf.d um link simbólico “xdebug.ini” para o arquivo “/usr/local/zend/etc/ext.d/xdebug.ini”.
Bom, o detalhe maior está nesse arquivo, portanto não precisávamos dessa etapa de compilação. A extensão instalada do repositório cria a seguinte diretiva:
zend_extension=/usr/local/zend/lib/php_extensions/xdebug.so
Dessa forma, a extensão não é carregada e para matar a charada, basta mudar de “zend_extension” para “extension”, portanto:
extension=/usr/local/zend/lib/php_extensions/xdebug.so
02/02/10
Parece realidade mesmo, o Facebook, em parceria com a equipe do core do PHP, reescreveu o código do PHP. A idéia, pelo que tenho lido a respeito, é melhorar o desempenho do nosso amável PHP.
O trabalho de melhoria do PHP, deveria ficar a cargo da própria Zend em parceria com a comunidade, mas parece que eles estão sem tempo e mais interessados no mercado corporativo, com suas ferramentas de desenvolvimento, proteção de código e servidor, do que com o crescimento e melhoria da linguagem.
Mais detalhes estão disponíveis em: http://www.geek.com.br/posts/12221-facebook-reescreve-php-do-zero-e-pode-estar-desenvolvendo-um-compilador-para-a-linguagem
20/01/10
Quem já instalou o vmware server no ubuntu, já deve ter passado por problemas quanto a configuração do teclado, principalmente quanto as teclas “/” e “?”. Vários posts na internet sugerem algumas alterações na configuração do vmware mas, no meu caso, nenhuma resolveu. Pesquisando nos fórums e na documentação do VMware, consegui achar a solução pra esse problema:
Basta editar o arquivo “/etc/vmware/config”, e inserir as seguintes diretivas:
xkeymap.nokeycodeMap = true
xkeymap.keycode.211 = 0×035
No meu caso, como eu já havia instalado o S.O, nesse caso um Debian 5.0, tive que reconfigurar o teclado. Para isso basta digitar no console:
dpkg-reconfigure console-data
e configurar no padrão brasileiro. No meu caso foi bem simples, basicamente “avançar-avançar-finalizar”.
28/12/09
Seja bem vindo ao meu blog. Esse blog tem como objetivo, a compartilhamento de experiências e conhecimentos sobre diversas áreas, tais como a programação web, redes, carros, música….enfim, tudo aquilo que gosto. O blog tem como objetivo, também, mostrar alguns trabalhos realizados por mim.