Propostas de Estágio 2013/2014

DEI - FCTUC
Gerado a 2024-11-21 21:35:12 (Europe/Lisbon).
Voltar

Titulo Estágio

State-Based Programming in PQL

Área Tecnológica

Engenharia de Software

Local do Estágio

Coimbra

Enquadramento

A FeedZai S.A. é uma empresa de software especializada em processamento de dados em tempo real, sendo um spin-off tecnológico da Universidade de Coimbra. Em particular, a FeedZai desenvolve um produto chamado FeedZai Pulse que permite o tratamento de grandes volumes de dados em tempo real. Atestando o potencial disruptivo da sua tecnologia, foi "Cool Vendor" da Gartner Research, uma das maiores empresas de análise do mercado de IT a nível mundial e também reconhecida como uma das "Top-20 Smart Companies in Europe". Possui atualmente escritórios em Coimbra, Lisboa, Londres e Redwood City, Califórnia.

Uma das peças centrais do produto chama-se PKernel ("Pulse Kernel"). Este módulo é um motor de Complex Event Processing (CEP, cf. http://en.wikipedia.org/wiki/Complex_event_processing) que permite fazer correlação e agregação de eventos em tempo real, gerando resultados de acordo com as especificações do utilizador. Associado ao motor existe uma linguagem chamada PQL (Pulse Query Language) que permite especificar que tratamento deve ser feito a estes eventos. Por exemplo, a seguinte query:

transactions_sec =
from transactions[10 min]
group by bank
select count()/(10*60)

gera em memória um dicionário em que para cada entrada a chave é um nome de um banco e o valor é o número de transações por segundo feitas por esse banco durante os últimos 10 minutos. Neste caso é utilizada uma janela móvel de 10 minutos para fazer o cálculo.

Mais detalhes sobre a linguagem e o motor de processamento podem ser encontrados neste endereço:
https://docs.feedzai.com/display/pulse/Pulse+Query+Language

Objetivo

Tal como existe atualmente, a linguagem PQL é uma linguagem de processamento de eventos pura. As primitivas básicas são streams, eventos, janelas temporais, valores contínuos e dicionários. Estas primitivas são compostas usando queries que podem ser mais ou menos complexas.

O principal objectivo deste estágio é dotar a linguagem de suporte para programar utilizando entidades (i.e., objetos/classes) e estados. Desta forma os utilizadores podem passar a exprimir o processamento que querem que seja feito em termos de ações/queries sobre objetos, que podem estar em determinados estados, em vez de estarem limitados a exprimir o processamento em termos de primitivas de baixo nível. Fazendo uma analogia: enquanto que a linguagem C é procedimental, em que os programas são sempre escritos em termos de estruturas de dados mais ou menos simples e ações diretas sobre estas, a linguagem C++, orientada aos objetos, permite encapsular informação e exprimir os programas em termos de classes/objetos e ações a serem realizados sobre estas. O nível de abstração e poder associado é bastante maior. Neste estágio quer-se fazer o equivalente a isto para a linguagem PQL.

Em termos tecnológicos, o PKernel está implementado em Scala (front-end/compilador), sendo o backend/runtime implementado em Java. Os candidatos a este estágio deverão ter conhecimentos fortes de:
- Scala
- Java
- Compiladores/Linguagens de Programação

Ao mesmo tempo, todo o design do PKernel é orientado à performance e ao processamento de dados em muito grande escala. Como tal, conhecimentos de computação de alto desempenho e programação concorrente são também desejáveis.

Plano de Trabalhos - Semestre 1

Objectivos:
Durante este semestre existem dois objectivos principais:
- Integrar o estagiário na estrutura do PKernel, código, e a forma como este processa dados
- Desenhar a linguagem a ser implementada sobre PQL (baseada em entidades e estados)

Abordagem:
O PKernel é um módulo de software bastante complexo no qual está implementado: um compilador, um ambiente de execução e um gerador de código nativo. Para garantir o sucesso do projeto é importante garantir que o estagiário percebe a estrutura interna do módulo, como funciona, e como pode ser estendido. Este semestre tem dois objectivos principais. Por um lado, integrar o estagiário no funcionamento deste módulo. Para isso ser-lhe-á pedido que numa primeira fase estude o código existente e, numa segunda fase, a estenda com funcionalidade simples. Assim, pretende-se que no final do primeiro semestre esteja em condições de poder implementar o suporte necessário. Ao mesmo tempo, durante este semestre, será desenhado a linguagem e suporte a implementar para ser possível fazer programação baseada em entidades e estados.

Será adoptada uma abordagem iterativa de desenvolvimento, baseada em Scrum, em que em cada ciclo de desenvolvimento (duas a três semanas) serão definidas experiências ou funcionalidades a implementar, assim como procedimentos de avaliação. Existirão reuniões semanais de acompanhamento do trabalho.

Atividades a desenvolver durante o semestre:
- Integração na empresa e familiarização com o produto Pulse e com o PKernel.
- Estudo detalhado do módulo PKernel e do seu funcionamento
- Extensão do PKernel com novas funcionalidades de complexidade média/reduzida
- Desenho da linguagem a ser implementada sobre PQL para entidades/estados
- Escrita do relatório intermédio de estágio

Plano de Trabalhos - Semestre 2

Objectivo:
O principal objectivo deste semestre é implementar a linguagem baseada em entidades/estados definida durante o primeiro semestre.

Abordagem:
Será adoptada uma abordagem iterativa de desenvolvimento, baseada em Scrum, em que em cada ciclo de desenvolvimento (duas a três semanas) serão definidas experiências ou funcionalidades a implementar, assim como procedimentos de avaliação. Existirão reuniões semanais de acompanhamento do trabalho.

Atividades a desenvolver durante o semestre:
- Implementação da linguagem baseada em estados/entidades
- Criação de workbench de testes para a linguagem definida
- Avaliação e optimização de performance do sistema
- Escrita do relatório de estágio

Condições

Estágio Remunerado

Observações

É possível encontrar mais informação sobre o produto e a empresa nos seguintes links:
http://www.feedzai.com
https://docs.feedzai.com/display/pulse/

Existe também flexibilidade para que o estágio seja realizado nas nossas instalações de Lisboa.

Orientador

Eng. Ricardo Ferreira
ricardo.ferreira@feedzai.com 📩