<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects on Stephan Michard</title><link>/projects/</link><description>Recent content in Projects on Stephan Michard</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><lastBuildDate>Wed, 02 Nov 2022 20:34:39 +0000</lastBuildDate><atom:link href="/projects/" rel="self" type="application/rss+xml"/><item><title>Own Your AI Stack</title><link>/projects/own_your_ai_stack/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/projects/own_your_ai_stack/</guid><description>&lt;p&gt;Turns out &amp;ldquo;a collection of random thoughts&amp;rdquo; is not the most compelling way to onboard someone into AI and OpenShift. Who knew. This book pulls together the most useful posts from this blog, reorganizes them into something that actually flows. Same content, less chaos.&lt;br&gt;
If you want to get the latest edition, fill out the form below.&lt;/p&gt;
&lt;p&gt;&lt;img
src="/images/posts/books/own_your_ai_stack_hu_a38bea91b9462c4e.webp"
srcset="/images/posts/books/own_your_ai_stack_hu_2ee6c6c95d45e29b.webp 480w, /images/posts/books/own_your_ai_stack_hu_404d988b2548ebdf.webp 800w, /images/posts/books/own_your_ai_stack_hu_a38bea91b9462c4e.webp 1055w"
sizes="(max-width: 42rem) 100vw, 42rem"
width="1055"
height="1491"
alt="Own Your AI Stack"
loading="lazy"
decoding="async"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Abstract:&lt;/strong&gt;&lt;br&gt;
A practical, hands-on guide to building and operating your own AI stack, from lightweight homelab setups to production-ready platforms. This book includes specific code examples and walks through real architectures, covering local AI setups, deploying cloud-based platforms, exposing AI inference endpoints, and working with AI agents.&lt;/p&gt;
&lt;p&gt;If you want to move beyond using AI APIs and start owning the full stack, infrastructure, models, and workflows, this guide shows you how to get there step by step.&lt;/p&gt;
&lt;p&gt;Built from real-world experiments and field experience, it is designed for engineers and architects who prefer learning by doing. It serves as a practitioner’s companion for hands-on exploration. The examples are intended for learning and proof-of-concept work and are not production-ready; proper consideration of security, safety, and resiliency is essential before real-world deployment.&lt;/p&gt;</description></item><item><title>graphR</title><link>/projects/graphr/</link><pubDate>Wed, 02 Nov 2022 20:34:39 +0000</pubDate><guid>/projects/graphr/</guid><description>&lt;p&gt;&lt;strong&gt;graphR&lt;/strong&gt; grew out of a recurring problem when sizing hyper-converged infrastructure back in the days when I was working at EMC in 2015. RVTools produces a large, detailed Excel export of a VMware environment, covering virtual machines, ESX hosts, and the network configuration. Reading that by hand is slow and easy to get wrong. graphR takes the export, runs the statistical analysis, and assembles the results into a single PDF report with the diagrams you actually need to reason about the environment.&lt;/p&gt;
&lt;p&gt;The tool is written in R and ships as a Docker container, so it behaves the same on a laptop or a server. There is also a hosted version at graphr.de for a quick look without installing anything. Uploaded files live in a non-persistent container and are cleared every 15 minutes, so nothing is kept.&lt;/p&gt;
&lt;p&gt;The accompanying post walks through how graphR works, how to run the container, and how to adapt the plots to your own reporting layout.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Blog Post - &lt;a href="/2023/graphr.-visualizing-rv-tool-exports/"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Web App - &lt;a href="https://www.graphr.de/" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Repository - &lt;a href="https://github.com/smichard/graphR" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Conventional Changelog</title><link>/projects/conventional_changelog/</link><pubDate>Wed, 02 Nov 2022 20:34:39 +0000</pubDate><guid>/projects/conventional_changelog/</guid><description>&lt;p&gt;Keeping a changelog current is the kind of task that quietly slips once a project gets busy. &lt;strong&gt;Conventional Changelog&lt;/strong&gt; automates it. It reads a repository&amp;rsquo;s commit history and produces a structured CHANGELOG file, following the Conventional Commits and Semantic Versioning conventions together with the Keep a Changelog format. I added a few commit categories of my own, such as &lt;code&gt;deploy:&lt;/code&gt;, &lt;code&gt;gitops:&lt;/code&gt;, and &lt;code&gt;demo:&lt;/code&gt;, to cover changes that the standard set does not describe well.&lt;/p&gt;
&lt;p&gt;The tool fits into whatever workflow is already in place. Run the script directly on your laptop, run it inside a Podman or Docker container, wire it in as a GitHub Action so the changelog updates on every push to &lt;code&gt;main&lt;/code&gt;, or add it as a task in a Tekton pipeline on Kubernetes or OpenShift.&lt;/p&gt;
&lt;p&gt;A dedicated blog post explains the reasoning behind each convention and provides examples for every execution method. It was also published on opensourcerers.org.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Blog Post - &lt;a href="/2024/enhancing-code-project-documentation-through-automated-changelogs/"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Opensourcerers Article - &lt;a href="https://www.opensourcerers.org/2024/03/25/enhancing-code-project-documentation-through-automated-changelogs/" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Repository - &lt;a href="https://github.com/smichard/conventional_changelog" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Action on the Marketplace - &lt;a href="https://github.com/marketplace/actions/generate-changelog-based-on-conventional-commits" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cloud Bites Tutorial</title><link>/projects/cloud_bites_tutorial/</link><pubDate>Wed, 02 Nov 2022 20:34:39 +0000</pubDate><guid>/projects/cloud_bites_tutorial/</guid><description>&lt;p&gt;&lt;strong&gt;Cloud Bites&lt;/strong&gt; is a hands-on tutorial I wrote in 2022, while working at Dell Technologies, to teach the basics of deploying an application in a cloud-native environment. The goal was to educate a community of solutions architects across EMEA about cloud-native technologies, particularly Kubernetes. The chapters build on one another, starting with a container running on your local machine and ending with Kubernetes clusters on Google Cloud. A small website serves as the sample application throughout, and its source code is included in the repository.&lt;/p&gt;
&lt;p&gt;Along the way it sets up a reproducible development environment with Vagrant and VirtualBox, builds and runs Docker containers, stands up a local cluster with K3D, works through the everyday kubectl operations for pods and deployments, provisions a cluster on Google Cloud three different ways (the CLI, the Cloud Console, and Terraform), and inspects the running workloads with VMware Octant. It makes no claim to completeness. It is meant as a fast, practical on-ramp for people who learn by doing.&lt;/p&gt;
&lt;p&gt;I led several hands-on workshops and curated an online course based on this tutorial. The accompanying blog post provides a chapter-by-chapter walkthrough, and the presentation slides are available below.&lt;/p&gt;
&lt;div class="wrapper_download_left"&gt;
&lt;a class="download" href="/documents/Cloud_Bites_Slides.pdf" download&gt;
&lt;svg t="1581822650945" fill="currentcolor" class="clip" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3250"
width="20" height="20" style="vertical-align: middle;"&gt;
&lt;path d="M645.51621918 141.21142578c21.36236596 0 41.79528808 4.04901123 61.4025879 12.06298852a159.71594214 159.71594214 0 0 1 54.26367236 35.87255836c15.84503198 16.07739258 27.76959252 34.13726783 35.78356909 54.13513184 7.86071778 19.30572486 11.76635766 39.80291724 11.76635767 61.53607177 0 21.68371583-3.90563989 42.22045875-11.76635767 61.54101586-8.01397729 19.99291992-19.95831275 38.02807617-35.78356909 54.08569313l-301.39672877 302.0839231c-9.21038818 9.22027564-20.15112281 16.48278832-32.74310277 21.77270508-12.29040503 4.81036401-24.54125953 7.19329834-36.82177783 7.19329834-12.29040503 0-24.56103516-2.38293433-36.85638427-7.19329834-12.63647461-5.28991675-23.53271461-12.55737281-32.7381587-21.77270508-9.55151367-9.58117675-16.69042992-20.44775367-21.50573731-32.57995583-4.7856443-11.61804223-7.15869117-23.91339135-7.15869188-36.9255979 0-13.14074708 2.37304688-25.55474854 7.16363524-37.19256639 4.81036401-11.94927954 11.94927954-22.78619408 21.50079395-32.55029274l278.11614966-278.46221923c6.45172119-6.51104737 14.22344971-9.75421118 23.27563501-9.75421119 8.8692627 0 16.54705787 3.24316383 23.03338622 9.75421119 6.47644019 6.49127173 9.73937964 14.18389916 9.73937964 23.08282495 0 9.0521853-3.26293945 16.81896972-9.73937964 23.32012891L366.97489888 629.73773218c-6.32812477 6.2935183-9.48724342 14.08007836-9.48724415 23.30529736 0 9.06701684 3.15417457 16.75964356 9.48724414 23.08776904 6.80273414 6.50610328 14.55963111 9.75915528 23.26574683 9.75915527 8.67150855 0 16.43334961-3.253052 23.27563501-9.76409935l301.37695313-302.04931665c18.93988037-18.96459937 28.40734887-42.04742432 28.40734814-69.25836158 0-27.16149926-9.4674685-50.26409912-28.40734815-69.22869849-19.44415283-19.13269043-42.55664086-28.72375464-69.31274438-28.72375536-26.97363258 0-49.99218727 9.59106422-69.1001587 28.72375536L274.3370815 536.89227319a159.99774146 159.99774146 0 0 0-35.80828883 54.33288526c-8.0337522 19.65179443-12.04321289 40.2824707-12.04321289 61.79809618 0 21.20910645 4.00451661 41.81011963 12.04321289 61.79809547 8.17218018 20.34393287 20.10168481 38.36920166 35.80828883 54.08569312 16.225708 16.06256104 34.30535888 28.13049292 54.23400854 36.15930176 19.91381813 8.0337522 40.47033667 12.06793189 61.64978002 12.0679326 21.13989281 0 41.70135474-4.03417969 61.63000513-12.0679326 19.91876221-8.02386474 38.01818872-20.09674073 54.2241211-36.15435768l300.86773656-301.53515601c6.47644019-6.50115991 14.23828125-9.76904273 23.28057912-9.76904344 8.88903833 0 16.56188941 3.26293945 23.04821776 9.76904344 6.48632836 6.48632836 9.7245481 14.17895508 9.7245481 23.06799269 0 9.09667992-3.23822046 16.8535769-9.7245481 23.37451172L552.40379244 815.35449242c-22.00012231 22.01989722-47.32745362 38.88336158-75.986938 50.49151564C449.10209565 877.14270043 420.37834101 882.78857422 390.21592671 882.78857422c-30.01904297 0-58.74279761-5.64587378-86.20587183-16.94256616-28.6842041-11.60815406-54.00659203-28.47161842-76.00671362-50.49151564a226.19586182 226.19586182 0 0 1-50.13061524-75.90289354A226.86328125 226.86328125 0 0 1 160.9697104 653.04797364c0-30.08331323 5.62115479-58.88122559 16.90795899-86.38385035 11.40545654-28.37768578 28.11566138-53.75939917 50.13061523-76.15997313h0.24719287L530.14164643 189.20135474c15.69177247-15.731323 33.68737817-27.70037818 53.98681641-35.89727735C604.09666377 145.26043701 624.55430562 141.23120141 645.51127583 141.23120141V141.21142578z" p-id="3251"&gt;&lt;/path&gt;
&lt;/svg&gt;
Download the slides
&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Blog Post - &lt;a href="/2023/cloud-native-tutorial/"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Repository - &lt;a href="https://github.com/smichard/cloud_bites_tutorial" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Compound Interest Calculator</title><link>/projects/compound_interest_calculator/</link><pubDate>Wed, 02 Nov 2022 20:34:39 +0000</pubDate><guid>/projects/compound_interest_calculator/</guid><description>&lt;p&gt;Compound interest is simple as a formula and surprisingly hard to feel. The relationship between how much you save, the rate you earn, and the number of years you stay invested rarely matches intuition. The &lt;strong&gt;Compound Interest Calculator&lt;/strong&gt; is a Shiny app written in R I built to make that relationship visible. Enter a savings rate, an interest assumption, and a time horizon, and it charts how the capital develops year by year.&lt;/p&gt;
&lt;p&gt;It goes past a single number. The app compares scenarios, marks milestones such as the year annual interest starts to exceed what you contribute, and breaks the result down across several charts and a detailed table. The idea came from a video about why the first €100,000 is the hardest part of building wealth. I wanted something I could actually experiment with rather than just watch.&lt;/p&gt;
&lt;p&gt;You can open the hosted version directly, or run it locally as a container. The full description of every parameter and chart is on the blog.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Blog Post - &lt;a href="/2025/compound-interest-calculator-visualizing-capital-growth/"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Web App - &lt;a href="https://compound-calculator.michard.io/" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Repository - &lt;a href="https://github.com/smichard/compound_interest_calculator" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Compound Simulation</title><link>/projects/compound_simulation/</link><pubDate>Wed, 02 Nov 2022 20:34:39 +0000</pubDate><guid>/projects/compound_simulation/</guid><description>&lt;p&gt;Most financial projections tell a tidy, deterministic story: save this much at that rate and you end up with a specific sum in twenty years. Markets do not work that way. &lt;strong&gt;Compound Simulation&lt;/strong&gt; is a Shiny app written in R that takes the probabilistic view instead, running a Monte Carlo simulation over many possible paths to show the spread of outcomes rather than one smooth curve.&lt;/p&gt;
&lt;p&gt;You give it the usual inputs: initial capital, monthly contributions, an expected return and a volatility, and a time horizon. It returns a fan chart of trajectories with uncertainty bands, the distribution of end values, and the probability of reaching a target you define. Two extras keep it honest. A stress test halves returns and doubles volatility, and a savings-elasticity view shows whether putting a little more aside each month moves the outcome more than chasing a higher return.&lt;/p&gt;
&lt;p&gt;It is the probabilistic companion to the deterministic &lt;a href="/projects/compound_interest_calculator/"&gt;Compound Interest Calculator&lt;/a&gt;
. The hosted app is linked below, and the full explanation of the model and its parameters is detailed in the blog post.&lt;/p&gt;
&lt;h2 id="references"&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Blog Post - &lt;a href="/2025/compound-simulation-exploring-portfolio-uncertainty/"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Web App - &lt;a href="https://compound-simulation.michard.io/" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Repository - &lt;a href="https://github.com/smichard/compound_simulation" target="_blank" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>