Se você não sabe o que é um mashup, vale a pena saber: mashups são “misturas” de dados que permitem combinar dados de diversas fontes, criando uma visualização unica, resumida. Por exemplo, você pode pegar dados de clientes, com suas localizações e colocar “pins” no mapa, com indicações dos clientes. Ou você pode pegar dados estatísticos e plotar gráficos ou criar mapas que mostram a atividade no mundo.

Enfim, as oportunidades para criar um mashup são praticamente infinitas. A Microsoft criou um gerador de mashops, o PopFly creator, onde você pode criar seus blocos, que extraem os dados de diversas fontes e geram saídas diversas. Estes blocos são criados usando Javascript, isto é, não necessitam de nenhuma linguagem especial. Se você acha que pode ser complicado criar um bloco, não precisa se aventurar a tanto, no início: você pode usar os blocos criados por outras pessoas, que estão disponíveis e que, inclusive, podem ser alterados por você.

Para mostrar como é fácil criar um mashup, vamos fazer um. Para isso, vamos usar os blocos criados pelo meu filho Roberto e pelo Bruno Reis, que estão concorrendo na etapa mundial da ImagineCup 2009, na categoria Mashup, o KnoWorld. Os blocos criados por eles tem diversas funcionalidades. Por exemplo, o GapMinder extrai dados de diversos indicadores (você pode ter a lista completa em http://tinyurl.com/gap-ind) e disponibiliza-os em formato ano/valor ou país/valor, de maneira que você pode obter uma série temporal (quando quer ver a evolução de um indicador num país) ou espacial (quando quer ver a distribuição de um indicador no mundo, num determinado ano).

A partir daí, você pode plotar estes dados usando os blocos TimePlot (que mostra os dados, ligando-os a uma série de eventos), ou Google Charts (que plota um gráfico de barras, de linha, ou mesmo um mapa mundi colorido).

No meu caso, eu queria verificar a correlação entre o consumo de óleo no Brasil, com a emissão de CO2, para ver se há correspondência entre os dois indicadores. Fui até http://www.popfly.com/mashupcreator, dei meu login do passport e comecei a criar o mashup. Inicialmente, coloquei dois blocos GapMinder (basta teclar na caixa de pesquisa, que ele aparece). Configurei o primeiro GapMinder para a operação “getByCountry” e o indicador “Oil consumption”. Selecionei o país Brasil. O segundo GapMinder foi configurado para o indicador “Total CO2 emissions (thousand tonnes)”. Em seguida, coloquei dois blocos Filter. Estes blocos filtram os dados para as condições selecionadas. Como o GapMinder gera muitas informações, iremos filtrar os dados a partir de 1965, mostrando os dados de 5 em 5 anos. Em seguida, liguei a saída dos GapMinders aos Filters. Configurei os blocos Filter como 

  • List: Source – GapMinder – Value: [entire TimeSeries object]
  • Condition: Custom – Value: x.year >= 1965 && x.year % 5 == 0

 Finalmente, adicionei um bloco Google Charts e liguei a saída dos dois Filters à entrada do Google Charts. Configurei o Google Charts como

  • Operations: plotLineChart
  • X Values: Filter – Value: year
  • Y Values: Filter – Value: value
  • XValues2: Custom – Value:  (deixar um espaço em branco para plotar o gráfico)
  • Y Values2: Filter(2) – Value: value
  • ShowImage: true

Pronto. Isto é tudo o que precisamos. O Mashup ficou como a figura abaixo

 

Aí é só executar o mashup e ver o resultado, como em:

 

Como vocês podem ver, o consumo de óleo corre em paralelo com a emissão de CO2. Se vocês quiserem ver o mashup, ele está em http://www.popfly.com/users/BSonnino/Oil%20consumption%20vs%20CO2%20Emission%20in%20Brazil

Como vocês podem ver, criar um mashup é muito fácil, já imaginaram as possibilidades?

 

Meus filhos Roberto e Eduardo, juntamente com o Bruno Reis foram campeões na etapa Brasil de Software Design da ImagineCup, com o projeto HealthTag, um projeto que permite o apoio a projetos de saúde para pacientes em locais remotos, usando uma série de recursos:

  • Microsoft Tag
  • Microsoft HealthVault
  • Microsoft Azure
  • WPF
  • Mobile
  • Multitouch

A próxima etapa é no Egito, onde eles tentarão conquistar o título mundial de SD, um título inédito para o Brasil. O press release oficial está em http://s2.com.br/scripts/release.asp?clienteId=361&releaseId=22559

 

A versão beta do Silverlight 3 foi lançada no Mix 2009 e trouxe diversas novidades. Entre elas estão o Element Binding e a possibilidade de simular 3D nas aplicações.

O Element Binding é um tipo de data binding já existente no WPF, mas que não tinha sido implementado no Silverlight 2. No Silverlight 2 podiamos fazer ligação da interface com os dados de uma classe interna, mas não podíamos ligar 2 as propriedades de dois elementos visuais. Por exemplo, se quiséssemos colocar um TextBlock e um Slider na janela e mostrar a posição do Slider no TextBlock, deveríamos criar uma classe no código e ligar os dados da classe aos dois componentes. O código ficaria assim:

Code behind:

namespace SL2Binding

{

    public class Binder : INotifyPropertyChanged

    {

        private double posicao;

        public double Posicao

        {

            get { return posicao; }

            set

            {

                posicao = value;

                if (PropertyChanged != null)

                    PropertyChanged(this, new PropertyChangedEventArgs(“Posicao”));

            }

        }

 

        #region INotifyPropertyChanged Members

 

        public event PropertyChangedEventHandler PropertyChanged;

 

        #endregion

    }

 

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

        }

    }

}

 

