CSS e cache

Uma dica:

Durante o desenvolvimento, costumo usar:
@import url(estilo.css?<%=rnd%>);

Assim não tenho problemas com cache.

Depois que o site vai pro ar, coloco:
@import url(estilo.css?1);

Quando preciso fazer alguma alteração, mudo o número:
@import url(estilo.css?2);

Assim, quem costuma visitar constantemente o site não vai ficar com a versão antiga em cache.

Obviamente, você pode fazer a mesma coisa com PHP, Python, JSP, ColdFusion… Basta trocar rnd pela função de random da sua linguagem.

Projeto + Vida

“O Estado de São Paulo faz aproximadamente 900 mil coletas de sangue por ano, mas necessita de sangue para 1 milhão e 500 mil transfusões anuais. A necessidade é tão grande que a juventude adventista na União Central Brasileira está se unindo para desenvolver o Projeto + Vida. A maior campanha de doação de sangue[bb] em todo o Estado de São Paulo, começa agora e com você.

Projeto Mais Vida

Você precisa participar porque é muito simples, basta usar 1 minuto para acessar o site www.projetomaisvida.com.br e clicar em Quero participar – Cadastro aqui.

Mais simples do que isso impossível. Você pode doar quando quiser e puder. É importante que você faça seu cadastro on-line.

Para celebrar esse projeto estaremos juntos no Dia 17 de setembro no Ginásio do Ibirapuera, numa grande concentração jovem. O Governador de S. P. – Geraldo Alkminn e o Prefeito José Serra estarão presentes, e você é nosso convidado.

Faça a sua parte. Já que é tão fácil salvar vidas, avise seus amigos, e vamos multiplicar felicidade para aqueles que esperam que você dê o sangue por esse projeto.

Não deixe a primavera passar em branco. ”

PS: Já marquei minha doação. Vou com um grupo de amigos nesta sexta-feira. Qualquer um pode ajudar. Para ser um doador, basta:

  • Ser saudável[bb];
  • Ter entre 18 e 65 anos;
  • Pesar mais de 50 kg;
  • Não ter comportamento de risco para doenças sexualmente transmissíveis ou transmitidas pelo sangue;
  • Não fumar 2 horas antes ou após a doação;
  • Não estar em jejum. Evitar alimentos gordurosos nas 4 horas que antecedem a doação.

Se você não é do Estado de São Paulo, há Projeto Mais Vida também nos estados do sul (RS, SC e PN) e o procedimento para participar é o mesmo. Se é de outro estado, não se acanhe, doe sangue mesmo sem projeto.

Está esperando o quê? Cadastre-se, e avise seus amigos.

Upload ASP sem componentes

Como fazer upload de arquivos no ASP[bb] sem usar componentes no servidor?

  1. Baixe esse arquivo: upload.asp.zip e descompacte em seu servidor. Eu costumo deixar arquivos como esse, que só contém funções genérica, na pasta /api no servidor, de onde eu posso fazer um include virtual em todas as aplicações em que precisar.
  2. O formulário tem que ser submetido de um jeito especial, assim <form action="arquivoquerecebeopost.asp" method="post" enctype="multipart/form-data">
  3. Na página que vai receber o post, você não pode usar Request() nem Request.Form(), apenas Request.QueryString().
  4. No começo da sua página, chame a função upload_ReadRequest
  5. Onde precisar ler os valores do formulário, use uRequest("nomedocampo")
  6. Para salvar o arquivo: upload_SalvaArquivo "nome_do_campo_file", "C:\Caminho\PodeUsarServerMapPathSeQuiser\", "nomedoarquivo.jpg", "jpg". O último parâmetro é uma lista das extensões permitidas (algo como “doc,txt,rtf,pdf”.)
  7. Se quiser obter o nome do arquivo, use UploadRequest.Item("nome_do_campo_file").Item("FileName"). Vem o caminho completo, você precisa tratar a string se quiser apenas o nome. Isso não é difícil, eu costumo fazer com split.

