<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Go on Nicole van der Hoeven</title><link>https://nicolevanderhoeven.com/tags/go/</link><description>Recent content in Go on Nicole van der Hoeven</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Nicole van der Hoeven</copyright><lastBuildDate>Wed, 02 Apr 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://nicolevanderhoeven.com/tags/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Asimov</title><link>https://nicolevanderhoeven.com/projects/asimov/</link><pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate><guid>https://nicolevanderhoeven.com/projects/asimov/</guid><description>&lt;p&gt;&lt;strong&gt;Asimov&lt;/strong&gt; is the companion project to my talk &lt;em&gt;Asimov&amp;rsquo;s Zeroth Law of Robotics&lt;/em&gt;. It&amp;rsquo;s an AI app built to be observed and tested: &lt;strong&gt;The Silent Enterprise&lt;/strong&gt;, a single-player Star Trek text adventure. You play Data, and Claude is the game master. Every model call, dice roll, and turn shows up as telemetry in a Grafana that you can run on your own machine or in Grafana Cloud, and a k6 test suite, some of it judged by Claude, checks whether the AI follows the rules.&lt;/p&gt;
&lt;p&gt;The game master has some known flaws, kept on purpose. It sometimes narrates a rescue that didn&amp;rsquo;t happen, or &amp;ldquo;destroys&amp;rdquo; a drone that&amp;rsquo;s still standing. The point of the demo is catching those flaws with telemetry, tests, and online evaluators.&lt;/p&gt;
&lt;h2 id="the-idea"&gt;The idea&lt;/h2&gt;
&lt;p&gt;Isaac Asimov&amp;rsquo;s three Laws of Robotics govern how robots behave. The talk argues for a law that comes before all of them: a robot must be observable, and, in its newest version, testable. AI systems fail differently from traditional software. There&amp;rsquo;s no single correct output to assert against, a response can be fluent and completely wrong, and models drift. You can&amp;rsquo;t test what you can&amp;rsquo;t see, and you can&amp;rsquo;t trust what you can&amp;rsquo;t test.&lt;/p&gt;
&lt;h2 id="whats-in-it"&gt;What&amp;rsquo;s in it&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The game.&lt;/strong&gt; A Go program with a command-line interface and an HTTP API. The game engine owns the rules and the state. Claude interprets the player&amp;rsquo;s input, makes the game master&amp;rsquo;s own rolls through a tool, and narrates, so a narration that contradicts the saved state is a defect that can be caught.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Telemetry.&lt;/strong&gt; Traces, metrics, and logs go over OpenTelemetry to a local Grafana stack (Tempo, Prometheus, and Loki, with the game&amp;rsquo;s dashboard already loaded) or to Grafana Cloud. Generations can also go to Grafana Cloud&amp;rsquo;s Agent Observability, where online evaluators judge a sample of them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tests.&lt;/strong&gt; A k6 suite with code checks, LLM judges, dice-trajectory evals, and whole playthroughs. All of it can run for free against a mock game master and judge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No account needed to start.&lt;/strong&gt; You can play offline with no API key, and see the local monitoring stack with one command and Docker.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The screenshot above is the game&amp;rsquo;s local Grafana dashboard.&lt;/p&gt;
&lt;h2 id="the-talks"&gt;The talks&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve given the talk, in several versions, at KubeCon Europe 2025, Dutch Cloud Native Day 2025, Newcrafts 2025, ExpoQA Madrid 2026, and HUSTEF 2026. The write-ups are linked below. The earlier talks used a Python and Flask version of the app, which has since been rewritten in Go.&lt;/p&gt;
&lt;h2 id="try-it"&gt;Try it&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/nicolevanderhoeven/asimov"&gt;repository&lt;/a&gt; has a quick start for playing offline, a Docker-only path, and release binaries for Windows, macOS, and Linux.&lt;/p&gt;</description></item><item><title>Making k6 extensions using xk6, with Iván Szkiba and Mihail Stoykov (k6 Office Hours)</title><link>https://nicolevanderhoeven.com/blog/20210604-koh-ivan/</link><pubDate>Sat, 05 Jun 2021 22:28:29 +0200</pubDate><guid>https://nicolevanderhoeven.com/blog/20210604-koh-ivan/</guid><description>&lt;p&gt;This week on k6 Office Hours, &lt;a href="https://simme.dev"&gt;Simme&lt;/a&gt; and I were joined by &lt;a href="https://twitter.com/szkiba"&gt;Iván Szkiba&lt;/a&gt; and &lt;a href="https://twitter.com/MStoykov"&gt;Mihail Stoykov&lt;/a&gt; to talk all about extensions. Iván, who is a System Architect at NNG LLC, is the most active k6 extension creator outside of the k6 team. Mihail is a software engineer at k6, and one third of the k6 OSS team.&lt;/p&gt;
&lt;p&gt;We talked about the many extensions Iván has created for k6 so that he can incorporate k6 into his team&amp;rsquo;s daily testing activities, his considerations for creating extensions, and how he got started. Mihail also shares some inside information on why certain decisions were made about the way k6 is structured, and common mistakes he sees people make in their custom extensions.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/I-NtzkxdzyA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;</description></item></channel></rss>