XAML:

<UserControl x:Class=”SL2Binding.MainPage”

    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

             xmlns:local=”clr-namespace:SL2Binding”

             Width=”400″ Height=”300″>

    <UserControl.Resources>

        <local:Binder x:Key=”binder” />

    </UserControl.Resources>

    <Grid x:Name=”LayoutRoot” Background=”White”>

        <StackPanel Orientation=”Horizontal”>

            <Slider Width=”150″ Margin=”5″ Value=”{Binding Source={StaticResource binder}, Path=Posicao, Mode=TwoWay}”/>

            <TextBlock VerticalAlignment=”Center”  Margin=”5″ Text=”{Binding Source={StaticResource binder}, Path=Posicao, Mode=TwoWay}”/>

        </StackPanel>

    </Grid>

</UserControl>

 

Embora isto funcione, é um pouco complicado: precisamos criar uma classe de ligação que implementa a interface INotifyPropertyChanged, declará-la no XAML e fazer data binding dos dois elementos com ela.  Com a introdução do Element Binding no Silverlight 3, as coisas ficam muito mais fáceis: não precisamos implementar classes no código e o XAML fica muito mais simples:

<UserControl x:Class=”SL2Binding.MainPage”

    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

             Width=”400″ Height=”300″>

    <Grid x:Name=”LayoutRoot” Background=”White”>

        <StackPanel Orientation=”Horizontal”>

            <Slider x:Name=”slider” Width=”150″ Margin=”5″ />

            <TextBlock x:Name=”textBlock” VerticalAlignment=”Center”  Margin=”5″ Text=”{Binding ElementName=slider, Path=Value, Mode=OneWay}”/>

        </StackPanel>

    </Grid>

</UserControl>

 

Precisamos apenas de um binding do texto do TextBlock com o slider e temos exatamente o mesmo comportamento do código anterior.

Simultaneamente à introdução do Element Binding, o Silverlight 3 também trouxe, entre outras coisas, uma simulação de 3D. Não é um 3D real, mas é muito simples de usar e deve satisfazer as necessidades de grande parte dos usuários: o Silverlight 3 permite criar a projeção de um plano girá-la nos eixos X, Y ou Z. Por exemplo. Se tivermos uma janela como esta:

