Você sabe o que é um Mashup?

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?

 

Posted Tue, Jun 23 2009 10:47 by bsonnino | with no comments

Campeão ImagineCup Brasil 2009

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

 

Posted Sat, Apr 25 2009 11:09 by bsonnino | with no comments

Filed under:

Element Binding e 3D em Silverlight 3

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

Posted Sun, Mar 22 2009 16:24 by bsonnino | 4 comment(s)

Filed under:

Criando uma aplicação LOB com Silverlight e WCF

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.

Posted Sat, Mar 21 2009 9:21 by bsonnino | with no comments

Acessando dados com Silverlight

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.

 

Posted Wed, Mar 11 2009 5:16 by bsonnino | with no comments

Filed under: ,

Interoperabilidade entre WPF e Windows Forms

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.

 

Posted Sat, Feb 14 2009 3:30 by bsonnino | with no comments

Filed under: ,

Coding4Fun

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...

 

Posted Tue, Jan 27 2009 19:39 by bsonnino | with no comments

Filed under:

10K Smart Coding Challenge

Você quer ir ao Mix 2009, em Las Vegas, mas o dinheiro está curto? Bem, aqui está sua oportunidade de ir ao Mix, com entrada, hotel e mais $1500 no bolso: o concurso 10K Smart Coding Challenge: crie um programa Silverlight ou WPF com até 10K de código fonte e concorra a uma viagem ao Mix. O regulamento e os dados estão em http://2009.visitmix.com/MIXtify/TenKGallery.aspx

Boa Sorte!

Posted Thu, Dec 18 2008 15:43 by bsonnino | 10 comment(s)

Filed under: ,

Personalizando o Office com VSTO 3.0

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

 

Posted Thu, Dec 18 2008 15:35 by bsonnino | with no comments

Filed under:

Usando a DataGrid WPF

Uma das críticas ao WPF é que não havia uma DataGrid para mostrar os dados em formato de tabela. Bem, isso é passado. A Microsoft lançou a Datagrid no WPF toolkit, que pode ser baixado em http://www.codeplex.com/wpf. Ela é bastante poderosa e versátil. Se você não sabe como usá-la, pode checar meu artigo no portal Linha de Código em http://www.linhadecodigo.com.br/Artigo.aspx?id=2163

Vale a pena dar uma conferida!

Posted Fri, Dec 12 2008 17:30 by bsonnino | 4 comment(s)

Filed under:

Criação de aplicativos LOB (Line-of-Business) com WPF

