Thursday, 26 March 2015

XAML: {x:null} vs Transparent

Depois de algum tempo a tentar criar um botão com uma imagem transparente que seja clicável em qualquer área, descobri que devia usar Transparent na propriedade Background ao invés de {x:null}.

Devo dizer que com esta descoberta, parece que encontrei o caminho da luz .... só não entendo porque num vi esta luz antes.

Monday, 28 October 2013

Strongly typed SignalR CommunicationService

Tenho usado o SignalR como "server support" nas minhas aplicações, sejam elas Silverlight, WindowsPhone ou Windows Store, mas, uma coisa que me aborrece é o facto de as chamadas ao servidor serem efectuadas com strings. Desta forma perdemos a capacidade de alterar a interface e em "compile time" sabermos todos os locais onde o método / propriedade é usado.
Ao usarmos strings estamos sujeitos a erros de digitação e com isso infidáveis horas a fazer debug até encontrar que o problema foi que escrevemos mal o nome do método ou do evento.

À umas semanas atrás resolvi dedicar-me a escrever uma interface com Expressions e Func que me permita usar a interface da Hub para executar os server-side methods.

Antes era assim que eu executava um método que não retornava dados do servidor:

public async Task ExecuteNonReturnMethod(string hubName, string methodName, params object[] args)
        {
            (...)
        }

Sempre que o usava tinha que fornecer a hubName, MethodName e os Parametros... tudo em strings. É fácil ver que os erros aconteciam MUITASSSSSS vezes.

A nova assinatura do método é:
public async Task ExecuteNonReturnMethod(string hubName, Expression> methodExpression)
{
            var methodCallExpression = methodExpression.Body as MethodCallExpression;
            if (methodCallExpression == null)
            {
                throw new InvalidOperationException("Need to provide a method to call.");
            }

            var methodInfo = methodCallExpression.Method;
            var methodName = methodInfo.Name;

            var i = 0;
            var body = (MethodCallExpression)methodExpression.Body;
            var parameters = new object[body.Arguments.Count()];
            foreach (var value in
                from MemberExpression expression in body.Arguments
                select ((FieldInfo)expression.Member).GetValue(((ConstantExpression)expression.Expression).Value))
            {
                parameters[i] = value;
                i++;
            }

            var clientProxy = _hubProxyList[hubName];
            await clientProxy.Invoke(methodName, parameters);
}

e é chamado desta forma:
public async Task CheckLocalUser(string externalUserId, string fullName, string userName)
        {
            return
                await
                this.Execute(
                    x => x.ValidateLocalUser(externalUserId, userName, fullName));
        }

Desta forma temos uma forma de invocar o método no servidor usando a interface e agora, sempre que alterar a interface obtenho erros em compile-time.

Esta foi a forma que encontrei para transformar uma invocação que tem que ser baseada em strings numa strongly typed.
Será que existe alguma forma mais simples de o fazer?


Paulo Aboim Pinto

Wednesday, 25 September 2013

Que a lavagem cerebral comece...

Hoje ao ler uns blogs deparei-me com este maravilhoso vídeo que mostras aos miúdos que não devem partilhar música, jogos e outros qualquer produto digital.
Não me lembro de nos anos 80 e 90 a Sonny, fabricante de gravadores de vídeo alguma vez se preocupar com os produtores de filmes ou com os actores, mas, hoje preocupa-se porque é uma das maiores distribuidoras de conteúdos digitais.

Nunca ouvi nenhum artista dizer que não ganha o suficiente por causa dos rádios de dois decks que possibilitavam gravar de uma cassete para outra ou ainda nenhum escritor dizer que o facto dos seus leitores lerem de livros emprestados fazia com que ninguém comprasse os seus livros.

A industria da distribuição de conteúdos é que não está a actualizada ao mercado actual e as necessidades das pessoas, mas, está ainda agarrada a persupostos antigos, modelos de negócios desajustados à realidade que já não retornam a mesma margem de lucro.

