Pegadinha do Malandro....

Suponha que você precisa criar uma instância da classe “Cesta” definida a seguir:

    Public Class Cesta
        Private _values As New List(Of Object)()

        Public Sub New(ByVal valor As Object)
            _values.Add(valor)
        End Sub

        Public Sub New(ByVal valores As Object())
            _values.AddRange(valores)
        End Sub

        Public ReadOnly Property Count() As Integer
            Get
                Return _values.Count
            End Get
        End Property
    End Class

Sua cesta deve ser inicializada com um coleção de objetos por isso vamos usar o construtor que recebe um array usando o seguinte código.

    Dim valores(10) As Integer
    Dim c As New Cesta(valores)

Se eu mandar imprimir o numero de itens no console usando:

         Console.WriteLine(c.Count.ToString)

Qual valor vai aparecer?
  1. 0
  2. 1
  3. 10
  4. Vai lançar uma exceção
  5. Eu manjo o compilador e orientação a objeto, sei o que vai acontecer e não vou te contar!

BITS e o proxy da “firma”.

Se você assim como eu usa o Zune e precisa atualizar ou baixar aplicações do marketplace ou ainda usa algum aplicativo que use o BITS (Background Intelligent Transfer Service) mas esta atrás de um proxy (Normalmente no trabalho se a sua empresa for malvada, controlodora ou só amadora mesmo) com certeza ja pasou por problemas certo?

Isso acontece porque o BITS por padrão não envia seus dados de autenticação para o proxy e portanto não consegue comunicação com o mundão de deus la fora. Para resolver isso basta alterar a seguinte chave no registro:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\BITS\UseLMCompat

De acordo com a documentação do msdn os valores possiveis são:

0 – BITS vai mandar as suas credenciais de modo implicito SEMPRE

1 - BITS vai mandar as suas credenciais de modo implicito se o valor da chave LMCompatibilityLevel for maior que 2

2 – BITS só vai mandar as suas credenciais se a aplicação chamar o método SetCredentials

Como nós queremos nos autenticar basta usar o valor 0. Reiniciar o serviço do BITS e a sua aplicação e voilà! Você esta conectado.

See ya.

Facilitando a vida ao abrir projetos

 

Eu sou um programador que gosta de ter as coisas otimizadas.

No trabalho tem duas unidades uma delas especifica para guardar as pastas de projetos e toda vez que tenho que abrir um no Visual Studio tenho que navegar para a unidade, depois a pasta, e mais uma pasta etc…

Que tal melhorar esse processo colocando um link na janela de abrir projetos do Visual Studio? A minha ficou assim

http://marcelodeaguiar.blogspot.com/

Para isso basta alterar a chave de registro abaixo:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\{VERSÂO DO VISUAL STUDIO}\Open Find\Places\UserDefinedPlaces\

Adicione uma nova chave com o nome "Place0”, depois adicione um novo valor como na imagem abaixo:

image 

Ainda é possível adicionar tantos links quanto necessário, basta adicionar novas chaves com os nomes “Place1”, “Place2”, etc…

O novo estagiário

Sua emprese precisa contratar um novo programador, ela opta por buscar o profissional em um banco de estudantes e encontra 3 candidatos:

  • O Inteligente – Tem um histórico escolar impecável e consegue resolver qualquer equação matemática em 2 minutos;
  • O Espertinho – Sempre resolve os problemas, independente da solução aplicada afinal de contas “O fim justifica os meios”;
  • O Curioso – Nem muito inteligente nem muito espertinho, mas basta surgir alguma coisa que ele não entenda que ele esta lá, tentando de todas as maneiras entender como aquilo funciona.

E ai! qual dos três você contrataria? O que um desenvolvedor de verdade precisa ser?

Criando um novo projeto no VS2010

A nova tela apresentada ao criarmos um novo projeto melhorou e muito desde a ultima versão do Visual Studio.

image

Os itens estão organizados em Recent Templates: os últimos templates que você usou,  Installed Templates: Lista os templates instalados na sua maquina separados em sub-categorias como Windows, Web, Silverlight, etc… e Online Templates: nesta ultima é possível baixar templates criados pela comunidade, mesmo o VS ainda em faze beta já é possível encontrar um grande numero de templates.

A interface agora oferece um caixa de pesquisa  no topo da janela, ao digitarmos os itens são automaticamente filtrados:

image 

