Sua aplicação web está preparada para o Internet Explorer ActiveX Update?

A Microsoft lançou uma atualização que altera a maneira que o Internet Explorer lida com controles ActiveX, como Flash, Adobe Reader, Windows Media Player, applets Java, etc, que são carregados pelas tags APPLET, EMBED e OBJECT. Após a instalação do update, a interação do usuário com esses controles ficará desativada até que que eles sejam habilitados manualmente. Ou seja, o usuário terá que habilitar cada controle ActiveX da página, um a um, cada vez que acessar o site. Não preciso nem dizer que isso pode causar um certo transtorno, né?

Para evitar essa intervenção manual do usuário (que pode se tornar uma chatice), existem algumas recomendações na maneira como os controles ActiveX são carregados, que os desenvolvedores Web devem seguir. Mais detalhes podem ser encontrados no artigo Activating ActiveX Controls.

Essa atualização é resultado de um processo judicial do caso de quebra de patentes envolvendo a Microsoft e a empresa Eolas e está disponível como download opcional do Windows Update desde o dia 28/02/06. Entretanto, no próximo dia 11 de Abril, ela se tornará um download obrigatório. Assim, os efeitos serão sentidos com maior intensidade a partir desta data.

Ricardo Oneda.

Nova versão do SQL Server 2005 Express

Com o lançamento do Service Pack 1 do SQL Server 2005 e SQL Server 2005 Express previsto para este ano, a Microsoft também lançará uma nova versão do banco de dados chamada SQL Server 2005 Express Edition with Advanced Services (que nome grande!). Esta versão, que já se encontra disponível para download como um CTP - Community Technology Preview, terá algumas características novas em relação ao Express atual, como suporte a full-text search e relatórios do Reporting Service, além de já possuir integrado a interface gráfica de gerenciamento SQL Server Management Studio Express (SSMSE). E o mais importante: continuará grátis!

Ricardo Oneda.

Novidades no Windows Live

O Windows Live, portal de serviços da Microsoft em fase beta, está com algumas novidades. A primeira delas, é o no mecanismo de busca. A interface que traz os resultados da busca ficou muito mais inteligente, leve e rápida, graças ao uso maciço de DHTML (AJAX inclusive). Existe uma barra de rolagem própria e também uma outra barra que permite ao usuário configurar quantos resultados por página devem ser exibidos.

A busca por imagens também sofreu melhorias significativas. Experimente buscar alguma imagem e veja que você poderá decidir o nível de zoom das imagens exibidas. Além disso, deixando o ponteiro do mouse sobre a imagem, serão mostrados mais informações sobre ela. Clique sobre a imagem e a tela será reorganizada de modo que o resultado da busca não se perca enquanto a página que possui a imagem é aberta. Tudo isso dinamicamente, como se estivesse utilizando uma aplicação em seu micro! Além disso, também será possível customizar o mecanismo de busca através de macros. Sugiro acessar o site e ver todas essas e outras inovações disponíveis.

Outra novidade é a barra de ferramentas do Windows Live. As principais características da Windows Live Toolbar é o mecanimo de busca integrado, filtro anti-phishing scam, bloqueador de pop-ups, gerenciador de feeds RSS, entre outros. É necessário se logar com uma conta do Passport no portal do Windows Live para ter acesso a esta barra.

Ricardo Oneda

Utilizando code-behind sem pré-compilação no ASP.NET 1.X

