Pesquisar

30 de dez de 2007

Covariância e Contravariância em C#, Parte Um

Vou escrever sobre uma série de artigos do Eric Lippert sobre Covariância e Contravariância. Pretendo dividir os artigos em partes como foi feito no original, pra deixar as coisas mais organizadas e fazer mudanças que forem necessárias pra um melhor entendimento.

Nesta primeira parte vamos entender alguns conceitos sobre tipos.

Primeiramente temos que entender que para dois tipos X e Y, pelo menos uma das seguintes afirmações é verdadeira: 
X é maior do que Y.
X é menor do que Y.
X é igual a Y. 
X não tem nenhuma relação com Y.

Considere uma hierarquia constituída de: Animal, Mamífero, Reptil, Girafa, Tigre, Cobra e Tartaruga, com seus relacionamentos (Mamífero é uma subclasse de Animal, etc). Mamífero é maior do que Girafa, menor que Animal, e, evidentemente, é igual à Mamífero. Mas Mamífero não é nem maior, nem menor, nem igual a Reptil, é apenas diferente.

Imagine que você tenha uma variável, toda variável tem um tipo que lhe é associado. Em runtime você pode armazenar um objeto que é uma instância de um tipo igual ou menor, ou seja, uma variável do tipo Mamífero pode ter uma instância de Girafa armazenados nela, mas não uma Tartaruga.

Esta idéia de armazenamento de um objeto em um local tipado é um exemplo específico de um princípio mais geral chamado de "princípio da substituição". Isto é, em muitos contextos, podemos substituir uma instância de um tipo "menor" por um "maior".

Agora podemos falar de variância. Considere uma "operação", que manipula tipos. Se o resultado da operação aplicada a qualquer X e Y e sempre resulta em dois tipos X' e Y' com o mesmo relacionamento X e Y a operação é considerada covariante. Se a operação inverte a "grandeza" e a "pequeneza" sobre os seus resultados, mas mantém a igualdade e independência, a operação é considerada "contravariante".

Isso é totalmente imaginário e provavelmente não muito claro. Na próxima parte vamos analisar como o C# implementa variância.

Continua na parte dois: Covariância e Contravariância em C#, Parte Dois: Covariância de Array

26 de dez de 2007

MSDN Magazine - Janeiro 2008

Está disponível a edição de Janeiro da MSDN Magazine. Assuntos de capa:

• IIS 7.0: Aprimore seu aplicativo com o pipeline integrado do ASP.NET
Mike Volodarsky

• World Ready: Uma volta ao mundo com aplicativos ASP.NET AJAX
Guy Smith-Ferrier

• WCF Syndication: Programação HTTP com WCF e o .NET Framework 3.5
Justin Smith

• SQL Server: Encontrar dados ocultos para otimizar o desempenho do aplicativo
Ian Stirk

• Look It Up: Gerenciando entidades de segurança de diretório no .NET Framework 3.5
Joe Kaplan e Ethan Wilansky

Download - Download dos Códigos

14 de dez de 2007

Novos recursos no C#3.0

Vou falar sobre alguns novos recursos que vieram na nova versão do C#.

Começando pelas Propriedades Automáticas.
Antigamente quando a gente criava as propriedades das nossas classes, faziamos um código como esse:

    7 public class Carro

    8 {

    9     private string _modelo;

   10     private string _marca;

   11     private int _ano;

   12     private string _cor;

   13 

   14     public string Modelo

   15     {

   16         get { return _modelo; }

   17         set { _modelo = value; }

   18     }

   19 

   20     public string Marca

   21     {

   22         get { return _marca; }

   23         set { _marca = value; }

   24     }

   25 

   26     public int Ano

   27     {

   28         get { return _ano; }

   29         set { _ano = value; }

   30     }

   31 

   32     public string Cor

   33     {

   34         get { return _cor; }

   35         set { _cor = value; }

   36     }

   37 }

Como você pode notar, as propriedades não tem nenhum tratamento lógico, servindo como se fosse um acesso direto aos campos. Então porque não expor os campos diretamente? Basicamente porque no futuro você pode querer implementar algum tratamento, assim se você tiver usado propriedades, as classes que usam suas propriedades não precisarão ser recompiladas.

