segunda-feira, outubro 18, 2010

Desenvolvendo uma aplicação para o Windows Phone 7 com o Visual Studio 2010

Neste domingo aproveitei para me aprofundar e entender melhor como desenvolver aplicativos para o Windows Phone 7. Entendi os aspectos básicos da plataforma, do modelo de desenvolvimento e já criei minha primeira aplicação útil para o Windows Phone 7: uma aplicação que calcula o preço teórico de uma opção através da equação de Balck-Scholes. E detalhe: tudo isso em 4 horas! Fiquei impressionado com a facilidade de desenvolvimento para o Windows Phone 7.

Nesse artigo tenho dois objetivos. O primeiro é explicar alguns conceitos úteis sobre o desenvolvimento com Windows Phone 7 e passar links e referências para materiais. O aegundo objetivo é o de mostrar minha aplicação e dar algumas dicas concretas do que fazer para resolver algumas necessidades que tive para construí-la.

A programação com o Windows Phone 7 é feita com alta produtividade utilizando a solução Microsoft Visual Studio 2010 Express for Windows Phone. Um detalhe muito importante: ela é gratuita! Caso você já possua alguma versão do Visual Studio 2010 em sua máquina, o VS 2010 Express for Windows Phone será instalado como um add-in para a sua versão do Visual Studio 2010. A solução não vem apenas com o clássico ambiente do Visual Studio 2010. Conta também com os seguintes softwares (reforçando... gratuitos também!):

- Windows Phone Emulator: O emulador do Windows Phone 7 para você testar e fazer debug de suas aplicações.
- Expression Blend 4 for Windows Phone: Uma ferramenta completa para os especialistas em interface de usuário. Ela facilita a criação de aplicações com interfaces mais rebuscadas e com mais recursos de animação.

Há duas grandes plataformas de desenvolvimento para o Windows Phone 7: Silverlight e XNA Game Studio. Essas plataformas foram escolhidas porque existem já milhares de desenvolvedores com conhecimento nelas. A escolha é simples: se estiver fazendo uma aplicação então use Silverlight. Se for criar um jogo use XNA (aliás, é a mesma plataforma usada para desenvolver jogos no XBox! ).

Para quem está acostumado a programar com Visual Studio, a experiência é muito similar.


Você encontra uma série de controles prontos para colocar na interface da aplicação Windows Phone, bem como pode alterar diretamente o XAML correspondente e que aparece ao lado da interface.

Antes de mostrar a aplicação vamos para algumas referências importantes para aprofundar:

- Livro Programming Windows Phone 7 de Charles Petzold (ainda em beta mas já tem bastante conteúdo)
- Windows Phone Developer Portal. Você deve se cadastrar para acessar. Para publicar sua aplicação no Market Place do windows Phone é preciso pagar uma taxa de 175 reais (para estudantes é gratuito... aproveitem!)
- Windows Phone Development no MSN
- Windows Phone 7 Developer Training Kit no Channel9

Vamos ao que interessa... ver como fiz minha aplicação para Windows Phone! Fazer só um Hello World não é muito útil, então resolvi criar uma aplicação que seria interessante inclusive para mim (também gosto de estudar sobre finanças e investir na bolsa!). É uma aplicação que calcula o preço teórico de uma opção sobre ação, utilizando a famosa fórmula fechada, baseada em equações diferenciais parciais, de Black-Scholes.

A tela inicial possui dois radio buttons para que o usuário selecione se quer calcular o preço de uma opção de compra (call) ou de uma opção de venda (put). Para realizar o cálculo é preciso colocar cinco parâmetros: preço da ação-objeto, preço de exercício da opção (strike), a taxa de juros anual, o tempo até a opção expirar e a volatilidade da ação-objeto.


Podemos visualizar na tela abaixo os campos preenchidos:


Quando o usuário tocar seu dedo no botão "Calculate!" o cálculo será realizado e a tela abaixo é mostrada para o preço de uma opção de compra:


Para uma opção de venda com os mesmos parâmetros a tela de resultados é essa:


Eu não podia deixar de validar se meus cálculos estavamcorretos, então comparei com uma calculadora on-line de precificação de opções. E estão exatamente iguais! Se não confiar em mim pode entrar na calculadora on-line e fazer o cálculo com os mesmos parâmetros :) !

Explicada a aplicação, vamos a algumas dicas que tive que pesquisar para resolver algumas necessidades.

