Programação

...now browsing by category

 

Tech Days 2010

Terça-feira, Fevereiro 9th, 2010

techdays2010_logo

Nos dias 20 a 22 de Abril de 2010, a Microsoft vai realizar no Lagoas Park o Tech Days 2010.

O evento vai contar com a presença de cerca de 40 oradores portugueses e estrangeiros para assegurar as mais de 90 sessões e 40 laboratórios técnicos sobre XNA, Visual Studio 2010, Expression Studio, Sharepoint, Silverlight, WPF, Office, Exchange, SQL Server, Windows 7, Windows server 2008 e Windows Azure.

Também vão existir sessões direccionadas à arquitectura de software, Best Practices no desenvolvimento de software e User Exprerience (UX).

Este é o maior evento em Portugal na área das TI, um evento a não perder neste ano de 2010.

Como não podia deixar de ser, a comunidade NetPonto vai estar representada no evento.

Até dia 5 de Março existe um desconto de 75€ na inscrição.   

Mais informações em: http://www.techdays2010.com/

ASP.NET Social Bookmarks

Quarta-feira, Janeiro 13th, 2010

SocialBookmarksO ASP.NET Social Bookmarks é um Web User Control que    permite partilhar informação com as mais variadas redes sociais.

Os utilizadores conseguem interagir de forma simples com o controlo, e para os programadores é um componente reutilizável, flexível e escalável.

O componente é implementado como qualquer outro controlo de ASP.NET, contém CSS, ícones, possui também de um método para executar a compressão de Url, bem como a utilização das API’s das redes sociais implementadas para permitir ao programador um processo simples e eficiente de  publicação de informação nas principais redes sociais.

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <link href="Stylesheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="SocialBookmarks" runat="server">
    <aspbook:Bookmarks ID="Bookmarks" runat="server"
        EnableViewState="False"
        ShowEmail="true" ShowTwitter="true" ShowFacebook="true"
        ShowFlickr="true" ShowPicasa="true"
        ShowGoogleBookmarks="true" ShowLinkedin="true"
        ShowMap="true" ShowFeeds="true"
        MyTitle="ASP.NET Social Bookmarks" ShowTitle="true"  />
    </form>
</body>
</html>

Além de ser simples e flexível, pode ser altamente customizado, possibilitando ao programador adicionar facilmente o acesso a novas redes sociais ou até novas funcionalidades.

As funcionalidades implementadas permitem publicar facilmente informação sem a necessidade de conhecer as API’s das redes sociais.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspNetSocialBookmarks
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Example();
        }

        public void Example()
        {
            Bookmarks.TweetToShare =
                    "Testing the new user control, ASP.NET Social Bookmarks";
            Bookmarks.TwitterUrlToShare = "http://www.blastersystems.com/blog";
            Bookmarks.TwitterUser = "brunoacpires";
            Bookmarks.TwitterTooltip = "Share on Twitter";
        }
    }
}

twitter

O ASP.NET Social Bookmarks Web User Control e o código fonte está disponível em http://socialbookmarks.codeplex.com/ sobre a licença LGPL.

Eventos e Delegates em .NET

Terça-feira, Novembro 24th, 2009

Este artigo tem como objectivo esclarecer o que é um delegate e um evento, bem como exemplificar a implementação e a sua utilização numa aplicação.

Delegates

Um delegate é um tipo de referência utilizado para encapsular um método com uma determinada assinatura.

Exemplo:


public delegate string DevolveStringDelegate();

Esta declaração de um delegate pode encapsular qualquer método que não tenha parâmetros de  entrada e devolva um objecto do tipo String.

 

Em exemplo de utilização de delegates

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegates
{
    public class Program
    {
        //Declaração de um delegate que tem como assinatura 
        //uma variável do tipo String 
        delegate void testeDelegate(string s);

        static void Main(string[] args)
        {
            //texto que vai ser escrito na consola  
            string texto= "estou a ver um delegate a funcionar!";
            //Cria-se uma instância do delegate e no construtor passa-se 
            //como parâmetro o nome do método que se quer utilizar, neste  
            //caso o método é o metodoComAssinaturaString porque contém 
            //a mesma assinatura que o delegate, tem como parâmetro  
            //uma variável do tipo String e devolve void
            testeDelegate t = new testeDelegate(metodoComAssinaturaString);

            //invocação do método que o delegate está a referênciar 
            //caso esse método tenha parâmetros, estes são inseridos 
            //ao utilizar o método invoke do delegate 
            t.Invoke(texto);
        }

        public static void metodoComAssinaturaString(string texto)
        {
            Console.WriteLine(texto);
        }
    }
}

E ao executar o programa…

testeDelegate

 

Eventos

