<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>dr. ir. Axel Faes - Research Diary</title>
  <subtitle>Research Diary</subtitle>
  <link href="https://theaxec.github.io/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://theaxec.github.io/blog" rel="alternate" type="text/html"/>
  <updated>2026-06-28T09:19:39+00:00</updated>
  <id>https://theaxec.github.io/blog</id>
  <author><name>dr. ir. Axel Faes</name></author>
  
  
  <entry>
    <title>Learning to Teach While Learning to Lead</title>
    <link href="https://theaxec.github.io/blog/burnout/" rel="alternate" type="text/html"/>
    <id>https://theaxec.github.io/blog/burnout/</id>
    <published>2025-10-06T00:00:00+00:00</published>
    <updated>2025-10-06T00:00:00+00:00</updated>
    <category term="reflection"/>
    <summary>What if work is too rough</summary>
    <content type="html">&lt;h1 id=&quot;what-if-work-is-too-rough&quot;&gt;What if work is too rough&lt;/h1&gt;

&lt;p&gt;I’m writing this at the end of a particularly intense period, two papers just submitted, multiple grant applications in various stages, and the final stretch of my BKO (Basic Teaching Qualification) at UHasselt. The pressure of postdoc life, securing funding, maintaining research output, developing as an educator, is very real.&lt;/p&gt;

&lt;p&gt;But reflection has a way of clarifying what matters.&lt;/p&gt;

&lt;h2 id=&quot;teaching-as-translation&quot;&gt;Teaching as Translation&lt;/h2&gt;

&lt;p&gt;When I started teaching in June 2024 with the Bioinformatics course, I assumed my computational neuroscience expertise would naturally translate to the classroom. I was wrong. Teaching biomedical students required learning an entirely new skill: translating technical concepts across disciplinary boundaries.&lt;/p&gt;

&lt;p&gt;The breakthrough came when I stopped thinking about teaching as knowledge transfer and started thinking about it as &lt;strong&gt;context building&lt;/strong&gt;. Biomedical students don’t need to become computer scientists, they need to understand how computational tools can answer their questions. This shift transformed how I designed lectures, practicals, and especially the coaching sessions that students later praised in evaluations.&lt;/p&gt;

&lt;h2 id=&quot;the-reality-of-interdisciplinary-work&quot;&gt;The Reality of Interdisciplinary Work&lt;/h2&gt;

&lt;p&gt;My teaching spans multiple worlds:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Advanced Topics in Data Science&lt;/strong&gt; (Master): teaching federated learning to computer science students&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bioinformatics&lt;/strong&gt; (Bachelor): coordinating computational instruction for biomedical scientists&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Data Science in Healthcare&lt;/strong&gt;: explaining algorithms to healthcare professionals&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Brain-Computer Interfacing&lt;/strong&gt; (KU Leuven): guest lectures connecting theory to clinical applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each context demands different pedagogical approaches. What works for CS masters doesn’t work for nursing students. The common thread? &lt;strong&gt;Start from their world, not mine.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;learning-from-failure-the-ai-dilemma&quot;&gt;Learning from Failure: The AI Dilemma&lt;/h2&gt;

&lt;p&gt;Not everything goes smoothly. During Bioinformatics project evaluations, we told a student group their report contained “ChatGPT hallucinations.” Their response, documented in course evaluations, was devastating. They felt accused of academic dishonesty when they’d only used AI for spell-checking, as UHasselt encourages.&lt;/p&gt;

&lt;p&gt;This incident exposed my own uncertainty. Where exactly is the line between legitimate AI assistance and problematic use? How do we have constructive conversations about AI-generated content without making accusations?&lt;/p&gt;

&lt;p&gt;I’m participating in the “Make Your Course AI-Proof” workshop on October 23, 2025, because I need these answers. The technology is evolving faster than pedagogical frameworks, and honestly, it stresses me out. But avoidance isn’t an option, our students are already using these tools, and they need guidance, not prohibition.&lt;/p&gt;