Dica 1 -> Eu queria que o usuário só digitasse números ou símbolos (para decimais). Porém o teclado do TextBox aparecia com letras primeiro o que consumia um toque a mais. Para resolver isso basta colocar no XAML do textBox o seguinte: InputScope="Number". Assim um dos textBoxes ficou assim:

TextBox Height="70" HorizontalAlignment="Left" Margin="233,113,0,0" Name="X" Text="" VerticalAlignment="Top" Width="180" InputScope="Number" Grid.Row="1"

E pronto! O teclado aparece com os números e símbolos, quando o usuário toca o campo de texto, conforme a figura abaixo:


Dica 2 -> Navegação entre telas. Quando o usuário seleciona o botão "Calculate!" deve navegar para uma outra tela ( Result.xaml ) para mostrar o resultado. Uma navegação simples, sem passagem de parâmetros, é feita dessa forma:

NavigationService.Navigate(new Uri("/Result.xaml", UriKind.Relative));

Para passar parâmetros podemos usar strings (há outros jeitos de fazer, mas para minha aplicação simples com uma única tela e apenas seis parâmetros usei dessa forma), como em uma URI do protocolo HTTP. Exemplo:

NavigationService.Navigate(new Uri("/Result.xaml?optionType=" + optionType + "&stockPrice=" + S.Text + "&strikePrice=" + X.Text + "&time=" + T.Text + "&interestRate=" + R.Text + "&volatility=" + V.Text, UriKind.Relative));

Esse método é chamado dentro do evento de clique do botão Calculate, que se encontra no code-behind da MainPage ( MainPage.xaml.cs ):

private void CalculateBS_Click(object sender, RoutedEventArgs e)
{
string optionType;

if (radioButton1.IsChecked == true)
optionType = "c";
else
optionType = "p";
}

NavigationService.Navigate(new Uri("/Result.xaml?optionType=" + optionType + "&stockPrice=" + S.Text + "&strikePrice=" + X.Text + "&time=" + T.Text + "&interestRate=" + R.Text + "&volatility=" + V.Text, UriKind.Relative));
}

Na tela Result.xaml eu coloquei um botão "Back to Calculator". Só precisei colocar o seguinte para voltar para a página anterior:

private void Back_Click(object sender, RoutedEventArgs e)
{
NavigationService.GoBack();
}

Dica 3 -> Para receber os parâmetros em Result.xaml fiz o seguinte no code-behind do método "OnNavigatedTo" :

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);

string optionType;
string stockPrice = "";
string strikePrice = "";
string time = "";
string interestRate = "";
string volatility = "";

NavigationContext.QueryString.TryGetValue("optionType", out optionType);
NavigationContext.QueryString.TryGetValue("stockPrice", out stockPrice);
NavigationContext.QueryString.TryGetValue("strikePrice", out strikePrice);
NavigationContext.QueryString.TryGetValue("time", out time);
NavigationContext.QueryString.TryGetValue("interestRate", out interestRate);
NavigationContext.QueryString.TryGetValue("volatility", out volatility);

...

}

Dica 4 -> Como o meu método que calcula Black-Scholes usa double nos parâmetros monetários usei o conversor do C# para transformar cada string em uma double, conforme exemplo:

double dstockPrice = Convert.ToDouble(stockPrice);

Usei o conversor para transformar o retorno em double para String, de forma a mostrar o resultado em um TextBox:

BSResult.Text = Convert.ToString(optionPrice);

Dica 5 -> Minha solução foi composta de dois projetos: um projeto "Windows Phone Application" e o outro uma "Windows Phone Class Library". Na Class Library coloquei minha classe StockOption.cs. Recomendo fazer esse trabalho de separar os detalhes e validações de interface do seu "código de negócio". Isso o tornará reutilizável e facilitará o entendimento futuro da solução. Isto significa que você pode fazer uma boa arquitetura de aplicação também com um projeto Windows Phone 7, assim como já fazemos hoje para aplicações corporativas!

Para publicar uma aplicação no Market Place (e deixá-la disponível para os Windows Phones diretamente do celular) basta se logar com seu Windows Live ID no Windows Phone Developer Portal.

Aí estão minhas dicas! Essa aplicação que criei já estará disponível gratuitamente no Market Place do Windows Phone 7! Vou posteriormente incrementá-la para calcular as gregas, volatilidade implícita, entre outros recursos. Aí vou cobrar um pequeno valor pela versão mais completa. Desenvolver aplicativos para o windows Phone 7 é mais uma ótima opção para desenvolvedores ganharem um dinheirinho extra :) !!!

terça-feira, outubro 12, 2010

