Saltar para: Posts [1], Pesquisa [2]

SAPO developers blog

SAPO developers blog

XATA 2010

Janeiro 27, 2010

jac

Terá lugar a 19 e 20 de Maio a XATA 2010 - XML: Aplicações e Tecnologias Associadas.

O SAPO irá apoiar este evento e alguns dos seus elementos deverão estar presentes. Afinal de contas, temos uma arquitectura SOA.

O evento, a realizar em Vila do Conde, já tem página online, onde se encontra a chamada para apresentações, com 1 de Março como data limite de submissão de artigos.

SAPO Fotos em 2009

Janeiro 25, 2010

jac

O SAPO está organizado internamente em pequenas equipas, que vão desde 1 a uns 7 elementos técnicos, dependendo do projecto.

 

Apesar da grande sinergia entre as várias equipas, cada qual cuida do seu projecto como se fosse a coisa mais importante do seu trabalho.

 

A equipa do SAPO Fotos, com 3 elementos técnicos, teve um ano em cheio (como de resto todas as equipas tiveram).

 

O Pedro Fonseca, um dos membros da equipa, escreve-nos um pouco sobre este ano:


"2009 foi um ano atarefado para a equipa do SAPO Fotos. Apesar de poucas mudanças verdadeiramente visíveis para o utilizador final, nos bastidores estivemos ocupados a melhorar muito e a preparar a plataforma para o futuro. Os nossos dois maiores milestones foram o lançamento de um novo Core para o serviço com, entre outros, uma camada de abstracção de dados e um sistema de cache completamente renovado. Os componentes principais transversais ao serviço foram portados para utilizar este novo Core. Com isto preparámos todo o serviço para escalar melhor em número de conteúdos por utilizador, na prática fazendo com que navegar em álbuns com milhares de imagens seja tão rápido como navegar em álbuns de poucas dezenas. Conseguimos igualmente com isto aumentar bastante a disponibilidade do serviço, que deixou de estar sobrecarregado em alturas de pico do dia; e por outro lado demos ao serviço mecanismos para lidar com situações de carga extrema, não o deixando degradar ao ponto da indisponibilidade. Falando ainda de navegação, melhorámos muito a experiência de navegação nas listagens de imagens e álbuns. As pesquisas efectuadas no serviço são neste momento praticamente instantâneas, quer por tags, quer por termos.

O segundo milestone chave para o ano de 2009 foi uma nova arquitectura de entrega de imagens, desenvolvida internamente e chamada quickCachr. Esta arquitectura nova tomou em conta as especificidades do serviço SAPO Fotos para a) servir imagens da forma mais eficiente possível introduzindo um novo esquema de URLs; b) terminar a necessidade de envolver dois requests para servir cada imagem; c) suprimir uma falha de segurança na anterior arquitectura; d) tornar independente do serviço SAPO Fotos, e de uma eventual indisponibilidade sua, o servir de imagens para destinos externos (blogs, sites notícias, etc); e) melhorar drasticamente os tempos de carregamento de imagens, principalmente em páginas com bastantes imagens em simultâneo; f) continuar a suportar transparentemente os - até então - 2.5M de imagens disponíveis com links espalhados pela web. Esta nova arquitectura introduziu uma melhoria drástica em termos de alta disponibilidade e alta escalabilidade no serviço, até aqui aí não existente de todo.

