Experiences
2024
Software Engineer (follow-up)
Teads, Montpellier, France
Sept. 2024 - today
Stack: Scala, Typescript, Git, GitHub Actions, Terraform, Jenkins, AWS, Grafana & Loki, Kibana- Finished the encoding service migration
- Finishing the cleanup
- Decommissioned unused services
-
Migrated the CI/CD pipeline from Jenkins to GitHub Actions & adapted it
to better match our needs
- Allows more than one CI at the same time
- Cached & reuse as much as possible to save CI time
- Implemented an auto-retry / queue mechanism to cope with a GitHub Actions limitation
Assistant Software Engineer
Teads, Montpellier, France
Mar. 2024 - Aug.2024
Stack: Scala, Typescript, Git, Terraform, Jenkins, AWS, Kibana-
Migration of the service we use to encode ads from a legacy,
discontinued API to a newer one. Refactored the flow, optimized SQL
transactions (batch writes), and parallelized what could be. The goal
was to have no downtime during the migration.
- Double run between the old and new implementation to find discrepancies
- Began cleaning up some "legacy" parts to reduce accidental complexity and improve development speed
- A/B test-driven development
End of studies project
Conecs.io, Montpellier, France
Dec. 2023 - Feb. 2024
Stack: Rust, Advanced Encryption Methods- POC on a privacy-preserving storage for clinical data with special encryption methods. The goal is to allow re-using & sharing data easily across multiple actors, only if the patient allows it.
- Reviewed several research papers to understand how these methods work, their use cases, limitations, risks, etc.
-
Implemented a small POC with Rust:
- Extremely CPU-efficient
- A POC isn't used in production, so it was a nice opportunity :)
2023
Software Engineer Intern
Scala Center, Lausane, Switzerland
Apri. 2023 - Aug. 2023
Tech: Scala, JVM, Scala-Java interop, ReflectionImproved the Scala debugger in VS Code with a new evaluation mode, using runtime reflection. It is limited to expressions that can be correctly evaluated at runtime (e.g., in the case of an overridden method, using reflection we could pick a method different from what the compiler would have chosen).
The evaluation is performed in 2 phases:
- Validate the expression: correct syntax, evaluable using reflection. Transform the expression AST into a custom ADT representing the expression, that can later be evaluated.
- Evaluate the expression.
This evaluation includes a pre-evaluation mode. Instead of using the compile-time type of a value, if possible we evaluate it and use its runtime type. It eases the access to runtime information during debugging.
I particularly enjoyed the compiler-related part of the project: ASTs, type checking, overload resolution, etc.
As a secondary project, I helped with the implementation of Hot Code Replacement (HCR). This means that we can now launch a debug session, change the code, and just reload the session (so we keep the "progress" made +/-) instead of restarting from the beginning.
2022
Assistant Software Engineer
Teads, Montpellier, France
Jun. 2022 - Aug. 2022
Stack: Scala, Typescript, gRPC, React, Git, GitHub, Cypress, Jenkins2-month internship where I worked on the V2 of their demo application. I did some backend development with Scala & the Typelevel ecosystem (Cats-effect, doobie...) followed by a more front-end part (in the end I worked on both backend & frontend at the same time).
For each feature I developed, I was responsible for the whole lifecycle: code, test, deploy, refactor, fix bugs...