Silverlight não é só para Internet

Entre minhas atividades como coordenador de desenvolvimento estão prever e gerenciar as alocações do time de desenvolvedores. Aqui na AgênciaClick essa previsão é feita mensalmente e a gestão deve ser feita, no mínimo, uma vez pos semana, para apontar possíveis problemas de alocação, ociosidade e orçamento.

Mensalmente é feito um levantamento de todos os projetos ativos e quantas horas aproximadamente cada recurso será alocado em cada projeto. Depois disso, semanalmente são validadas as horas da equipe, com a intensão de verificar as previsões serão cumpridas ou se há algum risco de serem ultrapassadas.

Acontece que esse trabalho de verificar se o andamento do time está dentro do previsto costuma ser feito manualmente, o que não é muito prático. Nós temos um sistema interno capaz de dizer quanto tempo cada um trabalhou em cada projeto, mas não temos nada para comparar essas horas com as previsões.

Então eu pensei, "eu deveria fazer um relatório, listando cada recurso e exibindo as horas previstas, realizadas e estimadas, para me ajudar a prever os riscos". Esse relatório ficaria mais ou menos assim:

 

Recurso

Horas Previstas

Horas Realizadas

Horas Estimadas

Recurso 1

148:00

97:21

147:55

Recurso 2

156:00

105:47

158:11

Apesar de já ser bastante útil e ter a informação que eu preciso, eu tinha que melhorar isso. Então o que eu fiz foi transformar essa informação em um gráfico e implementá-lo em Silverlight 1.1 (para depois migrar para 2.0, é claro). Abaixo tem um modelo de como estou planejando fazer o gráfico. Esse modelo ainda não está fechado mas a ídeia principal já está resolvida.

grafico

A barra verde representa as horas realizadas. A barra branca representa as horas previstas no começo do mês e a barra avermelhada representa as horas estimadas, se o profissional continuar trabalhando na mesma média de horas/dia. Há uma linha pontilhada vermelha que indica a quantidade de horas padrão para o mês em questão, contando os feriados.

A informação no gráfico fica muito mais clara e fácil de assimilar do que na tabela. Quase que instantaneamente é possível perceber se alguém vai estourar a previsão ou não, ou  quais pessoas irão fazer horas extras no mês.

Este, com certeza, será apenas o primeiro de muitos outros gráficos de apoio que serão feitos por aqui e eu espero que sirva de exemplo assim como lembrete de que usabilidade não vale apenas para sites e campanhas. No final das contas o seu usuário final pode ser você mesmo.

Até o próximo post.

Tags: Silverlight

Streaming de Keynote do MIX 2008 ao vivo

Ray Ozzie - Chefe de Arquitetura de Software, Scott Guthrie - Vice Presidente da Plataforma de Desenvolvimento .NET e Dean Hachamovitch - Gerente Geral responsável pelo Internet Explorer farão o Keynote de abertura do MIX08, no dia 05/03/2008 ás 9:30 AM Pacific Time.

O que será interessante sobre isso é que esse keynote será transmitido ao vivo pelo site do www.visitmix.com.

Como eu não vou poder estar lá, já coloquei na minha agenda : Quarta-feira, 05 de março de 2008 às 14:30, horário de Brasília. Quem quiser pode adicionar na agenda do Outlook, baixando este arquivo que eu disponibilizei no skydrive.live.com.

Tags: MIX08

Novidades sobre Silverlight 2.0

Scott Guthrie publicou na última sexta-feira em seu blog uma série de artigos sobre as novidades do Silverlight 2.0 Beta 1, que deve ser lançado na semana que vem durante o MIX. Esta foi a primeira divulgação concreta sobre algumas das novas funcionalidade e mudanças do Silverlight, desde que foi anunciada a mudança de 1.1 para 2.0 no final do ano passado. Até agora o que tinhamos era apenas algumas informações do próprio Scott sobre o que estava previsto para a versão 2, mas ainda com um certo fundo de incerteza e sem nenhuma publicação de prints ou trechos de código.

