Blog Intermol

Arquivo da categoria ‘Programação’

Nova página para o Eissei Card

Lançamos uma nova página para o Eissei Card, cartão de fidelidade do Laboratório Eissei Molina.

Nesta versão, as especialidades médicas são separadas em páginas diferentes e exibimos um ícone com link para um mapa do Google gerado dinamicamente para cada endereço de cada credenciado do cartão.

A página foi feita em PHP e MySQL e respeita os padrões W3C:

www.eisseicard.com.br

Sem comentários »

Como mudar o UUID de um disco virtual

Utilizado por máquinas virtuais como VirtualBox, um disco virtual (vdi) possui um identificador único. Este identificador é utilizado pela máquina virtual.

Porém uma das facilidades de usar máquinas virtuais é o da possibilidade de duplicar a máquina por completo, seja para backup ou para fins de desenvolvimento. E é principalmente no quesito de desenvolvimento que a alteração de UUID pode se fazer necessária.

Para mudar o UUID de discos virtuais do VirtualBox use o seguinte comando no console do seu Linux:
$ VBoxManage internalcommands setvdiuuid [nome do arquivo vdi]
onde [nome do arquivo vdi] é o seu disco virtual.

Sem comentários »

HTML e DHTML no Internet Explorer 7

Referência do Internet Explorer (em inglês):

http://msdn.microsoft.com/en-us/library/ms533050(vs.85).aspx

Exibe também as diferenças do Internet Explorer 7 em relação às versões anteriores.

Sem comentários »

Eclipse PDT - editor e depurador de PHP gratuito

Links que falam sobre a depuração PHP no editor Eclipse utilizando a ferramenta PDT:

Depurando PHP utilizando Eclipse com PDT (requer cadastro no site da IBM).

Instalando o Zend Debugger - PDTWiki.

Página da empresa Zend que fala sobre as ferramentas PHP do Eclipse e links para os arquivos de depuração.

Mais informações sobre o editor gratuito Eclipse.

Sem comentários »

Blog do Internet Explorer

Este blog (em inglês) pode ajudar a entender as diferenças entre o IE e os demais:

http://blogs.msdn.com/ie/default.aspx

Neste artigo o autor resume as mudanças em relação ao CSS da versão anterior dizendo que há esforço no sentido de tornar o browser compatível com os padrões da internet.

Nesta outra página encontramos os detalhes do CSS para cada versão do Internet Explorer.

Para conhecer mais sobre os padrões da internet visite o W3C.

Sem comentários »

Popularidade das linguagens de programação

A empresa Tiobe acompanha a popularidade das linguagens de programação através de um ranking mensal.

Atualmente Java está no topo da lista seguida por C/C++, VB e PHP. A linguagem Python se destaca com o maior crescimento entre programadores no último mês.

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

2 comentários »

Sintaxe XML e funções PHP

No link abaixo podemos encontrar um resumo da sintaxe XML para caracteres especiais como: & (E comercial), > (maior), < (menor), ' (apóstrofos) e " (aspas):

http://www.w3schools.com/Xml/xml_syntax.asp

As funções em PHP relacionadas a entidades são:

A função htmlspecialchars converte exatamente os caracteres necessários para o XML.

Sem comentários »

Mudar o layout do teclado on-the-fly em XFCE (e provavelmente em outros também)

Problema:
Em um teclado com dead-keys, programar em linguagens onde o uso de apóstrofe, aspas simples e aspas duplas. Python, por exemplo, e seus “”".

Solução:
setxkbmap é um programa que altera o seu layout de teclado. Está já pré instalado no XUbuntu 7 e certamente em outras distros.

Adicione dois (ou quantas línguas precisar) ícones onde for mais eficiente para o seu trabalho. O comando é:
setxkbmap [mapa do teclado] [-variant [variante]]

Exemplos:
Para US International (acentos e etc)
setxkbmap us -variant intl

Para US sem dead-keys
setxkbmap us

Sem comentários »

Como documentar outras linguagens que não o PHP?

Existem diversas ferramentas na web para gerar a documentação de código baseada em comentários internos ao código.

Um exemplo é o Doxygen, que é capaz de documentar C++, C, Java, Objective-C, Python, IDL (Corba e Microsoft), Fortran, VHDL, PHP, C#, e até certo ponto D.

O importante não é usar uma ferramenta que extraia os comentários do seu código fonte e gere uma documentação bonitinha em HTML. Claro, isso é um atrativo, mas importante mesmo é que o código seja consistente, que os comentários dentro do código sejam razoavelmente descritivos em direcionar o programador e que a formatação do código seja sempre a mesma. Tal feito não é alcançado pela ferramenta que seu time usa para documentar (como Doxygen ou PHPDocumentor), mas sim através da imposição de um Manual de Estilo.