Exemplo de código.

Migrando

Sou um sujeito esquisito, não? Migrei meu Desktop para Linux há alguns anos, e só agora estou migrando meu servidor. Por enquanto, temos apenas o blog, onde estou usando Movable Type WordPress. Já migrei todo o conteúdo do blog para cá (o script para fazer isso me consumiu umas duas horas) mas naturalmente deve haver algum erro.
Em seguida vou:

  1. migrar as outras aplicações em ASP hospedadas na Locaweb
  2. cuidar do layout das coisas aqui (template para o blog, inclusive)
  3. cancelar minha conta na Locaweb

A medida que for migrando as coisas, pretendo zipar o código ASP do que for interessante, como o RSSficador, e disponibilizar aqui, para o pessoal que ainda usa ASP.

Configurando o Kopete para o Google Talk

Kopete conectado no Google Talk Senhoras e senhores, ele chegou: Google Talk. Leve, bonito e funcional, um sistema de mensagens instatâneas sem complicações.
Um fato interessante, ao contrário de praticamente todo mundo que já investiu em instant messenger até hoje, eles não criaram um novo protocolo proprietário. Estão usando Jabber. Significa que já existe uma série de clientes capazes de conversar com o Google Talk (só chat, nada de voz por enquanto). Significa também que usuários de Linux[bb], Mac OS e boa parte dos sistemas operacionais usados hoje podem bater papo com seus colegas de Windows. Já configurei minha conta (elciof arroba gmail ponto com) no Kopete.
Configurações, Configurar Kopete, Contas, Novo, Jabber.
Em “ID do Jabber”, seu Gmail (incluindo o @gmail.com) e na senha vai a sua senha do Gmail. Depois clica em conexão e manda bala:
Configurar Kopete para o Google Talk

Coisas interessantes que ando fazendo com Python

Coloquei no ar há duas semanas minha primeira aplicação de verdade em Django. Interessantíssimo. Muito fácil, e está amadurecendo muito rápido.
Descobri o Glade, descobri a pyGTK e descobri que isso tudo roda bastante bem em Windows. Estou me perguntando como eu pude viver tanto tempo sem isso!
Acabo de descobrir a classe SimpleXMLRPCServer. Genial, duas linhas de código para servir webservices, mais uma para cada função que você quiser registrar. Amo Python[bb]!

Batuta

Recebi a batuta do Bruno. Vamos lá.
Gigabytes de música no computador:
$df -h /dev/hdb1
Sist. Arq. Tam Usad Disp Uso% Montado em
/dev/hdb1 9,5G 9,1G 424M 96% /mnt/hdb1
(Preciso de outro HD com urgência!)
Último CD que comprei:
Acappella, The Collection.
Cinco músicas que eu escuto bastante:
Ah, vê direto lá: audioscrobbler.com/user/elcio.
Música que estou ouvindo agora:
Acappella – Everything We Need Cinco pessoas para quem estou passando a batuta:
O primeiro que comentar respondendo: “Quantos comas tem uma oitava?” leva a primeira batutada. Depois que alguém responder certo, eu posto outra pergunta para o segundo.
[Update 1]: Então a primeira batutada vai direto na cabeça do Peka, que se quiser, pode batutar aqui nos comentários mesmo, uma vez que não tem blog. A segundada batutada vai para quem responder certo: “Qual a origem do termo ‘vitrola’?”
[Update 2]: Exato, Gustavo! Na verdade, ele era o dono da R.C.A. Victor, a empresa que produzia a “Electrola”, que as pessoas começaram a chamar de “Victrola”. Batutada pra você! E a próxima: Quem adivinhar primeiro qual o player de música que eu uso leva batuta na cabeça.
[Update 3]:Até que enfim!
Batuta para o Rodrigo! Os próximos dois que comentarem dizendo que player de música usam levam batutada também.
[Update 4]:Batutada para o Cárlisson, que usa Rythmbox (excelente escolha) e para o Renato que usa Media Player (sem comentários…) E acabaram-se minhas batutas…

