My PhotoBruno Brás Silva

09, April 1986

info@brunosilva.net

Sintra Lisbon Portugal

Category: .NET

C# operator overloading

Posted on 5:41pm 1/04/2008 by Bruno Silva in .NET, Programming

I’ve found out about a nice C# feature that I didn’t know about. Operator overloading. It allows you to define the operators like +,-,/*,+=,-=,!=,etc. for the classes you develop. How? Just add an static method named operator-<operator> where <operator> can be an operator like +. The first parameter must be of your class type (in this example MyType), the second one can be of any type. Inside the method body you implement the logic associated with your overloaded operator, returning an instance of your class.

public static MyType operator+(MyType o1,MyType o2){
     return new MyType(o1.Property1 + o2.Property1);
}
public static MyType operator+(MyType o,int i){     
     return new MyType(o.Property1 + i);

}

The code above allows you to do something like this:

MyType o1 = new MyType(10);
MyType o2 = new MyType(5);

MyType rs = o1 + o2;

Another nice feature is related with cast operations. You can allow something like (int)o1 (where o1 is an instance of MyType) by adding another static method to your MyType class. explicit/implicit keywords define if you must add (type) before your instance to trigger the cast. Implicit does an implicit cast when it is needed. With explicit you must and the (type) to cast.

public static explicit operator int (MyType from){
     return from.Property1;
}

Office System Add-in Development

Posted on 2:46pm 12/29/2007 by Bruno Silva in .NET, MS Office, Microsoft, Programming

Micrososft Office Power Point 2007

About a week ago I wrote a Power Point add-in which uses my XBox360GamePad Component to enable users to control a slide show with the XBox controller. Well, it’s kind of geek and maybe useless add-in, but it was a compelling objective who drove me to try MS Office development for the first time. It’s a shame that I don’t have a wireless controller… You can download this Add-in and have fun diving into the project code or just try it in a final user perspective by installing it in your Power Point 2007. I must warn you again that it will only work if you have XNA Game Studio 2.0 installed. I’m still trying to find out how to distribute this applications without this huge requirement.

Now I’ll leave here some tips/guidelines on MS Office development. I hope it will be useful if you want to start developing in this widely used software piece.

1. If you are working with Visual Studio 2005 you must install Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System. It also provides the prerequisites to develop for MS Office 2003. If you are working with Visual Studio 2008. These tools ship with the product.

2. Create a new project in Visual Studio. You can choose from a bunch of project templates by choosing the Office targeted version (2003 or 2007) and the application to which you’ll develop the add-in.

Visual Studio 2008 - Create new project

3. After you create an add-in project a file named ThisAddIn.cs will appear in the Solution Explorer. It has two event handlers: OnStartup and OnShutdown. I think that those names are self-explanatory. They are triggered on startup and shutdown of the add-in. There are 2 objects that you must know about to be able to interact with the Office application instance where the add-in is running. They are Globals.ThisAddIn and Globals.Ribbons. You can use the first one to access the context where the add-in is running and the document that is opened. The second one is used in MS Office 2007 development and allows you to manipulate the Ribbon.

Here I leave some properties, methods and events available in Globals.ThisAddin (note that inside the ThisAddIn.cs this object is equivalent to this keyword. If you have some more files that global object can be useful). These examples were extracted from a Power Point add-in.

  • Globals.ThisAddIn.Application.
    • ActivePresentation.Slides (property)
    • ActivePresentation.SlideShowWindow(property)
    • ActivePresentation.Save (method)
    • AfterNewPresentation (event)
    • SlideShowBegin (event)
    • SlideShowNextSlide

Just have fun exploring the API and I am sure you’ll find something useful to you. You can fill your plugin as you wish. You can add some windows forms triggered by some event or bind document contents to a database.

4. You can use Visual Studio to design Ribbon tabs or even add buttons to the MS Office applications main menu. Add a new item to your project and choose “Ribbon (Visual Designer)”.

Visual Studio 2008 - Ribbon Visual Designer

5. When you run this project in Visual Studio it starts a MS Office application instance allowing to debug your add-in.