Agora que está esclarecido o que é um delegate e como se implementa, vamos utilizar esse conceito e avançar para a implementação de um evento.

Um evento é uma acção que é despoletada quando uma condição que está  estabelecida se torna verdadeira.

Diagrama_Eventos_e_Delegates

Seguindo o diagrama acima apresentado, vou dar um exemplo de um evento. Temos um calendário, como o google calendar (quem publica os eventos) por exemplo, que permite a inserção de uma reunião, depois configuramos o google calendar para nos enviar um e-mail a avisar da reunião (subscrever o evento), no entanto podemos não ter acesso ao e-mail na hora que está marcada a reunião, assim, configuramos o google calendar para nos enviar uma SMS para além do e-mail (subscrever o evento).

Assim, quando chega a hora da reunião recebemos o aviso por dois canais diferentes, email e SMS, e que contém a mesma informação (EventArgs) no entanto a fonte da informação é a mesma, o google calendar!

Vamos então demonstrar um exemplo prático

using System;
using System.Collections.Generic;
using System.Text;

namespace DelegatesAndEvents
{
    //classe que descreve a informação a ser publicada
    public class ProcessarInformacaoEventArgs : EventArgs
    {
        private int _progresso;

        public int progresso
        {
            get { return _progresso; }
            set { _progresso = value; }
        }

    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace DelegatesAndEvents
{
    //declaração do delegate que tem como parametro a 
    //classe ProcessarInformacaoEventArgs
    //que é onde vai ser guardada a informação que é 
    //enviada quando é disparado o evento
    public delegate void TickHandler(object sender,
        ProcessarInformacaoEventArgs p);

    //classe que publica o evento
    public class ProcessarInformacao
    {
        //declaração do evento que utiliza o 
        //delegate TickHandler
        public event TickHandler tick; 

        //Este método serve apenas de exemplo 
        //de processamento de informação
        public void ProcessarInfo()
        {
            long time = 100000000000;

            TimeSpan t = new TimeSpan(time);

            while (t.Ticks > 0)
            {
                t = t.Subtract(new TimeSpan(1000));
                long aux = time - t.Ticks;
                long res = (aux * 100) / time;

                //sempre que executa um ciclo, vai 
                //ser disparado um evento
                //que vai ser recebido por todas as 
                //classes que o subscreveram
                //e envia a informação processada 
                //por cada ciclo da estrutura
                //de decisão while
                OnTick((int)res);
            }
        }

        protected void OnTick(int p)
        {
            //chama o construtor com parametros da 
            //classe ProcessarInformacaoEventArgs
            //e invoca o evento com a informação que foi recebida
            ProcessarInformacaoEventArgs args = new ProcessarInformacaoEventArgs(p);
            tick(this,args);
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Text;

namespace DelegatesAndEvents
{
    //programa que subscreve o evento da classe ProcessarInformacao
    public class Program
    {
        static void Main(string[] args)
        {
            ProcessarInformacao p = new ProcessarInformacao();

            //Subscreve o evento
            p.tick += new TickHandler(p_tick);

            //Executar o processo que vai disparar o evento
            p.ProcessarInfo();
            Console.Read();
        }

        //Aqui é processada a informação enviada quando o evento é disparado
        static void p_tick(ProcessarInformacaoEventArgs p)
        {
            Console.WriteLine(p.progresso);
            Console.Clear();
        }
    }
}

 

Resultado da aplicação – Apresenta a percentagem de informação já processada.

testeEventos

Pode descarregar todos os projectos de este post aqui.

Demos desenvolvidas em VS2005.

Data Validator RC2

Segunda-feira, Novembro 23rd, 2009

Está disponível para download a versão RC2 do Data Validator.

Lista de bugs corrigidos na versão RC2:

-Verificações das strings de input nos métodos caso sejam do tipo null
-Corrigido bug na função WebServiceRequestUri
-Bug de encoding no processamento do ficheiro XML corrigido

4ª Reunião Presencial da Comunidade NetPonto

Quarta-feira, Novembro 18th, 2009

No dia 21/11/2009 será realizada a quarta reunião presencial da comunidade NetPonto, em Lisboa. Para participar, efectue o registo de acordo com as instruções abaixo.

Agenda

09:30

Recepção dos participantes

10:00

Novidades do SQL Server 2008Henrry Pires

Nesta apresentação, o Henrry irá mostrar alguns dos novos recursos do SQL Server 2008 que considera mais interessantes.

11:15

Coffee-break

11:30

Ferramentas de Apoio ao Desenvolvimento de SoftwarePaulo Correia

Nesta apresentação, o Paulo irá mostrar algumas das ferramentas que utiliza no dia-a-dia, e que considera indispensáveis para aumentar a produtividade e resolver problemas.

12:45

Painel de Discussão

Nota: Ao final da reunião, normalmente escolhemos um restaurante próximo e fazemos um almoço em grupo para continuar o convívio e aproximar as pessoas. A participação é opcional.


Registo / Inscrição

Para participar, envie um e-mail para contacto@netponto.org e informe o seu nome completo, número de B.I., número de telefone e endereço de e-mail preferencial (caso seja diferente).
A entrada é gratuita e está apenas sujeita a confirmação via e-mail, no entanto, gostaríamos de aproveitar esta oportunidade para ajudar uma instituição de solidariedade, e para esta reunião de Novembro elegemos a Casa do Gil, e por isso pedimos que leve consigo no dia da reunião, 1 Kg (um quilo) de alimento não-perecível (arroz, feijão, massa, latas de conserva, etc…), que será doado para esta instituição.


Local

Novabase (Lisboa)
Av. D. João II, Lote 1.03.2.3, Parque das Nações
1998-031 Lisboa

Clique para ampliar o mapa.

Data Validator

Sábado, Outubro 31st, 2009

Biblioteca .NET de funções para executar a validação de números de identificação portugueses.

Este projecto tem como objectivo ajudar a optimizar o tempo que um programador utiliza a desenvolver código que é realmente importante para o projecto ao disponibilizar uma biblioteca de funções que permitem ao programador abstrair-se de tarefas que são repetitivas quando se desenvolve projectos em que é necessário executar validação da informação fornecida pelo utilizador.

Esta primeira versão permite:

- Validar o Nº de Bilhete de Identidade
- Validar o NIF (Número de Identificação Fiscal)
- Validar o NIB (Número de Identificação Bancária)
- Validar o IBAN (International Bank Account Number)
- Validar morada através dos serviços do CTT
- Obter morada através dos serviços do CTT

Envie as suas sugestões para bruno@blastersystems.com

Disponível para download no CodePlex:
http://datavalidator.codeplex.com

Google Wave Preview

Quinta-feira, Outubro 15th, 2009

wavelogo

Finalmente consegui um convite para poder testar o Google Wave, depois de algum tempo à espera, tive a sorte de um amigo enviou  enviar um convite. Deixo aqui as minhas primeiras impressões de esta nova plataforma da Google.

O Google Wave é uma ferramenta que tem como objectivo fornecer aos seus utilizadores uma nova plataforma colaborativa de comunicação e partilha de informação em tempo real.

O Google define wave como um evento que pode ser simultaneamente uma conversação, um documento em que todos os participantes podem colaborar de forma interactiva, fazendo comentários ao documento em causa que pode ser um conjunto de texto, imagens, vídeo, partilha de ficheiros, localização geográfica recorrendo a mapas, entre outros.

Quando se  executa o login no Google Wave, deparamo-nos com um ambiente confortável, de fácil visualização e utilização.

GoogleWave

Cada wave tem o seu próprio espaço no browser, podemos redimensionar, minimizar e maximizar cada wave e assim ajustar o espaço disponível às nossas necessidades.

Além de isto tudo, o Google Wave é também uma plataforma de desenvolvimento, o Google disponibiliza uma série de API’s que permitem aos programadores desenvolver novas funcionalidades que se integram dentro da  plataforma já existente e assim adaptar esta ferramenta às suas necessidades e da sua empresa.

Esta API disponibilizada permite criar dois tipos de conteúdo para o Google Wave:

    • Extensões
      • desenvolver rotinas que automatizam tarefas comuns ou a construção de gadgets que permitem ao utilizador uma nova e melhor experiência de utilização da plataforma.
    • Integração
      • Tornar um site ou um blog  mais aberto e colaborativo ou incluir este numa wave.

O Google Wave permite, a um utilizador sem conhecimentos técnicos, de  forma rápida e acessível, partilhar seja o que for, com o por exemplo:

 

Uma pesquisa do Google…

Google Wave Search

 

uma localização no Google Maps…

GoogleWaveMaps

 

uma votação…

GoogleWavePool

 

ou mesmo ter gadgets como o Twitter a funcionar dentro do Google Wave…

GoogleWaveTweeter

 

e também  tem suporte para iPhone!

GoogleWaveiPhone

Como conclusão, penso que esta nova plataforma tem muitas potencialidades, e se a API que o Google disponibiliza for suficientemente flexível, penso que poderemos ter em mão o futuro dos portais colaborativos e de partilha de informação, se o Google adicionar o suporte de voz e vídeo em tempo real a esta plataforma, será sem qualquer dúvida uma revolução.

Esta plataforma tem um enorme potencial para ajudar a agilizar e melhorar processos de comunicação dentro das empresas.

Vamos por isso ficar atentos a futuros desenvolvimentos da plataforma e à espera que o Google continue a inovar e a surpreender.

O operador Yield (C#)

Quarta-feira, Outubro 14th, 2009

O operador Yield decerto não dos mais utilizados no C#, no entanto pode em muitas situações simplificar o código produzido. Não é o operador de mais fácil compreensão que a linguagem C# disponibiliza ao programadores, no entanto é um operador extremamente útil em algumas situações.

Ele é utilizado num método para ajudar este a retornar uma instância do tipo IEnumerable ou IEnumerator.

Não pode ser utilizado num método anónimo, não pode também ser utilizado num bloco catch ou num bloco try que tenha mais do que uma cláusula catch.

 

Exemplo Prático com a utilização do operador yield :

using System;
using System.Collections;

namespace TesteYield
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (int numero in Exemplo1(5))
            {
                Console.WriteLine(numero);
            }
        }

        public static IEnumerable Exemplo1(int numero)
        {
            for (int i = 0; i < numero; i++)
            {
                yield return i;
            }

            yield break;
        }
    }
}

 

Exemplo Prático com a recorrendo a uma estrutura de dados:

using System;
using System.Collections;
using System.Collections.Generic;

namespace TesteYield
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (int numero in Exemplo1(5))
            {
                Console.WriteLine(numero);
            }
        }