&lt;h2 id=&quot;mentorship-the-invisible-infrastructure&quot;&gt;Mentorship: The Invisible Infrastructure&lt;/h2&gt;

&lt;p&gt;I supervise six master’s theses this year, co-supervise a doctoral student, and coordinate research across multiple institutions through the Flanders AI Research Program (Use Case Real World Evidence). The time investment is substantial, and balancing it with my own research and grant writing is challenging.&lt;/p&gt;

&lt;p&gt;But when I see students present work that becomes publications, or better yet, when they develop the confidence to tackle complex problems independently, the investment feels worthwhile.&lt;/p&gt;

&lt;p&gt;What makes this possible? &lt;strong&gt;Prof. Liesbet Peeters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;She’s been my mentor since day one at UHasselt, and her approach to mentorship has fundamentally shaped how I think about academic leadership. She doesn’t just offer advice, she creates conditions for growth. She encourages experimentation, normalizes failure as learning, and consistently demonstrates that supporting others’ development is not separate from research excellence but integral to it.&lt;/p&gt;

&lt;p&gt;I try to pay this forward with the students I supervise. Not always successfully, I’m still learning to balance support with appropriate challenge, and to recognize when I’m overcommitting, but with intention.&lt;/p&gt;

&lt;h2 id=&quot;what-im-learning-about-teaching&quot;&gt;What I’m Learning About Teaching&lt;/h2&gt;

&lt;p&gt;Through the BKO process, I’ve identified patterns in my development:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From individual to collective:&lt;/strong&gt; I used to think good teaching was about individual preparation. Now I understand it’s about &lt;strong&gt;team coherence&lt;/strong&gt;. The positive evaluations in Bioinformatics came not from my lectures alone but from how our interdisciplinary team created a coherent learning experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From implicit to explicit:&lt;/strong&gt; So many teaching problems stem from assumptions left unstated. Evaluation criteria, acceptable AI use, expected time investment, if it’s not explicit, students will fill gaps with their own assumptions, often incorrectly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From reactive to reflective:&lt;/strong&gt; The BKO structure forces systematic reflection. Instead of only reacting when problems arise, I’m building habits of regular evaluation and adjustment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From expertise to empathy:&lt;/strong&gt; My technical knowledge matters less than my ability to understand where students are and what they need to get where they’re going. This sounds obvious but required unlearning ingrained academic habits.&lt;/p&gt;

&lt;h2 id=&quot;the-bigger-picture-why-this-matters&quot;&gt;The Bigger Picture: Why This Matters&lt;/h2&gt;

&lt;p&gt;AI in healthcare, federated learning for sensitive data, brain-computer interfaces for motor restoration, my research sits at intersections where technical capability meets human impact. Teaching the next generation isn’t separate from this work; it’s central to it.&lt;/p&gt;

&lt;p&gt;Students graduating today will face challenges we can’t fully anticipate. They need more than algorithms, they need judgment about when to use them, ethical frameworks for deployment, and the ability to communicate technical work to non-technical stakeholders.&lt;/p&gt;

&lt;p&gt;This is what drives my teaching: preparing students not just to apply existing techniques but to navigate complexity, communicate across boundaries, and think critically about the implications of their work.&lt;/p&gt;

&lt;h2 id=&quot;acknowledgments-and-looking-forward&quot;&gt;Acknowledgments and Looking Forward&lt;/h2&gt;

&lt;p&gt;To my students, past, present, and future, thank you for your patience with my learning process. Your feedback, even when difficult to hear, has been essential.&lt;/p&gt;

&lt;p&gt;To Prof. Liesbet Peeters: your mentorship has been transformative. You’ve shown me what academic leadership can look like when it prioritizes growth over gatekeeping.&lt;/p&gt;

&lt;p&gt;To fellow early-career researchers navigating similar pressures: you’re not alone. The funding stress, the publication pressure, the impostor syndrome, it’s part of the terrain. Find your people. Ask for help. Celebrate small wins.&lt;/p&gt;