Mitos e Verdades sobre o Visual Studio 2010 ALM - Parte 2

Essa é o segundo artigo da minha série sobre mitos e verdades do Visual Studio ALM. Hoje falarei sobre três pontos: abertura da plataforma, requisitos e controle de versões.

A plataforma de ALM e desenvolvimento da Microsoft é hoje uma das mais abertas do mercado. Prova disso está nos mais de dois mil add-ins e extensões encontrados na Visual Studio Gallery. São extensões gratuitas ou pagas que potencializam ainda mais a plataforma. Além dessa gama de produtos já existentes, a Microsoft fornece uma documentação abrangente e completa da API do TFS 2010, do TFS 2010 SDK e de como extender o Visual Studio 2010. Podemos ainda encontrar centenas de aplicações, documentações e recursos extras disponíveis no CodePlex, a comunidade open source relacionada a produtos Microsoft.

O outro assunto importante e rodeado de mitos é o de Requisitos. Muitos acham que a solução de ALM da Microsoft não possui recursos para o problema de gestão de requisitos. Pois bem, para começar eliminado esse mito aponto para o Visual Studio 2010 Team Foundation Server Requirements Management Guidance. É um guia contendo "apenas" um pouco mais de 150 páginas só sobre como implementar gestão de requisitos de forma completa, tanto de modo Ágil como para atender REQM e RD do CMMI!

O guia explica como implementar a gestão de requisitos, utilizando uma série de recursos disponíveis no VS 2010 ALM. Os work items hierárquicos, que são uma novidade da versão 2010, constituem o ponto central da solução. Com eles podemos criar queries ou relatórios de rastreabilidade utilizando o SQL Server Reporting Services. Recomendo também uma extensão gratuita para o Visual Studio 2010 chamada Work Item Visualizer. Com ela é possível ver graficamente todas a rastreabilidade e dependências de um work item.

Recomendo também olhar uma ferramenta paga de parceiro: O TeamSpec, que permite integração direta entre o Microsoft Word e o Team Foundation Server 2010. Assim obtemos uma solução similar a outras ferramentas de gestão de requisitos do mercado! Não podemos esquecer também dos workbooks, que integram as estórias de usuário ou os requisitos com o Excel. São planilhas especiais que facilitam e potencializam o processo de trabalho de priorização, organização e gestão de requisitos pelos analistas de negócio e product owners. A prototipação da aplicação também é um ponto fortemente atendido na plataforma, através da ferramenta SketchFlow. Recomendo olhar com atenção os recursos e facilidades de prototipação e feedback da prototipação disponíveis.

O terceiro assunto é o de controle de versões. Hoje o TFS 2010 possui todos os recursos de um sistema avançado de controle de versões como activity-based change management (integração de check-in de código com atividades), branches, merges, histórico visual de merges, integração com build automatizado, gated check-ins, entre outras. Para facilitar o trabalho do gerente de configuração recomendo fortemente o Visual Studio TFS Branching Guide 2010, guia completo e avançado sobre controle de versões feito pelos VS ALM Rangers.

domingo, outubro 10, 2010

Minha lista de eventos em outubro de 2010

Neste mês de outubro tenho uma agenda razoável de eventos como palestrante! São eventos muito bons e sempre interessantes para aumentar conhecimento em uma série de assuntos.

Dia 16 de outubro: Plataforma Java versus Plataforma .NET, que ocorrerá na UNIP em São Paulo. O evento não tem como objetivo a disputa, mas sim mostrar ambas as plataformas de forma aberta e objetiva. Minha palestra entrou no tema 8, sobre Metodologias e ALM, e será sobre o Team Foundation Server 2010 ( TFS 2010 ) e a solução de Application Lifecycle Management ( ALM ) da Microsoft.

Dia 19 de outubro: Encontro Mensal da ALATS-SP, que ocorrerá na sede da Microsoft. Minha palestra tratará sobre testes e qualidade com o Visual Studio ALM.

Dia 25 de outubro de 2010: Agile Tour São Paulo 2010, que ocorrerá em São Paulo. Minha palestra será sobre Test Driven Development com Visual Studio 2010.

Dia 27 de outubro: Seminário Mineiro de Qualidade de Software, que ocorrerá em Belo Horizonte. Minha palestra tem como título - O fim do 'Mas na minha maquina funciona!' - Melhorando a colaboração e a produtividade de testers e desenvolvedores.


Aproveitem para investir em conhecimento nesse mês. Tem muita coisa boa acontecendo no nosso mundo de engenharia de software!!!


Veja as Estatísticas