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