Sendo muito comum o uso de propriedades como as que vimos acima, no C#3.0 foi implementado as Propriedades Automáticas, que substituem esse código "padrão". O código anterior ficaria assim:

    7 public class Carro

    8 {

    9     public string Modelo { get; set; }

   10     public string Marca { get; set; }

   11     public int Ano { get; set; }

   12     public string Cor { get; set; }

   13 }

Quando o compilador encontrar um get/set vazio como estes, ele automáticamente criará os campos privados para a classe e implementará as propriedades públicas get/set.

Diferentemente de criar campos públicos, poderemos no futuro criar as implementações lógicas, sem ter que mudar nenhum componente externo que referencia nossa classe.

Inicializadores de Objetos

Usamos muitas propriedades quando estamos programando e é muito comum códigos como esse:


   13 Carro car = new Carro();

   14 car.Modelo = "Punto";

   15 car.Marca = "Fiat";

   16 car.Ano = 2007;

   17 car.Cor = "Azul";

Agora podemos escrever isso de outra forma, mais simples e concisa, usando os "object Initializers". Seu código pode ser escrito assim:


 Carro car = new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul" };


E o compilador irá se encarregar de instanciar a classe e setar as propriedades.

É interessante que podemos inicializar objetos aninhados, como mostrado:


Carro car = new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul", Fabric = new Fabricante { Nome = "Industria Metal", CNPJ = "12312" } };

Inicializadores de Coleção