É possível ainda selecionar o Framework em que o projeto será construído, esta opção porem parece não estar disponível nas versões Express.

Um template interessante a ser notado é o novo Cloud Services que possibilita usar os serviços do Windows Azure nos seus projetos.

Principais mudanças no .Net Framework 4 Beta 2 - 1

Melhorias no Diagnostico e performance.

Na nova versão do framework já é possível monitorar o uso de memória e processamento por Application Domain, isso não era possível nas versões anteriores já que ferramentas como o Process Explorer ou o Gerenciador de Tarefas eram precisos apenas a nível de processo. Você pode encontrar mais informações de como ativar esse monitoramento aqui.

O Novo Garbage Collector

O Framework 4 Beta 2 vem com uma nova implementação do Garbage Collector que funciona em background aumentando assim a performance, mais informações aqui.

Adicionar referência – agora sim

Umas das melhoria discretas do Visual Studio 2010 Beta 2 esta na opção “Add Reference”, a tela que antes nos fazer literalmente parar o trabalho foi aprimorada.

Ao abrir a tela o Visual Studio tem que carregar todas as DLL´s do GAC assim como os componentes COM instalados na maquina.

Até o Visual Studio 2008 isso era feito de modo síncrono, ou seja, a interface toda ficava “travada” até que os componentes carregassem. Na nova versão os componentes são carregados de modo assíncrono permitindo ao usuário cancelar e não fazendo com que o Visual Studio pare. Ponto para o VS2010.

image

Suporte a DataBinding no editor WPF

No Visual Studio 2010 Beta 2, houve uma grande evolução no editor visual tanto do WPF quanto do silverlight. Uma das mudanças mais legais em relação ao VS2008 é o suporte ao DataBind direto do editor. Para isso selecione um objeto no Designer, no grid de propriedades selecione a propriedade a qual deseja fazer o Bind, clique no ícone “Propriedades Avançadas” e no menu de contexto selecione “Apply Data Binding…”

image

Será apresentada uma pequena janela onde podemos configurar o Bind.

Aba Source

Na aba Source é possível escolher a origem da informação, pode ser um DataContext, um elemento, um elemento relativo ao atual, um StaticResource.

Aba Path

Na aba Path é possível escolher a propriedade (relativa ao objeto selecionado em Source) que contém o valor.

image Na aba Converter podemos selecionar uma das classes que implementam IValueConverter e que será aplicado ao valor.

imagePor fim na aba Options é possível selecionar as opções que serão aplicadas ao Bind como Formato da string, Mode (OneWay, TwoWay, etc.), etc…

Isso somado ao fato de agora termos Intellisense no editor XAML garante uma boa experiência para quem costuma usar o editor do Visual Studio ao invés do Expression Blend na hora de editar a interface das aplicações WPF.

Fixando variáveis no Debug do VS2010

Mais uma novidade do Visual Studio 2010. Agora podemos “fixar” variáveis durante o debug, eliminando o velho conhecido “Add Watch”. Como funciona?

Ao debugar uma aplicação e posicionar o mouse sobre uma variável agora além do valor dela é apresentada um pequeno alfinete como mostra a figura:image7

Clicando nas setas para baixo é possível ainda adicionar um comentário a variável que será exibida durando o debug.

image14

Agora sempre que você executar o debug essa “nota” ira aparecer eliminando a necessidade de abrirmos o painel “Watches”. Mas legal ainda, quando paramos o debug o VS guarda o ultima valor da variável, basta posicionar o mouse sobre o alfinete azul a esquerda da linha e será exibido um pequeno painel com o valor:

image18

É uma pequena mudança mas que ajuda muito…

Silvio Santos e o desenvolvimento de software.

O ciclo de desenvolvimento de software começa com o cliente que passa a sua necessidade para o analista que por sua vez especifica como software deve ser desenhando e passa para os programadores que enfim colocam a maquina pra fincionar. Agora você se pergunta o que tem isso a ver co o Silvio Santos? Simples, imagine que o Silvio Santos é o Cliente, o homen participando do programa é o Analista e as moças são os programadores. Agora assista o video abaixo e veja como o processo todo funciona.

Vai dizer que não é assim que funciona…

jLinq, LINQ para Javascript

jLinq é uma biblioteca javascript que permite escrever queries para arrays de um jeito muito parecido com o LINQ do .Net Framework.

 

   1:  var results = jLinq.from(data.users)


   2:      .startsWith("first", "a")


   3:      .orEndsWith("y")


   4:      .orderBy("admin", "age")


   5:      .select();






