Rui Gaspar

Those who cannot remember the past are condemned to repeat it

Benfica, Porto e Sporting no Android

February 16th, 2012

As minhas ultimas aplicação para o mercado Android.
Com estas aplicações podes seguir todas as informações do teu clube.
As aplicações tem todas as mesmas funcionalidades. Sendo elas as seguintes:

  • Notícias: esta é a pagina de entrada das aplicações, onde se pode ver um resumo das ultimas noticias de cada clube. Entrado na noticia, pode-se aceder á noticia completa como está no site fonte da noticia, sem ter a necessidade de sair da aplicação.
  • Jogos ao vivo: aqui poderá acompanhar o jogo ao vivo do seu clube, bem como todos os outros jogos de outras equipas e de outros campeonatos que estão a decorrer no momento.
  • Calendário: podes ver os últimos jogos realizados, bem como os próximos jogos de cada competição
  • Classificação: aqui podes ver qual a classificação de cada equipa e o numero de jogos realizados.
  • Equipa: por fim, no ultimo separador é possível aceder ao plantel com alguma informação de cada jogador.

Actualmente estou a trabalhar em novas funcionalidades para todas as aplicação bem como o melhoramento das existentes. Das novas funcionalidades que sairão na próxima versão destacam-se as seguintes:
Chat: para poderes comunicar com toda a comunidade de adeptos do teu clube.
Videos: para aceder por exemplo aos últimos jogos e golos do seu clube.
Configuração: ecrã onde podes configurar vários parâmetros da aplicação.

Actualmente as aplicações estão no top do market Android na categoria de desporto, como se pode ver na imagem em baixo.

Actualmente a aplicação encontra-se desenvolvida para os seguintes clubes:

  • Benfica
  • Porto
  • Sporting
  • Manchester United
  • Manchester City
  • Tottenham
  • Chelsea
  • Arsenal
  • Liverpool
  • Corinthians
  • Vasco
  • Fluminense
  • Flamengo
  • São Paulo
  • Botafogo
  • Santos
  • Palmeiras
  • Grêmio
  • Juventus
  • Milan
  • Lazio
  • Internazionale
  • Roma

Duvidas, sugestões e opiniões são sempre bem vindas e ajudam as aplicações a crescer.

Rádio Sines – Android App

December 7th, 2011

A minha primeira aplicação desenvolvida para uma rádio local. Trata-se da Rádio Sines que é um emissor da Associação Humanitária dos Bombeiros Voluntários de Sines, a emitir da cidade de Sines para todo o Litoral Alentejano, na frequência 95.9 FM.
Com esta aplicação, os ouvintes da rádio, poderão aceder através do telemóvel ás noticias disponibilizadas no site da rádio, bem como ouvir a emissão online, podcasts e aceder á programação diária.

Podem deixar aqui as vossas criticas e sugestões.





Link: Market Android

Marés – Android App

December 7th, 2011

Uma aplicação desenvolvida depois de ter sentido a necessidade de saber o estado da maré. Esta aplicação tem o estado das marés de mais de 9000 pontos em todo o mundo. Actualmente está disponível em português, inglês, francês, italiano, espanhol e alemão.

Podem deixar aqui as vossas criticas e sugestões.



Link: Market Android

Euro Milhões – Android App

September 3rd, 2011

A minha primeira aplicação desenvolvida para o sistema operativo Android. A aplicação permite ver a ultima chave do euro milhões, bem como todas as chaves anteriores desde a criação do jogo em 2004. Permite também ao utilizador adicionar as suas chaves com que joga frequentemente e activar alertas. Esses alertas são executados nos dias de jogo e disparam alertas com o valor do prémio. É possível também configurar uma série da parâmetros como a língua, a moeda bem como parâmetros relativos aos alertas.

Podem deixar aqui as vossas criticas e sugestões.





Link: Download para Android

Como animar o GridLength das linhas e colunas de uma Grid

February 19th, 2011

