<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Mariano Gonzalez</title>
		<link>https://mariano-gonzalez.com/</link>
		<description>Recent content on Mariano Gonzalez</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
			<copyright>&lt;p&gt;Copyright © 2026 Mariano Gonzalez&lt;/p&gt;&lt;p xmlns:dct=&#39;http://purl.org/dc/terms/&#39; xmlns:cc=&#39;http://creativecommons.org/ns#&#39; class=&#39;license-text&#39;&gt;&lt;a rel=&#39;cc:attributionURL&#39; property=&#39;dct:title&#39; href=&#39;https://github.com/eschizoid/eschizoid.github.io/tree/main/content&#39;&gt;Content&lt;/a&gt; licensed under &lt;a rel=&#39;license&#39; href=&#39;https://creativecommons.org/licenses/by/4.0&#39;&gt;CC BY 4.0&lt;/a&gt;&lt;/p&gt;</copyright>
		
		
			<lastBuildDate>Wed, 22 Jul 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://mariano-gonzalez.com/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Fast is the easy part. Here is why you can trust KPipe with your offsets.</title>
				<link>https://mariano-gonzalez.com/posts/post-9/</link>
				<pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-9/</guid>
				<description>&lt;p&gt;&lt;p class=&#34;md__image&#34;&gt;&#xA;    &lt;img src=&#34;logo.png&#34; alt=&#34;kpipe&#34;  /&gt;&#xA;&lt;/p&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;KPipe, part 3 of 3: &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-4/&#34;&gt;a simpler way to structure consumers&lt;/a&gt; · &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-5/&#34;&gt;the first benchmarks&lt;/a&gt; · &lt;strong&gt;fast is the easy part&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Last time I benchmarked KPipe I ended with a warning about my own numbers. Single runs moved 5 to&#xA;40 percent between iterations. There was no latency-percentile data. I told you to read the&#xA;percentages as one-sigma indicators and not to quote the absolute throughput at anyone.&lt;/p&gt;&#xA;&lt;p&gt;That was the honest thing to say at the time, and it was also a promissory note. This post is me&#xA;paying it. The numbers here come from a quiesced machine - no browser, no IDE indexing, on mains&#xA;power - with five JMH forks instead of one, the full &lt;code&gt;workMicros&lt;/code&gt; sweep out to 100 ms per record,&#xA;and latency percentiles alongside. The raw JSON and a dated markdown snapshot are committed in&#xA;&lt;a href=&#34;https://github.com/eschizoid/kpipe/tree/main/benchmarks/results&#34;&gt;&lt;code&gt;benchmarks/results/&lt;/code&gt;&lt;/a&gt; as always. Where the last post had ±5-40% error bars, this&#xA;one has ±0.1-6% on nearly every cell.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What did your mapper actually do? Now you can ask it.</title>
				<link>https://mariano-gonzalez.com/posts/post-8/</link>
				<pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-8/</guid>
				<description>&lt;p&gt;&lt;p class=&#34;md__image&#34;&gt;&#xA;    &lt;img src=&#34;logo.png&#34; alt=&#34;telescope&#34;  /&gt;&#xA;&lt;/p&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Telescope, part 3 of 3: &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-6/&#34;&gt;how it got built&lt;/a&gt; · &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-7/&#34;&gt;why your mappings should not be strings&lt;/a&gt; · &lt;strong&gt;asking your mapper what it did&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;the-setup&#34;&gt;The setup&lt;/h2&gt;&#xA;&lt;p&gt;A field arrives &lt;code&gt;null&lt;/code&gt; in production. The mapper between your entity and your DTO is the suspect,&#xA;and now you get to answer a simple question: what did it actually map?&lt;/p&gt;&#xA;&lt;p&gt;If the mapper is &lt;a href=&#34;https://mapstruct.org/&#34;&gt;MapStruct&lt;/a&gt;, the answer lives in one place: the generated&#xA;&lt;code&gt;*MapperImpl.java&lt;/code&gt; under &lt;code&gt;build/generated&lt;/code&gt;. You open it, you read the assignments, you diff what you&#xA;read against what you meant. If the question is about a specific request — which values went in,&#xA;which came out — generated source cannot answer it at all; you add a breakpoint or a log line,&#xA;redeploy, and wait for the bug to happen again.&lt;/p&gt;</description>
			</item>
			<item>
				<title>It is 2026. Why are your object mappings still strings?</title>
				<link>https://mariano-gonzalez.com/posts/post-7/</link>
				<pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-7/</guid>
				<description>&lt;p&gt;&lt;p class=&#34;md__image&#34;&gt;&#xA;    &lt;img src=&#34;logo.png&#34; alt=&#34;telescope&#34;  /&gt;&#xA;&lt;/p&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Telescope, part 2 of 3: &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-6/&#34;&gt;how it got built&lt;/a&gt; · &lt;strong&gt;why your mappings should not be strings&lt;/strong&gt; · &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-8/&#34;&gt;asking your mapper what it did&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update, July 2026.&lt;/strong&gt; Since this went out, telescope grew the thing this post could not claim:&#xA;mappers that are no longer black boxes. &lt;code&gt;mapper.explain()&lt;/code&gt; returns the mapping structure as data,&#xA;&lt;code&gt;mapper.trace(input)&lt;/code&gt; shows the values flowing through, and flipping a log level makes every&#xA;conversion narrate itself. The claims below also have receipts now: a&#xA;&lt;a href=&#34;https://github.com/eschizoid/telescope/blob/main/docs/mapstruct-parity.md&#34;&gt;feature-by-feature parity matrix&lt;/a&gt;&#xA;covering 29 MapStruct features (none missing, every verdict with evidence) and a&#xA;&lt;a href=&#34;https://github.com/eschizoid/telescope/blob/main/docs/mapstruct-migration.md&#34;&gt;migration guide&lt;/a&gt;.&#xA;A follow-up post will do those justice. The baseline moved too: telescope now requires Java 21.&lt;/p&gt;</description>
			</item>
			<item>
				<title>From a Monocle port to one fluent type: how Telescope happened</title>
				<link>https://mariano-gonzalez.com/posts/post-6/</link>
				<pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-6/</guid>
				<description>&lt;p&gt;Telescope is a Java deep-copy DSL for records and POJOs. You build a path through an immutable&#xA;graph, then read it, write it, update it, traverse it, convert it, or thread an effect through it.&#xA;No hand-written copy constructors. No mention of &lt;code&gt;Iso&lt;/code&gt;, &lt;code&gt;Lens&lt;/code&gt;, &lt;code&gt;Prism&lt;/code&gt;, &lt;code&gt;Affine&lt;/code&gt;, or &lt;code&gt;Traversal&lt;/code&gt;&#xA;anywhere in your code. The end-state is one method-ref chain on the runtime DSL, or one fluent&#xA;chain on the generated navigator. Both bottom out at the same value:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Benchmarking KPipe against the parallel-Kafka libraries you would actually pick</title>
				<link>https://mariano-gonzalez.com/posts/post-5/</link>
				<pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-5/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;KPipe, part 2 of 3: &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-4/&#34;&gt;a simpler way to structure consumers&lt;/a&gt; · &lt;strong&gt;the first benchmarks&lt;/strong&gt; · &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-9/&#34;&gt;fast is the easy part&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update, July 2026.&lt;/strong&gt; The two caveats at the bottom of this post - single-run variance of 5-40%,&#xA;no latency-percentile data - are now closed. &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-9/&#34;&gt;Part 3&lt;/a&gt; re-runs everything on a&#xA;quiesced box at five JMH forks with ±0.1-6% error bars and the full 0-100ms sweep, where the gap&#xA;over Confluent Parallel Consumer widens to 41x, and adds the correctness half this post never&#xA;touched: the at-least-once guarantee under jcstress. The numbers below are the first, rougher cut -&#xA;read them as the start of the story, not the last word.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kafka consumers get messy fast. KPipe is a simpler way to structure them.</title>
				<link>https://mariano-gonzalez.com/posts/post-4/</link>
				<pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-4/</guid>
				<description>&lt;p&gt;Kafka consumers start simple.&lt;/p&gt;&#xA;&lt;p&gt;Then they turn into tightly coupled, hard-to-test, side-effect-heavy code.&lt;/p&gt;&#xA;&lt;p&gt;I built KPipe to fix that.&lt;/p&gt;&#xA;&lt;p&gt;&lt;p class=&#34;md__image&#34;&gt;&#xA;    &lt;img src=&#34;logo.png&#34; alt=&#34;kpipe&#34;  /&gt;&#xA;&lt;/p&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;KPipe, part 1 of 3: &lt;strong&gt;a simpler way to structure consumers&lt;/strong&gt; · &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-5/&#34;&gt;the first benchmarks&lt;/a&gt; · &lt;a href=&#34;https://mariano-gonzalez.com/posts/post-9/&#34;&gt;fast is the easy part&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/eschizoid/kpipe&#34;&gt;GitHub repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;external-write-ups&#34;&gt;External write-ups&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://topicigor.substack.com/p/kpipe-a-modern-high-performance-kafka&#34;&gt;KPipe: A Modern, High-Performance Kafka Consumer in Java — Powered by Java 25 Features&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://rmoff.net/2026/05/28/interesting-links-may-2026/&#34;&gt;Interesting links — May 2026&lt;/a&gt; — mentions KPipe in the context of Kafka consumer libraries&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;what-it-looks-like&#34;&gt;What it looks like&lt;/h2&gt;&#xA;&lt;p&gt;The 80% path is a fluent facade. Five lines from &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Supercharge SageMaker with Embeddings</title>
				<link>https://mariano-gonzalez.com/posts/post-3/</link>
				<pubDate>Sat, 13 May 2023 15:50:53 -0500</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-3/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Deep Lake serves as a vector database that can integrate with Amazon SageMaker, allowing the storage of embeddings which&#xA;are vector representations of data used in deep learning models. By leveraging Deep Lake&amp;rsquo;s vector database capabilities,&#xA;developers can accelerate the training and deployment of their deep learning models. In this blog post, we will explore&#xA;the details of this integration and how the use of vector databases can enhance the performance and accuracy of deep&#xA;learning models.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction to MLOps With SageMaker: Running your First LLM</title>
				<link>https://mariano-gonzalez.com/posts/post-2/</link>
				<pubDate>Wed, 26 Apr 2023 17:27:40 -0500</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-2/</guid>
				<description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;As the field of machine learning advances, it has become increasingly important for organizations to develop robust&#xA;practices for managing their workflows. That&amp;rsquo;s where MLOps comes in - a set of best practices and tools for managing the&#xA;entire lifecycle of machine learning models, from development to deployment and beyond.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post, we&amp;rsquo;ll delve into how MLOps practices can be leveraged to deploy an LLM&#xA;in &lt;a href=&#34;https://aws.amazon.com/sagemaker/&#34;&gt;AWS SageMaker&lt;/a&gt;, using the&#xA;popular &lt;a href=&#34;https://github.com/aws/sagemaker-huggingface-inference-toolkit&#34;&gt;Hugging Face Transformers library&lt;/a&gt;. We&amp;rsquo;ll cover&#xA;everything from setting up an end-to-end pipeline for deploying a Large Language Model on SageMaker, to monitoring its&#xA;performance.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hello World</title>
				<link>https://mariano-gonzalez.com/posts/post-1/</link>
				<pubDate>Fri, 07 Apr 2023 14:00:00 -0500</pubDate>
				<guid>https://mariano-gonzalez.com/posts/post-1/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m a scala developer by trade, so let&amp;rsquo;s say hello in rust!&lt;/p&gt;&#xA;&lt;figure class=&#34;highlight&#34;&gt;&#xA;    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&#xA;    &gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ff7b72&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#d2a8ff;font-weight:bold&#34;&gt;main&lt;/span&gt;()&lt;span style=&#34;color:#6e7681&#34;&gt; &lt;/span&gt;{&lt;span style=&#34;color:#6e7681&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#6e7681&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#d2a8ff;font-weight:bold&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#a5d6ff&#34;&gt;&amp;#34;Hello World!&amp;#34;&lt;/span&gt;);&lt;span style=&#34;color:#6e7681&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/figure&gt;</description>
			</item>
			<item>
				<title>About</title>
				<link>https://mariano-gonzalez.com/about/</link>
				<pubDate>Fri, 07 Apr 2023 13:58:29 -0500</pubDate>
				<guid>https://mariano-gonzalez.com/about/</guid>
				<description>&lt;p&gt;I code by day and toy around with computers by night&amp;hellip;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