Se você achava que é muito difícil desenvolver aplicações LOB com WPF, precisa ver este meu novo artigo que foi publicado no site Linha de Código (http://www.linhadecodigo.com.br/Artigo.aspx?id=2138). Lá eu mostro como desenvolver uma aplicação LOB com WPF, usando LINQ to SQL.

No artigo eu mostro como fazer a inclusão, alteração e exclusão usando LINQ to SQL. Lá também mostro como criar um UserControl que é instanciado em tempo de execução e permite editar os registros detalhes tabelas relacionadas como mestre-detalhe. Vale a pena dar uma olhada e ver que não é tão complicado desenvolver aplicações LOB com WPF

 

Posted Fri, Nov 21 2008 17:42 by bsonnino | 6 comment(s)

Filed under:

Gravação de meu Webcast no MSDN

Se você não teve oportunidade de assistir meu webcast Aplicações = Desenvolvedores + Designers do dia 30/10, agora pode baixá-lo no MediaCenter do MSDN. O link é https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&EventID=1032392195&CountryCode=BR

Vale a pena assistir, ele mostra como a interação entre designers e desenvolvedores pode transformar uma aplicação simples como um catálogo de móveis numa bonita aplicação. Este webcast foi baseado numa apresentação dada no Mix 2008, pelo Kirupa Chinnathambi e pelo Celso Gomes, dois feras do time de Expression Blend.

O código fonte da aplicação está anexo a este post

Posted Sat, Nov 8 2008 5:37 by bsonnino | with no comments

Filed under:

Fotos do encontro com Steve Ballmer

Conforme falei num post anterior, estou postando algumas fotos do nosso encontro com o Steve Balmer, antes da abertura do TechEd 2008

Steve Ballmer respondendo às nossas perguntas

Cada pergunta era ouvida com atenção e respondida com cuidado

O Steve Ballmer cumprimentou todos um a um. Aí ele está me cumprimentando

 Foto ao final do encotro, com todos os participantes

Sem dúvida, foi um ótimo encontro. Valeu!!!!

 

Posted Mon, Nov 3 2008 16:39 by bsonnino | with no comments

Filed under: ,

Novos controles para WPF

Uma das críticas mais ouvidas sobre o WPF é a falta de alguns controles, como a Grid, o DateTimePicker, entre outros. Pouco a pouco, a Microsoft está lançando estes controles. Você pode baixar o código fonte da Grid e do DateTimePicker no CodePlex em http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=15598

Se quiser, pode baixar também o Ribbon para WPF. Para isso, você deve it para o site de licenciamento do Office, aceitar a licença do Office UI e baixar o código fonte. Os passos para isso estão em http://www.codeplex.com/wpf/Wiki/View.aspx?title=WPF%20Ribbon%20Preview

Mas isto não é tudo, porque aí vem mais. Dêem uma olhada em http://www.codeplex.com/wpf/Wiki/View.aspx?title=Futures%20Roadmap&referringTitle=Home

 

Posted Fri, Oct 31 2008 13:05 by bsonnino | with no comments

Filed under:

Novos controles para Silverlight

O Silverlight vem ganhando grande atenção e a caixa de ferramentas disponível ao desenvolvedor também cresceu: se você quer novos controles, como treeview, gráficos ou mesmo uma caixa de edição com autocomplete, você pode baixar o Silverlight toolkt em http://www.codeplex.com/Silverlight

Alem dos vários controles disponíveis, o toolkit vem com diversos temas que podem ser usados em suas aplicações. Vale a pena dar uma olhada!

Posted Fri, Oct 31 2008 11:37 by bsonnino | with no comments

Filed under:

Webcast sobre criação de aplicações WPF com Visual Studio e Blend

Na quinta feira, dia 30/10/2008, às 12:00, estarei apresentando um novo webcast no MSDN, sobre desenvolvimento de aplicações WPF com o Visual Studio e o Blend. Este webcast vai mostrar a interação entre designers e desenvolvedores, com a finalidade de criar uma bonita aplicação em WPF. Vale apena assistir. O link para inscrição é https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032392194&EventCategory=4&culture=pt-BR&CountryCode=BR

 

Posted Mon, Oct 27 2008 16:25 by bsonnino | 2 comment(s)

Filed under:

TechEd Brasil 2008 - Dia 3

Finalmente, chegamos ao último dia do Teched 2008. Neste dia, assisti às palestras do Renato Haddad (Cinco Inovações em Smart Clients no Microsoft .NET Framework 3.5), uma palestra onde foram mostradas novas tecnologias introduzidas no Framework 3.5 e que podem ter passado despercebidas com a introdução do Linq. Fiquei muito bem impressionado com o ADO.NET Sync Services, onde você pode sincronizar uma base de dados Sql Server CE com com o banco de dados com poucas linhas de código. Aliás, esta palestra serviu para mostrar alguns dos segredos mais bem guardados da Microsoft - tecnologias excelentes, mas que não tem muita divulgação:

  • ADO.NET Sync Services - para sincronização entre bases de dados móveis e a principal. Aliás, você sabia que pode usar o SqlServer CE para guardar dados de aplicações Desktop? Basta distribuir um arquivo e uma dll e você passa a ter uma excelente opção de persistência de dados, inclusive com a possibilidade de usar LINQ
  • Serviços de Clientes de Aplicações - permite usar a autenticação Web em aplicações WinForms, excelente para quem tem um ambiente de aplicações heterogêneo e quer manter um sistema de autenticação único
  • VSTO v3.0 - Você sabia que pode integrar suas aplicações com as aplicações Office? Seus usuários podem usar suas bases de dados dentro do Word, Excel, Outlook e o modo de programação é o mesmo de uma aplicação WinForms
  • Windows Forms e WPF Interop - Permite colocar controles WPF em aplicações WinForms e vice-versa
  • Managed AddIn Framework - Framework para criar Add-ins desacoplados, com isolamento da aplicação, descoberta dinâmica, carregamento e descarregamento dinâmico

Em seguida, assisti à palestra do Marcelo Azuma, sobre o WPF Composite Framework, um assunto que me interessa diretamente, pois este é um framework para criação de aplicações modulares com WPF. Mais detalhes em http://www.codeplex.com/CompositeWPF.

Agora, meus comentários sobre o TechEd: sem dúvida, esta é uma excelente oportunidade para saber o que está acontecendo na tecnologia Microsoft - as palestras tem um excelente nível técnico, mostram as tecnologias mais recentes e o que ainda está por vir. As palestras deram novas idéias para meus velhos problemas e tenho novas abordagens para poder testar - minha lista do "a fazer" cresceu consideravelmente :-).