        public static IEnumerable Exemplo1(int numero)
        {
            var res = new List<int>();

            for (int i = 0; i < numero; i++)
            {
                res.Add(i);
            }

            return res;
        }
    }
}

O resultado do programa será:

exemplo1

Quando é utilizado o yield return, não provoca o fim da execução do método, no caso do exemplo 1, o ciclo “for” vai incrementar a variável “i” e guardar o valor na variável do tipo IEnumerable ou IEnumerator.

Exemplo Prático nº2 – como criar facilmente um IEnumerable ou IEnumerator recorrendo ou yield:

using System;
using System.Collections;
using System.Collections.Generic;

namespace TesteYield
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (int numero in Exemplo2())
            {
                Console.WriteLine(numero);
            }
        }

        public static IEnumerable<int> Exemplo2()
        {
            yield return 0;
            yield return 1;
            yield return 2;
            yield return 3;
            yield return 4;

            yield break;
        }
    }
}

 

O resultado do programa será:

exemplo1

3ª Reunião Presencial da Comunidade NetPonto

Segunda-feira, Outubro 12th, 2009

No dia 17/10/2009 será realizada a terceira reunião presencial da comunidade NetPonto, em Lisboa. Para participar, efectue o registo de acordo com as instruções abaixo.

Agenda