&lt;p&gt;The postdoc phase is demanding, but it’s also formative. I’m learning to teach, to lead research teams, to mentor, and to balance competing demands. Not perfectly, far from it, but with intention and support.&lt;/p&gt;

&lt;p&gt;And that, perhaps, is enough.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;This post is part of my reflection on completing the BKO (Basic Teaching Qualification) at UHasselt. If you’re interested in federated learning, brain-computer interfaces, or the intersection of AI and healthcare, feel free to &lt;a href=&quot;mailto:axel.faes@uhasselt.be&quot;&gt;connect&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Cardinal - a Scripting Language for Education and Research</title>
    <link href="https://theaxec.github.io/blog/cardinal/" rel="alternate" type="text/html"/>
    <id>https://theaxec.github.io/blog/cardinal/</id>
    <published>2025-08-15T00:00:00+00:00</published>
    <updated>2025-08-15T00:00:00+00:00</updated>
    <category term="research"/>
    <summary>Introducing Cardinal: A Lightweight Scripting Language for Education and Research</summary>
    <content type="html">&lt;h1 id=&quot;introducing-cardinal-a-lightweight-scripting-language-for-education-and-research&quot;&gt;Introducing Cardinal: A Lightweight Scripting Language for Education and Research&lt;/h1&gt;

&lt;p&gt;If you’ve ever wanted to peek under the hood of a programming language, to really understand how virtual machines work, how concurrency models are implemented, or how compilers translate high-level code into bytecode, you need a codebase that’s both powerful enough to be interesting and clean enough to be comprehensible. That’s where &lt;strong&gt;Cardinal&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;Cardinal is a lightweight concurrent scripting language that brings together the elegance of Wren with the clarity needed for education and research. In this post, I’ll introduce you to what makes Cardinal special, explore its syntax and design philosophy, and explain why it might be the perfect tool for your next language implementation course, research project, or embedded scripting needs.&lt;/p&gt;

&lt;h2 id=&quot;what-is-cardinal&quot;&gt;What is Cardinal?&lt;/h2&gt;

&lt;p&gt;Cardinal is a C++ rewrite of the Wren programming language, designed with a specific focus: making language implementation accessible for students, researchers, and anyone curious about how programming languages work under the hood. While it preserves Wren’s core goals of minimalism, speed, and expressive object-oriented design, Cardinal goes further by prioritizing code readability and educational value.&lt;/p&gt;

&lt;p&gt;The language draws inspiration from several influential languages:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Wren&lt;/strong&gt; provides the core syntax and design philosophy&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Smalltalk&lt;/strong&gt; influences the pure object-oriented approach&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Lua&lt;/strong&gt; inspires the embeddability and lightweight runtime&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Erlang&lt;/strong&gt; contributes to the concurrency model through lightweight fibers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What sets Cardinal apart is its implementation philosophy. The entire VM and runtime are compact, heavily commented, and written in modern C++20. There are no external dependencies, making it trivial to build and study. Whether you’re teaching a programming languages course, conducting research on type systems, or just want to embed a scripting language in your application, Cardinal provides a clean foundation to build upon.&lt;/p&gt;

&lt;h2 id=&quot;a-taste-of-cardinal-syntax&quot;&gt;A Taste of Cardinal Syntax&lt;/h2&gt;

&lt;p&gt;Cardinal’s syntax will feel immediately familiar if you’ve worked with languages like JavaScript, Python, or Ruby. Here’s the classic first program:&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hello, world!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Classes are first-class citizens in Cardinal, forming the core abstraction of the language:&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Bird&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;construct&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;species&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;_species&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;species&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  
  &lt;span class=&quot;n&quot;&gt;species&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_species&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  
  &lt;span class=&quot;n&quot;&gt;sing&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;The %(_species) sings!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cardinal&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Bird&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;cardinal&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cardinal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;sing&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// The cardinal sings!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notice the string interpolation with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%(_species)&lt;/code&gt;, a clean way to embed expressions directly in strings. Cardinal uses a constructor pattern with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;construct new()&lt;/code&gt; and private fields prefixed with underscores. Getters can be defined simply by writing a method without parameters.&lt;/p&gt;

