domingo, 27 de abril de 2008

Codificação de Strings para programação Web

A coisa mais importante para localizar seu site ASP.NET para a língua portuguesa é usar a seguinte linha no seu Web.Config:
<globalization uiculture="pt-BR" culture="pt-BR" fileencoding="iso-8859-1" responseencoding="utf-8" requestencoding="utf-8">
Para a passagem de parâmetros via QueryString, na língua portuguesa sempre há o problema de caracteres acentuados e a cedilha. Para contornar este problema os browsers sempre codificam os caracteres acentuados, de uma das seguintes formas:
  1. escape(), ex: @ vira %7E
  2. encodeURI(), ex: % vira %25
  3. encodeURIComponent(), ex: @ vira %40
Eu recomendo que quando enviar o parâmetro via URL utilize sempre EncodeURIComponent(). Se fizer assim o ASP.NET decodifica implicitamente ao receber os parâmetros com o comando:
Request.Params["nomedoparâmetro"];
Mas se o parâmetro não tiver sido codificado explicitamente, ele será codificado de forma que não será possível decodificar com nenhum dos métodos abaixo:
  1. Microsoft.JScript.GlobalObject.unescape(), complementada por escape()
  2. Microsoft.JScript.GlobalObject.decodeURI(), complementada por encodeURI()
  3. Microsoft.JScript.GlobalObject.decodeURIComponent(), complementada por encodeURIComponent()
  4. Server.UrlDecode(), complementada por Server.UrlEncode()
Nota: Para usar o Microsoft.JScript no MS Visual Studio, você precisa adicionar a referência manualmente (Add Reference).

Já no JavaScript (e também no JScript) existem
escape(), encodeURI() e encodeURIComponent() e as funções inversas.

Quando a meta tag de codificação iso-8859-1 não está presente no header do documento HTML, faz-se necessário utilizar a codificação HTML, também chamados de entity escape characters. Para realizar a conversão você pode fazer manualmente com ajuda desta tabela, ou utilizar as seguintes funções:

ASP.NET
  1. Server.HtmlDecode()
  2. Server.HtmlEncode()
No JS você precisará da biblioteca PrototypeJS para chamar as seguintes funções:
  1. escapeHTML()
  2. unescapeHTML()
A seguir listo o código destas funções para você não ter que incluir toda a biblioteca só para usar estas funções:

function escapeHTML() {
var self = arguments.callee;
self.text.data = this;
return self.div.innerHTML;
}

function unescapeHTML() {
var div = new Element('div');
div.innerHTML = this.stripTags();
return div.childNodes[0] ? (div.childNodes.length > 1 ?
$A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
div.childNodes[0].nodeValue) : '';
}

function $A(iterable) {
if (!iterable) return [];
if (iterable.toArray) return iterable.toArray();
var length = iterable.length, results = new Array(length);
while (length--) results[length] = iterable[length];
return results;
}

sexta-feira, 25 de abril de 2008

iGoogle, Google Gadgets e Orkut Mobile

Virei adepto do iGoogle, a página inicial customizável do Google. Nesta página além da página inicial padrão do Google, você pode adicionar os Gadgets, que são pedaços de páginas web que parecem aplicativos com janelas pequenas de tamanho fixo. Seguem meus gadgets favoritos:
  1. Todo List - uma lista pessoal de tarefas a realizar (fonte)
  2. GMail - Ler meus e-mails sem sair da página inicial (fonte)
  3. Google Talk - simples e rápido, para substituir o MSN Messenger (fonte)
  4. Google Reader - bem melhor que visitar cada site/RSS de notícias/atualizações que interessa, é cadastrar todos os RSS no Google Reader e ler tudo em um só lugar. Ainda mais com a opção de esconder o que já foi lido. (fonte)
  5. Orkut Mobile - com uma pequena modificação fiz um gadget que abre o site do Orkut Mobile (fonte)
Como vocês podem ver, todos os gadgets têem seu código aberto, e o desenvolvimento é super simples, basta usar o Google Gadget Editor, ferramenta que permite também upload de arquivos (imagens, scripts, etc), salvar o código nos servidores do Google e também publicar seu Gadget para que as pessoas usem em seus sites.

PS: A imagem de fundo que eu escolhi para o iGoogle é a do céu, que muda de acordo com a hora do dia!

quinta-feira, 24 de abril de 2008

Google Maps para iniciantes

Para utilizar mapas em seu site, muitas pessoas pensam primeiro no Google Maps. Existem alternativas tão boas quanto, ou até melhores, como a Maplink, com a melhor geocodificação em território brasileiro, Yahoo! Maps com a API leve, e o MS Live Maps, com a visão 3D, apresentam vantagens e desvantagens, mas a mais comum ainda é a API do Google. Seguem os passos iniciais para quem escolher esta API:
  1. Para um desenvolvimento rápido, use os assistentes de mapas instantâneos:
  2. Você vai precisar de obter uma licença de uso
  3. Todo programador, tanto iniciante quanto o avançado dependem da Referência da API do Google que é atualizada sempre que houver mudanças no código.
  4. Para ficar por dentro da novidades e das possibilidades assine o RSS do Blog oficial do Google Maps
Em breve publicaremos um post para programadores mais avançados!

terça-feira, 22 de abril de 2008

Páginas ASP.NET cacheáveis

Ou "Como fazer que as páginas ASPX sejam guardadas no cache do browser?"

Eu costumava salvar toda página estática dos meus projetos Web em arquivos .HTML, mas o Sandro do MS-Developers me ensinou como fazer páginas ASPX cacheáveis:

Insira o seguinte código C# .NET no Page_Load:

Response.Cache.SetExpires(DateTime.Now.AddYears(1));
Response.Cache.SetCacheability(System.Web.HttpCacheability.Public);
Você pode usar a condição if(!IsPostBack) para executar o código acima em páginas AJAX.

Pesquisando melhor encontrei um método alternativo, inclua no início do arquivo ASPX:
<%@ OutputCache Duration="31536000" Location="Any" VaryByParam="none" %>
Conforme o manual do ASP Alliance

E para desabilitar o cache basta usar o seguinte código:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

quarta-feira, 16 de abril de 2008

Bateria para Windows

Quem gostaria de poder tocar bateria enquanto escuta suas músicas no PC? Mesmo se for pra tocar enquanto espera um programa carregar ou um download terminar. E que tal se o programa fosse praticamente invisível, para tocar sem ocupar espaço na tela e sem que seu chefe veja?

Construído com um par de horas de trabalho eis o Simple Drum Kit, que cumpre todas estas promessas e ainda é customizável, além dos sons originais de bateria você pode usar quaisquer arquivos WAV.

Sugestões:
- Efeitos especiais
- Backing vocals
- Percussão
- Pandeiro
- Instrumentos harmônicos
- Instrumentos melódicos
- Melodias
- Acompanhamentos
- Outras músicas


Site para download:
http://www.codeplex.com/skd