09:30 – Recepção dos participantes
10:00 – Introdução ao Windows Communication Foundation (WCF)Caio Proiete
11:15 – Coffee-break
11:30 – Introdução ao NHibernate ORM FrameworkLuis Amorim
12:45 – Painel de Discussão

Nota: Ao final da reunião, normalmente escolhemos um restaurante próximo e fazemos um almoço em grupo para continuar o convívio e aproximar as pessoas. A participação é opcional.


Registo / Inscrição

Para participar, envie um e-mail para contacto@netponto.pt e informe o seu nome completo, número de B.I., número de telefone e endereço de e-mail preferencial (caso seja diferente).
A entrada é gratuita e está apenas sujeita a confirmação via e-mail, no entanto, gostaríamos de aproveitar a oportunidade para ajudar uma instituição de solidariedade, e para esta reunião de Outubro elegemos a Associação ABRAÇO, e por isso pedimos que leve consigo no dia da reunião, 1 Kg (um quilo) de alimento não-perecível (arroz, massa, latas de conserva, etc…), que será doado para esta instituição.


Local

Novabase (Lisboa)
Av. D. João II, Lote 1.03.2.3, Parque das Nações
1998-031 Lisboa

Clique para ampliar o mapa.

Microsoft WebsiteSpark

Quarta-feira, Setembro 30th, 2009

O WebsiteSpark é um programa da Microsoft dirigido às pequenas empresas ou startups que desenvolvem aplicações web e que sejam compostas por menos que 10 colaboradores.

Este programa oferece novas oportunidades de negócio, suporte e formação e o acesso a ferramentas de desenvolvimento.

Com o WebsiteSpark, as empresas não necessitam de adquirir as ferramentas de desenvolvimento, apenas é necessário efectuar o pagamento de uma taxa de 100$, efectuado somente no fim do programa, que tem uma duração máxima de de 3 anos .

As empresas que se associem a este programa têm acesso ao seguinte software:

image

 

Fonte:

http://www.microsoft.com/web/websitespark/default.aspx