<Grid x:Name=”rotateGrid” Margin=”10″ Background=”LightGray” >

    <Grid.RowDefinitions>

        <RowDefinition Height=”30″ />

        <RowDefinition Height=”30″ />

        <RowDefinition Height=”30″ />

        <RowDefinition Height=”30″ />

        <RowDefinition Height=”*” />

    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>

        <ColumnDefinition Width=”*” />

        <ColumnDefinition Width=”2*” />

    </Grid.ColumnDefinitions>

    <TextBlock Text=”Nome” Grid.Row=”0″ Margin=”5″/>

    <TextBlock Text=”Endereço” Grid.Row=”1″ Margin=”5″/>

    <TextBlock Text=”Cidade” Grid.Row=”2″ Margin=”5″/>

    <TextBlock Text=”Estado” Grid.Row=”3″ Margin=”5″/>

    <TextBox Grid.Row=”0″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

    <TextBox Grid.Row=”1″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

    <TextBox Grid.Row=”2″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

    <TextBox Grid.Row=”3″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

    <StackPanel Orientation=”Horizontal” Grid.Row=”4″ Grid.Column=”1″ Margin=”5″

                HorizontalAlignment=”Center” VerticalAlignment=”Top”>

        <Button Content=”Ok” Height=”27″ Width=”75″ Margin=”5″/>

        <Button Content=”Cancelar” Height=”27″ Width=”75″ Margin=”5″/>

    </StackPanel>

</Grid>

 

Podemos girá-la usando o seguinte markup:

<Grid.Projection>

    <PlaneProjection RotationY=”30″/>

</Grid.Projection>

 

Estamos aqui indicando que queremos girar a grid em 30º ao redor do eixo Y. Ao executarmos o programa, temos a seguinte figura:

 Figura 1

Note que, embora a figura esteja girada, ela é perfeitamente funcional. Da mesma maneira que giramos em torno do eixo Y, podemos ainda girar o plano em torno dos eixos X e Z. Os eixos estão dispostos como na figura abaixo:

 Figura 2

Agora, podemos juntar as duas partes (Element Binding e 3D) fazer o painel girar na horizontal (rotação no eixo Y) com o uso de um slider, sem precisar usar código. Para isso, usamos o seguinte XAML:

<UserControl x:Class=”SL3Plane.MainPage”

    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

    Width=”400″ Height=”300″>

    <Grid x:Name=”LayoutRoot” Background=”White”>

        <Grid.RowDefinitions>

            <RowDefinition Height=”*” />

            <RowDefinition Height=”30″ />

        </Grid.RowDefinitions>

        <Grid x:Name=”rotateGrid” Margin=”10″ Background=”LightGray” >

            <Grid.Projection>

                <PlaneProjection x:Name=”Projecao” />

            </Grid.Projection>

            <Grid.RowDefinitions>

                <RowDefinition Height=”30″ />

                <RowDefinition Height=”30″ />

                <RowDefinition Height=”30″ />

                <RowDefinition Height=”30″ />

                <RowDefinition Height=”*” />

            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>

                <ColumnDefinition Width=”*” />

                <ColumnDefinition Width=”2*” />

            </Grid.ColumnDefinitions>

            <TextBlock Text=”Nome” Grid.Row=”0″ Margin=”5″/>

            <TextBlock Text=”Endereço” Grid.Row=”1″ Margin=”5″/>

            <TextBlock Text=”Cidade” Grid.Row=”2″ Margin=”5″/>

            <TextBlock Text=”Estado” Grid.Row=”3″ Margin=”5″/>

            <TextBox Grid.Row=”0″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

            <TextBox Grid.Row=”1″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

            <TextBox Grid.Row=”2″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

            <TextBox Grid.Row=”3″ Grid.Column=”1″ HorizontalAlignment=”Stretch” Margin=”5″ />

            <StackPanel Orientation=”Horizontal” Grid.Row=”4″ Grid.Column=”1″ Margin=”5″

                        HorizontalAlignment=”Center” VerticalAlignment=”Top”>

                <Button Content=”Ok” Height=”27″ Width=”75″ Margin=”5″/>

                <Button Content=”Cancelar” Height=”27″ Width=”75″ Margin=”5″/>

            </StackPanel>

        </Grid>

        <Slider Grid.Row=”1″ Width=”150″ Minimum=”0″ Maximum=”180″

           Value=”{Binding ElementName=Projecao, Path=RotationY,

                     Mode=TwoWay}” />

    </Grid>

</UserControl>

 

Demos um nome à projeção para poder fazer Binding com ela e colocamos um slider na página, para poder girar o plano. Ao executarmos o projeto, vemos que o slider gira o plano sem que haja a necessidade de escrever código. Porém, ao girar mais de 90º vemos um efeito indesejado: o 3D do Silverlight é apenas uma simulação e estamos vendo a frente do painel, invertida:

Figura3