Mais detalhes você encontra na pagina do projeto





Marcas Technorati: ,,,

Terapia do choque…

Faz sentido…

Claro 3G, não caia nessa armadilha

É amigos o Brasil é realmente o pais das “porcarias”, da velocidade da conexão com a internet ao preço exorbitante cobrado por ela.

Recentemente contratei o serviço de banda larga de 1 mega 3G da Claro que era supostamente ilimitado, mas não caiam nessa armadilha, pois você vai pagar R$ 119,00 para baixar no máximo 1gb, depois sua velocidade vai para 15Kbps, isso mesmo, a Claro aplica o sistema de cota.

Mas a pior parte disso tudo é que os vendedores da Claro não sabem (ou omitem) a informação de que a cota é aplicada, quando fui contratar o serviço perguntei a vendedora 3 vezes: Existe alguma limitação? É aplicado cota? Vou ser taxado por baixar excesso de dados? E a resposta foi sempre a mesma, um não dito com aquela cara deslavada.

Quando tentei cancelar o serviço, obviamente após passar 40 minutos no telefone, fui informado que teria que pagar a multa de rescisão de contrato de R$ 400,00. Comedia total, ao explicar a situação para a telefonista ela disse: O senhor gravou a vendedora dizendo que não tinha limite? Não, então o senhor não pode provar e nesse caso vai ter que pagar a multa. Ok, eu pensei, mas e a informação no site de que não há limite de volume de tráfego? Bom, ai veio a desculpa de sempre, desculpe senhor mas não tenho conhecimento disso. Pois Bem, ai esta para seu conhecimento cara telefonista desinformada:

image

Você pode ver essa página aqui

Na minha interpretação “volume de tráfego” quer dizer dados, logo, dados são bytes transferidos, se não a limite de bytes transferidos então não existe cota, certo? Ou seja, estão anunciando uma coisa e vendendo outra.

No final das contas parece que o brasileiro continua sendo tratado como um palhaço então cuidado, NÃO CAIA NA ARMADILHA DA INTERNET 3G DA CLARO

Obs: Se tiver algum advogado por ai que queira entrar com uma ação contra esta porcaria de operadora pode contar com a minha ajuda.

Debugger Visualizers

Quando estamos “debugando” uma aplicação e precisamos visualizar os valores de uma variável de um tipo especifico como XML’s, HTML ou DataSets por exemplo, o Visual Studio nos oferece os Debugger Visualizers.

Ao parar em um break-point posicione o mouse sobre a variável e note a pequena lupa ao lado do nome.

image

Na versão do Visual Studio 2008 existem Visualizers para os tipos que citei antes: Texto, Html, Xml e Datasets. Já no Visual Studio 2010 existe um novo tipo especifico para aplicações WPF, é o WPF Tree Visualizer que apresenta informações sobre todos os objetos na hierarquia do WPF juntamente com suas propriedades e um preview da sua renderização.

image

Ferramenta essencial para quem quer trabalhar com WPF, ajuda inestimável ao debuggar bindings.

É possível ainda construir seus próprios Visualizers, mais informações sobre como cria-los podem ser encontrados aqui

See ya.

Com quantas linhas…

Ontem fui a uma palestra sobre .Net Compact Framework e Windows Mobile, recebi o convite de ultima hora então nem tive muito tempo para pensar.

Chegando lá já estava começando, me apressei em assinar a lista de presença e encontrar um lugar para sentar. Alguns minutos e o dito Microsoft MVP whatever me solta as famosas palavras:

- Quantas linhas vocês acham que eu preciso para <coloque sua funcionalidade aqui>?

Pois é, ainda hoje esses ditos conhecedores das tecnologias apelam para esse argumento de “vendedor de livro de porta em porta” para tentar impressionar o auditório. Daquele ponto em diante eu já sabia como seria a palestra: mostrar as facilidades de arrastar e soltar, vejam quantas linhas preciso para isso, bastar clicar aqui, etc. Coisas que só funcionam (quando funcionam) em demonstrações mas que jamais qualquer pessoa em sã consciência usaria em uma aplicação comercial. Realmente um desperdício um MVP dando uma palestra tão boba como essa, acho que eu teria aprendido o que ele mostrou em 5 minutos de busca no Google em qualquer tutorial de um garoto de 12 anos.