O que há de novo no novo Firefox, o DeerPark Alpha 1

Acabo de testar o Alpha 1 do novo Firefox, o DeerPark. Vale lembrar que é uma versão Alpha, uma versão de testes, apenas para você experimentar o que vem por aí. Não vá sair instalando esse navegador e querendo usar como navegador padrão, hein!
Para começar, a instalação. Tranqüilíssima, como tem sido todas as instalações do Firefox ultimamente. Além disso, boa surpresa, grande parte das minhas extensões continuaram funcionando.
Caixa de About do novo Firefox, o DeerPark, versão Alpha 1
Há uma série de novas funções para o usuário, vou citar as mais interessantes. A primeira que notamos é a “Sanitize”, que limpa histórico,senhas, cookies e etc. com um clique do mouse.
Sanitize Privacity no novo Firefox, o DeerPark, versão Alpha 1
Outro recurso muito interessante é a exibição de uma miniatura na barra de abas quando você usa o navegador para visualizar uma foto.
Thumbnail (miniatura) ao visualizar foto no novo Firefox, o DeerPark, versão Alpha 1
Há um recurso ainda experimental que torna os cliques nos botões de avançar e voltar de efeito instantâneo. Ao que parece, o DeerPark não carrega novamente as páginas do histórico, usando tudo do cache. Esse recurso vem desabilitado por padrão e para ligá-lo é preciso configurar o número de níveis do histórico a guardar em cache no valor browser.sessionhistory.max_viewers nas configurações (about:config)
Thumbnail (miniatura) ao visualizar foto no novo Firefox, o DeerPark, versão Alpha 1
Esse é um recurso do qual eu sentia falta. Ao tentar acessar um site de FTP protegido por senha o Firefox tentava o login anônimo e em seguida falhava. O DeerPark pede login e senha.
Caixa de login e senha para FTP protegido no novo Firefox, o DeerPark, versão Alpha 1
Em Help, Report Broken Website, o usuário pode direcionar sua raiva e frustração para algo útil, avisando os desenvolvedores que determinado site não funciona no Firefox.
Caixa de login e senha para FTP protegido no novo Firefox, o DeerPark, versão Alpha 1
Além desses há uma série de outros recursos interessantes para o usuário. Já para os desenvolvedores o DeerPark está ainda mais delicioso. Vamos começar com a melhor notícia: suporte nativo a SVG.
Suporte nativo a SVG no novo Firefox, o DeerPark, versão Alpha 1
Além disso, eles estão fazendo experiências bastante interessantes com CSS 3. Muita coisa que ainda é draft já tem suporte. Novidades também em javascript (suporte a XML[bb] events, por exemplo) e HTML (suporte a tabindex negativo e outras coisinhas) e algo muito interessante, suporte nativo à tag <canvas />. Há também uma série de novos recursos para desenvolvedores de extensões, dos quais não quero vou aqui.
A estabilidade e rapidez permanecem as mesmas, e os novos recursos mais uma vez colocam o Firefox à frente de qualquer outro navegador, tanto como um simples browser como quanto uma plataforma de desenvolvimento de aplicações web.

Ajax e o hype

