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

Conectando e consultando planilhas Excel com C#

by Luiz Jr 8. dezembro 2011 22:40

Excel

O post de hoje é algo que muitos desenvolvedores não fazem nem idéia que é possível: conectar e utilizar planilhas Excel como se fosse um banco de dados, e não estou falando de CSV. Sim, isso mesmo, ao invés de ficar armazenando em flat-files (os populares TXT com marcações) você pode utilizar o Excel para trabalhar como se fosse um autêntico banco de dados...Ok, eu é que não vou ficar fazendo apologia ao uso de Excel ao invés de um SGBD de verdade. O real intuito deste post é ensinar como consumir os dados existentes em uma planilha de terceiros. Muitas vezes há a necessidade de utilizar dados de planilhas legadas para importar em sua base de verdade, ou então você pode precisar desenvolver um sistema que agregue dados de planilhas diferentes em um único banco e por aí vai.

A Conexão

Obviamente, o primeiro passo é se conectar na dita planilha. E é aqui onde a maioria dos desenvolvedores se quebra pois esta etapa possui algumas particuliaridades. Em primeiro lugar, como toda conexão com base de dados você precisará utilizar classes do ADO.NET, o framework de acesso a dados da plataforma .NET. No caso do Excel, a melhor opção é utilizarmos uma conexão OLE DB. Para quem não sabe, OLE DB (Object Linking and Embedding DataBase) é uma API desenvolvida pela Microsoft para acesso a dados de forma nativa no Windows, via COM. Pois bem, através de OLE DB, podemos acessar dados em Access e Excel. Quando o assunto é Access, a melhor alternativa é utilizar ODBC, mas com Excel, OLEDB é uma boa opção. Como de praxe, você precisará importar a biblioteca System.Data e instanciar um OleDbConnection conforme mostrado abaixo:

using System.Data;
var _conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=planilha.xls;Extended Properties='Excel 8.0;HDR=YES;'");
_conexao.Open();

A string de conexão determina o provedor a ser utilizado na conexão (no meu exemplo, a API OLE DB versão 4.0, nativa do Windows), a fonte dos dados (basicamente o caminho completo até a planilha, no meu exemplo, ela se encontra na mesma pasta do programa) e algumas propriedades específicas da conexão, como a versão do Excel a (8.0) e se a planilha possui cabeçalho (HDR = Header = Cabeçalho). A string de conexão OLE DB é muito sensível, então muita atenção à sua escrita, erros comuns incluem escrever 'DataSource' ao invés de 'Data Source', ou então usar uma versão de Excel errada. Outro erro muito comum é colocar a propriedade de cabeçalho fora da string 'Extended Properties' (note que a versão do Excel e a informaçãod e cabeçalhos existentes estão entre aspas). Qualquer erro em sua string de conexão irá gerar o erro "Não foi possível encontrar ISAM instalável." que é algo extremamente genérico e sem muita utilidade.

 

A Consulta

Uma vez que a consulta foi instanciada, agora podemos executar comandos sobre a planilha à qual nos conectamos. Você já deve ter utilizado mais de uma planilha em uma mesma pasta do Excel, não é mesmo? E como você fazia para se organizar? Colocava nomes nas planilhas, certo? É isso mesmo! Imagine a sua pasta do Excel como seu "banco de dados" e cada planilha dentro da pasta como suas "tabelas". E como você faria uma consulta no SQL Server sobre uma tabela do seu banco? 'SELECT * FROM Tabela'? E é isso mesmo que você vai fazer! Dê uma olhada no código abaixo, onde usamos o OleDbCommand para realizar consultas no banco:

var cmd = new OleDbCommand("SELECT * FROM [tabela$]", _conexao);
var dt = new DataTable();
dt.Load(cmd.ExecuteReader());

