[{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/automation/","section":"Tags","summary":"","title":"Automation","type":"tags"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/ci/cd/","section":"Tags","summary":"","title":"CI/CD","type":"tags"},{"content":" ","date":"4 April 2026","externalUrl":null,"permalink":"/","section":"Colin Mietka","summary":"","title":"Colin Mietka","type":"page"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/docker-compose/","section":"Tags","summary":"","title":"Docker-Compose","type":"tags"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/gitlab/","section":"Tags","summary":"","title":"Gitlab","type":"tags"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/gitops/","section":"Tags","summary":"","title":"GitOps","type":"tags"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/homelab/","section":"Tags","summary":"","title":"Homelab","type":"tags"},{"content":" It seems everyone building a homelab goes through this phase. This is my take on homelab automation, extensively using gitlab CI/CD powers and Renovate bot. From chaos to order with Renovate \u0026amp; Gitlab CI/CD # I think everyone self-hosting eventually has been there. You’re setting up your first homelab, the excitement is high, and your compose.yaml is littered with the most dangerous word in DevOps: :latest. It works perfectly until it doesn\u0026rsquo;t. One morning you wake up, look at your watchtower service updating everything, and your entire stack in Portainer is a smoking crater\u0026hellip; I realized that I had to stop being lazy and start treating it like some kind of production. Here is how I moved from beginner’s luck to a fully automated, GitLab CI/CD and Renovate pipeline.\nThe Root Cause: The \u0026ldquo;Latest\u0026rdquo; Trap # The mistake wasn\u0026rsquo;t just using :latest; it was the lack of intent. Using generic tags means you never have to pay attention. To have a more controlled setup, I needed three things:\nPinning: Total control over what version is running (e.g., sticking to 3.6 until I’ve personally verified the upgrade path). Visibility: To be notified when a new version exists without manually checking dozens of GitHub repositories. Automation: A way to deploy those updates that didn\u0026rsquo;t involve me manually SSH-ing into a terminal for every minor patch. But keeping the option just in case\u0026hellip; A Solution: Renovate # I was already tracking docker compose and configuration for services in a private repository in my gitlab.com account. It seemed a perfectly decent way to keep track of configuration, and also some documentation by service in a few Markdown files. In the end, it turned out as a perfect first step to work on GitOps and server admin tasks.\nI also read about renovate, and it\u0026rsquo;s Gitlab integration. Basically, it can scan my homelab repository and look for outdated Docker tags. Instead of just breaking things, Renovate opens a Merge Request. It’s like a librarian handing me a book and saying, \u0026ldquo;Hey, there\u0026rsquo;s a new version. I\u0026rsquo;ve gathered the release notes and changelogs for you (if you add a GitHub API token). Do you want to merge this?\u0026rdquo; This allows for Intentional Upgrading. If I see an update for a critical service, I can read or search for breaking changes before clicking Merge.\nMend Renovate, the game changer. Renovate GitLab Pipeline in practice # Fortunately, Gitlab offers a built-in CI/CD pipeline that includes Renovate to simplify the configuration. First, you need to produce an access token with scopes are read_api, read_repository and write_repository for renovate. You can do this in Gitlab\u0026rsquo;s UI under Settings \u0026gt; Access Tokens. After that, add a variable to your Gitlab CI/CD pipeline named RENOVATE_TOKEN and set it to your token. Then, you just need to add a few lines of configuration in your .gitlab/renovate.json file:\n{ \u0026#34;$schema\u0026#34;: \u0026#34;https://docs.renovatebot.com/renovate-schema.json\u0026#34;, \u0026#34;extends\u0026#34;: [\u0026#34;config:base\u0026#34;], \u0026#34;enabledManagers\u0026#34;: [\u0026#34;docker-compose\u0026#34;], \u0026#34;assignees\u0026#34;: [\u0026#34;YourGitlabUsername\u0026#34;], \u0026#34;labels\u0026#34;: [\u0026#34;dependencies\u0026#34;, \u0026#34;renovate\u0026#34;] } and add jobs to your .gitlab-ci.yml file:\ninclude: - project: \u0026#39;renovate-bot/renovate-runner\u0026#39; file: \u0026#39;/templates/renovate-config-validator.gitlab-ci.yml\u0026#39; - project: \u0026#39;renovate-bot/renovate-runner\u0026#39; file: \u0026#39;/templates/renovate.gitlab-ci.yml\u0026#39; renovate: stage: renovate variables: RENOVATE_EXTRA_FLAGS: --autodiscover=false RENOVATE_ALLOW_POST_UPGRADE_COMMANDS: \u0026#34;true\u0026#34; RENOVATE_REPOSITORIES: $CI_PROJECT_PATH rules: - if: \u0026#39;$CI_PIPELINE_SOURCE == \u0026#34;schedule\u0026#34;\u0026#39; Simple right ? The last piece is how you want the pipeline to run. Here as you can see, I decided to go for a schedule that you can add in your project\u0026rsquo;s CI/CD menu. But obviously, you could set it up on push, or on a manual action in the UI.\nWait, how do I update my server now ? # Obviously, merging things on Gitlab doesn\u0026rsquo;t make it, at least not at the automation level of watchtower. With it, I had nothing to do. My goal is to have better control but not at the cost of laziness\u0026hellip; Here again Gitlab will come to the rescue.\nMakefile - Single Source of Truth # I decided to use a Makefile as source of truth, which is a common practice. It keeps the deployment configuration in one place, making it easier to manage and maintain. Here\u0026rsquo;s an example of what it might look like:\nSERVICES = traefik authentik nextcloud jellyfin # whatever you have... pull: @echo \u0026#34;--- Synchronizing with GitLab (Hard Reset) ---\u0026#34; git fetch origin main git reset --hard origin/main update-%: @echo \u0026#34;--- Updating service: $* ---\u0026#34; @cd $* \u0026amp;\u0026amp; docker compose pull -q @cd $* \u0026amp;\u0026amp; docker compose up -d --remove-orphans --wait Note: Using git reset --hard ensures the local state never drifts from the repo.\nWith this, updating a service is just a matter of running make pull and sudo make update-\u0026lt;service_name\u0026gt;. Easy, quick and efficient. After any update on a compose.yaml, I have to ssh into the server and run make commands. It is rather secure because I control the access to the server and the ssh ports are not open thus I can log in only locally via my ssh key. My docker install is requiring sudo as well so at this point, everything seems fine.\nBut obviously, it\u0026rsquo;s not automated ! And as I understood while trying to automate this process, there are some challenges regarding security.\nThe Trade-off: Security vs. Convenience # To further automate the updating process, I planned on using a Gitlab runner installed on the server that executes the make commands on my server. I\u0026rsquo;ll explain the runner configurations later but let\u0026rsquo;s first discuss the security implications of this approach.\nExecuting any docker command on my server requires sudo. This is a quite normal and secure configuration, but it makes the automation process harder.\nIt seems there are essentially 3 options to mitigate this:\nRun Docker commands as a non-root user: adding the gitlab-runner user to the docker group and running Docker commands as that user. Run Docker in rootless mode: running Docker without root privileges. This is a more secure option but requires some additional configuration steps. Run Docker with root privileges: running Docker normally, but allow the connection of the gitlab.com runner via ssh and handle secrets there. This is always the same dilemma: Security vs. Convenience.\nGiving a user access to the Docker socket is generally considered a security risk, as it allows to execute arbitrary commands with elevated privileges. For more details on the security risks see the Docker documentation. If the GitLab instance or the runner is compromised, the attacker has a path to the host in this case.\nWhy I chose it anyway: For a homelab, I prioritized minimizing the network attack surface. By using a local shell runner, the server doesn\u0026rsquo;t need to expose SSH to the wider network or manage external credentials. The runner stays inside the house, pulling instructions down from GitLab rather than having GitLab push them into my server. It’s a calculated risk: I traded \u0026ldquo;Internal Privilege Escalation Risk\u0026rdquo; for \u0026ldquo;External Network Exposure Risk.\u0026rdquo;\nGitlab Runners # To bridge the gap between a \u0026ldquo;Merge\u0026rdquo; button on GitLab.com and your local terminal, you need a GitLab Runner acting as a local agent. Since we decided on a shell-based approach to trigger our Makefile, here is how to get it running:\nFirst, install the runner on your server following the official GitLab documentation. Once installed, you need to link it to your project:\nsudo gitlab-runner register During the prompt:\nGitLab Instance URL: this is https://gitlab.com/ (unless you are self-hosting GitLab). Registration Token: Grab this from your project under Settings \u0026gt; CICD \u0026gt; Runners. Executor: I chose shell. This allows the runner to execute commands directly on the host\u0026rsquo;s terminal. By default, the runner creates a system user named gitlab-runner. For our Makefile to work without manual intervention, this user needs specific permissions. To allow the runner to manage containers without sudo, we need to add it to the docker group:\nsudo usermod -aG docker gitlab-runner This is the unsafe decision we discussed earlier.\nThe runner also needs a workspace. While GitLab CI usually clones the repo into a temporary build folder, I also wanted to be able to manually deploy, just in case. I am managing the local git repository into my home folder, so I needed to grant some access permission to the gitlab-runner user to my directories. This allows the runner to clone the repo and run the make commands.\nThe Workflow in Action # Now, the \u0026ldquo;New Version\u0026rdquo; flow looks like this:\nMy GitOps workflow. Renovate detects an update and opens a GitLab MR. I review the Changelog directly in the MR description. I click Merge. The Local Shell Runner triggers a job that runs docker compose pull \u0026amp;\u0026amp; docker compose up -d via make commands. Everything is updated in seconds, with a full audit trail in Git. Conclusion # Moving to this setup felt a bit like growing up. It’s not just about the automation; it’s about the peace of mind that comes with a controlled process. The ability to roll back changes quickly and easily is invaluable. If you are tired of your homelab breaking behind your back, stop using :latest and start building a pipeline. Your future self (who just wants things to work) will thank you.\nI\u0026rsquo;ll definitely have a look at the docker executor gitlab runners. It could be the missing piece that ensures the complete security of my setup. Stay tuned !\n","date":"4 April 2026","externalUrl":null,"permalink":"/posts/homelab_automation/","section":"Posts","summary":"It seems everyone building a homelab goes through this phase. This is my take on homelab automation, extensively using gitlab CI/CD powers and Renovate bot.","title":"Homelab Automation","type":"posts"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/renovate/","section":"Tags","summary":"","title":"Renovate","type":"tags"},{"content":"","date":"4 April 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/agent/","section":"Tags","summary":"","title":"Agent","type":"tags"},{"content":" Agentic AI and MCP are the new thing in 2025. I figured it\u0026rsquo;s time to try them out and share the results. Witness the rise of my AI Agent, with Web Search, Data Analysis and Knowledge Graph enhanced RAG. Some Definitions # Let\u0026rsquo;s start with some context and definitions about what we are going to use.\nAgentic AI # Agentic AI refers to intelligent Agents that can perceive their environment, plan actions, and execute them autonomously to achieve high‑level goals. Unlike a simple prompt‑response model, an agent has the ability to plan ahead sub-tasks to perform and call adequate tools to achieve them. Depending on its setup, it can browse the web, analyze data, call APIs, run code, query databases. You can also include a Human-in-the-Loop to control the agent actions.\nA basic agent workflow Roughly, the LLM acts as the brain of the Agent, planning and taking decisions while the tools are its mean to interact with its environment.\nLocal LLM inference # Local LLM inference means running a large language model directly on your own hardware (CPU, GPU) instead of sending data to the cloud. The main benefits are:\nNo network round‑trips for every query. Data privacy – no sensitive text leaves your premises. Cost efficiency – you don\u0026rsquo;t have to pay for each query. Ollama is a tool to run LLMs locally. I discussed how to set up Ollama in a previous post. Obviously, the performance is limited by your hardware but for experimenting it is a good choice. Other options would be to use free tiers of inference providers, or paid ones. Here, huggingFace shines again as it provides a simple way to call inference endpoints with various models they propose. You also can connect to you favorite main service like OpenAI or Anthropic. All of it is explained in the tutorials from HuggingFace courses.\nModel Context Protocol (MCP) # The Model Context Protocol (MCP) is a set of guidelines that standardize how external data (e.g., APIs, databases, files) is exposed to an LLM as context. Think of it as a contract that defines:\nContext schema – JSON schema for the data structure. Metadata – Provenance, freshness, and privacy tags. Access patterns – How to retrieve, cache, and stream the data. Security controls – Token scopes and rate limits. MCP enables plug‑and‑play context for agents: the same agent can query a weather API, a CSV file, or a Neo4j graph, all through a uniform interface. It acts as an accelerator for the development of agents as any set of tools can be implemented independently of the AI models used to power them.\nTo explain in simple words how it works, let\u0026rsquo;s say that the tools are exposed by an MCP server, your application or agent is called a host and this host implements an MPC client as one of its functionalities. You can find a more in-depth explanation in this course\nRetrieval Augmented Generation (RAG) # Retrieval Augmented Generation is a technique that augments the LLM’s answer with external knowledge fetched in real time. The typical pipeline is:\nQuery formulation – The agent generates a search query or a prompt. Retrieval – The system looks up the best relevant passages from a vector store, knowledge graph, or web search. Fusion – The retrieved snippets are concatenated with the prompt. Generation – The LLM produces the final answer. RAG is especially useful when dealing with highly specialized domains or rapidly changing data that the trained LLM would not have seen.\nA quick word about Agentic RAG here. In the traditional RAG implementation, the tool for retrieval is called first, and it\u0026rsquo;s answer is then passed as additional context to the LLM along with the initial use query. In agentic RAG, the workflow is more flexible because the agent will decide whether to use the retriever tool. Another big advantage is the query reformulation that the agent performs. In traditional RAG, the initial user query, often time a complete question, is generally passed as-is to the retriever, which is not optimal. In agentic RAG, the agent LLM reformulates the query before passing it to the retriever improving the results.\nVector Stores # Vector Stores are a foundation of RAG implementation. Their role is it turn raw knowledge into searchable embeddings, enabling RAG systems to use specific information without having to load entire documents into memory.\nA basic RAG workflow using embeddings and vector stores In general, the input document are split into smaller chunks to turns a monolithic document into a collection of searchable, semantically coherent units that fit within the LLM’s context window and that can be ranked accurately\nKnowledge Graphs # A knowledge graph is a graph‑structured representation of data with nodes and edges representing entities and their relationships. Stored in a graph database like Neo4J, a knowledge graph supports efficient traversal, semantic search, and query languages enabling agents to answer complex questions, discover hidden connections, and supply structured evidence.\nWhere to start, where to learn ? # HuggingFace Learn # When looking for good tutorials to begin with, I came upon the HuggingFace hub Learn section. You can find there complete lessons and tutorials on LLM usage and training, Agentic frameworks like SmolAgent and Langchain, and even an MCP course built just a few months ago as when I\u0026rsquo;m writing this. I found these courses complete and well-written with hands-on exercises that you can run either using their inference options (beware the costs) or locally with your Ollama instance.\nThat being said, you can use whatever material you prefer. I often find YouTube videos to be of great use because they showcase simple use cases that you can duplicate.\nDIY is always a good choice # Nothing compares to practice when trying to learn and understand how things work. You could spend hours reading courses materials and videos online but implementing them yourself, even simple version designed for dummy use cases will give you a much better understanding. I decided to give a try at building my own agent using Langchain and Ollama.\nMy Experimental Agent step by step # Agentic Framework # Fortunately, we don\u0026rsquo;t have to reinvent the wheel. There are multiple open source AI Agent frameworks available, all with their pros and cons. I tested out two of them, smolagents from Huggingface and Langchain/Langgraph.\nhuggingface/smolagents 🤗 smolagents: a barebones library for agents that think in code. Python 26549 2454 The first one focuses mainly on Code Agents, which are designed to be able to generate and execute code as they advance through their answering steps. It makes them really powerful but more unpredictable.\nlangchain-ai/langgraph Build resilient language agents as graphs. Python 28961 4956 On the other side of the spectrum, there is Langgraph. Its graph based approach allows for more control over the agent workflow, but it requires more setup and understanding. It is also an established framework among professionals, the control features being most relevant in business and enterprise use cases.\nI decided to go with Langgraph as I thought to get more value out of my training, but ultimately I used both as you will see later. Anyway, if you\u0026rsquo;re like me trying to experiment, I\u0026rsquo;ll recommend to try both !\nIn langgraph, you have to define a state, nodes and edges to build the graph of your agent. The state is the content of your application that is passed through the graph nodes via the edges. For my use case, the state is the complete history of messages built by the different nodes. It consists in a series of Human, AI and Tool messages.\nclass AgentState(TypedDict): messages: Annotated[list[AnyMessage], add_messages] For the first implementation, I\u0026rsquo;m using two nodes:\nAssistant node - The LLM brain of the agent, it is defined as the start of the flow. Tool node - the toolbox containing all the tools and their metadata. The only specific edge is the link between assistant and tool nodes. It is a conditional relation activate by the LLM.\nbuilder = StateGraph(AgentState) memory = InMemorySaver() builder.add_node(\u0026#34;assistant\u0026#34;, assistant) builder.add_node(\u0026#34;tools\u0026#34;, ToolNode(tools)) builder.add_edge(START, \u0026#34;assistant\u0026#34;) builder.add_conditional_edges( \u0026#34;assistant\u0026#34;, tools_condition, ) builder.add_edge(\u0026#34;tools\u0026#34;, \u0026#34;assistant\u0026#34;) agent = builder.compile(checkpointer=memory) In this sample code, I also added a memory checkpointer to allow the LLM to remember interactions, like you would expect in a chat application. It also allows to follow up queries with additional information.\nMCP Tools integration # After their release late 2024, MCP have been the center of the AI world. I figured that while I was experimenting with LLMs tools and agents, I\u0026rsquo;d take a look at MCP servers and clients along the way. Obviously, for the little experiment I\u0026rsquo;m building, I didn\u0026rsquo;t need any of this more complex setup.\nmodelcontextprotocol/python-sdk The official Python SDK for Model Context Protocol servers and clients Python 22593 3307 Tools are the mean of interaction for the agent. For a tool to be efficient, it needs to have a precise documentation and typed inputs. In the python version of the MCP server I used, all this is done trough typing and docstrings. Apart from that the MCP implementation is quite simple. Look at this math MCP server:\nfrom mcp.server.fastmcp import FastMCP mcp = FastMCP(\u0026#34;Math\u0026#34;) @mcp.tool() def multiply(a: float, b: float) -\u0026gt; float: \u0026#34;\u0026#34;\u0026#34; Multiplies two numbers. Args: a (float): the first number b (float): the second number \u0026#34;\u0026#34;\u0026#34; return a * b @mcp.tool() def add(a: float, b: float) -\u0026gt; float: \u0026#34;\u0026#34;\u0026#34; Adds two numbers. Args: a (float): the first number b (float): the second number \u0026#34;\u0026#34;\u0026#34; return a + b if __name__ == \u0026#34;__main__\u0026#34;: mcp.run(transport=\u0026#34;stdio\u0026#34;) You can define as many MCP servers as you need, I created a math one, one for fetching the weather, one for searching the web, \u0026hellip; One of the advantages of this MCP setup is the re-usability of these servers. You implement a tool once, and then you can use them in as many agents or applications you want.\nYou can also use publicly available MCP servers from the web, like the ones from GitHub or Google to be able to interact with their services. It is a formidable way to build quickly well-integrated toolboxes but the downside is the potential transit of data to remote servers.\nTo connect you agent LLM node to the different MCP servers, I used the provided MultiServerMCPClient from langchain_mcp_adapters and bind tools methods.\nAdding Data Analysis Capabilities with Code Agent # Until now, everything we did was based on simple tools with no real added value. Add the ability to browse the web with DuckDuckGoSearchRun from langchain is certainly useful to overcome to lack of up-to-date data of the LLMs, but you can have this now in any GUI interface like PageAssist or OpenWebUI. What can I add to my agent that could be really useful to me ?\nI\u0026rsquo;m a Data Scientist, and as such, most of my time is spent analyzing data. It means, exploring, computing statistics and metrics and visualizing them. It is a repetitive task but not so simple to automate because for each use case, the exploration will be different. What if I could ask an agent to explore a dataset ? It would mean load let\u0026rsquo;s say a CSV file, compute some statistics, draw charts and reflect on the outputs.\nNow, I said earlier that the Learn section from HuggingFace was an excellent starting point for the journey. It\u0026rsquo;s even better, it\u0026rsquo;s a gold mine ! The Open-Source AI Cookbook contains a lot of recipes that can be adapted to your needs. It\u0026rsquo;s also a lot of inspiration on the possible applications of LLMs and Agents. I found implementations of an Analytics Assistant and a Knowledge Graph RAG.\nI decided to follow the implementation of the Data Analysis Agent using a smolagent CodeAgent and expose its analysis capabilities as a tool to my manager agent. I am not sure that this architecture is a recommended one, but it will do for the time being. Code Agents as I mentioned have the ability to execute code snippets while progressing through their tasks. I think of it as an agent that can build his own tools, at least simple ones. Let\u0026rsquo;s have a look at my version:\nfrom mcp.server.fastmcp import FastMCP from smolagents import CodeAgent, LiteLLMModel mcp = FastMCP(\u0026#34;Data Analysis\u0026#34;) model = LiteLLMModel( model_id=\u0026#34;ollama_chat/your_model_name\u0026#34;, api_base=OLLAMA_HOST, num_ctx=8192, ) agent = CodeAgent( tools=[], model=model, additional_authorized_imports=[ \u0026#34;numpy\u0026#34;, \u0026#34;pandas\u0026#34;, \u0026#34;matplotlib.pyplot\u0026#34;, \u0026#34;seaborn\u0026#34;], ) @mcp.tool() def run_analysis(additional_notes: str, source_file: str) -\u0026gt; str: \u0026#34;\u0026#34;\u0026#34;Analyses the content of a given csv file. Args: additional_notes (str): notes to guide the analysis source_file (str): path to local source file \u0026#34;\u0026#34;\u0026#34; prompt = f\u0026#34;\u0026#34;\u0026#34;You are an expert data analyst. Please load the source file and analyze its content. The first analysis to perform is a generic content exploration, with simple statistics, null values, outliers, and types of each columns. Secondly, according to the variables you have, list 3 interesting questions that could be asked on this data, for instance about specific correlations. Then answer these questions one by one, by finding the relevant numbers. Meanwhile, plot some figures using matplotlib/seaborn and save them to the (already existing) folder \u0026#39;./figures/\u0026#39;: take care to clear each figure with plt.clf() before doing another plot. In your final answer: summarize the initial analysis and these correlations and trends. After each number derive real worlds insights. Your final answer should have at least 3 numbered and detailed parts. - Here are additional notes and query to guide your analysis: {additional_notes}. - Here is the file path: {source_file}. \u0026#34;\u0026#34;\u0026#34; return agent.run(prompt) if __name__ == \u0026#34;__main__\u0026#34;: mcp.run(transport=\u0026#34;stdio\u0026#34;) As you can see, the tool is just a prompt where you ask the agent to analyze the given csv file ! The first few tests I have made with this version are quite impressive already ! It created visualizations, metrics and reflected to get insights in its final answer. This first version could be improved with dedicated tools like plots and given metrics to increase the control on what the agent is going to achieve when we call it.\nUsing Knowledge Graphs to enhance RAG # I gave a shot at Vector Stores and traditional RAG a few months back when first hearing about the technique. The idea is to improve the quality of answers from an LLM using specific data, either more recent data or dedicated to a certain domain for example. The typical example for me is a coding assistant capable of searching through the documentation of a specific language or package. Another technique to achieve this would be finetuning but in the case of LLMs, the constraints are quite hard making RAG a good alternative.\nMore recently, Knowledge Graphs (KG) have been introduced as a way to improve the LLM answers in the case of semantic searches by adding contextual understanding of the data. It also gives a way to better explain the reasoning made by the LLM.\nThe recipe from HuggingFace is using Neo4J as the graph database. I am using the docker version of Neo4J to host my sample database but there is free plan for hosting on Neo4J AuraDB I\u0026rsquo;m using the proposed dataset as a base for the sake of the experiment. A graph containing Articles, Authors and Topics nodes with edges building the relation between them: published by and in topic. It is representative of a research AI assistant, with for example a database derived from Arxiv.\nNeo4J is one of the many option to build a Graph Database. First load the Neo4J graph:\nfrom langchain_community.graphs import Neo4jGraph graph = Neo4jGraph( url=os.environ[\u0026#34;NEO4J_URI\u0026#34;], username=os.environ[\u0026#34;NEO4J_USERNAME\u0026#34;], password=os.environ[\u0026#34;NEO4J_PASSWORD\u0026#34;], ) In the case of a graph database, langchain provides a GraphCypherQAChain that allows us to query our graph database using natural language. Like in the case of the Data Analytics Assistant, the queries are handled by a dedicated agent, here from langgraph, with its own set of tools and instructions.\ncypher_chain = GraphCypherQAChain.from_llm( cypher_llm=ChatOllama(model = \u0026#34;a_local_model\u0026#34;, temperature=0.), qa_llm=ChatOllama(model = \u0026#34;a_local_model\u0026#34;, temperature=0.), graph=graph, verbose=True, allow_dangerous_requests=True, # should add control in real world ) def graph_retriever(query: str) -\u0026gt; str: return cypher_chain.invoke({\u0026#34;query\u0026#34;: query}) graph_retriever_tool = Tool( name=\u0026#34;graph_retriever_tool\u0026#34;, func=graph_retriever, description=\u0026#34;\u0026#34;\u0026#34;Retrieves detailed information about articles, authors and topics from graph database. \u0026#34;\u0026#34;\u0026#34; ) I decided to bind this tool to a dedicated agent and build a multi-agent system mostly for experimentation purposes. But the graph_retriever_tool can be used as a standalone tool for the manager agent, or even exposed through MCP as I did in the case of the data analytics.\nI performed the tests suggested in the recipe. They are requests forcing the system to build complex cypher queries to traverse the graph surch as\nAre there any pair of researchers who have published more than three articles together?\nand found the right answers ! The system was able to generate a complex query to answer and generate a coherent final response.\nGradio for chat interaction # The only missing piece to the puzzle is a way to interact with the system. That when Gradio comes into place.\ngradio-app/gradio Build and share delightful machine learning apps, all in Python. 🌟 Star to support our work! Python 42289 3383 It is an open-source Python package that allows to quickly build a demo or web application for AI models. I used the built-in ChatInterface to create a simple chat webpage hosted locally to interact with the agent.\nConclusion # You can find the complete source code for this example on my Gitlab. Keep in mind that everything I presented here is evolving rapidly, is subject to change, and certainly can be improved ! If you have any questions or suggestions, feel free to reach out !\nColin Mietka / local-assistant 0 0 ","date":"15 September 2025","externalUrl":null,"permalink":"/posts/agents_mcp_rag_local_foss/","section":"Posts","summary":"Agentic AI and MCP are the new thing in 2025. I figured it’s time to try them out and share the results. Witness the rise of my AI Agent, with Web Search, Data Analysis and Knowledge Graph enhanced RAG.","title":"Agents, MCP, RAG, Knowledge Graphs, all open source and local","type":"posts"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/embeddings/","section":"Tags","summary":"","title":"Embeddings","type":"tags"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/knowledge-graph/","section":"Tags","summary":"","title":"Knowledge Graph","type":"tags"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/llm/","section":"Tags","summary":"","title":"LLM","type":"tags"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/mcp/","section":"Tags","summary":"","title":"MCP","type":"tags"},{"content":"","date":"15 September 2025","externalUrl":null,"permalink":"/tags/rag/","section":"Tags","summary":"","title":"RAG","type":"tags"},{"content":"","date":"2 April 2025","externalUrl":null,"permalink":"/tags/code/","section":"Tags","summary":"","title":"Code","type":"tags"},{"content":"","date":"2 April 2025","externalUrl":null,"permalink":"/tags/privacy/","section":"Tags","summary":"","title":"Privacy","type":"tags"},{"content":" AI assistants are now commonly used for various tasks, powered by advanced machine learning models. While cloud-based services are the go to for most people, concerns over data privacy have led me to explore self-hosting as a cost-effective alternative. The rise of AI assistants. # What are they ? # AI assistants have become an integral part of our daily lives, offering a wide range of functionalities from answering questions to automating tasks. These assistants are powered by advanced machine learning models that can process vast amounts of data and provide responses to user queries. AI assistants typically operate by using a combination of natural language processing (NLP) techniques, machine learning algorithms, and large datasets. They are trained on diverse information sources to understand and generate human-like responses. When a user interacts with an AI assistant, the system processes their input, analyzes it for context and intent, and then generates a relevant response based on its training.\nThe open source claim # Most of the AI assistant on the market are proprietary software owned by giants (or by rapidly growing ones) like OpenAI, Meta or Anthropic. Even if the companies are advertising their models are open source, the reality is that the models they provide and the data used to train them are not open to the public or free to use. There is also a growing concern about the copyright issues surrounding the training phase of these models. The large datasets gathered from all over the internet often contain all kind of licenced content and do not respect the rights of content creators. This lack of transparency and control over the data used in training can lead to ethical concerns and potential misuse of the technology.\nThe cost of using AI assistants. # Even if most of the cloud-based services offer free tiers of usage, the rapid growth of the sector has led to a rise in costs and limited access to premium features, kept behind paywalls. This can be particularly problematic for small businesses or individuals who may not have the budget to afford them. The paywall model can also create a digital divide, where only those with the financial means can access advanced AI capabilities.\nWhat about self-hosting ? # Self-hosting an AI assistant seems like a perfect answer to the above concerns. You can keep control of your data and if you choose one of the many \u0026lsquo;open source\u0026rsquo; models, you can basically run it for free. Even if you choose to run AI services on your local machine, they still require significant computational resources. In theory, this means that you need a powerful computer with a good GPU to handle the processing demands. But you can also run models on CPU only, albeit at a slower rate. All of this can be achieved with a few different tools:\nOllama to run the models Page Assist (or OpenWebUI) to interact with the models from your browser Continue for IDE integration Install and run LLMs with Ollama # Ollama is a tool to run LLMs locally. What is Ollama ? # Ollama is a tool designed to run large language models (LLMs) locally on your computer. It allows you to access a variety of pre-trained models, ranging from versatile general-purpose models to specialized ones for specific domains or tasks. Some of the supported models include LLaMA-2, CodeLLaMA, Falcon, Mistral, WizardCoder, and more. Ollama simplifies the process of downloading and managing these models (its usage resembles docker), offering a user-friendly experience for those who want to use advanced language models directly on their system.\nPrerequisites # As you might know from previous posts, I\u0026rsquo;m running a Archlinux system on a somewhat powerful PC with a dedicated AMD GPU with enough VRAM to run at least the basic models from Ollama. You should also be aware that all AMD GPUs are not compatible with the rocm framework that allows models to run on GPU. For example, in my case I needed to install specific packages and customize the configuration of Ollama to be able to make models run on GPU. Depending on you personal hardware and system, the following guidelines may differ, and you should always have a look at the documentation.\nInstall # From the documentation, you can find how to install Ollama on your system. I decided to go directly to the official package released by my distribution and activate the systemd service to start Ollama automatically at boot time. You probably can do the same on most of them. I also went for the rocm version that allows the use of models on an AMD GPU. Again, depending on you system you may need to follow a different installation process.\nDownload and run models # After installing Ollama, you can download and run models. The documentation provides a list of available models that you can choose from. You can also create your own models or customize their properties. For example, to download Llama 3.2 you can run the following command:\nollama pull llama3.2 it will download the model from the official repository and store it locally. You can then run the model using the following command:\nollama run llama3.2 The prompt you see in a terminal when running an Ollama model. You will be presented with a prompt in which you can input your query. To close the session, hit Ctrl + d. Ollama does not access the internet and all the chat history you have is stored locally. It has many features, you can for example customize the way each models answers to you or create specific prompts but I won\u0026rsquo;t cover them here, I\u0026rsquo;ll let you scroll through the documentation.\nNow, the basic TUI interface can be enough for some users but in most cases, you probably want your queries to interact with the web (and expose citations) for certain tasks and you may also prefer a nicer interface.\nAdd a GUI interface to interact with your models with Page Assist # Page Assist web browser extension # Page Assist is an open source web browser extension available for chromium and firefox based browsers. It allows you to interact with your local models directly from the web pages you are visiting, providing real-time responses and citations. You can use a full tab interface or a sidebar, you can also use keyboard shortcuts to quickly access it.\nThe prompt you see in page assist extension. In the settings page, you can set up the connection with the local Ollama server and interact with the different features of the extension:\nModel Management: You can easily download, update, or remove models. Custom Prompts: Define custom prompts to tailor the behavior of your AI assistant. Retrieval-Augmented Generation (RAG): Add knowledge documents to enhance the responses with relevant information. The sidebar view is particularly useful when interacting with a specific web page. This way you can easily ask your local assistant to summarize the main article on the page, or translate it to another language.\nEnabling the web search feature can be very handy when trying to get more context on a topic, or when you need to find specific information.\nIf you need more, there is OpenWebUI # There are more powerful options than the simple Page Assist extension. One of the most popular is OpenWebUI. It offers the same features as Page Assist and probably more advanced ones like the ability to use proprietary models like ChatGPT or options for text-to-image generation.\nOpenWebUI is also an open-source project, the service can be deployed as a docker container and the web interface is then accessible on your local machine or exposed to the internet if you want to.\nI did not try it yet, and it is definitely on my list of things to explore.\nWhat about a coding assistant in your favorite IDE? # Continue for VSCode and JetBrains IDEs integration # Obviously, as a tech enthusiast, one of the main benefit of this kind of AI assistant is through coding assistance. Let\u0026rsquo;s see how we can integrate it into our favorite IDEs.\nAfter a quick web search, I found Continue, an IDE plugin available for VSCode and JetBrains IDEs (like PyCharm, IntelliJ IDEA, WebStorm, etc.). It offers the same kind of features as the integrated options these IDE offer but Continue is able to connect to your local Ollama server and use your local models either to generate code or provide suggestions.\nYou can associate your Ollama models through the .continue/config.json file settings and these configurations will be the same in all IDEs you have installed Continue on.\nThis is a great way to keep your coding assistance local, secure, and under your control. As I never used a proprietary coding assistant like GitHub Copilot, I couldn\u0026rsquo;t tell if the performance of a local model like Qwen2.5-Coder I\u0026rsquo;m using right now are better or worse. But I can definitely say that its suggestions are often useful and relevant, even if I could live without them. The code generation prompt is not a feature I use much but the code completion feature has already avoided me some annoying bug fixes just by checking the coherence of the syntax.\nLogo of the Continue AI assistant extension Disclaimer # And here is the last point I wanted to make, the continue AI assistant is not only completing code but also docstrings, headers, comments, commit messages, and also markdown articles like the one I am writing now\u0026hellip;\nSo you see me coming, parts of what you read before has been written by AI. Not all of it I assure you, and the experience has not been so great for me. For general contexts sentences, the auto-completion has been at most inspiring but what it produced was often not usable as is. But in more technical parts, it can become a real pain to use. Sometimes, the AI would suggest things that were not relevant or didn\u0026rsquo;t match the context at all. Then it becomes just a distraction and pollutes what you are trying to write.\nSo, while I am excited about the potential of AI in software development, I am still cautious about relying too heavily on it. It\u0026rsquo;s a tool that can be very helpful when used correctly, but it\u0026rsquo;s important to remember that it\u0026rsquo;s not perfect and should be used with care.\nConclusion # Reflecting on my experience with AI tools like Page Assist and Ollama, I approach their use with cautious optimism. These tools can effectively enhance productivity when used wisely. The ability to self-host these models provides crucial benefits, including local control, enhanced privacy and cost-efficiency which I value highly. While they can be helpful, I remain mindful of their limitations and ensure they serve as aids rather than replacements for human decision-making.\n","date":"2 April 2025","externalUrl":null,"permalink":"/posts/self_host_your_ai_assistant/","section":"Posts","summary":"AI assistants are now commonly used for various tasks, powered by advanced machine learning models. While cloud-based services is the go to for most people, concerns over data privacy have led me to explore self-hosting as a cost-effective alternative.","title":"Self-host your AI assistant","type":"posts"},{"content":"","date":"10 October 2024","externalUrl":null,"permalink":"/tags/android/","section":"Tags","summary":"","title":"Android","type":"tags"},{"content":" With nowadays smartphone, you can do anything. And the two main systems reign supreme on the market. But if you value your privacy, another path is possible. It is called e/OS/. It\u0026rsquo;s open source, it\u0026rsquo;s free, and it doesn\u0026rsquo;t spy on you. Let\u0026rsquo;s see what it is and how to finally switch your phone to it ! Should you care about the system on your phone ? # Google or Apple, pick your poison. # It\u0026rsquo;s been at least ten years now that mobile phones are completely part of our daily life. We have them within reach at all times. We use them as phone for sure, but also to access the web, organise our life, share on social media, \u0026hellip; And for the last ten years at least, the market has been dominated by two giants: Google and Apple. They developed the base systems on which our devices run, namely Android and iOS. And of course, they use now this dominant position to slowly shape our day-to-day devices into some sort of surveillance systems. They extract and share our personal data with third parties, being public or private, for money. In the name of convenience, they predict and shape our behaviors. But not all is lost, it turns out that the base Android system is open-source. It\u0026rsquo;s called Android Open Source Project (AOSP) and this opens the door to other possible operating systems for our phones.\nLineageOS is one of the most popular free Android ROM. What are Custom ROMs ? # An Android ROM (Read-Only Memory) is an alternative version of Android. It can be built in top of the open source base project. There are a lot a different ROMs available, and you can find a list, probably non-exhaustive on Wikipedia. Everybody could build he\u0026rsquo;s own system and customize it as he needs. Then, some of the developers decided to release their version and make it available for others. The most famous are LineageOS, GrapheneOS and e/OS/. Of course there are many more options but when you first search the internet to learn more about them, they are the 3 most discussed options.\ne/OS/, an open-source and privacy respecting ecosystem. # I had a closer look at e/OS/. They propose not only the base system but also a complete ecosystem of privacy respecting applications that completely replaces the Google suite that you have on your phone. It is based on LineageOS which is already a pretty complete system, and they add applications on top of it. You can find all the details you need on their e/OS/ page.\nOne of the main downside with the custom ROMs, that we will discuss in a moment, is the device compatibility It looks like e/OS/ has something for a lot of them, being officially supported by the foundation or just by the community. Of course, all they do is open-source, and if you can/want to contribute, you can find everything on their gitlab. You can also learn more about their mission and goals in their Manifesto.\nScreenshot from e/OS/ website. Can I switch my phone to e/OS/ ? # Supported devices # Now that I got you attracted with all the good promises of a system like e/OS/, it\u0026rsquo;s time to come back to reality. Installing a custom software on your current Android phone is not that easy to do. In general, the devices supported are well documented, and you can get instructions in the documentation. At the time I write these lines, e/OS/ supports almost 200 devices, but the list of officially supported (by the foundation) is much shorter. For a complete list of supported devices, go check the device list. In short, the support won\u0026rsquo;t be the same for all devices. For the majority of them, the maintenance is done by community members. It means installing and updating may not be easy, and some of the functionalities may be missing, causing some apps to be unusable (typically banking apps). For the officially supported devices though, you get a simple install, updates over-the-air (OTA) and all apps working, exactly as you would expect from a stock Google Android device. So when trying to see if you could get a shot at e/OS/ or any other ROM, definitely take a look at these device lists !\nInstallation method # I\u0026rsquo;ll present the two main methods of installation for e/OS/ as I tried both of them for two different devices. Of course, these methods vary for other systems so go check out the dedicated documentation. Regarding e/OS/, you basically have two methods, the manual one with the command line (different for each device), and their easy-installer application. he easy-installer supports only a few devices for now, but if you\u0026rsquo;re not comfortable with the command line, it\u0026rsquo;s a life-saver ! If you\u0026rsquo;re familiar with the command line and not too afraid of breaking your phone, you may try the manual installation. It certainly gives you the feeling you\u0026rsquo;ve learned something when you reboot the phone and the e/OS/ welcome screen appears.\nThere is a third option, which is building your own ROM from source. It\u0026rsquo;s the most complicated option, too complicated for me, but it probably offers a lot of customizations that you way want to test. This is also probably the way to try and port the system to a new device. I would advise this method only for actual developers who know what they\u0026rsquo;re doing\u0026hellip;\nMy choices and experience with e/OS/ # I had no experience with these custom Android ROMs before and e/OS/ is the first one I tested. I compared LineageOS, e/OS/ and other options without Android like postmarketOS that I will probably try in the future. I went for e/OS/ just because I found some reviews (that I can\u0026rsquo;t find anymore) that were really great. It also matched better with the devices I had available at the time. In the end, I feel that it just comes to what OS my device can support. Because at least for a first try, I didn\u0026rsquo;t want to buy a new, or even refurbished device.\nI tested a first install on an old Samsung A20e (it was sitting in a drawer) which is only community supported by e/OS/. I found a good post on the community forum that explains the general method to install e/OS/ on a Samsung device. I had to download a ROM created by a community called Eureka and followed the instruction to unlock the phone\u0026rsquo;s bootloader, install TWRP, the recovery tool that is used to install the actual e/OS/ system, and then install e/OS/ itself.\nTechnically, at some point while I was following the installation guide, I felt like I destroyed my phone. But in the end, I managed to make it reboot into e/OS/. What a relief ! I used it a couple of weeks, and I could tell it has a good potential but some things were not working at all. First, almost every application were working, even the most demanding in security. Banking apps were completely ok, but the main issue was with the bootloader unlocking.\nBecause you need to unlock it to install e/OS/, some applications consider the phone insecure. I discovered later that you can re-lock the bootloader, but not on all devices ! After that, installing application worked, it was not perfect because the incognito mode on the e/OS/ store called App Lounge was not working well. I still managed to run all I wanted via Aurora or F-Droid. As a community version, it was a bit outdated with only Android 12 if I remember well and older security updates. Sometimes, I think I may be due to some mistakes in the installation process but who knows.\nThe experience was good enough for me to make the switch. But this time, I decided to search for a well-supported device and buy a refurbished one. I went first to the e/OS/ foundation (Murena) store. They sell and ship smartphone with preinstalled e/OS/. I also checked the officially supported devices in the device list and searched for the good smartphone for me. Of course, this is just a personal choice, but even if I considered a FairPhone with all the good will it has to sell, I thought the device not suiting my needs (which is battery life mostly). Ironically, it seems that one of the most supported devices (not only for e/OS/ but also for other systems) is the Google Pixel 5. What a joke ! So I bought one and this time I used the easy-installer. It was flowless.\nWhat to expect after installing # Screenshot from e/OS/ website, with home screen and applications. It\u0026rsquo;s just working as any other Android phone # It\u0026rsquo;s now been a few month using e/OS/ daily. The installation process went super well and I have exactly all I needed. It\u0026rsquo;s just working as my previous Android phone except I don\u0026rsquo;t have the preinstalled applications, either by Google or the manufacturer (think about all the Samsung Apps nobody uses and that cannot be uninstalled). Banking Apps work perfectly, NFC, Bluetooth, Wi-Fi, Health care, everything. All without any Google account, no adds, no trackers, \u0026hellip; It\u0026rsquo;s truly my phone.\nSafetyNet and bootloader relocking # As I said before, bootloader relocking was a problem in my first attempt. Without it, some of the apps (Doctolib for health care for example) were just not working. With the good device and the easy-installer, I relocked the bootloader after installation and never had any issue. Something that I didn\u0026rsquo;t encounter but can be blocking for you is the SafetyNet. Even if I don\u0026rsquo;t understand the details of it, it is mostly needed for banking applications so make sure that you choose a device that supports it. For me, with the official Pixel 5 redfin, all good !\nTry it out ! # You have an old phone in the closet, I know it ! Just don\u0026rsquo;t be afraid to break it, and try e/OS/ or anything else you prefer. I\u0026rsquo;m sure you will be tempted, as I was, to just change the way you live with your phone.\n","date":"10 October 2024","externalUrl":null,"permalink":"/posts/degoogle_your_phone/","section":"Posts","summary":"With nowadays smartphone, you can do anything. And the two main systems reign supreme on the market. But if you value your privacy, another path is possible. It is called e/OS/. It’s open source, it’s free, and it doesn’t spy on you. Let’s see what it is and how to finally switch your phone to it !","title":"DeGoogle your phone","type":"posts"},{"content":"","date":"10 October 2024","externalUrl":null,"permalink":"/tags/e/os/-/","section":"Tags","summary":"","title":"E/OS/ ","type":"tags"},{"content":"","date":"10 October 2024","externalUrl":null,"permalink":"/tags/murena/","section":"Tags","summary":"","title":"Murena","type":"tags"},{"content":"","date":"10 October 2024","externalUrl":null,"permalink":"/tags/phone/","section":"Tags","summary":"","title":"Phone","type":"tags"},{"content":"","date":"10 October 2024","externalUrl":null,"permalink":"/tags/rom/","section":"Tags","summary":"","title":"ROM","type":"tags"},{"content":"","date":"24 June 2024","externalUrl":null,"permalink":"/tags/data/","section":"Tags","summary":"","title":"Data","type":"tags"},{"content":" What can you do with the old computer you have in the closet ? I decided to install a Linux system and use it as a homelab. A background computer that can run a few services like serving media on your network, hosting your website, keep a copy of your data, and much more ! How I started my homelab # What do I do with my old hardware ? # A good question right ? I bought a new computer before the old one turned useless, probably like many people do. Nobody had a use for it except me at the time so it slept in a closet for almost 2 years until I decided to revive it. My idea was to remove the old mac os system and replace it with a new linux user friendly distro for the rest of the family. I went for Linux Mint, an Ubuntu based distro with a good reputation among new users. And as an Ubuntu base, I was gonna be able to practice a few skills on server management, and maybe turn the old laptop into a media center. At least that\u0026rsquo;s what I thought at start.\nGet started # As often for me, the journey was as important as the destination. My goal was not only to use the built server in the end, but also to learn how to put it in place and manage it. I found a few Youtube\u0026rsquo;s channels to get ideas and good practices on how to build a first homelab. I can recommend TechnoTim, Wolfgang\u0026rsquo;s Channel and Christian Lempa. The most useful for me has been the one of TechnoTim, accompanied by his documentation website. You will find in here all kinds of tutorials that can help you understand what you need to know about hardware, networking, containers and how to configure them. In fact, after a few days researching on the subject, I found myself discovering a complete community of Homelabers. Everyone has its own use-cases and preferences but you learn a lot just by looking at what others do and publish on the web.\nDocker is a great solution to run services as containers. Know what you want to do # Having a lot of options, and as much advice is great. But the drawback is that you need to focus on what you need and want to do. You will find on the internet that people do not stop at a simple computer to build homelabs sometimes. You can be overwhelmed by information on hardware, proxies, networks, and so on. People are building entire data centers in their garage, at a prohibitive cost obviously. In my case, I just want a few services: storing pictures and files, serving movies to other devices at home, maybe have my own gitlab instance to test things out. In short, I decided I was not gonna build a noisy and power hungry setup just for fun !\nWhat about cost ? # Another aspect to have in mind. You plan to have a computer running 24/7 at your house. What\u0026rsquo;s the power bill behind ? Using an old computer, not made for this use case is probably a bad idea. You can find low power consumptions PCs, or mini PCs maybe, but I find them to lack in power and storage. It\u0026rsquo;s probably why people on the internet build entire networks for their homelab. They couple storage devices, NAS, networking devices like firewalls and VMs using hypervisors to run the containers. Well, for the moment, I only have the old laptop, so I power it on just when I need it. It will do for the time being but I plan to find a good setup, with enough power and storage to support my use case (which is not too much hungry I guess) and with a low power consumption. The perfect setup do not exists probably, but I\u0026rsquo;ll get as close as possible. But as I said, I don\u0026rsquo;t want to build a data center at home, I\u0026rsquo;ll stick with only one machine.\nMy current setup # The old laptop got a second life # As I said, I installed Linux Mint on my old Macbook Pro from 2013. It was declining more and more and needed to have a cleanup. I know Linux Mint is not a perfect server distro but it\u0026rsquo;s not the main use case of a laptop after all. Mint is easy to use and because of it\u0026rsquo;s proximity to Ubuntu (on the system side of things) it\u0026rsquo;s a close enough choice to get started. It has 8Go RAM and a 250Go SSD storage drive. Both felt kind of small, as you\u0026rsquo;ll see bellow. But I have nothing to say about the distro itself. I found all application I needed and maintenance is much easier than on my Archlinux desktop. The Cinnamon desktop environment is good enough for the whole family usage, even if when I use it, I miss my KDE setup a lot ! But in the end, everything feels as if it was just a brand new laptop. Which, for a 10 year old device is really good.\nNextcloud, the open-source, on-premises content collaboration platform Core services I wanted to have # The whole homelab experiment started for one particular service, and it is Nextcloud. Basically, it offers the same kind of services as the Google suite: calendar, file storage, parallel editing, pictures management, etc\u0026hellip; but it\u0026rsquo;s free and open source. I quickly faced challenges to put the necessary containers in place. I\u0026rsquo;m not too familiar with Docker and just have basic understanding of how to create containers and deploy them. So I decided to look at something simpler and also at a Docker utility called Portainer to help me manage the containers. After spinning up Portainer, I started Looking at Jellyfin, a FOSS media solution. It was much easier to deal with and it felt good to have my first service running.\nHomepage Service example showing various services running. Of course, all of it was still running on local network, which is great but why not share the movies library with the rest of the family ? And the really technical part started. I\u0026rsquo;ll give more details about it bellow but just have in mind that networking, IP addresses, DNS records, proxy servers are the basa of it all. You need to have at least a basic understanding of networking to have your homelab running safely from home and access services remotely.\nAfter Jellyfin, I came back to Nextcloud and had it working as well. It\u0026rsquo;s a wonderful solution that I use now to synchronize the pictures from family smartphones. It\u0026rsquo;s easy to set up with their dedicated app on Android. I\u0026rsquo;d very much like to store a complete copy of the photos library but the laptop lacks storage. It will have to wait\u0026hellip; I still have to explore the many possibilities with Nextcloud. It has a huge library of apps and plugins to help you do whatever you would want to do. I just tested a with things about synchronizing contacts and calendars between Android and my desktop Thunderbird client.\nThe also deployed my own Gitlab instance. I did not have much experience with the use of their runners and pipelines and wanted to test things out. Turns out that you can already build pipelines and use free runners directly with your free account on Gitlab.com, at least when you don\u0026rsquo;t use too much compute time. But it was still a great experience to try deploying it and have access to the backend settings of such a tool.\nThe technical part # Up until this point, everything was going smoothly. The only difficulty I faced was opening the ports of my router, set up the reverse proxy using Traefik and SSL certificates from Cloudflare. So the networking part was a struggle. I had no issues regarding the server load until I added the Gitlab container. Suddenly, the old laptop\u0026rsquo;s 8Go of RAM where looking too small. How did I notice ? First by the fan noise\u0026hellip; And then I added a monitoring stack of containers to keep an eye on the server load from a distance. For the moment I use a combination of Prometheus, Loki and Grafana. When combined, you are able to get a lot of monitoring data from your machine, and nice dashboards to analyze what\u0026rsquo;s happening.\nAn example of Grafana dashboard Node Exporter. Future plans # Dedicated PC build # I mentioned it earlier but I reached the limits of my laptop with just a few services running on a dozen containers. It\u0026rsquo;s no surprise in reality because it\u0026rsquo;s old hardware, not ment for it, and running on a system also not optimized for this use case. So my next goal is to build a small case PC with lots of storage and RAM to have at home running 24/7. When I find the perfect setup, I\u0026rsquo;ll probably write a new post to describe it !\nMore power, more services ? # Do I need more services, no. Do I want to explore and test new things, probably yes. I don\u0026rsquo;t really know what I want to try next. I saw a lot of discussions about the enrichment of media libraries using the Servarr stack, web server using Nginx to host my own website maybe. Who knows !\nWhy should you care about owning your data ? # Privacy # Yes, why should you even consider having a second computer at home, right ? And why bother with services, programs and maintenance whereas for a few coins per month, everything can be stored in the cloud, by a giant tech company that saves all your data for you\u0026hellip; You see the point coming, even if it\u0026rsquo;s not the money (when you have thousands of pictures, storage price might become a problem), the problem is that you give up your privacy to these platforms. Not all of them are collecting data of course, I imagine a company like Proton offers their storage and services with privacy features for example but the best way to keep you things yours is just to keep it with you.\nHave better control on what you own # Do you know how many online accounts you have, where are all the passwords ? Where did you store your pictures over the years, Apple\u0026rsquo;s ICloud or Google Photos maybe ? Some may be on social media now, and it\u0026rsquo;s the only copy you have left. Do you have also a music library ? And what about administrative files and folders you created over the years ? My point is, keeping your data at home will probably help you keep track of what you have and keep it safe.\nBackups # I did not talk too much about backup. Obviously you have to make them, and the homelab can host a copy of your data. But as always, don\u0026rsquo;t put everything in the same place. It is said that a good backup strategy is to have 3 copies of your data, in at least 2 places, with 1 which is not your home. The famous 3-2-1 rule to save all your data.\n","date":"24 June 2024","externalUrl":null,"permalink":"/posts/own_your_data/","section":"Posts","summary":"What can you do with the old computer you have in the closet ? I decided to install a Linux system and use it as a homelab. A background computer that can run a few services like serving media on your network, hosting your website, keep a copy of your data, and much more !","title":"Own your Data","type":"posts"},{"content":"","date":"29 May 2024","externalUrl":null,"permalink":"/tags/foss/","section":"Tags","summary":"","title":"FOSS","type":"tags"},{"content":"","date":"29 May 2024","externalUrl":null,"permalink":"/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":" I have used computers all my life, being for work or pleasure like many of my generation. I used the 3 major OS on the market and I have to say that the best one for me is Linux and here is why I switched away from the others. A bit of History # Early days with Windows # I grew up with the computer of my father. At the time obviously, the main operating system out there was Windows by far. I learned to use a computer on Windows 95 and as I got older, used Windows systems until I think Windows Vista for personal use. I stopped using Windows on my main machine early 2013. Was I disappointed with the OS? Probably. But the main reason I decided to leave Windows was the hardware. As a student, I bought two laptops (cheap ones) and the hardware failed on me badly. The choices I made were probably not the best but I didn\u0026rsquo;t have the money to buy a really good computer with great battery life, computing and gaming capabilities, etc\u0026hellip;\nLinux Dual Boot # I remember giving a try to linux using Dual Boot. A few friends of mine were just toying with the command line on Ubuntu. So I practiced a little and demystified the terminal utility as one can say. But it never got past a few programs and use cases, it was just for fun.\nWhen Apple took over # Early 2013 then, I decided to take advantage of the discount my school granted to buy one of newly designed MacBook Pro. The promise for me was a better hardware and the macOS desktop features. I was impressed by the os capabilities and design as it was way better (in my humble opinion) than the Windows one. For the hardware, I decided to pay a little extra money to buy the latest SSD devices and have hardware that will last as long as possible. My idea was, that if you buy hardware that is already a few years old, it will be outdated quicker. I think it went well, because we are in 2024 and this MacBook Pro is still working! I did everything with it during almost 10 years. All the usual web browsing, some gaming (obviously not the latest games but still), I even used it during my PhD as my main machine to perform computations, and write my manuscript. In the end, apart from a small issue with the speakers, it was perfectly working in 2022 except Apple didn\u0026rsquo;t ship updates for it anymore\u0026hellip;\nI felt a change was needed ! # Apple\u0026rsquo;s update policy # The OS update issue didn\u0026rsquo;t arise in late 2022, it was much earlier. When trying to update, the system would have this warning saying that the hardware is not supported anymore (or at least badly) or even that the OS itself will be taking too much storage space for it to be installed on my machine. I was honestly angry at Apple for that. The computer is perfectly fine but as time goes by the system would be more and more outdated and unusable. At first, I didn\u0026rsquo;t care but at some point some of the software were not even working. For example, Safari would refuse to display some websites because it\u0026rsquo;s version was too old. Of course, You can always change the software you use to have ones that are actually working, but it did not felt right to me. I was just pushed away.\nWindows is still a nogo # Because I also wanted a new PC to install some recent games, why not come back to Windows? That one is easy, I have the newest Windows 11 version at work, and it\u0026rsquo;s a nightmare. No way I use this if I have a choice.\nWhat about those new M1 iMacs ? # I took a look at the new M1 iMacs that were just released at the time. The looked like powerful machines, clearly easier to integrate in your home interior than a clunky tower and screen. Unfortunately, they will have, in time, the anticipated end of life decided in an office far away by the giant company making them. I was seriously considering it but I also wanted to see what Linux had to offer, 10 years after our last encounter. I found out that it was as powerful as ever, could even run games now thanks to Valve\u0026rsquo;s Proton contributions and that there was basically no use case left out now. A friend of mine was even installing Linux Mint on his PC and all that was enough to finally attract me.\nLinux it is then, but how ? # Searching for advice # A good part of the decision was made because of the content of good quality I found about Linux, distributions, open source software, etc\u0026hellip; A few YouTube content creators caught my attention rapidly, namely Nick from The Linux Experiment and Jay from Learn Linux TV. Both of them, I still watch two years later. You can find on these channels everything you need to know about the new system you are installing. How to install it, what to expect, what will work and what may not work out of the box, you name it. They have a variety of subject that they cover and update regularly so it\u0026rsquo;s in my opinion a pretty good start.\nIcon set made by Walruz Distributions # Here is the famous question: which distribution will you choose for your system? When choosing a distribution, from what I understood then, you gain access to a pool of applications and a given Desktop Environment. I know it\u0026rsquo;s a simplified view of it but when you\u0026rsquo;re a beginner, that is what it looks like. The number of distributions is overwhelming, but you can still see through their lineage. Roughly, you have Debian children, with after that their Ubuntu children (which are many) and you have also Arch children. The main difference being the way updates are handled. Arch children will have a short cycle, they are called rolling release, whereas Debian like have bigger chunks of upgrades. You then have to weight the fact that you want up-to-date software and dealing with regular updates that can be disrupting your system. In short: stability VS availability.\nSecond main topic when choosing a distribution is the Desktop Environment it is shipping with. The two main ones are Gnome and KDE. Again, you have pros and cons for both of them, but it seemed clear to me that the way they were developed is quite different. Gnome has its own set of apps and a clearly defined aspect for the desktop. KDE on the other side has also it\u0026rsquo;s apps but regarding the aspect, you have a lot of customizations available. I read also that it is said to be less stable than Gnome but being able to customize anything on your desktop is attracting.\nOne thing to keep also in mind is that depending on the distribution chosen, some software may be difficult to access. It is less and less true with the rise of the Flatpak format, but it can still be an issue. If you want to have a look at the distros available, everything is on Distrowatch.\nMy first choice and experiences # I finally bought a computer that I configured myself on Top Achat. It\u0026rsquo;s a French shop and I mention them here because I had a few discussions with their customer support, and they were perfect. For the distribution, I remembered friends talking about Archlinux as if it was the only distribution worth it in this world but I thought it was too complicated for me at start. I wanted a rolling release but I needed to learn how things work first. And so I came to Manjaro. It\u0026rsquo;s an Arch derivative, with 3 options for the Desktop Environment. I chose KDE for its customizations capabilities and I never regretted it! I still use KDE now and I find it to be very stable for my day-to-day use. As an Arch derivative, Manjaro has a short release cycle, but keeps back a few updates to be able to test for stability before making it available to the public. I thought it was a good compromise.\nLooking back at this choice, I think maybe EndeavourOS would be a better starting point, it has the same Arch base but has a better reputation as a community than Manjaro.\nTwo years later, what has changed. # I gained experience and confidence # I used Manjaro for a complete year. I never had any major issue with the system, except once when after an update, I got a black screen. I managed to reinstall the Nvidia drivers that I needed using only the command line and fixed the problem myself just by looking for the solution on the internet. It felt so good to be able to do that, even if I thought for a minute that I would have to start over and reinstall everything! I installed Steam pretty easily and could play as much games as I want. Valve is making it easy for Linux users, you just need to check if the game you want to buy is well-supported by proton on the Proton DB website, and you\u0026rsquo;re good to go in my experience.\nI could do everything I needed with my Manjaro system, all the usual browsing, administrative tasks (I don\u0026rsquo;t have a printer, so I can\u0026rsquo;t tell if that would work, but signing PDFs was easy), gaming, coding, etc\u0026hellip;I was enjoying the KDE Plasma desktop, tweaking it to my liking and spending probably too much time customizing things using the command line and config files.\nI loved learning how my system is working and I grew familiar with the command line utilities during this first year. And then I felt ready for the next step: installing Archlinux.\nChanging the distro # Before I continue, I must say that I get the whole \u0026ldquo;I use Arch btw\u0026rdquo; thing. Because the system you\u0026rsquo;re trying to install is kept at bare minimum, without any graphical interface to work with at start, it feels like a challenge. Keeping it well maintained can also be if you\u0026rsquo;re not careful. But nowadays, with the immense quality of the Archwiki, the installation is accessible and maintaining the system is not that hard.\nThe official Archlinux logo from archlinux.org Nevertheless, it is still a challenge when you install it for the first time and you don\u0026rsquo;t know all about what is going on behind the scene. So I practiced the installation process on VMs, and failed a few times. Forgot to install bootloader, can\u0026rsquo;t boot. Forgot the wireless network interface, no cable, no internet at reboot. It has been difficult but I finally managed to install Arch on two different VMs and then went for it for real. I did a backup of everything (you should too, always) and it went all smoothly! I\u0026rsquo;m writing these lines from this same Arch install, still working after more than a year.\nWhat I want to say is that it is rewarding. You have control over everything on your computer, you have the choice for every little piece of software you want to install. Nothing has been chosen for you beforehand, or almost nothing, just the vitals.\nWhat\u0026rsquo;s next ? # I am at home with Arch on my main machine now. Everything is in place and I have no trouble in my day to day use or even for maintenance. I would still like to try other distros, and for that I erased macOS from my old laptop. It was not working so well anymore anyway. I first installed Linux Mint. It is an easy to use distro for the rest of the family that may use it. It\u0026rsquo;s also definitely easier to maintain and won\u0026rsquo;t suck up as much time as Arch. Maybe I\u0026rsquo;ll switch again on this machine. I heard a great many things about Fedora and may give it a try. On the other hand, an Ubuntu based distro like Mint can be a way to get familiar with this very big family of distributions. After all, it\u0026rsquo;s one of the main system running the world\u0026rsquo;s servers.\n","date":"29 May 2024","externalUrl":null,"permalink":"/posts/my_switch_to_linux/","section":"Posts","summary":"I have used computers all my life, being for work or pleasure like many of my generation. I used the 3 major OS on the market and I have to say that the best one for me is Linux and here is why I switched away from the others.","title":"My Linux Journey","type":"posts"},{"content":"","date":"29 May 2024","externalUrl":null,"permalink":"/tags/os/","section":"Tags","summary":"","title":"OS","type":"tags"},{"content":"","date":"22 April 2024","externalUrl":null,"permalink":"/tags/blog/","section":"Tags","summary":"","title":"Blog","type":"tags"},{"content":" I\u0026rsquo;m not a web developer, just an enthusiast with some development related skills. And using SSGs is just a really fast, simple and enjoyable way to publish a website with content. My Experience with personal websites and HTML # Simple HTML Page # My take on how to how a website has evolved a lot during the past years. I started with simple html pages with copy-pasted css files. It was almost 10 years ago now. I needed to create a simple webpage to be used as my academic profile. It was just a few html files, nothing fancy.\nBootstrap themes # Over the years, I improved a lot, especially on the PHP, mysql side for projects related to Les Voyageurs du Peloton. I used WordPress for a while but realized quickly that it didn\u0026rsquo;t suit my needs (at least at the time). So in 2020, I decided to dive into bootstrap and made my own PHP website. As I said, I\u0026rsquo;m not a web developer and I imagine what I did, in all humility, is probably not made to last\u0026hellip; But it has the great feature of still being running today. In the meantime, having access to this new piece of technology made me realize that my old website needed a revamp. I searched for a dedicated boostrap template and updated it. Again, a simple copy-paste from (this time for sure open source) template and I had a new version running. My customization skills were still very poor, the css part is clearly not my strong suit and I re-used the template almost entirely.\nAnd then, I Discovered SSG existed # What are SSGs and how many are there ? # Static Site Generators from Gitlab Pages And now, we are in 2024 and technology don\u0026rsquo;t stop evolving. I heard about Static Sites Generators being the go-to in terms of blogs. Anything that didn\u0026rsquo;t need a database in fact. It seemed to me that there were a lot of options, all written in their own language. From what I understood, their goal is pretty much the same, and it\u0026rsquo;s to ease the development of content related websites. It is particularly made for blogs or documentation websites. They aim at serving the fastest way possible each page. And about these pages: html is gone ! You write in markdown. All is taken care of for you by the server as some kind of all in one solution for the development. So why not try it ? It could be a good way to learn a new framework and again, my old website deserved a paint job.\nHow I chose the one used for this website # As always when wanting to try something new, I searched on the internet what was the most popular framework. The idea for me is to try and learn one of them, not all. And in doing so, I try to find one that is representative or at least that I imagine will still be there in a few years. I narrowed it down to three pretty quickly:\nHugo Jekyll Astro Astro looked like the newcomer on the scene with huge performances and a lot of promises. It looked also not as used as the other two (in early 2024) and I was afraid of its apparent complexity. Regarding Jekyll, the solution developer by GitHub, I found a lot of suitable templates, but I must admit, the ones I found on the Hugo side were better. I also wanted to avoid going down the Github route. Their solution is completely fine, it\u0026rsquo;s just a matter of preferences.\nBlowfish Theme for Hugo. Now, with Hugo templates were legion. It\u0026rsquo;s the most used framework at the time I\u0026rsquo;m writing this. It\u0026rsquo;s written in Go, it\u0026rsquo;s fast and the command line utility looked easy enough to use for me. After spending a few hours searching for a theme or template on their website, I settled down on the magnificent Blowfish ! It\u0026rsquo;s full of features and was quite easy to use as you\u0026rsquo;ll see.\nCreating the site and Deploying it # Follow the theme guidelines # Ok, I say it was easy and I lied, sort of. My first few attempts were failure, but not complete ones. I managed to create websites, import templates as modules, or as git submodules and visualize my site locally. The difficult part came after, when trying to deploy as gitlab pages. I\u0026rsquo;ll explain why later. For now, I would say that the documentation for Blowfish is excellent and I had no trouble following it to create my first site. You will find in here everything that you need to create content quickly. I had my first version running in just a few hours, even without knowing how hugo worked at start. For this template, you have layout options for the landing page and for the content pages. A lot of features are taken care of without you knowing. For example, you can see the word count and reading time at the start of each post and for this I did nothing except uncommenting a few lines in a config file. In fact, most of the templates work like this behind the scenes. Just a few config files for you, and a lot of power available with it.\nAnother cool feature I used is shortcodes. They are basically javascript functions to allow a few dynamic behaviors in your site. There are quite a few available in Blowfish. I used the timeline one for the resume sections, and the typeit one is nice looking !\nUse Gitlab Pages # Another cool thing about these SSGs is that the two giants GitHub and Gitlab are able to host your website for free. As static sites managed in repositories, they offer a pages solution to display your html content. As already mentioned, I prefer to use Gitlab nowadays and their Pages documentation was quite helpful along with the one given on directly by Hugo. The idea is basically to use the CICD capabilities of Gitlab (by creating a job pipeline in a yaml file) to publish the website on a predefined domain. This domain is by default linked to your Gitlab username but you can modify it. I chose to leave it as is and to also deploy the site with my previous web hosting service.\ngraph LR; A[Write your site]--\u003eB[Commit \u0026 Push] B--\u003eC[Pages CI Job Running]; C--\u003eD[Pages Published] That was the part that gave me some trouble. I did not manage to deploy a Hugo site built with modules (theme modules for example). The only way I succeeded was using git submodules for the template. It\u0026rsquo;s not that limiting but still, it was frustrating to be set back.\nOr to any web hosting service # Nothing easier than publish your hugo site to any web hosting service. For example, mine give me access through ftp to drop my html file into their server. In this case, the only thing you have to do is to copy the content of the public folder, created when you build your Hugo site. It is the folder containing all the markup html files for your website. In just a few minutes, I had two domains running my website.\nWrap Up # Frankly, I love how this SSG work right now. I\u0026rsquo;m able to publish this page just by typing text basically, not using any html and that\u0026rsquo;s a relief. In fact, it looked so simple, it made me start a blog. We\u0026rsquo;ll see if I keep up and still publish in a few months, but I felt there was no better time than with this site setup.\n","date":"22 April 2024","externalUrl":null,"permalink":"/posts/how_i_discovered_ssg/","section":"Posts","summary":"I’m not a web developer, just an enthusiast with some development related skills. And using SSGs is just a really fast, simple and enjoyable way to publish a website with content.","title":"How I discovered Static Site Generators","type":"posts"},{"content":"","date":"22 April 2024","externalUrl":null,"permalink":"/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":"","date":"22 April 2024","externalUrl":null,"permalink":"/tags/ssg/","section":"Tags","summary":"","title":"SSG","type":"tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" Senior Data Scientist January 2024 - Present Capgemini Engineering - R\u0026amp;D, Toulouse Expert consulting on Palantir Foundry platform. Python pyspark pandas scikit-learn HuggingFacetransformers git \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e Palantir Foundry End to End projects: data connection, transforms, enrichments, machine learning, dashboards and applications. LLM embeddings integration into classification and clustering pipelines. Models deployment to production environments. Agile Scrum and DevOps/MLOps practices. For one year as an expert consultant on Foundry, I joined the Airbus Customer Line services data analytics team. Their goal is to provide methods and tools to manage and analyse data related to non-conformity detected during the last phases of manufacturing and testing or even customer satisfaction surveys. During this year I was involved in: Preprocess data with Palantir's pyspark modules Design and build KPIs and Dashboards to support business teams. Handle free text data using NLP techniques and LLM embeddings. Deploy ML classification models to production into Palantir's Foundry platform. Automate user actions and workflows using Foundry's automation tools. Data \u0026amp; AI Engineer January 2023 - December 2023 Capgemini Engineering - R\u0026amp;D, Toulouse Technical leader of an international development team on Palantir Foundry Platform. Python pyspark pandas git \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e Palantir Foundry Creation of ingestion pipelines in Palantir Foundry platform. Responsible for the respect of governance and cybersecurity rules. Technical support and coaching on pyspark developments. Agile Scrum and DevOps practices. Acting as a Data Engineer subcontractor for Stellantis, I was tasked to lead a team of 5 to 10 people responsible for the addition of new data into Palantir Foundry from the enterprise other systems. The context was international, from the United States to India on client and subcontractor teams. Below are key points achieved in this role: Handling connection between Palantir Foundry and external systems. Ensuring security, availability, access rules to newly added data. Preprocessing big data using Palantir's internal pyspark coding modules. Supervising the team's work according to client priorities. Experienced Solution Designer November 2021 - December 2022 Capgemini Engineering - R\u0026amp;D, Toulouse Development of an open source platform for multidisciplinary analysis and optimisation. Python pandas git Gitlab Jenkins DevOps Integrated Assessment Modelling in python. Global climate, economics and energy models. Model Based System Engineering, trades between Airbus future aircraft design. Optimisation algorithms and numerical analysis. Agile Scrum and DevOps practices. Part of Airbus Engineering, the goal was to simulate energy, economy and environment future evolution to help making decision on aircraft design. The platform was developed in python relying on Gemseo optimisation library. I was part of the modelling and optimisation team of the application deployed in production. The same techniques were also used to optimise aircraft design by modelling engine power, weight, fuel consumption, lift and thrust. Data Scientist February 2018 - October 2021 Alten SO, Toulouse Team Leader Digital Transformation. Python pandas scikit-learn git Palantir Foundry nltk Github QlikSense Business needs understanding and qualification. Data cleaning, enrichment, statistical analysis. Machine learning algorithms in python/pyspark. Natural Language Processing (NLP). Agile Scrum project management, support to recruitment and marketing process. During 4 years, I participated in multiple projects as a data science expert consultant for Airbus in Toulouse. Below are a few examples of realisations during this period: Deployment of an analytics dashboard for Airbus Quality Teams day to day reports in python and QlikSense. Outliers detection and severity and costs estimation of Airbus maintenance requests from airlines. Development of an Airbus internal NLP python/pyspark library built as a wrapper of scikit-learn, nltk and gensim and deployed in internal repositories and Palantir Foundry. On several of these projects, I was acting a team leader and Agile scrum master for a team of developers of about 6 to 10 people assuming client facing roles. Doctorate in Mathematics February 2014 - March 2017 Institut Camille Jordan - Université Lyon 1 Periodic waves in Hamiltonian systems: stability, modulations and dispersive shocks. Advisors: S. Benzoni-Gavage and L.M. Rodrigues. Mathematical and numerical analysis of stability properties of periodic waves solutions of Hamiltonian systems. Analysis of partial differential equations. Development of a complex numerical method in Matlab, scientific calculation, numerical analysis, schemes for PDEs. Communication at scientific colloquium and training programs (CEMRACS 2015, SEME). Teacher September 2014 - June 2016 INSA Lyon Classes, exercises and practical work on numerical analysis for engineering students with Matlab. Research Engineer March 2013 - January 2014 EADS Innovation Works - CERFACS, Toulouse Mathematical analysis and development of numerical methods for the computation of turbo-reactors acoustic fields in a flow. Acoustic Propagation in a Vortical Homentropic Flow. Study of acoustic propagation models and their numerical simulation. Development of a finite element method code with Fortran. Engineering Degree September 2010 - June 2013 École Centrale Lyon General Engineering training with R\u0026D Specialisation Majors: mathematics and risks management, partial differential equations, acoustics. Master degree MAIM September 2012 - June 2013 École Normale Supérieure de Lyon Mathematics and Applications, Advanced Mathematics and Mathematical Engineering. Majors: partial differential equations, kinetic theory and shape optimisation. Exchange program ERASMUS February 2012 - June 2012 UPC Barcelona Tech. Classes in two schools of Universidad Politécnica de Cataluña BarcelonaTech. FME : Faculdad de Matemáticas y Estadistica. ETSEIB : Escuela Técnica Superior de Ingeniería de Barcelona. ","externalUrl":null,"permalink":"/experience/","section":"Colin Mietka","summary":"","title":"Experience","type":"page"},{"content":"I am a proud father of two little girls and spend most of my free time with them. I enjoy a well-balanced life with work, family and hobbies.\nDuring the warm season, I enjoy hiking and climbing. I regularly practice running, swimming and cycling, although never at the same time\u0026hellip; I am also part of my local Handball team where I play with friends and family.\nI am particularly found of discovering new cultures and landscapes. I\u0026rsquo;ve been to a many foreign countries: Ireland, Spain, China, Vietnam, Mongolia, Mauritania, Tunisia, Poland, and I seriously plan on expanding the list, especially with my children.\nWhen forced indoors, I follow a number of sci-fi and fantasy genre movies and shows, play chess or video games and spend too much time reading articles or watching videos about FOSS projects, new AI and Machine Learning advancements, or technology in general.\n","externalUrl":null,"permalink":"/interests/","section":"Colin Mietka","summary":"","title":"Interests","type":"page"},{"content":" Modulated equations of Hamiltonian PDEs and dispersive shocks.\nS. Benzoni-Gavage, C. Mietka, and L.M. Rodrigues.\nNonlinearity, Vol. 34 (2021), no. 1, p. 578-641. Stability of periodic waves in Hamiltonian PDEs of either long wave-length or small amplitude.\nS. Benzoni-Gavage, C. Mietka, and L.M. Rodrigues.\nIndiana University Mathematics Journal, Vol. 69 (2020), no. 2, p. 545-619.\nOndes périodiques dans des systèmes d’ÉDP hamiltoniens. Stabilité, modulations et chocs dispersifs.\nC. Mietka - 2017. Thesis Manuscript\nOn the well-posedness of a quasi-linear Korteweg-de Vries equation.\nC. Mietka.\nAnnales Mathématiques Blaise Pascal, Tome 24 (2017) no. 1, pp. 83-114.\nCo-periodic stability of periodic waves in some Hamiltonian PDEs.\nS. Benzoni-Gavage, C. Mietka, L.M. Rodrigues.\nNonlinearity, Vol. 29 (2016), no. 11, p. 3241-3308.\nStudy of a depressurisation process at low Mach number in a nuclear reactor core.\nA. Bondesan, S. Dellacherie, H. Hivert, J. Jung, V. Lleras, C. Mietka and Y. Penel\nESAIM: Proceedings and Surveys, EDP Sciences, 2016, CEMRACS 2015: Coupling multi-physics models involving fluids, 55, pp.41-60.\nAcoustic Propagation in a Vortical Homentropic Flow.\nJ-F. Mercier, C. Mietka, F. Millot, V. Pagneux - 2014.\n","externalUrl":null,"permalink":"/publications/","section":"Colin Mietka","summary":"","title":"Publications","type":"page"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":" Programming Languages \u0026amp; Tools Python Pyspark Git Github Gitlab \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e Palantir Foundry Docker \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\r\u003c!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"\u003e\rDevOps Every project I\u0026rsquo;ve been part of since 2018 involved python. And while working on Palantir\u0026rsquo;s Foundry platform for a few years, I also had the opportunity to develop in pyspark. I gradually became an expert in many of the modules the platform offers. I often work with git as a version control system, and I am also quite familiar with DevOps set of practices. My experience with docker and Gitlab\u0026rsquo;s CI/CD has been mostly acquired from personal projects but has proven handy at work sometimes.\nData Science, Machine Learning and AI pandas scikit-learn \u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e pytorch HuggingFacetransformers \u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e image/svg+xml dash/plotly \u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e mlflow optuna Ollama OpenWebUIOpenWebUI n8nn8n LangChainLangchain This is my main set of development skills. I am expert with python based data science libraries like pandas, scikit-learn, pytorch, Huggingface\u0026rsquo;s transformers, nltk, spacy, etc\u0026hellip; I also have a some knowledge about the experiment tracker mlflow and hyperparameter tuning library optuna. As a data-driven business consultant, I also practiced a few data visualisation libraries like seaborn, matplotlib and plotly/dash. I also run an MLFlow instance for machine learning experiments and self-hosted LLMs assistants using Ollama and OpenWebUI.\nWeb Development HTML5 CSS3 Javascript PHP Boostrap WordPress \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e Hugo From time to time, I put a lot of my free time learning some Web Development skills. They were initially acquired for a community project, but I also discovered new technologies and skills. Most of my initial website built from scratch with Bootstrap and PHP are now archived, and I am now working with Static Site Generators like Hugo or CMS like WordPress.\nSystem Administration Linux Docker \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\rNextcloud \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e Grafana Ollama OpenWebUIOpenWebUI n8nn8n Another area of interest is self-hosting. I am a faithful Linux and free and open source software (FOSS) advocate. I value privacy and security for my personal life and data, and I am willing to replace most invasive online services with self-hosted solutions whenever possible. It got me into Linux and Docker at start and lead me to discover and deploy numerous services. The website you\u0026rsquo;re reading now is hosted on my own home server. On the AI side, I also run an MLFlow instance for machine learning experiments coupled to a miniIO model registry. I self-host LLMs assistants using Ollama and OpenWebUI.\nLanguages French English Spanish Chinese French is my mother tongue, and I\u0026rsquo;m perfectly able to work in English (TOEFL: 637/670). In fact, I already have, several times. I learned a lot of Spanish at school and went a semester abroad. I also know a little Chinese, just a little\u0026hellip;\n","externalUrl":null,"permalink":"/skills/","section":"Colin Mietka","summary":"","title":"Skills","type":"page"}]