Então senhores MVP’s, por favor, quando forem mostrar alguma tecnologia ou produto novo, não caiam nessa armadilha e acreditem no potencial do seu auditório ok.

No fim das contas aguentei até o final e acabei ganhando o livro Linq – Guia de Bolso.

VS2010 - Debugando e criando lembretes

No Visual Studio 2010 é possível adicionar notas e lembretes as suas variáveis enquanto “debuga” um código como na imagem abaixo:

image

Legal, agora não da mais para esquecer de validar alguma coisa no código :D

Serializando um ícone

Madrugada de sexta-feira, 04:35am.

Posso ouvir os despertadores tocando nos apartamentos vizinhos e as pessoas saindo para trabalhar e eu me pergunto: O que diabos eu estou fazendo acordado?!?

A Resposta é simples, como todo bom nerd, quando colocamos alguma coisa na cabeça não descansamos até que ela esteja funcionando (a coisa, não a cabeça).
Pois bem a mais ou menos a umas 5 horas atrás eu resolvi que uma maldita classe minha teria propriedade do tipo System.Drawing.Icon. Isso mesmo, uma simples figurinha, inofensiva aos olhos dos descuidados mas alguém ai já tentou serializar esse ícone para um XML? Isso é mais difícil do que pensei, e antes que alguém me chame de burro deixe eu explicar a situação.

Eu não queria apenas serializar o ícone, queria faze-lo sem perda de qualidade e mais importante do que isso, sem perder a transparência da figura... e meus amigos, eu consegui Há.

Funciona da seguinte maneira, imagine a seguinte classe

   1:  [Serializable()]


   2:  class Person


   3:  {


   4:     private string _name;


   5:     private Icon _icon;


   6:   


   7:     public string Nome { get; set; }


   8:     public Icon PersonIcon { get; set; }


   9:  }




1. Marque a sua propriedade PersonIcon com o atributo [XmlIgnoreAttribute()] dessa forma ela não será serializada;



2. Crie uma nova propriedade chamada IconByteArray, esta sim será serializada;



    public byte[] IconByteArray { get; set; }



Implementando agora o Get da propriedade:




   1:  if (!object.ReferenceEquals(this._icon, null))


   2:  {


   3:      //Converto pra Bitmap primeiro...


   4:      TypeConverter converter = TypeDescriptor.GetConverter(typeof(Icon));


   5:      if (converter.CanConvertTo(typeof(Bitmap)))


   6:      {


   7:          Bitmap b = (Bitmap)converter.ConvertTo(this._icon, typeof(Bitmap));


   8:   


   9:          // Criamos um MemoryStram para guardar os bytes


  10:          using (MemoryStream ms = new MemoryStream())


  11:          {


  12:   


  13:              // Salvando os bytes no stream e IMPORTANTE


  14:              // marcando o formato como PNG assim garantimos a transparencia do icone


  15:              b.Save(ms, ImageFormat.Png);


  16:              return ms.ToArray();


  17:          }


  18:      }


  19:      else


  20:          return new byte[] { };


  21:  }


  22:  else


  23:      return new byte[]{};



E por fim, implementamos o Set da propriedade IconByteArray:




   1:  if (!object.ReferenceEquals(value, null))


   2:  {


   3:      // Lendo os bytes do XML e criando o Bitmap denovo.


   4:      Bitmap b = (Bitmap)Image.FromStream(


   5:          new MemoryStream(value),true,true);


   6:   


   7:      // Pegamos o ponteiro (handle) para o Bitmap que acabamos de criar


   8:      IntPtr HIcon = b.GetHicon();


   9:   


  10:      // Com base no handle criamos nosso icone e clonamos ele


  11:      // IMPORTANTE - Clonamos o icone para não ficarmos presos ao handle e para


  12:      //podermos libera-lo sem problemas pro SO


  13:      this._icon = (Icon)Icon.FromHandle(HIcon).Clone();


  14:   


  15:      // Liberando o Handle para o sistema operacioal...


  16:      SysImageList.DestroyIcon(HIcon);


  17:  }




 


Lembrando que para poder usar a função DestryIcon(IntPtr) precisamos importar uma API do Windows, para isso basta declarar no seu código:




   1:  [DllImport("user32.dll")]


   2:  public static extern int DestroyIcon(IntPtr hIcon); 




E agora eu posso ir dormir sussegado ;)