Cada programador tem uma forma de programar, em função de suas características pessoais. Mas na hora de programar comercialmente é importante que todos os membros do time, tanto do presente como do futuro, consigam compreender o código por completo para reutilização do mesmo. E é aí que o Manual de Estilo entra para fazer com que todos escrevam de forma similar.

Um Manual de Estilo deve ser imposto. Claro que em sua implantação sugestões podem (e devem) ser ouvidas, mas todos os envolvidos no projeto precisam segui-lo à risca. Aqui está uma sugestão de peso, o manual de estilo da Bell Labs para a linguagem C, última revisão de Junho de 1990. Seguindo este modelo, é possível criar um manual de estilo que se encaixe à sua empresa. Hoje, talvez pela popularidade de outros como PHPDocumentor e Doxygen, não se deve descartar a possibilidade de utilizar elementos destes dois últimos no seu manual.

Sem comentários »

Como documentar seu PHP - phpDocumentor

Se você já trabalhou em um projeto grande, sabe que documentar o código é fundamental. Afinal de contas, como se lembrar de todas as funções e classes específicas do projeto?

Não tema, phpDocumentor está aí para nos salvar. A partir de certos tags de comentário que você coloca no seu PHP, o phpDocumentor monta uma documentação completa - bonitinha e muito prática - do seu projeto, com todas as variáveis que você quer mostrar, dependências, etc. Um pequeno exemplo:

/**
* Pequeno exemplo do que pode ser feito com o phpDocumentor. Cheque se o usuário está logado e some até dois números.
* @uses EstaLogado
* @param int $a Aqui é o primeiro número a ser adicionado.
* @param int $b O segundo número a ser adicionado, se não definido será 0.
* @return int O resultado de $a+$b
*/
function AeB($a, $b=0)
{
EstaLogado();
return $a+$b;
}

Na documentação gerada pelo phpDocumentor você vai encontrar algo como:

AeB (line 431)

Pequeno exemplo do que pode ser feito com o phpDocumentor. Cheque se o usuário está logado e some até dois números.

* return: O resultado de $a+$b.
* uses: EstaLogado

int AeB (int $a[, int $b = 0])

* int $a: Aqui é o primeiro número a ser adicionado.
* int $b: O segundo número a ser adicionado, se não definido será 0.

Mais informações em http://phpdoc.org/

1 comentário »

Mudar o usuário do Apache

Se você quer que o seu httpd rode com um usuário ou grupo diferente, você deve iniciar o httpd como root e depois trocar.

User/Group: o nome ou número do usuário ou grupo que você quer que o Apache use. Fique atento à segurança.

<IfModule !mpm_netware_module>
User ###SEU_USERNAME_AQUI###
Group ###SEU_GRUPO_AQUI###
</IfModule>

Sem comentários »

Conceitos de programação - parte 1

Programar é um brinquedo. Passamos horas nos divertindo ao usar meios eletrônicos para resolver problemas próprios ou alheios.

Porém, há limites. A expansão de nossas habilidades vem com a capacidade de produzir mais programando cada vez menos. Como no mundo do software livre e aqui na Intermol sempre temos o futuro em mente, há dois aspectos básicos na programação de cada detalhe, apectos que observamos no nosso cotidiano. Ambos vindos dos 20+ anos de experiência de programação de cada membro. Temos a parte e o todo. Neste artigo iremos analizar a parte.

Cada função desempenha uma e somente uma função.. Se criamos uma função pra somar A+B, ela vai apenas somar A+B e não vai fazer mais nada - dois números entram, um número sai. A função não deverá fazer mais nada, nem crescer com mais possibilidades e complicações.

Se queremos uma função pra fazer A+B+C, será escrita outra função, mesmo que ela use a primeira. Caso ela use a primeira função criamos o que se chama dependência. O controle de dependências deve ser examinado com cuidado para garantir a qualidade do código final. É normal que comportamentos um dia tido como normais sejam no futuro tido como bugs - realizar consertos em funções dependentes pode se tornar desastroso. Por isso é necessário que se façam validações (testes) das funções de forma automatizada.

Pra PHP, uma ferramenta fácil pra validar funções individuais é o PHPUnit. Ao escrever a função, deve-se cadastrar sua contra parte em PHPUnit. O PHPUnit é uma ferramenta que executa a sua função com uma série parâmetros que você tenha selecionado, e compare com os resultados que você espera. A validação de funções deve começar com as funções de menor número de dependências. Mesmo sem o PHPUnit fazer uma validação automatizada de uma função é fácil: basta executar as funções com os parâmetros a serem testados e validar seu retorno.

Com o tempo, temos pacotes de funções (e de classes) bastante sólidos que podem ser integrados em um projeto subsequente. Essas funções e classes compõem a parte. No próximo artigo será discutido como organizar e integrar estes pacotes.

