sexta-feira, 19 de dezembro de 2008

Problema com ashx assíncrono gerando imagens no IE6

Bug Internet Explorer 6 visualizando imagens geradas por IHttpAsyncHandler

O IE6 precisa de que as imagens recebidas via Http venham com o cabeçalho Content-Length, em alguns casos, senão ele não termina a requisição. Como o ashx assíncrono não preenche este campo automaticamente, então devemos preenchê-lo manualmente com um código da seguinte forma:

using (Image resizedImage = resizeImage(image))

{

using (MemoryStream memoryStream = new MemoryStream())

{

resizedImage.Save(memoryStream, ImageFormat.Jpeg);

context.Response.AddHeader("Content-Length", memoryStream.Length.ToString());

memoryStream.WriteTo(context.Response.OutputStream);

}

}

sábado, 8 de novembro de 2008

Excelente Google Gadget de Finanças

Nosso amigo desenvolvedor gusbaggio publicou finalmente seu excelente Google Gadget para finanças, ações da BM&F Bovespa e outros índices de outras bolsas do mundo.
Segue o link:
http://www.google.com.br/ig/directory?type=gadgets&url=www.tidybits.com/GGQuotesBR/specification.xml

sexta-feira, 24 de outubro de 2008

Atualização do Orkut Mobile Scrapbook Google Gadget

Devido à atualizações da API do Google Gadgets, tive que atualizar também o meu gadget para visualizar scraps do Orkut. Com certeza vocês vão gostar porque é muito superior à concorrência!!!

adicionem via:

http://www.google.com/ig/directory?type=gadgets&url=jaderd.googlepages.com/orkutmobilescrapbook.xml

Abraços

domingo, 12 de outubro de 2008

LaBrute como jogar o jogo online do momento

LaBrute é um jogo de luta com um personagem por jogador, que evolui (ganha força e equipamentos) a cada luta. Para acessar clique em

http://vernicht.labrute.fr

Como jogar:

1) No campo escrito "Tape Ici" escreva um nome (único) disponível e será sorteado uma aparência para seu personagem. Se não gostar da aparência clique no botão à esquerda do bonequinho para trocar. Para iniciar o jogo clique em "Valider". Se não der certo é porque você terá que trocar de nome.

2) Assista o massacre e aguarde aparecer o link "Aller dans la cellule de " embaixo

3) Clique no link

4) Aparecerá a tela de visualização do personagem, guarde o link para esta página

5) Clique em "Arene" para enfrentar outros personagens

Esse jogo Flash online em francês está fazendo o maior sucesso, porque não existe formulário de inscrição, mas mesmo assim o progresso do seu personagem é registrado.

Um manual mais completo está em http://www.guravehaato.info/geek-life/jogos/como-jogar-la-brute/

Salvem os programadores

O blog Aplicativos Diários está aderindo oficialmente a campanha "Salvem os desenvolvedores!", que tem o objetivo de fazer com que todos os usuários da Web atualizem seus navegadores. A meta atual é conscientizar as pessoas e as empresas de que o Internet Explorer 6 deve ser atualizado para o IE7, pois o anterior é ruim para sua segurança, e nós desenvolvedores gastamos muitas horas para fazer nossas aplicações funcionarem neste navegador. Os desenvolvedores que iniciaram esta iniciativa acham ruim ter até 25% por cento dos seus usuários navegando via IE6, mas o problema é muito mais grave no Brasil, onde até dois terços dos pageviews vêem de um IE6.

segunda-feira, 23 de junho de 2008

Teste e meça o desempenho de aplicações Web

Em agosto estará disponível uma nova ferramenta da Keynote para testes e medição de performance de aplicações Web, o nome da ferramenta é KITE, abreviatura para Keynote Internet Testing Enviroment.

Segue o link para cadastro como "early adopter", para receber o aviso no dia do lançamento:
http://kite.keynote.com/

Não conheço outra ferramentas de testes, nem de medição de tempos, para Javascript. Se alguém souber de uma me avise, por favor. Conheço apenas ferramentas, como o Firebug, que mede apenas tempos de download.

terça-feira, 3 de junho de 2008

Novidade no Panoramio

Os usuários do site Panoramio
Poderão agora usufruir de uma nova funcionalidade chamad LOOK AROUND
Para sentir o gostinho veja o exemplo da Catedral de Notre Dame;
http://nv0.panoramio.com/navigate.php?id=36026
Existe um software que faz isso analisando semelhanças entre imagens, e permite você navegar por um ambiente do qual vc tenha muitas fotos como se fosse um ambiente 3d, mas parece que o Panoramio basea-se apenas no geotagging das fotos

sábado, 24 de maio de 2008

Google Maps Polyline Encoder - Codificador de Linhas