&lt;p&gt;One of Cardinal’s most interesting features is its built-in support for lightweight concurrency through &lt;strong&gt;fibers&lt;/strong&gt;. Fibers enable coroutine-style concurrency without the complexity of threads:&lt;/p&gt;

&lt;div class=&quot;language-dart highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Counter&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;countTo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Fiber&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;Fiber&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;yield&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Counter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;countTo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;isDone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Prints: 1, 2, 3, 4, 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This example demonstrates how fibers can yield values, allowing you to write generator-style code that’s both elegant and efficient. The fiber suspends execution at each &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yield&lt;/code&gt;, returning control to the caller, and resumes where it left off on the next &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;call()&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-connection-to-wren&quot;&gt;The Connection to Wren&lt;/h2&gt;

&lt;p&gt;Cardinal is more than just inspired by Wren, it’s a deliberate C++ reimplementation that maintains compatibility with Wren’s syntax and semantics while improving on the educational and research aspects. The original Wren is written in C and focuses on being a minimal, fast embeddable scripting language.&lt;/p&gt;

&lt;p&gt;Cardinal takes Wren’s solid foundation and asks: “What if we rebuilt this with modern C++, extensive comments, and education as a first-class goal?” The result is a codebase that:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Uses modern C++20 features for clearer code structure&lt;/li&gt;
  &lt;li&gt;Includes extensive inline documentation explaining design decisions&lt;/li&gt;
  &lt;li&gt;Separates concerns in a way that maps naturally to programming language curricula&lt;/li&gt;
  &lt;li&gt;Maintains the single-pass compilation to bytecode that makes Wren fast&lt;/li&gt;
  &lt;li&gt;Preserves Wren’s compact object representation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For researchers and educators, this means you can use Cardinal to teach the same concepts you’d teach with Wren, but with a codebase that’s more approachable for study and modification. Students can trace through the code and understand not just &lt;em&gt;what&lt;/em&gt; it does, but &lt;em&gt;why&lt;/em&gt; particular design decisions were made.&lt;/p&gt;

&lt;h2 id=&quot;why-cardinal-excels-in-education-and-research&quot;&gt;Why Cardinal Excels in Education and Research&lt;/h2&gt;

&lt;p&gt;Cardinal was designed from the ground up with academic use cases in mind. Here’s why it’s particularly well-suited for educational and research contexts:&lt;/p&gt;

&lt;h3 id=&quot;for-teaching-programming-languages&quot;&gt;For Teaching Programming Languages&lt;/h3&gt;

&lt;p&gt;The VM and runtime are deliberately kept small and readable. Each component is heavily commented, making it suitable for:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Courses on programming language implementation&lt;/li&gt;
  &lt;li&gt;Virtual machine design and optimization&lt;/li&gt;
  &lt;li&gt;Compiler construction&lt;/li&gt;
  &lt;li&gt;Concurrency models and implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The clean separation of concerns means you can focus on one aspect at a time, study the garbage collector without getting lost in parser details, or examine the bytecode compiler without worrying about the runtime.&lt;/p&gt;

&lt;h3 id=&quot;for-research-projects&quot;&gt;For Research Projects&lt;/h3&gt;

&lt;p&gt;Cardinal provides an excellent platform for:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Master’s thesis projects&lt;/strong&gt; on type systems, effect handlers, memory models, GC strategies, and concurrency paradigms&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Rapid prototyping&lt;/strong&gt; of new language features thanks to the higher-level C++ implementation&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Experimental implementations&lt;/strong&gt; of novel ideas without the overhead of building infrastructure from scratch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The small footprint enables fast iteration, you can modify the language, rebuild, and test your changes in seconds rather than minutes. And because it compiles to bytecode, you can experiment with runtime optimizations and see their effects immediately.&lt;/p&gt;