6. Take a look at this entry in João Lívio (MVP) blog which links to some nice videos about MS Office development.

Playing around with Xbox controller

Posted on 2:27pm 12/24/2007 by Bruno Silva in .NET, Programming, XBox 360, XNA

Xbox 360 Controller

This Christmas a friend gave me a Xbox wired controller. I don’t have a Xbox 360, but I wanted to try XNA development and use the controller to develop some different user-interfaces on windows-based applications. This weekend I managed to put the first pieces to work :)

Based on XNA framework which has support for Xbox 360 controller I built an component that you can drag and drop into your windows forms application. You can assign each control instance to a different controller (up to 4) and set the interval between hardware changes checking (the default is 100 miliseconds). This component raises events when the controller status changes. It has a general onChange event, and an event for each button, trigger and stick status change. It has also a method to control the controller vibration.

This component is not a big deal. When it is instantiated, the component creates a new thread which waits for a period of time before returning into the main thread. When it returns it checks for controller changes using the Microsoft.Xna.Framework.Input.GamePad class. This check is made by comparing the current GamePadState with the previous one. For each change it is raised an event to which you can subscribe in your windows application. I tried to use it in a WPF application. It worked, but I had to create the component in code. It didn’t appear in the toolbox.

You can download the component source code and an example here. I added some comments into the code, but I think that it is pretty simple to understand even to people with little experience with C#. Any question/suggestion feel free to comment!

I’ve tried it in a virtual machine in order to find out the software requirements. I had to install XNA Game Studio 2.0 to put it to work… The XNA redistributable wasn’t enough. If someone can tell me how to distribute my examples with minimum software requirements I’ll be glad to hear from you ;)

This is also a great change for you to try Visual Studio 2008, since the solution in the zip package has to be opened in VS2008. If you don’t have access to this software, or you’re having trouble migrating the code into a VS2005 environment just tell me, and I will help you out.

As soon as I develop some applications using Xbox controller I’ll publish them here in my blog.

Microsoft Press Free E-Book

Posted on 4:42pm 12/19/2007 by Bruno Silva in .NET, ASP.NET, Microsoft, Programming, Silverlight

Microsoft Learning

MS Press has just released an e-book on Visual Studio 2008 technologies and are giving it away for free. The e-book includes excerpts from three recent book releases and provides a wealth of information and insights from top experts:

You can see the first chapter of these books for free. When you register, you’ll be able to download a lot more content of those books, packaged as an e-book.

MSDN - Novas Tecnologias para Desenvolvimento - relato

Posted on 10:46pm 11/21/2007 by Bruno Silva in .NET, Events, Microsoft, SQL Server, Silverlight, Windows Live

Pois é! Como tinha anunciado há uns dias/semanas no blog hoje houve um evento da Microsoft no hotel Sheraton, em Lisboa. Este evento foi realizado à imagem do evento do Porto, mas no entanto a versão lisboeta apenas tinha uma track. Sempre facilitou a escolha (ou falta dela) :P

O evento começou com a intervenção da Cristina Carvalho (Microsoft Portugal). Realço 2 pontos da intervenção.

1º - Concurso de Gadgets 2007 Portugal - Faz uma daquelas coisas giras (e tantas vezes inúteis) para colocar na barra lateral do Windows Vista, ou na tua área personalizada do Windows Live. A ideia é ser original mas acima de tudo fazer algo útil para o maior número de pessoas possíveis. O jurí é composto pelos utilizadores,e os prémios vejam no site :D

WebCast 4 Share - Ciclos de webcasts disponíveis gratuitamente para visualização online e download. Preciso dizer mais? É uma questão de aproveitar.

