<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://michaelpendon.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://michaelpendon.com/" rel="alternate" type="text/html" /><updated>2026-09-22T21:36:37+00:00</updated><id>https://michaelpendon.com/feed.xml</id><title type="html">𝓜𝓒𝓟</title><subtitle>Personalized website.</subtitle><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><entry><title type="html">Proud of RepoDB, and What Comes Next</title><link href="https://michaelpendon.com/posts/2026/09/proud-of-repodb-and-whats-next/" rel="alternate" type="text/html" title="Proud of RepoDB, and What Comes Next" /><published>2026-09-21T00:00:00+00:00</published><updated>2026-09-21T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/09/proud-of-repodb-and-whats-next</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/09/proud-of-repodb-and-whats-next/"><![CDATA[<p>I want to pause and say something I do not say often enough: I am proud of what <a href="https://repodb.net">RepoDB</a> has become over the last few years.</p>

<p>It started as a hobby project that I worked on during nights and weekends, and it still is one. But somewhere along the way it grew into a library that real developers rely on in real applications. Every feature, every bug fix, every late-night refactor added up to something I am genuinely happy to put my name on. Looking back, I can say it plainly: this is my <em>obra maestra</em>, and I would not trade the journey for anything.</p>

<h3 id="the-part-i-will-miss">The Part I Will Miss</h3>

<p>There is a part of this milestone that is bittersweet, and I would rather be honest about it.</p>

<p>RepoDB was born as a <strong>lightweight</strong> library. A hybrid ORM that stays out of your way, generates the SQL you would have written yourself, and does not ask you to adopt a heavy framework or a complicated mental model. That simplicity is what made it feel right, and it is what many of you fell in love with.</p>

<p>As I move RepoDB further toward a <strong>Data Productivity Platform for .NET</strong>, that lightweight version of the library is something I will miss. A platform carries more responsibility than a library. It has more layers, more capabilities, and more surface area to keep coherent. I am doing it on purpose, because I believe it is where the real value is, but I will not pretend the trade is free. The small, focused, easy-to-hold-in-your-head RepoDB is the one I grew up with, and I am going to miss it.</p>

<p>That said, the ORM is not going away. It remains the foundation that everything else stands on, and staying honest to its lightweight roots is a big part of how I intend to build the rest.</p>

<h3 id="the-last-4-months-were-only-the-beginning">The Last 4 Months Were Only the Beginning</h3>

<p>I also want to be clear that the last four months were an <em>initial move</em>, not the destination.</p>

<p>In that time I pushed RepoDB well beyond its original four providers. I covered the ground in <a href="/posts/2026/09/repodb-three-months-of-provider-growth/">Three Months of Growing RepoDB Across Database Providers</a>, and I laid out the direction in <a href="/posts/2026/08/repodb-vision-tweet/">My Vision for RepoDB</a> and the four-layer architecture in <a href="https://blogs.repodb.net/posts/2026/08/repodb-new-architecture">RepoDB’s New Architecture - Productivity, ORM, Low-Level Connectors and Insights</a>. All of that work was groundwork. It was about getting the foundation right, proving that the resolution model could absorb very different database engines, and separating the stack into layers so that Productivity, Insights, and the rest can be built once on top of it rather than reimplemented per provider.</p>

<p>The bigger picture is still ahead of us, and it will unfold over the next year and the years to come. What you have seen so far is the first few steps of a much longer road. There is a lot more I want to build, and I am more excited about it than I have been in a long time.</p>

<h3 id="thank-you">Thank You</h3>

<p>Finally, and most importantly, thank you.</p>

<p>To the avid users of RepoDB: the ones who picked it up early, stayed with it through the rough edges, opened issues, sent pull requests, asked hard questions, and kept using it in production when they could have moved on. You are the reason this project exists past the point where it was just a personal experiment. Every message, every bug report, and every “this saved me hours” has kept me going on the nights when it would have been easier to close the laptop.</p>

<p>I do not take your trust for granted. I will keep working to earn it as RepoDB grows into what comes next.</p>

<p>Thank you for being part of this journey. More to come.</p>

<hr />