No total ele publicou 8 artigos mais um post inicial de introdução que devem ser lidos na sequência, formando uma espécie de passo a passo para as novas funcionalidades.

Quem leu o meu post anterior sobre Silverlight viu alguns dos problemas que eu tive quando estava desenvolvendo a aplicação de Test Drive Virtual que foi apresentada no TechEd 2007. Uma feliz novidade que para mim, ao ler o texto de Scott, foi saber que a versão 2.0 não está limitada a WebServices em JSON e também não tem mais problemas com cross domain. Ele cita no post que a partir da versão 2 haverá suporte nativo para REST, WS*/SOAP, POX, RSS, HTTP, sockets e corss domain, o que já torna o meu post anterior obsoleto, mas vale o aprendizado.

O suporte a cross domain é feito da mesma forma que se faz hoje com aplicativos Flash. No servidor onde está o serviço deve haver um arquivo que contém as definições do que pode ser executado remotamente e por quem. Não há maiores detalhes sobre o formato do arquivo ainda mas ele disse que o Silverlight também suporta o arquivo utilizado pelo Flash (crossdomain.xml) além do seu próprio, ou seja, todos os serviços que podem ser utilizados hoje por aplicações Flash também poderão ser utilizados por Silverlight, sem nenhuma mudança.

Para quem quiser mais detalhes, segue abaixo a lista de links para os artigos que o Scott publicou. Assim que a versão beta for publicada eu vou postar mais detalhes e alguns testes.

Até a próxima.

Novidades sobre ASP.NET MVC

Scott Guthrie publicou ontem em seu blog algumas novidades do ASP.NET MVC que deverão aparecer no próximo release CTP do ASP.NET 3.5 Extensions, previsto para a semana do MIX08.

Para quem não sabe, O ASP.NET MVC é uma implementação da Microsoft para o padrão de desenvolvimento MVC (Model, View Controller), que visa criar uma separação clara entre as responsabilidades de cada camada de um aplicativo (Model representa o modelo de dados, o View representa a camada de apresentação e o Controller é o responsável por coordenar a lógica do aplicativo e integrar o Model com o View). Há um excelente artigo na edição 07 (Fevereiro/Março) da revista Mundo .NET comparando o Monorail (framework MVC open source) e o ASP.NET MVC com o modelo de desenvolvimento WebForms.

Segue abaixo algumas das novidades divulgadas:

1-Possibilidade de implantar em servidor, uma aplicação utilizando ASP.NET MVC, utilizando a pasta bin para o System.Web.Mvc.dll, ou seja, sem precisar executar o setup do MVC no servidor.

2-Melhorias na infraestrutura de roteamento de urls.

3-Melhorias na integração com o Visual Studio 2008 e suporte para teste unitário utilizando NUnit, MBUnit e XUnit.

4-Remoção da obrigatoriedade de uso do atributo [ControllerAction].

5-Suporte para injeção de código de interceptação utilizando uma nova funcionalidade chamada "Filter Attributes".

6-Inclusão de todos HTML Helpers que foram disponibilizados separadamente, após o último release.

7-Melhorias de design do código visando maior extensibilidade e testabilidade.

8-Disponibilização do código fonte. O código fonte de todo esse framework será disponibilizado para debug, assim como já se faz hoje com uma boa parte do .NET Framework. Além disso, será disponibilizada também uma versão para download que poderá ser compilada e alterada, para aquele que encontrarem algum problema e não quiserem esperar pela correção no release seguinte.

As expectativas e impressões sobre esse novo framework da Microsoft estão bem altas, sendo que até o líder do projeto Monorail (Hamilton Verissimo) foi consultado pelo time de desenvolvimento para dar seu feedback.

Em breve eu devo publicar alguns dos meus ensaios com o MVC e as minhas impressões até o momento. Até lá nos resta esperar pelo próximo release.

