Categoria PHP

Nov 26

Descubra sua senha do ENEM

Chegou a época de receber os resultados do Exame Nacional do Ensino Médio, e com ele veio o desespero de muitos. Não pelo desempenho nas questões objetivas ou na redação, mas pelo fato de boa parte da galera ter esquecido de anotar a senha para acessar o boletim on-line lá, no site do INEP.

Ter o resultado do ENEM é importante, pois em muitas universidades as notas podem ser aproveitadas. Com o caótico congestionamento no site do Exame, a recuperação de senha ficou indisponível por dias.

Eis que então, em 5 minutinhos, eu fiz um script que - utilizando o algoritmo da senha do ENEM - gera a senha de acesso a partir do número de inscrição.

Fiz em 5 minutos, mesmo. Ou até menos. Só agora dei uma embelezada no negócio.

Clique aqui para saber a sua senha do ENEM

O algoritmo e a falcatrua

Na verdade, a senha não é um número randômico, salvo em um banco de dados, e nem usei API nenhuma (até por que o pessoal do governo nem deve saber o que é uma API). O cálculo da senha é feito com base no número da inscrição, que é uma string de 12 caracteres numéricos. E a senha, sendo também uma string numérica de 8 caracteres, é calculada da seguinte maneira (cada item é um dos caracteres da senha):

  •  9 - 9° número da string
  • 10° número da string
  • 9 - 11° número da string
  • 12° número da string
  • 9 - 5° número da string
  • 6° número da string
  • 9 - 7° número da string
  • 8° número da string

Alguém se habilita a fazer o script em Javascript?

Sep 30

Eu quero um framework!

Na verdade, na verdade mesmo, sou desenvolvedor. Claro que gosto muito de implementação front-end (XHTML e CSS), e este também é meu serviço. Mas sinto a cada dia que passa que meu chão é programação. A linguagem que venho me dando bem é o PHP, mas nos ultimos meses venho sentindo que na programação eu posso e preciso ser ainda mais produtivo. Com o desenvolvimento de um sistema particular, melhorei muito essa questão da simplicidade e produtividade da programação, mas isso não é o suficiente.

Nada comparado a Ruby on Rails, Django, ou mesmo CakePHP. Tenho conversado com alguns amigos sobre qual é a escolha certa. Tentei começar com Ruby, tentei começar com Python. Nada feito. Gosto muito do PHP, e foi só essa semana que parei para pensar que não preciso sair do PHP para ser produtivo. E aí começa minha aventura.

Resolvi que escolhi o CakePHP. Acompanhando alguns tutoriais do Tulio Faria, estou vendo como é simples fazer a coisa acontecer com o Cake. Foi por isso que criei a categoria CakePHP aqui no blog. Quero, ao passo que for aprendendo, transmitindo isso para a comunidade.

Para mim é como se fosse aprender uma nova linguagem, pois não sou craque em orientação a objetos ainda. Mas como nada na vida vem de graça, a peleia é longa e a minha bakery está entrando em ação para colocar esse CakePHP para funcionar.

Apr 03

Negociação de conteúdo

Embora o XHTML devesse ser servido com o MIME application/xhtml-xml, nem todos os browsers estão aptos a entender este MIME Type. Neste contexto, técnicas de negociação de conteúdo - ou content negotiation em inglês - podem ser utilizadas para enviar ao agente de usuário diferentes MIME Types, de acordo com o que cada um deles aceita. A esmagadora maioria utiliza o MIME Type text/html para servir documentos XHTML, embora não seja a maneira correta. De acordo com a nota não-normativa da W3C, XHTML Media Types,

‘application/xhtml+xml’ SHOULD be used for serving XHTML documents to XHTML user agents. Authors who wish to support both XHTML and HTML user agents MAY utilize content negotiation by serving HTML documents as ‘text/html’ and XHTML documents as ‘application/xhtml+xml’.

Ou seja, o autor que deseja dar suporte tanto para user agents XHTML quanto para HTML, deve utilizar negociação de conteúdo para servir documentos com o MIME Type adequado a situação. Um simples script em PHP resolve o problema:

<?php
if (stristr($_SERVER[HTTP_ACCEPT], “application/xhtml+xml”) ||
stristr($_SERVER["HTTP_USER_AGENT"], “W3C Validator”)) {
header(”Content-Type: application/xhtml+xml; charset=iso-8859-1″);
header(”Vary: Accept”);
echo(”<?xml version=\”1.0\” encoding=\”iso-8859-1\” ?>\n”);
} else {
header(”Content-Type: text/html; charset=iso-8859-1″);
header(”Vary: Accept”);
}
?>

O script verifica se o agente de usuário suporta o application/xhtml+xml, ou se o agente de usuário é o W3C Validator. Caso um deles seja verdadeiro, o documento é servido como application/xhtml+xml, caso contrário, ele é servido como text/html. Além disso, se um deles for verdadeiro, o documento recebe a declaração XML.

O cabeçalho Vary: Accept é enviado para que agentes intermediários de cache, como proxy servers, saibam que o MIME Type varia, de acordo com o suporte que o agente de usuário oferece.

O benefício disso tudo é que em browsers como Firefox e Mozilla, que suportam o MIME Type application/xhtml+xml, o código XHTML é tratado como XML no que se refere a intolerância a erros. Ou seja, se um documento XHTML, com MIME Type application/xhtml+xml possuir erros de sintaxe, estes browsers não irão mostrá-lo, assim como acontece com o XML inválido. Somente serão exibidos os documentos assim que os erros de sintaxe estiverem corrigidos. Assim, nem o W3C Validator é necessário para apontar erros.

Veja também

photo Rafael Marin Bortolotto
RafaelMarin.net
rafael arroba rafaelmarin.net
Rua Antonio Rossato, 223
Caxias do Sul , RS , 95013-090 Brazil
Latitude: -29.160758, Longitude: -51.197619
+55 54 3211.3159