Uma das grandes vantagens trazidas pelo ASP.NET foi o modelo de codificação batizado de code-behind, no qual o código server-side (por exemplo, C# ou VB.NET) fica separado do código HTML da página, ao contrário da abordagem do ASP tradicional, que misturava tudo e gerava muitos problemas, principalmente na hora da manutenção.

Com o lançamento do ASP.NET 2.0, o modelo de codificação foi aprimorado e o modelo de compilação padrão suportado pelo Visual Studio 2005 passou a ser o de tempo de execução, ou seja, é necessário enviar os arquivos code-behind para o servidor. O que muita gente não sabe é que este modelo também era suportado pelo ASP.NET 1.X, mas não era suportado pelo Visual Studio .NET 2002 ou 2003.

Vou demonstrar como isso é possível. Abra o Visual Studio .NET 2002 ou 2003 e crie um novo projeto do tipo ASP.NET Web Application chamado CodeBehind. Neste exemplo utilizarei a linguagem C#, mas poderia ser VB.NET, sem problema algum. Arraste um controle do tipo Label para o WebForm. No evento Page_Load do WebForm, adicione o seguinte código:

Label1.Text = "Olá Mundo sem pré-compilação!";

Agora, vá para a parte HTML da página WebForm1.aspx e acrescente o atributo Scr à diretiva Page, que deverá ficar parecida com o código abaixo:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CodeBehind.WebForm1" Src="WebForm1.aspx.cs"%>

Salve os arquivos mas NÃO compile sua aplicação. Abra o arquivo Global.asax no Notepad e exclua a propriedade Inherits. O arquivo deverá ficar assim:

<%@ Application Codebehind="Global.asax.cs" %>

Agora, vá ao browser de sua preferência e digite a URL da sua aplicação, que deve ser http://localhost/CodeBehind/WebForm1.aspx e perceba que a mensagem "Olá Mundo sem pré-compilação!" aparece no browser. Você perceberá que na primeira requisição há uma certa demora, pois a aplicação está sendo compilada. A partir da segunda requisição, não haverá mais esta demora, já que o assemblie já se encontra compilado. Verifique na pasta bin da sua aplicação que não há nenhuma DLL, que seria gerada caso utilizássemos a pré-compilação do Visual Studio. Não há DLL na pasta bin porque sua aplicação foi compilada em tempo de execução, ou seja, o code-behind foi compilado no momento em que a página foi acessada.

Mas você deve estar se perguntando: mas qual a utilidade disso? A principal vantagem é que quando não utilizamos pré-compilação, qualquer alteração no código é detectada, o que provoca uma nova compilação, mas a aplicação NÃO é reinicializada, ao contrário do que aconte quando geramos uma DLL através da pré-compilação do Visual Studio e a atualizamos com uma nova versão. Vamos a uma demonstração. Altere o código do evento Page_Load para:

 if (Session["numero"] != null)
 {
     Session["numero"] = Convert.ToInt32(Session["numero"]) + 1;
 }
 else
 {
     Session["numero"] = 1;
 }

 Label1.Text = "Olá Mundo sem pré-compilação!";
 Label1.Text += "
" + Session["numero"].ToString() + " vezes";

Perceba que eu criei uma variável de sessão (objeto Session) chamada "numero", que funcionará como um contador de visitas para o usuário naquela sessão. Salve o arquivo e atualize a página no browser e perceba o contador funcionando. Agora, volte ao Visual Studio e altere a linha 10 para:

Label1.Text = "Olá Mundo sem pré-compilação alterado!";

 

Volte ao browser e atualize a página. Você deverá notar que o texto apresentado na página foi alterado mas o contador (e, portanto, a variável de sessão) não foi reinicilizado, ou seja, a aplicação não foi reinicilizada. Se tentarmos fazer isso utilizando a pré-compilação do Visual Studio, veremos que a cada vez que uma nova DLL é gerada, a aplicação é reinicializada e, conseqüentemente, as variáveis de sessão (objeto Session), de aplicação (objeto Application), etc, o que pode trazer problemas para a aplicação e os usuários.

A desvantagem é que precisamos enviar o código fonte da aplicação para o servidor, o que pode não ser interessante em termos de segurança. Cabe a você analisar as vantagens e desvantagens de cada modelo e escolher o que melhor atende suas necessidades.

Referências:
Web Forms Code Model
Meditating Upon the ASP.NET Code-Behind Model

Ricardo Oneda.

Dica: Definindo o Theme de uma aplicação Web

No ASP.NET 2.0, podemos definir o Theme de uma aplicação web através do arquivo de configuração web.config. O código abaixo, que deve ser colocado dentro da seção <system.web> do web.config, demonstra como isso pode ser feito:

	<pages theme="MeuTema" />

Para saber mais sobre Themes do ASP.NET 2.0, leia meus artigos sobre o assunto.

Ricardo Oneda

Exibindo mensagem no GridView quando não há registros

O controle GridView do ASP.NET 2.0 trouxe duas propriedades que permitem exibir uma mensagem quando a fonte de dados a qual o GridView está vinculado não retornar dados: EmptyDataTemplate (permite utilizar um template com a mensagem) e EmptyDataText (um simples texto que será exibido). Irei fazer um pequeno exemplo de como utilizar estas propriedades.

Para isso, utilizarei o Visual Studio 2005 e o SQL Server 2005 Express com o banco de dados de exemplo Northwind. Apesar da Microsoft recomendar o uso do banco de dados de exemplo AdventureWorks, que foi criado especialmente para o SQL Server 2005, optei por utilizar o Northwind, pois ele é mais conhecido e também porque permitirá que pessoas com o SQL Server 2000 possam utilizá-lo. Caso você não tenha o Northwind, você pode fazer o seu download. Após baixar o arquivo SQL2000SampleDb.msi e executá-lo, será criada uma pasta em "C:\SQL Server 2000 Sample Databases" com os scripts e arquivos MDF e LDF dos banco de dados Northwind e Pubs. Abra o SQL Express Manager e execute o comando abaixo para attachar o Northwind à instância do SQL Express:

EXEC sp_attach_db N'Northwind',N'C:\SQL Server 2000 Sample Databases\NORTHWND.MDF'

Agora vá ao Visual Studio 2005 e crie um novo Web Site chamado GridViewVazio. No Server Explorer (menu View > Server Explorer), clique com o botão direito em Data Connections e escolha a opção Add Connection. Na tela que é apresentada, iremos definir nossa fonte de dados (Data Source). Escolha Microsoft SQL Server e clique no botão Continue. Na próxima tela, entre com o nome da instância onde está rodando o SQL Express (no padrão NOME_MAQUINA\SQLEXPRESS) e selecione o banco de dados Northwind. Você deve ver uma tela parecida com a da imagem abaixo. Clique no botão Test Connection para verificar se está tudo certo e depois em OK.

Vá para o design da página Default.aspx e arraste um TextBox e um Button para ela. Logo abaixo, a partir do Server Explorer, arraste a tabela Products do banco de dados Northwind. Perceba que foram criados um controle GridView e um SqlDataSource. Você deve ter uma tela parecida com a figura abaixo.

Agora, vamos fazer com que os produtos sejam exibidos no GridView de acordo com o que digitarmos no TextBox, funcionando como uma pesquisa. Selecione o SqlDataSource e clique na seta no canto superior direito para termos acesso a sua SmartTag. Selecione a opção Configure Data Source. Não altere nada na primeira tela e clieque em Next. Na próxima tela é apresentada nossa query T-SQL que desejamos alterar. Clique no botão WHERE. Em Column, escolha o campo ProductName. Em Operator escolha o operador LIKE do T-SQL. Em Source, escolha Control, já que nosso parâmetro será digitado no controle TextBox. Em ControlID, selecione TextBox1, que é o ID do nosso controle TextBox.

Clique em Add e depois em OK. Na próxima tela, clique em Next e, finalmente, em Finish. Também podemos mudar o layout de nosso GridView, clicando em AutoFormat a partir de sua SmartTag. Escolha um formato de sua preferência. Selecione o GridView e exiba a janela de propriedades (View > Propertie Window). Altere o valor a propriedade EmptyDataText para "Não foram encontrados registros para a busca."

Execute a aplicação e perceba que a mensagem de que "Não foram encontrados registros para a busca." é exibida, já que não há nada digitado no caixa de texto. 

Digite algum texto que exista na tabela de produtos e veja que o GridView vem preenchido.

Outra maneira de se exibir uma mensagem é utilizando o EmptyDataTemplate, que lhe dá mais flexibilidade, já que podemo definir um template (trecho de código HTML personalizado). Volte ao Visual Studio 2005, selecione o GridView e, a partir de sua SmartTag, selecione a opção Edit Templates. O EmptyDataTemplate é então aberto para que possamos editá-lo. Neste exemplo, utilizei a frase "Não foram encontrados registros para a busca." em negrito e na cor vermelha. Fiz uma simples personalização, mas perceba que poderia fazer algo mais complexo.

Na SmartTag do EmptyDataTemplate, selecione End Template Editing para retornar ao design da página Default.aspx. Se você visualizar o fonte da página Default.aspx, encontrará a definição do template utilizado no EmptyDataTemplate:

	<EmptyDataTemplate>
		<span style="color: red"><strong>Não foram encontrados registros para a busca.</strong></span>
	</EmptyDataTemplate>

Execute a aplicação e perceba que agora a mensagem exibida é aquela definda pelo EmptyDataTemplate.

Espero que tenham gostado e até a próxima.

 

Ricardo Oneda

 

IE 7 Beta 2 Preview

A Microsoft disponibilizou para o público em geral o download do IE 7 Beta 2 Preview, que como o nome indica, ainda não é o Beta 2. Esta versão "preview" só está disponível para o sistema operacional Windows XP com Service Pack 2. 

Além disso, também está disponível um checklist para desenvolvedores web com as principais alterações e que serve como um guia do que deve ser testado no novo browser.

Mais informações em:

Ricardo Oneda

A supervalorização do AJAX

Se você não esteve em Marte no último ano, então já deve ter ouvido falar sobre AJAX (Asynchronous JavaScript and XML), que também atende pelos nomes de Remote Scripting ou Script Callback, uma técnica de desenvolvimento de aplicações Web que permite, basicamente, que uma página faça requisições ao servidor Web via JavaScript, sem a necessidade de atualizar a página inteira, o que pode tornar uma aplicação web mais rica, rápida, interativa e dinâmica para o usuário, deixando-a mais parecida com uma aplicação desktop, o que proporciona uma melhor usabilidade.

Mas qual o segredo do AJAX? Bem, não há segredo algum. Ele utiliza tecnologias que já estão por aí há um bom tempo, como JavaScript, DHTML, XML e XMLHttpRequest, responsável pelo envio e recebimento de dados do servidor. Na verdade, nem o uso de XMLHttpRequest é necessário, já que poderíamos obter um resultado parecido utilizando-se iframes. Como se vê, são tecnologias que qualquer desenvolvedor web que se preze conhece (ou pelo menos deveria conhecer). Assim, AJAX é mais uma arquitetura do que uma novidade.

Então, por que tanta badalação em torno desta sigla? Ao meu ver, são dois os principais motivos: o primeiro é que agora todos os browsers mais recentes (IE, FireFox, Netscape, Opera, Konqueror, Safari, etc) de todas plataformas (Windows, Unix, Mac, etc) suportam a utilização do objeto XMLHttpRequest, que originalmente foi criado pela Microsoft como um componente ActiveX e que, antigamente, era exclusivo do IE. Aliás, a Microsoft anunciou recentemente que, a partir do IE 7.0, o objeto XMLHttpRequest será exposto como um objeto de script nativo, ou seja, não será mais um controle ActiveX, o que tornará o IE mais compatível com os outros browsers. O segundo motivo é a utilização maciça que o Google vem fazendo em seus produtos (como o Google Maps, GMail e Google Suggest, entre outros), que deu uma visibilidade grande para a técnica.

O grande problema que vejo quando há muito hype em torno de alguma tecnologia nova é que a coisa foge do controle e logo começa a aparecer muita besteira sobre o assunto. Com o AJAX não poderia ser diferente e já se vê por aí o efeito negativo da superexposição. Um exemplo disso é a matéria publicada neste mês na Info Exame (sobre a qual já escrevi minha opinião em outro post), que tem o Google como matéria de capa, e cujo o título é "AJAX dá dinheiro?". A conclusão da matéria é que o AJAX ainda não é uma mina de dinheiro, mas é possível ganhar, em média, entre e 20% e 25% a mais ou, segundo um funcionário de uma consultoria, o profissional que domina o AJAX pode até mesmo dobrar seu salário! Além disso, 2006 deve deixar o mercado aquecido para os conhecedores do AJAX. E lá se vão as ovelhinhas aprender a última moda...

Percebam aí que há uma combinação explosiva: um assunto da moda, uma publicação cuja credibilidade é duvidosa, pessoas desinformadas e pronto! A besteira está feita! Será que alguém realmente acredita que o fato de "saber" AJAX (que utiliza tecnologias que um desenvolvedor web já domina há um bom tempo) irá trazer milhares de propostas de emprego e rios de dinheiro? E as empresas que procuram por especialistas em AJAX, será que realmente sabem o que essa sigla significa e sabem o que querem ou somente estão seguindo um modismo e depois de algum tempo irão perceber o quanto foram ignorantes? E as consultorias, ao invés de ajudarem seus clientes a entender o que tudo isso significa, não estariam interessadas na ignorância dos mesmos para que assim consigam "vender" mais consultores e ganhar mais dinheiro? Tudo termina da seguinte maneira: a empresa finge que sabe o que quer e se sente moderna por "estar utilizando" uma tecnologia da moda e o profissional finge que conhece e todos vivem felizes... e assim caminha a humanidade.

Não estou criticando o AJAX, e acho que o mesmo tem o seu valor e muitas das idéias que ele traz, de fato, irão contribuir para melhorar a experiência do usuário em relação às aplicações web. O que me deixa preocupado é quantidade de pessoas que não sabem o que falam.

Ricardo Oneda.

Microsoft Developer Security Resource Kit

Se você é um desenvolvedor consciente, deve se preocupar constantemente com segurança. Aliás, será que alguém hoje em dia ainda não leva em conta este aspecto? Infelizmente, acredito que a maioria não dá a mínima bola para isso e acredita que isso é assunto para o pessoal de infra-estrutura e que basta colocar um firewall para resolver o problema... O resultado é o que estamos cansados de ver por aí: aplicações cheias de falhas e que colocam em risco a segurança e a privacidade da informação, isso sem falar nos prejuízos financeiros.

Assim, qualquer material que nos ajude a melhorar a segurança de uma aplicação é bem-vindo. A Microsoft disponibilizou o Microsoft Developer Security Resource Kit, um DVD-ROM que, assim como os outros Resource Kits, vem com uma série de informações sobre um determinado assunto, que no caso é segurança em desenvolvimento de software: artigos e documentos técnicos, melhores práticas, treinamentos, web casts, ferramentas, etc. O Resource Kit é praticamente gratuito, pois paga-se apenas as despesas de envio, que no Brasil fica em US$20,00 (pelo menos no meu caso).

Ricardo Oneda.

Notepad turbinado

Apesar de toda produtividade que IDEs como o Visual Studio proporcionam, muitas vezes, por necessidade ou mesmo por opção, costumamos utilizar o Notepad para tarefas simples de edição de arquivos texto. O Notepad é fantástico neste ponto, pois é pequeno, rápido e muito eficiente no que se propõe a fazer. Entretanto, ele poderia ter algumas características que o deixariam muito melhor, sem perder as características citadas. Se você pensa como eu, sugiro conhecer os seguintes softwares gratuitos:

Pessoalmente, prefiro o Notepad++. Entre suas características, estão o reconhecimento e highlighting de várias linguagens (entre elas C, C++, C#, Java, HTML, XML, Javascript, SQLetc) deixando o texto mais legível, funcionalidade de auto-complete, que pode ser customizada e extendida, suporte a edição de múltiplos arquivos através de abas, zoom, macro, entre outras.

Uma pequena curiosidade: nos primórdios da Internet, quando ela ainda não era uma rede tão comercial, era comum nos depararmos com imagens como a seguinte em sites pessoais:

Era uma época na qual quem sabia HTML era tratado como um Deus e ganhava rios de dinheiro. Também era uma maneira um tanto infantil de demonstrar conhecimento - e de que era "cabra macho", já que tudo tinha sido feito na "unha" Smile

Ricardo Oneda.