Tags: MVC ASP.NET

Integrando Silverlight 1.1 com Web Services ASP.NET 2.0

O objetivo desse post é descrever os passos necessários para desenvolver uma aplicação em Silverlight 1.1 que utilize um Web Service feito em ASP.NET 2.0. As motivações para isso são bem simples:

1 - Há muitos web sites desenvolvidos utilizando ASP.NET 2.0 e algumas empresas têm um processo burocrático para instalar novas versões de aplicativos (como o .NET Framework 3.0 ou 3.5).

2 - O Silverlight 1.1 tem uma série de limitações que se tornam mais evidentes quando se tenta utilizar um web service desenvolvido em ASP.NET 2.0.

Como o primeiro argumento é auto explicativo, vamos para as limitações do Silverlight 1.1.

Não é possível acessar conteúdo cross-domain, ou seja, não dá para acessar web services ou fazer downloads de sites hospedados em um domínio diferente da aplicação Silverlight. Essa limitação existe por uma questão de segurança.

O Silverlight só é capaz de se comunicar com web services utilizando o protocolo JSON. Ou seja, os seus web services atuais não podem ser acessados pelo Silverlight. Essa limitação existe devido ao fato de o Silverlight utilizar a infraestrutura do aplicativo host (o browser do usuário) para acessar o conteúdo. O web service então é acessado do mesmo modo que os seus aplicativos AJAX já fazem hoje.

Até aqui nada demais, até que você tenta desenvolver e descobre que, apesar de ter conseguido fazer a web reference sem problemas no silverlight, o seu aplicativo não funciona. Segue abaixo um passo a passo para que você possa criar um aplicativo web para hospedar o aplicativo Silverlight 1.1 e o web service que será utilizado por ele. Esse roteiro foi o que eu utilizei para desenvolver o aplicativo apresentado no TechEd 2007 do qual falei no post anterior. Para seguir o passo a passo será necessário ter o Visual Studio 2008 Standard ou superior instalado, além do toolkit do Silverlight 1.1.

Abra o Visual Studio 2008 e crie um novo Web Aplication ASP.NET 2.0. Isso também pode ser feito utilizando um Web Site.

1 

Adicione um web service ao site. Para que o web service funcione via JSON, é necessário adicionar os atributos ScriptService e ScriptMethod no código, conforme mostrado abaixo, mas para isso será necessário fazer referência ao assembly System.Web.Extensions.

2

3

Ainda falta um detalhe para que o seu web service possa ser acessado via JSON. Esse foi justamente o detalhe que me deu mais problemas para descobrir. É necessário acrescentar algumas informações no web.config para que o handler de web service do assembly System.Web.Extensions seja utilizado ao invés no handler padrão. É ele que vai interpretar toda a comunicação do seu web service com os aplicativos clientes a partir de agora, proporcionando o uso do protocolo JSON e, consequentemente, possibilitando o acesso pelo Silverlight. Basta acrescentar as linhas abaixo na seção system.web do seu arquivo web.config:


   
   

Agora o seu web service já está pronto para ser acessado pelo Silverlight. Então vamos a ele. Adicione um novo aplicativo Silverlight 1.1 à solução.

4

Agora adicione uma web reference no aplicativo Silverlight para o web service recém criado.

5

Adicione um campo texto no xaml com o código abaixo:

Agora falta pouco. Edite o evento Page_Load do arquivo Page.xaml.cs e acrecente a chamada ao web service como abaixo:

public void Page_Loaded(object o, EventArgs e) {
    // Required to initialize variables
    InitializeComponent();
    ChamarServico();
}

private void ChamarServico() {
    var servico = new Servico.Servico();
    txtResultado.Text = servico.HelloWorld();
}