A segunda pessoa a intervir foi o Pedro Rosa (Microsoft Portugal). Começou por divulgar o TechDays 2008. Será de dia 11 a 14 de Março, sendo o lançamento do Windows Server 2008, Visual Studio 2008 e SQL Server 2008 no dia 11 de Março. Foi ele que realizou a primeira sessão subjacente ao tema Visual Studio 2008 e .NET Framework v3.5, o que há de novo?. Confesso que deste evento era a sessão que menos me interessava por já ter visto uma análoga no TechEd Developers. Deixo a referência para o que escrevi na altura do TechEd sobre este tema aqui. Mesmo assim gostei imenso da sessão, pois foi diferente da “versão espanhola” :P Foram feitas demonstrações de Silverlight e Popfly bem como LINQ, para aguçar o apetite para as sessões da tarde.

A sessão O que há de novo no SQL Server 2008 foi dada pelo Nuno Velho (Actual Training). Deixo de seguida a lista de algumas das novidades que foram expostas no que toca a este produto.

Nova instrução: MERGE. permite pegar nos dados de 2 tabelas para as consolidar numa só. Pode-se definir o comportamento do merge quando o registo existe nas 2 tabelas, apenas na de origem ou apenas na tabela de destino. É mais sintatic sugar do que outra coisa. Espero que já agora tenham optimizado o processo :)

Outo facilitador é a inserção dBruno Silva › Edit — WordPresse múltiplos registos num único comando insert (à imagem do mysql). INSERT INTO tbl_nome(campo) VALUES(’valor1′) (’valor2′) …

Passa-se a poder passar tabelas como parâmetro de Stored Procedures. Dentro das SPs a tabela é read-only e apenas pode ser definida como parâmetro de entrada (não de saída).

Resources Governor. Permite configurar por aplicação ou por regras específicas os recursos disponíveis para uma dada aplicação (ex:quantidade de memória e CPU).

Declarative Data Management - aplicação de políticas sobre a base de dados. Definir por exemplo que todas as tabelas com umas determinadas características devem começar por um prefixo TLB_. Existe um conjunto de objectos e atributos referentes às bases de dados e ao motor de bases de dados em si, bem como condições pré-definidas que podem ser usadas na construção das políticas.

Chage Data Capture - pode-se activar o logging de alterações na base de dados (inserção, edição e remoção de dados). Esta informação é guardada em tabelas extra. Futuramente o SQL Server incluirá um sistema de auditoria dos dados (exemplo: saber que utilizador alterou o quê e quando).

Data Compression - Compressão de dados. Pode-se não ter nenhuma, ter ao nível da linha ou da página de registos. Está prevista uma SP para calcular a percentagem de compressão, de forma a podermos tomar decisões sobre a aplicação de compressão. Atenção, como é óbvio estamos a trocar espaço em disco por tempo de processados em compressão/descompressão.

Mais um pormenor de sintatic sugar. UPDATE tabela SET campo+=10

Data Types - Novo tipo Filestream (ficheiros guardados em disco referenciados pela base de dados. Mas vão atrás quando se faz backup dela). O tipo Date passa a suportar valores desde 1-1-1 a 9999-12-31. O tipo time tem precisão de até 100 nano segundos. Novo tipo DateTimeOffset permite guardar qual o Offset GMT de uma data. Dados espaciais (coordenadas geográfias e geométricas) vem com um conjunto de funções para intersecção de rotas, áreas, etc.

A sessão O que é o LINQ foi apresentada pelo Luís Falcão (ISEL). Falou um pouco do LINQ to Objects, LINQ to SQL e LINQ to XML.

A sessão Desenvolvimento de Aplicações utilizando Silverlight foi apresentada pelo Nuno Godinho (Engifrota). A apresentação não trouxe nada de significativamente novo face à Expression European Designer Tour. Mas foi uma boa apresentação para quem não teve oportunidade de ir a este evento.

Por fim (the last but not the least) a sessão Serviços Live. Como criar aplicações utilizando os serviços Live foi dada pelo Pedro Rosa. Foi referido o BOOM que está a surgir do SaaS (Software as a Service) e de como os serviços Live fazem parte deste paradigma. Realço alguns serviços e respectivas funcionalidades.

Silverlight Streaming - a Microsoft aloja os teus vídeos juntamente com um player nos seus servidores, e apenas tens de colocar a referência onde o quiseres disponibilizar. 4Gb de alojamento gratuito para este tipo de conteúdos.