Este vídeo tem o propósito de educar, mas, ao contrário disso, está a tentar fazer uma lavagem cerebral as nosso jovens e empurralos a um consumismo desmesurado e sem sentido.

Aqui está o vídeo


Fonte: MPAA e RIAA querem fazer Lavagem Cerebral desde o Jardim Infantil

Friday, 6 September 2013

Testar ou não testar....

No projecto que estou envolvido  temos a obrigação de manter uma percentagem  muito elevada de cobertura por testes unitários e desde à algum tempo que tenho vindo a desafiar os meus colegas sobre este assunto, o que temos e o que não temos que testar no nosso software.

Muitos de vós irão dizer sem pensar: "Temos que testar tudo!", mas, aqui é que reside o problema, o que é tudo?

Será que esse tudo quer dizer que devo testar se a minha ViewModel tem o [ImportingConstructor] no constructor ou se tem o [Export] na class, ou ainda se todas as propriedades tem o "OnPropertyChange"?
Outros que testam classes que são gateways entre o client side e o server side que o fazem é testar que o método é chamado com os mesmos parametros recebidos, será que estão a trazer valor acrescentado aos nossos testes ou estaremos só a aumentar a coverage dos testes para nosso regorzijo?

Outro ponto que queria tocar é que por vezes para testar duas linhas de código que escrevemos em 30s, demoramos 20 minutos ou mais a preparar o teste. Será que este teste vale a pena ser escrito?

Não quero com estas palavras  que pensem que eu sou contra os testes unitários, muito pelo contrário. O que acho é que há limites para o que devemos ou não testar e se estamos a perder mais tempo a preparar testes que a programar, algo vai mal na arquitectura da nossa solução.

Agradeço os Vossos comentários.
Paulo Aboim Pinto

Monday, 2 September 2013

Uma semana com Windows Surface PRO

Boas,

Muito há a dizer sobre este novo equipamento. Como ele é bonito, funcional, que tem uma bateria incrível que podemos ficar até 5h a trabalhar, a forma como magnéticamente encaixa perfeitamente com o teclado, etc., mas, ao invés disso vou falar de como tenho o usado.

Uma das principais razões para comprar este equipamento foi para ocupar de uma forma racional os 30m que levo todo os dias de casa para o trabalho e mais 30m do trabalho para casa. Estava a usar o meu vulgar laptop que pesa 3Kg, Não é mau, mas, o espaço no comboio num é grande e apesar de não ser muito grande, o laptop as vezes era grande mais para o espaço que tinha disponível.
Depois de pesquisar um pouco reparei que todos o que tem o Surface Pro falavam muito bem da sua utilização em conjunto do Visual Studio. Vi vídeos e mais vídeos e decidi que tinha todas as condições para comprar um e que o dinheiro não seria deitado na rua.

Uma semana depois posso dizer que tenho instalado no Surface PRO o mesmo ambiente de desenvolvimento que tenho no meu laptop: Visual Studio 2012, Resharper, Git for TFS Online, SQL Server 2008 Express e tirando o facto do teclado num ser completo e do monitor ser muito mais pequeno, não vejo qualquer difereça entre desenvolver no Surface PRO ou no meu laptop.

Diria que esta máquina não é a indicada para uso regular, isto é como máquina de trabalho, mas, resolve bem o problema da portabilidade por pesa pouco mais de 1Kg.
Se havia dúvias antes de o comprar, agora já não as tenho e o Surface PRO me acompanha agora todos os dias para o trabalho onde posso ser produtivo também no comboio.


beijos e abraços
Paulo Aboim Pinto

Sunday, 14 July 2013

Consegui configurar o continuous build no TFS Git com uma solução: Win8 App + ASP.NET Backend.

Até aqui conseguia fazer isto muito bem se a solução fosse puramente no TFS, mas, ontem à noite consegui com os projectos Git no TFS Online e estou muito contente.