<p>~ This post is refined by AI, but is reviewed and gatekept by me before posting ~</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="repodb" /><category term="oss" /><category term="data-platform" /><summary type="html"><![CDATA[I want to pause and say something I do not say often enough: I am proud of what RepoDB has become over the last few years.]]></summary></entry><entry><title type="html">Three Months of Growing RepoDB Across Database Providers</title><link href="https://michaelpendon.com/posts/2026/09/repodb-three-months-of-provider-growth/" rel="alternate" type="text/html" title="Three Months of Growing RepoDB Across Database Providers" /><published>2026-09-04T00:00:00+00:00</published><updated>2026-09-04T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/09/repodb-three-months-of-provider-growth</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/09/repodb-three-months-of-provider-growth/"><![CDATA[<p>I want to take a step back and reflect on the last three months of work on <a href="https://repodb.net">RepoDB</a>, because it has genuinely been one of the more intense stretches since I started the project.</p>

<p>At the start of summer, RepoDB supported the four providers most people associate with it: <a href="https://repodb.net/tutorial/get-started-sqlserver">SQL Server</a>, <a href="https://repodb.net/tutorial/get-started-sqlite">SQLite</a>, <a href="https://repodb.net/tutorial/get-started-mysql">MySQL</a>, and <a href="https://repodb.net/tutorial/get-started-postgresql">PostgreSQL</a>. Since then, I have pushed support for <a href="https://repodb.net/tutorial/get-started-oracle">Oracle</a>, <a href="https://repodb.net/tutorial/get-started-db2">IBM DB2</a>, <a href="https://repodb.net/tutorial/get-started-mariadb">MariaDB</a>, <a href="https://repodb.net/tutorial/get-started-mariadb">MariaDB Connector</a>, <a href="https://repodb.net/tutorial/get-started-mysql">MySQL Connector</a>, <a href="https://repodb.net/tutorial/get-started-firebird">Firebird</a>, <a href="https://repodb.net/tutorial/get-started-vertica">Vertica</a>, <a href="https://repodb.net/tutorial/get-started-saphana">SAP HANA</a>, <a href="https://repodb.net/tutorial/get-started-clickhouse">ClickHouse</a>, and <a href="https://repodb.net/tutorial/get-started-enterprisedb">EnterpriseDB</a>. That is ten new providers in roughly three months, bringing the total to fourteen.</p>

<h3 id="no-two-databases-play-by-the-same-rules">No Two Databases Play by the Same Rules</h3>

<p>Going in, I expected the differences between these engines to mostly be syntax — a different way to write <code class="language-plaintext highlighter-rouge">LIMIT</code>, a different quoting character for identifiers. That assumption did not survive contact with the actual work.</p>

<p><a href="https://repodb.net/tutorial/get-started-oracle">Oracle</a> does not allow multiple SQL statements to be packed into a single round-trip the way <a href="https://repodb.net/tutorial/get-started-sqlserver">SQL Server</a> does, which meant <code class="language-plaintext highlighter-rouge">QueryMultiple</code> needed its own round-trip strategy just for that provider. Its bulk operations also needed an entirely custom array-binding path, because Oracle’s ODP.NET driver does not expose anything close to <code class="language-plaintext highlighter-rouge">SqlBulkCopy</code>.</p>

<p><a href="https://repodb.net/tutorial/get-started-db2">DB2</a> brought a different kind of pain: the official driver ships as a native shared library, and getting it to load correctly in CI, across Docker health checks and container startup timing, took more iterations than the actual data-access code did.</p>

<p><a href="https://repodb.net/tutorial/get-started-mariadb">MariaDB</a> looked like it should just piggyback on the existing <a href="https://repodb.net/tutorial/get-started-mysql">MySQL</a> support, since both speak a very similar wire protocol. But treating them as the same thing causes real collisions the moment both providers are registered in the same process. That is what pushed me to build a dedicated <code class="language-plaintext highlighter-rouge">RepoDb.Connector.MariaDb</code>, with every type prefixed so a <code class="language-plaintext highlighter-rouge">MariaDbConnection</code> and a <code class="language-plaintext highlighter-rouge">MySqlConnection</code> can coexist without stepping on each other, even though both ultimately talk to the server through the same underlying driver.</p>

<p><a href="https://repodb.net/tutorial/get-started-firebird">Firebird</a> had no bulk-loading protocol at all in its ADO.NET driver, so I had to hand-roll a command batcher just to get bulk operations working at a reasonable speed.</p>