Windows Live Spaces Photo Control - Basicamente permite colocar num dado site um controlo com as fotos do teu Live Space. Podes escolher as fotos e passá-las para o teu site propriamente dito para serem processadas.

Windows Live ID - Facilita a vida aos utilizadores centralizando o processo de autenticação. Colocas o controlo no site, o login é feito nos servidores da Microsoft, e o teu site recebe um token respectivo ao utilizador. Com esse token consegues identificar o utilizador e potencialmente ter informação associada. No entanto passwords e nomes de utilizador não fazem parte das preocupações. Também é porreiro para poderes arrancar um site a partir do messenger já com a sessão iniciada!

Windows Live Contacts -Nada melhor do que um exemplo. Tens um site cheio de notícias, queres referenciar a notícia a um conjunto de amigos. Seleccionas de entre os teus contactos de messenger/e-mail (a partir de um controlo para o efeito) e envias somente essa informação para o site enviar os e-mails.

Windows Live Messenger - é possível colocar num site uma janela de conversação pública (ou mediante autenticação Live) para um contacto rápido de um visitante de um site ao responsável do mesmo. Tal pode ser usado como base para um Contact Center de uma empresa. Ou então para um tolo como eu que coloca no blog :) O link está debaixo da minha foto de perfil. Lá podem também ver outra funcionalidade. A exibição de um ícone com o estado do contacto. Todas estas funcionalidade se encontram desligadas por omissão. Para a activar e aplicar no vosso site sigam as instruções em MessengerSays.spaces.live.com.

No final ainda deu para ver uma demonstração da utilização de um comando da Wii ligado ao PC para controlar uma aplicação com o Microsoft Virtual Earth.

Devo realçar algumas falhas no evento. Escassez de espaço foi uma delas. 3 pessoas sentadas de seguida e a do meio mal podia respirar… Nos coffee breaks era missão quase impossível chegar às bebidas ou aos tabuleiros. Bem, pelo menos é sinal de uma grande adesão :) Outro problema notório foi a ligação à internet. Infelizmente já começa a ser hábito. No evento do Expression aconteceu o mesmo. Este problema recorrente prejudica a imagem dos produtos baseados na web que são apresentados. Alguns até podem ser lentos. Não discuto isso. Mas lentidão como vi hoje só pode ser fruto de uma ligação de má qualidade. Até porque já experimentei muita coisa em casa e não tive problemas de performance. No fundo tenho esperança que as pessoas ponham a mão na consciência e experimentem em casa antes de começar a dizer que os produtos são lentos. Se em casa forem lentos, então digam mal à vontade, porque então provavelmente têm razão.

TechEd 2007 - A developer diary on implementing Windows Cardspace

Posted on 1:31pm 11/08/2007 by Bruno Silva in .NET, TechEd-Developers

Windows CardSpace

A developer diary on implementing Windows Cardspace
Dominick Baier

Do you know Windows Cardspace? A new feature of .NET framework that allows authentication over the internet.
It is designed to be convenient and secure (avoiding phishing).
Nowadays authentication is application-centric. This means that which website has it’s own authentication system, stores information and the credentials of the users.
This design has some problems. People are registered in many sites. And they don’t want to memorize many passwords, so they tend to use the same password in almost all of them. If a hacker discovers one of them it can be a big big problem. By the other hand, many websites stores personal information, almost like a business card. But a year or so after the registration many informations can change (such as address, phone number and so on).
Windows Cardspace has a user-centric design. The information is stored in user’s computer. There is no need for a password. Windows Cardspace can also store information about the user (like a business card). When a user uses a card in a website, this website can refresh information about the user in their database.
This system can be used side-by-side with a old fashion way.

This system has a problem with mobility… To access websites from different computers you must backup a card into a disk or pen (protected by a password) an temporarily import it into the computer you want to use.

Alcides has told me about OpenID. I will have a look at it soon.
If you have Windows Vista try Windows Cardspace in SignOn.com

© Bruno Silva | Powered by Wordpress