Há dias precisei de fazer uma animação em XAML que alterasse o tamanho de duas colunas de uma grid.

Para fazer esta animação poderiam-se colocar as duas colunas com o Width a Auto e alterar o tamanho dos componentes que estão em cada coluna, o que iria forçar a alteração do tamanho de cada coluna e assim fazer a animação pretendida. Mas esta abordagem tem a desvantagem de não se podermos usar, por exemplo, {0.8*} , já que não podemos usar um GridLength num width ou height de um FrameworkElement.

Para resolver este problema podemos alterar directamente o GridLength utilizando uma AnimationTimeline. Em baixo encontra-se uma a class GridLengthAnimation. Para usar esta class apenas teremos de definir a propriedade To que irá indicar qual será o novo tamanho da linha ou coluna. Também se pode definir a propriedade From, mas esta é opcional e caso não se defina é usado o valor actual como ponto de partida.

using System;
using System.Windows;
using System.Windows.Media.Animation;

namespace GridLengthAnimationTest
{
    internal class GridLengthAnimation : AnimationTimeline
    {
        static GridLengthAnimation() { }

        public GridLength? From
        {
            get
            {
                return (GridLength?)GetValue(FromProperty);
            }
            set
            {
                SetValue(FromProperty, value);
            }
        }

        public static readonly DependencyProperty FromProperty =
            DependencyProperty.Register("From", typeof(GridLength?), typeof(GridLengthAnimation), new PropertyMetadata(null));

        public GridLength To
        {
            get
            {
                return (GridLength)GetValue(ToProperty);
            }
            set
            {
                SetValue(ToProperty, value);
            }
        }

        public static readonly DependencyProperty ToProperty =
            DependencyProperty.Register("To", typeof(GridLength), typeof(GridLengthAnimation));

        public override Type TargetPropertyType
        {
            get
            {
                return typeof(GridLength);
            }
        }

        protected override Freezable CreateInstanceCore()
        {
            return new GridLengthAnimation();
        }

        public override object GetCurrentValue(object defaultOriginValue, object defaultDestinationValue, AnimationClock animationClock)
        {
            double toVal = To.Value;
            double fromVal;

            if (this.From == null)
            {
                fromVal = defaultOriginValue != null && defaultOriginValue is GridLength ? ((GridLength)defaultOriginValue).Value : 0;
            }
            else
            {
                fromVal = this.From.GetValueOrDefault().Value;
            }

            if (animationClock.CurrentProgress != null)
            {
                if (fromVal > toVal)
                {
                    return new GridLength((1 - animationClock.CurrentProgress.Value) * (fromVal - toVal) + toVal, To.IsStar ? GridUnitType.Star : GridUnitType.Pixel);
                }
                else
                {
                    return new GridLength(animationClock.CurrentProgress.Value * (toVal - fromVal) + fromVal, To.IsStar ? GridUnitType.Star : GridUnitType.Pixel);
                }
            }

            return null;
        }
    }
}

A seguir encontra-se um exemplo de como utilizar a animação em XAML. Este exemplo possui uma tabela com duas colunas e dois botões que permitem expandir ou restaurar o tamanho da primeira coluna.

<Window x:Class="GridLengthAnimationTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Local="clr-namespace:GridLengthAnimationTest"
Title="GridLengthAnimation" Height="350" Width="525">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition x:Name="FirstColumnDefinition" Width="150"/>
                <ColumnDefinition x:Name="SecondColumnDefinition" Width="50"/>
            </Grid.ColumnDefinitions>
            <Border Background="Red" Grid.Column="0"/>
            <Border Background="Blue" Grid.Column="1"/>
        </Grid>

        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="1" >
            <Button Content="Expandir" Margin="10" >
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <Local:GridLengthAnimation Duration="0:0:1" Storyboard.TargetName="FirstColumnDefinition" Storyboard.TargetProperty="Width" To="450" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>
            <Button Content="Restaurar" Margin="10">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <Local:GridLengthAnimation Duration="0:0:1" Storyboard.TargetName="FirstColumnDefinition" Storyboard.TargetProperty="Width" To="150" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>
        </StackPanel>
    </Grid>