Resolvi juntar os 3 seguintes sites num único e simples Mashup
  1. Codificador simplificador de polylines http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/
  2. Desenhador de polígonos, markers e polylines http://gmaps-samples.googlecode.com/svn/trunk/poly/mymapstoolbar.html
  3. Codificador oficial de polylines http://code.google.com/apis/maps/documentation/polylineutility.html

















sexta-feira, 16 de maio de 2008

O melhor CAPTCHA do mundo

CAPTCHA é uma forma de diferenciar usuários de bots, protegendo seu site contra uso indevido. Os captchas mais comuns são os números e letras escritos em uma figura parecida com a abaixo.Mas este método está sendo burlado com facilidade por bots com capacidade de reconhecer caracteres. Então inventaram o captcha "cachorro ou gato?" que é muito mais dificil para bots do que para humanos



Só que os mais espertinhos trataram logo de melhorar a idéia, gerando o melhor captcha visual do mundo;



Existem também captchas sonoros mas estes ficam para outros posts

quarta-feira, 14 de maio de 2008

Abrir arquivos do Google Earth (*.kmz) usando o browser

Há algum tempo descobri que o Google Maps mostrava o conteúdo de arquivos KML. Basta colar a URL do arquivo no campo de busca do site
http://maps.google.com
e efetuar a busca. O que eu não sabia é que a mesma técnica funciona para os ilegíveis arquivos KMZ do Google Earth.

Para abrir um arquivo KMZ, como este aqui:
http://www.gearthblog.com/kmfiles/lasvegas.kmz
no Google Maps, há também um método alternativo, basta colocar
http://maps.google.com.br/maps?q=
antes da URL, ficando assim:
http://maps.google.com.br/maps?q=http://www.gearthblog.com/kmfiles/lasvegas.kmz
Desta forma não precisamos instalar o Google Earth para ver tais arquivos.

sábado, 10 de maio de 2008

Melhores Mashups de Google Maps

Eu acompanho diariamente os principais blogs sobre mapas interativos online, principalmente Google Maps e Google Earth. E gostaria de listar aqui os que mais me impressionaram.
  1. Joguinho do Helicóptero em Amsterdam - estou tentando fazer uma versão em javascript mas ainda está engatinhando, clique aqui para ver.
  2. Twitter Spy - Veja daonde as pessoas estão micro-blogando. Queria fazer uma versão com restrição geográfica, mas não sei se vou ter tempo pra estudar a API do Twitter.
  3. Vídeos imersivos de visão da rua - agora o street view em vídeo, use o mouse para olhar em 360 graus.
  4. Imobiliária grátis - ache imóveis na região desejada, filtre por preço e tamanho, de graça.
  5. Mensagens de voz geolocalizadas - os caras não souberam vender o produto deles, mas isso ainda vai fazer muito sucesso.
  6. Descrição de Paris feita por usuários - esta idéia é melhor que a da Wikimapia porque permite buscas e classificação de marcadores, que são mais simples que polígonos.
  7. Camada de estatísticas de Londres - uma ótima forma de visualizar dados!
  8. Reporte um crime - um site colaborativo de Fortaleza que sendo bem específico em sua proposta obteve grande sucesso. Encontrei também este KML sobre assassinatos em Curitiba

sexta-feira, 9 de maio de 2008

Joguinho do helicóptero sobrevoando curitiba v1






Clique na seguinte caixa para iniciar:


Use as setas do teclado < ^ > para navegar, + e - para zoom


Lista de melhoramentos a realizar:
  1. Integrar com Google AdSense para fazer com que o jogador tenha que achar o estabelecimento anunciado através do endereço ou de uma setinha apontando o destino.
  2. Alternativa: Utilizar uma lista de estabelecimentos de determinada categoria (ex: baladas) para que o jogador teste seu conhecimento da localizacao dos principais pontos em sua cidade.
  3. Integrar o aplicativo com FireEagle para que a página abra já na cidade do indivíduo, ou que abra exatamente no ponto onde ele se localiza.
  4. Trocar o gif do helicóptero por uma figura que se oriente de acordo com os comandos do usuário.
  5. Mudar o modo aéreo por um que o usuário tenha que dirigir apenas pelas ruas e nos sentidos permitidos.
  6. A função da API panTo efetua um movimento suave, mas não carrega novas imagens, já a função setCenter carrega novas imagens mas faz o mapa piscar.


segunda-feira, 5 de maio de 2008

Desempenho de páginas Web

