Skip to content

Commit

Permalink
Add CV in md format with a walker
Browse files Browse the repository at this point in the history
  • Loading branch information
Theo-Hafsaoui committed Aug 30, 2024
1 parent 1a5ac05 commit b95a330
Show file tree
Hide file tree
Showing 10 changed files with 131 additions and 0 deletions.
5 changes: 5 additions & 0 deletions cv/eng/education.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- [Master's in Computer Science, Software and Data Engineering](https://www.univ-tln.fr/Master-Informatique-parcours-Developpement-et-Ingenierie-des-Donnees.html)
- University of Toulon, 2024

- [Bachelor's in Computer Science](https://www.univ-tln.fr/Licence-Informatique-parcours-Informatique.html)
- University of Toulon, 2022
15 changes: 15 additions & 0 deletions cv/eng/project.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
**Agenda**
*Java, JavaFX, PostgreSQL, Github [GitHub Repository](https://github.com/MasterDID2022/sopra-project-LHD)*

- Developed in Java and JavaFX, using PostgreSQL for database management.
- Project executed in an agile environment, emphasizing GitHub Flow, Pull Requests, Kanban, and Continuous Integration for effective collaboration.


**Epigraphy Tools**
*Java, Hibernate, Docker, REST, JWT [GitHub Repository](https://github.com/MasterDID2022/epicTool)*

- Designed and developed an epigraphy annotation tool for deep learning using Java, Docker, REST, and JWT.
- Separated the front-end and back-end using Docker with container orchestration via Docker-Compose.
- Established secure communication between the front-end and back-end through a RESTful API with JWT tokens.
- Worked as a team in an agile context, utilizing the SCRUM method and applying DevOps practices for efficient and collaborative development.

2 changes: 2 additions & 0 deletions cv/eng/skill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Languages
## Java, Python, Ruby, Golang, SQL, JavaScript, HTML/CSS
20 changes: 20 additions & 0 deletions cv/eng/work.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
**Back-End Intern**
*February 2024 -- August 2024*
[Qonto](https://qonto.com/en)
*End of studies internship*

- Contributed within a Cross Functional Team (CFT) to the standardization and extension of the onboarding process for four new markets (Austria, Netherlands, Belgium, Portugal). From design to implementation, in coordination with stakeholders (Risk, AML, Product), to ensure a smooth and compliant integration, with deployment scheduled for August.
- Led the extraction of back-office logic from a *Ruby* monolith into a microservice, deploying in a trunk-based development environment. Collaborated closely with the Ops teams throughout the process. Monitored production using **Grafana, Sentry, ArgoCD, and Kibana** to ensure quality and reliability, enhancing system maintainability by decoupling microservices.
- Improved the reliability and observability of microservices by completing the tracing mechanisms and implementing Service Level Objectives (SLOs).

**Full Stack Developer**
*June 2023 -- September 2023*
[Coexel](https://www.coexel.com/en)
*Internship then Fixed-Term Contract*

- Designed and developed a Python service for Named Entity Recognition (**NER**) using spaCy to efficiently identify named entities in 92M+ documents. Utilization of **Elasticsearch** for storage and optimized document search, enabling users to gain further insights into monitored themes.
- Rewrote an old website monitoring system created in Java to **Python**, enhancing maintainability and system performance.
- Implemented a **RESTful** API in Python using **FastAPI**, providing increased flexibility and scalability for data management and requests.
- Created a deployment pipeline with **Docker** and Github Actions, streamlining the deployment process and enabling faster and more robust updates.
- Significantly improved performance by reducing the number of GET requests from 5 to 1, resulting in an 85% faster display

Empty file added cv/fr/education.md
Empty file.
Empty file added cv/fr/project.md
Empty file.
2 changes: 2 additions & 0 deletions cv/fr/skill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Languages
## Java, Python, Ruby, Golang, SQL, JavaScript, HTML/CSS
1 change: 1 addition & 0 deletions cv/fr/work.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Test
32 changes: 32 additions & 0 deletions internal/walker/cv.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package walker

import (
"os"
"path/filepath"
"strings"
)

// walkCV traverses the directory tree starting at root and returns a map where
// the keys are the relative paths without the .md extension and the values are
// the contents of the markdown files.
func walkCV(root string) (map[string]string, error) {
fileMap := make(map[string]string)
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() && strings.HasSuffix(info.Name(), ".md") {
relativePath := strings.TrimSuffix(strings.TrimPrefix(path, root+string(os.PathSeparator)), ".md")
content, err := os.ReadFile(path)
if err != nil {
return err
}
fileMap[relativePath] = string(content)
}
return nil
})
if err != nil {
return nil, err
}
return fileMap, nil
}
54 changes: 54 additions & 0 deletions internal/walker/cv_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package walker

import (
"os"
"path/filepath"
"testing"
)

func TestWalkCV(t *testing.T) {
rootDir := t.TempDir()
paths := []struct {
relativePath string
content string
}{
{"eng/education.md", "Education"},
{"eng/project.md", "Project"},
{"fr/education.md", "Education"},
{"fr/work.md", "Work"},
}

for _, p := range paths {
fullPath := filepath.Join(rootDir, p.relativePath)
if err := os.MkdirAll(filepath.Dir(fullPath), os.ModePerm); err != nil {
t.Fatalf("Failed to create directories: %v", err)
}
if err := os.WriteFile(fullPath, []byte(p.content), os.ModePerm); err != nil {
t.Fatalf("Failed to write file: %v", err)
}
}

result, err := walkCV(rootDir)
if err != nil {
t.Fatalf("walkCV failed: %v", err)
}

expected := map[string]string{
"eng/education": "Education",
"eng/project": "Project",
"fr/education": "Education",
"fr/work": "Work",
}

for key, expectedValue := range expected {
if result[key] != expectedValue {
t.Errorf("Expected %s to be %q, got %q", key, expectedValue, result[key])
}
}

for key := range result {
if _, found := expected[key]; !found {
t.Errorf("Unexpected key found: %s", key)
}
}
}

0 comments on commit b95a330

Please sign in to comment.