1 comentário »

Como quebrar uma tabela do tipo MyISAM a ponto de recuperá-la via SQL

Saber isso é útil para podermos testar nossos aplicativos em situações de risco.

Em um típico servidor Debian, você encontrará os bancos de dados em /var/lib/mysql. Cada banco tem seu próprio diretório, composto de 3 arquivos por tabela. Uma tabela MyISAM vai estar então armazenada em:
- [tabela].frm - dados de criação da tabela (campos, etc);
- [tabela].MYI - índice (um ‘cache’ onde parte dos dados é duplicada pra que o acesso seja mais rápido);
- [tabela].MYD - onde os dados são efetivamente guardados.

Não parece ser muito comum arquivos .frm ou MYI serem corrompidos. Pelo menos até o momento não tive a felicidade de encontrar problemas com eles. O que acontece com freqüência em alguns servidores mais populares é corromper o MYD.

O arquivo MYD é um bando de dados. Como googlar pela estrutura do MYD não retornou nada de cara, vamos apelar pra engenharia reversa. Os dados parecem estar gravados da seguinte maneira:
- 6 bytes pra demarcar o começo de uma linha;
- 0-2 bytes pra demarcar o campo (depende do tipo de campo);
- Dados (o que estamos efetivamente guardando).
Ficamos com um arquivo assim:
Começo de linha - Campo - Dados - Campo - Dados - Começo de Linha - Campo - Dados ….

Inserir um dado com os mesmos bytes dos marcadores não vai corromper a tabela. MySQL não é tão burro assim. Corromper o dado em si, mesmo que seja feito diretamente no arquivo, também não vai corromper a tabela - só vai prejudicar o dado.

Para matar a tabela, mate os marcadores. Substitua-os por qualquer outra coisa usando um editor hexa como beav (apt-get install beav). Quanto mais marcadores você matar, mais problemas vai dar para o REPAIR TABLE.

O REPAIR TABLE parece usar o arquivo de índice para ajudar a recuperar dados. Se a sua estrutura usa indexação, em geral menos dados são perdidos.

1 comentário »

Web semântica

O video abaixo (em inglês) ilustra de forma didática, o que é e como funcionaria a web semântica.

Vale a pena conferir também a extensão Operator para o navegador Firefox que identifica Microformats nas páginas.

Sem comentários »

Tudo Mudou. Muito Rápido. Não Deu Tempo.

Pois é, não deu tempo. A vida continua.

O administrador do blog é o maior Hexaman. Codifica em Assembly, Python, PHP, Smalltalk, C, Clipper, ASP, Prolog, Basic entre outros que não conheço e produz em todas as linguagens programas que são ao mesmo tempo recursivos, fáceis de compreender e super otimizados. A qualidade do seu código é algo que há anos procuro alcançar, em vão.

Mas não deu tempo. A vida continua. Desde o Windows ME eu me pergunto porque a Microsoft e outras empresas vendem código inadequado pro hardware, cheio de penduricalhos mal e porcamente implementados. E fazem uma boa grana.

Joel descreveu neste artigo sua visão sobre o assunto. E, puxa, ele realmente parece estar certo.

E insisto em dizer que não deu tempo. Até consegui escrever estes novos penduricalhos no nosso software, mas não deu tempo de otimizar o código, não deu tempo de limpar e escrever algo mais adequado pro equipamento que tenho agora. Mas diabos, que se dane. A vida continua. E o computador do ano que vem vai conseguir lidar com isso. E nosso software vai rodar bem no computador do ano que vem, nossos consumidores vão amar os novos penduricalhos e vão correndo comprar o computador novo e contratar mais banda pra internet. Enquanto o ano que vem não vira, vou escrever mais penduricalhos.

E a arte que nós produzimos em forma de código? A beleza da lógica, recursividade e manutenibilidade que colocamos em cada projeto em todos esses anos? Isso fica nos nossos arquivos pessoais, transferidos de mídia em mídia (fita cassete, disquete, cd) como celebração de uma época em que éramos, …, hum, … ..-. . .-.. .. –.. . …

1 comentário »

Hello World

Sempre que estamos aprendendo uma nova linguagem de programação ficamos curiosos para ver a “cara” de um programa naquela linguagem.

O famoso programa “Hello World” faz isso. Ele mostra qual o código necessário para exibir a mensagem “Hello World” (”Olá Mundo”) em uma determinada linguagem de programação.

A página abaixo mostra o programa “Hello World” escrito em inúmeras linguagens de programação.

http://roesler-ac.de/wolfram/hello.htm

Sem comentários »

PROLOG

Criado em 1972, apresenta uma forma interessante de programar.

Cheque o tutorial aqui.

Ou a Wikipedia aqui.

Ou o compilador aqui.

Sem comentários »