Os inicializadores de objeto também facilitam a maneira como adicionamos itens a uma coleção. Se quisermos adicionar objetos Carro a uma List devemos escrever o seguinte código:



   14 List<Carro> Carros = new List<Carro>();

   15 

   16 Carros.Add(new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul" });

   17 Carros.Add(new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Vermelho" });

   18 Carros.Add(new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Preto" });


Economizando muitas linhas de código. E podemos diminuir ainda mais, usando Inicializadores de coleção, não precisamos escrever vários métodos Add:


   14 List<Carro> Carros = new List<Carro>{           

   15     new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Azul" },

   16     new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Vermelho" },

   17     new Carro { Modelo = "Punto", Marca = "Fiat", Ano = 2007, Cor = "Preto" }

   18 };

12 de dez de 2007

LINQ to Object

Agora com o Visual Studio 2008 estou fazendo alguns testes com os novos recursos do Framework 3.0 e 3.5.

Vou colocar aqui um exemplo de página que mostra os números pares, usando o LINQ e como fonte de dados um array.

Crie um novo WebSite, sem esquecer de usar o Framework 3.5:

Adicione um Button e um Label:

De dois cliques no Button para gerar o método do evento Click. Dentro do método insira o seguinte código(usei comentários para explicar o código): 

   21 //Nossa fonte de dados

   22 int[] numeros = { 1, 2, 3, 4, 5, 6 };

   23 

   24 //Query do Linq, depois da keyword in, especificamos a fonte de dados

   25 //Usamos where para filtrar os resultados

   26 //retornando só os que tiverem resto da divisão por 2 igual à 0

   27 //o select serve para o Linq saber o que deve retornar

   28 //daqueles que passarem pelo filtro

   29 //no caso o proprio numero, mas poderiamos

   30 //por exemplo retornar num.ToString()

   31 var query = from num in numeros

   32             where num % 2 == 0

   33             select num;

   34 

   35 //Passa cada numero retornado pro Label

   36 //Perceba que a variavel query é definida como IEnumerable<int>

   37 //var é um novo recurso do Framework 3.5

   38 //O tipo da variável é definido na compilação

   39 //A variavel continua sendo tipada

   40 foreach (var numero in query)

   41 {

   42     lblResultado.Text += numero.ToString() + "<br>";

   43 }

Agora tecle F5 para abrir o website e clique no Button, vai aparecer os números 2, 4 e 6:

10 de dez de 2007

Passei no Exame!!!!!!!

Depois de meses estudando, consegui passar! Aproveitei que tinha 30% de desconto e direito a segunda chance, mas passei de primeira, apesar de nem eu acreditar que conseguiria.

Agora começa a maratona de estudos pro 70-526 que é uma especialização para windows. 

Caso alguém queira saber o que usei como estudo foi só o livro Self-Paced Training Kit pro exame 70-536, que infelizmente é em inglês, mas  é bem fácil de entender,  exige apenas inglês técnico. Antes também li o C# How to Program, mas ele não foca em certificação, serve mais como base.

9 de dez de 2007

Usando CopySourceAsHtml no Visual Studio 2008

Esta ferramente é muito interessante pra quem costuma inserir trechos de códigos no blog ou site.

Infelizmente o instalador dele só está preparado para o VS2005, mas você pode usá-lo no VS2008.

Para isso faça o download desse arquivo zip.

Extraia os 3 arquivos na pasta C:\Documents and Settings\<USUARIO>\Meus documentos\Visual Studio 2008\Addins
Talvez a pasta Addins não exista, então você deve cria-la.

Depois de extraidos ele já está pronto pra usar. Só para confirmar, clique em Tools -> Add-in Manager e verifique se o CopySourceAsHtml está marcado.

Agora é só selecionar o trecho desejado e clicar em Copy As Html...

E o resultado é muito bom:


   19 NumberFormatInfo NumberInfo = new NumberFormatInfo();


   20 NumberInfo.CurrencySymbol = "@";


   21 NumberInfo.CurrencyDecimalDigits = 4;


   22 DemoBuilder.NumberFormat = NumberInfo;



Aqui no blog não vai sair muito bem por causa do pequeno espaço horizontal, mas o html gerado fica com o visual perfeitamente igual Visual Studio.

8 de dez de 2007

Segunda-feira, o dia do exame

Consegui marcar um exame 70-536 pra MCTS na segunda-feita, dia 10, depois de muitos problemas em achar um cartão internacional....que era a única forma de fazer o exame em Santos.

Fiz vários simulados do Training Kit e acerto sempre mais de 70%, mas é pouco =/ vou estudar esse fim de semana pra quem sabe passar de primeira, preciso de 80%.

Ainda bem que peguei a promoção segunda chance, assim posso ver como me saio no primeiro exame e saber onde estudar mais.

Alem  da segunda chance também ganhei 30% de desconto =). Foram 56 dólares pelo exame com segunda chance! A Microsoft ta facilitando bastante no quesito financeiro.

Se você também ta querendo fazer o exame, pode entrar no site da promoção: http://www.microsoft.com/brasil/certifique/certiseguro/ e pegar um voucher, é simples, só clicar no link correspondente ao mês que quer fazer a prova, Dezembro da direito à 30% e Janeiro à 20%.

Pra mim uma certificação MCTS vale mais que a própria faculdade, que não significa nada, pois pra ter um diploma, basta pagar a mensalidade e empurrar com a barriga, a escolha é sua se está lá pra aprender, ou pra agradar seu pai....ou quem sabe ter direito a uma cela especial heheh.

Depois posto o resultado, estou confiante, mas não tenho certeza se passo de primeira. Boa sorte pra mim.

4 de dez de 2007

Criando um assembly em tempo de execução

Vou explicar os passos básicos de como criar um pequeno assembly em tempo de execução, usando Reflection. Usando esses recursos seria possível criar um compilador para IL.

Os assemblies são feitos de: Assembly Metadata, Type Metadata, Code (IL) e Resources

  • O Assembly Metadata define propriedades como Nome e Versão do assembly
  • Type Metadata define todas as descrições de um tipo, como métodos, propriedades, nome de classe, etc
  • Code(IL) é o próprio código
  • Resources são imagens, strings, arquivos, etc

Cada assembly deve conter pelo menos um Modulo. Os módulos são uma espécie de caixa que guarda as informações sobre os Tipos.

Então vamos seguir a seguinte ordem, criamos um assembly, um modulo e um tipo, e já teremos o básico.

//namespaces necessarios
    6 using System.Reflection;
    7 using System.Reflection.Emit;


   15 //Criamos um AssemblyName

   16 AssemblyName AsyNome = new AssemblyName("MeuAssembly");

   17 //Então definimos  um novo assembly no atual AppDomain, não é possível criar um assembly a partir do próprio construtor

   18 AssemblyBuilder AsyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(AsyNome, AssemblyBuilderAccess.RunAndSave);

   19 //AssemblyBuilderAccess.RunAndSave quer dizer que podemos tanto executar esse assembly, quanto salva-lo

   20 

   21 //Criamos o modulo a partir do assembly

   22 ModuleBuilder ModBuilder = AsyBuilder.DefineDynamicModule("MeuModulo", "modulo.dll");

   23 //E um tipo a partir do modulo. Este tipo é publico e serializável, você pode atribuir várias propriedades com o operador |

   24 TypeBuilder TipoBuilder = ModBuilder.DefineType("Meutipo", TypeAttributes.Public | TypeAttributes.Serializable);

   25 

   26 

   27 //Agora podemos definir os membros do tipo, como construtores, métodos, propriedades, etc

   28 //Vamos criar um campo

   29 FieldBuilder CampoBuilder = TipoBuilder.DefineField("Campo", typeof(int), FieldAttributes.Public);

   30 

   31 //Podemos tambem salvar o assembly para uso posterior

   32 AsyBuilder.Save("modulo.dll");


Neste exemplo foi usado somente o FieldBuilder, mas  você pode criar qualquer outro membro usando os: ConstructorBuilder para construtor, EnumBuilder para enum, EventBuilder para eventos, etc

Você pode usar esse recurso para criar um software que aceite plug-ins por exemplo.

27 de nov de 2007

Silverlight 1.1 Tools Alpha para Visual Studio 2008 disponível

Saiu a versão atualizada do Silverlight 1.1 Tools Alpha que funciona com a versão final do VS 2008. Você pode fazer o download aqui.

Esta atualização tem as mesmas funcionalidades da versão anterior para o VS2008 Beta 2, só que agora, funciona na versão final.

O conjunto de funcionalidade incluem suporte básico ao sistema de projeto do Silverlight 1.1, edição de markup XAML e intellisense, suporte à debugging, compatibilidade com projetos Expression Blend, intellisense para VB e C# no code-behind.

O próximo release público do Silverlight irá incluir toneladas de novas funcionalidades , bem como melhorias significativas no suporte ao VS 2008.

26 de nov de 2007

MSDN Experience Online - Parte 2

Eu já tinha postado sobre o MSDN Experience VSTS, e agora está disponível também o MSDN Experience Web Development, que já conta com muitos vídeos.
O difícil vai ser arranjar tempo pra ver tanto vídeo, já que também estou "atrasado" nos webcasts.

Link: MSDN Experience Web Development

22 de nov de 2007

Download programa para diminuir fotos

É o mesmo programa que eu tinha postado anteriormente, mas com algumas melhorias.

Você pode visualizar as fotos enquanto elas são redimensionadas, e também cancelar o processo.

Download Via RapidShare


20 de nov de 2007

Sobre o VS 2008 e o Source do Framework

Hoje as 00:00 consegui baixar o VSTS Trial(são 4GB!), e uma das primeiras coisas que testei foi a visualização do código fonte da Biblioteca de Classes do Framework e fiquei decepcionado.
Não sei se fiz algo errado, até porque não achei em nenhum lugar como faço pra visualizar o código, então coloquei um breakpoint no código, cliquei no método com o botão direito e cliquei em Go To Definition.

Um novo arquivo é aberto dentro do VS com com todos os métodos da classe, mas ao ver o conteúdo deles, me deparo com apenas algumas linhas de comentários...
Sim apenas os comentários estão disponíveis! Não sei se é temporário ou se é porque estou usando uma versão Trial.

Se alguem tiver mais informações sobre essa funcionalidade, me manda um email.

19 de nov de 2007

MSDN Magazine - Dezembro 2007

Está disponível a edição 22 da MSDN Magazine. Assuntos de capa:

  • Map LINQ: Crie mapas dinâmicos com o Visual Basic 9.0 e o WPF
    Scott Wisniewski
  • VSTO: Desenvolva Soluções com o Office usando WPF, WCF e LINQ
    Andrew Whitechapel
  • Cmdlets: Amplie o Windows PowerShell com comandos personalizados
    Jim Truher
  • Interoperabilidade: Conecte-se a aplicativos de mainframe com os adaptadores do BizTalk e o .NET
    Bashar “Bash” Badawi
  • Segurança: Use o ADFS para autenticar usuários em organizações
    Jack Couch

Download em Português - Download em Inglês

Download dos códigos


Visual Studio 2008 e .NET Framework 3.5 RTM - Versão final liberada

Já saiu a versão final do Visual Studio 2008!

Quem quiser fazer o download da versão express pode pegar nesses links:

Visual C# 2008 Express
Visual Basic 2008 Express
Visual C++ 2008 Express
Visual Web Developer 2008

Ou pode baixar a instalação offline: Download

E aqui a versão Team System Trial(90 dias): Visual Studio Team System 2008 Team Suite

Finalmente o Runtime do .Net3.5: Download

14 de nov de 2007

MSDN Experience On-Line

Recebi uma newsletter da MS, sobre o MSDN Experience On-Line. Pra quem estiver buscando conhecimento é uma oportunidade. Você pode assistir as aulas e depois fazer uma prova, com direito até à um "certificado", que  lógico não tem muito valor prático, mas o importante é o conhecimento.

Para os interessados: http://www.microsoft.com/brasil/msdn/experience/vsts/default.mspx

Aqui a descrição do próprio site:

"MSDN Experience On-Line é o canal onde todo o conhecimento técnico específico é demonstrado na prática. É um espaço onde você ganha experiência sobre os mais variados temas sem sair de casa ou do escritório.

Mais do que um programa de aprendizado, o MSDN Experience On-Line é um grande diferencial competitivo de valor para o mercado profissional. Acompanhando os conceitos e as demonstrações e ao fazer as provas no final de cada módulo, você obterá o seu certificado de aprovação. Adquirindo os conhecimentos expostos, você estará dando um passo à frente em direção a uma certificação oficial da Microsoft.

Aproveite essa oportunidade exclusiva de capacitação e adquira, na prática, todo o conhecimento sobre o Visual Studio Team System (VSTS). O VSTS é um conjunto de ferramentas que auxiliam membros de uma equipe como arquitetos, desenvolvedores e testadores a trabalharem de uma forma mais produtiva e integrada ao ciclo de vida de desenvolvimento de software, ajudando equipes a se comunicarem e colaborarem entre si de forma mais efetiva."

5 de nov de 2007

Visual Studio 2008 RTM em Novembro

Alguns meses atrás, a Microsoft ainda não tinha certeza se lançaria a versão final do Visual Studio 2008 em 2007 ou 2008. Mas hoje, 5 de Novembro, é oficial: a versão RTM do VS2008 será lançada no final de Novembro deste ano.

O lançamento oficial do Visual Studio 2008 continua sendo em 27 de Fevereiro de 2008. Mas o VS2008 e o .NET Framework 3.5 terão suas versões disponibilizadas antes disso. A data do RTM para o Visual Studio 2008 foi um dos diversos anúncios feitos pela Microsoft durante a TehEd Developers 2007 em Barcelona, nesta semana.

2 de nov de 2007

Jogo de Campo Minado(Cliente e Servidor) estilo o do MSN

Este é um jogo que desenvolvi para conhecer um pouco mais sobre aplicações em rede, usando Sockets.

A pequena janela no topo é o servidor e logo abaixo dois clientes rodando tudo na mesma máquina pra tirar a Screenshot, mas funciona perfeitamente na Internet.

Também usei Threads, é algo extremamente necessários pra se trabalhar com aplicações que esperam dados vindos da rede, senão o usuário fica impossibilitado de interagir com o aplicativo, e pra cada conexão é usado um Thread independente. Fica fácil implementar um servidor com múltiplas "salas", mas como é apenas um aplicativo conceito, o servidor só aceita um jogo por vez.

Se houver interesse posso enviar os executáveis.

30 de out de 2007

Imagem VPC do Visual Studio 2008 Beta2 expira 1º de novembro

Este mês foi anunciado que a imagem VPC(Virtual PC) que foi distribuída com o Visual Studio 2008 Beta2 infelizmente vai expirar no dia 1º de Novembro deste ano. O setup do VS 2008 independente não tem esse problema - somente as imagens pré-feitas do VPC. Então se você tem instalado o VS 2008 em seu próprio sistema operacional você não terá nenhum problema em relação à isso

Se você está usando a imagem do VPC, é muito importante que você salve todos seus dados antes do dia 1º de Novembro(depois dessa data o SO não funcionará mais).

Hoje foi re-liberado a imagem do VPC com o VS 2008 Beta2 para download (mas sem a expiração) que você pode baixar aqui: Link

23 de out de 2007

MSDN Magazine - Novembro 2007

Está disponível a edição 21 da MSDN Magazine. Assuntos de capa:

•Computação confiável: Lições aprendidas em 5 anos de criação de softwares mais seguros
Michael Howard

• Curso intensivo: Analise panes para encontrar vulnerabilidades de segurança nos seus aplicativos
A. Abouchaev, D. Hasse, S. Lambert e G. Wroblewski

• Revisões de código: Encontre e corrija vulnerabilidades antes de lançar seu aplicativo
M. Chmielewski, N. Clift, S. Fonrobert e T. Ostwald

• Teste de difusão: Crie um provedor de interface de teste personalizado para o Team System
Dan Griffin

Download em Português - Download em Inglês

19 de out de 2007

Vídeo do Windows 7

Eric Traut da Microsoft numa palestra, mostrou o kernel do Windows 7 rodando em uma máquina virtual. O sistema que tem 25MB e ocupa cerca de 4MB em RAM estava rodando um servidor web simples. O novo windows será capaz de gerenciar 256 cores por processador!

A versão do kernel(MinWIn) é bem simples e não tem modo gráfico.

O download do video completo pode ser feito aqui e tem 1 hora de duração
Se preferir, pode ver uma versão de 8 minutos, onde Eric foca no Windows 7: Download (flv)

18 de out de 2007

Technology on the beach III

Fiquei sabendo de uma palestra que vai ter na UNISANTA(Santos-SP), vou passar as informações:

"O Technology on the beach III, acontecerá em:

17 de Novembro de 2007 à partir das 08:00.

LOCAL:
Auditório Bloco E - UNISANTA
Rua Oswaldo Cruz, Nº 277
Boqueirão - Santos - SP
CEP: 11045-907"


Alguns dos palestrantes são até MVP. Acho que vale a pena ir, e entrada é só 2Kg de Alimento não perecível.
Mas o numero é limitado, então não marca bobera e se cadastra.

http://www.buildbrasil.org/

Palestras:

-Abertura: "Comunidade Build Brasil"
-Programando para Microterminais em C#
-Exchange 2007 e OCS 2007 - Garantindo a Comunicação Unificada
-Windows Server 2008
-Visual Studio 2008
-"LINQ-se"

17 de out de 2007

Usando o LINQ

O .Net 3.5 traz uma novidade chamada LINQ(Language Integrated Query), que pretende integrar em uma linguagem de query uma forma de fazer pesquisas em fontes de dados.

Vou mostrar aqui como fica mais simples de gerar XML, e muito mais fácil de ler também:

//Inclua esse namespace
using System.Xml.Linq;

//Dentro do método Main
XDocument DocXml = new XDocument(
                               new XElement("Clientes",
                                      new XElement("Cliente",
                                           new XAttribute ("Nr", 1),
                                           new XElement("Nome", "Maria")
                                           )
                                      )
                                );

Console.WriteLine(DocXml);
Console.Read();

É bem mais intuitivo criar o elemento Pai e no construtor criar os filhos, do que fazer como no .Net2.0 em que você tinha que criar o elemento Filho, então criar o Pai, e adicionar o Filho no elemento Pai.

Uma diferença interessante entre o novo C#3.0 e o Visual Basic 9.0 é que o VB aceita literais XML, exemplo:

Dim ElementoXml As XElement =
     <clientes>
        <cliente nr="1">
            <nome>Maria</nome>
        </cliente>
     <clientes>
Sendo um literal, será interpretado em tempo de compilação e não uma string que vai ser convertida em runtime, assim evita-se erros inesperados. Por enquanto o C# não tem essa implementação e talvez seja assim na versão final também.

Você também pode criar elementos XML da seguinte maneira, usando uma Query Expression:

  List<int> MegaSena = new List<int>();

  MegaSena.Add(13);
  MegaSena.Add(21);
  MegaSena.Add(27);
  MegaSena.Add(33);
  MegaSena.Add(39);
  MegaSena.Add(43);

  XElement elementoNumeros =
     new XElement("Numeros",
        from Numero in MegaSena
        select new XElement("Numero", Numero)
     );

16 de out de 2007

Criando uma aplicação de instância única

Para evitar que o usuário abra duas ou mais instâncias do seu programa, você pode usar a seguinte técnica

//Referencie o namespace System.Threading
using
System.Threading;

//Classe Mutex, ela que identificará se seu programa já está aberto
Mutex
m = null;
//String que usaremos para identificar o programa
const string NomeMutex =  "MEUPROGRAMA";

try
{
   //Tenta abrir o Mutex
    m = Mutex.OpenExisting(NomeMutex);
}
catch(WaitHandleCannotBeOpenedException)
{
   //Nao existe
}
if(m == null)
{
  //Caso nao exista, ele cria um novo
    m = new Mutex(true,NomeMutex);
}
else
{
  //Se existir é porque seu programa já está aberto
   m.Close();
   Application.Exit();

}

Você só precisa ter cuidado ao escolher a string de identificação, pois se houver outro programa com a mesma identificação, você não vai conseguir abrir seu programa.

13 de out de 2007

Diminuindo fotos automaticamente

Criei esse programa pra diminuir algumas fotos de forma automatica. As vezes deixamos a câmera digital no modo com mais alta resolução e isso vai consumindo o HD. No exemplo iremos diminuir a foto pra largura ou altura(o que for maior) de 640px.

Vamos precisar de um Button, um CheckBox e uma ProgressBar:



Vamos criar o método que irá gerar a foto menor:

private void GravarThumb (FileInfo Arquivo)
{
   Bitmap bm;
   Bitmap thumb;
   int altura;
   int largura;

   bm = (Bitmap)Bitmap.FromFile(Arquivo.FullName);

   if(bm.Width > 640 || bm.Height > 640)
   {
      altura = (int)(640f/ bm.Width * bm.Height);
      if(altura > 640)
      {
         largura = (int)(640f/ bm.Height * bm.Width);
         thumb = new Bitmap(bm, new Size(largura, 640));
      }
      else
      {
         thumb = new Bitmap(bm, new Size(640, altura));
      }
   }
   else
   {
      thumb = new Bitmap(bm);
   } 
   thumb.Save(Arquivo.DirectoryName + "/tn_" + Arquivo.Name, System.Drawing.Imaging.ImageFormat.Jpeg);
}

E dentro do evento Click do Button:

if
   (folderBrowser.ShowDialog() ==
DialogResult.OK)
   {
   DirectoryInfo d = new DirectoryInfo(folderBrowser.SelectedPath);
   FileInfo[] Arquivos;

   if(chkIncluirSubPastas.Checked)
       Arquivos = d.GetFiles("*.jpg",SearchOption.AllDirectories);
   else
       Arquivos = d.GetFiles("*.jpg",SearchOption.TopDirectoryOnly);

   progressBar1.Maximum = Arquivos.Length;

   foreach(FileInfo Arquivo in Arquivos)
   {
      GravarThumb(Arquivo);
      progressBar1.Value++;
      Application.DoEvents();
   }
   progressBar1.Value = 0;
}

11 de out de 2007

Inserindo strings em Imagens

Este é um pequeno artigo, ou melhor uma dica de como inserir uma string nas suas fotos.

Um exemplo prático seria para um texto de Copyright

Vamos ao código:

//Carregamos o arquivo da imagem pra uma classe Image
//(poderia ser Bitmap também, que é uma classe derivada da Image)

Image i = Image.FromFile(@"C:\WINDOWS\Web\Wallpaper\Alegria.bmp");

//Instanciamos um objeto Graphics,
//que contém métodos para editarmos nossa Image

Graphics g = Graphics.FromImage(i);

//Instanciamos o objeto Font,
//escolhemos o nome da Font, tamanho e estilos
//(para usar dois ou mais estilos use o operador Bitwise
//ex.: FontStyle.Bold | FontStyle.Italic)

Font f = new Font("Verdana", 40, FontStyle.Bold);

//O objeto StringFormat é opcional,
//você pode usa-lo para configurar alinhamento e direção do texto(entre outras opções)

StringFormat s = new StringFormat();
s.Alignment = StringAlignment.Center;

//Agora simplesmente chamamos o método DrawString,
//passando a string que queremos escrever na imagem, a fonte,
//um Brush(você pode usar algum das propriedades da classe Brushes,
//ou criar um Brush personalizado),
//o local que você quer a string e opcionalmente um StringFormat.

g.DrawString("Felipe", f, Brushes.Blue, 100f, 100f, s);

//Finalmente salvamos o arquivo
i.Save(@"C:\WINDOWS\Web\Wallpaper\Alegria2.bmp");

É muito simples! Espero postar outros artigos em breve, assim que tiver mais tempo.

8 de out de 2007

Microsoft quer códigos mais seguros e de qualidade

A Microsoft continua a ajudar os desenvolvedores à escrever código de melhor qualidade e mais seguro.
Ela está adicionando características novas para análise de código na próxima versão da sua suite de desenvolvimento, o Visual Studio 2008.

No Visual Studio 2005, a companhia integrou um par de ferramentas: FxCop e PREfast, sob os nomes de Managed Code Analysis e C/C++ Code Analysis, disse S. “Soma” Somasegar, vice-presidente da divisão de desenvolvimento da Microsoft.

Agora para o Visual Studio 2008, a equipe de análise de código da Microsoft está adicionando algumas características novas, incluindo o Code Metrics, uma nova janela de ferramentas "que permitirá que você não somente tenha uma visão geral da qualidade do código, mas também a possibilidade de se aprofundar nos pontos de difícil manutenção e mais complexos,” disse Somasegar.

Para o Visual Studio 2008, o Code Metrics virá com 5 modos: Cyclomatic Complexity, Depth of Inheritance, Class Coupling, Lines of Code e Maintainability Index.


Outras características novas incluem as melhorias no Code Analysis Policy, que permitem se assegurar de que a análise do código esteja funcionando antes de cada registro. A equipe da Microsoft fez também algumas melhorias na usabilidade, incluindo uma orientação melhor e fornecendo mais controle sobre os ajustes que são aplicados na política dos projetos.

De acordo com o blog de Somasegar, a análise de código do Visual Studio 2008 será caracterizada também por melhorias como: sustentação para analisar métodos anônimos e expressões lambda; análise nova, incluindo regras adicionais de segurança, de globalização, da manutenção e da sintetização de voz (incluindo suporte à dicionário customizado); melhor suporte para C++/CLI e o Compact Framework; e as melhorias de desempenho que diminuíram o tempo de análise sobre código gerenciado em duas vezes, e consumindo metade da memória do Visual Studio 2005.

A Microsoft anunciou o lançamento oficial do Visual Studio 2008 junto com Windows Server 2008 e SQL Server 2008 para o dia 27 de Fevereiro 2008 em Los Angeles. Entretanto, o código final do Visual Studio 2008 é esperado para o fim deste ano.

5 de out de 2007

MSDN Magazine - Outubro 2007

Ja está disponível para download a revista MSDN Magazine desse mês:

•Segmentos Agrupados: Aumente a escalabilidade com as novas APIs do pool de segmentos
• SEGMENTOS DO WPF: Crie aplicativos que respondem melhor com o despachante
• LINQ paralelo: Como executar consultas em processadores de vários núcleos
• Desempenho paralelo: Otimizar o código gerenciado para máquinas de vários núcleos
• Aplicativos móveis: Ajuste o volume do toque do celular ao som ambiente

Download em Português - Download em Inglês

4 de out de 2007

Código Fonte das bibliotecas do .Net Framework

A Microsoft está planejando liberar o código fonte das bibliotecas do Framework no Visual Studio 2008, para ajudar os desenvolvedores a entender melhor a base do sistema e melhorar o processo de debug.

O Visual Studio 2008 está em Beta2, e deve sair no final desse ano, trazendo muitas outras novidades interessantes, mas não é esse o foco desse post.

No início estará disponível o código fonte(incluindo os comentários) das seguintes bibliotecas:


  • Base do .NET(System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime, System.Text, etc)

  • ASP.NET (System.Web)

  • Windows Forms (System.Windows.Forms)

  • ADO.NET (System.Data)

  • XML (System.Xml)

  • WPF (System.Windows)

E nos meses seguintes outras serão liberadas(WCF, Workflow e LINQ)

Todas sobre a licença Microsoft Reference License (Pelo que li, será algo como, leia mas não edite nem distribua).

Legal que vai ser possível fazer o download de um StandAlone do código  fonte, ou usar integrado ao Debug do VS 2008. No caso do Debug, você pode baixar todo o código ou baixar sobre demanda.

Primeiro post - Evento

Neste primeiro post vou divulgar um evento em Sampa que parece ser muito interessante e é grátis. Só precisa se cadastrar e levar um 1 Kg de alimento não perecível.

Fiquei sabendo do evento só hoje, e não vai ser possível ir, infelizmente.

É agora neste sábado, as 8h

Mais informações

16 de mai de 2007

TCC Ciências da Computação 2009 - LanManager

Integrantes:
Bruno Moleiro Regis - 415178
Felipe Fujiy Pessoto - 415143
Francisco Henriques Mendonça - 415142
Natalia Ribeiro Serinolli - 415117

Tema: Gerenciador de Lan House

Orientador: Alexandre Sobrino

Descrição do projeto: Estamos desenvolvendo um software para controlar o acesso aos computadores da Lan House, e os softwares disponíveis.
Nosso sistema terá um controle dos responsáveis, que podem controlar os softwares usados e os horarios permitidos. Também poderão visualizar o relátorio de uso de seus dependentes.

Status do projeto: Em fase de análise