&lt;h3 id=&quot;for-labs-and-capstone-projects&quot;&gt;For Labs and Capstone Projects&lt;/h3&gt;

&lt;p&gt;Cardinal is sized perfectly for semester-long projects:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Extend the language with new features (pattern matching, optional types, etc.)&lt;/li&gt;
  &lt;li&gt;Implement different garbage collection strategies&lt;/li&gt;
  &lt;li&gt;Add new concurrency primitives beyond fibers&lt;/li&gt;
  &lt;li&gt;Optimize specific aspects of the VM or compiler&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codebase is large enough to be interesting but small enough that students can grasp the whole system by the end of a semester.&lt;/p&gt;

&lt;h2 id=&quot;practical-features&quot;&gt;Practical Features&lt;/h2&gt;

&lt;p&gt;Beyond its educational value, Cardinal is a fully functional language suitable for real-world embedding:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;No external dependencies&lt;/strong&gt;: The entire language requires only a C++20 compiler&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Embeddable by design&lt;/strong&gt;: Clean C++ API for integrating into your applications&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Header-only option&lt;/strong&gt;: A single-header amalgamation is available for rapid prototyping (perfect for quick experiments, though it trades some performance for convenience)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt;: Builds on Linux, macOS, and Windows with standard toolchains&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Minimal standard library&lt;/strong&gt;: Small footprint keeps things simple&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;

&lt;p&gt;Building Cardinal is straightforward. The project includes a helpful Python build script that handles everything:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Build Cardinal&lt;/span&gt;
python3 utils/build.py &lt;span class=&quot;nt&quot;&gt;--build&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Run tests&lt;/span&gt;
python3 utils/build.py &lt;span class=&quot;nt&quot;&gt;--test&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# Run benchmarks&lt;/span&gt;
python3 utils/build.py &lt;span class=&quot;nt&quot;&gt;--benchmark&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can also use CMake directly if you prefer. The project is well-documented with clear build instructions for multiple platforms and toolchains.&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next?&lt;/h2&gt;

&lt;p&gt;In future posts, I’ll dive deeper into Cardinal’s implementation:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;How the single-pass compiler generates bytecode&lt;/li&gt;
  &lt;li&gt;The design and implementation of the fiber-based concurrency system&lt;/li&gt;
  &lt;li&gt;Exploring the garbage collection strategy&lt;/li&gt;
  &lt;li&gt;The advanced feature: algebraic effect handlers with multishot continuations&lt;/li&gt;
  &lt;li&gt;Extending Cardinal with custom foreign classes and methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cardinal represents a unique intersection: a language that’s simple enough to understand fully, yet sophisticated enough to explore real implementation challenges. Whether you’re teaching the next generation of language implementers, researching novel language features, or just curious about how scripting languages work, Cardinal provides a clean, approachable foundation.&lt;/p&gt;

&lt;p&gt;If you’re interested in programming language implementation, I encourage you to check out &lt;a href=&quot;https://github.com/TheAxeC/cardinal-revamped&quot;&gt;Cardinal on GitHub&lt;/a&gt;. The codebase is waiting to be explored, modified, and extended, and that’s exactly what it was designed for.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;In the next post, we’ll take a deeper look at Cardinal’s bytecode compiler and see how it transforms source code into executable instructions in a single pass.&lt;/em&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Finding Rhythm: Building a Sustainable Voice in Academia</title>
    <link href="https://theaxec.github.io/blog/linkedin/" rel="alternate" type="text/html"/>
    <id>https://theaxec.github.io/blog/linkedin/</id>
    <published>2025-06-15T00:00:00+00:00</published>
    <updated>2025-06-15T00:00:00+00:00</updated>
    <category term="reflection"/>
    <summary>Finding Rhythm in Academic Communication: One Post at a Time</summary>
    <content type="html">&lt;h1 id=&quot;finding-rhythm-in-academic-communication-one-post-at-a-time&quot;&gt;Finding Rhythm in Academic Communication: One Post at a Time&lt;/h1&gt;