Além disso, é uma excelente oportunidade para rever os amigos (em muitos casos, vejo-os apenas nestas oportunidades) e fazer novos. Para quem tem algum problema, é uma excelente oportunidade para conversar com os melhores especialistas da área e encontrar uma solução. Neste ponto, acredito que o Ask the Experts seja o ponto alto da conferência. É uma pena que os participantes não tenham visto da mesma maneira e não aproveitaram esta oportunidade. Com certeza, só isso vale o ingresso no TechEd.

Como nem tudo é perfeito, vão aí algumas sugestões de logística para os organizadores da próxima conferência:

  • mais e maiores banheiros (quem viu a fila para o banheiro no intervalo sabe o que estou dizendo :-))
  • a idéia da "Lunch session" foi boa, mas mal implementada. Acredito que, na hora do almoço, haja dois tipos de atendentes: aquele que quer almoçar tranquilamente e conversar com os amigos e o que está faminto de conhecimento (sem trocadilhos :-)). Para o primeiro, mesas para almoçar tranquilamente. Para o segundo, "lunch box" com sanduíche e sobremesa, que serão levados para a sala. Um mix das duas abordagens, embora mais difícil de aplicar, seria a ideal
  • Posters na entrada das salas dizendo as palestras do dia naquela sala: a única indicação das palestras era o roteiro distribuído no kit, visível apenas com microscópios eletrônicos)

Aos atendentes, recomendo apenas usar o Ask the Experts. Todos os experts que estavam lá estavam mais que dispostos a responder perguntas, faltou apenas quem as perguntasse. Após 1 hora, havia na sala apenas camisas verdes (os experts estavam vestidos com camisas verdes, não há nenhuma conotação política aqui :-)).

Em resumo, é isso aí. Acho que o evento valeu a pena e espero estar presente no próximo, para reencontrar os amigos e ver o que a Microsoft nos reserva para o futuro. Até lá!

 

 

Posted Fri, Oct 17 2008 5:38 by bsonnino | with no comments

Filed under:

TechEd Brasil 2008 - Dia 2

O segundo diado TechEd foi um dia mais técnico, onde a agitação do keynote já não se fez sentir e os temas foram bastante técnicos. Paralelo a ele, o lançamento do RTM (release to manufacturing - um termo que vem do tempo em que os discos da versão final deveriam ser manufaturados, o que não acontece num produto que é baixado online) do Silverlight 2.0 foi bastante comentado. Veja mais detalhes no blog do Scott Guthrie e no site do Silverlight.

