Jun 27 2008

Achievement Unlocked: MCP

Tag: C#david @ 8:22 pm

 

Fiz hoje a prova base do framework .Net (Microsoft .NET Framework - Application Development Foundation 70-536) e felizmente consegui passar. Uma coisa interessante é que algumas pessoas com quem eu conversei disseram que era muito fácil, que o transcender era mais difícil que a prova.

Minha experiência pessoal: Balela.

Foi certamente uma das provas mais complicadas que eu já fiz, as partes de segurança e serialização foram duríssimas, das 40 questões que eu respondi apenas 7 eram similares as mais de 200 questões de preparação que eu respondi antes da prova.

Não tenho vergonha nenhuma de dizer que eu fiquei de olhos marejados ao ver o “Passed”, quem me salvou mesmo foi o Professional C# da Wrox, já que o livro do kit oficial de preparação para a prova e os simulados não foram o bastante para garantir uma “experiência tranquila”.

Não sei se a prova mudou ou se eu sou fraco mesmo, mas recomendo no mínimo 2 meses de estudo dedicado para quem quiser se aventurar.

E que venham a 70-528 e a 70-562…


Nov 29 2007

Silverlight 1.1 Tools for Visual Studio 2008

Tag: ASP.NET, C#, Silverlightdavid @ 8:19 am

Quem já estiver com o Visual Studio 2008 em mãos já pode fazer o dowload mais atualizado do pacote Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008. São as mesmas ferramentas que estavam disponíveis para o Beta 2.

  • Templates para projetos Silverlight 1.1 em VB e C#
  • Website templates para desenvolvimento Silverlight 1.0 usando javascript
  • Editor de XAML com syntax highlight e intellisense
  • Intellisense para elementos XAML nos arquivos code-behind VB e C#
  • Integração de componentes Silverlight em projetos Web.
  • Possibilidade de criar referências de Web Services em um componente Silverlight.
  • Integração com Expression Blend para facilitar a cooperação entre designers e programadores

Para quem realmente quer tirar proveito da capacidade do WPF e do Silverlight é fundamental ter a mão um editor gráfico de XAML como o Expression Blend, uma das maiores inovações do framework 3.5 é justamente essa habilidade de gerar interfaces sofisticadas, mas o Visual Studio não é uma ferramenta de design e você logo vai notar que editar XAML na mão não é das tarefas mais divertidas. Vale o esforço, quem aprender a usar o Blend direitinho vai poder usar seus truques tanto em aplicações WPF e Xbap usando VB e C# quanto em aplicações Silverlight, onde o modelo de eventos é programado em Javascript (o que poderia ser mais divertido?). Infelizmente nada de doce para as crianças que estiverem brincando de Visual Web Developer Express Edition, mas eu acredito que os recursos possam ser integrados depois, já que existem templates de projeto WPF no Visual C# 2008 Express Edition.

É o melhor de 2 mundos, mesmo com as ferramentas ainda em estágio 1.0 (quase Alpha) esse é com toda certeza o futuro das aplicações Windows e RIA em plataformas Microsoft.

silverlight_tools.jpg


Oct 23 2007

The Missing “LINQ”

Tag: C#david @ 4:19 pm

Functional programming is complexer than imperative (that’s what we do right now). You need to understand the algorithm when implementing it in a functional language. Otherwise you won’t success. You need to understand function calls and recursive calls (you won’t believe how many don’t know how that works). You need to look at the problem from a different viewpoint, which most never did and which might therefore be harder for some. It needs a deeper knowledge!

Enquanto alguns programadores com mais tempo de janela comparam a tecnologia LINQ com os antigos recursos encontrados no Visual FoxPro em vários artigos pelo mundo afora eu particularmente não posso me dar a esse luxo, quando FoxPro ainda era comercialmente viável e estava presente em muitas grandes empresas eu estava no meu quarto jogando Sonic 2 no MegaDrive (esse pessoal de internet gosta mesmo de provocar os mais velhos não?) e acabei perdendo toda essa grande festa da era pré .Net, de qualquer forma chegar mais perto da linguagem C# justamente agora, quando os primeiros recursos de “linguagens funcionais” são implementados me deixa muito satisfeito, provavelmente porque eu nasci no Javascript e o conceito de programação funcional foi o meu primeiro paradigma de programação. Com a introdução dos novos recursos da versão 3.0 da linguagem C# vou poder fazer coisas sofisticadas de uma forma que eu pelo menos acho bastante intuitiva, a tecnologia LINQ permite acessar informação em um objeto ou estrutura de dados através de consultas diretas, select statements literalmente falando, muito similar com T-SQL. A diferença elementar aqui é poder fazer uma consulta em qualquer estrutura de dados, um objeto, um XML e é claro em datasets e outros modelos de dados.

fig01_l.gif

Continue lendo: “The Missing “LINQ””


Oct 08 2007

Copenhagen Comprehensive Collection Classes for C#

Tag: C#david @ 7:41 am