Entre estes dois milestones grandes, a equipa teve ainda tempo de lançar o arquivo de imagens completo da Agência Lusa - um acervo histórico importantíssimo sob a perspectiva da identidade do nosso país, juntamente com uma funcionalidade de pesquisa avançada, não existente no serviço SAPO Fotos original. Lançámos um novíssimo upload múltiplo via web - esta talvez a novidade mais visível para o utilizador final, replicando o comportamento da nossa velhinha aplicação desktop de upload de imagens para Windows e acabando de vez com o anterior upload web que só permitia o envio de 8 imagens de cada vez. Neste momento é possível importar de uma só vez um conjunto grande de imagens. Estivemos envolvidos no desenvolvimento e lançamento do SAPO Campus, uma plataforma baseada em vários dos serviços SAPO, desenhada para integrá-los e fornecê-los no contexto do ensino superior. Estivemos envolvidos no desenvolvimento e lançamento do SAPO Fotos no MEO, introduzindo uma funcionalidade que permite a um cliente MEO ver imagens do SAPO Fotos na sua televisão. Aproveitámos e melhorámos os nossos processos de deployment e rollout para produção, automatizando grandemente estas tarefas e tornando-as menos propícias a erros. Melhorámos a eficiência da nossa API em cerca de 500%. Introduzimos bugfixes (e possivelmente com isso novos bugs :-) em centenas de situações identificadas internamente e por utilizadores nossos.

Foi um ano verdadeiramente em cheio. Perspectivamos para este novo surpresas 'mais' visíveis. :-) Vão estando atentos para mais novidades."

Conferências: JSConf.eu, CSS Summit e YAPC::EU::2009

Janeiro 21, 2010

jac

Tipicamente, após termos participado numa conferência, um dos participantes realiza uma pequena apresentação interna sobre o evento.

São eventos que vão desde o GSMA Mobile World Congress à eTech, da WWW ao London Hack Day.

Na passada Quarta-feira tivemos mais três apresentações: a JSConf.eu, o CSS Summit e a YAPC::EU::2009.

JSConf.eu

O Diogo Antunes foi a Berlim participar na JSConf.eu, a conferência europeia de JavaScript, e falou-nos sobre algumas das apresentações a que assistiu.

O evento durou dois dias e contou com cerca de 200 participantes.

Foi um sucesso.

Nomes como Dion Almer, Remy Sharp, Thomas Fuchs e John Resig realizaram apresentações sobre imensos temas dentro do mundo do JavaScript e o Diogo fez-nos agora um resumo daquilo que viu na conferência.

CSS Summit

Este é um evento diferente: é um evento online, que permite inscrições individuais ou de grupo.

O SAPO adquiriu um bilhete de grupo e os colaboradores interessados no tema reuniram-se numa sala de reuniões num Sábado.

O André Luís, um dos participantes nessa sala de reuniões, fez-nos um resumo dos temas a que assistiram, bem como de várias impressões relativas a eventos deste tipo (foram principalmente vantagens).

YAPC::EU::2009

A maior conferência europeia de Perl deslocou-se pela segunda vez a Portugal, e desta feita a Lisboa.

O Armando Reis foi um dos participantes do SAPO (eram cerca de duas dezenas) a participar no evento e fez-nos agora uma apresentação sobre o evento falando de temas quentes, oradores e do que se pôde aprender por lá.

O plano de conferências para 2010 já se começa a compor.

SAPO Developer Network, versão de Dezembro de 2009

Janeiro 18, 2010

jac

Recentemente criámos a SAPO Developer Network, um desdobrável (890mm x 585mm) com alguns dos serviços do SAPO para melhor os dar a conhecer ao público do Codebits.

 

 

Para quem não esteve no Codebits, a versão em pdf já se encontra online (3M).

 

Segue-se agora um trabalho de análise para decidir quais os serviços a incluir (faltam muitos) e quais os que poderão ter que ser removidos por uma questão de espaço. A próxima versão deverá surgir num futuro próximo.

Encontrar a maior diferença entre dois números numa lista

Janeiro 11, 2010

jac

Recentemente colocámos neste blog um post com um dos problemas que usamos em muitas das entrevistas de 2009 no SAPO.

O problema consistia em desenhar (escrever) um algoritmo para resolver o seguinte problema, em pseudo-código:

    "Vais receber uma lista de números. Encontra a maior diferença entre quaisquer dois números nessa lista."

Hoje vamos analisar algumas das soluções com que nos deparámos nas entrevistas.

