PHP vs Python, armadilhas da tipagem dinâmica
Aqui no hacklab as principais linguagens de programação que usamos são python e php. Vira e mexe temos um flame debate técnico sobre características específicas de uma ou outra linguagem. Olha só a troca de emails que rolou recentemente na lista interna aqui do hacklab.
== Rafael escreveu: ==
Começando pela conclusões:
1. sempre use strcmp($string, $integer) principalmente se for comparar uma string com um inteiro!
2. para saber se uma string é um inteiro (como isso: $string = “44″) use: strcmp(intval($string), $string) == 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php $string = "123 asd"; $integer = intval($string); if(is_int($integer)) echo '$integer eh inteiro e seu valor eh: '.$integer.'<br/>'; if(is_string($string)) echo '$string eh string e seu valor eh: '.$string.'<br>'; if($integer == $string){ echo "logo \$integer == \$string !!!! ($integer == $string)"; } ?> Resultado: $integer eh inteiro e seu valor eh: 123 $string eh string e seu valor eh: 123 asd logo $integer == $string !!!! (123 == 123 asd) |
Outra:
1 2 3 4 5 6 | <?php $string = "php"; if($string == 0) echo "PHP eh igual a zero (a esquerda)"; ?> Resultado: PHP é igual a zero (à esquerda) |
== Asa respondeu: ==
com python funciona como a gente espera, olha só:
>>> “python” == 0
False
>>> “python” > 0
True
>>> “python” > 10000000
True
>>> “python” > “php”
True
>>> “python” > “php” * 10000000
True
:-)
Comentário
Piadinhas a parte, os exemplos que o Rafa levantou são importantes pra quem trabalha com PHP entender os riscos que a linguagem tem por ter uma tipagem fraca. É preciso estar atento a esses casos. Uma dica útil no php para evitar esse tipo de problema é o operador de comparação “===” (idêntico a). Ele evita confusões como considerar o número zero como falso. Veja mais sobre isso na documentção do php.
WordPress rewrite rules
Algumas vezes, na construção de um site em WordPress, você pode precisar criar algum tipo de estrutura fora da hierarquia padrão do WordPress e seus arquivos de template. No WP 3.0 com os post types personalizados, isso se tornou uma necessidade ainda mais frequente.
Você pode precisar, por exemplo, criar uma página com a listagens dos posts do tipo ‘livros’ que você criou no seu código.
Este tutorial vai mostrar o funcionamento básico da classe WP_Rewrite() do WordPress que te ajuda a criar URLs customizadas e usá-las para extrair informações (sem precisar usar ?variavel=valor) ou para redirecionar para um arquivo de template criado por você. [ Leia mais ]
Tutorial de macros em Python no OpenOffice.org
De vez em quando alguém nos consulta para o desenvolvimento de um sistema de gestão para a sua empresa, com um argumento bastante comum: “Preciso de um sistema de gestão, pois hoje tenho tudo em planilhas”. Nós aqui também temos tudo em planilha e estamos bastante satisfeitos com a nossa organização, mas depois de um ano crescendo e estruturando nossa planilha começamos a utilizar macros para manter a sua consistência. Com base nessa experiência, resolvi escrever este tutorial de como integrar código Python ao OpenOffice.org.
O foco do tutorial é trabalhar com planilhas, mas ele se aplica a outros tipos de documento. Foi desenvolvido no Ubuntu 9.10.
Nota: se você está interessado neste tutorial, veja também esse post mais recente. Todo o conteúdo deste tutorial foi abstraído na biblioteca OOSheet, publicada depois.
How to run phpt tests with PHPUnit
In this post I will explain how to run phpt tests with PHPUnit.
For my GSOC project I will use (and contribute to) the PEAR package Text_Wiki (more about my contributions on this package on another post). This package use phpt tests for unit testing. I’m not familiar with phpt tests as I’m with PHPUnit and phpt tests didn’t give me a good impression (its difficult to understand feedback and its syntax mixing PHP code and plain text statements lead to improper syntax highlighting in Emacs
).
So I proposed the main developer of Text_Wiki to switch to PHPUnit. He had no objections if I were able to provide a solution that made possible to run the old phpt tests with the new PHPUnit tests at the same time.
I found that there is a PHPUnit extension that does exactly what I was looking for. As I wasn’t able to find a tutorial explaining how to use it, I decided to write this post to share the way I used that extension.
I’m using version 3.3.17 of PHPUnit and it came with two phpt related extensions located in the directory PHPUnit/Extensions (if you use Ubuntu as I do the full path will probably be /usr/share/php/PHPUnit/Extensions): PhptTestCase.php and PhptTestSuite.php
The first one implements the class PHPUnit_Extensions_PhptTestCase. The constructor of this class receive as a parameter the path to a single phpt file. I did not use this one.
The other file implements the class PHPUnit_Extensions_PhptTestSuite. You can instantiate this class in your test script passing as the first parameter the root directory where your phpt files are located. The constructor of the class will recursively look for all files with the extension .phpt.
On the link below you can view the code I used to integrate the old Text_Wiki phpt tests with the new PHPUnit classes I’m writing:
http://cvs.php.net/viewvc.cgi/pear/Text_Wiki/tests/tests.php?revision=1.2&view=markup
Como impedir que o editor do WordPress (TinyMCE) remova quebras de linha
Atualização (15/10/2009): o Rafael Biriba deixou um comentário falando do PS Disable Auto Formatting, um outro plugin do Wordpress que também server para impedir a remoção automática das tags “br” e “p”.
Mais de uma vez quis formatar o texto de um post do Wordpress usando algumas quebras de linha (enter) para separar dois blocos de texto ou então um bloco de texto de uma imagem. Porém, por padrão o editor do Wordpress, o TinyMCE, remove qualquer tag “br” ou “p” que ele considere que esteja “sobrando”.
Talvez exista uma forma mais inteligente de se fazer isso sem usar quebra de linha, porém eu desconheço e já perdi um bom tempo tentando enganar o editor.
Ontem, encontrei o TinyMCE Advanced um plugin que tem uma opção para que as tags “br “
e “p” não sejam removidas e além disso permite customizar os itens que aparecem na barra de edição. Abaixo um screenshot de parte da tela de administração:
Moderação de usuários no WordPress
Uma das demandas do portal eletrocooperativa.org.br (um dos projetos desenvolvidos pelo Hacklab neste semestre) é a moderação dos usuários que se registram no site. Como esse recurso não existe no core do Wordpress, saímos em busca de um plugin.
O Leo encontrou no diretório de plugins do Wordpress (http://wordpress.org/extend/plugins/) o New User Approve, uma extensão simples que faz exatamente o que precisávamos. Durante o desenvolvimento encontramos dois problemas na versão atual (1.0):
- Se um usuário é criado pelo administrador e não pelo formulário de registro, ele aparece na listagem de usuários para moderação e se o administrador aprová-lo sua senha será alterada.
- Com o plugin habilitado, o formulário de registro sempre mostra uma mensagem de usuário criado com sucesso mesmo quando ocorreram erros (como por exemplo nome de usuário já existente ou senhas não conferem).
Fizemos dois patches para corrigir esses erros e enviamos para o desenvolvedor do plugin. Essa é a melhor parte do software livre
Ele agradeceu mas infelizmente ainda não teve tempo para incorporar as mudanças no código e lançar uma nova versão. Acredito que o fará em breve.
Se alguém precisar da mesma funcionalidade e quiser utilizar o plugin com as correções, o patch está disponível neste link (mais detalhes podem ser vistos nos comentários que fiz na página do próprio plugin).
Atualização (em 22/04/2009): foi lançada uma nova versão (1.1) do plugin que incorpora os patches que enviei, basta baixá-la aqui.