</Window>

Se quiserem usar esta animação em code-behind, poderão fazer também de uma  forma muito simples:

FirstColumnDefinition.BeginAnimation(
        ColumnDefinition.WidthProperty,
        new GridLengthAnimation()
    {
        To = new GridLength(0.8, GridUnitType.Star),
        Duration = TimeSpan.FromSeconds(1)
    });

Foogle – Motor de Pesquisa Semântico sobre Futebol

February 7th, 2010

Com o crescimento exponencial da informação que existe na internet, torna-se essencial que os resultados dos motores de busca sejam os que o utilizador pretende encontrar. As pesquisas baseadas em match de palavras-chave são muito limitadas, uma vez que obriga o utilizador a dizer ao motor de pesquisa exactamente o que pretende encontrar. Isto funciona se o utilizador souber o que encontrar, mas se o utilizador não souber, torna o processo de pesquisa muito mais ineficiente.
Para contornar este problema, existe a pesquisa semântica, onde não apenas pesquisamos palavras, mas também conceitos.
Com este intuito, desenvolveu-se este projecto que tem como finalidade a pesquisa semântica num domínio específico.

Poderá descarregar aqui o artigo referente a este projecto: Relatorio Foogle

Aqui poderá encontrar o código fonte da solução: http://code.assembla.com/WebSemantica/subversion/nodes

Realidade Virtual no Cinema

February 7th, 2010


Desde o “experience theater” de Morton Heilig nos anos 50, passando por filmes como TRON e Brainstorm, até às salas de cinema 3D, ao IMAX e ao Futuroscope, a realidade virtual há já muito tempo representa uma parte importante no cinema. É verdade que a definição de realidade virtual como uma experiência interactiva que exige do utilizador o uso dos 5 sentidos vai um pouco contra a ideia do cinema como experiência estática que só estimula a visão e a audição. No entanto, isso não nos impede de pensar no Sensorama, com a sua imersão dos 5 sentidos, como “o cinema do futuro”, ou de representar uma realidade virtual de elevadíssimo realismo no argumento dos próprios filmes, ou ainda de projectar filmes com imagens e som 3D de maneira a imergir os espectadores numa realidade virtual parcial mas muitíssimo realista.

Desde que, o actor e director, Antonin Artaud descreveu pela primeira vez, em 1938, o teatro como “la réalite virtuelle”, tanto o conceito como a tecnologia que o acompanha têm vindo a evoluir consideravelmente, o mesmo acontecendo com a sua aplicação na área do cinema. Esta evolução tem sido de tal maneira rápida que muito do que se tinha como sonhos e ideias extravagantes é hoje uma realidade, só possível graças a técnicas cada vez mais avançadas de filmagem, com várias câmaras em posições e com ângulos diferentes, captação de movimentos reais, através de uma variedade de sensores, edição de imagem por computador, etc.

Para além de filmes como The Matrix e ExistenZ, criados, respectivamente, pelos irmãos Wachowski e David Cronenberg em 1999, que representam uma realidade virtual de tal maneira realista que nos levam a considerar a sua plausibilidade, existem ainda inúmeras salas de cinema 3D onde podemos imergir em imagens que saem do ecrã, com ecrãs enormes que abrangem por completo a nossa visão, como o IMAX Dome, com cadeiras que ganham vida para nos dar a ideia de movimento, como no Futuroscope, e até com cheiros, tudo para nos fazer entrar num outro mundo, numa realidade virtual.

Poderá descarregar aqui o artigo completo Realidade Virtual no Cinema

Web-Site Front-End Analysis

July 30th, 2009

Web-Site_Front-End_Analysis_Big

Com o crescente volume de utilização da internet e da expansão dos sites, um dos factores que muitas vezes dita o sucesso ou insucesso de um website é o seu desempenho. Um utilizador não está para esperar 10 segundos que um site abra sem lhe dar algum tipo de feedback.