Mesmo assim, a tela continua funcional, podemos digitar nas caixas de texto normalmente. Com quase toda certeza, não é este efeito que você está procurando, e devemos dar um jeito nisso.  Para simular o efeito 3D devemos ter dois painéis, um para a frente e outro para o fundo. Criamos então o painel do fundo e deixamos com visibilidade Collapsed, para que não seja mostrado:

<Grid x:Name=”gridFundo” Background=”Aquamarine” Visibility=”Collapsed”

      RenderTransformOrigin=”0.5,0.5″>

    <TextBlock Text=”Verso do painel” FontFamily=”Tahoma”

               FontSize=”24″

               HorizontalAlignment=”Center” VerticalAlignment=”Center”

               RenderTransformOrigin=”0.5,0.5″>

        <TextBlock.RenderTransform>

            <RotateTransform Angle=”45″ />

        </TextBlock.RenderTransform>

    </TextBlock>

</Grid>

 

Este painel contém apenas um TextBlock para exemplificar, mas poderíamos colocar aí qualquer componente (um exemplo seria simular uma ficha, mostrando a frente e o verso dos dados). Para fazer a troca dos painéis devemos usar code behind, ativado pelo evento ValueChanged do slider:

private double anguloAnt;

 

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)

{

    double anguloAtu = (sender as Slider).Value;

 

    if ((anguloAnt < 90 && anguloAtu >= 90 ) ||

        (anguloAnt > 90 && anguloAtu <= 90 ))

    {

        MostraGrids(anguloAtu);

    }

    anguloAnt = anguloAtu;

}

 

private void MostraGrids(double angulo)

{

    if (angulo < 90)

    {

        gridFrente.Visibility = Visibility.Visible;

        gridFundo.Visibility = Visibility.Collapsed;

    }

    else

    {

        gridFrente.Visibility = Visibility.Collapsed;

        gridFundo.Visibility = Visibility.Visible;

    }

}

 

Temos uma variável para guardar o ângulo atual. Quando o ângulo atual passa de 90º e o anterior é menor que 90º ou vice versa, mostramos uma grid e escondemos a outra. Temos que fazer um pequeno truque no painel de fundo:  quando estamos girando em torno do eixo Y (rotação na horizontal), o painel do fundo fica invertido. Podemos solucionar isso aplicando uma transformação que inverte o painel:

<Grid x:Name=”gridFundo” Background=”Aquamarine” Visibility=”Collapsed”

      RenderTransformOrigin=”0.5,0.5″>

    <Grid.RenderTransform>

        <ScaleTransform x:Name=”gridTransform” ScaleX=”-1″/>

    </Grid.RenderTransform>

    <TextBlock Text=”Verso do painel” FontFamily=”Tahoma” FontSize=”24″

               HorizontalAlignment=”Center” VerticalAlignment=”Center”

               RenderTransformOrigin=”0.5,0.5″>

        <TextBlock.RenderTransform>

            <RotateTransform Angle=”45″ />

        </TextBlock.RenderTransform>

    </TextBlock>

</Grid>

 

Desta maneira, mostramos o painel da frente e do verso usando os novos recursos de 3D e element binding do Silverlight 3.

Figura 4

Meu artigo sobre criação de aplicativos LOB (Line of Business) com Silverlight foi publicado na revista .net Magazine número 60 (aliás, ele é o artigo de capa). Neste artigo, mostro como criar uma aplicação LOB usando o Silverlight e WCF.

Lá eu mostro como criar um serviço WCF que acessa os dados de um banco de dados usando Linq to SQL e um programa Silverlight que acessa este serviço. A aplicação mostra como pesquisar, incluir,  editar ou excluir os dados. Além disso, mostro como fazer a mudança entre as páginas de uma aplicação Silverlight, mostrando a lista numa página e os detalhes em outra.

Enfim, se você quer saber como criar uma aplicação comercial usando Silverlight, vale a pena dar uma conferida no artigo.

Uma das críticas mais comuns ao Silverlight é o fato que, embora a plataforma seja muito ampla e traga muitas facilidades para a criação de interfaces ricas para a Web, com o uso de videos, animações, controles, ele é apenas uma “carinha bonita, sem conteúdo”.

