0

HTML 5 + CSS3, C# + Java e Windows Phone 7 em um post!

by Luiz Jr 24. dezembro 2011 10:43

Sim, este post tratará sobre estes três assuntos: HTML5 + CSS3 (+Javascript), interoperabilidade entre sistemas Java e .NET (não necessariamente C#) e Windows Phone 7, mas não, não serão ao mesmo tempo, hehehe. Neste final de ano o pessoal da Microsoft Brasil resolveu suar a camisa e nos entregar uma série de treinamentos gratuitos para capacitar os desenvolvedores de suas plataformas melhor. O post é breve, afinal ninguém quer ficar lendo nerdices em plena véspera de Natal, exceto eu é claro...

HTML5 &  Javascript Center

A Microsoft criou um hotsite chamado HTML5 & Javascript Center, onde dão muitas informações sobre como utilizar HTML5, CSS3 e Javascript juntos para criar páginas web ainda melhores. O site já contém muito material, incluindo tutoriais simples como uso da tag Áudio e Vídeo até coisas mais complexas como manipulação da tag Canvas (o canivete suíço do HTML5). Além disso, boa parte desse material está em Português, e mesmo o material em inglês é fácil de entender (afinal HTML é HTML em qualquer idioma...). O site também contém links de referências e está muito bem organizado por categoprias. Vale a pena conferir no http://msdn.microsoft.com/pt-br/hh442325.

Interoperabilidade entre Java e .NET

Desde que venho acompanhando a comunidade em torno da Microsoft Brasil em 2008, pude notar que uma postura que se instaurou na cia. é a de interoperabilidade de plataformas. Ultimamente a Microsoft tem lançado cada vez mais soluções interoperáveis, como seu Hyper-V e SCVMM para Linux, WebMatrix para PHP, TFS para Eclipse, Azure para PHP, Java, etc; material dedicado a HTML5 + CSS3 (existe algo mais interoperável que uma página HTML?), disponibilização de fontes para o pessoal do projeto Mono e Moonlight e por aí vai. Isto foi uma atitude muito inteligente do novo CEO Steve Ballmer, que tem atraído mais união entre os desenvolvedores de diferentes plataformas.

Dentro desta mesma linha, recentemente a Microsoft Brasil colocou no ar uma nova página dentro de seu famoso Centro de Treinamento (que eu já citei em outro post): Interoperabilidade entre Java e .NET. Todo mundo que está no mercado a alguns anos e já trabalhou em algumas empresas diferentes sabe que hoje Java e .NET são os bam-bam-bams do mercado mundial de software. As maiores cias. de software do mundo desenvolvem em tais tecnologias e os maiores salários do mercado são ofertados para analistas e desenvolvedores das mesmas. Parece que esse panorama não irá mudar nem mesmo com a crescente das aplicações móveis, uma vez que você pode continuar usando Java e .NET para programar para Android e iOS.

Mas voltando ao assunto da página, acesse http://msdn.microsoft.com/pt-br/hh314025, lá você encontra tutoriais em português sobre o funcionamento das arquiteturas (que são muuuito parecidas), sobre como fazer serviços Java conversarem com .NET e o inverso, como utilizar WCF e Glassfish e inclusive como colocar JEE na nuvem do Azure!

Windows Phone 7

E a minha notícia favorita de final de ano: uma página novinha em folha no Centro de Treinamento somente sobre Windows Phone 7 e 100% em português! Lembram-se de meu post anterior sobre Windows Phone 7, onde falei sobre os vídeos existentes no Channel 9, com o Bob Tabor? Pois é, agora temos a nossa versão tupiniquim e com ótimo conteúdo. Acesse http://msdn.microsoft.com/pt-br/hh230679 e veja uma gama completa de conteúdos como instalação do ambiente, Silverlight, XNA, deploy, debug, app lifeycle, gestos, orientação, themes, globalization, SQL Server Compact (toma SQLite!), GPS e por aí vai.

Resta saber se a parceria Microsoft + Nokia vai emplacar o WP7 na terra do Blanka, uma vez que nossa carga tributária é altíssima e fica difícil concorrer com o Android, que possui aparelhos em torno de R$500. Mas já é bom ir se adiantando, não é mesmo?

Tags: , , , , , ,

ASP.NET | Dica | Mercado | Mobile | Web | WP7 | Java

0

TextBox com recurso auto-complete com ASP.NET + JQuery

by Luiz Jr 15. dezembro 2011 20:55

Todos os leitores deste blog já devem ter sido ajudados algum dia por recursos de auto-complete em caixas de texto. Você está digitando sua pesquisa no Google e...PIMBA! De acordo com as primeiras letras que digitou, ele completa o resto da frase. Ou então você está no Mercado Livre escrevendo o nome de um produto e...ZÁZ! Ele lhe sugere o produto certo. Recursos desse tipo nos poupam muito tempo enquanto estamos buscando coisas na web. Masi que o tempo de digitar uma frase, o fato do sistema ter lhe dado uma sugestão de palavra(s) significa que ele retornará algo com a consulta e que provavelmente outras pessoas também já realizaram a mesma.

Entretanto, esse tipo de recurso muitas vezes amedronta jovens programadores, quando o assunto é ELES colocarem esse recurso em suas caixas de pesquisa. Programadores ASP.NET que o digam, pois geralmente estamos acostumados com nosso mundinho perfeito de server-side e nos esquecemos do poder de coisas triviais como Javascript, para fornecer estes recursos extremamente úteis aos usuários. O post de hoje trata de soluções existentes para o problema, uma boa solução e fornece uma solução (quase) perfeita para o problema, que você pode fazer download no final do post.

JQuery

Soluções Existentes

Quando o assunto é Javascript, a onda do momento é falar de JQuery (http://jquery.com). O framework Javascript mais badalado do momento é extremamente poderoso e produtivo, e consequentemente muitas extensões do mesmo surgiram, como o JQuery UI (http://jqueryui.com). Neste conjunto de componentes JQuery prontos, temos o Autocomplete (http://jqueryui.com/demos/autocomplete/), uma caixa de texto que carrega uma coleção de JSONs com as possíveis sugestões. Se você não conhece JSON e/ou se amedronta só em ouvir, esqueça. Para que este Autocomplete funciona você terá de escrever Javascript dinamicamente na página, de acordo com o que o usuário digitar, ou então, escrever toneladas de JSON na tela para todas as possíveis sugestões. Apesar de ser puramente escrito em Javascript e muito completo, ele carece de desempenho...

Outra solução muito comum de ser vista na web, quando o assunto é ASP.NET é utilizando ASP.NET Ajax. Todo mundo que já usou ASP.NET Ajax e Ajax tradicional sabe das diferenças entre eles, principalmente no quesito performance. O ASP.NET Ajax abstrai do desenvolvedor toneladas de conceitos em cima de Javascript e XML em componentes como Update Panel e Timer, porém ao custo de ser mais lento que o Ajax tradicional e emporcalhar toda sua página com Javascript que você não pediu. Geralmente a solução mais encontrada envolve colocar um TextBox dentro de um UpdatePanel, setando uma consulta SQL no evento OnTextChanged do TextBox, ou seja, para cada letra digitada no TextBox, uma consulta SQL será realizada, retornando os resultados em uma DIV e como está tudo dentro de um UpdatePanel, a impressão que dá (não fosse a lerdeza) é de que você fez mágica!

A solução que vou propor a seguir é uma mescla dos dois conceitos e foi a melhor forma que encontrei de fazer isso até o momento. Sinceramente me diverti no processo (ok, eu sou nerd), o que foi um dos motivos de eu não ter procurado mais soluções existentes antes de desenvolver a minha.

SugestBox

Solução Proposta

Minha vida mudou depois que conheci a função 'load' do JQuery (http://api.jquery.com/load/), basicamente você usa os seletores para encontrar uma DIV e carrega pra dentro dela o conteúdo de uma URL que você passa como parâmetro para a função, em uma versão bem simples de Ajax que funciona perfeitamente. Quando você cai na real, percebe que o load é uma forma muito elegante e escalável de carregar trechos de HTML dinamicamente, dando um efeito mágico às suas páginas. Imagine listas de produtos que se carregam sozinhos sem esperar que a página inteira carregue. Ou DIVs que carregam seu conteúdo conforme opções que o usuário escolhe. Ou imagine que enquanto você digita um texto em um TextBox, sugestões aparecem...Ei!

//exemplo de uso do load
$('#div').load('http://minhaurl.com/default.aspx');

O load apenas acessa uma URL assincronamente ao restante da página e devolve o HTML. Ou seja, com ele você pode chamar uma página em sua linguagem de programação favorita (aham...ASP.NET) e colar o resultado da execução em uma div. Com um pouco mais de criatividade, você pode fazer coisas como:

//chamando uma página e passando parâmetros
$('#div').load('http://minhaurl.com/default.aspx?busca=carro');

Enquanto isso, na página Default.aspx, você pode colocar o código que quiser na sua linguagem favorita, bastando dar um Response.Write na própria página, para que o load pegue o conteúdo da página e jogue na DIV. Como exemplificado:

 

//dentro do Page_Load da Default.aspx
if(Request.QueryString["busca"] != null)
{
   if(Request.QueryString["busca"] == "carro")
      Response.Write("");
}

Obviamente este meu exemplo foi bem simplório, mas a idéia é demonstrar que você pode fazer o que quiser, capturando os valores vindos pela URL e utilizando-os em estruturas condicionais, consultas SQL, e por aí vai. E uma vez que no lado do cliente estamos trabalhando com Javascript, basta que a gente manipule os eventos do teclado via Javascript para saber quando um usuário digitou no TextBox (evento OnKeyPress) e devemos fazer o load no servidor, como segue:

//coloque o nome da function abaixo no OnKeypress do seu TextBox
//se estiver usando ASP.NET 4, coloque os IDs em Static Mode
function CarregarSugestoes()
{
   if($('#mytextbox').attr('value').length > 3)
   {
      $('#div').load('http://minhaurl.com/Default.aspx?busca=' + $('#mytextbox').attr('value'));
   }
}

Ou seja, se o usuário digitou mais de 3 letras no TextBox com ID mytextbox, ela enviará a palavra digitada à página Default.aspx para ser usada na busca de sugestões para aquela palavra, jogando o HTML de resultado na DIV. Fácil assim!

Como meu forte não é HTML, CSS e Javascript, mas sei o bastante para sobreviver, não entrarei em detalhes, apenas faça o download do código-fonte e dê uma analisada no que foi feito. Está muito bem escrito e limpo. Basicamente eu criei uma DIV que fica 'grudada' no meu TextBox, que conforme o usuário digita palavras, ela mostra sempre o mesmo conteúdo como sugestão. Você pode experimentar novos conteúdo apenas alterando o conteúdo do evento Page_Load da página Sugestao.aspx, inclusive conectando na sua base de dados favorita. Com um pouco de CSS e Javascript dei uma melhorada na usabilidade manipulando os eventos OnBlur do TextBox, realçando a sugestão selecionada da DIV e até comecei a esboçar o uso das setas do teclado para escolha da sugestão, usando o keyup do JQuery (http://api.jquery.com/keyup/). Nada muito sofisticado, mas muito bem feito. Aproveite e comente!

SugestBox.rar (49,69 kb)

Tags: , ,

Web | JQuery | ASP.NET

0

Erro 104: Connection reset by peer

by Luiz Jr 27. novembro 2011 17:02

Já me deparei com esse erro algumas vezes durante meus anos de experiência com web e quase sempre ele traz consigo uma confusão tremenda pois à nível de protocolo HTTP, ele pode siginificar uma infinidade de coisas. Entretanto, quando estamos falando de sites dinâmicos que rodam no lado do servidor, como ASP.NET, as causas são mais simples (e infelizmente mais comuns do que se imagina) de serem mitigadas e não devem causar espanto em programadores de qualquer nível, bastando um pouco de atenção aos detalhes.

O que é?

O browser cliente estava conectado com o servidor e por algum motivo esta conexão foi interrompida subitamente, seja por decisão de um lados ou uma falha no meio de comunicação.

O que tem a ver com meu código?

Quando você desenvolve código que derruba a pilha de memória do processo que está executando sua aplicação, esse erro ocorre pois o servidor não esperava por isso e o processo é encerrado.

Como resolvo?

Basta reescrever o código que está causando o estouro da pilha. Simples assim. Ok, como eu não sou tão sádico, aqui vão algumas dicas para ajudar a tornar esta tarefa mais fácil:

Em primeiro lugar, qual foi a última alteração que você realizou no código antes desse problema começar a acontecer? Qualquer coisa, por mais inofensiva que pareça pode ocasionar isso, principalmente aqueles códigos que você escreveu e colocou direto no ar, sem testar, porque eram muito triviais.

Enumere as alterações que fez e uma a uma, e vá revisando seu código. Você deve revisar principalmente os algoritmos que envolvem um ou mais casos abaixo:

  • algoritmos recursivos (i.e. métodos que chamam eles mesmos)
  • laços de repetição (principalmente while, que é mais fácil de dar problema)
  • sobrecarga de operadores (muito úteis para objetos, mas perigosos também)
  • palavra reservada "goto" (evite usar, afinal não estamos programando em Assembly...)
  • tratamento de erros (try/catch) que tentam refazer a tarefa que deu errado

Essas dicas cobrem mais de 90% dos casos mais comuns de "Connection reset by peer" causados por mau funcionamento de código.

Como prevenir?

Pode parecer óbvio, mas para alguns programadores não é: teste. Nunca mande nada para produção sem testar antes, e de preferência, de forma unitária, isto é, somente o método que foi alterado, de forma independente do restante do sistema. Obviamente se você usar TDD, será muito fácil identificar os problemas logo que eles são desenvolvidos e antes de ir para o ar, pois esse tipo de erro não passaria nos testes automatizados.

Espero ter ajudado, e se alguém salvou o seu pescoço por causa desse post, não me importo se agradecerem nos comentários!

Tags: , ,

Dica | Web

0

Usando cookies com WebClient

by Luiz Jr 28. dezembro 2010 21:58

WebClient é uma classe muito útil quando você precisa fazer download ou upload de dados da ou para a web. Entretanto, quando você precisa fazer uma sequência de chamadas você vai perceber que o WebClient não preserva cookies atribuídos pelo servidor entre as requisições. Fezlimente, WebClient lhe dá a oportunidade para você mesmo gerenciar seus cookies.

Uma solução muito simples e que aprendi no blog It Could Be Done! é sobrescrever o método GetWebRequest da classe WebClient e atribuir a propriedade CookieContainer. Abaixo segue a minha implementação:

public class ClienteWeb : WebClient 
    { 
        private CookieContainer cookies = new CookieContainer(); 
        
        protected override WebRequest GetWebRequest(Uri endereco) 
        { 
            WebRequest requisicao = base.GetWebRequest(endereco);
            if (requisicao is HttpWebRequest) 
            { 
                (requisicao as HttpWebRequest).CookieContainer = cookies; 
            } 
            return requisicao; 
        } 
    }

Eu testei na prática e funciona perfeitamente, por isso não resisti e tive de dar um re-post em pt-BR. Enjoy it!

Tags: ,

Web | Dica

Powered by BlogEngine.NET 1.6.1.0
Design por Laptop Geek, adaptado por onesoft e personalizado por mim.