Gosto do Git como source-controller, mas, falta-lhe o resto que gosto no TFS como a possibilidade de associar Tasks a uma Check-In de uma forma simples e toda a gestao do projecto baseada no trabalho desenvolvido.
Sei que existem diversas ferramentas que ajudam o Git a ter estas funcionalidades, mas, porque quero outras ferramentas se o TFS faz isso muito bem? Vou esperar pela integrações de gestão de projecto que a equipa do TFS venha a introduzir no Git!

O que ficou ainda por fazer é deployment automático para o Azure. Ai continuamos com problemas devido a erros nos target files que estão no Git (acho eu), pois, a mesma solução fazia o deployment sem problemas a partir no TFS. Vamos esperar para ver.

Outra coisa que noto que falta é poder correr os scripts de Code-First no final do deployment em Azure. Em TFS temos um campo onde podemos colocar o Deployment Script que fazemos download do dashboard azure, mas, nos ecrans de definição do build em Git não temos essa opção, pelo que ainda não deve estar implementado.
Felizmente a partir do publish do projecto ASP.NET tudo funciona lindamente. Ainda espero um dia termos uma forma de a cada check-in fazer um push da solução Win8 para a store, nesse ponto teremos um serviço completo.

O objectivo deste trabalho era ter um luz verde no continuous build do Git e isso já está. Agora é colocar os projectos de testes e garantir que qualquer alteração não está a produzir problemas secundários na solução.


beijos e abraços
Paulo Aboim Pinto

Sunday, 30 June 2013

Este blog vai ser um pouco mais técnico....

Este blog tinha como função ser generalista, onde eu falava sobre Futebol, Política sou sobre qualquer coisa que me vinha à cabeça, mas, de uma forma geral não tinha muitas conversas técnica, pois, para tal tinha outro blog na comunidade PontoNetPT. Infelizmente essa plataforma não está disponível à algum tempo (vários meses) e parece que ninguém é capaz de resolver o problema, pelo que vou começar a usar este blog para os meus devaneios técnicos.

Irei também falar sobre a minha experiência como emigrante (estou neste momento em Zurique, Suiça) e falar um pouco do trabalho que estou a desenvolver junto da Roche Diagnostics, sem entrar em pormenores que quebrem a confidencialidade.

A namorada está grávida, pelo que irei falar um pouco sobre esta maravilhosa experiência.


Obrigado a todos
Paulo Aboim Pinto

Thursday, 17 November 2011

Duarte Lima e as suas trafulhas

Deste o tempo do Pedro Caldeira (esse grande burlão que fugiu para o Brasil) que não nos deliciavamos com uma tamanha dedicação ao roubo descarado por parte de uma figura pública.
Esta personagem é um conhecido ex-político, advogado conhecido e conceituado na nossa praça que agora se vem a saber se dedicou a negócios pouco claros.
 
Não me preocupa só o facto de ele ser indiciado como autor do assassínio de uma das herdeiras do Tomé Feteira ou ainda porque está envolvido nos negócios dos terrenos do BPN (onde só tenho pena não me terem convidado para participar também), mas, preocupa-me o facto de uma pessoa deste calibre tenha passado pela nossa assembleia da república e tenha elaborado leis e projectos de lei que favoreçam as suas actividade ilícitar.
 
Ficam confusos? Eu explico. Se uma pessoa é capaz de matar ou arranjar esquemas de lavagem de dinheiro também é capaz de alterar uma "virgula" na lei para que continue a prepetrar as suas actividades ilícitas ou ainda nas audições públicas onde participou, com a promessa de receber "robalos", pode ter conduzido a audição para o lodo, não chegando a conclusão nenhuma.
 
Preocupa-me que os portugueses não vejam isso e não sejam rigorosos na altura de escolher os seus governantes e deixem que estas coisas acontecam.
Temos que exigir idoneidade e rigor à nossa classe governante, pois se não, eles "comem as papas na nossa cabeça".
 

Friday, 4 November 2011

De recurso em recurso até prescrever

Nas últimas semanas, para deleite da comunicação social o caso Isaltino Morais parece nunca mais terminar. Parece daquelas novelas da TVI que dura, dura e quando parece que vai acabar, aparecem mais um herdeiro e com isso mais 50 episódios.