Quanto às palestras, pude assistir à palestra de criação de "N" camadas com Entity Framework e WCF, uma ótima introdução ao Entity Framework, combinada com a apresentação da arquitetura multi camadas usando o WCF (Windows Communication Foudation). Combinando-se estas tecnologias, pode-se fazer aplicações onde o acomplamento entre as camadas é feito de maneira a facilitar a manutenção e a eventual substituição de uma delas (quando, por exemplo, queremos mudar a interface de usuário, trocando a interface de Windows Forms para Web). Veja mais informações aqui.

Em seguida, assisti à palestra do Rogério Carvalho, sobre Linq to SQL. Esta foi uma palestra com conteúdo um pouco mais avançado, onde ele mostrou como é feito o mapeamento entre as classes e o banco de dados, mapeando duas tabelas "no braço", manualmente, sem usar o designer. Depois, ele mostrou alguns conceitos, como transações e concorrência. Sem dúvida, uma palestra indispensável para quem quer conhecer um pouco mais sobre o Linq to Sql e, entendendo o que está por trás, fazer melhor uso da tecnologia.

Finalmente, assisti à palestra do Renato Haddad sobre dicas e truques do Visual Studio. Nunca é demais assistir a estas palestras: o Visual Studio é tão extenso que você sempre encontra uma dica boa que permite aumentar sua produtividade.

A última palestra do dia foi a minha, sobre Criação de aplicações de visualização com WPF. Nela mostrei como usar data binding com classes e coleções (inclusive fazendo pesquisa de arquivos com Linq e colocando a pesquisa do Windows Vista - Desktop Search - nas suas aplicações), mostrando como customizar as listas para a apresentação dos dados. Aguarde mais detalhes em posts futuros.

Após a sessão fui para o Ask the Experts, onde os experts nos diversos assuntos estavam lá para responder às perguntas e dúvidas. Acho esta uma excelente iniciativa, onde pode-se perguntar duvidas sobre uma variedade de problemas e ter elas respondidas pelos especialistas no assunto. Muitas vezes, o ingresso do Teched pode compensar apenas por essa sessão.

Vamos agora para o terceiro e último dia do TechEd, onde teremos uma série de apresentações sobre aplicações ricas. Até lá.   

Posted Thu, Oct 16 2008 3:16 by bsonnino | with no comments

Filed under:

TechEd Brasil 2008 - Dia 1
Hoje tivemos o primeiro dia do TechEd Brasil. Logo cedo, a fila do credenciamento estava cheia, estão sendo esperadas mais de duas mil pessoas no Transamerica Expo, local do evento. São 7 salas simultâneas, com 17 sessões e um keynote nos três dias de evento.
Começamos com o Keynote do CEO da Microsoft, Steve Ballmer (veja um resumo do encontro que tivemos um pouco antes aqui). Ele começa sua apresentação dizendo: "se você pensa que estamos indo rápido demais, isto é só o começo: a velocidade vai aumentar" e "queremos dar mais valor de IT a um custo baixo".
Em seguida, ele falou das tendências da indústria:
  • Virtualização
  • Interoperabilidade e segurança
  • Software + Serviços
  • Experiência rica do usuário 
 
Na parte de Virtualização, ele falou de virtualização de Windows e Linux, Gerenciamento de máquinas ESX e custo a 1/3 do VMWare. Em seguida,o Danilo Bordini fez uma apresentação do sistema Hyper-V, presente nos servidores Windows 2008 - realmente impressionante, gerenciando múltiplas máquinas físicas hosteando diversos servidores virtuais.
 
Em Interoperabilidade, falou sobre conexões abertas, portabilidade de dados, suporte a padrões e acoplamento aberto.
 