Nada está mais longe da verdade que esta afirmação: o Silverlight é, na realidade uma plataforma completa, com acesso à rede, acesso a dados, podendo inclusive usar LINQ para acessar os dados. Como os programas rodam no browser, o acesso à máquina cliente é muito restrito, mas isto não quer dizer que não há a possibilidade de acessar dados externos: há sim, e as possibilidades são inúmeras: podemos acessar dados de um servidor através de um WebService, acessar serviços REST ou mesmo consumir feeds RSS, apresentando os resultados numa interface rica, semelhante à de uma aplicação Desktop utilizando WPF.

O livro Data-Driven Services with Silverlight 2 vem suprir a falta de referências que mostram o acesso a dados com Silverlight: enquanto a maior parte dos livros sobre Silverlight ensinam a criar programas com a nova tecnologia, mostrando a criação da interface visual, este livro passa superficialmente sobre a interface, concentrando-se no acesso a dados.

O primeiro capítulo mostra uma introdução aos novos recursos do Silverlight, como o LINQ ou as alterações na linguagem introduzidas com o C# 3.0. A partir do capítulo 2 é que realmente começa o livro: os capítulos 2, 3 e 4 dão uma visão bastante completa da ligação de dados (Data binding), indispensável para conectar o dado vindo de um serviço à interface. Em seguida, o livro entra no acesso a dados propriamente dito: o capítulo 5 é uma introdução a WCF e WebServices, mostrando a criação de serviços com WCF ou AsmX. Este capítulo mostra ainda como fazer chamadas “Crossdomain”, que acessam serviços fora do domínio onde está situada a aplicação Silverlight: não há restrições para acesso a um serviço situado no mesmo domínio da aplicação Silverlight, mas o acesso a outros domínios é restrito e deve ser resolvido: muitas vezes, criamos um programa Silverlight e não conseguimos acessar os dados, devido a esta restrição. Aqui é mostrado como solucionar o problema de acesso entre domínios e como é possível debugar as requisições ao servidor.

O capítulo 6 mostra como serializar entidades usando o WCF. Usando o LINQ to SQL ou o LINQ to Entities, obtemos classes para acesso aos dados, mas estas estão restritas ao servidor. Este capítulo mostra como podemos serializar as entidades com o WCF e acessá-las no programa Silverlight, consumindo-as usando o LINQ to Objects.

Os capítulos 7, 8 e 9 falam sobre criação e consumo de serviços REST. Os serviços REST utilizam comandos HTTP (PUT, GET, DELETE, POST), podendo passar parâmetros para o serviço pela URL, o que facilita muito o uso do serviço, inclusive usando o browser, sem nenhum programa cliente específico. O capítulo 7 mostra como consumir serviços REST usando o WebClient e o HTTPWebRequest, inclusive usando múltiplas threads para obter os dados. O capítulo 8 mostra como consumir o serviço de acesso à Amazon, pesquisando livros na livraria virtual. Com a base deste capítulo, você pode inclusive estender a aplicação, criando um carrinho de compras no seu programa Silverlight. O capítulo 9 mostra a criação de um serviço REST e o assesso ao Twitter, criando um programa que permite acessar o serviço e postar mensagens, usando JSON ou mesmo XML para transferir os dados.

O capítulo 10 mostra o acesso a RSS feeds, usando a API de Syndication. Embora esta não esteja diretamente relacionada com o Silverlight, pois está disponível também no .net Framework completo, não vemos muitas referências a ela. Aqui temos uma visão clara de como usar esta API para acessar os dados de um RSS e apresentá-los em nossa aplicação. O último capítulo mostra o acesso a dados com o ADO.NET Data Services que, associado ao Entity Framework, facilita muito o acesso aos dados remotos.

Em resumo, este não é um livro para aprender Silverlight, há muitos bons livros para aprender esta tecnologia. Mas, se você já conhece Silverlight e quer saber como criar programas LOB, que não sejam apenas uma “carinha bonita”, deve ter este livro em sua estante.

 

Se você tem aplicações Windows Forms e quer portá-las para WPF, não precisa fazer todo o trabalho de uma única vez. Você pode misturar controles e janelas WPF nas aplicações Windosw Forms (e também colocar controles WinForms em aplicações WPF). Se quer saber mais sobre isso, pode dar uma olhada em meu artigo no portal MSDN Brasil: http://msdn.microsoft.com/pt-br/library/dd448660.aspx