Esta história de ele não poder ser preso enquanto houver recursos pendentes é uma total e completa balela. Um mecanismo que deixaram na lei para que pessoas como ele poderem ficar em liberdade enquanto corre pretensos recursos. Desta forma, não me admira nada que em breve o caso seja arquivado porque prescreveu, porque em tempo útil os tribunais não conseguiram resolver os imensos recursos que o batalhão de advogados que ele contratou vai arranjar.

Não me admira nada que até surjam recursos, porque ele tem uma doença terminal...



Fico a pensar no vulgar português (que não tem um sobrinho que é taxista com uma conta na suíça com mais de três milhões de euros) que ao ser condenado em prisão efectiva por algo, vai ter que esperar pela decisão dos recursos dentro das prisões. Enfim, esta é a justiça que temos.



Onde está a indignação popular? Onde está o povo que grita, "UNIDOS JAMAIS SERÃO VENDIDOS"? Este povo que se deixa enganar por obra feita à custa da corrupção e dos favorecimentos. Que tem aplaudido este oportunistas e xupistas?

Será que este mesmo povo vai continuar a fechar os olhos e abrir a carteira para estes corvos que temos na sociedade?



ACORDEM!!

Tuesday, 25 October 2011

ACORDEM PORTUGUESES.... Revolução procura-se!!

Estamos a necessitar de uma revolução em Portugal. Não uma revolução como a de dia 25 de Abril, mas, uma revolução de mentalidades.
Temos que deixar de aplaudir o que nos últimos 20 ou 30 anos tem fugidos aos impostos, enganado e criado fortunas enormes na Suíça.
O povo português tem que acordar, pois, são esses que pedem sempre aos mesmos que aceitem a austeridade que não abdicam do seu luxo.

Não quero parecer da ala mais esquerdista da nossa sociedade, porque não sou. Sou de direita e voto sempre à direita, mas, cansa-me ver todos, da esquerda à direita a fazer o mesmo onde gostaria de realçar que "Jobs for the Boys" também existe na nossa esquerda quando o Louça filho nomeia Louçã mãe para acessora do grupo parlamentar do Bloco.

São todos farinha do mesmo saco e estão todos na política para sugar o máximo que podem o erário público.

TEMOS QUE PRESSIONAR ESTE POLÍTICOS A SEREM BONS POLÍTICOS, porque dos maus estamos fartos.

Não acredito que o culpado disto é o Zé e a Maria que moram em Massamá e que pagam 600€ de renda de casa, tem um filho e um rendimento mensal de aproximadamente 1.500€. Se eles não são os culpados, então porque são eles que tem que pagar?

Irem expor diversos casos que tem sido gritantes e que temos que acordar para começar a reclamar a sério com este políticos.

Monday, 16 May 2011

Azure Deployment de 20 minutos para 30 segundos

As últimas semanas foram super-aterefadas a colocar online o projecto http://www.bizsimplex.com (ainda BETA), a corrigir bugs e a planear o trabalho das próximas semanas, mesmo assim tive um pouco de tempo para um projecto que estava na gaveta que tinha que ser implementado.

Todos os que desenvolvem para Azure já se depararam com o problema do deployment. É um problema incontornável, pois, quando fazemos o upload dos novos binários temos que esperar que seja criada três máquinas virtuais que irão conter a nossa aplicação e ainda arranca-las.
Este processo poderá demorar de 15 minutos a 30 minutos no pior dos cenários. Numa pequena empresa como a IBST, este tempo de deployment é totalmente, completamente, absolutamente inconsebível pois dependemos da rapidez de resolução dos problemas dos nossos clientes como arma para o nosso sucesso.

Como temos mais do que um WebSite na mesma WebRole, faz com que o deployment (por mais pequeno que seja) num, manda abaixo todos nesse período. Se fizermos dois ou três deplyments por dia em sites diferentes teriamos um downtime em todos os nossos serviços de mais de 60 minuto.