Agora é necessário vincular o aplicativo web com o aplicativo silverlight. Para isso, primeiro é necessário compilar a sua solução para que todos os arquivos necessários sejam gerados. Depois, clique com o botão direito no aplicativo web e escolha a opção "Add Silverlight Link". Em seguida aparecerá uma janela para escolher o aplicativo silverlight que será vinculado. Depois aparecerá uma janela perguntando se você quer habilitar o debug para aplicação Silverlight recém vinculada.

Depois de feito o vínculo, você poderá notar que foi criada uma pasta chamada ClientBin, onde foram colocadas uma dll e um pdb. Esses arquivos são o código do seu aplicativo Silverlight já devidamente compilado e o arquivo de símbolos, necessários apenas para permitir o debug do aplicativo Silverlight. Além disso, foi adicionado também o arquivo Page.xaml, referente à tela principal da sua aplicação Silverlight.

Agora tudo o que você precisa fazer é adicionar o aplicativo Silverlight à uma página web, da mesma forma que faria com um aplicativo ou banner feito em Flash. Há vários jeitos de fazer isso (e eu vou abordar em mais detalhes em outro post), mas no momento o que eu vou fazer é copiar o código existente na página de testes que está no projeto do aplicativo Silverlight.

Em detalhes, o que eu fiz foi copiar o código abaixo para a página Default.aspx do aplicativo web. Depois copiei os 2 javascripts do projeto Silverlight para o projeto web e fiz referencia a eles na página Default.aspx.


       

Agora é só teclar F5 e testar. Se estiver tudo certo, deverá aparecer o texto "Hello World" no seu browser. Se você clicar com o botão direito do mouse, verá que o texto está no Silverlight.

Agora algumas dicas para aperfeiçoar a utilização de sua aplicação silverlight com web services:

1 - Crie uma classe facade para acessar o web service. Eu costumo criar classes estáticas para esse fim. Nessa classe, crie um método público para cada método do web service e um método privado que irá instanciar a web reference. Com isso, em todos os pontos da sua aplicação onde for necessário acessar o web service, bastará chamar um desses métodos estáticos que ele se encarregará de instanciar a web reference e fazer a chamada ao método.

2 - Silverlight não "gosta" de métodos void em web service. Eu não sei dizer direito o motivo disso mas, se você criar um método void no seu web service e chamar a partir do Silverlight, o método será executado com sucesso mas será lançada uma excessão no Silverlight. Eu consegui contornar isso fazendo chamadas assincronas aos métodos void (como não há retorno, o comportamento da aplicação não muda). Como a minha aplicação utiliza apenas a classe facade, só é necessário mudar em 1 lugar. Você também pode contornar isso alterando o web service para que não tenha mais métodos void. Eu achei mais elegante fazer a chamada assíncrona pois preserva o código original do web service.

3 - Informe a Url relativa do web service antes de chamar qualquer método. Se você não fizer isso, o seu projeto só irá funcionar localmente pois o seu aplicativo Silverlight vai tentar chamar um web service em uma url semelhante a "http://localhost:49571/Servico.asmx", que com certeza não vai funcionar em produção. No código desse aplicativo de testes, bastaria acrescentar a linha "servico.Url = "Servico.asmx";" para que o aplicativo funcione em qualquer lugar (local ou publicado em servidor). Pode ser qualquer Url relativa a raiz do site. Se você fizer a classe facade, só terá que fazer essa alteração da url em 1 lugar.

Espero que esse post seja útil para os seus estudos de Silverlight 1.1. Talvez algumas implementações utilizadas nesse exemplo tenham que ser alteradas quando a versão 2.0 do Silverlight for lançada, assim como algumas limitações podem mudar. Seja como for, já dá para ter uma boa noção de como funciona e o que é necessário para começar a estudar e viabilizar novas formas de interação com os usuários dos seus aplicativos.

Se alguém tiver interesse nos códigos fontes utilizados para escrever esse artigo, basta deixar um comentário que eu envio por email.

Até o próximo post.

Tags: Silverlight