Porto · Universidade Fernando Pessoa
Christophe Soares
Ensino engenharia informática. Investigo IoT, visão por computador e IA. E, como consultor, ajudo organizações com IA, segurança web e software.
Agora
- Dirijo a licenciatura em Engenharia Informática da UFP.
- Investigo no LIACC, da Universidade do Porto, e trabalho nos projetos Precision Plastics e EMBRACE.
- Em julho, ajudei a coordenar um bootcamp de carros autónomos do Ciência Viva para alunos do secundário.
Em números
- 2009 na UFP desde
- 199 trabalhos orientados, da licenciatura ao doutoramento
- 142 projetos finais de licenciatura
- 56 júris de provas académicas
Código para aprender
Projetos que escrevi para as aulas e para atividades com alunos. Estão no GitHub para ler, correr e alterar.
Continua a descer para os ver passar, ou arrasta-os para o lado.
-
Excerto de CienciaVivaUFP2026/day1/robot_kit.py
def andar_frente(segundos, velocidade=VELOCIDADE_PADRAO): """ Anda em frente, em linha reta, durante 'segundos'. Exemplo: robot.andar_frente(1.5) """ _car.steering = _val_steering(0.0) _car.throttle = _val_throttle(velocidade) time.sleep(segundos) parar()CienciaVivaUFP2026
Três dias de robótica com o JetRacer para alunos do secundário: da primeira curva ao SLAM com LIDAR.
-
Excerto de ReactClockSession/src/App.js
handleVisits = (event) => { let visits = this.state.visits; if (event.target.name === "plus") { visits++; this.setState({ visits: visits }); } else if (this.state.visits > 0) { visits--; this.setState({ visits: visits }); } sessionStorage.setItem("visits", visits); };ReactClockSession
Um relógio em React com componentes de classe, estado e um contador de visitas guardado na sessão do browser.
-
Excerto de MicroServicesDemo/docker-compose.yml
auth-service: build: ./auth-service environment: DB_HOST: postgres DB_NAME: auth_db JWT_SECRET: supersecretkey-change-in-production # teaching moment: don't hardcode secrets PORT: "8001" networks: - demo-netMicroServicesDemo
Uma galeria de fotografias partida em serviços em Go, Node e Python, ligados por RabbitMQ e montados com Docker Compose.
-
Excerto de MicroFrontend/shell/webpack.config.js
new ModuleFederationPlugin({ name: 'shell', remotes: { appA: 'appA@http://localhost:3001/remoteEntry.js', appB: 'appB@http://localhost:3002/remoteEntry.js', appC: 'appC@http://localhost:3003/remoteEntry.js', }, })MicroFrontend
Micro frontends com o Module Federation do Webpack 5: uma página feita de quatro aplicações React independentes.
-
Excerto de EmergencySimulation/app.js
// Generate random triage level const generateTriageLevel = () => { const rand = Math.random(); if (rand < 0.05) return 'RED'; if (rand < 0.15) return 'ORANGE'; if (rand < 0.40) return 'YELLOW'; if (rand < 0.75) return 'GREEN'; return 'BLUE'; };EmergencySimulation
Uma simulação de um serviço de urgência: doentes chegam, são triados por cor e esperam por médicos livres.
-
Excerto de ArtificialIntelligenceGame/app.js
const detections = await faceapi .detectSingleFace(video, new faceapi.TinyFaceDetectorOptions({ inputSize: 416, scoreThreshold: 0.3 })) .withFaceLandmarks() .withFaceExpressions();ArtificialIntelligenceGame
O Desafio das Emoções: um jogo que lê a expressão facial pela câmara, no browser e numa app de secretária.
-
Excerto de JavaHibernateFundamentals/model/Student.java
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<Enrollment> enrollments = new ArrayList<>(); @ManyToMany(fetch = FetchType.LAZY) @JoinTable( name = "student_courses", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "course_id") ) private Set<Course> courses = new HashSet<>();JavaHibernateFundamentals
Os fundamentos de JPA e Hibernate com Spring Boot: entidades, relações, JPQL e transações, em exercícios.
-
Excerto de JavaHibernateFormation/repository/UserRepository.java
@EntityGraph(value = "User.withDepartment", type = EntityGraph.EntityGraphType.FETCH) @Query("SELECT u FROM User u WHERE u.id = :id") Optional<User> findByIdWithDepartment(@Param("id") Long id); @Query("SELECT u FROM User u JOIN FETCH u.department d WHERE u.email = :email") Optional<User> findByEmailWithDepartment(@Param("email") String email);JavaHibernateFormation
As boas e as más práticas de desempenho em JPA/Hibernate lado a lado, com o tempo de cada uma medido.
-
Excerto de React-simple-test-component/__tests__/TodoItem.test.jsx
// Mock the TodoContext module vi.mock('../../context/TodoContext', () => ({ useTodoContext: () => ({ toggleTodo: vi.fn(), // Mock for toggling todo completion status deleteTodo: vi.fn(), // Mock for deleting a todo editTodo: vi.fn() // Mock for editing a todo's text }), TodoProvider: ({ children }) => children }));React-
simple- test- component Uma lista de tarefas em React com testes em Vitest e Testing Library, comentados linha a linha.
-
Excerto de react-google-signin/src/App.tsx
function App() { return ( <GoogleOAuthProvider clientId={process.env.REACT_APP_GOOGLE_CLIENT_ID || ''}> <div className="App"> <header className="App-header"> <h1>React Google Sign-in</h1> <GoogleButton /> </header> </div> </GoogleOAuthProvider> ); }react-
google- signin Entrar com a conta Google numa aplicação React em TypeScript, com o fluxo OAuth por código de autorização.
-
+57
E mais 57 repositórios públicos, de exercícios de JavaScript a APIs em Spring Boot.
Todos os repositórios no GitHub
Na web
Sites e aplicações que desenvolvi e estão em uso, de produtos próprios a ferramentas para a universidade.
-
Plataforma
cumlaude
Avaliação de provas de mestrado e doutoramento: cada membro do júri pontua às cegas, critério a critério, e a ata sai em Word pronta a assinar.
cumlaude.online
-
Aplicação · beta
Zenbox
Liga-se ao Gmail e põe primeiro os emails que merecem resposta, com o motivo de cada prioridade. Os rascunhos, escritos por IA, ficam para rever e enviar.
zenbox.pt
-
Site · UFP
Engenharia Informática · UFP
O site da licenciatura e do mestrado em Engenharia Informática da UFP, em português e inglês: o que se aprende, as saídas e as candidaturas.
informatica.ufp.pt
-
Plataforma interna · UFP
Candidaturas GAI
A validação das candidaturas a financiamento da UFP, do formulário da equipa ao parecer do Gabinete de Apoio à Investigação e às apreciações do Reitor e da Presidência.
candidaturas-gai.ufp.pt
-
Aplicação de secretária · Flutter
CiênciaVitae → Excel
Recolhe os currículos públicos dos docentes da UFP no CiênciaVitae e junta-os num Excel de 27 folhas, para o Gabinete de Apoio à Investigação. Para macOS, Windows e Linux.
Descarregar no GitHub
-
Jogo · UFP
Roleta UFP
Um jogo para o quadro interativo da UFP em feiras do ensino superior e dias abertos: escolhe-se um dos 15 cursos, roda-se a roleta e responde-se a perguntas sobre ele, com o Fernando Pessoa a chamar quem passa.
feira-qualifica-roleta.vercel.app
-
Site
Massport
O site de um espaço de osteopatia, massagens e bem-estar em Santa Maria da Feira, com os serviços, as promoções e a marcação de consultas.
massport.pt
-
Site de investigação
LIACC @ UFP
O site do polo do LIACC na UFP, o laboratório de inteligência artificial e ciência de computadores: projetos, publicações, membros e notícias.
liacc.ufp.pt
-
E outros
Há mais projetos, feitos para empresas, que ficam fora desta página por acordos de confidencialidade.
Investigação
Computação ubíqua e IoT, visão por computador, aprendizagem automática e blockchain, quase sempre ao serviço de espaços inteligentes e de sistemas de apoio à saúde.
Investigador no LIACC, Universidade do Porto, desde 2017
O percurso completo, as orientações e os júris estão no CV académico. cienciavitae.pt
Áreas
-
Computação ubíqua
Computação que se integra nos espaços do dia a dia, com sistemas sensíveis ao contexto.
-
IoT e edge
Redes de sensores e computação na periferia para monitorizar a indústria e o ambiente.
-
Visão por computador
Deteção de objetos e de eventos, e análise de imagem médica.
-
Aprendizagem automática
Aprendizagem profunda e por reforço aplicada, dos wearables às aplicações web.
-
Blockchain
Diplomas, identidade auto-soberana, revogação e voto eletrónico.
-
Espaços inteligentes e saúde
Tecnologias que ajudam as pessoas a viver de forma independente e segura.
Projetos
-
Precision Plastics
Em cursoIoT e IA para tornar a reciclagem de plásticos mais precisa.
-
EMBRACE
Em cursoPrevenir o declínio associado à idade: treino cognitivo, exercício, nutrição e literacia digital.
-
ESG4NPO
ConcluídoUma ferramenta assistida por IA para a sustentabilidade de organizações sem fins lucrativos.
-
Secure Horizons
ConcluídoAprendizagem federada e cloud para proteger dados de saúde.
Publicações recentes
-
2024
-
RevistaVisão por computador
Object and Event Detection Pipeline for Rink Hockey Games Future Internet · doi:10.3390/fi16060179 -
RevistaIoT e edge
An Efficient Edge Computing-Enabled Network for Used Cooking Oil Collection Sensors · doi:10.3390/s24072236 -
RevistaVisão por computador
Advancements in Glaucoma Diagnosis: The Role of AI in Medical Imaging Diagnostics · doi:10.3390/diagnostics14050530 -
ConferênciaAprendizagem automática
A Reinforcement Learning Based Recommender System Framework for Web Apps EPIA 2024 · doi:10.1007/978-3-031-73497-7_34
-
-
2023
-
RevistaBlockchain
Blockchain-Based Electronic Voting: A Secure and Transparent Solution Cryptography · doi:10.3390/cryptography7020027
-
-
2022
-
RevistaBlockchain
Analysis of Revocation Mechanisms for Blockchain Applications and a Proposed Model Based in Self-Sovereign Identity Journal of Information Technology Management · doi:10.22059/jitm.2022.87848 -
ConferênciaAprendizagem automática
Classification of Table Tennis Strokes in Wearable Device using Deep Learning ICAART 2022 · doi:10.5220/0010871100003116 -
ConferênciaIoT e edge
An IoT Sensing System for Managing Industrial FOG-Separators SmartNets 2022 · doi:10.1109/SmartNets55823.2022.9993981
-
Consultoria
Ajudo empresas e instituições do Porto e do Norte de Portugal a aplicar inteligência artificial, a proteger as suas aplicações web e a construir o software de que precisam.
-
IA aplicada
Visão por computador e aprendizagem automática ao serviço de um problema concreto.
-
Segurança web
Revisão de segurança de aplicações e servidores web.
-
Desenvolvimento web
Sites e aplicações web à medida, rápidos e acessíveis.
-
IoT e edge
Sensores, dispositivos ligados e processamento no edge.
Contacto
Para aulas, orientações, colaborações em investigação ou projetos de consultoria, o email é o melhor caminho.
Praça 9 de Abril, 349
4249-004 Porto