O código acima é auto-explicativo, é simplesmente a instanciação de um OleDbCommand passando um comando pseudo-SQL (na verdade o nome disso é MS Query) e a conexão instanciada no passo anterior. As linhas seguintes já são corriqueiras a todo programador que já tenha utilizado ADO.NET para se conectar a um banco de dados, a consulta é executada retornando um DataReader, que por sua vez é carregado em um DataTable, para posterior utilização. Preste apenas atenção no fato de que a "tabela" do Excel é delimitada entre colchetes e SEMPRE deve terminar com um cifrão. Não me pergunte o porquê, eu realmente não sei, hehehehe.

Sistema de Exemplo

Logo abaixo você encontra um link para download de um sistema de exemplo, onde criei uma classe Excel, que encapsula toda a lógica de acesso à planilhas, abstraindo do desenvolvedor a necessidade de conhecer detalhes específicos de sua implementação. Use do jeito que quiser, afinal este código eu montei com base em outros da Internet mesmo, hehehehe. Neste mesmo ZIP você encontrará uma planilha de exemplo para usar em seus testes (algum gamer de plantão reconhece os dados da planilha?) e um sisteminha desktop feito em .NET 4 que permite a você conectar em sua planilha preferida e realizar consultas sobre ela, vendo os resultados em um DataGrid. A idéia não era criar um "Excel Management Studio" ou algo do gênero, por isso a aplicação não é laáááá muito útil, mas serve para seu propósito que é ilustrar a utilização de Excel como base de dados e completar o post. Espero que seja útil!

ExcelConnection.zip (50,33 kb)

Tags: , , ,

BD | Dica

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

Ciclo de palestras na FAQI e demais projetos

by Luiz Jr 23. novembro 2011 19:55

Nesta segunda e terça-feira tive a oportunidade de conhecer a FAQI de Porto Alegre, graças ao contato do Prof. João Moreira, coordenador do curso de Análise e Desenvolvimento de Sistemas da instituição. Nos conhecemos na minha última visita à FAQI Gravataí, onde palestrei sobre Cloud Computing, palestra esta que eu e meu colega da RedeHost, Cristiano, temos ministrado em mais de uma dezena de instituições pelo Rio Grande do Sul afora. Desta vez não foi diferente, nossa presença na instituição foi para estreitar ainda mais os laços entre RedeHost e FAQI, enquanto empregadores e educadores.

Eu apresentando a RedeHost pro pessoal

Com esta palestra, provavelmente terá encerrado minha participação em eventos acadêmicos este ano, uma vez que estamos chegando em dezembro, e com ele, o recesso das instituições de ensino. Não que isto signifique o encerramento de minhas atividades relacionadas à ensino, já estão engatilhados novos cursos de desenvolvimento, em cima de plataformas mais tradicionais, como o curso recém organizado de C# Nível 2 que deve estreiar na Facensa no verão e principalmente, minhas estréia como ministrante de cursos em cima de mobilidade, com plataformas como Android, Windows Phone 7 e iOS (bom, quem acompanha o blog sabe do que estou falando!). Embora oficialmente eu não tenha fechado com nenhuma instituição (estou no aguardo de algumas confirmações), considero que 2012 será um grande ano para meus estudos nestas plataformas e que conseguirei alguns bons contratos enquanto instrutor.

2ª dia de palestra na FAQI

E por fim, hoje estive conversando com o Prof. Heitor Boeira, coordenador do curso de Análise e Desenvolvimento de Sistemas da FAQI Gravataí, para montarmos a agenda de cursos de extensão de 2012, desta vez focados em Linux e Virtualização, com os instrutores e colegas Diego Voltz e Cristiano Diedrich. Em contrapartida, a FAQI finalmente fechou conosco o tão aguardado convênio educacional, onde colaboradores da RedeHost terão desconto nos cursos de gradução e pós-graduação na instituição. Com isso, nossos profissionais terão mais um benefício oferecido pela empresa e mais uma motivação para estudarem. Outras parcerias estão em vias de serem fechadas, mas é cedo para comentar ainda...

Hoje o post foi curto, nada de tutorial ou algo do gênero, apenas o uso deste espaço para divulgar meu trabalho. tenha uma boa semana!

Tags: , , ,

Blog | Eventos | Experiências | Me | Projetos

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