Spaces:
Running
Running
Médéric Hurier (Fmind)
commited on
Commit
·
13a7d69
1
Parent(s):
5b41ebf
refactoring
Browse files- .env.sample +1 -0
- .gitignore +3 -12
- .python-version +1 -1
- README.md +6 -7
- database.py +0 -107
- database/554fcd7c-6a4f-4732-bde1-c069ca314316/data_level0.bin +0 -3
- database/554fcd7c-6a4f-4732-bde1-c069ca314316/header.bin +0 -3
- database/554fcd7c-6a4f-4732-bde1-c069ca314316/length.bin +0 -3
- database/554fcd7c-6a4f-4732-bde1-c069ca314316/link_lists.bin +0 -0
- database/chroma.sqlite3 +0 -3
- files/linkedin.html +0 -0
- files/linkedin.md +198 -237
- files/linkedin.txt +0 -1937
- invoke.yaml +1 -23
- lib.py +0 -72
- pyproject.toml +6 -14
- requirements-dev.txt +1 -5
- requirements-main.txt +2 -0
- requirements.txt +232 -8
- resume.code-workspace +5 -7
- tasks/__init__.py +8 -9
- tasks/{check.py → checks.py} +5 -7
- tasks/{clean.py → cleans.py} +10 -6
- tasks/convert.py +0 -37
- tasks/{format.py → formats.py} +4 -5
- tasks/{install.py → installs.py} +11 -5
- tasks/{run.py → runs.py} +7 -3
.env.sample
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
OPENAI_API_KEY=TODO
|
.gitignore
CHANGED
@@ -1,14 +1,5 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
# gradio
|
4 |
-
flagged/
|
5 |
-
gradio_cached_examples/
|
6 |
-
|
7 |
-
# mypy
|
8 |
.mypy_cache/
|
9 |
-
|
10 |
-
# python
|
11 |
__pycache__/
|
12 |
-
|
13 |
-
# venv
|
14 |
-
.venv/
|
|
|
1 |
+
.env
|
2 |
+
.venv/
|
|
|
|
|
|
|
|
|
|
|
3 |
.mypy_cache/
|
4 |
+
.ruff_cache/
|
|
|
5 |
__pycache__/
|
|
|
|
|
|
.python-version
CHANGED
@@ -1 +1 @@
|
|
1 |
-
3.
|
|
|
1 |
+
3.12
|
README.md
CHANGED
@@ -1,15 +1,14 @@
|
|
1 |
---
|
2 |
title: Resume
|
3 |
emoji: 🧑🏻💻
|
4 |
-
|
5 |
-
|
|
|
6 |
sdk: gradio
|
7 |
-
python_version: 3.
|
8 |
-
sdk_version:
|
9 |
app_file: app.py
|
10 |
fullWidth: false
|
11 |
-
pinned:
|
12 |
license: mit
|
13 |
---
|
14 |
-
|
15 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
1 |
---
|
2 |
title: Resume
|
3 |
emoji: 🧑🏻💻
|
4 |
+
short_description: AI Assistant for Fmind's Resume.
|
5 |
+
colorFrom: indigo
|
6 |
+
colorTo: blue
|
7 |
sdk: gradio
|
8 |
+
python_version: 3.12
|
9 |
+
sdk_version: 4.29.0
|
10 |
app_file: app.py
|
11 |
fullWidth: false
|
12 |
+
pinned: true
|
13 |
license: mit
|
14 |
---
|
|
|
|
database.py
DELETED
@@ -1,107 +0,0 @@
|
|
1 |
-
#!/usr/bin/env python3
|
2 |
-
"""Manage the project database."""
|
3 |
-
|
4 |
-
# %% IMPORTS
|
5 |
-
|
6 |
-
import argparse
|
7 |
-
import logging
|
8 |
-
import re
|
9 |
-
import sys
|
10 |
-
import typing as T
|
11 |
-
|
12 |
-
import lib
|
13 |
-
|
14 |
-
# %% LOGGING
|
15 |
-
|
16 |
-
logging.basicConfig(
|
17 |
-
level=logging.DEBUG,
|
18 |
-
format="[%(asctime)s][%(levelname)s] %(message)s",
|
19 |
-
)
|
20 |
-
|
21 |
-
# %% PARSING
|
22 |
-
|
23 |
-
PARSER = argparse.ArgumentParser(description=__doc__)
|
24 |
-
PARSER.add_argument("files", type=argparse.FileType("r"), nargs="+")
|
25 |
-
PARSER.add_argument("--database", type=str, default=lib.DATABASE_PATH)
|
26 |
-
PARSER.add_argument("--collection", type=str, default=lib.DATABASE_COLLECTION)
|
27 |
-
|
28 |
-
# %% FUNCTIONS
|
29 |
-
|
30 |
-
|
31 |
-
def segment_text(text: str, pattern: str) -> T.Iterator[tuple[str, str]]:
|
32 |
-
"""Segment the text in title and content pair by pattern."""
|
33 |
-
splits = re.split(pattern, text, flags=re.MULTILINE)
|
34 |
-
pairs = zip(splits[1::2], splits[2::2])
|
35 |
-
return pairs
|
36 |
-
|
37 |
-
|
38 |
-
def import_file(
|
39 |
-
file: T.TextIO,
|
40 |
-
collection: lib.Collection,
|
41 |
-
encoding_function: T.Callable,
|
42 |
-
max_output_tokens: int = lib.ENCODING_OUTPUT_LIMIT,
|
43 |
-
) -> tuple[int, int]:
|
44 |
-
"""Import a markdown file to a database collection."""
|
45 |
-
n_chars = 0
|
46 |
-
n_tokens = 0
|
47 |
-
text = file.read()
|
48 |
-
filename = file.name
|
49 |
-
segments_h1 = segment_text(text=text, pattern=r"^# (.+)")
|
50 |
-
for h1, h1_text in segments_h1:
|
51 |
-
logging.debug('\t- H1: "%s" (%d)', h1, len(h1_text))
|
52 |
-
segments_h2 = segment_text(text=h1_text, pattern=r"^## (.+)")
|
53 |
-
for h2, content in segments_h2:
|
54 |
-
content_chars = len(content)
|
55 |
-
content_tokens = len(encoding_function(content))
|
56 |
-
logging.debug('\t\t- H2: "%s" (%d)', h2, content_chars)
|
57 |
-
id_ = f"{filename} # {h1} ## {h2}" # unique doc id
|
58 |
-
document = f"# {h1}\n\n## {h2}\n\n{content.strip()}"
|
59 |
-
metadata = {"filename": filename, "h1": h1, "h2": h2}
|
60 |
-
assert (
|
61 |
-
content_tokens < max_output_tokens
|
62 |
-
), f"Content is too long ({content_tokens}): #{h1} ##{h2}"
|
63 |
-
collection.add(ids=id_, documents=document, metadatas=metadata)
|
64 |
-
n_tokens += content_tokens
|
65 |
-
n_chars += content_chars
|
66 |
-
return n_chars, n_tokens
|
67 |
-
|
68 |
-
|
69 |
-
def main(args: list[str] | None = None) -> int:
|
70 |
-
"""Main function of the script."""
|
71 |
-
# parsing
|
72 |
-
opts = PARSER.parse_args(args)
|
73 |
-
# database
|
74 |
-
database_path = opts.database
|
75 |
-
logging.info("Database path: %s", database_path)
|
76 |
-
client = lib.get_database_client(path=database_path)
|
77 |
-
logging.info("- Reseting database client: %s", client.reset())
|
78 |
-
# encoding
|
79 |
-
encoding_function = lib.get_encoding_function()
|
80 |
-
logging.info("Encoding function: %s", encoding_function)
|
81 |
-
# embedding
|
82 |
-
embedding_function = lib.get_embedding_function()
|
83 |
-
logging.info("Embedding function: %s", embedding_function)
|
84 |
-
# collection
|
85 |
-
database_collection = opts.collection
|
86 |
-
logging.info("Database collection: %s", database_collection)
|
87 |
-
collection = client.create_collection(
|
88 |
-
name=database_collection, embedding_function=embedding_function
|
89 |
-
)
|
90 |
-
# files
|
91 |
-
for i, file in enumerate(opts.files):
|
92 |
-
logging.info("Importing file %d: %s", i, file.name)
|
93 |
-
n_chars, n_tokens = import_file(
|
94 |
-
file=file, collection=collection, encoding_function=encoding_function
|
95 |
-
)
|
96 |
-
logging.info(
|
97 |
-
"- Docs imported from file %s: %d chars | %d tokens", i, n_chars, n_tokens
|
98 |
-
)
|
99 |
-
# return
|
100 |
-
return 0
|
101 |
-
|
102 |
-
|
103 |
-
# %% ENTRYPOINTS
|
104 |
-
|
105 |
-
|
106 |
-
if __name__ == "__main__":
|
107 |
-
sys.exit(main())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
database/554fcd7c-6a4f-4732-bde1-c069ca314316/data_level0.bin
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:f18abd8c514282db82706e52b0a33ed659cd534e925a6f149deb7af9ce34bd8e
|
3 |
-
size 6284000
|
|
|
|
|
|
|
|
database/554fcd7c-6a4f-4732-bde1-c069ca314316/header.bin
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:effaa959ce2b30070fdafc2fe82096fc46e4ee7561b75920dd3ce43d09679b21
|
3 |
-
size 100
|
|
|
|
|
|
|
|
database/554fcd7c-6a4f-4732-bde1-c069ca314316/length.bin
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:fc19b1997119425765295aeab72d76faa6927d4f83985d328c26f20468d6cc76
|
3 |
-
size 4000
|
|
|
|
|
|
|
|
database/554fcd7c-6a4f-4732-bde1-c069ca314316/link_lists.bin
DELETED
File without changes
|
database/chroma.sqlite3
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
version https://git-lfs.github.com/spec/v1
|
2 |
-
oid sha256:3b9f1ba4fe737d92cd7ad2230f67c0a9dd793ad0185a1a38d9ef5e9618e6923b
|
3 |
-
size 1671168
|
|
|
|
|
|
|
|
files/linkedin.html
DELETED
The diff for this file is too large to render.
See raw diff
|
|
files/linkedin.md
CHANGED
@@ -5,86 +5,80 @@
|
|
5 |
- First name: Médéric
|
6 |
- Last name: HURIER
|
7 |
- Pseudo: Fmind
|
8 |
-
-
|
9 |
-
-
|
10 |
-
- Education: University of Luxembourg
|
11 |
-
- Current position: Decathlon Technology
|
12 |
-
- Public URL: www.linkedin.com/in/fmind-dev
|
13 |
- Industry: Technology, Information and Internet
|
14 |
-
-
|
15 |
-
-
|
|
|
|
|
16 |
|
17 |
## Websites
|
18 |
|
19 |
-
-
|
|
|
|
|
20 |
- Twitter: https://twitter.com/fmind_dev
|
21 |
-
-
|
22 |
-
-
|
23 |
|
24 |
## About
|
25 |
|
26 |
-
|
27 |
-
September 2024. Thank you for your understanding.
|
28 |
|
29 |
-
|
30 |
-
Intelligence and Machine Learning are the most effective levers to make
|
31 |
-
a difference. Every day, new AI and ML solutions are released to empower
|
32 |
-
companies and individuals alike. The question is: Is your business ready
|
33 |
-
to provide the best AI/ML products for your customers?
|
34 |
|
35 |
-
I
|
36 |
-
ready to assist you in this quest. I've completed a Ph.D. in Machine
|
37 |
-
Learning and several high-end AI/ML certifications to help you build
|
38 |
-
leading data-driven services. My past experiences include working with
|
39 |
-
companies like Google, BNP Paribas, ArcelorMittal, the European
|
40 |
-
Commission, and Decathlon to frame their needs, create state-of-the-art
|
41 |
-
models and deliver AI/ML artifacts at scale.
|
42 |
-
|
43 |
-
I now work as a freelancer in Luxembourg, and I can carry out missions
|
44 |
-
remotely in other European countries. You can get in touch with me on
|
45 |
-
LinkedIn or at contact@fmind.dev. I'll be happy to collaborate with you
|
46 |
-
or discuss your favored AI/ML topics in the MLOps Community.
|
47 |
|
48 |
# Experience
|
49 |
|
50 |
-
##
|
51 |
|
|
|
52 |
- Company: Decathlon Technology
|
53 |
-
- Period:
|
54 |
- Location: Luxembourg (Hybrid)
|
55 |
-
-
|
56 |
-
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
-
|
61 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
- Location: France (Remote)
|
63 |
- Mission: Tutoring adult students to become data scientists specializing in machine learning.
|
64 |
-
-
|
65 |
-
- https://openclassrooms.com/fr/paths/793-data-scientist
|
66 |
-
- https://openclassrooms.com/fr/paths/794-machine-learning-engineer
|
67 |
-
- https://openclassrooms.com/fr/paths/795-ai-engineer
|
68 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Deep Learning · Data Science · Statistics · ChatGPT · Big Data · Jupyter · Pandas · Git · Natural Language Processing (NLP) · Scikit-Learn
|
69 |
|
70 |
-
## Senior Data Scientist & Project Manager
|
71 |
|
|
|
72 |
- Company: Cronos Europa
|
73 |
- Customer: European Commission
|
74 |
-
- Period:
|
75 |
- Location: Luxembourg (Hybrid)
|
76 |
- Mission: Enhance the ARACHNE risk scoring tool (fraud detection).
|
77 |
- Main tasks and responsibilities:
|
78 |
- Develop a new version of Arachne using data mining techniques
|
79 |
- Manage the development of the Arachne PoC/Project (SCRUM)
|
80 |
-
- Assist data scientists in their projects (Virtual Assistant, NLP,
|
81 |
-
…)
|
82 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Deep Learning · Data Science · Big Data · Agile Methodology · Project Management · Functional Programming · Jupyter · Pandas · Docker · Jira · Git · PostgreSQL · AWS SageMaker · Flask · UML · API REST · Terraform · Transformers · Natural Language Processing (NLP) · Data Engineering · Microsoft Azure Machine Learning · Neo4j
|
83 |
|
84 |
-
## Project Manager & Machine Learning Engineer
|
85 |
|
|
|
86 |
- Company: SFEIR Luxembourg
|
87 |
-
-
|
|
|
88 |
- Location: Luxembourg (Remote)
|
89 |
- Mission: Design and implement the next ML/MLOps platform on AWS and GCP.
|
90 |
- Main tasks and responsibilities:
|
@@ -99,10 +93,11 @@ or discuss your favored AI/ML topics in the MLOps Community.
|
|
99 |
- Environments: AWS (SageMaker), GCP (Vertex AI), DataBricks
|
100 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Deep Learning · Data Science · Big Data · Agile Methodology · Project Management · Functional Programming · Google Cloud Platform (GCP) · Tensorflow · MLflow · Jupyter · Pandas · Docker · Keras · Jira · Git · DataBricks · Apache Airflow · AWS SageMaker · Flask · UML · Terraform · Data Engineering · Vertex AI (GCP) · Apache Spark · Scikit-Learn · Kubernetes
|
101 |
|
102 |
-
## Data Scientist
|
103 |
|
104 |
-
-
|
105 |
-
-
|
|
|
106 |
- Location: Luxembourg (Remote)
|
107 |
- Mission: Improve the visibility and assets of SFEIR's Data Team.
|
108 |
- Main tasks and responsibilities:
|
@@ -113,11 +108,12 @@ or discuss your favored AI/ML topics in the MLOps Community.
|
|
113 |
- Create a group to write tutorials and kata on AI/ML for SFEIR developers.
|
114 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Deep Learning · Data Science · Agile Methodology · Functional Programming · Google Cloud Platform (GCP) · Tensorflow · Jupyter · Pandas · Keras · Git · MongoDB · Vertex AI (GCP) · Apache Spark · Scikit-Learn
|
115 |
|
116 |
-
## Data Scientist
|
117 |
|
118 |
-
-
|
|
|
119 |
- Customer: ArcelorMittal
|
120 |
-
- Period:
|
121 |
- Location: Luxembourg (Remote)
|
122 |
- Mission: Train and optimize machine learning models to recommend steel prices.
|
123 |
- Main tasks and responsibilities:
|
@@ -130,18 +126,20 @@ or discuss your favored AI/ML topics in the MLOps Community.
|
|
130 |
- Environment: MS-SQL, Azure Cloud, Jira, Papermill
|
131 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Data Science · Agile Methodology · Functional Programming · Jupyter · Pandas · Jira · Git · Natural Language Processing (NLP) · Scikit-Learn
|
132 |
|
133 |
-
## Research And Development Specialist
|
134 |
|
|
|
135 |
- Company: University of Luxembourg
|
136 |
-
- Period:
|
137 |
- Location: Luxembourg
|
138 |
- Mission: Management and development of Natural Language Understanding (NLU) projects for BGL BNP Paribas.
|
139 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Data Science · Big Data · Functional Programming · Tensorflow · Jupyter · Pandas · Docker · Git · PostgreSQL · Ansible · Flask · UML · JSON · API REST · Transformers · Natural Language Processing (NLP) · Apache Spark · Scikit-Learn
|
140 |
|
141 |
-
## Doctoral researcher
|
142 |
|
|
|
143 |
- Company: University of Luxembourg
|
144 |
-
- Period:
|
145 |
- Location: Luxembourg
|
146 |
- Missions:
|
147 |
- Research activities focused on Android security and artificial intelligence.
|
@@ -149,58 +147,65 @@ or discuss your favored AI/ML topics in the MLOps Community.
|
|
149 |
- Collaboration with Google, San Francisco on finding malicious Android artifacts.
|
150 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Deep Learning · Data Science · Statistics · Big Data · Cybersecurity · Functional Programming · Jupyter · Pandas · Docker · Git · NoSQL · MongoDB · PostgreSQL · ElasticSearch · Ansible · Flask · JSON · Android · API REST · Natural Language Processing (NLP) · Data Engineering · Apache Spark · Scikit-Learn
|
151 |
|
152 |
-
## Mentor for
|
153 |
|
154 |
-
-
|
155 |
-
-
|
|
|
156 |
- Location: France
|
157 |
- Mission: Tutoring adult students to become data scientists specializing in machine learning.
|
158 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Data Science · Jupyter · Pandas · Git · Flask · JSON · API REST · Scikit-Learn
|
159 |
|
160 |
-
## Security engineer specialized in log management and analysis
|
161 |
|
|
|
162 |
- Company: Clearstream
|
163 |
-
- Period:
|
164 |
- Location: Luxembourg
|
165 |
- Mission: Selection and deployment of a SIEM solution, participating in security incident response.
|
166 |
- Skills: Python · Big Data · ISO 27001 · Cybersecurity · Jupyter · Pandas · Git · ElasticSearch · Data Engineering
|
167 |
|
168 |
## Web developer and administrator
|
169 |
|
|
|
170 |
- Company: Freaxmind
|
171 |
-
- Period:
|
172 |
- Location: France
|
173 |
- Mission: Various contracts ranging from web development to software maintenance and debugging.
|
174 |
- Skills: Python · Object Oriented Programming (POO) · Git · Ansible · Flask
|
175 |
|
176 |
-
## Web Developer
|
177 |
|
|
|
178 |
- Company: Toul'embal
|
179 |
-
- Period:
|
180 |
- Location: Toul, France
|
181 |
- Mission: Extension of a Prestashop e-commerce website and creation a portfolio website with WordPress.
|
182 |
- Skills: Object Oriented Programming (POO)
|
183 |
|
184 |
-
## Web Programmer
|
185 |
|
|
|
186 |
- Company: Empreinte Studio
|
187 |
-
- Period:
|
188 |
- Location: Épernay, France
|
189 |
- Mission: Creation of modern website in PHP and MySQL with professional writers and graphic designers.
|
190 |
- Skills: Object Oriented Programming (POO) · Git
|
191 |
|
192 |
-
## Software Developer
|
193 |
|
|
|
194 |
- Company: GEOVARIANCES
|
195 |
-
- Period:
|
196 |
- Location: Avon, France
|
197 |
- Mission: Development of a geostatistic application in C++ and Qt with experienced software engineers.
|
198 |
- Skills: Object Oriented Programming (POO) · Git · UML
|
199 |
|
200 |
-
## Web Developer
|
201 |
|
|
|
202 |
- Company: CV Champagne Nicolas Feuillatte
|
203 |
-
- Period:
|
204 |
- Location: Épernay, France
|
205 |
- Mission: Integration of customer and share management modules to J.D. Edwards with PHP and Oracle.
|
206 |
- Skills: Object Oriented Programming (POO)
|
@@ -252,19 +257,30 @@ or discuss your favored AI/ML topics in the MLOps Community.
|
|
252 |
- Location: Reims (France)
|
253 |
- Period: 2003 - 2006
|
254 |
|
255 |
-
#
|
256 |
|
257 |
## MLOps Community Organizer (Luxembourg)
|
258 |
|
259 |
- Community: MLOps Community
|
260 |
- Role: Organizer
|
261 |
- Location: Luxembourg
|
262 |
-
- Period:
|
263 |
- Field: Science and Technology
|
264 |
-
-
|
265 |
-
-
|
|
|
|
|
266 |
- Link: https://www.meetup.com/luxembourg-mlops-community/
|
267 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
# Licenses & Certifications
|
269 |
|
270 |
## Machine Learning Associate
|
@@ -720,27 +736,51 @@ or discuss your favored AI/ML topics in the MLOps Community.
|
|
720 |
|
721 |
# Publications
|
722 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
723 |
## Is AI/ML Monitoring just Data Engineering? 🤔
|
724 |
|
725 |
- Publisher: MLOps Community
|
726 |
- Publication date: July 24, 2023
|
727 |
- Link: https://mlops.community/is-ai-ml-monitoring-just-data-engineering-%f0%9f%a4%94/
|
728 |
|
729 |
-
While the future of machine learning and MLOps is being debated,
|
730 |
-
|
731 |
-
|
732 |
-
assess the quality of the data that enters and exits their
|
733 |
-
pipelines, and ensure that their models generate the correct
|
734 |
-
predictions. To assist ML engineers with this challenge, several
|
735 |
-
AI/ML monitoring solutions have been developed.
|
736 |
-
In this article, I will discuss the nature of AI/ML monitoring and
|
737 |
-
how it relates to data engineering. First, I will present the
|
738 |
-
similarities between AI/ML monitoring and data engineering. Second,
|
739 |
-
I will enumerate additional features that AI/ML monitoring solutions
|
740 |
-
can provide. Third, I will briefly touch on the topic of AI/ML
|
741 |
-
observability and its relation to AI/ML monitoring. Finally, I will
|
742 |
-
provide my conclusion about the field of AI/ML monitoring and how it
|
743 |
-
should be considered to ensure the success of your AI/ML project.
|
744 |
|
745 |
## A great MLOps project should start with a good Python Package 🐍
|
746 |
|
@@ -748,14 +788,7 @@ should be considered to ensure the success of your AI/ML project.
|
|
748 |
- Publication date: June 28, 2023
|
749 |
- Link: https://mlops.community/a-great-mlops-project-should-start-with-a-good-python-package-%f0%9f%90%8d/
|
750 |
|
751 |
-
In this article, I present the implementation of a Python package on
|
752 |
-
GitHub designed to support MLOps initiatives. The goal of this
|
753 |
-
package is to make the coding workflow of data scientists and ML
|
754 |
-
engineers as flexible, robust, and productive as possible. First, I
|
755 |
-
start by motivating the use of Python packages. Then, I provide some
|
756 |
-
tools and tips you can include in your MLOps project. Finally, I
|
757 |
-
explain the follow-up steps required to take this package to the
|
758 |
-
next level and make it work in your environment.
|
759 |
|
760 |
## Fixing the MLOps Survey on LLMs with ChatGPT API: Lessons Learned
|
761 |
|
@@ -763,26 +796,11 @@ next level and make it work in your environment.
|
|
763 |
- Publication date: May 11, 2023
|
764 |
- Link: https://mlops.community/fixing-the-mlops-survey-on-llms-with-chatgpt-api-lessons-learned/
|
765 |
|
766 |
-
Large Language Model (LLM) is such an existing topic. Since the
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
this is just a new hype cycle or if organizations are truly adopting
|
772 |
-
LLMs at scale …
|
773 |
-
On March 2023, the MLOps Community issued a survey about LLMs in
|
774 |
-
production to picture the state of adoption. The survey is full of
|
775 |
-
interesting insights, but there is a catch: 80% of the questions are
|
776 |
-
open-ended, which means respondents answered the survey freely from
|
777 |
-
a few keywords to full sentences. I volunteered to clean up the
|
778 |
-
answers with the help of ChatGPT and let the community get a grasp
|
779 |
-
of the survey experiences.
|
780 |
-
In this article, I present the steps and lessons learned from my
|
781 |
-
journey to shed some light on the MLOps survey on LLMs. I’m first
|
782 |
-
going to present the goal and questions of the survey. Then, I will
|
783 |
-
explain how I used ChatGPT to review the data and standardize the
|
784 |
-
content. Finally, I’m going to evaluate the performance of ChatGPT
|
785 |
-
compared to a manual review.
|
786 |
|
787 |
## Kubeflow: The Machine Learning Toolkit for Kubernetes
|
788 |
|
@@ -802,17 +820,9 @@ compared to a manual review.
|
|
802 |
- Publication date: April 21, 2023
|
803 |
- Link: https://mlops.community/we-need-posix-for-mlops/
|
804 |
|
805 |
-
If you work on MLOps, you must navigate an ever-growing landscape of
|
806 |
-
|
807 |
-
and
|
808 |
-
Vendors and users face the same problem: How can we combine all
|
809 |
-
these tools without the combinatorial complexity of creating custom
|
810 |
-
integrations?
|
811 |
-
In this article, I propose a solution analogous to POSIX to address
|
812 |
-
this challenge. First, I motivate the creation of common protocols
|
813 |
-
and schemas for combining MLOps tools. Second, I present a
|
814 |
-
high-level architecture to support implementation. Third, I conclude
|
815 |
-
with the benefits and limitations of standardizing MLOps.
|
816 |
|
817 |
## How to install Kubeflow Pipelines v2 on Apple Silicon
|
818 |
|
@@ -820,17 +830,9 @@ with the benefits and limitations of standardizing MLOps.
|
|
820 |
- Publication date: September 24, 2022
|
821 |
- Link: https://fmind.medium.com/how-to-install-kubeflow-on-apple-silicon-3565db8773f3
|
822 |
|
823 |
-
Kubeflow Pipelines (KFP) is a powerful platform for building machine
|
824 |
-
|
825 |
-
|
826 |
-
or AWS (Kubeflow on AWS). However, installing KFP on Apple Silicon
|
827 |
-
(macOS 12.5.1 with Apple M1 Pro) proved to be more challenging than
|
828 |
-
I imagined. Thus, I wanted to share my experience and tips to
|
829 |
-
install KFP as easily as possible on your shiny Mac.
|
830 |
-
In this article, I present 4 steps to install Kubeflow on Apple
|
831 |
-
Silicon, using Rancher Desktop for setting up Docker/Kubernetes. In
|
832 |
-
the end, I list the problems I encountered during the installation
|
833 |
-
of Kubeflow Pipelines.
|
834 |
|
835 |
## The Programming Trade-Off: Purpose, Productivity, Performance
|
836 |
|
@@ -838,13 +840,9 @@ of Kubeflow Pipelines.
|
|
838 |
- Publication: August 15, 2019
|
839 |
- Link: https://fmind.medium.com/3p-principle-purpose-productivity-performance-630bed7623fc
|
840 |
|
841 |
-
As programmers, we are continuously looking for languages that are
|
842 |
-
|
843 |
-
|
844 |
-
we ever create one?
|
845 |
-
In this article, I present a fundamental trade-off that affects the
|
846 |
-
design of programming languages and the success of software
|
847 |
-
projects.
|
848 |
|
849 |
## Creating better ground truth to further understand Android malware: A large scale mining approach based on antivirus labels and malicious artifacts
|
850 |
|
@@ -852,28 +850,11 @@ projects.
|
|
852 |
- Publication date: July 1, 2019
|
853 |
- Link: https://orbilu.uni.lu/handle/10993/39903
|
854 |
|
855 |
-
Mobile applications are essential for interacting with technology
|
856 |
-
|
857 |
-
the
|
858 |
-
|
859 |
-
|
860 |
-
millions of users to malware authors who seek to siphon private
|
861 |
-
information and hijack mobile devices for their benefits.
|
862 |
-
To fight against the proliferation of Android malware, the security
|
863 |
-
community embraced machine learning, a branch of artificial
|
864 |
-
intelligence that powers a new generation of detection systems.
|
865 |
-
Machine learning algorithms, however, require a substantial number
|
866 |
-
of qualified samples to learn the classification rules enforced by
|
867 |
-
security experts. Unfortunately, malware ground truths are
|
868 |
-
notoriously hard to construct due to the inherent complexity of
|
869 |
-
Android applications and the global lack of public information about
|
870 |
-
malware. In a context where both information and human resources are
|
871 |
-
limited, the security community is in demand for new approaches to
|
872 |
-
aid practitioners to accurately define Android malware, automate
|
873 |
-
classification decisions, and improve the comprehension of Android
|
874 |
-
malware.
|
875 |
-
This dissertation proposes three solutions to assist with the
|
876 |
-
creation of malware ground truths.
|
877 |
|
878 |
## Euphony: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
879 |
|
@@ -881,26 +862,9 @@ creation of malware ground truths.
|
|
881 |
- Publication date: May 21, 2017
|
882 |
- Link: https://orbilu.uni.lu/handle/10993/31441
|
883 |
|
884 |
-
Android malware is now pervasive and evolving rapidly. Thousands of
|
885 |
-
|
886 |
-
The
|
887 |
-
proliferation of collective repositories sharing the latest
|
888 |
-
specimens. Having access to a large number of samples opens new
|
889 |
-
research directions aiming at efficiently vetting apps. However,
|
890 |
-
automatically inferring a reference ground-truth from those
|
891 |
-
repositories is not straightforward and can inadvertently lead to
|
892 |
-
unforeseen misconceptions. On the one hand, samples are often
|
893 |
-
mislabeled as different parties use distinct naming schemes for the
|
894 |
-
same sample. On the other hand, samples are frequently misclassified
|
895 |
-
due to conceptual errors made during labeling processes.
|
896 |
-
In this paper, we analyze the associations between all labels given
|
897 |
-
by different vendors and we propose a system called EUPHONY to
|
898 |
-
systematically unify common samples into family groups. The key
|
899 |
-
novelty of our approach is that no prior knowledge of malware
|
900 |
-
families is needed. We evaluate our approach using reference
|
901 |
-
datasets and more than 0.4 million additional samples outside of
|
902 |
-
these datasets. Results show that EUPHONY provides competitive
|
903 |
-
performance against the state-of-the-art.
|
904 |
|
905 |
## On the Lack of Consensus in Anti-Virus Decisions: Metrics and Insights on Building Ground Truths of Android Malware
|
906 |
|
@@ -908,31 +872,21 @@ performance against the state-of-the-art.
|
|
908 |
- Publication date: July 7, 2016
|
909 |
- Link: https://orbilu.uni.lu/handle/10993/27845
|
910 |
|
911 |
-
There is generally a lack of consensus in Antivirus (AV) engines'
|
912 |
-
|
913 |
-
|
914 |
-
practitioners may rely on unvalidated approaches to build their
|
915 |
-
ground truth, e.g., by considering decisions from a selected set of
|
916 |
-
Antivirus vendors or by setting up a threshold number of positive
|
917 |
-
detections before classifying a sample. Both approaches are biased
|
918 |
-
as they implicitly either decide on ranking AV products, or they
|
919 |
-
consider that all AV decisions have equal weights. In this paper, we
|
920 |
-
extensively investigate the lack of agreement among AV engines.
|
921 |
-
To that end, we propose a set of metrics that quantitatively
|
922 |
-
describe the different dimensions of this lack of consensus. We show
|
923 |
-
how our metrics can bring important insights by using the detection
|
924 |
-
results of 66 AV products on 2 million Android apps as a case study.
|
925 |
-
Our analysis focuses not only on AV binary decision but also on the
|
926 |
-
notoriously hard problem of labels that AVs associate with
|
927 |
-
suspicious files, and allows to highlight biases hidden in the
|
928 |
-
collection of a malware ground truth---a foundation stone of any
|
929 |
-
machine learning-based malware detection approach.
|
930 |
|
931 |
# Projects
|
932 |
|
|
|
|
|
|
|
|
|
|
|
|
|
933 |
## MLOps Python Package
|
934 |
|
935 |
-
- Date:
|
936 |
- Description: Kickstart your MLOps initiative with a flexible, robust, and productive Python package.
|
937 |
- Link: https://github.com/fmind/mlops-python-package
|
938 |
|
@@ -944,144 +898,144 @@ machine learning-based malware detection approach.
|
|
944 |
|
945 |
## Kubeflow Demo
|
946 |
|
947 |
-
- Date:
|
948 |
- Description: Kubeflow demo for the MLOps Community Meetup in Luxembourg.
|
949 |
- Link: https://github.com/fmind/kubeflow-demo
|
950 |
|
951 |
## MLflow Demo
|
952 |
|
953 |
-
- Date:
|
954 |
- Description: MLflow demo for the MLOps Community Meetup in Luxembourg.
|
955 |
- Link: https://github.com/fmind/mlflow-demo
|
956 |
|
957 |
## onet
|
958 |
|
959 |
-
- Date:
|
960 |
- Description: Train and predict procedures of DNN for binary image classification
|
961 |
- Link: https://github.com/fmind/onet
|
962 |
|
963 |
## fincrawl
|
964 |
|
965 |
-
- Date:
|
966 |
- Description: Crawl documents, metadata, and files from financial institutions
|
967 |
- Link: https://github.com/fmind/fincrawl
|
968 |
|
969 |
## invest
|
970 |
|
971 |
-
- Date:
|
972 |
- Description: Stock market analysis focused on dividends
|
973 |
- Link: https://github.com/fmind/invest
|
974 |
|
975 |
## parsoc
|
976 |
|
977 |
-
- Date:
|
978 |
- Description: Convert docx files to json
|
979 |
- Link: https://github.com/fmind/parsoc
|
980 |
|
981 |
## Bigdata Tutorials
|
982 |
|
983 |
-
- Date:
|
984 |
- Description: Tutorials for the Big Data course @ uni.lu
|
985 |
- Link: https://github.com/fmind/bigdata-tutorials
|
986 |
|
987 |
## STASE: A set of statistical metrics to better understand and qualify malware datasets
|
988 |
|
989 |
-
- Date:
|
990 |
- Description: A handful of statistical metrics to better understand and qualify malware datasets
|
991 |
- Link: https://github.com/fmind/STASE
|
992 |
|
993 |
## apkworkers
|
994 |
|
995 |
-
- Date:
|
996 |
- Description: A celery application to distribute Android malware analysis
|
997 |
- Link: https://github.com/fmind/apkworkers
|
998 |
|
999 |
## servalx
|
1000 |
|
1001 |
-
- Date:
|
1002 |
- Description: A set of tools and modules to process Android malware with Androzoo
|
1003 |
- Link: https://github.com/fmind/servalx
|
1004 |
|
1005 |
## Euphony: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
1006 |
|
1007 |
-
- Date:
|
1008 |
- Description: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
1009 |
- Link: https://github.com/fmind/euphony
|
1010 |
|
1011 |
## Automatic Speech Recognition with Tensorflow
|
1012 |
|
1013 |
-
- Date:
|
1014 |
- Description: An automatic speech-recognition system based on Tensorflow
|
1015 |
- Link: https://github.com/fmind/AIND-VUI-Capstone
|
1016 |
|
1017 |
## Dog Recognition with Tensorflow
|
1018 |
|
1019 |
-
- Date:
|
1020 |
- Description: A machine-learning model train to recognize dogs, even from human faces
|
1021 |
- Link: https://github.com/fmind/dog-project
|
1022 |
|
1023 |
## genius
|
1024 |
|
1025 |
-
- Date:
|
1026 |
- Description: An implementation of LISP Scheme based on Haskell
|
1027 |
- Link: https://github.com/fmind/genius
|
1028 |
|
1029 |
## Alexa History Skill
|
1030 |
|
1031 |
-
- Date:
|
1032 |
- Description: A Alexa skill that provides year-dated facts on demand
|
1033 |
- Link: https://github.com/fmind/AIND-VUI-Alexa
|
1034 |
|
1035 |
## Air Cargo Planning System
|
1036 |
|
1037 |
-
- Date:
|
1038 |
- Description: An automated Air Cargo transport system based on AI planning
|
1039 |
- Link: https://github.com/fmind/AIND-Planning
|
1040 |
|
1041 |
## Sign Language Recognition System
|
1042 |
|
1043 |
-
- Date:
|
1044 |
- Description: A sign recognition system based on Hidden Markov Model
|
1045 |
- Link: https://github.com/fmind/AIND-Recognizer
|
1046 |
|
1047 |
## AI Agent for the Isolation Game
|
1048 |
|
1049 |
-
- Date:
|
1050 |
- Description: An AI game agent to play the Isolation game
|
1051 |
- Link: https://github.com/fmind/AIND-Isolation
|
1052 |
|
1053 |
## Sudoku Solver
|
1054 |
|
1055 |
-
- Date:
|
1056 |
- Description: A Diagonal Sudoku solver implemented with Python
|
1057 |
- Link: https://github.com/fmind/AIND-Sudoku
|
1058 |
|
1059 |
## lkml
|
1060 |
|
1061 |
-
- Date:
|
1062 |
- Description: Gather emails from https://lkml.org/
|
1063 |
- Link: https://github.com/fmind/lkml
|
1064 |
|
1065 |
## Master 2 School Projects
|
1066 |
|
1067 |
-
- Date:
|
1068 |
- Description: School projects from 2013 to 2014 - Master 2 Sécurité des Systèmes d'Information (Metz)
|
1069 |
- Link: https://github.com/fmind/master2-projects
|
1070 |
|
1071 |
## chattail
|
1072 |
|
1073 |
-
- Date:
|
1074 |
- Description: Send log streams over XMPP to monitor your systems
|
1075 |
- Link: https://github.com/fmind/chattail
|
1076 |
|
1077 |
## Master 1 School Projects
|
1078 |
|
1079 |
-
- Date:
|
1080 |
- Link: https://github.com/fmind/master1-projects
|
1081 |
|
1082 |
## Bachelor School Projects
|
1083 |
|
1084 |
-
- Date:
|
1085 |
- Link: https://github.com/fmind/bachelor-projects
|
1086 |
|
1087 |
## Professional Bachelor School Project
|
@@ -1099,7 +1053,6 @@ machine learning-based malware detection approach.
|
|
1099 |
- Deep Learning
|
1100 |
- Data Science
|
1101 |
- Statistics
|
1102 |
-
- ChatGPT
|
1103 |
- Scikit-Learn
|
1104 |
- Tensorflow
|
1105 |
- KubeFlow
|
@@ -1107,10 +1060,16 @@ machine learning-based malware detection approach.
|
|
1107 |
- Jupyter
|
1108 |
- Pandas
|
1109 |
- Keras
|
1110 |
-
- DVC
|
1111 |
- Transformers
|
1112 |
- Natural Language Processing (NLP)
|
1113 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1114 |
## Software Engineering
|
1115 |
|
1116 |
- Python
|
@@ -1119,6 +1078,7 @@ machine learning-based malware detection approach.
|
|
1119 |
- API REST
|
1120 |
- Android
|
1121 |
- Docker
|
|
|
1122 |
- JSON
|
1123 |
- Git
|
1124 |
|
@@ -1142,6 +1102,7 @@ machine learning-based malware detection approach.
|
|
1142 |
|
1143 |
## Data Management
|
1144 |
|
|
|
1145 |
- NoSQL
|
1146 |
- MongoDB
|
1147 |
- Big Data
|
@@ -1152,8 +1113,8 @@ machine learning-based malware detection approach.
|
|
1152 |
|
1153 |
## Project Management
|
1154 |
|
1155 |
-
- Agile Methodology
|
1156 |
- Project Management
|
|
|
1157 |
- Jira
|
1158 |
- UML
|
1159 |
|
|
|
5 |
- First name: Médéric
|
6 |
- Last name: HURIER
|
7 |
- Pseudo: Fmind
|
8 |
+
- City: Luxembourg
|
9 |
+
- Country: Luxembourg
|
|
|
|
|
|
|
10 |
- Industry: Technology, Information and Internet
|
11 |
+
- Position: Senior MLOps Engineer at Decathlon Technology
|
12 |
+
- Education: PhD in Artificial Intelligence and Computer Security from the University of Luxembourg
|
13 |
+
- Headline: Freelancer: AI/FM/MLOps Engineer | Data Scientist | MLOps Community Organizer | MLflow Ambassador | Hacker | PhD
|
14 |
+
- Note: I'm not available to work on new missions until the 31st of December 2024.
|
15 |
|
16 |
## Websites
|
17 |
|
18 |
+
- Website: https://www.fmind.dev
|
19 |
+
- Medium: https://fmind.medium.com/
|
20 |
+
- GitHub: https://github.com/fmind/
|
21 |
- Twitter: https://twitter.com/fmind_dev
|
22 |
+
- HuggingFace: https://huggingface.co/fmind
|
23 |
+
- LinkedIn: https://www.linkedin.com/in/fmind-dev
|
24 |
|
25 |
## About
|
26 |
|
27 |
+
When I worked as a teacher, I told my students that Artificial Intelligence and Machine Learning are the most effective levers to make a difference. Every day, new AI and ML solutions are released to empower companies and individuals alike. The question is: Is your business ready to provide the best AI/ML products for your customers?
|
|
|
28 |
|
29 |
+
I'm a professional Machine Learning Engineer, Data Scientist, and MLOps ready to assist you in this quest. I've completed a Ph.D. in Machine Learning and several high-end AI/ML certifications to help you build leading data-driven services. My past experiences include working with companies like Google, BNP Paribas, ArcelorMittal, the European Commission, and Decathlon to frame their needs, create state-of-the-art models and deliver AI/ML artifacts at scale.
|
|
|
|
|
|
|
|
|
30 |
|
31 |
+
I now work as a freelancer in Luxembourg, and I can carry out missions remotely in other European countries. You can get in touch with me on LinkedIn or at contact@fmind.dev. I'll be happy to collaborate with you or discuss your favored AI/ML topics in the MLOps Community.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
# Experience
|
34 |
|
35 |
+
## Senior MLOps Engineer for Decathlon Technology
|
36 |
|
37 |
+
- Title: Senior MLOps Engineer
|
38 |
- Company: Decathlon Technology
|
39 |
+
- Period: September 2022 - Present
|
40 |
- Location: Luxembourg (Hybrid)
|
41 |
+
- Tasks:
|
42 |
+
- Design and implement Decathlon's MLOps platform on top of Databricks and AWS cloud systems.
|
43 |
+
- Create code templates and documentations to embed best practices into development processes.
|
44 |
+
- Animate Decathlon's MLOps Community through discussions, resources sharing, and maturity matrix.
|
45 |
+
- Provide solutions and guidelines to steer the adoption of AI/ML Monitoring/Observability principles.
|
46 |
+
- Bring Generative AI capabilities to data scientists and ML engineers through AWS Bedrock/Databricks.
|
47 |
+
- Skills: Artificial Intelligence (AI) · Apache Airflow · AWS SageMaker · MLflow · Python · ChatGPT · Git · Docker · Kubernetes · Méthodes agiles · AWS Bedrock · Machine Learning · DataBricks · MLOps · Jira · Apache Spark · Terraform
|
48 |
+
|
49 |
+
## Mentor for Data Scientist and AI/ML Engineer for OpenClassrooms
|
50 |
+
|
51 |
+
- Title: Mentor for Data Scientist and AI/ML Engineer
|
52 |
+
- Customer: OpenClassrooms
|
53 |
+
- Period: Mars 2023 - February 2024
|
54 |
- Location: France (Remote)
|
55 |
- Mission: Tutoring adult students to become data scientists specializing in machine learning.
|
56 |
+
- Learning paths:
|
57 |
+
- Data Scientist: https://openclassrooms.com/fr/paths/793-data-scientist
|
58 |
+
- Machine Learning Engineer: https://openclassrooms.com/fr/paths/794-machine-learning-engineer
|
59 |
+
- AI Egnineer: https://openclassrooms.com/fr/paths/795-ai-engineer
|
60 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Deep Learning · Data Science · Statistics · ChatGPT · Big Data · Jupyter · Pandas · Git · Natural Language Processing (NLP) · Scikit-Learn
|
61 |
|
62 |
+
## Senior Data Scientist & Project Manager at Cronos Europa for the European Commission
|
63 |
|
64 |
+
- Title: Senior Data Scientist & Project Manager
|
65 |
- Company: Cronos Europa
|
66 |
- Customer: European Commission
|
67 |
+
- Period: December 2021 - September 2022
|
68 |
- Location: Luxembourg (Hybrid)
|
69 |
- Mission: Enhance the ARACHNE risk scoring tool (fraud detection).
|
70 |
- Main tasks and responsibilities:
|
71 |
- Develop a new version of Arachne using data mining techniques
|
72 |
- Manage the development of the Arachne PoC/Project (SCRUM)
|
73 |
+
- Assist data scientists in their projects (Virtual Assistant, NLP, …)
|
|
|
74 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Deep Learning · Data Science · Big Data · Agile Methodology · Project Management · Functional Programming · Jupyter · Pandas · Docker · Jira · Git · PostgreSQL · AWS SageMaker · Flask · UML · API REST · Terraform · Transformers · Natural Language Processing (NLP) · Data Engineering · Microsoft Azure Machine Learning · Neo4j
|
75 |
|
76 |
+
## Project Manager & Machine Learning Engineer at SFEIR Luxembourg for Decathlon Technology
|
77 |
|
78 |
+
- Title: Project Manager & Machine Learning Engineer
|
79 |
- Company: SFEIR Luxembourg
|
80 |
+
- Customer: Decathlon Technology
|
81 |
+
- Period: December 2020 - December 2021
|
82 |
- Location: Luxembourg (Remote)
|
83 |
- Mission: Design and implement the next ML/MLOps platform on AWS and GCP.
|
84 |
- Main tasks and responsibilities:
|
|
|
93 |
- Environments: AWS (SageMaker), GCP (Vertex AI), DataBricks
|
94 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Deep Learning · Data Science · Big Data · Agile Methodology · Project Management · Functional Programming · Google Cloud Platform (GCP) · Tensorflow · MLflow · Jupyter · Pandas · Docker · Keras · Jira · Git · DataBricks · Apache Airflow · AWS SageMaker · Flask · UML · Terraform · Data Engineering · Vertex AI (GCP) · Apache Spark · Scikit-Learn · Kubernetes
|
95 |
|
96 |
+
## Data Scientist at SFEIR Luxembourg
|
97 |
|
98 |
+
- Title: Data Scientist
|
99 |
+
- Company: SFEIR Luxembourg
|
100 |
+
- Period: October 2020 - November 2020
|
101 |
- Location: Luxembourg (Remote)
|
102 |
- Mission: Improve the visibility and assets of SFEIR's Data Team.
|
103 |
- Main tasks and responsibilities:
|
|
|
108 |
- Create a group to write tutorials and kata on AI/ML for SFEIR developers.
|
109 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Deep Learning · Data Science · Agile Methodology · Functional Programming · Google Cloud Platform (GCP) · Tensorflow · Jupyter · Pandas · Keras · Git · MongoDB · Vertex AI (GCP) · Apache Spark · Scikit-Learn
|
110 |
|
111 |
+
## Data Scientist at SFEIR Luxembourg for ArcelorMittal
|
112 |
|
113 |
+
- Title: Data Scientist
|
114 |
+
- Company: SFEIR Luxembourg
|
115 |
- Customer: ArcelorMittal
|
116 |
+
- Period: January 2020 - September 2020
|
117 |
- Location: Luxembourg (Remote)
|
118 |
- Mission: Train and optimize machine learning models to recommend steel prices.
|
119 |
- Main tasks and responsibilities:
|
|
|
126 |
- Environment: MS-SQL, Azure Cloud, Jira, Papermill
|
127 |
- Skills: Artificial Intelligence (AI) · Machine Learning · MLOps · Python · Data Science · Agile Methodology · Functional Programming · Jupyter · Pandas · Jira · Git · Natural Language Processing (NLP) · Scikit-Learn
|
128 |
|
129 |
+
## Research And Development Specialist at the University of Luxembourg
|
130 |
|
131 |
+
- Title: Research And Development Specialist
|
132 |
- Company: University of Luxembourg
|
133 |
+
- Period: September 2019 - January 2020
|
134 |
- Location: Luxembourg
|
135 |
- Mission: Management and development of Natural Language Understanding (NLU) projects for BGL BNP Paribas.
|
136 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Data Science · Big Data · Functional Programming · Tensorflow · Jupyter · Pandas · Docker · Git · PostgreSQL · Ansible · Flask · UML · JSON · API REST · Transformers · Natural Language Processing (NLP) · Apache Spark · Scikit-Learn
|
137 |
|
138 |
+
## Doctoral researcher at the University of Luxembourg
|
139 |
|
140 |
+
- Title: Doctoral researcher
|
141 |
- Company: University of Luxembourg
|
142 |
+
- Period: September 2015 - January 2020
|
143 |
- Location: Luxembourg
|
144 |
- Missions:
|
145 |
- Research activities focused on Android security and artificial intelligence.
|
|
|
147 |
- Collaboration with Google, San Francisco on finding malicious Android artifacts.
|
148 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Deep Learning · Data Science · Statistics · Big Data · Cybersecurity · Functional Programming · Jupyter · Pandas · Docker · Git · NoSQL · MongoDB · PostgreSQL · ElasticSearch · Ansible · Flask · JSON · Android · API REST · Natural Language Processing (NLP) · Data Engineering · Apache Spark · Scikit-Learn
|
149 |
|
150 |
+
## Mentor for Data Scientist for OpenClassrooms
|
151 |
|
152 |
+
- Title: Mentor for Data Scientist
|
153 |
+
- Customer: OpenClassrooms
|
154 |
+
- Period: August 2018 - December 2019
|
155 |
- Location: France
|
156 |
- Mission: Tutoring adult students to become data scientists specializing in machine learning.
|
157 |
- Skills: Artificial Intelligence (AI) · Machine Learning · Python · Data Science · Jupyter · Pandas · Git · Flask · JSON · API REST · Scikit-Learn
|
158 |
|
159 |
+
## Security engineer specialized in log management and analysis at Clearstream
|
160 |
|
161 |
+
- Title: Security engineer specialized in log management and analysis
|
162 |
- Company: Clearstream
|
163 |
+
- Period: April 2014 - August 2015
|
164 |
- Location: Luxembourg
|
165 |
- Mission: Selection and deployment of a SIEM solution, participating in security incident response.
|
166 |
- Skills: Python · Big Data · ISO 27001 · Cybersecurity · Jupyter · Pandas · Git · ElasticSearch · Data Engineering
|
167 |
|
168 |
## Web developer and administrator
|
169 |
|
170 |
+
- Title: Web developer and administrator
|
171 |
- Company: Freaxmind
|
172 |
+
- Period: August 2011 - August 2013
|
173 |
- Location: France
|
174 |
- Mission: Various contracts ranging from web development to software maintenance and debugging.
|
175 |
- Skills: Python · Object Oriented Programming (POO) · Git · Ansible · Flask
|
176 |
|
177 |
+
## Web Developer for Toul'embal (internship)
|
178 |
|
179 |
+
- Title: Web Developer (intern)
|
180 |
- Company: Toul'embal
|
181 |
+
- Period: June 2012 - August 2012
|
182 |
- Location: Toul, France
|
183 |
- Mission: Extension of a Prestashop e-commerce website and creation a portfolio website with WordPress.
|
184 |
- Skills: Object Oriented Programming (POO)
|
185 |
|
186 |
+
## Web Programmer at Empreinte Studio
|
187 |
|
188 |
+
- Title: Web Programmer
|
189 |
- Company: Empreinte Studio
|
190 |
+
- Period: October 2010 - August 2011
|
191 |
- Location: Épernay, France
|
192 |
- Mission: Creation of modern website in PHP and MySQL with professional writers and graphic designers.
|
193 |
- Skills: Object Oriented Programming (POO) · Git
|
194 |
|
195 |
+
## Software Developer for GEOVARIANCES (apprenticeship)
|
196 |
|
197 |
+
- Title: Software Developer (apprentice)
|
198 |
- Company: GEOVARIANCES
|
199 |
+
- Period: September 2009 - September 2010
|
200 |
- Location: Avon, France
|
201 |
- Mission: Development of a geostatistic application in C++ and Qt with experienced software engineers.
|
202 |
- Skills: Object Oriented Programming (POO) · Git · UML
|
203 |
|
204 |
+
## Web Developer for CV Champagne Nicolas Feuillatte (internship)
|
205 |
|
206 |
+
- Title: Web Developer (intern)
|
207 |
- Company: CV Champagne Nicolas Feuillatte
|
208 |
+
- Period: April 2009 - August 2009
|
209 |
- Location: Épernay, France
|
210 |
- Mission: Integration of customer and share management modules to J.D. Edwards with PHP and Oracle.
|
211 |
- Skills: Object Oriented Programming (POO)
|
|
|
257 |
- Location: Reims (France)
|
258 |
- Period: 2003 - 2006
|
259 |
|
260 |
+
# Volunteering
|
261 |
|
262 |
## MLOps Community Organizer (Luxembourg)
|
263 |
|
264 |
- Community: MLOps Community
|
265 |
- Role: Organizer
|
266 |
- Location: Luxembourg
|
267 |
+
- Period: November 2022 - present
|
268 |
- Field: Science and Technology
|
269 |
+
- Missions:
|
270 |
+
- Organize regular meetups and events for the MLOps Community.
|
271 |
+
- Coordinate and review the content for the [MLOps Writer Community](https://mlops.notion.site/Writer-Community-3fc2d1a985a743eb895400159ae5b319).
|
272 |
+
- Partners: Amazon Web Services (AWS) and the University of Luxembourg.
|
273 |
- Link: https://www.meetup.com/luxembourg-mlops-community/
|
274 |
|
275 |
+
## MLflow Ambassador
|
276 |
+
|
277 |
+
- Community: MLflow
|
278 |
+
- Role: Ambassador
|
279 |
+
- Period: April 2024 - present
|
280 |
+
- Field: Science and Technology
|
281 |
+
- Mission: Promote the MLflow tools and projects.
|
282 |
+
- Link: https://mlflow.org/ambassador
|
283 |
+
|
284 |
# Licenses & Certifications
|
285 |
|
286 |
## Machine Learning Associate
|
|
|
736 |
|
737 |
# Publications
|
738 |
|
739 |
+
## Make your MLOps code base SOLID with Pydantic and Python’s ABC
|
740 |
+
|
741 |
+
- Publisher: MLOps Community
|
742 |
+
- Publication date: March 20, 2024
|
743 |
+
- Link: https://mlops.community/make-your-mlops-code-base-solid-with-pydantic-and-pythons-abc/
|
744 |
+
|
745 |
+
MLOps projects are straightforward to initiate, but challenging to perfect. While AI/ML projects often start with a notebook for prototyping, deploying them directly in production is often considered poor practice by the MLOps community. Transitioning to a dedicated Python code base is essential for industrializing the project, yet this move presents several challenges: 1) How can we maintain a code base that is robust yet flexible for agile development? 2) Is it feasible to implement proven design patterns while keeping the code base accessible to all developers? 3) How can we leverage Python’s dynamic nature while adopting strong typing practices akin to static languages?
|
746 |
+
|
747 |
+
Throughout my career, I have thoroughly explored various strategies to make my code base both simple and powerful. In 2009, I had the opportunity to collaborate with seasoned developers and enthusiasts of design patterns in object-oriented languages such as C++ and Java. By 2015, I had devoted hundreds of hours to mastering functional programming paradigms with languages like Clojure (LISP) and Haskell. This journey led me to discover both modern and time-tested practices, which I have applied to my AI/ML projects. I am eager to share these practices and reveal the most effective solutions I’ve encountered.
|
748 |
+
|
749 |
+
In this article, I propose a method to develop high-quality MLOps projects using Python's ABC and Pydantic. I begin by emphasizing the importance of implementing SOLID software practices in AI/ML codebases. Next, I offer some background on design patterns and the SOLID principles. Then, I recount my experiences with various code architectures and their limitations. Finally, I explain how Python's ABC and Pydantic can enhance the quality of your Python code and facilitate the adoption of sound coding practices.
|
750 |
+
|
751 |
+
## Maîtrise du monitoring des modèles IA : bonnes pratiques et solutions
|
752 |
+
|
753 |
+
- Publisher: La Conférence MLOps
|
754 |
+
- Publication date: March 7, 2024
|
755 |
+
- Link: https://conference-mlops.com/talks/maitrise-monitoring-modeles-ia/
|
756 |
+
|
757 |
+
Le monitoring des modèles de machine learning est indispensable pour valider leurs performances et leurs comportements en production. De nombreuses solutions existent sur le marché, disposant de leurs avantages et inconvénients. Dans cette présentation, nous vous proposons de revoir les critères importants pour sélectionner une solution de monitoring adaptée à votre environnement. Dans un second temps, nous ferons un retour d’expérience sur les technos et outils que nous avons testés. Finalement, nous présenterons les choix d’architectures pour la mise en place du monitoring de modèles à Decathlon.
|
758 |
+
|
759 |
+
## Become the Maestro of your MLOps Abstractions🤔
|
760 |
+
|
761 |
+
- Publisher: MLOps Community
|
762 |
+
- Publication date: February 5, 2024
|
763 |
+
- Link: https://mlops.community/become-the-maestro-of-your-mlops-abstractions/
|
764 |
+
|
765 |
+
In this article, I aim to delineate a roadmap for constructing robust MLOps platforms and projects. Initially, I will underscore the importance of devising and mastering your own MLOps abstractions. Following this, I will outline key design patterns essential for forging simple yet potent abstractions for your projects. Lastly, I will delve into real-world case studies, illustrating the critical role of abstractions in the success of various projects.
|
766 |
+
|
767 |
+
## How to configure VS Code for AI, ML and MLOps development in Python 🛠️️
|
768 |
+
|
769 |
+
- Publisher: MLOps Community
|
770 |
+
- Publication date: November 29, 2023
|
771 |
+
- Link: https://mlops.community/how-to-configure-vs-code-for-ai-ml-and-mlops-development-in-python-%f0%9f%9b%a0%ef%b8%8f%ef%b8%8f/
|
772 |
+
|
773 |
+
In this article, I outline the steps for configuring VS Code for data scientists and machine learning engineers. I start by listing extensions that augmente your programming environment. Then, I share some settings and keybindings to enhance your development experience. Finally, I provide tips and tricks to boost your coding efficiency with VS Code.
|
774 |
+
|
775 |
## Is AI/ML Monitoring just Data Engineering? 🤔
|
776 |
|
777 |
- Publisher: MLOps Community
|
778 |
- Publication date: July 24, 2023
|
779 |
- Link: https://mlops.community/is-ai-ml-monitoring-just-data-engineering-%f0%9f%a4%94/
|
780 |
|
781 |
+
While the future of machine learning and MLOps is being debated, practitioners still need to attend to their machine learning models in production. This is no easy task, as ML engineers must constantly assess the quality of the data that enters and exits their pipelines, and ensure that their models generate the correct predictions. To assist ML engineers with this challenge, several AI/ML monitoring solutions have been developed.
|
782 |
+
|
783 |
+
In this article, I will discuss the nature of AI/ML monitoring and how it relates to data engineering. First, I will present the similarities between AI/ML monitoring and data engineering. Second, I will enumerate additional features that AI/ML monitoring solutions can provide. Third, I will briefly touch on the topic of AI/ML observability and its relation to AI/ML monitoring. Finally, I will provide my conclusion about the field of AI/ML monitoring and how it should be considered to ensure the success of your AI/ML project.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
784 |
|
785 |
## A great MLOps project should start with a good Python Package 🐍
|
786 |
|
|
|
788 |
- Publication date: June 28, 2023
|
789 |
- Link: https://mlops.community/a-great-mlops-project-should-start-with-a-good-python-package-%f0%9f%90%8d/
|
790 |
|
791 |
+
In this article, I present the implementation of a Python package on GitHub designed to support MLOps initiatives. The goal of this package is to make the coding workflow of data scientists and ML engineers as flexible, robust, and productive as possible. First, I start by motivating the use of Python packages. Then, I provide some tools and tips you can include in your MLOps project. Finally, I explain the follow-up steps required to take this package to the next level and make it work in your environment.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
792 |
|
793 |
## Fixing the MLOps Survey on LLMs with ChatGPT API: Lessons Learned
|
794 |
|
|
|
796 |
- Publication date: May 11, 2023
|
797 |
- Link: https://mlops.community/fixing-the-mlops-survey-on-llms-with-chatgpt-api-lessons-learned/
|
798 |
|
799 |
+
Large Language Model (LLM) is such an existing topic. Since the release of ChatGPT, we saw a surge of innovation ranging from education mentorship to finance advisory. Each week is a new opportunity for addressing new kinds of problems, increasing human productivity, or improving existing solutions. Yet, we may wonder if this is just a new hype cycle or if organizations are truly adopting LLMs at scale …
|
800 |
+
|
801 |
+
On March 2023, the MLOps Community issued a survey about LLMs in production to picture the state of adoption. The survey is full of interesting insights, but there is a catch: 80% of the questions are open-ended, which means respondents answered the survey freely from a few keywords to full sentences. I volunteered to clean up the answers with the help of ChatGPT and let the community get a grasp of the survey experiences.
|
802 |
+
|
803 |
+
In this article, I present the steps and lessons learned from my journey to shed some light on the MLOps survey on LLMs. I’m first going to present the goal and questions of the survey. Then, I will explain how I used ChatGPT to review the data and standardize the content. Finally, I’m going to evaluate the performance of ChatGPT compared to a manual review.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
804 |
|
805 |
## Kubeflow: The Machine Learning Toolkit for Kubernetes
|
806 |
|
|
|
820 |
- Publication date: April 21, 2023
|
821 |
- Link: https://mlops.community/we-need-posix-for-mlops/
|
822 |
|
823 |
+
If you work on MLOps, you must navigate an ever-growing landscape of tools and solutions. This is both an intense source of stimulation and fatigue for MLOps practitioners. Vendors and users face the same problem: How can we combine all these tools without the combinatorial complexity of creating custom integrations?
|
824 |
+
|
825 |
+
In this article, I propose a solution analogous to POSIX to address this challenge. First, I motivate the creation of common protocols and schemas for combining MLOps tools. Second, I present a high-level architecture to support implementation. Third, I conclude with the benefits and limitations of standardizing MLOps.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
826 |
|
827 |
## How to install Kubeflow Pipelines v2 on Apple Silicon
|
828 |
|
|
|
830 |
- Publication date: September 24, 2022
|
831 |
- Link: https://fmind.medium.com/how-to-install-kubeflow-on-apple-silicon-3565db8773f3
|
832 |
|
833 |
+
Kubeflow Pipelines (KFP) is a powerful platform for building machine learning pipelines at scale with Kubernetes. The platform is well supported on major cloud platforms such as GCP (Vertex AI Pipelines) or AWS (Kubeflow on AWS). However, installing KFP on Apple Silicon (macOS 12.5.1 with Apple M1 Pro) proved to be more challenging than I imagined. Thus, I wanted to share my experience and tips to install KFP as easily as possible on your shiny Mac.
|
834 |
+
|
835 |
+
In this article, I present 4 steps to install Kubeflow on Apple Silicon, using Rancher Desktop for setting up Docker/Kubernetes. In the end, I list the problems I encountered during the installation of Kubeflow Pipelines.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
836 |
|
837 |
## The Programming Trade-Off: Purpose, Productivity, Performance
|
838 |
|
|
|
840 |
- Publication: August 15, 2019
|
841 |
- Link: https://fmind.medium.com/3p-principle-purpose-productivity-performance-630bed7623fc
|
842 |
|
843 |
+
As programmers, we are continuously looking for languages that are performant, productive, and general purpose. Is there any programming language that currently satisfies these properties? Can we ever create one?
|
844 |
+
|
845 |
+
In this article, I present a fundamental trade-off that affects the design of programming languages and the success of software projects.
|
|
|
|
|
|
|
|
|
846 |
|
847 |
## Creating better ground truth to further understand Android malware: A large scale mining approach based on antivirus labels and malicious artifacts
|
848 |
|
|
|
850 |
- Publication date: July 1, 2019
|
851 |
- Link: https://orbilu.uni.lu/handle/10993/39903
|
852 |
|
853 |
+
Mobile applications are essential for interacting with technology and other people. With more than 2 billion devices deployed all over the world, Android offers a thriving ecosystem by making accessible the work of thousands of developers on digital marketplaces such as Google Play. Nevertheless, the success of Android also exposes millions of users to malware authors who seek to siphon private information and hijack mobile devices for their benefits.
|
854 |
+
|
855 |
+
To fight against the proliferation of Android malware, the security community embraced machine learning, a branch of artificial intelligence that powers a new generation of detection systems. Machine learning algorithms, however, require a substantial number of qualified samples to learn the classification rules enforced by security experts. Unfortunately, malware ground truths are notoriously hard to construct due to the inherent complexity of Android applications and the global lack of public information about malware. In a context where both information and human resources are limited, the security community is in demand for new approaches to aid practitioners to accurately define Android malware, automate classification decisions, and improve the comprehension of Android malware.
|
856 |
+
|
857 |
+
This dissertation proposes three solutions to assist with the creation of malware ground truths.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
858 |
|
859 |
## Euphony: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
860 |
|
|
|
862 |
- Publication date: May 21, 2017
|
863 |
- Link: https://orbilu.uni.lu/handle/10993/31441
|
864 |
|
865 |
+
Android malware is now pervasive and evolving rapidly. Thousands of malware samples are discovered every day with new models of attacks. The growth of these threats has come hand in hand with the proliferation of collective repositories sharing the latest specimens. Having access to a large number of samples opens new research directions aiming at efficiently vetting apps. However, automatically inferring a reference ground-truth from those repositories is not straightforward and can inadvertently lead to unforeseen misconceptions. On the one hand, samples are often mislabeled as different parties use distinct naming schemes for the same sample. On the other hand, samples are frequently misclassified due to conceptual errors made during labeling processes.
|
866 |
+
|
867 |
+
In this paper, we analyze the associations between all labels given by different vendors and we propose a system called EUPHONY to systematically unify common samples into family groups. The key novelty of our approach is that no prior knowledge of malware families is needed. We evaluate our approach using reference datasets and more than 0.4 million additional samples outside of these datasets. Results show that EUPHONY provides competitive performance against the state-of-the-art.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
868 |
|
869 |
## On the Lack of Consensus in Anti-Virus Decisions: Metrics and Insights on Building Ground Truths of Android Malware
|
870 |
|
|
|
872 |
- Publication date: July 7, 2016
|
873 |
- Link: https://orbilu.uni.lu/handle/10993/27845
|
874 |
|
875 |
+
There is generally a lack of consensus in Antivirus (AV) engines' decisions on a given sample. This challenges the building of authoritative ground-truth datasets. Instead, researchers and practitioners may rely on unvalidated approaches to build their ground truth, e.g., by considering decisions from a selected set of Antivirus vendors or by setting up a threshold number of positive detections before classifying a sample. Both approaches are biased as they implicitly either decide on ranking AV products, or they consider that all AV decisions have equal weights. In this paper, we extensively investigate the lack of agreement among AV engines.
|
876 |
+
|
877 |
+
To that end, we propose a set of metrics that quantitatively describe the different dimensions of this lack of consensus. We show how our metrics can bring important insights by using the detection results of 66 AV products on 2 million Android apps as a case study. Our analysis focuses not only on AV binary decision but also on the notoriously hard problem of labels that AVs associate with suspicious files, and allows to highlight biases hidden in the collection of a malware ground truth---a foundation stone of any machine learning-based malware detection approach.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
878 |
|
879 |
# Projects
|
880 |
|
881 |
+
## Keep It Simple Scribe
|
882 |
+
|
883 |
+
- Date: March 2024 - Present
|
884 |
+
- Description: Rewrites blog articles for clarity and simplicity.
|
885 |
+
- Link: https://chatgpt.com/g/g-93O8PHtLh-keep-it-simple-scribe
|
886 |
+
|
887 |
## MLOps Python Package
|
888 |
|
889 |
+
- Date: June 2023 - Present
|
890 |
- Description: Kickstart your MLOps initiative with a flexible, robust, and productive Python package.
|
891 |
- Link: https://github.com/fmind/mlops-python-package
|
892 |
|
|
|
898 |
|
899 |
## Kubeflow Demo
|
900 |
|
901 |
+
- Date: April 2023 - April 2023
|
902 |
- Description: Kubeflow demo for the MLOps Community Meetup in Luxembourg.
|
903 |
- Link: https://github.com/fmind/kubeflow-demo
|
904 |
|
905 |
## MLflow Demo
|
906 |
|
907 |
+
- Date: April 2023 - April 2023
|
908 |
- Description: MLflow demo for the MLOps Community Meetup in Luxembourg.
|
909 |
- Link: https://github.com/fmind/mlflow-demo
|
910 |
|
911 |
## onet
|
912 |
|
913 |
+
- Date: August 2020 - September 2020
|
914 |
- Description: Train and predict procedures of DNN for binary image classification
|
915 |
- Link: https://github.com/fmind/onet
|
916 |
|
917 |
## fincrawl
|
918 |
|
919 |
+
- Date: November 2019 - December 2019
|
920 |
- Description: Crawl documents, metadata, and files from financial institutions
|
921 |
- Link: https://github.com/fmind/fincrawl
|
922 |
|
923 |
## invest
|
924 |
|
925 |
+
- Date: August 2019 - September 2019
|
926 |
- Description: Stock market analysis focused on dividends
|
927 |
- Link: https://github.com/fmind/invest
|
928 |
|
929 |
## parsoc
|
930 |
|
931 |
+
- Date: July 2019 - September 2019
|
932 |
- Description: Convert docx files to json
|
933 |
- Link: https://github.com/fmind/parsoc
|
934 |
|
935 |
## Bigdata Tutorials
|
936 |
|
937 |
+
- Date: September 2015 - July 2019
|
938 |
- Description: Tutorials for the Big Data course @ uni.lu
|
939 |
- Link: https://github.com/fmind/bigdata-tutorials
|
940 |
|
941 |
## STASE: A set of statistical metrics to better understand and qualify malware datasets
|
942 |
|
943 |
+
- Date: Aprril 2016 - July 2019
|
944 |
- Description: A handful of statistical metrics to better understand and qualify malware datasets
|
945 |
- Link: https://github.com/fmind/STASE
|
946 |
|
947 |
## apkworkers
|
948 |
|
949 |
+
- Date: September 2015 - July 2019
|
950 |
- Description: A celery application to distribute Android malware analysis
|
951 |
- Link: https://github.com/fmind/apkworkers
|
952 |
|
953 |
## servalx
|
954 |
|
955 |
+
- Date: September 2015 - July 2019
|
956 |
- Description: A set of tools and modules to process Android malware with Androzoo
|
957 |
- Link: https://github.com/fmind/servalx
|
958 |
|
959 |
## Euphony: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
960 |
|
961 |
+
- Date: March 2017 - March 2019
|
962 |
- Description: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
963 |
- Link: https://github.com/fmind/euphony
|
964 |
|
965 |
## Automatic Speech Recognition with Tensorflow
|
966 |
|
967 |
+
- Date: September 2017 - September 2017
|
968 |
- Description: An automatic speech-recognition system based on Tensorflow
|
969 |
- Link: https://github.com/fmind/AIND-VUI-Capstone
|
970 |
|
971 |
## Dog Recognition with Tensorflow
|
972 |
|
973 |
+
- Date: August 2017 - August 2017
|
974 |
- Description: A machine-learning model train to recognize dogs, even from human faces
|
975 |
- Link: https://github.com/fmind/dog-project
|
976 |
|
977 |
## genius
|
978 |
|
979 |
+
- Date: June 2017 - July 2017
|
980 |
- Description: An implementation of LISP Scheme based on Haskell
|
981 |
- Link: https://github.com/fmind/genius
|
982 |
|
983 |
## Alexa History Skill
|
984 |
|
985 |
+
- Date: June 2017 - June 2017
|
986 |
- Description: A Alexa skill that provides year-dated facts on demand
|
987 |
- Link: https://github.com/fmind/AIND-VUI-Alexa
|
988 |
|
989 |
## Air Cargo Planning System
|
990 |
|
991 |
+
- Date: February 2017 - April 2017
|
992 |
- Description: An automated Air Cargo transport system based on AI planning
|
993 |
- Link: https://github.com/fmind/AIND-Planning
|
994 |
|
995 |
## Sign Language Recognition System
|
996 |
|
997 |
+
- Date: February 2017 - April 2017
|
998 |
- Description: A sign recognition system based on Hidden Markov Model
|
999 |
- Link: https://github.com/fmind/AIND-Recognizer
|
1000 |
|
1001 |
## AI Agent for the Isolation Game
|
1002 |
|
1003 |
+
- Date: March 2017 - March 2017
|
1004 |
- Description: An AI game agent to play the Isolation game
|
1005 |
- Link: https://github.com/fmind/AIND-Isolation
|
1006 |
|
1007 |
## Sudoku Solver
|
1008 |
|
1009 |
+
- Date: January 2017 - February 2017
|
1010 |
- Description: A Diagonal Sudoku solver implemented with Python
|
1011 |
- Link: https://github.com/fmind/AIND-Sudoku
|
1012 |
|
1013 |
## lkml
|
1014 |
|
1015 |
+
- Date: November 2016 - January 2017
|
1016 |
- Description: Gather emails from https://lkml.org/
|
1017 |
- Link: https://github.com/fmind/lkml
|
1018 |
|
1019 |
## Master 2 School Projects
|
1020 |
|
1021 |
+
- Date: September 2013 - June 2014
|
1022 |
- Description: School projects from 2013 to 2014 - Master 2 Sécurité des Systèmes d'Information (Metz)
|
1023 |
- Link: https://github.com/fmind/master2-projects
|
1024 |
|
1025 |
## chattail
|
1026 |
|
1027 |
+
- Date: Dececember 2013 - March 2014
|
1028 |
- Description: Send log streams over XMPP to monitor your systems
|
1029 |
- Link: https://github.com/fmind/chattail
|
1030 |
|
1031 |
## Master 1 School Projects
|
1032 |
|
1033 |
+
- Date: June 2012 - September 2013
|
1034 |
- Link: https://github.com/fmind/master1-projects
|
1035 |
|
1036 |
## Bachelor School Projects
|
1037 |
|
1038 |
+
- Date: June 2011 - September 2012
|
1039 |
- Link: https://github.com/fmind/bachelor-projects
|
1040 |
|
1041 |
## Professional Bachelor School Project
|
|
|
1053 |
- Deep Learning
|
1054 |
- Data Science
|
1055 |
- Statistics
|
|
|
1056 |
- Scikit-Learn
|
1057 |
- Tensorflow
|
1058 |
- KubeFlow
|
|
|
1060 |
- Jupyter
|
1061 |
- Pandas
|
1062 |
- Keras
|
|
|
1063 |
- Transformers
|
1064 |
- Natural Language Processing (NLP)
|
1065 |
|
1066 |
+
## Generative AI
|
1067 |
+
|
1068 |
+
- Retrieval-Augmented Generation (RAG)
|
1069 |
+
- Large Language Model (LLM)
|
1070 |
+
- AWS Bedrock
|
1071 |
+
- ChatGPT
|
1072 |
+
|
1073 |
## Software Engineering
|
1074 |
|
1075 |
- Python
|
|
|
1078 |
- API REST
|
1079 |
- Android
|
1080 |
- Docker
|
1081 |
+
- Flask
|
1082 |
- JSON
|
1083 |
- Git
|
1084 |
|
|
|
1102 |
|
1103 |
## Data Management
|
1104 |
|
1105 |
+
- Neo4j
|
1106 |
- NoSQL
|
1107 |
- MongoDB
|
1108 |
- Big Data
|
|
|
1113 |
|
1114 |
## Project Management
|
1115 |
|
|
|
1116 |
- Project Management
|
1117 |
+
- Agile Methodology
|
1118 |
- Jira
|
1119 |
- UML
|
1120 |
|
files/linkedin.txt
DELETED
@@ -1,1937 +0,0 @@
|
|
1 |
-
Skip to main content
|
2 |
-
|
3 |
-
Agree & Join LinkedIn
|
4 |
-
|
5 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
6 |
-
Policy, and Cookie Policy.
|
7 |
-
|
8 |
-
Skip to main content
|
9 |
-
|
10 |
-
LinkedIn
|
11 |
-
|
12 |
-
- Articles
|
13 |
-
- People
|
14 |
-
- Learning
|
15 |
-
- Jobs
|
16 |
-
|
17 |
-
Join now Sign in
|
18 |
-
|
19 |
-
[]
|
20 |
-
|
21 |
-
Médéric HURIER
|
22 |
-
|
23 |
-
Freelancer: AI/ML/MLOps Engineer | Data Scientist | MLOps Community Organizer | OpenClassrooms Mentor | Hacker | PhD
|
24 |
-
|
25 |
-
Luxembourg, Luxembourg, Luxembourg
|
26 |
-
|
27 |
-
4K followers 500+ connections
|
28 |
-
|
29 |
-
See your mutual connections
|
30 |
-
|
31 |
-
View mutual connections with Médéric
|
32 |
-
|
33 |
-
Sign in
|
34 |
-
|
35 |
-
Welcome back
|
36 |
-
|
37 |
-
Email or phone
|
38 |
-
|
39 |
-
Password
|
40 |
-
|
41 |
-
Show
|
42 |
-
|
43 |
-
Forgot password?
|
44 |
-
|
45 |
-
Sign in
|
46 |
-
|
47 |
-
or
|
48 |
-
|
49 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
50 |
-
Policy, and Cookie Policy.
|
51 |
-
|
52 |
-
New to LinkedIn? Join now
|
53 |
-
|
54 |
-
or
|
55 |
-
|
56 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
57 |
-
Policy, and Cookie Policy.
|
58 |
-
|
59 |
-
New to LinkedIn? Join now
|
60 |
-
|
61 |
-
Sign in to connect
|
62 |
-
|
63 |
-
Sign in to view Médéric’s full profile
|
64 |
-
|
65 |
-
Sign in
|
66 |
-
|
67 |
-
Welcome back
|
68 |
-
|
69 |
-
Email or phone
|
70 |
-
|
71 |
-
Password
|
72 |
-
|
73 |
-
Show
|
74 |
-
|
75 |
-
Forgot password?
|
76 |
-
|
77 |
-
Sign in
|
78 |
-
|
79 |
-
or
|
80 |
-
|
81 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
82 |
-
Policy, and Cookie Policy.
|
83 |
-
|
84 |
-
New to LinkedIn? Join now
|
85 |
-
|
86 |
-
or
|
87 |
-
|
88 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
89 |
-
Policy, and Cookie Policy.
|
90 |
-
|
91 |
-
New to LinkedIn? Join now
|
92 |
-
|
93 |
-
Decathlon Technology
|
94 |
-
|
95 |
-
University of Luxembourg
|
96 |
-
|
97 |
-
Websites
|
98 |
-
|
99 |
-
Websites
|
100 |
-
|
101 |
-
Company Website
|
102 |
-
https://www.fmind.dev
|
103 |
-
|
104 |
-
Portfolio
|
105 |
-
https://github.com/fmind/
|
106 |
-
|
107 |
-
Blog
|
108 |
-
https://fmind.medium.com/
|
109 |
-
|
110 |
-
- Report this profile
|
111 |
-
|
112 |
-
About
|
113 |
-
|
114 |
-
Note: I'm not available to work on new missions until the 1st of
|
115 |
-
September 2023. Thank you for your understanding.
|
116 |
-
When I worked as a teacher, I told my students that Artificial
|
117 |
-
Intelligence and Machine Learning are the most effective levers to make
|
118 |
-
a difference. Every day, new AI and ML solutions are released to empower
|
119 |
-
companies and individuals alike. The question is: Is your business ready
|
120 |
-
to provide the best AI/ML products for your customers?
|
121 |
-
I'm a professional Machine Learning Engineer, Data Scientist, and MLOps
|
122 |
-
ready to assist you in this quest. I've completed a Ph.D. in Machine
|
123 |
-
Learning and several high-end AI/ML certifications to help you build
|
124 |
-
leading data-driven services. My past experiences include working with
|
125 |
-
companies like Google, BNP Paribas, ArcelorMittal, the European
|
126 |
-
Commission, and Decathlon to frame their needs, create state-of-the-art
|
127 |
-
models and deliver AI/ML artifacts at scale.
|
128 |
-
I now work as a freelancer in Luxembourg, and I can carry out missions
|
129 |
-
remotely in other European countries. You can get in touch with me on
|
130 |
-
LinkedIn or at contact@fmind.dev. I'll be happy to collaborate with you
|
131 |
-
or discuss your favored AI/ML topics in the MLOps Community.
|
132 |
-
|
133 |
-
Experience
|
134 |
-
|
135 |
-
-
|
136 |
-
Lead MLOps Engineer
|
137 |
-
|
138 |
-
Decathlon Technology
|
139 |
-
|
140 |
-
Sep 2022 - Present1 year 2 months
|
141 |
-
|
142 |
-
Luxembourg
|
143 |
-
|
144 |
-
Continue the design and implementation of Decathlon's MLOps platform
|
145 |
-
with Databricks and AWS.
|
146 |
-
|
147 |
-
-
|
148 |
-
Mentor for aspiring Data Scientist and AI/ML Engineer
|
149 |
-
|
150 |
-
OpenClassrooms
|
151 |
-
|
152 |
-
Mar 2023 - Present8 months
|
153 |
-
|
154 |
-
France
|
155 |
-
|
156 |
-
Tutoring adult students to become data scientists specializing in
|
157 |
-
machine learning.
|
158 |
-
- https://openclassrooms.com/fr/paths/793-data-scientist
|
159 |
-
- https://openclassrooms.com/fr/paths/794-machine-learning-engineer
|
160 |
-
- https://openclassrooms.com/fr/paths/795-ai-engineer
|
161 |
-
|
162 |
-
-
|
163 |
-
Senior Data Scientist & Project Manager for the European Commission
|
164 |
-
|
165 |
-
Cronos Europa
|
166 |
-
|
167 |
-
Dec 2021 - Sep 202210 months
|
168 |
-
|
169 |
-
Luxembourg
|
170 |
-
|
171 |
-
Mission: Enhance the ARACHNE risk scoring tool (fraud detection).
|
172 |
-
Main tasks and responsibilities:
|
173 |
-
- Develop a new version of Arachne using data mining techniques
|
174 |
-
- Manage the development of the Arachne PoC/Project (SCRUM)
|
175 |
-
- Assist data scientists in their projects (Virtual Assistant, NLP,
|
176 |
-
…)
|
177 |
-
Technical stack:
|
178 |
-
- Data Science: Python, PostgreSQL, SQLAlchemy, Hugging Face,
|
179 |
-
HayStack
|
180 |
-
- Management/Environment: Jira, Confluence, MS Office, AWS, Azure
|
181 |
-
|
182 |
-
-
|
183 |
-
|
184 |
-
SFEIR
|
185 |
-
|
186 |
-
2 years
|
187 |
-
|
188 |
-
-
|
189 |
-
Project Manager & Machine Learning Engineer for Decathlon
|
190 |
-
|
191 |
-
SFEIR
|
192 |
-
|
193 |
-
Dec 2020 - Dec 20211 year 1 month
|
194 |
-
|
195 |
-
Luxembourg
|
196 |
-
|
197 |
-
Mission: Design and implement the next ML/MLOps platform on AWS
|
198 |
-
and GCP.
|
199 |
-
Main tasks and responsibilities:
|
200 |
-
- Design the functional & technical architecture of the platform
|
201 |
-
- Manage the MLOps@Decathlon initiative (tasks, plannings)
|
202 |
-
- Select the vendor solutions based on a user need analysis
|
203 |
-
- Communicate the progress and success to stack-holders
|
204 |
-
- Assist data scientists in their project (audience, forecast)
|
205 |
-
Technical stack:
|
206 |
-
- Data Science: Python, TensorFlow… Show more
|
207 |
-
|
208 |
-
Mission: Design and implement the next ML/MLOps platform on AWS
|
209 |
-
and GCP.
|
210 |
-
Main tasks and responsibilities:
|
211 |
-
- Design the functional & technical architecture of the platform
|
212 |
-
- Manage the MLOps@Decathlon initiative (tasks, plannings)
|
213 |
-
- Select the vendor solutions based on a user need analysis
|
214 |
-
- Communicate the progress and success to stack-holders
|
215 |
-
- Assist data scientists in their project (audience, forecast)
|
216 |
-
Technical stack:
|
217 |
-
- Data Science: Python, TensorFlow, Spark, sklearn, Jupyter,
|
218 |
-
Airflow
|
219 |
-
- Management: Google Workspace, Jira, UML, Terraform, Jenkins
|
220 |
-
- Environments: AWS (SageMaker), GCP (Vertex AI), DataBricks
|
221 |
-
Show less
|
222 |
-
-
|
223 |
-
Data Scientist for SFEIR
|
224 |
-
|
225 |
-
SFEIR
|
226 |
-
|
227 |
-
Oct 2020 - Nov 20202 months
|
228 |
-
|
229 |
-
Luxembourg, Luxembourg
|
230 |
-
|
231 |
-
Mission: Improve the visibility and assets of SFEIR's Data Team.
|
232 |
-
Main tasks and responsibilities:
|
233 |
-
- Design and create technical interviews for recruiting data
|
234 |
-
scientists.
|
235 |
-
- Become a Professional Machine Learning Engineer on Google
|
236 |
-
Cloud.
|
237 |
-
- Propose a strategy to improve the online visibility of SFEIR
|
238 |
-
data team.
|
239 |
-
- Share knowledge about data trends with non-technical staff
|
240 |
-
members.
|
241 |
-
- Create a group to write tutorials and kata on AI/ML for SFEIR
|
242 |
-
developers.
|
243 |
-
-
|
244 |
-
Data Scientist for ArcelorMittal
|
245 |
-
|
246 |
-
SFEIR
|
247 |
-
|
248 |
-
Jan 2020 - Sep 20209 months
|
249 |
-
|
250 |
-
Luxembourg
|
251 |
-
|
252 |
-
Mission: Train and optimize machine learning models to recommend
|
253 |
-
steel prices.
|
254 |
-
Main tasks and responsibilities:
|
255 |
-
- Create and fine-tune machine-learning models (tree-based)
|
256 |
-
- Evaluate the performance of the model on real datasets
|
257 |
-
- Communicate the results to business stack-holders
|
258 |
-
Technical stack:
|
259 |
-
- Data Science: Python, XGBoost, sklearn, Jupyter, SQL
|
260 |
-
- Analytics: Matplotlib, Seaborn, Tableau, Plotly, Dash
|
261 |
-
- Environment: MS-SQL, Azure Cloud, Jira, Papermill
|
262 |
-
|
263 |
-
-
|
264 |
-
|
265 |
-
University of Luxembourg
|
266 |
-
|
267 |
-
4 years 5 months
|
268 |
-
|
269 |
-
-
|
270 |
-
Research And Development Specialist
|
271 |
-
|
272 |
-
University of Luxembourg
|
273 |
-
|
274 |
-
Sep 2019 - Jan 20205 months
|
275 |
-
|
276 |
-
Luxembourg, Luxembourg
|
277 |
-
|
278 |
-
Management and development of Natural Language Understanding
|
279 |
-
(NLU) projects for BGL BNP Paribas.
|
280 |
-
-
|
281 |
-
Doctoral researcher
|
282 |
-
|
283 |
-
University of Luxembourg
|
284 |
-
|
285 |
-
Sep 2015 - Jan 20204 years 5 months
|
286 |
-
|
287 |
-
Luxembourg, Luxembourg
|
288 |
-
|
289 |
-
Research activities focused on Android security and artificial
|
290 |
-
intelligence.
|
291 |
-
Teaching big data, machine learning and Android programming to
|
292 |
-
students.
|
293 |
-
Collaboration with Google, San Francisco on finding malicious
|
294 |
-
Android artifacts.
|
295 |
-
|
296 |
-
-
|
297 |
-
Mentor for aspiring Data Scientist
|
298 |
-
|
299 |
-
OpenClassrooms
|
300 |
-
|
301 |
-
Aug 2018 - Dec 20191 year 5 months
|
302 |
-
|
303 |
-
France
|
304 |
-
|
305 |
-
Tutoring adult students to become data scientists specializing in
|
306 |
-
machine learning.
|
307 |
-
|
308 |
-
-
|
309 |
-
Security engineer specialized in log management and analysis
|
310 |
-
|
311 |
-
Clearstream
|
312 |
-
|
313 |
-
Apr 2014 - Aug 20151 year 5 months
|
314 |
-
|
315 |
-
Luxembourg, Luxembourg
|
316 |
-
|
317 |
-
Selection and deployment of a SIEM solution, participating in
|
318 |
-
security incident response.
|
319 |
-
|
320 |
-
- Web developer and administrator
|
321 |
-
|
322 |
-
Freaxmind
|
323 |
-
|
324 |
-
Aug 2011 - Aug 20132 years 1 month
|
325 |
-
|
326 |
-
France
|
327 |
-
|
328 |
-
Various contracts ranging from web development to software
|
329 |
-
maintenance and debugging.
|
330 |
-
|
331 |
-
-
|
332 |
-
Web Developer
|
333 |
-
|
334 |
-
Toul'embal
|
335 |
-
|
336 |
-
Jun 2012 - Aug 20123 months
|
337 |
-
|
338 |
-
Toul, France
|
339 |
-
|
340 |
-
Extension of a Prestashop e-commerce website and creation a
|
341 |
-
portfolio website with WordPress.
|
342 |
-
|
343 |
-
- Web Programmer
|
344 |
-
|
345 |
-
Empreinte Studio
|
346 |
-
|
347 |
-
Oct 2010 - Aug 201111 months
|
348 |
-
|
349 |
-
Épernay, France
|
350 |
-
|
351 |
-
Creation of modern website in PHP and MySQL with professional
|
352 |
-
writers and graphic designers.
|
353 |
-
|
354 |
-
-
|
355 |
-
Software Developer
|
356 |
-
|
357 |
-
GEOVARIANCES
|
358 |
-
|
359 |
-
Sep 2009 - Sep 20101 year 1 month
|
360 |
-
|
361 |
-
Avon, France
|
362 |
-
|
363 |
-
Development of a geostatistic application in C++ and Qt with
|
364 |
-
experienced software engineers.
|
365 |
-
|
366 |
-
-
|
367 |
-
Web Developer
|
368 |
-
|
369 |
-
CV Champagne Nicolas Feuillatte
|
370 |
-
|
371 |
-
Apr 2009 - Aug 20095 months
|
372 |
-
|
373 |
-
Épernay, France
|
374 |
-
|
375 |
-
Integration of customer and share management modules to J.D. Edwards
|
376 |
-
with PHP and Oracle.
|
377 |
-
|
378 |
-
Education
|
379 |
-
|
380 |
-
-
|
381 |
-
University of Luxembourg
|
382 |
-
|
383 |
-
Doctor of Philosophy - PhDComputer Security and Artificial IntelligenceVery Good
|
384 |
-
|
385 |
-
2015 - 2019
|
386 |
-
|
387 |
-
Activities and Societies: Teach Big Data and Android to students.
|
388 |
-
|
389 |
-
Thesis title: Creating better ground truth to further understand
|
390 |
-
Android malware
|
391 |
-
|
392 |
-
- UFR Mathématiques, Informatique, Mécanique et Automatique, Metz (France)
|
393 |
-
|
394 |
-
Master's degreecomputer and information systems security
|
395 |
-
|
396 |
-
2013 - 2014
|
397 |
-
|
398 |
-
- UFR Mathématiques et Informatique de l’Université de Lorraine, Nancy (France)
|
399 |
-
|
400 |
-
Bachelor and master yearscomputer science applied to business informatics
|
401 |
-
|
402 |
-
2011 - 2013
|
403 |
-
|
404 |
-
- IUT Sénart-Fontainebleau, Fontainebleau (France)
|
405 |
-
|
406 |
-
Professional bachelor's degreecomputer security and databases
|
407 |
-
|
408 |
-
2009 - 2010
|
409 |
-
|
410 |
-
- IUT Nancy-Charlemagne, Nancy (France)
|
411 |
-
|
412 |
-
Professional bachelor’s degreeweb development and integration
|
413 |
-
|
414 |
-
2008 - 2009
|
415 |
-
|
416 |
-
- Lycée François 1er, Vitry-le-François (France)
|
417 |
-
|
418 |
-
Technical degreenetwork and software development
|
419 |
-
|
420 |
-
2006 - 2008
|
421 |
-
|
422 |
-
- Lycée Marc Chagall, Reims (France)
|
423 |
-
|
424 |
-
Baccalauréat général degreescience, specialized in biology
|
425 |
-
|
426 |
-
2003 - 2006
|
427 |
-
|
428 |
-
Volunteer Experience
|
429 |
-
|
430 |
-
- MLOps Community Organizer (Luxembourg)
|
431 |
-
MLOps Community Organizer (Luxembourg)
|
432 |
-
|
433 |
-
MLOps Community
|
434 |
-
|
435 |
-
Nov 2022
|
436 |
-
|
437 |
-
Science and Technology
|
438 |
-
|
439 |
-
Organize regular meetups and events for the MLOps Community.
|
440 |
-
Regular partnership with AWS and the University of Luxembourg.
|
441 |
-
https://www.meetup.com/luxembourg-mlops-community/
|
442 |
-
|
443 |
-
Licenses & Certifications
|
444 |
-
|
445 |
-
- Machine Learning Associate
|
446 |
-
|
447 |
-
Databricks
|
448 |
-
|
449 |
-
Issued Nov 2022
|
450 |
-
|
451 |
-
Credential ID 61461287
|
452 |
-
|
453 |
-
See credential
|
454 |
-
|
455 |
-
- Databricks Lakehouse Fundamentals
|
456 |
-
|
457 |
-
Databricks
|
458 |
-
|
459 |
-
Issued Oct 2022
|
460 |
-
|
461 |
-
Credential ID 61029028
|
462 |
-
|
463 |
-
See credential
|
464 |
-
|
465 |
-
- Architecting with Google Kubernetes Engine Specialization
|
466 |
-
|
467 |
-
Google
|
468 |
-
|
469 |
-
Issued Sep 2022
|
470 |
-
|
471 |
-
Credential ID WLU4DBPSQ4B5
|
472 |
-
|
473 |
-
See credential
|
474 |
-
|
475 |
-
- Architecting with Google Kubernetes Engine: Foundations
|
476 |
-
|
477 |
-
Google
|
478 |
-
|
479 |
-
Issued Sep 2022
|
480 |
-
|
481 |
-
Credential ID DFWAC6BXLNGL
|
482 |
-
|
483 |
-
See credential
|
484 |
-
|
485 |
-
- Architecting with Google Kubernetes Engine: Production
|
486 |
-
|
487 |
-
Google
|
488 |
-
|
489 |
-
Issued Sep 2022
|
490 |
-
|
491 |
-
Credential ID K5SZHUST5HP2
|
492 |
-
|
493 |
-
See credential
|
494 |
-
|
495 |
-
- Architecting with Google Kubernetes Engine: Workloads
|
496 |
-
|
497 |
-
Google
|
498 |
-
|
499 |
-
Issued Sep 2022
|
500 |
-
|
501 |
-
Credential ID ULJQAXGDVKYK
|
502 |
-
|
503 |
-
See credential
|
504 |
-
|
505 |
-
- Google Cloud Fundamentals: Core Infrastructure
|
506 |
-
|
507 |
-
Google
|
508 |
-
|
509 |
-
Issued Sep 2022
|
510 |
-
|
511 |
-
Credential ID 4CE8WQ6AWKFF
|
512 |
-
|
513 |
-
See credential
|
514 |
-
|
515 |
-
- Iterative Tools for Data Scientists and Analysts
|
516 |
-
|
517 |
-
Iterative
|
518 |
-
|
519 |
-
Issued Aug 2022
|
520 |
-
|
521 |
-
Credential ID 62fcb79418f51945ea
|
522 |
-
|
523 |
-
See credential
|
524 |
-
|
525 |
-
- Azure Data Scientist Associate
|
526 |
-
|
527 |
-
Microsoft
|
528 |
-
|
529 |
-
Issued Jul 2022
|
530 |
-
|
531 |
-
Credential ID 992564946
|
532 |
-
|
533 |
-
See credential
|
534 |
-
|
535 |
-
- Azure Machine Learning for Data Scientists
|
536 |
-
|
537 |
-
Microsoft
|
538 |
-
|
539 |
-
Issued Jun 2022
|
540 |
-
|
541 |
-
Credential ID MZKV7LSTQ9HX
|
542 |
-
|
543 |
-
See credential
|
544 |
-
|
545 |
-
- Build and Operate Machine Learning Solutions with Azure Microsoft
|
546 |
-
|
547 |
-
Microsoft
|
548 |
-
|
549 |
-
Issued Jun 2022
|
550 |
-
|
551 |
-
Credential ID 7FBX68MH272C
|
552 |
-
|
553 |
-
See credential
|
554 |
-
|
555 |
-
- Create Machine Learning Models in Microsoft Azure
|
556 |
-
|
557 |
-
Microsoft
|
558 |
-
|
559 |
-
Issued Jun 2022
|
560 |
-
|
561 |
-
Credential ID SHALM9PM3MPX
|
562 |
-
|
563 |
-
See credential
|
564 |
-
|
565 |
-
- Microsoft Azure Data Scientist Associate - DP-100 Test Prep Specialization
|
566 |
-
|
567 |
-
Microsoft
|
568 |
-
|
569 |
-
Issued Jun 2022
|
570 |
-
|
571 |
-
Credential ID L5P3TYLAYLLT
|
572 |
-
|
573 |
-
See credential
|
574 |
-
|
575 |
-
- Perform data science with Azure Databricks
|
576 |
-
|
577 |
-
Microsoft
|
578 |
-
|
579 |
-
Issued Jun 2022
|
580 |
-
|
581 |
-
Credential ID RQ7PLFYZVLXX
|
582 |
-
|
583 |
-
See credential
|
584 |
-
|
585 |
-
- Prepare for DP-100: Data Science on Microsoft Azure Exam
|
586 |
-
|
587 |
-
Microsoft
|
588 |
-
|
589 |
-
Issued Jun 2022
|
590 |
-
|
591 |
-
Credential ID K5KW27AVMYS2
|
592 |
-
|
593 |
-
See credential
|
594 |
-
|
595 |
-
- Neo4j Graph Data Science Certified
|
596 |
-
|
597 |
-
Neo4j
|
598 |
-
|
599 |
-
Issued Apr 2022
|
600 |
-
|
601 |
-
Credential ID 17351346
|
602 |
-
|
603 |
-
See credential
|
604 |
-
|
605 |
-
- Microsoft Certified: Azure AI Fundamentals
|
606 |
-
|
607 |
-
Microsoft
|
608 |
-
|
609 |
-
Issued Jan 2022
|
610 |
-
|
611 |
-
Credential ID 1098-0884
|
612 |
-
|
613 |
-
See credential
|
614 |
-
|
615 |
-
- Artificial Intelligence on Microsoft Azure
|
616 |
-
|
617 |
-
Microsoft
|
618 |
-
|
619 |
-
Issued Dec 2021
|
620 |
-
|
621 |
-
Credential ID Z8FSWXBSAGLD
|
622 |
-
|
623 |
-
See credential
|
624 |
-
|
625 |
-
- Computer Vision in Microsoft Azure
|
626 |
-
|
627 |
-
Microsoft
|
628 |
-
|
629 |
-
Issued Dec 2021
|
630 |
-
|
631 |
-
Credential ID KDDPYLKM2DA5
|
632 |
-
|
633 |
-
See credential
|
634 |
-
|
635 |
-
- Microsoft Azure AI Fundamentals AI-900 Exam Prep Specialization
|
636 |
-
|
637 |
-
Microsoft
|
638 |
-
|
639 |
-
Issued Dec 2021
|
640 |
-
|
641 |
-
Credential ID 96944QKZH9BU
|
642 |
-
|
643 |
-
See credential
|
644 |
-
|
645 |
-
- Microsoft Azure Machine Learning
|
646 |
-
|
647 |
-
Microsoft
|
648 |
-
|
649 |
-
Issued Dec 2021
|
650 |
-
|
651 |
-
Credential ID 32ES25845Q55
|
652 |
-
|
653 |
-
See credential
|
654 |
-
|
655 |
-
- Natural Language Processing in Microsoft Azure
|
656 |
-
|
657 |
-
Microsoft
|
658 |
-
|
659 |
-
Issued Dec 2021
|
660 |
-
|
661 |
-
Credential ID XVN23N8CKRGY
|
662 |
-
|
663 |
-
See credential
|
664 |
-
|
665 |
-
- Preparing for AI-900: Microsoft Azure AI Fundamentals exam
|
666 |
-
|
667 |
-
Microsoft
|
668 |
-
|
669 |
-
Issued Dec 2021
|
670 |
-
|
671 |
-
Credential ID YC83C22L8TBL
|
672 |
-
|
673 |
-
See credential
|
674 |
-
|
675 |
-
- Build a Website on Google Cloud
|
676 |
-
|
677 |
-
Google
|
678 |
-
|
679 |
-
Issued Aug 2021
|
680 |
-
|
681 |
-
See credential
|
682 |
-
|
683 |
-
- Build and Secure Networks in Google Cloud
|
684 |
-
|
685 |
-
Google
|
686 |
-
|
687 |
-
Issued Aug 2021
|
688 |
-
|
689 |
-
See credential
|
690 |
-
|
691 |
-
- Create ML Models with BigQuery ML
|
692 |
-
|
693 |
-
Google
|
694 |
-
|
695 |
-
Issued Aug 2021
|
696 |
-
|
697 |
-
See credential
|
698 |
-
|
699 |
-
- Create and Manage Cloud Resources
|
700 |
-
|
701 |
-
Google
|
702 |
-
|
703 |
-
Issued Aug 2021
|
704 |
-
|
705 |
-
See credential
|
706 |
-
|
707 |
-
- Deploy to Kubernetes in Google Cloud
|
708 |
-
|
709 |
-
Google
|
710 |
-
|
711 |
-
Issued Aug 2021
|
712 |
-
|
713 |
-
See credential
|
714 |
-
|
715 |
-
- Implement DevOps in Google Cloud
|
716 |
-
|
717 |
-
Google
|
718 |
-
|
719 |
-
Issued Aug 2021
|
720 |
-
|
721 |
-
See credential
|
722 |
-
|
723 |
-
- Insights from Data with BigQuery
|
724 |
-
|
725 |
-
Google
|
726 |
-
|
727 |
-
Issued Aug 2021
|
728 |
-
|
729 |
-
See credential
|
730 |
-
|
731 |
-
- Integrate with Machine Learning APIs
|
732 |
-
|
733 |
-
Google
|
734 |
-
|
735 |
-
Issued Aug 2021
|
736 |
-
|
737 |
-
See credential
|
738 |
-
|
739 |
-
- Perform Foundational Infrastructure Tasks in Google Cloud
|
740 |
-
|
741 |
-
Google
|
742 |
-
|
743 |
-
Issued Aug 2021
|
744 |
-
|
745 |
-
See credential
|
746 |
-
|
747 |
-
- Apache Spark Associate Developer
|
748 |
-
|
749 |
-
Databricks
|
750 |
-
|
751 |
-
Issued Jun 2021
|
752 |
-
|
753 |
-
Credential ID fff03919-bbc9-304e-99ad-6f2ed47455ed
|
754 |
-
|
755 |
-
See credential
|
756 |
-
|
757 |
-
- Scalable Machine Learning with Apache Spark
|
758 |
-
|
759 |
-
Databricks
|
760 |
-
|
761 |
-
Issued May 2021
|
762 |
-
|
763 |
-
Credential ID 0f4adf96-0412-32f2-8232-fa50c51c9b47
|
764 |
-
|
765 |
-
See credential
|
766 |
-
|
767 |
-
- Apache Spark Programming with Databricks
|
768 |
-
|
769 |
-
Databricks
|
770 |
-
|
771 |
-
Issued May 2021
|
772 |
-
|
773 |
-
Credential ID 518a1d63-8894-3ab5-aaa5-50a9f169436c
|
774 |
-
|
775 |
-
See credential
|
776 |
-
|
777 |
-
- Data Science Professional
|
778 |
-
|
779 |
-
Databricks
|
780 |
-
|
781 |
-
Issued May 2021
|
782 |
-
|
783 |
-
Credential ID f05164e1-5a78-37f8-9c69-3e996fdbb21f
|
784 |
-
|
785 |
-
See credential
|
786 |
-
|
787 |
-
- Delta Lake Fundamentals Accreditation
|
788 |
-
|
789 |
-
Databricks
|
790 |
-
|
791 |
-
Issued May 2021
|
792 |
-
|
793 |
-
Credential ID 0d042e3f-50d3-3821-b064-f3c12ca6c17f
|
794 |
-
|
795 |
-
See credential
|
796 |
-
|
797 |
-
- Deploying a Machine Learning Project with MLflow Projects
|
798 |
-
|
799 |
-
Databricks
|
800 |
-
|
801 |
-
Issued May 2021
|
802 |
-
|
803 |
-
Credential ID 2afa0c7f-48f4-35af-b366-f7c77d2cd20a
|
804 |
-
|
805 |
-
See credential
|
806 |
-
|
807 |
-
- Tracking Experiments with MLflow
|
808 |
-
|
809 |
-
Databricks
|
810 |
-
|
811 |
-
Issued May 2021
|
812 |
-
|
813 |
-
Credential ID 0cbf87b7-e096-3792-a3b7-62d86aa6380d
|
814 |
-
|
815 |
-
See credential
|
816 |
-
|
817 |
-
- Unified Data Analytics Accreditation
|
818 |
-
|
819 |
-
Databricks
|
820 |
-
|
821 |
-
Issued May 2021
|
822 |
-
|
823 |
-
Credential ID afba5402-b5e4-3f9e-95f2-51d6bbb5fa64
|
824 |
-
|
825 |
-
See credential
|
826 |
-
|
827 |
-
- ML Pipelines on Google Cloud
|
828 |
-
|
829 |
-
Google
|
830 |
-
|
831 |
-
Issued Mar 2021
|
832 |
-
|
833 |
-
Credential ID FN5PYWX5PRCP
|
834 |
-
|
835 |
-
See credential
|
836 |
-
|
837 |
-
- Introduction to Trading, Machine Learning & GCP
|
838 |
-
|
839 |
-
Google
|
840 |
-
|
841 |
-
Issued Nov 2020
|
842 |
-
|
843 |
-
Credential ID YV9H5PF4YPLZ
|
844 |
-
|
845 |
-
See credential
|
846 |
-
|
847 |
-
- MLOps (Machine Learning Operations) Fundamentals
|
848 |
-
|
849 |
-
Google
|
850 |
-
|
851 |
-
Issued Nov 2020
|
852 |
-
|
853 |
-
Credential ID 4BDA24UL7K9Z
|
854 |
-
|
855 |
-
See credential
|
856 |
-
|
857 |
-
- Machine Learning for Trading Specialization
|
858 |
-
|
859 |
-
Google
|
860 |
-
|
861 |
-
Issued Nov 2020
|
862 |
-
|
863 |
-
Credential ID YSNPABSMV6JL
|
864 |
-
|
865 |
-
See credential
|
866 |
-
|
867 |
-
- Reinforcement Learning for Trading Strategies
|
868 |
-
|
869 |
-
Google
|
870 |
-
|
871 |
-
Issued Nov 2020
|
872 |
-
|
873 |
-
Credential ID VHKJLFPLLDLU
|
874 |
-
|
875 |
-
See credential
|
876 |
-
|
877 |
-
- Using Machine Learning in Trading and Finance
|
878 |
-
|
879 |
-
Google
|
880 |
-
|
881 |
-
Issued Nov 2020
|
882 |
-
|
883 |
-
Credential ID X5YYLBMPY4BU
|
884 |
-
|
885 |
-
See credential
|
886 |
-
|
887 |
-
- DeepLearning.AI TensorFlow Developer Specialization
|
888 |
-
|
889 |
-
DeepLearning.AI
|
890 |
-
|
891 |
-
Issued Oct 2020
|
892 |
-
|
893 |
-
Credential ID LQ4GHWJ6URBS
|
894 |
-
|
895 |
-
See credential
|
896 |
-
|
897 |
-
- Perform Foundational Data, ML, and AI Tasks in Google Cloud
|
898 |
-
|
899 |
-
Google
|
900 |
-
|
901 |
-
Issued Oct 2020
|
902 |
-
|
903 |
-
See credential
|
904 |
-
|
905 |
-
- Professional Machine Learning Engineer
|
906 |
-
|
907 |
-
Google
|
908 |
-
|
909 |
-
Issued Oct 2020
|
910 |
-
|
911 |
-
Credential ID 24896478
|
912 |
-
|
913 |
-
See credential
|
914 |
-
|
915 |
-
- Sequences, Time Series and Prediction
|
916 |
-
|
917 |
-
Google
|
918 |
-
|
919 |
-
Issued Oct 2020
|
920 |
-
|
921 |
-
Credential ID WHBV68C4WJT5
|
922 |
-
|
923 |
-
See credential
|
924 |
-
|
925 |
-
- Convolutional Neural Networks in TensorFlow
|
926 |
-
|
927 |
-
Google
|
928 |
-
|
929 |
-
Issued Sep 2020
|
930 |
-
|
931 |
-
Credential ID 78HJEJZ3T2BB
|
932 |
-
|
933 |
-
See credential
|
934 |
-
|
935 |
-
- Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning
|
936 |
-
|
937 |
-
Google
|
938 |
-
|
939 |
-
Issued Sep 2020
|
940 |
-
|
941 |
-
Credential ID SW885ZMDHTYM
|
942 |
-
|
943 |
-
See credential
|
944 |
-
|
945 |
-
- Natural Language Processing in TensorFlow
|
946 |
-
|
947 |
-
Google
|
948 |
-
|
949 |
-
Issued Sep 2020
|
950 |
-
|
951 |
-
Credential ID JZ9TBHXJFLWM
|
952 |
-
|
953 |
-
See credential
|
954 |
-
|
955 |
-
- Advanced Machine Learning with TensorFlow on Google Cloud Platform Specialization
|
956 |
-
|
957 |
-
Google
|
958 |
-
|
959 |
-
Issued Jul 2020
|
960 |
-
|
961 |
-
Credential ID V492QQ4JJKEB
|
962 |
-
|
963 |
-
See credential
|
964 |
-
|
965 |
-
- End-to-End Machine Learning with TensorFlow on GCP
|
966 |
-
|
967 |
-
Google
|
968 |
-
|
969 |
-
Issued Jul 2020
|
970 |
-
|
971 |
-
Credential ID QLDMNADDBSRR
|
972 |
-
|
973 |
-
See credential
|
974 |
-
|
975 |
-
- Image Understanding with TensorFlow on GCP
|
976 |
-
|
977 |
-
Google
|
978 |
-
|
979 |
-
Issued Jul 2020
|
980 |
-
|
981 |
-
Credential ID HY4HSSY8JSPN
|
982 |
-
|
983 |
-
See credential
|
984 |
-
|
985 |
-
- Production Machine Learning Systems
|
986 |
-
|
987 |
-
Google
|
988 |
-
|
989 |
-
Issued Jul 2020
|
990 |
-
|
991 |
-
Credential ID THZZNW22LHKT
|
992 |
-
|
993 |
-
See credential
|
994 |
-
|
995 |
-
- Recommendation Systems with TensorFlow on GCP
|
996 |
-
|
997 |
-
Google
|
998 |
-
|
999 |
-
Issued Jul 2020
|
1000 |
-
|
1001 |
-
Credential ID 2D4LT28697TC
|
1002 |
-
|
1003 |
-
See credential
|
1004 |
-
|
1005 |
-
- Sequence Models for Time Series and Natural Language Processing
|
1006 |
-
|
1007 |
-
Google
|
1008 |
-
|
1009 |
-
Issued Jul 2020
|
1010 |
-
|
1011 |
-
Credential ID 6XUV7YJFM3ZA
|
1012 |
-
|
1013 |
-
See credential
|
1014 |
-
|
1015 |
-
- Building Batch Data Pipelines on GCP
|
1016 |
-
|
1017 |
-
Google
|
1018 |
-
|
1019 |
-
Issued May 2020
|
1020 |
-
|
1021 |
-
Credential ID 5QYSK9E5EAFN
|
1022 |
-
|
1023 |
-
See credential
|
1024 |
-
|
1025 |
-
- Building Resilient Streaming Analytics Systems on GCP
|
1026 |
-
|
1027 |
-
Google
|
1028 |
-
|
1029 |
-
Issued May 2020
|
1030 |
-
|
1031 |
-
Credential ID FYQW7D4F6PD4
|
1032 |
-
|
1033 |
-
See credential
|
1034 |
-
|
1035 |
-
- Data Engineering with Google Cloud Specialization
|
1036 |
-
|
1037 |
-
Google
|
1038 |
-
|
1039 |
-
Issued May 2020
|
1040 |
-
|
1041 |
-
Credential ID EPZ3WQFC423E
|
1042 |
-
|
1043 |
-
See credential
|
1044 |
-
|
1045 |
-
- Modernizing Data Lakes and Data Warehouses with GCP
|
1046 |
-
|
1047 |
-
Google
|
1048 |
-
|
1049 |
-
Issued May 2020
|
1050 |
-
|
1051 |
-
Credential ID 393P3HLZWY8H
|
1052 |
-
|
1053 |
-
See credential
|
1054 |
-
|
1055 |
-
- Smart Analytics, Machine Learning, and AI on GCP
|
1056 |
-
|
1057 |
-
Google
|
1058 |
-
|
1059 |
-
Issued May 2020
|
1060 |
-
|
1061 |
-
Credential ID AK77VUVN4ARJ
|
1062 |
-
|
1063 |
-
See credential
|
1064 |
-
|
1065 |
-
- Google Cloud Platform Big Data and Machine Learning Fundamentals
|
1066 |
-
|
1067 |
-
Google
|
1068 |
-
|
1069 |
-
Issued Apr 2020
|
1070 |
-
|
1071 |
-
Credential ID 2Q35NYHYMW5E
|
1072 |
-
|
1073 |
-
See credential
|
1074 |
-
|
1075 |
-
- Devenez Mentor Evaluateur
|
1076 |
-
|
1077 |
-
OpenClassrooms
|
1078 |
-
|
1079 |
-
Issued Feb 2019
|
1080 |
-
|
1081 |
-
Credential ID 8151214336
|
1082 |
-
|
1083 |
-
See credential
|
1084 |
-
|
1085 |
-
- Advanced AI: Deep Reinforcement Learning in Python
|
1086 |
-
|
1087 |
-
Udemy
|
1088 |
-
|
1089 |
-
Issued Aug 2018
|
1090 |
-
|
1091 |
-
Credential ID UC-5FM0CC9S
|
1092 |
-
|
1093 |
-
See credential
|
1094 |
-
|
1095 |
-
- Artificial Intelligence: Reinforcement Learning in Python
|
1096 |
-
|
1097 |
-
Udemy
|
1098 |
-
|
1099 |
-
Issued Jul 2018
|
1100 |
-
|
1101 |
-
Credential ID UC-XALJEH7G
|
1102 |
-
|
1103 |
-
See credential
|
1104 |
-
|
1105 |
-
- Concevez un site avec Flask
|
1106 |
-
|
1107 |
-
OpenClassrooms
|
1108 |
-
|
1109 |
-
Issued Jul 2018
|
1110 |
-
|
1111 |
-
Credential ID 5343531703
|
1112 |
-
|
1113 |
-
See credential
|
1114 |
-
|
1115 |
-
- Les étapes de la vie du Mentor
|
1116 |
-
|
1117 |
-
OpenClassrooms
|
1118 |
-
|
1119 |
-
Issued Jul 2018
|
1120 |
-
|
1121 |
-
Credential ID 8431716200
|
1122 |
-
|
1123 |
-
See credential
|
1124 |
-
|
1125 |
-
- Devenez Mentor chez OpenClassrooms
|
1126 |
-
|
1127 |
-
OpenClassrooms
|
1128 |
-
|
1129 |
-
Issued May 2018
|
1130 |
-
|
1131 |
-
Credential ID 6193593386
|
1132 |
-
|
1133 |
-
See credential
|
1134 |
-
|
1135 |
-
- Complete Guide to ElasticSearch
|
1136 |
-
|
1137 |
-
Udemy
|
1138 |
-
|
1139 |
-
Issued Mar 2018
|
1140 |
-
|
1141 |
-
Credential ID UC-H5AJQVA3
|
1142 |
-
|
1143 |
-
See credential
|
1144 |
-
|
1145 |
-
- Introduction to Hadoop
|
1146 |
-
|
1147 |
-
The Linux Foundation
|
1148 |
-
|
1149 |
-
Issued Oct 2017
|
1150 |
-
|
1151 |
-
Credential ID ad676a8fe7994edea33516b80b540971
|
1152 |
-
|
1153 |
-
See credential
|
1154 |
-
|
1155 |
-
- Artificial Intelligence Nanodegree
|
1156 |
-
|
1157 |
-
Udacity
|
1158 |
-
|
1159 |
-
Issued Sep 2017
|
1160 |
-
|
1161 |
-
Credential ID PV7A7EAA
|
1162 |
-
|
1163 |
-
See credential
|
1164 |
-
|
1165 |
-
- High Performance Computing
|
1166 |
-
|
1167 |
-
University of Luxembourg
|
1168 |
-
|
1169 |
-
Issued Feb 2017
|
1170 |
-
|
1171 |
-
See credential
|
1172 |
-
|
1173 |
-
- Machine Learning
|
1174 |
-
|
1175 |
-
Standford University
|
1176 |
-
|
1177 |
-
Issued Sep 2015
|
1178 |
-
|
1179 |
-
Credential ID Grade: 97%
|
1180 |
-
|
1181 |
-
See credential
|
1182 |
-
|
1183 |
-
- TOEIC
|
1184 |
-
|
1185 |
-
Listening, Reading
|
1186 |
-
|
1187 |
-
Issued Jan 2014
|
1188 |
-
|
1189 |
-
Credential ID Score: 975/990
|
1190 |
-
|
1191 |
-
Publications
|
1192 |
-
|
1193 |
-
- Is AI/ML Monitoring just Data Engineering? 🤔
|
1194 |
-
|
1195 |
-
MLOps Community July 24, 2023
|
1196 |
-
|
1197 |
-
While the future of machine learning and MLOps is being debated,
|
1198 |
-
practitioners still need to attend to their machine learning models
|
1199 |
-
in production. This is no easy task, as ML engineers must constantly
|
1200 |
-
assess the quality of the data that enters and exits their
|
1201 |
-
pipelines, and ensure that their models generate the correct
|
1202 |
-
predictions. To assist ML engineers with this challenge, several
|
1203 |
-
AI/ML monitoring solutions have been developed.
|
1204 |
-
In this article, I will discuss the nature of AI/ML… Show more
|
1205 |
-
|
1206 |
-
While the future of machine learning and MLOps is being debated,
|
1207 |
-
practitioners still need to attend to their machine learning models
|
1208 |
-
in production. This is no easy task, as ML engineers must constantly
|
1209 |
-
assess the quality of the data that enters and exits their
|
1210 |
-
pipelines, and ensure that their models generate the correct
|
1211 |
-
predictions. To assist ML engineers with this challenge, several
|
1212 |
-
AI/ML monitoring solutions have been developed.
|
1213 |
-
In this article, I will discuss the nature of AI/ML monitoring and
|
1214 |
-
how it relates to data engineering. First, I will present the
|
1215 |
-
similarities between AI/ML monitoring and data engineering. Second,
|
1216 |
-
I will enumerate additional features that AI/ML monitoring solutions
|
1217 |
-
can provide. Third, I will briefly touch on the topic of AI/ML
|
1218 |
-
observability and its relation to AI/ML monitoring. Finally, I will
|
1219 |
-
provide my conclusion about the field of AI/ML monitoring and how it
|
1220 |
-
should be considered to ensure the success of your AI/ML project.
|
1221 |
-
Show less
|
1222 |
-
|
1223 |
-
See publication
|
1224 |
-
|
1225 |
-
- A great MLOps project should start with a good Python Package 🐍
|
1226 |
-
|
1227 |
-
MLOps Community June 28, 2023
|
1228 |
-
|
1229 |
-
In this article, I present the implementation of a Python package on
|
1230 |
-
GitHub designed to support MLOps initiatives. The goal of this
|
1231 |
-
package is to make the coding workflow of data scientists and ML
|
1232 |
-
engineers as flexible, robust, and productive as possible. First, I
|
1233 |
-
start by motivating the use of Python packages. Then, I provide some
|
1234 |
-
tools and tips you can include in your MLOps project. Finally, I
|
1235 |
-
explain the follow-up steps required to take this package to the
|
1236 |
-
next level and make it work in your… Show more
|
1237 |
-
|
1238 |
-
In this article, I present the implementation of a Python package on
|
1239 |
-
GitHub designed to support MLOps initiatives. The goal of this
|
1240 |
-
package is to make the coding workflow of data scientists and ML
|
1241 |
-
engineers as flexible, robust, and productive as possible. First, I
|
1242 |
-
start by motivating the use of Python packages. Then, I provide some
|
1243 |
-
tools and tips you can include in your MLOps project. Finally, I
|
1244 |
-
explain the follow-up steps required to take this package to the
|
1245 |
-
next level and make it work in your environment. Show less
|
1246 |
-
|
1247 |
-
See publication
|
1248 |
-
|
1249 |
-
- Fixing the MLOps Survey on LLMs with ChatGPT API: Lessons Learned
|
1250 |
-
|
1251 |
-
MLOps Community May 11, 2023
|
1252 |
-
|
1253 |
-
Large Language Model (LLM) is such an existing topic. Since the
|
1254 |
-
release of ChatGPT, we saw a surge of innovation ranging from
|
1255 |
-
education mentorship to finance advisory. Each week is a new
|
1256 |
-
opportunity for addressing new kinds of problems, increasing human
|
1257 |
-
productivity, or improving existing solutions. Yet, we may wonder if
|
1258 |
-
this is just a new hype cycle or if organizations are truly adopting
|
1259 |
-
LLMs at scale …
|
1260 |
-
On March 2023, the MLOps Community issued a survey about LLMs in
|
1261 |
-
production to… Show more
|
1262 |
-
|
1263 |
-
Large Language Model (LLM) is such an existing topic. Since the
|
1264 |
-
release of ChatGPT, we saw a surge of innovation ranging from
|
1265 |
-
education mentorship to finance advisory. Each week is a new
|
1266 |
-
opportunity for addressing new kinds of problems, increasing human
|
1267 |
-
productivity, or improving existing solutions. Yet, we may wonder if
|
1268 |
-
this is just a new hype cycle or if organizations are truly adopting
|
1269 |
-
LLMs at scale …
|
1270 |
-
On March 2023, the MLOps Community issued a survey about LLMs in
|
1271 |
-
production to picture the state of adoption. The survey is full of
|
1272 |
-
interesting insights, but there is a catch: 80% of the questions are
|
1273 |
-
open-ended, which means respondents answered the survey freely from
|
1274 |
-
a few keywords to full sentences. I volunteered to clean up the
|
1275 |
-
answers with the help of ChatGPT and let the community get a grasp
|
1276 |
-
of the survey experiences.
|
1277 |
-
In this article, I present the steps and lessons learned from my
|
1278 |
-
journey to shed some light on the MLOps survey on LLMs. I’m first
|
1279 |
-
going to present the goal and questions of the survey. Then, I will
|
1280 |
-
explain how I used ChatGPT to review the data and standardize the
|
1281 |
-
content. Finally, I’m going to evaluate the performance of ChatGPT
|
1282 |
-
compared to a manual review. Show less
|
1283 |
-
|
1284 |
-
See publication
|
1285 |
-
|
1286 |
-
- Kubeflow: The Machine Learning Toolkit for Kubernetes
|
1287 |
-
|
1288 |
-
MLOps Community in Luxembourg April 26, 2023
|
1289 |
-
|
1290 |
-
See publication
|
1291 |
-
|
1292 |
-
- MLflow: An open source platform for the machine learning lifecycle
|
1293 |
-
|
1294 |
-
MLOps Community in Luxembourg April 26, 2023
|
1295 |
-
|
1296 |
-
See publication
|
1297 |
-
|
1298 |
-
- We need POSIX for MLOps
|
1299 |
-
|
1300 |
-
MLOps Community April 21, 2023
|
1301 |
-
|
1302 |
-
If you work on MLOps, you must navigate an ever-growing landscape of
|
1303 |
-
tools and solutions. This is both an intense source of stimulation
|
1304 |
-
and fatigue for MLOps practitioners.
|
1305 |
-
Vendors and users face the same problem: How can we combine all
|
1306 |
-
these tools without the combinatorial complexity of creating custom
|
1307 |
-
integrations?
|
1308 |
-
In this article, I propose a solution analogous to POSIX to address
|
1309 |
-
this challenge. First, I motivate the creation of common protocols
|
1310 |
-
and schemas for combining MLOps… Show more
|
1311 |
-
|
1312 |
-
If you work on MLOps, you must navigate an ever-growing landscape of
|
1313 |
-
tools and solutions. This is both an intense source of stimulation
|
1314 |
-
and fatigue for MLOps practitioners.
|
1315 |
-
Vendors and users face the same problem: How can we combine all
|
1316 |
-
these tools without the combinatorial complexity of creating custom
|
1317 |
-
integrations?
|
1318 |
-
In this article, I propose a solution analogous to POSIX to address
|
1319 |
-
this challenge. First, I motivate the creation of common protocols
|
1320 |
-
and schemas for combining MLOps tools. Second, I present a
|
1321 |
-
high-level architecture to support implementation. Third, I conclude
|
1322 |
-
with the benefits and limitations of standardizing MLOps. Show less
|
1323 |
-
|
1324 |
-
See publication
|
1325 |
-
|
1326 |
-
- How to install Kubeflow Pipelines v2 on Apple Silicon
|
1327 |
-
|
1328 |
-
Medium September 24, 2022
|
1329 |
-
|
1330 |
-
Kubeflow Pipelines (KFP) is a powerful platform for building machine
|
1331 |
-
learning pipelines at scale with Kubernetes. The platform is well
|
1332 |
-
supported on major cloud platforms such as GCP (Vertex AI Pipelines)
|
1333 |
-
or AWS (Kubeflow on AWS). However, installing KFP on Apple Silicon
|
1334 |
-
(macOS 12.5.1 with Apple M1 Pro) proved to be more challenging than
|
1335 |
-
I imagined. Thus, I wanted to share my experience and tips to
|
1336 |
-
install KFP as easily as possible on your shiny Mac.
|
1337 |
-
In this article, I present 4 steps to… Show more
|
1338 |
-
|
1339 |
-
Kubeflow Pipelines (KFP) is a powerful platform for building machine
|
1340 |
-
learning pipelines at scale with Kubernetes. The platform is well
|
1341 |
-
supported on major cloud platforms such as GCP (Vertex AI Pipelines)
|
1342 |
-
or AWS (Kubeflow on AWS). However, installing KFP on Apple Silicon
|
1343 |
-
(macOS 12.5.1 with Apple M1 Pro) proved to be more challenging than
|
1344 |
-
I imagined. Thus, I wanted to share my experience and tips to
|
1345 |
-
install KFP as easily as possible on your shiny Mac.
|
1346 |
-
In this article, I present 4 steps to install Kubeflow on Apple
|
1347 |
-
Silicon, using Rancher Desktop for setting up Docker/Kubernetes. In
|
1348 |
-
the end, I list the problems I encountered during the installation
|
1349 |
-
of Kubeflow Pipelines. Show less
|
1350 |
-
|
1351 |
-
See publication
|
1352 |
-
|
1353 |
-
- The Programming Trade-Off: Purpose, Productivity, Performance
|
1354 |
-
|
1355 |
-
Medium August 15, 2019
|
1356 |
-
|
1357 |
-
As programmers, we are continuously looking for languages that are
|
1358 |
-
performant, productive, and general purpose. Is there any
|
1359 |
-
programming language that currently satisfies these properties? Can
|
1360 |
-
we ever create one?
|
1361 |
-
In this article, I present a fundamental trade-off that affects the
|
1362 |
-
design of programming languages and the success of software
|
1363 |
-
projects.
|
1364 |
-
|
1365 |
-
See publication
|
1366 |
-
|
1367 |
-
- Creating better ground truth to further understand Android malware: A large scale mining approach based on antivirus labels and malicious artifacts
|
1368 |
-
|
1369 |
-
University of Luxembourg July 1, 2019
|
1370 |
-
|
1371 |
-
Mobile applications are essential for interacting with technology
|
1372 |
-
and other people. With more than 2 billion devices deployed all over
|
1373 |
-
the world, Android offers a thriving ecosystem by making accessible
|
1374 |
-
the work of thousands of developers on digital marketplaces such as
|
1375 |
-
Google Play. Nevertheless, the success of Android also exposes
|
1376 |
-
millions of users to malware authors who seek to siphon private
|
1377 |
-
information and hijack mobile devices for their benefits.
|
1378 |
-
To fight against the proliferation… Show more
|
1379 |
-
|
1380 |
-
Mobile applications are essential for interacting with technology
|
1381 |
-
and other people. With more than 2 billion devices deployed all over
|
1382 |
-
the world, Android offers a thriving ecosystem by making accessible
|
1383 |
-
the work of thousands of developers on digital marketplaces such as
|
1384 |
-
Google Play. Nevertheless, the success of Android also exposes
|
1385 |
-
millions of users to malware authors who seek to siphon private
|
1386 |
-
information and hijack mobile devices for their benefits.
|
1387 |
-
To fight against the proliferation of Android malware, the security
|
1388 |
-
community embraced machine learning, a branch of artificial
|
1389 |
-
intelligence that powers a new generation of detection systems.
|
1390 |
-
Machine learning algorithms, however, require a substantial number
|
1391 |
-
of qualified samples to learn the classification rules enforced by
|
1392 |
-
security experts. Unfortunately, malware ground truths are
|
1393 |
-
notoriously hard to construct due to the inherent complexity of
|
1394 |
-
Android applications and the global lack of public information about
|
1395 |
-
malware. In a context where both information and human resources are
|
1396 |
-
limited, the security community is in demand for new approaches to
|
1397 |
-
aid practitioners to accurately define Android malware, automate
|
1398 |
-
classification decisions, and improve the comprehension of Android
|
1399 |
-
malware.
|
1400 |
-
This dissertation proposes three solutions to assist with the
|
1401 |
-
creation of malware ground truths. Show less
|
1402 |
-
|
1403 |
-
See publication
|
1404 |
-
|
1405 |
-
- Euphony: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
1406 |
-
|
1407 |
-
MSR 2017 May 21, 2017
|
1408 |
-
|
1409 |
-
Android malware is now pervasive and evolving rapidly. Thousands of
|
1410 |
-
malware samples are discovered every day with new models of attacks.
|
1411 |
-
The growth of these threats has come hand in hand with the
|
1412 |
-
proliferation of collective repositories sharing the latest
|
1413 |
-
specimens. Having access to a large number of samples opens new
|
1414 |
-
research directions aiming at efficiently vetting apps. However,
|
1415 |
-
automatically inferring a reference ground-truth from those
|
1416 |
-
repositories is not straightforward and can… Show more
|
1417 |
-
|
1418 |
-
Android malware is now pervasive and evolving rapidly. Thousands of
|
1419 |
-
malware samples are discovered every day with new models of attacks.
|
1420 |
-
The growth of these threats has come hand in hand with the
|
1421 |
-
proliferation of collective repositories sharing the latest
|
1422 |
-
specimens. Having access to a large number of samples opens new
|
1423 |
-
research directions aiming at efficiently vetting apps. However,
|
1424 |
-
automatically inferring a reference ground-truth from those
|
1425 |
-
repositories is not straightforward and can inadvertently lead to
|
1426 |
-
unforeseen misconceptions. On the one hand, samples are often
|
1427 |
-
mislabeled as different parties use distinct naming schemes for the
|
1428 |
-
same sample. On the other hand, samples are frequently misclassified
|
1429 |
-
due to conceptual errors made during labeling processes.
|
1430 |
-
In this paper, we analyze the associations between all labels given
|
1431 |
-
by different vendors and we propose a system called EUPHONY to
|
1432 |
-
systematically unify common samples into family groups. The key
|
1433 |
-
novelty of our approach is that no prior knowledge of malware
|
1434 |
-
families is needed. We evaluate our approach using reference
|
1435 |
-
datasets and more than 0.4 million additional samples outside of
|
1436 |
-
these datasets. Results show that EUPHONY provides competitive
|
1437 |
-
performance against the state-of-the-art. Show less
|
1438 |
-
|
1439 |
-
See publication
|
1440 |
-
|
1441 |
-
- On the Lack of Consensus in Anti-Virus Decisions: Metrics and Insights on Building Ground Truths of Android Malware
|
1442 |
-
|
1443 |
-
DIMVA 2016 July 7, 2016
|
1444 |
-
|
1445 |
-
There is generally a lack of consensus in Antivirus (AV) engines'
|
1446 |
-
decisions on a given sample. This challenges the building of
|
1447 |
-
authoritative ground-truth datasets. Instead, researchers and
|
1448 |
-
practitioners may rely on unvalidated approaches to build their
|
1449 |
-
ground truth, e.g., by considering decisions from a selected set of
|
1450 |
-
Antivirus vendors or by setting up a threshold number of positive
|
1451 |
-
detections before classifying a sample. Both approaches are biased
|
1452 |
-
as they implicitly either decide on ranking… Show more
|
1453 |
-
|
1454 |
-
There is generally a lack of consensus in Antivirus (AV) engines'
|
1455 |
-
decisions on a given sample. This challenges the building of
|
1456 |
-
authoritative ground-truth datasets. Instead, researchers and
|
1457 |
-
practitioners may rely on unvalidated approaches to build their
|
1458 |
-
ground truth, e.g., by considering decisions from a selected set of
|
1459 |
-
Antivirus vendors or by setting up a threshold number of positive
|
1460 |
-
detections before classifying a sample. Both approaches are biased
|
1461 |
-
as they implicitly either decide on ranking AV products, or they
|
1462 |
-
consider that all AV decisions have equal weights. In this paper, we
|
1463 |
-
extensively investigate the lack of agreement among AV engines.
|
1464 |
-
To that end, we propose a set of metrics that quantitatively
|
1465 |
-
describe the different dimensions of this lack of consensus. We show
|
1466 |
-
how our metrics can bring important insights by using the detection
|
1467 |
-
results of 66 AV products on 2 million Android apps as a case study.
|
1468 |
-
Our analysis focuses not only on AV binary decision but also on the
|
1469 |
-
notoriously hard problem of labels that AVs associate with
|
1470 |
-
suspicious files, and allows to highlight biases hidden in the
|
1471 |
-
collection of a malware ground truth---a foundation stone of any
|
1472 |
-
machine learning-based malware detection approach. Show less
|
1473 |
-
|
1474 |
-
See publication
|
1475 |
-
|
1476 |
-
Courses
|
1477 |
-
|
1478 |
-
- Artificial Intelligence
|
1479 |
-
|
1480 |
-
https://www.edx.org
|
1481 |
-
|
1482 |
-
- Data Science at Scale
|
1483 |
-
|
1484 |
-
https://www.coursera.org/
|
1485 |
-
|
1486 |
-
- Descriptive Statistics
|
1487 |
-
|
1488 |
-
https://www.edx.org/
|
1489 |
-
|
1490 |
-
- Developing Android Apps
|
1491 |
-
|
1492 |
-
https://eu.udacity.com/
|
1493 |
-
|
1494 |
-
- Full Stack Foundations
|
1495 |
-
|
1496 |
-
https://www.udacity.com/
|
1497 |
-
|
1498 |
-
- Functional Programming
|
1499 |
-
|
1500 |
-
https://www.edx.org/
|
1501 |
-
|
1502 |
-
- Introduction to Logic
|
1503 |
-
|
1504 |
-
https://www.coursera.org/
|
1505 |
-
|
1506 |
-
- Knowledge-Based AI: Cognitive Systems
|
1507 |
-
|
1508 |
-
https://eu.udacity.com/
|
1509 |
-
|
1510 |
-
- Machine Learning
|
1511 |
-
|
1512 |
-
https://www.coursera.org/
|
1513 |
-
|
1514 |
-
- Mathematics for Computer Science
|
1515 |
-
|
1516 |
-
https://ocw.mit.edu/
|
1517 |
-
|
1518 |
-
- Nanodegree Program: Artificial Intelligence
|
1519 |
-
|
1520 |
-
https://eu.udacity.com/
|
1521 |
-
|
1522 |
-
- Paradigms of Computer Programming
|
1523 |
-
|
1524 |
-
https://www.edx.org
|
1525 |
-
|
1526 |
-
- Statistics Inference
|
1527 |
-
|
1528 |
-
https://www.edx.org/
|
1529 |
-
|
1530 |
-
- Statistics Probability
|
1531 |
-
|
1532 |
-
https://www.edx.org/
|
1533 |
-
|
1534 |
-
- ChatGPT Prompt Engineering for Developers
|
1535 |
-
|
1536 |
-
Deeplearning.ai
|
1537 |
-
|
1538 |
-
- Introduction to Data-Centric AI
|
1539 |
-
|
1540 |
-
-
|
1541 |
-
|
1542 |
-
- LangChain for LLM Application Development - DeepLearning.ai
|
1543 |
-
|
1544 |
-
-
|
1545 |
-
|
1546 |
-
- LangChain: Chat with Your Data - DeepLearning.ai
|
1547 |
-
|
1548 |
-
-
|
1549 |
-
|
1550 |
-
- Hugging Face Course
|
1551 |
-
|
1552 |
-
huggingface.co/course/
|
1553 |
-
|
1554 |
-
Projects
|
1555 |
-
|
1556 |
-
- MLOps Python Package
|
1557 |
-
|
1558 |
-
Jun 2023 - Jun 2023
|
1559 |
-
|
1560 |
-
Kickstart your MLOps initiative with a flexible, robust, and
|
1561 |
-
productive Python package.
|
1562 |
-
https://github.com/fmind/mlops-python-package
|
1563 |
-
|
1564 |
-
- Fixing the MLOps Survey with ChatGPT
|
1565 |
-
|
1566 |
-
May 2023 - May 2023
|
1567 |
-
|
1568 |
-
Fixing the MLOps Survey on LLMs with ChatGPT API.
|
1569 |
-
https://fmind.medium.com/fixing-the-mlops-survey-on-llms-with-chatgpt-api-lessons-learned-62d90e721331
|
1570 |
-
|
1571 |
-
See project
|
1572 |
-
|
1573 |
-
- Kubeflow Demo
|
1574 |
-
|
1575 |
-
Apr 2023 - Apr 2023
|
1576 |
-
|
1577 |
-
Kubeflow demo for the MLOps Community Meetup in Luxembourg.
|
1578 |
-
|
1579 |
-
See project
|
1580 |
-
|
1581 |
-
- MLflow Demo
|
1582 |
-
|
1583 |
-
Apr 2023 - Apr 2023
|
1584 |
-
|
1585 |
-
MLflow demo for the MLOps Community Meetup in Luxembourg.
|
1586 |
-
|
1587 |
-
See project
|
1588 |
-
|
1589 |
-
- onet
|
1590 |
-
|
1591 |
-
Aug 2020 - Sep 2020
|
1592 |
-
|
1593 |
-
Train and predict procedures of DNN for binary image classification
|
1594 |
-
|
1595 |
-
See project
|
1596 |
-
|
1597 |
-
- fincrawl
|
1598 |
-
|
1599 |
-
Nov 2019 - Dec 2019
|
1600 |
-
|
1601 |
-
Crawl documents, metadata, and files from financial institutions
|
1602 |
-
|
1603 |
-
See project
|
1604 |
-
|
1605 |
-
- invest
|
1606 |
-
|
1607 |
-
Aug 2019 - Sep 2019
|
1608 |
-
|
1609 |
-
Stock market analysis focused on dividends
|
1610 |
-
|
1611 |
-
See project
|
1612 |
-
|
1613 |
-
- parsoc
|
1614 |
-
|
1615 |
-
Jul 2019 - Sep 2019
|
1616 |
-
|
1617 |
-
Convert docx files to json
|
1618 |
-
|
1619 |
-
See project
|
1620 |
-
|
1621 |
-
- Bigdata Tutorials
|
1622 |
-
|
1623 |
-
Sep 2015 - Jul 2019
|
1624 |
-
|
1625 |
-
Tutorials for the Big Data course @ uni.lu
|
1626 |
-
|
1627 |
-
See project
|
1628 |
-
|
1629 |
-
- STASE: A set of statistical metrics to better understand and qualify malware datasets
|
1630 |
-
|
1631 |
-
Apr 2016 - Jul 2019
|
1632 |
-
|
1633 |
-
A handful of statistical metrics to better understand and qualify
|
1634 |
-
malware datasets
|
1635 |
-
|
1636 |
-
See project
|
1637 |
-
|
1638 |
-
- apkworkers
|
1639 |
-
|
1640 |
-
Sep 2015 - Jul 2019
|
1641 |
-
|
1642 |
-
A celery application to distribute Android malware analysis
|
1643 |
-
|
1644 |
-
See project
|
1645 |
-
|
1646 |
-
- servalx
|
1647 |
-
|
1648 |
-
Sep 2015 - Jul 2019
|
1649 |
-
|
1650 |
-
A set of tools and modules to process Android malware with Androzoo
|
1651 |
-
|
1652 |
-
See project
|
1653 |
-
|
1654 |
-
- Euphony: Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for Android Malware
|
1655 |
-
|
1656 |
-
Mar 2017 - Mar 2019
|
1657 |
-
|
1658 |
-
Harmonious Unification of Cacophonous Anti-Virus Vendor Labels for
|
1659 |
-
Android Malware
|
1660 |
-
|
1661 |
-
See project
|
1662 |
-
|
1663 |
-
- Automatic Speech Recognition with Tensorflow
|
1664 |
-
|
1665 |
-
Sep 2017 - Sep 2017
|
1666 |
-
|
1667 |
-
An automatic speech-recognition system based on Tensorflow
|
1668 |
-
|
1669 |
-
See project
|
1670 |
-
|
1671 |
-
- Dog Recognition with Tensorflow
|
1672 |
-
|
1673 |
-
Aug 2017 - Aug 2017
|
1674 |
-
|
1675 |
-
A machine-learning model train to recognize dogs, even from human
|
1676 |
-
faces
|
1677 |
-
|
1678 |
-
See project
|
1679 |
-
|
1680 |
-
- genius
|
1681 |
-
|
1682 |
-
Jun 2017 - Jul 2017
|
1683 |
-
|
1684 |
-
An implementation of LISP Scheme based on Haskell
|
1685 |
-
|
1686 |
-
See project
|
1687 |
-
|
1688 |
-
- Alexa History Skill
|
1689 |
-
|
1690 |
-
Jun 2017 - Jun 2017
|
1691 |
-
|
1692 |
-
A Alexa skill that provides year-dated facts on demand
|
1693 |
-
|
1694 |
-
See project
|
1695 |
-
|
1696 |
-
- Air Cargo Planning System
|
1697 |
-
|
1698 |
-
Feb 2017 - Apr 2017
|
1699 |
-
|
1700 |
-
An automated Air Cargo transport system based on AI planning
|
1701 |
-
|
1702 |
-
See project
|
1703 |
-
|
1704 |
-
- Sign Language Recognition System
|
1705 |
-
|
1706 |
-
Feb 2017 - Apr 2017
|
1707 |
-
|
1708 |
-
A sign recognition system based on Hidden Markov Model
|
1709 |
-
|
1710 |
-
See project
|
1711 |
-
|
1712 |
-
- AI Agent for the Isolation Game
|
1713 |
-
|
1714 |
-
Mar 2017 - Mar 2017
|
1715 |
-
|
1716 |
-
An AI game agent to play the Isolation game
|
1717 |
-
|
1718 |
-
See project
|
1719 |
-
|
1720 |
-
- Sudoku Solver
|
1721 |
-
|
1722 |
-
Jan 2017 - Feb 2017
|
1723 |
-
|
1724 |
-
A Diagonal Sudoku solver implemented with Python
|
1725 |
-
|
1726 |
-
See project
|
1727 |
-
|
1728 |
-
- lkml
|
1729 |
-
|
1730 |
-
Nov 2016 - Jan 2017
|
1731 |
-
|
1732 |
-
Gather emails from https://lkml.org/
|
1733 |
-
|
1734 |
-
See project
|
1735 |
-
|
1736 |
-
- Master 2 School Projects
|
1737 |
-
|
1738 |
-
Sep 2013 - Jun 2014
|
1739 |
-
|
1740 |
-
School projects from 2013 to 2014 - Master 2 Sécurité des Systèmes
|
1741 |
-
d'Information (Metz)
|
1742 |
-
|
1743 |
-
See project
|
1744 |
-
|
1745 |
-
- chattail
|
1746 |
-
|
1747 |
-
Dec 2013 - Mar 2014
|
1748 |
-
|
1749 |
-
Send log streams over XMPP to monitor your systems
|
1750 |
-
|
1751 |
-
See project
|
1752 |
-
|
1753 |
-
- Master 1 School Projects
|
1754 |
-
|
1755 |
-
Jun 2012 - Sep 2013
|
1756 |
-
|
1757 |
-
See project
|
1758 |
-
|
1759 |
-
- Bachelor School Projects
|
1760 |
-
|
1761 |
-
Jun 2011 - Sep 2012
|
1762 |
-
|
1763 |
-
See project
|
1764 |
-
|
1765 |
-
- Professional Bachelor School Project
|
1766 |
-
|
1767 |
-
Sep 2009 - Jun 2010
|
1768 |
-
|
1769 |
-
See project
|
1770 |
-
|
1771 |
-
- https://github.com/fmind/mlops-python-package
|
1772 |
-
|
1773 |
-
-
|
1774 |
-
|
1775 |
-
Kickstart your MLOps initiative with a flexible, robust, and
|
1776 |
-
productive Python package.
|
1777 |
-
|
1778 |
-
Languages
|
1779 |
-
|
1780 |
-
- Français
|
1781 |
-
|
1782 |
-
Native or bilingual proficiency
|
1783 |
-
|
1784 |
-
- Anglais
|
1785 |
-
|
1786 |
-
Full professional proficiency
|
1787 |
-
|
1788 |
-
View Médéric’s full profile
|
1789 |
-
|
1790 |
-
-
|
1791 |
-
|
1792 |
-
See who you know in common
|
1793 |
-
|
1794 |
-
-
|
1795 |
-
|
1796 |
-
Get introduced
|
1797 |
-
|
1798 |
-
-
|
1799 |
-
|
1800 |
-
Contact Médéric directly
|
1801 |
-
|
1802 |
-
Sign in to view full profile
|
1803 |
-
|
1804 |
-
Sign in to view Médéric’s full profile
|
1805 |
-
|
1806 |
-
Sign in
|
1807 |
-
|
1808 |
-
Welcome back
|
1809 |
-
|
1810 |
-
Email or phone
|
1811 |
-
|
1812 |
-
Password
|
1813 |
-
|
1814 |
-
Show
|
1815 |
-
|
1816 |
-
Forgot password?
|
1817 |
-
|
1818 |
-
Sign in
|
1819 |
-
|
1820 |
-
or
|
1821 |
-
|
1822 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
1823 |
-
Policy, and Cookie Policy.
|
1824 |
-
|
1825 |
-
New to LinkedIn? Join now
|
1826 |
-
|
1827 |
-
or
|
1828 |
-
|
1829 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
1830 |
-
Policy, and Cookie Policy.
|
1831 |
-
|
1832 |
-
New to LinkedIn? Join now
|
1833 |
-
|
1834 |
-
Explore collaborative articles
|
1835 |
-
|
1836 |
-
We’re unlocking community knowledge in a new way. Experts add insights
|
1837 |
-
directly into each article, started with the help of AI.
|
1838 |
-
|
1839 |
-
Explore More
|
1840 |
-
|
1841 |
-
Médéric’s public profile badge
|
1842 |
-
|
1843 |
-
Include this LinkedIn profile on other websites
|
1844 |
-
|
1845 |
-
Médéric HURIER
|
1846 |
-
|
1847 |
-
Freelancer: AI/ML/MLOps Engineer | Data Scientist | MLOps Community
|
1848 |
-
Organizer | OpenClassrooms Mentor | Hacker | PhD
|
1849 |
-
|
1850 |
-
- Lead MLOps Engineer at Decathlon Technology
|
1851 |
-
|
1852 |
-
- University of Luxembourg
|
1853 |
-
|
1854 |
-
View profile
|
1855 |
-
|
1856 |
-
View profile badges
|
1857 |
-
|
1858 |
-
- LinkedIn © 2023
|
1859 |
-
|
1860 |
-
- About
|
1861 |
-
|
1862 |
-
- Accessibility
|
1863 |
-
|
1864 |
-
- User Agreement
|
1865 |
-
|
1866 |
-
- Privacy Policy
|
1867 |
-
|
1868 |
-
- Cookie Policy
|
1869 |
-
|
1870 |
-
- Copyright Policy
|
1871 |
-
|
1872 |
-
- Brand Policy
|
1873 |
-
|
1874 |
-
- Guest Controls
|
1875 |
-
|
1876 |
-
- Community Guidelines
|
1877 |
-
|
1878 |
-
- - العربية (Arabic)
|
1879 |
-
- Čeština (Czech)
|
1880 |
-
- Dansk (Danish)
|
1881 |
-
- Deutsch (German)
|
1882 |
-
- English (English)
|
1883 |
-
- Español (Spanish)
|
1884 |
-
- Français (French)
|
1885 |
-
- हिंदी (Hindi)
|
1886 |
-
- Bahasa Indonesia (Indonesian)
|
1887 |
-
- Italiano (Italian)
|
1888 |
-
- 日本語 (Japanese)
|
1889 |
-
- 한국어 (Korean)
|
1890 |
-
- Bahasa Malaysia (Malay)
|
1891 |
-
- Nederlands (Dutch)
|
1892 |
-
- Norsk (Norwegian)
|
1893 |
-
- Polski (Polish)
|
1894 |
-
- Português (Portuguese)
|
1895 |
-
- Română (Romanian)
|
1896 |
-
- Русский (Russian)
|
1897 |
-
- Svenska (Swedish)
|
1898 |
-
- ภาษาไทย (Thai)
|
1899 |
-
- Tagalog (Tagalog)
|
1900 |
-
- Türkçe (Turkish)
|
1901 |
-
- Українська (Ukrainian)
|
1902 |
-
- 简体中文 (Chinese (Simplified))
|
1903 |
-
- 正體中文 (Chinese (Traditional))
|
1904 |
-
|
1905 |
-
Language
|
1906 |
-
|
1907 |
-
Sign in to view Médéric’s full profile
|
1908 |
-
|
1909 |
-
Sign in
|
1910 |
-
|
1911 |
-
Welcome back
|
1912 |
-
|
1913 |
-
Email or phone
|
1914 |
-
|
1915 |
-
Password
|
1916 |
-
|
1917 |
-
Show
|
1918 |
-
|
1919 |
-
Forgot password?
|
1920 |
-
|
1921 |
-
Sign in
|
1922 |
-
|
1923 |
-
or
|
1924 |
-
|
1925 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
1926 |
-
Policy, and Cookie Policy.
|
1927 |
-
|
1928 |
-
New to LinkedIn? Join now
|
1929 |
-
|
1930 |
-
or
|
1931 |
-
|
1932 |
-
By clicking Continue, you agree to LinkedIn’s User Agreement, Privacy
|
1933 |
-
Policy, and Cookie Policy.
|
1934 |
-
|
1935 |
-
New to LinkedIn? Join now
|
1936 |
-
|
1937 |
-
[]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
invoke.yaml
CHANGED
@@ -1,24 +1,2 @@
|
|
1 |
-
# https://docs.pyinvoke.org/en/latest/index.html
|
2 |
-
|
3 |
run:
|
4 |
-
echo: true
|
5 |
-
app:
|
6 |
-
path: "app.py"
|
7 |
-
database:
|
8 |
-
collection: "resume"
|
9 |
-
path: "database"
|
10 |
-
linkedin:
|
11 |
-
html: "files/linkedin.html"
|
12 |
-
markdown: "files/linkedin.md"
|
13 |
-
text: "files/linkedin.txt"
|
14 |
-
mypy:
|
15 |
-
cache: ".mypy_cache/"
|
16 |
-
pip:
|
17 |
-
requirements: "requirements.txt"
|
18 |
-
requirements_dev: "requirements-dev.txt"
|
19 |
-
python:
|
20 |
-
files: "tasks/ *.py"
|
21 |
-
path: "python3"
|
22 |
-
venv:
|
23 |
-
path: ".venv/"
|
24 |
-
python: ".venv/bin/python"
|
|
|
|
|
|
|
1 |
run:
|
2 |
+
echo: true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lib.py
DELETED
@@ -1,72 +0,0 @@
|
|
1 |
-
"""Library of the project."""
|
2 |
-
# pylint: disable=wrong-import-position
|
3 |
-
|
4 |
-
# %% IMPORTS
|
5 |
-
|
6 |
-
__import__("pysqlite3")
|
7 |
-
|
8 |
-
import functools
|
9 |
-
import os
|
10 |
-
import sys
|
11 |
-
|
12 |
-
# https://docs.trychroma.com/troubleshooting#sqlite
|
13 |
-
sys.modules["sqlite3"] = sys.modules.pop("pysqlite3")
|
14 |
-
|
15 |
-
import chromadb
|
16 |
-
import openai
|
17 |
-
import tiktoken
|
18 |
-
from chromadb.utils import embedding_functions
|
19 |
-
|
20 |
-
# %% CONFIGS
|
21 |
-
|
22 |
-
DATABASE_COLLECTION = "resume"
|
23 |
-
DATABASE_PATH = "database"
|
24 |
-
|
25 |
-
EMBEDDING_MODEL = "text-embedding-ada-002"
|
26 |
-
|
27 |
-
ENCODING_NAME = "cl100k_base"
|
28 |
-
ENCODING_OUTPUT_LIMIT = 8191
|
29 |
-
|
30 |
-
MODEL_NAME = "gpt-3.5-turbo-16k"
|
31 |
-
MODEL_INPUT_LIMIT = 16_385
|
32 |
-
MODEL_TEMPERATURE = 0.9
|
33 |
-
|
34 |
-
OPENAI_API_KEY = os.environ["OPENAI_API_KEY"]
|
35 |
-
|
36 |
-
# %% TYPINGS
|
37 |
-
|
38 |
-
Collection = chromadb.Collection
|
39 |
-
|
40 |
-
# %% FUNCTIONS
|
41 |
-
|
42 |
-
|
43 |
-
def get_language_model(
|
44 |
-
model: str = MODEL_NAME,
|
45 |
-
api_key: str = OPENAI_API_KEY,
|
46 |
-
temperature: float = MODEL_TEMPERATURE,
|
47 |
-
) -> openai.ChatCompletion:
|
48 |
-
"""Get an OpenAI ChatCompletion model."""
|
49 |
-
openai.api_key = api_key # configure the API key globally
|
50 |
-
return functools.partial(
|
51 |
-
openai.ChatCompletion.create, model=model, temperature=temperature
|
52 |
-
)
|
53 |
-
|
54 |
-
|
55 |
-
def get_database_client(path: str) -> chromadb.API:
|
56 |
-
"""Get a persistent client to the Chroma DB."""
|
57 |
-
settings = chromadb.Settings(allow_reset=True, anonymized_telemetry=False)
|
58 |
-
return chromadb.PersistentClient(path=path, settings=settings)
|
59 |
-
|
60 |
-
|
61 |
-
def get_encoding_function(encoding_name: str = ENCODING_NAME) -> tiktoken.Encoding:
|
62 |
-
"""Get the encoding function for OpenAI models."""
|
63 |
-
return tiktoken.get_encoding(encoding_name=encoding_name).encode
|
64 |
-
|
65 |
-
|
66 |
-
def get_embedding_function(
|
67 |
-
model_name: str = EMBEDDING_MODEL, api_key: str = OPENAI_API_KEY
|
68 |
-
) -> embedding_functions.EmbeddingFunction:
|
69 |
-
"""Get the embedding function for Chroma DB collections."""
|
70 |
-
return embedding_functions.OpenAIEmbeddingFunction(
|
71 |
-
model_name=model_name, api_key=api_key
|
72 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pyproject.toml
CHANGED
@@ -1,17 +1,9 @@
|
|
1 |
-
# https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/
|
2 |
-
|
3 |
-
# https://black.readthedocs.io/en/stable/usage_and_configuration/the_basics.html
|
4 |
-
[tool.black]
|
5 |
-
|
6 |
-
# https://pycqa.github.io/isort/docs/configuration/options.html
|
7 |
-
[tool.isort]
|
8 |
-
profile = "black"
|
9 |
-
|
10 |
-
# https://mypy.readthedocs.io/en/stable/config_file.html
|
11 |
[tool.mypy]
|
12 |
-
|
13 |
ignore_missing_imports = true
|
14 |
|
15 |
-
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
[tool.mypy]
|
2 |
+
python_version = "3.12"
|
3 |
ignore_missing_imports = true
|
4 |
|
5 |
+
[tool.ruff]
|
6 |
+
fix = true
|
7 |
+
indent-width = 4
|
8 |
+
line-length = 100
|
9 |
+
target-version = "py312"
|
requirements-dev.txt
CHANGED
@@ -1,8 +1,4 @@
|
|
1 |
-
# https://pip.pypa.io/en/stable/reference/requirements-file-format/
|
2 |
-
|
3 |
-
black
|
4 |
invoke
|
5 |
ipykernel
|
6 |
-
isort
|
7 |
mypy
|
8 |
-
|
|
|
|
|
|
|
|
|
1 |
invoke
|
2 |
ipykernel
|
|
|
3 |
mypy
|
4 |
+
ruff
|
requirements-main.txt
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
gradio==4.29.0
|
2 |
+
openai==1.28.0
|
requirements.txt
CHANGED
@@ -1,8 +1,232 @@
|
|
1 |
-
#
|
2 |
-
|
3 |
-
|
4 |
-
gradio
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This file was autogenerated by uv via the following command:
|
2 |
+
# uv pip compile requirements-main.txt -o requirements.txt
|
3 |
+
aiofiles==23.2.1
|
4 |
+
# via gradio
|
5 |
+
altair==5.3.0
|
6 |
+
# via gradio
|
7 |
+
annotated-types==0.6.0
|
8 |
+
# via pydantic
|
9 |
+
anyio==4.3.0
|
10 |
+
# via
|
11 |
+
# httpx
|
12 |
+
# openai
|
13 |
+
# starlette
|
14 |
+
# watchfiles
|
15 |
+
attrs==23.2.0
|
16 |
+
# via
|
17 |
+
# jsonschema
|
18 |
+
# referencing
|
19 |
+
certifi==2024.2.2
|
20 |
+
# via
|
21 |
+
# httpcore
|
22 |
+
# httpx
|
23 |
+
# requests
|
24 |
+
charset-normalizer==3.3.2
|
25 |
+
# via requests
|
26 |
+
click==8.1.7
|
27 |
+
# via
|
28 |
+
# typer
|
29 |
+
# uvicorn
|
30 |
+
contourpy==1.2.1
|
31 |
+
# via matplotlib
|
32 |
+
cycler==0.12.1
|
33 |
+
# via matplotlib
|
34 |
+
distro==1.9.0
|
35 |
+
# via openai
|
36 |
+
dnspython==2.6.1
|
37 |
+
# via email-validator
|
38 |
+
email-validator==2.1.1
|
39 |
+
# via fastapi
|
40 |
+
fastapi==0.111.0
|
41 |
+
# via
|
42 |
+
# fastapi-cli
|
43 |
+
# gradio
|
44 |
+
fastapi-cli==0.0.3
|
45 |
+
# via fastapi
|
46 |
+
ffmpy==0.3.2
|
47 |
+
# via gradio
|
48 |
+
filelock==3.14.0
|
49 |
+
# via huggingface-hub
|
50 |
+
fonttools==4.51.0
|
51 |
+
# via matplotlib
|
52 |
+
fsspec==2024.3.1
|
53 |
+
# via
|
54 |
+
# gradio-client
|
55 |
+
# huggingface-hub
|
56 |
+
gradio==4.29.0
|
57 |
+
gradio-client==0.16.1
|
58 |
+
# via gradio
|
59 |
+
h11==0.14.0
|
60 |
+
# via
|
61 |
+
# httpcore
|
62 |
+
# uvicorn
|
63 |
+
httpcore==1.0.5
|
64 |
+
# via httpx
|
65 |
+
httptools==0.6.1
|
66 |
+
# via uvicorn
|
67 |
+
httpx==0.27.0
|
68 |
+
# via
|
69 |
+
# fastapi
|
70 |
+
# gradio
|
71 |
+
# gradio-client
|
72 |
+
# openai
|
73 |
+
huggingface-hub==0.23.0
|
74 |
+
# via
|
75 |
+
# gradio
|
76 |
+
# gradio-client
|
77 |
+
idna==3.7
|
78 |
+
# via
|
79 |
+
# anyio
|
80 |
+
# email-validator
|
81 |
+
# httpx
|
82 |
+
# requests
|
83 |
+
importlib-resources==6.4.0
|
84 |
+
# via gradio
|
85 |
+
jinja2==3.1.4
|
86 |
+
# via
|
87 |
+
# altair
|
88 |
+
# fastapi
|
89 |
+
# gradio
|
90 |
+
jsonschema==4.22.0
|
91 |
+
# via altair
|
92 |
+
jsonschema-specifications==2023.12.1
|
93 |
+
# via jsonschema
|
94 |
+
kiwisolver==1.4.5
|
95 |
+
# via matplotlib
|
96 |
+
markdown-it-py==3.0.0
|
97 |
+
# via rich
|
98 |
+
markupsafe==2.1.5
|
99 |
+
# via
|
100 |
+
# gradio
|
101 |
+
# jinja2
|
102 |
+
matplotlib==3.8.4
|
103 |
+
# via gradio
|
104 |
+
mdurl==0.1.2
|
105 |
+
# via markdown-it-py
|
106 |
+
numpy==1.26.4
|
107 |
+
# via
|
108 |
+
# altair
|
109 |
+
# contourpy
|
110 |
+
# gradio
|
111 |
+
# matplotlib
|
112 |
+
# pandas
|
113 |
+
openai==1.28.0
|
114 |
+
orjson==3.10.3
|
115 |
+
# via
|
116 |
+
# fastapi
|
117 |
+
# gradio
|
118 |
+
packaging==24.0
|
119 |
+
# via
|
120 |
+
# altair
|
121 |
+
# gradio
|
122 |
+
# gradio-client
|
123 |
+
# huggingface-hub
|
124 |
+
# matplotlib
|
125 |
+
pandas==2.2.2
|
126 |
+
# via
|
127 |
+
# altair
|
128 |
+
# gradio
|
129 |
+
pillow==10.3.0
|
130 |
+
# via
|
131 |
+
# gradio
|
132 |
+
# matplotlib
|
133 |
+
pydantic==2.7.1
|
134 |
+
# via
|
135 |
+
# fastapi
|
136 |
+
# gradio
|
137 |
+
# openai
|
138 |
+
pydantic-core==2.18.2
|
139 |
+
# via pydantic
|
140 |
+
pydub==0.25.1
|
141 |
+
# via gradio
|
142 |
+
pygments==2.18.0
|
143 |
+
# via rich
|
144 |
+
pyparsing==3.1.2
|
145 |
+
# via matplotlib
|
146 |
+
python-dateutil==2.9.0.post0
|
147 |
+
# via
|
148 |
+
# matplotlib
|
149 |
+
# pandas
|
150 |
+
python-dotenv==1.0.1
|
151 |
+
# via uvicorn
|
152 |
+
python-multipart==0.0.9
|
153 |
+
# via
|
154 |
+
# fastapi
|
155 |
+
# gradio
|
156 |
+
pytz==2024.1
|
157 |
+
# via pandas
|
158 |
+
pyyaml==6.0.1
|
159 |
+
# via
|
160 |
+
# gradio
|
161 |
+
# huggingface-hub
|
162 |
+
# uvicorn
|
163 |
+
referencing==0.35.1
|
164 |
+
# via
|
165 |
+
# jsonschema
|
166 |
+
# jsonschema-specifications
|
167 |
+
requests==2.31.0
|
168 |
+
# via huggingface-hub
|
169 |
+
rich==13.7.1
|
170 |
+
# via typer
|
171 |
+
rpds-py==0.18.1
|
172 |
+
# via
|
173 |
+
# jsonschema
|
174 |
+
# referencing
|
175 |
+
ruff==0.4.4
|
176 |
+
# via gradio
|
177 |
+
semantic-version==2.10.0
|
178 |
+
# via gradio
|
179 |
+
shellingham==1.5.4
|
180 |
+
# via typer
|
181 |
+
six==1.16.0
|
182 |
+
# via python-dateutil
|
183 |
+
sniffio==1.3.1
|
184 |
+
# via
|
185 |
+
# anyio
|
186 |
+
# httpx
|
187 |
+
# openai
|
188 |
+
starlette==0.37.2
|
189 |
+
# via fastapi
|
190 |
+
tomlkit==0.12.0
|
191 |
+
# via gradio
|
192 |
+
toolz==0.12.1
|
193 |
+
# via altair
|
194 |
+
tqdm==4.66.4
|
195 |
+
# via
|
196 |
+
# huggingface-hub
|
197 |
+
# openai
|
198 |
+
typer==0.12.3
|
199 |
+
# via
|
200 |
+
# fastapi-cli
|
201 |
+
# gradio
|
202 |
+
typing-extensions==4.11.0
|
203 |
+
# via
|
204 |
+
# fastapi
|
205 |
+
# gradio
|
206 |
+
# gradio-client
|
207 |
+
# huggingface-hub
|
208 |
+
# openai
|
209 |
+
# pydantic
|
210 |
+
# pydantic-core
|
211 |
+
# typer
|
212 |
+
tzdata==2024.1
|
213 |
+
# via pandas
|
214 |
+
ujson==5.9.0
|
215 |
+
# via fastapi
|
216 |
+
urllib3==2.2.1
|
217 |
+
# via
|
218 |
+
# gradio
|
219 |
+
# requests
|
220 |
+
uvicorn==0.29.0
|
221 |
+
# via
|
222 |
+
# fastapi
|
223 |
+
# fastapi-cli
|
224 |
+
# gradio
|
225 |
+
uvloop==0.19.0
|
226 |
+
# via uvicorn
|
227 |
+
watchfiles==0.21.0
|
228 |
+
# via uvicorn
|
229 |
+
websockets==11.0.3
|
230 |
+
# via
|
231 |
+
# gradio-client
|
232 |
+
# uvicorn
|
resume.code-workspace
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
// https://code.visualstudio.com/docs/getstarted/settings
|
2 |
{
|
3 |
"folders": [
|
4 |
{
|
@@ -7,23 +6,22 @@
|
|
7 |
],
|
8 |
"settings": {
|
9 |
"editor.formatOnSave": true,
|
10 |
-
"python.defaultInterpreterPath": ".venv/bin/
|
11 |
"[python]": {
|
12 |
"editor.codeActionsOnSave": {
|
13 |
"source.organizeImports": "explicit"
|
14 |
},
|
15 |
-
"editor.defaultFormatter": "
|
16 |
},
|
17 |
},
|
18 |
"extensions": {
|
19 |
"recommendations": [
|
|
|
20 |
"dchanco.vsc-invoke",
|
21 |
-
"ms-python.
|
22 |
-
"ms-python.isort",
|
23 |
-
"ms-python.pylint",
|
24 |
"ms-python.python",
|
25 |
"ms-python.vscode-pylance",
|
26 |
-
"
|
27 |
]
|
28 |
}
|
29 |
}
|
|
|
|
|
1 |
{
|
2 |
"folders": [
|
3 |
{
|
|
|
6 |
],
|
7 |
"settings": {
|
8 |
"editor.formatOnSave": true,
|
9 |
+
"python.defaultInterpreterPath": ".venv/bin/python",
|
10 |
"[python]": {
|
11 |
"editor.codeActionsOnSave": {
|
12 |
"source.organizeImports": "explicit"
|
13 |
},
|
14 |
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
15 |
},
|
16 |
},
|
17 |
"extensions": {
|
18 |
"recommendations": [
|
19 |
+
"charliermarsh.ruff",
|
20 |
"dchanco.vsc-invoke",
|
21 |
+
"ms-python.mypy-type-checker",
|
|
|
|
|
22 |
"ms-python.python",
|
23 |
"ms-python.vscode-pylance",
|
24 |
+
"redhat.vscode-yaml",
|
25 |
]
|
26 |
}
|
27 |
}
|
tasks/__init__.py
CHANGED
@@ -1,12 +1,11 @@
|
|
1 |
-
"""Task collections
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
# mypy: ignore-errors
|
4 |
|
5 |
# %% IMPORTS
|
6 |
|
7 |
from invoke import Collection
|
8 |
|
9 |
-
from . import
|
10 |
|
11 |
# %% NAMESPACES
|
12 |
|
@@ -14,9 +13,9 @@ ns = Collection()
|
|
14 |
|
15 |
# %% COLLECTIONS
|
16 |
|
17 |
-
|
18 |
-
ns.add_collection(
|
19 |
-
ns.add_collection(
|
20 |
-
ns.add_collection(
|
21 |
-
ns.add_collection(
|
22 |
-
ns.add_collection(
|
|
|
1 |
+
"""Task collections."""
|
|
|
2 |
# mypy: ignore-errors
|
3 |
|
4 |
# %% IMPORTS
|
5 |
|
6 |
from invoke import Collection
|
7 |
|
8 |
+
from . import checks, cleans, formats, installs, runs
|
9 |
|
10 |
# %% NAMESPACES
|
11 |
|
|
|
13 |
|
14 |
# %% COLLECTIONS
|
15 |
|
16 |
+
|
17 |
+
ns.add_collection(checks)
|
18 |
+
ns.add_collection(cleans)
|
19 |
+
ns.add_collection(formats)
|
20 |
+
ns.add_collection(installs)
|
21 |
+
ns.add_collection(runs, default=True)
|
tasks/{check.py → checks.py}
RENAMED
@@ -1,5 +1,4 @@
|
|
1 |
"""Check tasks for the project."""
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
|
4 |
# %% IMPORTS
|
5 |
|
@@ -12,20 +11,19 @@ from invoke.context import Context
|
|
12 |
@task
|
13 |
def type(ctx: Context) -> None:
|
14 |
"""Check the types with mypy."""
|
15 |
-
ctx.run(
|
16 |
|
17 |
|
18 |
@task
|
19 |
def code(ctx: Context) -> None:
|
20 |
-
"""Check the codes with
|
21 |
-
ctx.run(
|
22 |
|
23 |
|
24 |
@task
|
25 |
def format(ctx: Context) -> None:
|
26 |
-
"""Check the formats with
|
27 |
-
ctx.run(
|
28 |
-
ctx.run(f"{ctx.venv.python} -m black --check --quiet {ctx.python.files}")
|
29 |
|
30 |
|
31 |
@task(pre=[type, code, format], default=True)
|
|
|
1 |
"""Check tasks for the project."""
|
|
|
2 |
|
3 |
# %% IMPORTS
|
4 |
|
|
|
11 |
@task
|
12 |
def type(ctx: Context) -> None:
|
13 |
"""Check the types with mypy."""
|
14 |
+
ctx.run("mypy *.py")
|
15 |
|
16 |
|
17 |
@task
|
18 |
def code(ctx: Context) -> None:
|
19 |
+
"""Check the codes with ruff check."""
|
20 |
+
ctx.run("ruff check *.py")
|
21 |
|
22 |
|
23 |
@task
|
24 |
def format(ctx: Context) -> None:
|
25 |
+
"""Check the formats with ruff format."""
|
26 |
+
ctx.run("ruff format --check *.py")
|
|
|
27 |
|
28 |
|
29 |
@task(pre=[type, code, format], default=True)
|
tasks/{clean.py → cleans.py}
RENAMED
@@ -1,5 +1,4 @@
|
|
1 |
"""Clean tasks for the project."""
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
|
4 |
# %% IMPORTS
|
5 |
|
@@ -12,27 +11,32 @@ from invoke.context import Context
|
|
12 |
@task
|
13 |
def install(ctx: Context) -> None:
|
14 |
"""Clean the install."""
|
15 |
-
ctx.run(
|
16 |
|
17 |
|
18 |
@task
|
19 |
def mypy(ctx: Context) -> None:
|
20 |
"""Clean the mypy cache."""
|
21 |
-
ctx.run(
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
|
24 |
@task
|
25 |
def python(ctx: Context) -> None:
|
26 |
"""Clean python files and folders."""
|
27 |
-
ctx.run("find . -type f -name '*.py[co]' -delete")
|
28 |
ctx.run("find . -type d -name __pycache__ -delete")
|
29 |
|
30 |
|
31 |
-
@task(pre=[mypy, python], default=True)
|
32 |
def all(_: Context) -> None:
|
33 |
"""Run all clean tasks."""
|
34 |
|
35 |
|
36 |
-
@task(pre=[
|
37 |
def reset(_: Context) -> None:
|
38 |
"""Reset the project state."""
|
|
|
1 |
"""Clean tasks for the project."""
|
|
|
2 |
|
3 |
# %% IMPORTS
|
4 |
|
|
|
11 |
@task
|
12 |
def install(ctx: Context) -> None:
|
13 |
"""Clean the install."""
|
14 |
+
ctx.run("rm -rf .venv/")
|
15 |
|
16 |
|
17 |
@task
|
18 |
def mypy(ctx: Context) -> None:
|
19 |
"""Clean the mypy cache."""
|
20 |
+
ctx.run("rm -rf .mypy_cache/")
|
21 |
+
|
22 |
+
|
23 |
+
@task
|
24 |
+
def ruff(ctx: Context) -> None:
|
25 |
+
"""Clean the ruff cache."""
|
26 |
+
ctx.run("rm -rf .ruff_cache/")
|
27 |
|
28 |
|
29 |
@task
|
30 |
def python(ctx: Context) -> None:
|
31 |
"""Clean python files and folders."""
|
|
|
32 |
ctx.run("find . -type d -name __pycache__ -delete")
|
33 |
|
34 |
|
35 |
+
@task(pre=[mypy, ruff, python], default=True)
|
36 |
def all(_: Context) -> None:
|
37 |
"""Run all clean tasks."""
|
38 |
|
39 |
|
40 |
+
@task(pre=[install, all])
|
41 |
def reset(_: Context) -> None:
|
42 |
"""Reset the project state."""
|
tasks/convert.py
DELETED
@@ -1,37 +0,0 @@
|
|
1 |
-
"""Convert files for the project."""
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
-
|
4 |
-
# %% IMPORTS
|
5 |
-
|
6 |
-
from invoke import task
|
7 |
-
from invoke.context import Context
|
8 |
-
|
9 |
-
# %% TASKS
|
10 |
-
|
11 |
-
|
12 |
-
@task
|
13 |
-
def linkedin(ctx: Context) -> None:
|
14 |
-
"""Convert the LinkedIn files."""
|
15 |
-
ctx.run(
|
16 |
-
f"""pandoc --to=plain --from=html \
|
17 |
-
--output={ctx.linkedin.text} \
|
18 |
-
{ctx.linkedin.html}
|
19 |
-
"""
|
20 |
-
)
|
21 |
-
|
22 |
-
|
23 |
-
@task
|
24 |
-
def database(ctx: Context) -> None:
|
25 |
-
"""Import files to the database."""
|
26 |
-
ctx.run(
|
27 |
-
f"""{ctx.venv.python} database.py \
|
28 |
-
--database={ctx.database.path} \
|
29 |
-
--collection={ctx.database.collection} \
|
30 |
-
{ctx.linkedin.markdown}
|
31 |
-
"""
|
32 |
-
)
|
33 |
-
|
34 |
-
|
35 |
-
@task(pre=[linkedin], default=True)
|
36 |
-
def all(_: Context) -> None:
|
37 |
-
"""Run all convert tasks."""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tasks/{format.py → formats.py}
RENAMED
@@ -1,5 +1,4 @@
|
|
1 |
"""Format tasks for the project."""
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
|
4 |
# %% IMPORTS
|
5 |
|
@@ -11,14 +10,14 @@ from invoke.context import Context
|
|
11 |
|
12 |
@task
|
13 |
def imports(ctx: Context) -> None:
|
14 |
-
"""Format code imports with
|
15 |
-
ctx.run(
|
16 |
|
17 |
|
18 |
@task
|
19 |
def sources(ctx: Context) -> None:
|
20 |
-
"""Format code sources with
|
21 |
-
ctx.run(
|
22 |
|
23 |
|
24 |
@task(pre=[imports, sources], default=True)
|
|
|
1 |
"""Format tasks for the project."""
|
|
|
2 |
|
3 |
# %% IMPORTS
|
4 |
|
|
|
10 |
|
11 |
@task
|
12 |
def imports(ctx: Context) -> None:
|
13 |
+
"""Format code imports with ruff."""
|
14 |
+
ctx.run("ruff check --select I --fix *.py")
|
15 |
|
16 |
|
17 |
@task
|
18 |
def sources(ctx: Context) -> None:
|
19 |
+
"""Format code sources with ruff."""
|
20 |
+
ctx.run("ruff format *.py")
|
21 |
|
22 |
|
23 |
@task(pre=[imports, sources], default=True)
|
tasks/{install.py → installs.py}
RENAMED
@@ -1,5 +1,4 @@
|
|
1 |
"""Install tasks for the project."""
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
|
4 |
# %% IMPORTS
|
5 |
|
@@ -12,21 +11,28 @@ from invoke.context import Context
|
|
12 |
@task
|
13 |
def venv(ctx: Context) -> None:
|
14 |
"""Create a virtual environment."""
|
15 |
-
ctx.run(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
|
18 |
@task
|
19 |
def main(ctx: Context) -> None:
|
20 |
"""Install the main dependencies."""
|
21 |
-
ctx.run(
|
22 |
|
23 |
|
24 |
@task
|
25 |
def dev(ctx: Context) -> None:
|
26 |
"""Install the development dependencies."""
|
27 |
-
ctx.run(
|
28 |
|
29 |
|
30 |
-
@task(pre=[venv, main, dev], default=True)
|
31 |
def all(_: Context) -> None:
|
32 |
"""Run all install tasks."""
|
|
|
1 |
"""Install tasks for the project."""
|
|
|
2 |
|
3 |
# %% IMPORTS
|
4 |
|
|
|
11 |
@task
|
12 |
def venv(ctx: Context) -> None:
|
13 |
"""Create a virtual environment."""
|
14 |
+
ctx.run("python3 -m venv .venv/")
|
15 |
+
ctx.run(".venv/bin/pip install uv")
|
16 |
+
|
17 |
+
|
18 |
+
@task
|
19 |
+
def lock(ctx: Context) -> None:
|
20 |
+
"""Lock the main project dependencies."""
|
21 |
+
ctx.run("uv pip compile requirements-main.txt -o requirements.txt")
|
22 |
|
23 |
|
24 |
@task
|
25 |
def main(ctx: Context) -> None:
|
26 |
"""Install the main dependencies."""
|
27 |
+
ctx.run("uv pip install -r requirements.txt")
|
28 |
|
29 |
|
30 |
@task
|
31 |
def dev(ctx: Context) -> None:
|
32 |
"""Install the development dependencies."""
|
33 |
+
ctx.run("uv pip install -r requirements-dev.txt")
|
34 |
|
35 |
|
36 |
+
@task(pre=[venv, lock, main, dev], default=True)
|
37 |
def all(_: Context) -> None:
|
38 |
"""Run all install tasks."""
|
tasks/{run.py → runs.py}
RENAMED
@@ -1,5 +1,4 @@
|
|
1 |
"""Run tasks for the project."""
|
2 |
-
# pylint: disable=redefined-builtin
|
3 |
|
4 |
# %% IMPORTS
|
5 |
|
@@ -9,7 +8,12 @@ from invoke.context import Context
|
|
9 |
# %% TASKS
|
10 |
|
11 |
|
12 |
-
@task
|
13 |
def app(ctx: Context) -> None:
|
14 |
"""Run the main application."""
|
15 |
-
ctx.run(
|
|
|
|
|
|
|
|
|
|
|
|
1 |
"""Run tasks for the project."""
|
|
|
2 |
|
3 |
# %% IMPORTS
|
4 |
|
|
|
8 |
# %% TASKS
|
9 |
|
10 |
|
11 |
+
@task
|
12 |
def app(ctx: Context) -> None:
|
13 |
"""Run the main application."""
|
14 |
+
ctx.run("gradio app.py")
|
15 |
+
|
16 |
+
|
17 |
+
@task(pre=[app], default=True)
|
18 |
+
def all(_: Context) -> None:
|
19 |
+
"""Run all run tasks."""
|