Porto · University Fernando Pessoa
Christophe Soares
I teach computer engineering. I research IoT, computer vision and AI. And, as a consultant, I help organisations with AI, web security and software.
Now
- I coordinate the BSc in Computer Engineering at UFP.
- Researcher at LIACC, University of Porto, on the Precision Plastics and EMBRACE projects.
- In July I co-coordinated a Ciência Viva self-driving cars bootcamp for secondary-school students.
In numbers
- 2009 at UFP since
- 199 student works supervised, from BSc to PhD
- 142 BSc final projects
- 56 examination panels
Code to learn from
Projects I wrote for classes and for activities with students. They are on GitHub to read, run and change.
Keep scrolling to see them go by, or drag them sideways.
-
Excerpt from 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
Three days of robotics with the JetRacer for secondary-school students: from the first turn to SLAM with LIDAR.
-
Excerpt from 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
A clock in React with class components, state and a visit counter kept in the browser session.
-
Excerpt from 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
A photo gallery split into services in Go, Node and Python, wired by RabbitMQ and put together with Docker Compose.
-
Excerpt from 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 with Webpack 5 Module Federation: one page made of four independent React applications.
-
Excerpt from 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
A simulation of an emergency department: patients arrive, are triaged by colour and wait for a free doctor.
-
Excerpt from ArtificialIntelligenceGame/app.js
const detections = await faceapi .detectSingleFace(video, new faceapi.TinyFaceDetectorOptions({ inputSize: 416, scoreThreshold: 0.3 })) .withFaceLandmarks() .withFaceExpressions();ArtificialIntelligenceGame
The Emotion Challenge: a game that reads facial expressions through the camera, in the browser and as a desktop app.
-
Excerpt from 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
JPA and Hibernate fundamentals with Spring Boot: entities, relationships, JPQL and transactions, as exercises.
-
Excerpt from 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
Good and bad JPA/Hibernate performance practices side by side, each one timed.
-
Excerpt from 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 A to-do list in React with Vitest and Testing Library tests, commented line by line.
-
Excerpt from 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 Signing in with a Google account in a React app in TypeScript, using the OAuth authorisation-code flow.
-
+57
And 57 more public repositories, from JavaScript exercises to Spring Boot APIs.
All repositories on GitHub
On the web
Sites and applications I built that are in use, from my own products to tools for the university.
-
Platform
cumlaude
Assessment of master’s and doctoral examinations: each panel member scores blind, criterion by criterion, and the minutes come out in Word, ready to sign.
cumlaude.online
-
App · beta
Zenbox
Connects to Gmail and puts first the emails that deserve a reply, with the reason for each priority. The drafts, written by AI, wait to be reviewed and sent.
zenbox.pt
-
Website · UFP
Engenharia Informática · UFP
The website of the BSc and MSc in Computer Engineering at UFP, in Portuguese and English: what you learn, where it leads and how to apply.
informatica.ufp.pt
-
Internal platform · UFP
Candidaturas GAI
How UFP validates funding applications, from the team’s form to the opinion of the Research Support Office and the reviews by the Rector and the Presidency.
candidaturas-gai.ufp.pt
-
Desktop app · Flutter
CiênciaVitae → Excel
Gathers the public CVs of UFP’s teaching staff from CiênciaVitae into a 27-sheet Excel workbook, for the Research Support Office. For macOS, Windows and Linux.
Download from GitHub
-
Game · UFP
Roleta UFP
A game for UFP’s interactive whiteboard at higher-education fairs and open days: pick one of 15 degrees, spin the wheel and answer questions about it, with Fernando Pessoa calling over passers-by.
feira-qualifica-roleta.vercel.app
-
AI game · desktop app
Desafio das Emoções
A game for events and fairs in which AI reads the player’s facial expressions and gestures through the camera, in five challenges: show emotions, gestures, lightning sequence, lie detector and fool the AI. For macOS, Windows and Linux.
Download from GitHub
-
Website
Massport
The website of an osteopathy, massage and wellbeing practice in Santa Maria da Feira, with its services, offers and appointment booking.
massport.pt
-
Research website
LIACC @ UFP
The website of the LIACC pole at UFP, the Artificial Intelligence and Computer Science Laboratory: projects, publications, members and news.
liacc.ufp.pt
-
And others
There are more projects, built for companies, that stay off this page under confidentiality agreements.
Research
Ubiquitous computing and IoT, computer vision, machine learning and blockchain, usually in the service of smart spaces and health support systems.
Researcher at LIACC, University of Porto, since 2017
The full career, supervisions and examination panels are in the academic CV. cienciavitae.pt
Areas
-
Ubiquitous computing
Computing that blends into everyday spaces, with context-aware systems.
-
IoT and edge
Sensor networks and edge computing to monitor industry and the environment.
-
Computer vision
Object and event detection, and medical image analysis.
-
Machine learning
Deep and reinforcement learning applied, from wearables to web applications.
-
Blockchain
Diplomas, self-sovereign identity, revocation and electronic voting.
-
Smart spaces and health
Technology that helps people live independently and safely.
Projects
-
Precision Plastics
ActiveIoT and AI to make plastic recycling more precise.
-
EMBRACE
ActivePreventing age-related decline: cognitive training, exercise, nutrition and digital literacy.
-
ESG4NPO
CompletedAn AI-assisted tool for sustainability in non-profit organisations.
-
Secure Horizons
CompletedFederated learning and the cloud to protect health data.
Recent publications
-
2024
-
JournalComputer vision
Object and Event Detection Pipeline for Rink Hockey Games Future Internet · doi:10.3390/fi16060179 -
JournalIoT and edge
An Efficient Edge Computing-Enabled Network for Used Cooking Oil Collection Sensors · doi:10.3390/s24072236 -
JournalComputer vision
Advancements in Glaucoma Diagnosis: The Role of AI in Medical Imaging Diagnostics · doi:10.3390/diagnostics14050530 -
ConferenceMachine learning
A Reinforcement Learning Based Recommender System Framework for Web Apps EPIA 2024 · doi:10.1007/978-3-031-73497-7_34
-
-
2023
-
JournalBlockchain
Blockchain-Based Electronic Voting: A Secure and Transparent Solution Cryptography · doi:10.3390/cryptography7020027
-
-
2022
-
JournalBlockchain
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 -
ConferenceMachine learning
Classification of Table Tennis Strokes in Wearable Device using Deep Learning ICAART 2022 · doi:10.5220/0010871100003116 -
ConferenceIoT and edge
An IoT Sensing System for Managing Industrial FOG-Separators SmartNets 2022 · doi:10.1109/SmartNets55823.2022.9993981
-
Consulting
I help companies and institutions in Porto and the north of Portugal apply artificial intelligence, protect their web applications and build the software they need.
-
Applied AI
Computer vision and machine learning put to work on a concrete problem.
-
Web security
Security reviews of web applications and servers.
-
Web development
Custom websites and web applications, fast and accessible.
-
IoT and edge
Sensors, connected devices and edge processing.
Contact
For classes, supervision, research collaboration or consulting projects, email is the best way to reach me.
Praça 9 de Abril, 349
4249-004 Porto, Portugal