Desta forma resolvi meter as mãos na massa, procurar alguma informação e descobri que podemos correr um loop na WebRole.Run que cria os vários sites no IIS da instancia.
Desta forma o que fiz foi: colocar um ZIP file no BlobStorage com o site e nesse loop fazer o download desse ZIP, descompacta-lo e criar a WebApplication no IIS. Voilá, funcionou na perfeição.

Depois de colocar ainda umas validações que indicam que só faz download de ficheiros novos, coloquei online e sempre que um ZIP é actualizado o sistema vai busca-lo e cria uma nova aplicação no IIS, isto tudo em menos de 30 segundos.
O projecto ainda não está pronto para todos veres ou usarem, pelo que não vou mostrar a ninguém. Para os que pensam que os 30 minutos de deplyment no azure é um problema, acreditem, é possivel ultrapassar.

Paulo Aboim Pinto

Monday, 11 October 2010

WoW Cataclysm três semanas depois

Boas,

Passaram três semanas que sou um Beta Tester da nova expansão do World of Warcraft (WoW para os amigos) que se vai chamar Cataclyms.

Nestas três semanas muita coisa aconteceu e infelizmente ainda não tenho nenhum boneco a nível 85.

Comecei por fazer as "quests" no druida e escolhi começar por Mount Hyjal. Esta minha decisão baseou-se no facto de querer conhecer um pouco mais do que poderá vir a acontecer com os druidas no jogo, pois, parece que a história começa depois da derrota do Archimonde numa das raids da TBC. Parece que todos começam por tentar acabar com esta terra mágica, pois, agora é a vez de Ragnaros, que depois de se juntar ao Deathwing para voltar a aterrorizar Azeroth.

Os dois primeiros níveis foram muitos fáceis de fazer demorei aproximadamente 6 horas para chegar a nível 82 sem fazer instâncias. Para fazermos as instâncias no Cataclysm temos que descobrir as suas entradas. Como podem imaginar, esta é uma tarefa que vai demorar algum tempo e é xata.

Em aproximadamente 3 dias (e só a jogar umas 5 horas por dia) estava a nível 84 e eis que o impensável aconteceu. Numa quest de Uldum (terceira zona do jogo) o meu druida ficou "out-of-phase". Estava a fazer uma quest com um veículo e depois de ter concluído a quest e antes de entregar a mesma, aceitei um summon para ir a uma instância e o meu boneco ficou na fase onde estava. Agora, como não estou no veículo, não posso entrega a quest. Já abandonei a quest e nada, já morri e nada, já usei a opção de estar preso e nada.... nada... é mesmo um bug. O máximo que posso fazer é reportar este bug e esperar.

Como agora já não posso usar mais o druida, resolvi começar a levelar outros bonecos e depois de muito ponderar entre o Mage ou Hunter, escolhi o Hunter.
Neste momento já estou atingi o nível 84 e estou de novo em Uldum e a pensar se vou fazer aquela quest ou não.

Com o Hunter pude também subir as profissões (Skinner e LetherWorking) bem como começar a subir a nova profissão Arqueologia. Infelizmente não tenho as profissões de Cooking e Fishing no máximo neste boneco.

Em conclusão, o Cataclysm vai mudar praticamente tudo que conhecemos sobre o jogo e as formas de jogar, pelo que, vai demorar um pouco até que todos possam estar a jogar decentemente o jogo.
Alguns jogadores vão adorar as alterações e outros nem por isso. Pessoalmente eu gosto das alterações, pois, estão a trazer algum equilíbrio entre as diversas classes.
Não gosto particularmente das builds, mas, ao mesmo tempo são menos complicadas e é possível personalizar os nossos talentos de uma forma que antes não era possível.

Vamos lá ver se no dia 7 de Dezembro temos a expansão para jogarmos.


Paulo Aboim Pinto


Sunday, 3 October 2010

Estou no WoW Cataclyms Beta

A semana passada a Blizzard presenteou-me com a chave da próxima expansão denominada Cataclyms.