Ou C5 para resumir, é uma biblioteca de classes genéricas para coleções implementada no .Net 2.0 (também compatível com Mono) para C# e outras linguagens CLI. Foi desenvolvida pela IT University of Copenhagen.

Comparando com outras bibliotecas para collections, incluindo a biblioteca padrão System.Collections.Generic, a C5 possui estruturas de dados mais ricas, na classe da Microsoft algumas coleções como array lists e linked lists possuem funcionalidades similares mas não implementam uma interface em comum. Isso pode dificultar um pouco as coisas no momento do entendimento de como a biblioteca funciona.

A C5 nesse aspécto é mais fácil de entender, já que o desenvolvimento foi feito sob uma política restrita de codificar visando interfaces comuns entre as estruturas de dados.

Why yet another generic collection library?

There are already other generic collection libraries for C#/CLI, including the System.Collections.Generic namespace of the CLI or .NET Framework class library (included with Microsoft Visual Studio 2005), and the PowerCollections library developed by Peter Golde . The CLI collection library as implemented by Microsoft .NET Framework 2.0 provides a limited choice of data structures. In general, the CLI Framework library has a proliferation of method variants and rather poor orthogonality. Collection implementations such as array lists and linked lists have much the same functionality but do not implement a common interface. This impairs the learnability of the library. Some of these design decisions are well-motivated by the use of the CLI class library in contexts where nano-second efficiency is more important than rich functionality, and the need to support also rather resource-constrained run-time systems.

Thus, in our opinion, C5 provides the most powerful, well-structured and scalable generic collections library available for C#/CLI. However, although the size of the compiled C5.dll is only about 300 KB, you probably would not choose to use it on your .NET 2.0 Compact Framework wristwatch just now.

Exemplo simples de implementação:

using System;
using C5;
using SCG = System.Collections.Generic;
 namespace GettingStarted {
 	class GettingStarted {
 		public static void Main(String[] args) {
 			IList names = new ArrayList();
 			names.AddAll(new String[] { “Hoover”, “Roosevelt”,
				    “Truman”, “Eisenhower”, “Kennedy” });
 			// Print list:
 			Console.WriteLine(names);
 			// Print item 1 (”Roosevelt”) in the list:
 			Console.WriteLine(names[1]);
 			// Create a list view comprising post-WW2 presidents:
 			IList postWWII = names.View(2, 3);
 			// Print item 2 (”Kennedy”) in the view:
 			Console.WriteLine(postWWII[2]);
 			// Enumerate and print the list view in reverse chronological order:
 			foreach (String name in postWWII.Backwards())
 			Console.WriteLine(name);
 		}
 	}
}

O exemplo mostra o uso de uma ArrayList<T> através da interface IList<t>, e mostra como imprimir a lista inteira, como indexar a lista e como ordena-los de forma reversa. Para compilar e rodar o programa exemplo você vai precisar ter instalada a versão compilada da bilbioteca, C5.dll.

Binários, source code e uma detalhada documentação podem ser encontrados aqui.


Oct 07 2007

C# 3.0 Type Inference

Tag: C#david @ 3:57 am

Uma das features que mais me chamou atenção na nova versão da linguagem C# é que agora podemos usar a keyword var para criar variáveis sem definir o tipo explicitamente, uma passada de olhos rápida me fez imediatamente associar var a keyword de mesmo nome usada no Javascript mas depois de alguma pesquisa percebi que as semelhanças entre elas são poucas. De fato a keyword var no C# é uma de muitas aproximações que o time de desenvolvimento da linguagem está fazendo na busca por recursos comuns em linguagens funcionais [functional programming languages] como Javascript e Lisp.

Alguns programadores acostumados a tipos explícitos podem eventualmente virar a cara para esse tipo de conceito, mas o fato é que o recurso não faz da nova versão da linguagem C# menos tipada do que a anterior. A keyword var foi implementada para reduzir o trabalho, não se trata de não usar variáveis estaticamente tipadas mas sim de deixar o compilador fazer o trabalho de definir os tipos pelo contexto.

C# 2.0 tradicional:

int i;
i = 2;

ou ainda resumidamente:

int x = 2;

Type Inference da versão 3.0

var x = 4;

Um detalhe a ser notado aqui é que para o compilador a construção acima quer dizer que a variável é do mesmo tipo de quem a inicializou, nesse caso um tipo int, continuamos em um universo fortemente tipado. Outro detalhe é que esse tipo de construção só é válida dentro do corpo de um método.

A keyword var aparece como um facilitador para outro novo recurso do C# 3.0, tipos anônimos, é algo que que deve agregar muito em termos de flexibilidade do código já que você pode receber parâmetros e trabalhar com eles dentro de um método sem necessariamente saber de antemão o que virá, tomando decisões de acordo com o contexto. Outro efeito colateral é deixar a linguagem menos verbosa, não é mais necessário nesse caso declarar o tipo da variável duas vezes.

Onde antes era necessário:
Dictionary d = new Dictionary();

Agora basta:

var d = new Dictionary();

Mais sobre o assunto no artigo do MSDN:
“A evolução do LINQ e seu impacto no design do C#”