Lá eu mostro como colocar um controle WPF em janelas WinForms, controles WinForms em janelas WPF e como chamar janelas WinForms em programas WPF.

 

Nestes tempos onde a Internet contém informações praticamente sobre todos os assuntos, eu ainda sou um leitor à antiga: ainda gosto muito de ler livros. Um livro técnico tem diversas vantagens sobre a Internet:

  • O texto sobre um deferminado assunto fica concentrado num único lugar, não preciso pesquisar ou procurar por ele
  • Os dados são cuidadosamente escritos e revisados, o que faz que as informações contenham (em geral) menos erros
  • Pode ser lido em qualquer lugar ou condição, sem energia elétrica ou conexão à Internet

Assim, postarei aqui periodicamente reviews sobre o que estou lendo, para que vocês possam ver o que temos disponível e medir se vale a pena, financeiramente e quanto a gasto de tempo (que pessoalmente, acho mais caro que o próprio custo do livro).

O primeiro review é sobre o livro Coding4Fun, do Dan Fernandez e Brian Peek, publicado pela O’Reilly. O título poderia ser traduzido por “Codificando por Diversão” e, à primeira vista, poderia parecer algo sobre programação nas horas vagas, onde fazemos testes sobre os assuntos que nos interessam. Bem, o livro não deixa de ser isso, mas é muito mais.

O livro traz 10 projetos, divididos em três áreas: Jogos, Software e Web e Hardware. A primeira parte traz 3 projetos ligados a jogos: um jogo de Space Invaders (aqueles com mais de 30 anos com certeza lembram deste :-)), feito com XNA, um jogo de aventura com um soldado de Lego em Silverlight, feito com o PopFly game creator e um leitor de RSS para o WarCraft. A segunda parte traz 4 projetos, um para fazer download dos vídeos do YouTube e convertê-los para tocar no computador offline ou no IPod ou Zune, um para fazer streaming peer2peer de vídeos, para poder ver em um computador remoto os vídeos armazenados em outro, um sistema de pesquisas de opinião usando o Twitter e um sistema Asp.net para ver em qualquer lugar o conteúdo da caixa postal do Outlook usando o Windows Home Server. A última parte contém três projetos ligados a equipamentos de hardware. O primeiro é um carro de controle remoto controlado pelo WiiMote, o controle remoto do Wii. O segundo é um projeto de uma tela touch screen na parede usando o WiiMote e o terceiro permite controlar luzes natalinas que acendem e apagam conforme a música.

Como podem ver, o escopo do livro é bem amplo e cobre um leque de tecnologias muito grande. Os projetos são muito interessantes e, mesmo que você não se interesse por todos, com certeza, irá gostar muito de alguns. O livro é bem escrito e contém os códigos escritos tanto em C# quanto em VB.net. Pessoalmente, eu gostei bastante do livro e ele traz um mix de muitas tecnologias que estão sendo criadas pela Microsoft. Entre elas:

  • XNA
  • PopFly Game Creator – Silverlight
  • WPF
  • WCF
  • Asp.Net
  • RSS Feeds
  • Integração com Outlook

Além disso, mostra como interfacear com outras tecnologias, como o WarCraft, o YouTube, o WiiMote ou o Twitter. Os projetos são muito bons e pude comprovar que funcionam, como o projeto da tela TouchScreen, que ajudou meus filhos Roberto e Eduardo a irem à França em 2008 para competir na ImagineCup, na categoria Projeto de Software, com o projeto Ecologger.

Em resumo, este é um livro altamente recomendado para quem quer conhecer as novas tecnologias que estão sendo criadas pela Microsoft. O livro não é suficiente para ensinar a fundo os assuntos, cada um deles é assunto de diversos livros, mas muito bom para dar uma idéia do que são e como podem ser usados de maneira muito criativa para criar algo para as horas vagas…

 

Considero o VSTO como um dos “segredos” mais bem guardados pela Microsoft. Com esta ferramenta você pode personalizar o Office, trazendo sua aplicação para dento do Word, Excel ou Outlook usando as mesmas linguagens que você usa no dia-a-dia: C#, VB.net ou outra linguagem .net. Tudo isso, de uma maneira muito fácil. Se você se interessou e quer saber mais sobre isso, dê uma olhada em meu artigo no MSDN Brasil: http://msdn.microsoft.com/pt-br/library/dd347794.aspx