Estranhamente, uma solução que é apresentada com frequência é a seguinte:

    maior_diferenca = 0;

    for ( i = 1 ; i < length lista ; i++ ) {
        if ( lista[i] - lista[i-1] > maior_diferenca ) {
            maior_diferenca = lista[i] - lista[i-1];
        }
    }

    return maior_diferenca;

Esta é uma solução que não apresenta o resultado correcto e que demonstra uma série de problemas no raciocínio do candidato (problemas esses que não iremos abordar aqui, mas é de facto uma situação comum).

Eis a solução mais básica que poderia ser apresentada (seguindo-se a lista de problemas que a mesma apresenta):

    maior_diferenca = 0;

    for ( i = 0 ; i < length lista ; i++ ) {
        for ( j = 0 ; j < length lista ; j++ ) {
            if ( abs( lista[i] - lista[j] > maior_diferenca ) ) {
                maior_diferenca = abs( lista[i] - lista[j] );
            }
        }
    }

    return maior_diferenca;

Problemas de eficiência:

 

  • Para cada dois números na lista, a diferença é calculada duas vezes
  • Em cada um dos ciclos, o resultado de "length lista" é calculado n vezes


Erros e corner-cases:

  • O valor 0 é retornado caso a lista seja vazia ou tenha apenas um elemento.


Vejamos agora a mesma solução já com alguns destes problemas resolvidos:

    maior_diferenca = 0;

    tamanho = length lista;

    for ( i = 0 ; i < tamanho ; i++ ) {
        for ( j = i+1 ; j < tamanho ; j++ ) {
            diferenca = abs( lista[i] - lista[j] );
            if ( diferenca_actual > maior_diferenca ) ) {
                maior_diferenca = diferenca_actual;
            }
        }
    }

    return maior_diferenca;

Apesar de esta solução ainda não estar a prever os casos da lista vazia ou da lista com um único elemento, esta já é uma solução mais eficiente que a anterior.

Ainda assim, um bom candidato consegue, desde o início, compreender que não necessita realizar tantas operações, já que lhe basta encontrar o maior e o menor elemento da lista e calcular a diferença entre dois.

Infelizmente, isto faz com que alguns candidatos apresentem uma solução semelhante à seguinte:

    lista = sort  lista;
    max   = last  lista;
    min   = first lista;
    return max - min;

Apesar da solução estar correcta, não é de todo eficaz, dada a complexidade de um sort numa lista com, por exemplo, 20,000 valores.

Eis uma outra solução seguindo esta ideia, ainda com alguns problemas:

    min = 0;
    max = 0;

    for ( i = 0; i < tamanho; i++ ) {
        if ( lista[i] < min ) {
            min = lista[i];
        }

        if ( lista[i] > max ) {
            max = lista[i];
        }
    }

    return max - min;

Esta é uma solução que não funciona, uma vez que basta que todos os números sejam positivos ou negativos para retornar o valor errado.

Uma melhor solução seria algo no seguinte sentido:

    min = null;
    max = null;

    for ( i = 0; i < tamanho; i++ ) {
        if ( min == null or lista[i] < min ) {
            min = lista[i];
        }

        if ( max == null or lista[i] > max ) {
            max = lista[i];
        }
    }

    if ( min != null and max != null ) {
        return max - min;
    }
    else {
        # ...
    }

Entre todas estas versões, há ainda mais uma série de variantes que outros candidatos apresentam.

Há também questões específicas de cada linguagem que podem fazer com que pequenas partes devam ser alteradas por uma questão de eficiência.

Ao ser confrontado com este problema, o candidato ideal:

 

  • sabe que a lista pode ser vazia ou ter apenas um elemento
  • sabe que a lista pode ser enorme (e não tenta fazer um sort)
  • sabe que a lista recebida pode ter elementos que não sejam números
  • percebe quase imediatamente que basta encontrar o máximo e o mínimo da lista
  • consegue sugerir uma ou mais soluções para quando não é possível encontrar uma diferença
  • resolve o problema rápida e eficazmente, e sabe explicar porque fez o que fez