<p><a href="https://repodb.net/tutorial/get-started-vertica">Vertica</a> ended up templated from that same Firebird groundwork, since its driver situation was similarly sparse. Unfortunately, there is no real support to wired-protocol bulk copy, ended up to <code class="language-plaintext highlighter-rouge">Task.Run</code> and flagged it.</p>

<p><a href="https://repodb.net/tutorial/get-started-saphana">SAP HANA</a>’s bulk copy class only exposed a synchronous API, so making it behave asynchronously meant wrapping it with <code class="language-plaintext highlighter-rouge">Task.Run</code> or batch via command through custom batcher — a shortcut I am not fully comfortable with, and one I have flagged to revisit.</p>

<p>And <a href="https://repodb.net/tutorial/get-started-clickhouse">ClickHouse</a> was the biggest mental shift of the batch, because it is not a transactional row-store at all. There is no identity column, so RepoDB cannot hand you back a generated key the way it does everywhere else. There is no <code class="language-plaintext highlighter-rouge">MERGE</code>/<code class="language-plaintext highlighter-rouge">UPSERT</code>, so <code class="language-plaintext highlighter-rouge">Merge</code> compiles down to a plain <code class="language-plaintext highlighter-rouge">INSERT</code> and deduplication becomes a table-engine concern instead of a write-time one. Updates and deletes are background mutations, not immediate in-place writes. None of RepoDB’s existing assumptions about “a row” held up, and the provider had to be honest about that instead of pretending ClickHouse is just another RDBMS.</p>

<h3 id="where-repodb-stands-today">Where RepoDB Stands Today</h3>

<p>As of today, RepoDB officially supports fourteen database providers:</p>

<ul>
  <li><a href="https://repodb.net/tutorial/get-started-clickhouse">ClickHouse</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-enterprisedb">EnterpriseDB</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-firebird">Firebird</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-db2">IBM DB2</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-mariadb">MariaDB</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-mariadb">MariaDB Connector</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-mysql">MySQL</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-mysql">MySQL Connector</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-oracle">Oracle</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-postgresql">PostgreSQL</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-saphana">SAP HANA</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-sqlserver">SQL Server</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-sqlite">SQLite</a></li>
  <li><a href="https://repodb.net/tutorial/get-started-vertica">Vertica</a></li>
</ul>

<h3 id="why-repodbs-resolution-layer-matters-more-than-ever">Why RepoDB’s Resolution Layer Matters More Than Ever</h3>

<p>None of this would have been sustainable if every provider needed its own bespoke way of being called. The reason a developer can write the same <code class="language-plaintext highlighter-rouge">Query</code>, <code class="language-plaintext highlighter-rouge">Insert</code>, <code class="language-plaintext highlighter-rouge">Merge</code>, or <code class="language-plaintext highlighter-rouge">BulkInsert</code> call against <a href="https://repodb.net/tutorial/get-started-sqlserver">SQL Server</a>, <a href="https://repodb.net/tutorial/get-started-oracle">Oracle</a>, or <a href="https://repodb.net/tutorial/get-started-clickhouse">ClickHouse</a> and have it just work is because RepoDB pushes all of that variance into a small, well-defined set of resolution points — the <code class="language-plaintext highlighter-rouge">IDbSetting</code>, <code class="language-plaintext highlighter-rouge">IDbHelper</code>, <code class="language-plaintext highlighter-rouge">IStatementBuilder</code>, and CLR-to-database-type resolvers each provider plugs in.</p>

<p>Those resolutions are where the real gap-closing happens. They are what let RepoDB decide, per provider, whether an identity value comes back from the server or has to be generated by the caller, whether a merge is a real <code class="language-plaintext highlighter-rouge">MERGE</code> statement or a fallback <code class="language-plaintext highlighter-rouge">INSERT</code>, whether a bulk load goes through a native binary protocol or a hand-rolled batcher, and how a .NET type maps to whatever native type that specific engine expects. Without that layer, “move data from one provider to another” would mean rewriting data-access code every time the destination changed. With it, the same repository code can target a completely different database engine, and the only thing that changes is which resolvers get registered.</p>