&lt;p&gt;A few weeks ago, I made a personal commitment: to bring a bit more structure and intention to how I share my academic journey online.&lt;/p&gt;

&lt;p&gt;Between research deadlines, teaching, grant writing, and supervision, social media can easily feel like noise. But over the past months, I’ve realized that platforms like LinkedIn can also be powerful spaces for reflection, connection, and visibility, not just for “self-promotion,” but for showing what research actually looks like from the inside.&lt;/p&gt;

&lt;p&gt;So, I decided to adopt a simple rhythm: &lt;strong&gt;one post per week, four themes that repeat every month.&lt;/strong&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;week-1-reflection-and-honesty&quot;&gt;Week 1: Reflection and honesty&lt;/h2&gt;

&lt;p&gt;Academia can be intense. My first post in this new rhythm was a candid reflection on exhaustion, perfectionism, and the importance of mentorship. It wasn’t meant to be polished or strategic, just honest.&lt;/p&gt;

&lt;p&gt;The response reminded me how many people quietly feel the same way. Writing about the mental load of research opened a space for conversation and empathy. That’s something I want to keep nurturing.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;week-2-behind-the-research&quot;&gt;Week 2: Behind the research&lt;/h2&gt;

&lt;p&gt;Next week I’ll share my excitement for the &lt;strong&gt;Federated Learning Technologies and Applications (FLTA 2025)&lt;/strong&gt; conference, where I’ll present work on extending Block-Term Tensor Regression to federated settings for privacy-preserving biomedical analysis.&lt;/p&gt;

&lt;p&gt;These posts are a chance to bring people closer to the science itself, not just the results, but the questions, collaborations, and messy problem-solving that happen along the way.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;week-3-thought-leadership-and-curiosity&quot;&gt;Week 3: Thought leadership and curiosity&lt;/h2&gt;

&lt;p&gt;Some weeks, I’ll focus on unpacking a concept that matters to my field. For example:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Federated learning isn’t just about moving models instead of data, it’s about trust.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Posts like that give me space to think out loud, explain complex ideas in plain language, and invite others to share their perspectives. They’re less about outreach and more about &lt;em&gt;conversation&lt;/em&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;week-4-mentorship-and-community&quot;&gt;Week 4: Mentorship and community&lt;/h2&gt;

&lt;p&gt;Science doesn’t happen in isolation. Many of my most meaningful moments come from teaching and mentoring, helping students turn complexity into clarity.&lt;/p&gt;

&lt;p&gt;Dedicating one post a month to that theme keeps me grounded. It’s a reminder that our impact often lies in how we support others, not just in what we publish.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;why-this-rhythm-matters&quot;&gt;Why this rhythm matters&lt;/h2&gt;

&lt;p&gt;Posting once a week isn’t about chasing engagement metrics. It’s about building a sustainable, authentic habit of communication, one that reflects the real rhythm of academic life: thinking, creating, sharing, and learning.&lt;/p&gt;

&lt;p&gt;By alternating between personal reflection, research updates, conceptual deep dives, and community focus, I can show the &lt;em&gt;whole picture&lt;/em&gt; of being a researcher, the science, the struggle, and the people behind it.&lt;/p&gt;

&lt;p&gt;If you’re also trying to find your balance between research and communication, maybe this kind of rhythm could help. One post a week is enough to stay connected without burning out.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;📢 I’ll keep experimenting with this format over the coming months, starting with my FLTA 2025 post next week. If you’re curious about federated learning, healthcare AI, or the realities of academic life, you can follow along on &lt;a href=&quot;https://www.linkedin.com/in/axelfaes&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  
</feed>
