20 março, 2009

Download dos Videos das Palestras do MIX09

Já dá para começar a baixar ou assistir online os vídeos das palestras do MIX09. Nem todas as palestras já estão disponíveis para download (pode demorar até 24 horas para cada palestra ser disponibilizada).

Eu já comecei a baixar. O tamanho dos arquivos varia bastante, de acordo com o tempo de duração de cada palestra, desde 67 Mb até 700 Mb. Até agora eu já baixei 15 (mais de 3 Gb de vídeos), mas está tudo tão interessante que eu estou achando que vou baixar o evento inteiro.

18 março, 2009

Resumo do Keynote do MIX09

Tim Sneath está blogando ao vivo do MIX e já é possível ver nesse blog um resumo do Keynote de abertura do evento. Muitas novidades sobre ASP.NET MVC, Blend 3, Silverlight 3, Expression Web e muitas outras coisas. Esse ano promete.

Também é possível acompanhar o evento pelo Twitter, usando a tag #MIX09. Logo após o evento vai começar uma sessão de perguntas e respostas com Scott Guthrie pelo Twitter, usando a tag #ASKTHEGU. Se tiver alguma dúvida, essa é sua chance.

Liberada a versão RTM do ASP.NET MVC

Saiu hoje a versão RTM do ASP.NET MVC, antes do início do MIX09.

Para facilitar, você pode ir direto para a página de download e baixar.

Esta nova versão não traz nada de novo com relação ao RC2, exceto uma atualização do jQuery para a última versão (1.3.2) e a resolução de um bug na integração com o Silverlight.

Para aqueles que estavam apenas esperando virar RTM para poder começar a usar pra valer, chegou a hora. Divirtam-se!

Meus agradecimentos a Simone Chiaretta, que foi quem primeiro divulgou esta notícia hoje.

MIX09 ao Vivo de Las Vegas

Infelizmente, como muitos de vocês, eu não irei no MIX este ano como havia publicado antes, devido a diversos fatores (financeiros e logisticos). Eu já havia pago minha inscrição e obtido o passaporte e visto, mas com a mudança nos planos eu fui “obrigado” a solicitar o reembolso da inscrição (que por sinal foi creditada no meu cartão de crédito no mesmo dia. impressionante) e vou ter que me contentar em assistir às palestras online.

Para quem quiser fazer como eu, basta acessar o site http://live.visitmix.com/ a partir de quarta-feira 18 de março (hoje) às 13:00h (horário de Brasília. serão 09:00h em Las Vegas).

Haverá uma tonelada de coisas interessantes este ano, como as primeiras demonstrações do Silverlight 3 com seus novos recursos de 3D, vídeo em H.264, e melhorias para desenvolvimento de aplicativos. Além disso será mostrado também o estágio atual de desenvolvimento do Blend 3 e seus novos recursos e melhorias. Haverá bastante coisa em outros assuntos também como IE8, Azure, Windows 7, etc.

Karen Corby publicou uma pequena lista com as principais palestras sobre Silverlight 3 deste ano, incluíndo uma dela sobre controles. Vale a pena conferir todas.

Todas as sessões serão gravadas e disponibilizadas no site após algumas horas. Liberem espaços em seus HDs pois vai sobrar material de qualidade para baixar. Há rumores de que haverá mais sessões sendo transmitidas ao vivo este ano, além dos Keynotes, mas nada foi confirmado nesse sentido.

17 março, 2009

Animando Inteiros em Silverlight

O Silverlight 2 tem suporte nativo para animar apenas alguns tipos de dados (Double, Point, Color e em casos especiais, Object) utilizando Storyboards. Normalmente isso não é uma limitação, já que na maioria dos casos os tipos de dados suportados são suficientes, mas há um caso específico de uma propriedade que é bastante usada e não pode ser animada pois seu tipo não é suportado pelas animações padrão. Essa propriedade é Canvas.ZIndex, que é o tipo Integer.

Quando é necessário animar o Canvas.ZIndex de um controle em Silverlight, normalmente somos obrigados a programar a animação em um loop ou utilizando um timer, mudando bastante o modelo de programação que normalmente utilizariamos.

Eu queria ser capaz de fazer algo assim:

   1: IntegerAnimation animacao = new IntegerAnimation(); 
   2: Image img = new Image(); 
   3: Storyboard.SetTarget(animacao, img); 
   4: animacao.SetValue(Storyboard.TargetPropertyProperty, 
   5:                   new PropertyPath("(Canvas.ZIndex)"));

Mas depois de muito pesquisar, eu descobri que não é possível criar sua própria animação customizada de Integer (ou qualquer outro tipo) herdando de Timeline (que é a classe pai das animações citadas acima). Isso ocorre pois a implementação dessas animações não foi feita no CLR mas sim no plug-in.


No final das contas eu acabei conseguindo fazer de uma forma um pouco menos elegante do que eu queria, mas, melhor do que as alternativas (loop ou timer). Segue abaixo o código fonte de uma classe que faz a ponte entre uma animação de double e uma propriedade integer que se deseje animar.




   1: public class IntegerAnimationBridge : DependencyObject { 
   2:  
   3:     public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", 
   4:         typeof(double), 
   5:         typeof(IntegerAnimationBridge), 
   6:         new PropertyMetadata(new PropertyChangedCallback(IntegerAnimationBridge.OnValuePropertyChanged))); 
   7:  

   8:     public double Value { 
   9:         get { 
  10:             return (double)base.GetValue(ValueProperty); 
  11:         } 
  12:         set { 
  13:             base.SetValue(ValueProperty, value); 
  14:         } 
  15:     } 
  16:  
  17:     private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { 
  18:         IntegerAnimationBridge o = d as IntegerAnimationBridge; 
  19:         if (o != null && o.Target != null && o.TargetProperty != null) { 
  20:             o.Target.SetValue(o.TargetProperty, (int)Math.Floor(o.Value)); 
  21:         } 
  22:     } 
  23:  
  24:     private void TargetInfoChanged() { 
  25:         if (this.target != null && this.targetProperty != null) { 
  26:             int a; 
  27:             double b; 
  28:             a = (int)this.Target.GetValue(this.TargetProperty); 
  29:             b = a; 
  30:             this.Value = b; 
  31:         } 
  32:     } 
  33:  
  34:     private DependencyProperty targetProperty = null; 
  35:     public DependencyProperty TargetProperty { 
  36:         get { return targetProperty; } 
  37:         set { 
  38:             this.targetProperty = value; 
  39:             TargetInfoChanged(); 
  40:         } 
  41:     } 
  42:  
  43:     private DependencyObject target = null; 
  44:     public DependencyObject Target { 
  45:         get { return target; } 
  46:         set { 
  47:             this.target = value; 
  48:             TargetInfoChanged(); 
  49:         } 
  50:     } 
  51:  
  52: }

Utilizando essa classe, a animação acima fica assim:




   1: DoubleAnimation animacao = new DoubleAnimation(); 
   2: IntegerAnimationBridge ponte = new IntegerAnimationBridge(); 
   3: ponte.Target = new Image(); 
   4: ponte.TargetProperty = Canvas.ZIndexProperty; 
   5: Storyboard.SetTarget(animacao, ponte); 
   6: animacao.SetValue(Storyboard.TargetPropertyProperty, 
   7:                   new PropertyPath("(ZIndexAnimationBridge.Value)")); 

O que acontece agora é que a animação de Double afeta a propriedade Value do objeto ponte, que por sua vez atualiza a propriedade Canvas.ZIndex do objeto do tipo Image que está em seu target.


Chega de fazer loop para animar propriedades Integer!