Por este motivo é interessante analisar e avaliar como são feitos alguns websites relativamente às boas políticas de programação, design e organização das componentes. Para esta análise seguimos as regras que Steve Souders aconselha para a criação de websites.

Utilizamos também duas ferramentas para ajudar a avaliar estes pontos e fizemos uma descrição e comentário aos 5 websites escolhidos.

Pode ver aqui o documento: Web-Site Front-End Analysis

Mobilidade IP – Simulação

July 30th, 2009

MobilidadeIp_Big

O conceito de mobilidade ip caracteriza-se pela possibilidade de uma máquina poder manter o seu IP original quando se desloca para uma rede “estrangeira”, evitando a perda de eventuais ligações com outros dispositivos.

Para simular um sistema de mobilidade em redes ip foi desenvolvidas duas aplicações que podem ser descarregadas aqui.

Modelação e Jogo no Campus do ISEC

July 30th, 2009

ISEC_Big

O meu projecto de conclusão da Licenciatura em Engenharia Informática, consistiu na modelação do campus do ISEC e utiliza-lo como recinto de um jogo de carros.

Poderá ver aqui um vídeo de demonstração do jogo.

[youtube id="rFge01jHI_8"]

Se quiser poderá descarregar o jogo aqui.

Ou pode descarregar apenas o modelo em VRML aqui e visualizar através do  player Cortona3D Viewer.

Sueca 1.2

July 30th, 2009

sueca

Depois andar a pesquisar na internet e não encontrar um jogo de sueca para passar um bocado de tempo, decidi desenolver um jogo de sueca.

Este jogo tem as regras da sueca que normalmente são usadas em torneios em portugal.

Espero que gostem, podem encontrar o jogo no seguinte link.

Crazy Mouse

July 30th, 2009

crazymouse

Uma brincadeira que podem fazer aos vossos amigos. Um simples programa que faz o cursor do rato fique “maluco”.

Para voltar ao normal tem de colocar o rato no canto superior esquerdo durante cerca de 5 segundos, ou então reiniciar o computador :p

Link

WebServer Benchmarking

April 6th, 2009

Actualmente o apache lidera o ranking de utilização dos Web Servers. No entanto existem outros Web Servers que não tendo o grau de popularidade do apache conseguem ter um desempenho muito interessante.

Por esse motivo procedi a um teste de desempenho a 4 Web Servers, sendo eles: Apache httpd, Nginx, LiteSpeed e Lighttpd.
Para este teste fora usadas duas máquinas. Uma fazendo de servidor e outra simulando os clientes, usando uma ferramenta de medição (JMeter).

Todos os servidores foram testados usando uma páginas estática (HTML) e uma página dinâmica (PHP) com uma repetição de 5 vezes em cada teste para impedir possíveis erros circunstanciais.

O primeiro teste mostra Throughput (respostas por segundo) dos diversos servidores quando sujeitos a 100 clientes simultâneamente com cada um a pedir 500 páginas e com a opção KeepAlive activa.

webserver_benchmark_throughput
Fig.1 – Throughput (Requests/Sec)

Podemos também ver o estado da memória e do CPU do servidor durante a execução de cada teste.

webserver_benchmark_serverload
Fig.2 – ServerLoad

Com estes testes, verificamos que existem outras boas alternativas ao Apache. Para uso de conteúdo estático o nginx teve um desempenho muito bom, enquanto que para conteúdo dinâmico, o apache continuar a ser a melhor opção. Mas temos que ter em mente que a maioria dos sites, tem na sua maioria conteúdo estático (imagens, css, html, js, etc.).
Relativamente a carga de CPU, o nginx também é o que menos CPU consome, o que se vem reforçar a liderança deste benchmarking.
O único ponto a apontar ao Nginx, foi o facto de a sua instalação não ser simples, e requereu alguma pesquisa principalmente para colocar o modulo php a funcionar.