Esse é o verdadeiro Ajax Minha primeira aplicação com XMLHTTPRequest foi feita em 1999. Era uma sala de bate-papo e naturalmente, só funcionava no Internet Explorer. Muito tempo antes disso eu já usava requisições em frames ocultos para evitar requisitar uma página inteira. De lá para cá as coisas evoluiram. O XMLHTTPRequest se tornou parte do padrão ECMA e os navegadores amadureceram em seu suporte, de modo que hoje é possível que aplicações como o GMail funcionem em pelo menos quatro navegadores diferentes.
Tenho uma ferramenta de bate-papo e navegação assistida que usamos nos cursos de padrões web. Quando a desenvolvi, como o suporte a XMLHTTPRequest ainda era incipiente, ela só funcionava no Mozilla e, às custas de muitos hacks, no Internet Explorer. Depois disso nunca mais mexi no código. Hoje ela funciona com perfeição no Opera 8 e no Konqueror 3.4 (alguma boa alma feliz proprietária de Macintosh poderia me ajudar a testar no Safari?)
Esse é um excelente exemplo de algo que eu vivia dizendo aqui: quem usa padrões não tem medo do futuro.
Além dessa aplicação, há uma série de outras, como a de preenchimento automático de endereços na tela de matrícula do curso (preencha o CEP e clique em buscar).
Assim como eu, muita gente já vinha desenvolvendo Ajax[bb] há bastante tempo. Você vê bons exemplos por aí, em todo lugar. E é natural que muita gente se levante contra o uso do termo. Afinal de contas, porque dar um nome novo e uma aparência de ser a descoberta do século para algo que eu já usava no século passado?
Isso me faz lembrar que muitos de nós tivemos o mesmo sentimento quando a Macromedia começou a falar em RIA. Ora, RIA para a Macromedia nada mais é do que Flash se comunicando com o servidor, provavelmente usando XML. Eu já fazia isso com o Flash 4, sem XML. Com o Flash 5 comecei a fazer a mesma coisa, dessa vez usando XML. Não há nenhuma novidade nisso!
A despeito de nossos protestos, a Macromedia continua falando em RIA, e o mercado adotou a idéia. Seu chefe, seus professores, ou talvez até seu cliente estão falando de RIA como se fosse a oitava maravilha do mundo.
Se não pode vencê-los, junte-se a eles! Vamos desenvolver RIA, usando Ajax! Vamos mostrar que também sabemos usar o hype e colocar nossas siglas na boca do povo. Vamos escrever comparativos entre Ajax e Flash, e mostrar que Ajax é a melhor solução para RIA na maioria dos casos. Vamos ver nossos gerentes e diretores falando sobre a nova tecnologia que a equipe de TI implantou sob o comando deles: Ajax. Vamos continuar defendendo padrões abertos baseados na simplicidade, mas vamos falar a língua deles. Assim você pode continuar fazendo seu trabalho e ao mesmo tempo satisfazer a necessidade que algumas pessoas tem de “algo novo que venha revolucionar o atual esquema de coisas” (seja lá o que queiram dizer com isso.)
Ajax neles!
Agora, sejamos honestos: o hype pode ser bom também para te fazer pensar. O Gmail para mim foi um tapa de luva de pelica. Os recursos estavam lá há bastante tempo, prontos para ser usados, e quantas oportunidades eu perdi de facilitar a vida das pessoas que vão usar meus sistemas porque subutilizei ou não utilizei XMLHTTPRequest[bb]. Talvez dar nomes às coisas ajude a torná-las ferramentas. Talvez da próxima vez eu vá me perguntar: não seria interessante aplicar Ajax aqui?
Para terminar, estou gostando do rumo que as coisas estão tomando. Estou fazendo experiências, estudando, de olho no que andam dizendo, e logo trago novidades para vocês (inclusive uma aplicação de exemplo que estou quase terminando.)

Google Maps

Esse serviço do do Google Maps com foto de satélite é realmente impressionante. Não é à toa que todo mundo está falando disso. Pena que seja só Estados Unidos e Canadá…
Hoje perdi uns 20 minutos serguindo uma estrada e encontrei isso aqui. Estranho, não? Parece que o sujeito queria se comunicar com astronautas ou extraterrestres[bb]. Ou seria algum tipo genial de publicidade usando fotos de satélite?
Bom, uma rápida pesquisa mostrou que eu não fui o primeiro e descobri até uma explicação muito interessante.