Ou "Como deixar meu website mais rápido?"
Steve Souders proclama que desenvolveu o YSlow, extensão do Firefox e do Firebug que calcula uma nota para a conformidade de um site com as regras para sites de alta performance da YDN. Agora ele proclama mais 10 mandamentos para o desenvolvedor de sites eficientes. Vou listar todas as regras juntas agora:
  1. Diminua requisições HTTP
  2. Hospede seu site em servidores espalhados geograficamente
  3. Crie um prazo de expiração e controle o cache pelo HTTP Header
  4. Compacte os arquivos
  5. Ponha stylesheets no header
  6. Ponha JS no final do body
  7. Evite programação dentro do CSS
  8. Coloque todo JS e CSS cada um no seu arquivo separado
  9. Diminue busca por nomes em DNS
  10. Minifique JS e CSS
  11. Evite redirects (301 e 302)
  12. Remova scripts duplicados
  13. Configure ETags
  14. Faça AJAX cacheável
  15. Use o flush no header para enviar mais cedo partes do HTML
  16. Use GET para fazer requisições AJAX
  17. Carregue depois o que não for essencial no início
  18. Pré-carregue o que provavelmente terá de ser carregado
  19. Reduza o número de tags necessárias para desenhar um layout
  20. Divida os arquivos em vários domínios
  21. Minimize o número de iFrames
  22. Evite chamadas a URLs inexistentes (404)
  23. Reduza o tamanho dos cookies
  24. Use domínios sem cookies para arquivos estáticos
  25. Minimize a chamada a elementos DOM no JS
  26. Desenvolva eventos inteligentes
  27. Prefira <link> a @import
  28. Evite filtros
  29. Otimize imagens
  30. Otimize Sprites CSS
  31. Não use imagens maiores do que o necessário
  32. Crie um favicon.ico pequeno e cacheável
  33. Mantenha todos arquivos com menos de 25Kb
  34. Empacote os arquivos em um documento de várias partes
  1. Divida a carga inicial
  2. Carregue scripts sem bloquear
  3. Não divida scripts
  4. Split dominant content domains, repetido
  5. Make static content cookie-free, repetido
  6. Reduce cookie weight, repetido
  7. Minify CSS, repetido
  8. Optimize images, repetido
  9. Use iframes sparingly, repetido
  10. Ou use www ou não use www
Eu gostaria de acrescentar às listas acima 2 regras que considero importantes:
  1. Otimize loops internos
  2. Crie páginas dentro dos padrões XHTML
A primeira tem sua razão óbvia, pois do ponto de vista da programação é dos loops internos que surge o maior consumo de tempo, otimizando-os reduzirá o tempo de computação total. Para mais instruções de como fazê-lo com Javascript leia este artigo e este também.

A segunda têm aplicações na desenvolvimento para dispositivos móveis aonde os recursos de hardware são mais escassos, e browser que entendam páginas em padrões legados são mais lentos que browsers que processam apenas XHTML. Para testar se seu site está em conformidade com estas regras, visite sua URL pública e depois digite na barra de endereço do browser o seguinte:
javascript:window.location=%22http://validator.w3.org/check?uri=%22+window.location

Bah, mais um post sobre plugins do Firefox

Não entendo as pessoas que gostam do Internet Explorer (ou IE) mais do que do Mozilla Firefox (ou FF). Pode até ter alguma vantagem (será?), mas estudos benchmarks como este e a pluralidade de plugins me fazem ser fiel a este browser. Aqui está a lista completa dos plugins para FF que considero essenciais:
  1. IE Tab - às vezes preciso abrir a porra de um site que só funciona no IE, mas posso fazê-lo sem sair do FF com este plugin
  2. Customize Google - Remove propagandas do Google de todos os sites, de quebra aumenta a segurança e a privacidade ao usar todos os serviços do Google, ainda permite customizar a busca do Google (número de resultados) e fazer que na busca de imagens os links apontem diretamente para a imagem.
  3. Ad Block Plus - Retira todas as propagandas de qualquer site.
  4. Downloads in Tab - Aquela janelinha nojenta do FF que baixa as coisas vira uma aba.
  5. No Script - Segurança tem esse nome, não entre em um site sem este cara.
  6. PDF Download - Toda vez que clicar no link de um PDF você pode escolher o que vai acontecer!
  7. Table2Clipboard - Antes deste plugin era difícil copiar uma tabela pro Excel.
  8. Gmail Manager - Verifica novas mensagens e efetua login na(s) sua(s) conta(s) do GMail. Time saver!
  9. GSpace - Transforma uma conta de GMail num drive de armazenamento remoto
  10. PermaTabs - Com ele você pode tornar qualquer aba permanente, útil pra quem usa Gadgets em sites como iGoogle
  11. Tabs Open Relative - Faz com que novas abas sejam abertas perto da aba que as criou, e não no final como o idiota do programador do FF quis.
  12. Firebug + DOM Inspector - Essencial para todo desenvolvedor Web: debugger javascript, analisador completo de tráfego, HTML, estilo, etc...

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