Já jogo WoW desde à 3 anos e testar a expansão antes de ela sair é algo presente que me deixou imensamente contente.

Neste blog irei começar a falar também de WoW e das alterações que vou descobrindo sobre o que vem ai no jogo.


Paulo Aboim Pinto

Wednesday, 14 July 2010

JavaScript vs Silverlight - Please don't feed the trolls

Foi criado um Flame Post no JupiterJS.com que só server para alimentar alguns trolls que por ai andam intitulado "JavaScript vs Silverlight".
Estava eu a pensar numa forma de blogar sobre o assunto e eis que o Laurent Bugnion, criados no Light MVVM para WPF, Silverlight e WP7 respondeu da melhor forma.

Ao texto dele gostaria de acrescertar algo sobre debuging em .NET e JavaScript. Não só é completamente diferente como é antagónico. Desde que conheci sistema de debug facultado pela Microsoft que não quero um que tenho que fazer print do resultado das variáveis para o ecrã.
Considero contra-produtivo e até mesmo castrador no avanço do trabalho!

Outro ponto é a homogeneização do código. Quando estamos a programar em JavaScript temos que conhecer dezenas (quando não são mais) frameworks e que nem sejam coexistem entre si. Temos ainda que dominar o HTML para apresentação final e o Java para servir de Data Access Layer com a base de dados.
No Silverlight só temos que entender e saber de uma linguagem: C#. Para os mais radicais temos também o XAML que não é mais que uma representação dos ecrãs. O código de User Interface, de negócio e ainda o acesso aos dados é todo desenvolvido na mesma linguagem.

Para um gestor é muito melhor escolher uma equipa multi-disciplinar nas funções que também estar dependente dos conhecimentos sobre as diversas linguagens.

Pelas razões expostas pelo Laurent Bugnion e pelas que aqui tentei acrescentar a minha escolha é obviamente Silverlight.
Podem ler a sua resposta aqui.


Paulo Aboim Pinto

Tuesday, 13 July 2010

BUGS? Só entre a cadeira e o teclado!

Pois é, venho vos falar de um erro que me assombra desde sexta-feira e que passei o fim de semana todo a pensar nele e só hoje é que descobri o que estava a acontecer.

Depois do post anterio, resolvi melhorar o meu código (ahahahah melhorar!!!!) e criar uma separação de responsabilidades em assemblies diferentes. Começei então pelo RIA Service que separei do projecto Web que estava inserido.

Ao fazer isto tudo deixou de funcionar. Passei a ter o seguinte erro:

Operation named 'GetContacts' does not conform to the required signature. Return types must be an entity, collection of entities, or one of the predefined serializable types.


Este erro explica muito pouco o que está a acontecer, mas, depois de lamber muias páginas descobri que não posso ter a seguinte declaração de método:

[Invoke]
public IEnumerable GetContacts(string name) { return null; }

Esta declaração não é possível porque se tiver que retornar uma lista (IEnumerable<>, IList<>, etc), este método necessita ser [Query] e não [Invoke].

Mesmo sabendo que isto já funcionou como o [Invoke] mudei para [Query], mas, ocorria outro erro estranho, o meu código nunca entrava no RIA Service e obtinha sempre um erro a indicar que o servidor indivaca que o método não tinha dito encontrado.

Mais lambidelas de páginas e mais páginas e nada... eis que me recordei que tinha um projecto simples na minha máquina que funcionava. O problema é: FUNCIONA PORQUE?

A razão é simples: Invés de criar o meu RIA Service com Add -> New Item -> Domain Service, estava a criar uma nova class e decorava-a com [EnableClientAccess].
Quando cria-se pelo template são adicionadas referências e um conjuntos de declarações using que eu não estava a fazer e por isso não funcionava.

Infelizmente demorei 4 dias para descobrir este erro simples e espero que vcs não tenham que passar por isso!


Paulo Aboim Pinto

Tuesday, 6 July 2010

Silverlight também nos Nokias!!