Em Software+serviços, falou que o software está evoluindo e a tendência é software+serviços, onde teremos software com interface rica falando com serviços. Nanuvem teremos os recursos computacionais, de armazenamento, gerenciamento enquanto que na parte de desenvolvimento teremos win32 mais .net, falando com Silverlight e WPF e Javascript. O Deployment das aplicações será feita no sistema "Click to run" (você já ouviu falar de ClickOnce?), e a experiência do usuário será valorizada, em PCs, Telefones, Múltiplas máquinas e UI natural. Na Web, a Web 2.0 com redes sociais e colaboração.
 
Quanto à experiência rica do usuário, a integração Designer com o desenvolvedor será fundamental e a experiência será sentida de maneira semelhante no Browser e no Windows, privilegiando as interfaces de design de user Experience, modelos de programação comum entre as interfaces e ferramentas de desenvolvimento integradas. Finalmente, mostraram a aplicação de aluguel e compra de filmes online da livraria Saraiva, em WPF. Um software muito bonito e interessante, usando WPFWCF integrados de maneira muito legal. O pessoal da Saraiva está de  parabéns.
 
Na área de encontro, pude encontrar diversos amigos que não via há muito tempo, o salão estava realmente cheio. Entre um bate papo e outro pude assistir à palestra do Rafael Godinho, sobre novidades do .net Framework 3.5 - aqui vale a pena ressaltar o Entity Framework, o Ado.Net data Services ("Astoria"), realmente muito bom, e o Asp.Net MVC - este ainda está em beta, mas promete. Outra palestra que assisti foi a do Alfred Myers.sobre novidades do C# 3.0. Aqui vale a pena dar uma olhada nestas novidades, pois facilitam o desenvolvimento com o VS 2008.
 
Hoje vou dar minha palestra de WPF, se você não conhece, venha ver à 17:30. As palestras estão com um nível bom e, se você não veio, fique ligado para não perder o evento do ano que vem!
 

Posted Wed, Oct 15 2008 6:23 by bsonnino | with no comments

Filed under:

Encontro com Steve Ballmer

Hoje tive o prazer de ter sido convidado para um encontro com Steve Ballmer (as fotos vem depois) e foi muito interessante.

Assim que ele chegou, muito simpático, fez questão de cumprimentar todos que estavam presentes no evento, um a um. Esperavamos uma mensagem dele, mas ele falou que a mensagem estaria no Keynote que iria fazer em seguida e disparou: façam suas perguntas. O grupo tinha preparado perguntas sobre desenvolvimento e IT e então começamos:

- Quais as top 3 tecnologias de desenvolvimento?

  • Cloud computing - no PDC haverá anúncios sobre isso
  • Continuum Win32/.Net/JavaScript - Escalar tudo em um modelo de programação
  • Aplicações extensíveis - Office, Sharepoint, Live

- Há a possibilidade de criar uma célula de pesquisa e desenvolvimento da Microsoft no Brasil?

Sim, é possível, a Microsoft comprou uma empresa no Rio (Fast) e isso, eventualmente, poderia ser o início de um centro de pesquisas e desenvolvimento no Brasil

- Qual a visão da Microsoft sobre as ferramentas ALM?

A Microsoft está investindo muito em ferramentas ALM. Há muito trabalho e muito interesse, mas quero também manter versões de baixo custo de ferramentas sofisticadas para que o uso se espalhe.

- Qual a sua expectativa sobre o Windows 7?

Quero que ele tenha 3 coisas:

  • Compatível com o Vista
  • Disponível na hora certa
  • Release que cause satisfação, com as melhorias, com a performance e com a interface do usuário 

- Como você vê o PHP para Windows?

Quero que Windows seja a melhor plataforma para rodar PHP, mas não quero que PHP seja uma tecnologia Microsoft

Após agradecermos pelo encontro, saímos com ótima impressão: além de ser bastante simpático, não fugiu de nenhuma pergunta e mostrou conhecer bem os detalhes da organização. Para nós, foi realmente um prazer conversar com ele, esperamos que volte breve ao Brasil!

  

Posted Tue, Oct 14 2008 19:17 by bsonnino | 1 comment(s)

Filed under: ,

More Posts Next page »