<p>That, more than any single provider, is the part of this three-month push I am proudest of. Getting <a href="https://repodb.net/tutorial/get-started-oracle">Oracle</a>, <a href="https://repodb.net/tutorial/get-started-db2">DB2</a>, or <a href="https://repodb.net/tutorial/get-started-clickhouse">ClickHouse</a> working was a lot of grinding. But proving that RepoDB’s resolution model could absorb engines this different from each other — without bending the core API out of shape — is what tells me the architecture is sound enough to keep growing.</p>

<h3 id="rethinking-the-architecture-in-four-layers">Rethinking the Architecture in Four Layers</h3>

<p>Going through fourteen providers back to back also forced a bigger realization: RepoDB itself needed to stop being thought of as “one ORM library” and start being thought of as a stack. That thinking is what led to the four-layer architecture I laid out in <a href="https://blogs.repodb.net/posts/2026/08/repodb-new-architecture">RepoDB’s New Architecture - Productivity, ORM, Low-Level Connectors and Insights</a> — Low-Level Connectors at the foundation, ORM on top of that, Productivity on top of ORM, and Insights branching off the ORM layer to observe everything flowing through it.</p>

<p><img src="https://raw.githubusercontent.com/mikependon/RepoDB.Resources/refs/heads/main/blogs/images/posts/2026-08/repodb-new-architecture.png" style="max-width:768px" /></p>

<p>That separation is not just a diagram; it is a direct consequence of everything described above. Low-Level Connectors is where all of the provider-specific pain — <a href="https://repodb.net/tutorial/get-started-oracle">Oracle</a>’s array binding, <a href="https://repodb.net/tutorial/get-started-firebird">Firebird</a>’s hand-rolled batcher, <a href="https://repodb.net/tutorial/get-started-mariadb">MariaDB</a> needing its own prefixed types — actually lives, isolated from the ORM surface. ORM is what stays provider-agnostic thanks to the resolution layer, so a <code class="language-plaintext highlighter-rouge">BulkInsert</code> call reads the same whether it targets <a href="https://repodb.net/tutorial/get-started-sqlserver">SQL Server</a> or <a href="https://repodb.net/tutorial/get-started-clickhouse">ClickHouse</a>. And once that separation exists, Productivity-level operations like <code class="language-plaintext highlighter-rouge">Move</code>, <code class="language-plaintext highlighter-rouge">Copy</code>, <code class="language-plaintext highlighter-rouge">Merge</code>, and <code class="language-plaintext highlighter-rouge">Deduplicate</code> can be built once, on top of Bulk CRUD, instead of being reimplemented per provider. It is the same closing-the-gap idea from the resolution layer, just one level higher: the boundary between fourteen very different databases collapses into a single, consistent surface for actually moving data between them.</p>

<h3 id="what-this-sets-up">What This Sets Up</h3>

<p>Fourteen providers is not the finish line. It is proof that the model scales to genuinely different kinds of databases, transactional and analytical alike, which matters a lot if RepoDB is going to keep closing the gap between how different data platforms store and move data. There is still cleanup ahead — the <a href="https://repodb.net/tutorial/get-started-saphana">SAP HANA</a> async story being the most obvious one — but the foundation for the next batch of providers is in a much better place than it was three months ago.</p>

<p>More to come as this keeps moving.</p>

<hr />

<p>~ This post is refined by AI, but is reviewed and gatekept by me before posting ~</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="repodb" /><category term="oss" /><summary type="html"><![CDATA[I want to take a step back and reflect on the last three months of work on RepoDB, because it has genuinely been one of the more intense stretches since I started the project.]]></summary></entry><entry><title type="html">Meeting Anders Hejlsberg, the Creator of C#</title><link href="https://michaelpendon.com/posts/2026/08/meeting-anders-hejlsberg/" rel="alternate" type="text/html" title="Meeting Anders Hejlsberg, the Creator of C#" /><published>2026-08-16T00:00:00+00:00</published><updated>2026-08-16T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/08/meeting-anders-hejlsberg</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/08/meeting-anders-hejlsberg/"><![CDATA[<p>There are people whose work shapes the entire course of your career without them ever knowing your name. For me, that person is Anders Hejlsberg, the creator of C#. Last November, I finally got to meet him in person, and it still stands as the biggest day of my professional life.</p>