Ora ai está uma boa notícia. Enquanto outras plataformas limitam o acesso da tecnologia, outras aumentam o leque de equipamentos onde podemos usar a tecnologia. A última notícia é que o Silverlight também corre em Nokias.

Com esta notícia podemos dizer que o Silverlight corre sistemas Windows, MacOsX, Linux, WindowsPhone, Symbian (Nokia)

Source: http://www.silverlight.net/getstarted/devices/symbian/

Paulo Aboim Pinto
Odivelas - Portugal

Silverlight + RIA Services + WCF + SQL Server (Arquitectura 4-Tier)



Nas últimas semanas me foi pedido para elaborar uma prova de conceito que juntasse o melhor de vários mundos. Uma aplicação em Silverlight, base de dados SQL Server e uma arquitectura de 4 camadas (4-Tier).
A aplicação Silverlight não tinha muito que saber pois, é um género de agenda simples onde adicionamos, alteramos e apagamos contactos. Assim a aplicação contem 2 formulários: Lista de contactos e edição de contacto. Associados a estes formulários, forma programadas as três operações CRUD (Create, Update e Delete).

A dificuldade aqui era integrar a arquitectura nesta prova de conceito, pois, a implementação tradicional de RIA Services não permite que a lógica da aplicação esteja noutro servidor, mas, no mesmo que a aplicação Silverlight está a ser executada.
A complexidade da arquitectura deve-se ao facto termos que desagregar o User Interface (UI) da lógica de negócio (Business Layer) e ainda tornar indisponível servidor de base de dados para o User Interface como demostra o gráfico em baixo:


Podemos ver que o UI acede aos dados a partir do Servidor Aplicacional que está por detrás de uma Firewall. A ligação entre o servidor Web e o servidor aplicacional é feita a por uma porta específica e de forma segura, enquando o servidor de base de dados só permite ligações do servidor aplicacional para garantir a segurança de comunicação entre os servidores.

Assim, para suportar esta arquitectura o que fiz foi :
  • desenvolver uma aplicação Silverlight que usa RIA Service como Wrapper do serviço que está no Servidor Aplicacional. Esta solução torna que seja possível fazer um "push" dos objectos de negócio para a aplicação Silverlight sem que seja necessário criar projectos de partilha de recursos.
  • Desenvolver um componente RIA Service no servidor Web que possiblita a invocação dos métodos que desejamosComo podemos ver, temos três métodos no RIA Service que poderão ser usados pela aplicação Silverlight. Como este RIA Service não tem acesso à base de dados, não implementa o LinqToEntitiesDomainService, mas, DomainService. Desta forma para invocar estes métodos temos que fazer na aplicação Silverlight o seguinte:Todos os acessos a RIA Services são efectuados assincronamente, pelo que necessitamos de definir o evento Complete para a operação. Neste caso o evento de Complete refresca a lista de contactos.

    Por fim, o RIA Service deve conectar-se ao serviço WCF que está no servidor aplicacional dentro da zona de servidores protegida. O componente WCF no servidor aplicacional pode ser um serviço windows ou uma console application que vai estar à escuta na porta 4534 (podia ser qualquer uma, eu escolhi esta).
  • Por último desenvolve-se o serviço WCF no servidor aplicacional que vai estar à escuta na porta 4534 por solicitações. Configurei para que esta comunicação seja NetTcp para garantir privacidade e performance.
    Este serviço WCF efectua operações na base de dados (operações CRUD) e usa EF4 como ferramenta de ORM.
Desta forma foi possível ir de encontro aos requisitos do cliente e criar uma total separação entre o servidor Web e o servidor aplicação / base de dados. De forma nenhuma, alguém vindo da Internet pode aceder ao servidor aplicacional e à base de dados.
Foi assim garantida assim a segurança dos dados de ataques indesejados.

Paulo Aboim Pinto
Odivelas - Portugal

Thursday, 1 July 2010

Friday, 25 June 2010

Silverlight + RIA Service / WCF + Database