Convém ainda deixar claro que este é apenas um problema que fez parte de um grande conjunto de desafios colocados aos candidatos e que não é apenas a resolução de um simples problema que dita o recrutamento ou não da pessoa.

2009 no SAPO

Janeiro 04, 2010

jac

2009 foi, como todos são, um ano em cheio no SAPO.

 

Lançámos imensos sites e portais: SAPO Ambiente, SAPO SMS, SAPO Kids, SAPO Casamentos, Procuro emprego, SAPO Jogos, SAPO Livros, Sites SAPO, SAPO Desporto, SAPO Web Messenger, Arquivo da Lusa no SAPO Fotos.

 

Relançámos sites e serviços como o SAPO Ajuda, o SAPO TV, o SAPO Emprego e o Login SAPO, que inclusivé passou a suportar o Cartão de Cidadão.

 

Adicionámos imensas novas funcionalidades a plataformas já existentes: o SAPO Spot recebeu novos widgets e microblogging, o SAPO Messenger recebeu o Fala comigo e foi integrado no SAPO Mail, o SAPO Mapas passou a ter itinerários com transportes públicos e visitas virtuais, etc.

 

Realizámos grandes operações de restruturação a serviços como o SAPO Fotos e o SAPO Mapas.

 

Redesenhámos a presença do SAPO no Meo.

 

Lançámos novos conteúdos em versão Mobile: o Auto SAPO, o SAPO Mapas, o Casa SAPO, o Manchetes do SAPO, entre outros.

 

Colocámos no ar novos sites de apoio ao cliente, para dar suporte aos utilizadores, para os educar em termos de segurança, para obter feedback que nos ajude a melhorar.

 

Lançámos uma nova versão da homepage.

 

Lançámos o Pond.

 

Lançámos o Puny URL.

 

Lançámos o SAPO Widgets.

 

A equipa das Mobile Applications expandiu o seu portfólio de aplicações para smartphones, que agora inclui a Banca SAPO, o Cine SAPO, o TMN Pond e o Kiosk, disponíveis para uma série de plataformas, incluíndo Android, Nokia WRT e iPhone.

 

Nos Labs do SAPO lançámos o SAPO Campus, o Tendências e o Verbatim.

 

Recrutámos mais de 40 pessoas só para a área técnica (a equipa tem agora mais de 150 pessoas).

 

Realizámos uma dezena de SAPO Sessions e outras tantas acções de formação, algumas das quais com lugares abertos para o público em geral.

 

Tivemos nas nossas instalações uma série de pessoas com as quais partilhamos imenso: Anne van Kesteren (HTML 5), Brian LeRoux (PhoneGap), Rasmus Lerdorf (criador do PHP), Jan Lehnardt (CouchDB), Janet Read (HCI com crianças), Larry Wall (criador do Perl), etc.

 

Escrevemos. No Developers, no OpenID no SAPO, no Identity, no Segurança online, no LibSAPO.js, no User eXperience.

 

Melhorámos vários dos nossos processos, quer pela adição de sangue novo à equipa (que nos traz sempre novas ideias) quer pelo esforço de organização interna que culmina em coisas como as guidelines internas de usabilidade e acessibilidade.

 

Organizámos novamente o Summerbits e o Codebits.

 

Estivemos presentes em mais de uma dezena de conferências.

 

Reforçámos a nossa presença em Angola, Moçambique e Cabo Verde.

 

E muito, muito mais.

 

Foi um ano de trabalho árduo mas compensador.

 

Para 2010, que começa agora, já há grandes planos.

 

Ao trabalho.

Mais sobre mim

Subscrever por e-mail

A subscrição é anónima e gera, no máximo, um e-mail por dia.

Arquivo

  1. 2012
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  1. 2011
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  1. 2010
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D
  1. 2009
  2. J
  3. F
  4. M
  5. A
  6. M
  7. J
  8. J
  9. A
  10. S
  11. O
  12. N
  13. D