<p><img src="/images/posts/2026-08/Anders-Hejlsberg.png" alt="Anders Hejlsberg" /></p>

<p>Anders was the reason I fell in love with C# in the first place. Long before I ever wrote a single line of production code, I was drawn to the elegance of the language he designed, the way it balanced simplicity with power. He was not just someone who built a programming language; he was the reason I wanted to become the developer I am today. I always dreamed of truly mastering his creation, of becoming very good at the very thing he gave to the world.</p>

<p>That dream is what pushed me to put myself fully into C#. I picked it up from the very beginning of my career, twenty years ago, when I was still finding my footing as a developer. I stuck with it through every framework shift, every new version, every late night spent understanding why the language worked the way it did. C# was not just a tool I used, it became the foundation of everything I built, including my open-source work like RepoDB. Two decades later, that early decision to commit myself to Anders’s creation still defines who I am as an engineer and architect.</p>

<p>So when I learned he was speaking at the Patterns and Practices Convention at Microsoft Lyngby in November 2019, I knew I had to be there. Sitting in that room, listening to him talk about the language and TypeScript, and the thinking behind it, felt surreal. And when I finally had the chance to meet him face to face, to shake his hand and tell him what his work has meant to my career, twenty years of admiration came full circle in a single moment.</p>

<p>Meeting your greatest idol does not happen often, especially not one whose creation you have spent your entire career mastering. That day at Lyngby will always be, without question, the biggest day of my professional life.</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="csharp" /><category term="dotnet" /><category term="biggest-day" /><summary type="html"><![CDATA[There are people whose work shapes the entire course of your career without them ever knowing your name. For me, that person is Anders Hejlsberg, the creator of C#. Last November, I finally got to meet him in person, and it still stands as the biggest day of my professional life.]]></summary></entry><entry><title type="html">Sparking New Ideas for the Data Platform</title><link href="https://michaelpendon.com/posts/2026/08/sparking-new-ideas-for-the-data-platform/" rel="alternate" type="text/html" title="Sparking New Ideas for the Data Platform" /><published>2026-08-16T00:00:00+00:00</published><updated>2026-08-16T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/08/sparking-new-ideas-for-the-data-platform</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/08/sparking-new-ideas-for-the-data-platform/"><![CDATA[<p>I have been sitting with an idea for a while now, and I think it is time to write it down instead of just turning it over in my head.</p>

<h3 id="the-cost-problem-every-big-data-platform-shares">The Cost Problem Every Big Data Platform Shares</h3>

<p>Almost every enterprise company I have talked to or worked with runs into the same wall once their data platform matures: cost. It does not matter if it is <a href="https://www.databricks.com/">Databricks</a>, <a href="https://www.confluent.io/">Confluent</a>, <a href="https://www.dataiku.com/">DataIKU</a>, or <a href="https://azure.microsoft.com/en-us/products/synapse-analytics">Azure Synapse</a> — these platforms are powerful, but that power comes bundled with clusters, compute units, storage tiers, and licensing that scale in a direction that is hard to predict and even harder to control. Teams end up paying for capability they only use a fraction of, because the platform is built to handle everything at once rather than the specific thing your organization actually needs today.</p>

<p>That is not a knock on these platforms; they solve real problems at real scale. But “big platform for everything” is a very expensive default when most organizations do not need everything, they need a handful of things done really well.</p>

<h3 id="the-ai-era-removes-an-old-constraint">The AI Era Removes an Old Constraint</h3>

<p>For years, the reason companies bought into these all-in-one platforms was simple: they did not have the developer capacity to build and maintain something more tailored. Custom tooling was a luxury reserved for organizations with large engineering teams.</p>

<p>I think that constraint is no longer a hard blocker. In the AI era, a small team — or even a single developer — can move faster and cover more ground than an entire team could a few years ago. The organization no longer needs a large headcount to “do big things.” It needs the right small things, built well, and AI closes most of the gap that used to require that headcount.</p>

<h3 id="the-idea-small-pieces-big-outcomes">The Idea: Small Pieces, Big Outcomes</h3>

<p>This is where my idea starts. Instead of adopting one massive platform meant to do everything, what if the data platform was made of small, purpose-built pieces — each one lightweight, focused, and cheap to run — that together deliver the same outcomes big platforms promise, but without the overhead?</p>

<p>The core of it is rethinking how data and files are structured in the first place. Big platforms tend to assume you need their engine to make sense of your data. I think a more efficient structuring of data and files can remove a lot of that dependency, letting small components do the heavy lifting that today gets outsourced to a big, expensive cluster.</p>

<p>It is a completely different mental model from the big data platforms we are used to today. Instead of “one platform to rule the pipeline,” it is “many small, efficient pieces, composed to deliver the big result.”</p>

<h3 id="where-this-goes-from-here">Where This Goes From Here</h3>

<p>This is still early — more of a spark than a blueprint. But it is the same instinct that got <a href="https://repodb.net">RepoDB</a> started: a thin, efficient, transparent layer can often do more than a heavy one, at a fraction of the cost. I want to explore whether that same philosophy holds true at the data platform level, not just at the data access level.</p>

<p>If this resonates with you, or if you have run into the same cost wall with your own data platform, I would love to hear about it. This is the kind of idea that gets sharper the more it gets challenged.</p>

<blockquote>
  <p>This post contains what is on my head, but it is also refined by AI.</p>
</blockquote>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="opinion" /><category term="data-platform" /><category term="ai" /><category term="cost-optimization" /><summary type="html"><![CDATA[I have been sitting with an idea for a while now, and I think it is time to write it down instead of just turning it over in my head.]]></summary></entry><entry><title type="html">My Vision for RepoDB</title><link href="https://michaelpendon.com/posts/2026/08/repodb-vision-tweet/" rel="alternate" type="text/html" title="My Vision for RepoDB" /><published>2026-08-01T00:00:00+00:00</published><updated>2026-08-01T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/08/repodb-vision-tweet</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/08/repodb-vision-tweet/"><![CDATA[<p>I recently posted a <a href="https://x.com/mike_pendon/status/2083421653569093988">Tweet</a> laying out, unfiltered, where I want to take <a href="https://repodb.net">RepoDB</a>. I wrote it myself, without any AI assistance, because I wanted it to come across exactly as I think about it.</p>

<blockquote>
  <p>I am expressing the full me here without the influence of AI.</p>

  <p>Having extensive experience in .NET and being exposed to Python in recent years has given me a lot of thoughts about the possibilities of what humans can do with data. I also believe that data is the area where we can accelerate businesses and help AI learn even more from it.</p>

  <p>IMHO, and don’t quote me on this, being in .NET alone is just not enough to understand the entire Enterprise ecosystem. One must really work with the different technologies and tools that Enterprise companies use and truly understand the pain points of the business.</p>

  <p>I am using that experience to further improve the capabilities of my masterpiece (<strong>obra maestra</strong>), #RepoDB. As a hobby project that I work on during my nights and weekends, I am very committed to bringing this ORM library beyond being just another ORM in .NET. My goal is for it to become a developer productivity tool for everyone in this ecosystem.</p>

  <p>Some of the capabilities are shown below, including Insights visibility and Default Telemetry. <em>(Note: What I have shared here represents only the ideas currently in my head and capabilities that are already common in Enterprise corporations. There are many more functions to come.)</em></p>

  <p>Imagine that John can do this across multiple database providers, while I am currently busy expanding the ORM to Oracle, Db2, MariaDB, Snowflake, Firebird, Vertica, and many more. Or imagine Claude or ChatGPT recommending and generating this small piece of code for you—code that delivers advanced capabilities many Enterprise teams struggle to build themselves.</p>

  <p>#DotNet #CSharp #ORM #Data #Productivity #Tools</p>
</blockquote>

<p><img src="/images/posts/2026-08/Tweet%20RepoDB%20Direction.png" alt="Tweet RepoDB Direction" /></p>

<p>The context behind this Tweet comes from years of working in .NET while also being exposed to Python, which has shaped how I think about data and what it takes to truly serve the Enterprise ecosystem. It is not enough to be fluent in one stack; you have to sit with the different tools and technologies that Enterprise companies actually use to understand where the real pain points are. That is the perspective I keep bringing back into RepoDB.</p>

<p>RepoDB started, and remains, a hobby project I work on during my nights and weekends, but my ambition for it has grown well beyond being just another ORM for .NET. I want it to become a developer productivity tool, one that gives every developer in this ecosystem capabilities that are already standard in Enterprise corporations but rarely accessible in an open-source library. Insights visibility and Default Telemetry are two concrete examples of that direction, and they are only the beginning of what I have in mind.</p>

<p>This is also why expanding provider support to <a href="/posts/2026/07/repodb-oracle-provider/">Oracle</a>, Db2, MariaDB, Snowflake, Firebird, Vertica, and more matters so much to me right now. The goal is for these productivity capabilities to be available across the providers Enterprise teams actually rely on, not just a single database engine. And looking further ahead, I imagine a future where tools like Claude or ChatGPT can recommend and generate RepoDB code that delivers this kind of advanced capability out of the box, capability that many Enterprise teams currently struggle to build themselves.</p>

<p>More on this as it takes shape.</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="repodb" /><category term="oss" /><summary type="html"><![CDATA[I recently posted a Tweet laying out, unfiltered, where I want to take RepoDB. I wrote it myself, without any AI assistance, because I wanted it to come across exactly as I think about it.]]></summary></entry><entry><title type="html">Miggy’s Journey to CS2 Competitive Gaming</title><link href="https://michaelpendon.com/posts/2026/07/miggy-cs2-competitive-gaming-journey/" rel="alternate" type="text/html" title="Miggy’s Journey to CS2 Competitive Gaming" /><published>2026-07-29T00:00:00+00:00</published><updated>2026-07-29T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/07/miggy-cs2-competitive-gaming-journey</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/07/miggy-cs2-competitive-gaming-journey/"><![CDATA[<p>Outside of code, one of my favorite roles these days is being my son Miggy’s CS2 coach. A few weeks back, we struck a deal: if he can pull off 5 top plays across Deathmatch and Casual modes, I would reward him with 70 USD toward his favorite Knife skin in CS2.</p>

<p><img src="/images/posts/2026-07/Son%20CS2%20Casual%20Game%202026-07-29.jpg" alt="Miggy CS2 Casual Game" /></p>

<p>Today he pulled off his 4th win, putting him just 1 win away from claiming the prize. He has been putting in real effort to sharpen his aim and game sense, and it clearly shows.</p>

<p>What really stood out was yesterday, when he easily topped the leaderboard in 5 straight Deathmatch games. Watching him grow more confident and consistent with every match has been a genuinely proud moment for me as his dad and coach.</p>

<p>One more win to go before that Knife skin is his. Rooting for you, Miggy!</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="family" /><category term="gaming" /><summary type="html"><![CDATA[Outside of code, one of my favorite roles these days is being my son Miggy’s CS2 coach. A few weeks back, we struck a deal: if he can pull off 5 top plays across Deathmatch and Casual modes, I would reward him with 70 USD toward his favorite Knife skin in CS2.]]></summary></entry><entry><title type="html">Pushing Hard for Oracle ODP Support for RepoDB</title><link href="https://michaelpendon.com/posts/2026/07/repodb-oracle-odp-push/" rel="alternate" type="text/html" title="Pushing Hard for Oracle ODP Support for RepoDB" /><published>2026-07-29T00:00:00+00:00</published><updated>2026-07-29T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/07/repodb-oracle-odp-push</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/07/repodb-oracle-odp-push/"><![CDATA[<p>For the past week, I have been heads-down working on bringing Oracle ODP (Oracle Data Provider for .NET) support to <a href="https://repodb.net">RepoDB</a>. Below is a screenshot from my local Docker setup, which I have been using throughout this effort to run and validate against an actual Oracle database instance.</p>

<p><img src="/images/posts/2026-07/RepoDB%20Docker%202026-07-25%20102527.png" alt="RepoDB Docker setup for Oracle" /></p>

<p>Along the way, I have run into a good number of use-cases that RepoDB does not yet fully support for Oracle. Things like handling Oracle-specific data types, dealing with its distinct bulk operation behavior, and adjusting the internal query builders to align with Oracle’s SQL dialect are all requiring careful, deliberate work.</p>

<p>It has not been a quick or straightforward process, but every issue I uncover is helping me shape a much more solid and reliable implementation. I am pushing hard to get this right, since Oracle support is a key step toward making RepoDB a truly viable choice for enterprise environments.</p>

<p>More updates to come as this progresses.</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="repodb" /><category term="oss" /><summary type="html"><![CDATA[For the past week, I have been heads-down working on bringing Oracle ODP (Oracle Data Provider for .NET) support to RepoDB. Below is a screenshot from my local Docker setup, which I have been using throughout this effort to run and validate against an actual Oracle database instance.]]></summary></entry><entry><title type="html">Passed Prøve i Dansk 2</title><link href="https://michaelpendon.com/posts/2026/07/passed-prove-dansk-2/" rel="alternate" type="text/html" title="Passed Prøve i Dansk 2" /><published>2026-07-25T00:00:00+00:00</published><updated>2026-07-25T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/07/passed-prove-dansk-2</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/07/passed-prove-dansk-2/"><![CDATA[<p>I am glad to share that last June 2026, I passed the Prøve i Dansk 2 (Danish 2) examination with a grade of 7, which I already consider high given the scale used. Below is the content of the email I received with my results.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Du har opnået følgende karakterer i Dansk 2

Læseforståelse:  7
Skriftlig fremstilling:   7
Mundtlig kommunikation:  7 

For at prøven anses som bestået, skal gennemsnittet af karaktererne være mindst 2,0 (karakteren i mundtlig kommunikation tæller dobbelt).

Dit gennemsnit er:  7,0
</code></pre></div></div>

<p>This is another milestone in my journey of learning the Danish language, and I am looking forward to continuing improving it.</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="self" /><category term="achievement" /><summary type="html"><![CDATA[I am glad to share that last June 2026, I passed the Prøve i Dansk 2 (Danish 2) examination with a grade of 7, which I already consider high given the scale used. Below is the content of the email I received with my results.]]></summary></entry><entry><title type="html">Working on RepoDB: Extending Support to the Oracle Data Provider</title><link href="https://michaelpendon.com/posts/2026/07/repodb-oracle-provider/" rel="alternate" type="text/html" title="Working on RepoDB: Extending Support to the Oracle Data Provider" /><published>2026-07-25T00:00:00+00:00</published><updated>2026-07-25T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/07/repodb-oracle-provider</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/07/repodb-oracle-provider/"><![CDATA[<p>Today, I spent time working on <a href="https://repodb.net">RepoDB</a>, extending its capability to support the Oracle data provider. Below is a screenshot of my local Docker setup while running and testing against an Oracle database instance.</p>

<p><img src="/images/posts/2026-07/RepoDB%20Docker%202026-07-25%20102527.png" alt="RepoDB Docker setup for Oracle" /></p>

<p>The motivation behind adding Oracle support is to expand the footprint of RepoDB across more database providers, laying the groundwork for future enterprise-level capabilities. As RepoDB continues to grow, being able to support widely used enterprise databases like Oracle is an important step toward making it a viable option for larger, more diverse production environments.</p>

<p>There is still more work ahead, but this is a solid step forward in broadening what RepoDB can do.</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="repodb" /><category term="oss" /><summary type="html"><![CDATA[Today, I spent time working on RepoDB, extending its capability to support the Oracle data provider. Below is a screenshot of my local Docker setup while running and testing against an Oracle database instance.]]></summary></entry><entry><title type="html">Publishing website for michaelpendon.com</title><link href="https://michaelpendon.com/posts/2026/07/introduce-self-site/" rel="alternate" type="text/html" title="Publishing website for michaelpendon.com" /><published>2026-07-21T00:00:00+00:00</published><updated>2026-07-21T00:00:00+00:00</updated><id>https://michaelpendon.com/posts/2026/07/introduce-self-site</id><content type="html" xml:base="https://michaelpendon.com/posts/2026/07/introduce-self-site/"><![CDATA[<p>I am happy to announce that I published this website to share to the world the public information of me. I hope you enjoy reading more <a href="/about">about me</a>.</p>]]></content><author><name>MICHAEL CAMARA PENDON</name><email>michael.c.pendon@outlook.com</email></author><category term="blog" /><category term="self" /><summary type="html"><![CDATA[I am happy to announce that I published this website to share to the world the public information of me. I hope you enjoy reading more about me.]]></summary></entry></feed>