Basicamente desde do TechDays2010 que todo o meu tempo  tem sido usado a estudar Silverlight 4. Para meu espanto, esta plataforma está avançada o suficiente para começar a pensar em desenvolver aplicações na Internet usando somente Silverlight.

Silverlight tem uma estrutura semelhante ao WPF (Windows Presentation Fundation), mas com a diferença que está focada em correr aplicações num Browser. Quando falo em aplicações, estou a dizer isso mesmo. Com Silverlight é possivel desenvolvermos aplicações profissionais com um “interface polido” que já conheciamos de outras plataformas como Java ou Adobe Flash.

Para aceder aos dados, que alimentam a aplicação, a equipa da Microsoft disponibiliza um componente chamado RIA Services (RIA = Rich Internet Application) que com base num modelo de dados cria todos os métodos CRUD para que possamos desenvolver a nossa aplicação e integra-se com qualquer ORM, apesar de eu aconselhar Entity Framework 4 (EF4).

Outra forma de aceder aos dados é usando componentes WCF que já estejam desenvolvido na organização. Outro tipo de utilização de componentes WCF é quando queremos dispersar os componentes da nossa aplicação: WebServer que disponibiliza a aplicação Silverlight, Application Server que disponibiliza os WebServices / Componentes WCF e o servidor de base de dados.

Neste ponto a base de dados é algo realmente remoto numa aplicação, pois, quem vai criar a aplicação só tem que se preocupar com RIA Service ou WCF e o que é exporto por estes componentes.

Silverlight está também disponível no WindowsPhone. Assim podemos ter o mesmo ambiente no browser ou no telefone.
Estou convencido que o Silverlight é a próxima grande coisa a acontecer na informática.

Tuesday, 25 May 2010

Silverlight e WPF

Desde o TechDays 2010 que todo o meu tempo tem sido usado para estudar Silverlight e WPF.

O WPF (Windows Presentation Fundation) é claramente uma excelente forma de desenharmos as aplicações de futuro. Duvido que o WindowsForms vá desaparecer, mas, vai ser gradualmente substituido por esta forma hierarquica de representação das nossas aplicações.
Tem como inconviniente só poder ser executado em sistemas operativos Windows, pois, tenta tirar partido de tudo de bom que o sistema operativo tem para oferecer.

Já o Silverlight é uma agradável supresa. Tenho visto filmes e mais filmes sobre Silverlight, comprado livros, experimentado e não poderia estar mais espantado com o que podemos fazer.

Com Silverlight podemos finalmente desenvolver aplicativos para o browser sem a necessidade de aprender outa liguagem se não a que estamos habituados a usar, o C#.
Quem me conheçe sabe bem que detesto JavaScript (e até mesmo o Java) e sempre me fez impressão ter que aprender JavaScript para ter interfaces bonitos nos sites que desenvolvi.

I HATE JAVASCRIPT

Desta fotrma não é necessário aprender HTML, JavaScript, C# para desenvolver uma WebApplication com "interface rico". Usando o Silverlight só temos que saber construir forms em XAML e programar em C#... MAIS NADA.

Até hoje só com Adobe Flash é que podiamos criar sites com interfaces realmente ricos e dotar as nossas aplicações de um Look & Feel realmente poderoso, mas, como é que usamos o Flash para obter dados de uma base de dados, processar dados e envia-los de volta para a base de dados? Com muita dificuldade.
Esta simples acção é feita no Silverlight de uma forma natural. Em Silverlight não fazemos só animações, mas, aplicações completas.

Mesmo que isto fosse muito, ainda temos a possibilidade de instalar e correr as nossas aplicações Silverlight Out-Of-Browser. Estas aplicações, apesar de terem um acesso limitado ao disco e ao sistema operativo, são executadas a partir do computador do cliente e usar o protocolo HTTP para comunicar com o servidor.
Só boas notícias.

Irei publicar o que tenho descoberto sobre Silverlight e WPF e espero pelos Vosso FeedBack.


Paulo Aboim Pinto
Odivelas - Portugal