<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>blog.lvmbdv.dev on Ata Kuyumcu's Blog</title><link>https://blog.lvmbdv.dev/</link><description>Recent content in blog.lvmbdv.dev on Ata Kuyumcu's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sat, 22 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.lvmbdv.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>The smartest man on the cinder</title><link>https://blog.lvmbdv.dev/posts/the-smartest-man-on-the-cinder/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/the-smartest-man-on-the-cinder/</guid><description>&lt;p&gt;There&amp;rsquo;s a scene in &lt;a href="https://en.wikiquote.org/wiki/Watchmen_(film)"&gt;Watchmen&lt;/a&gt;
where the Comedian sets fire to a map of the United States and tells the room
that none of it matters, the nukes are coming, we&amp;rsquo;ll all be dust. Then he points
at Adrian Veidt, who has just told the room they can save the world, and says
Ozymandias here will be the smartest man on the cinder.&lt;/p&gt;
&lt;p&gt;Best line in the film. It has almost nothing to do with nuclear war.&lt;/p&gt;</description></item><item><title>Sixty days of dailyprog</title><link>https://blog.lvmbdv.dev/posts/sixty-days-of-dailyprog/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/sixty-days-of-dailyprog/</guid><description>&lt;p&gt;&lt;a href="https://dailyprog.club"&gt;dailyprog&lt;/a&gt; has published a puzzle every day since 19
June. Sixty days, sixty puzzles, no gaps. Eleven more are already written and
sitting in the catalogue, with &lt;a href="https://blog.lvmbdv.dev/posts/the-puzzle-safety-net/"&gt;the safety net&lt;/a&gt;
to catch any gaps.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s long enough that the analytics say something. Not all of it is
flattering.&lt;/p&gt;
&lt;h2 id="the-numbers"&gt;The numbers&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Visitors&lt;/td&gt;
					&lt;td&gt;1,589&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Visits&lt;/td&gt;
					&lt;td&gt;2,522&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Pageviews&lt;/td&gt;
					&lt;td&gt;8,357&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Solve submissions&lt;/td&gt;
					&lt;td&gt;739&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Passing&lt;/td&gt;
					&lt;td&gt;470 (63.6%)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Puzzles shipped&lt;/td&gt;
					&lt;td&gt;60&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Languages&lt;/td&gt;
					&lt;td&gt;6&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Growth is nothing to write home about, but steady. Eleven days ago it was 1,372
visitors, so the site adds around 140 a week without me doing much to make that
happen. It&amp;rsquo;s not even indexed by a search engine yet. There&amp;rsquo;s no launch spike
left in these numbers, so whatever this is, it&amp;rsquo;s the baseline.&lt;/p&gt;</description></item><item><title>Open-sourcing a puzzle site without leaking the puzzles</title><link>https://blog.lvmbdv.dev/posts/open-sourcing-a-puzzle-site-without-leaking-the-puzzles/</link><pubDate>Sun, 16 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/open-sourcing-a-puzzle-site-without-leaking-the-puzzles/</guid><description>&lt;p&gt;I made &lt;a href="https://dailyprog.club"&gt;dailyprog&lt;/a&gt; public. The code is
&lt;a href="https://codeberg.org/dailyprog/dailyprog.club"&gt;on Codeberg&lt;/a&gt; now, under
&lt;a href="https://www.gnu.org/licenses/agpl-3.0.en.html"&gt;AGPL-3.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The license was the easy decision. The problem was everything the code needs to
run. A puzzle site&amp;rsquo;s whole point is the puzzles, and the puzzle files carry the
hidden tests, the ones you only get graded against after you submit. Publish the
catalogue and you&amp;rsquo;ve published every answer, plus every puzzle I haven&amp;rsquo;t shipped
yet. So the repo can&amp;rsquo;t just go public. Most of it can. A slice of it can&amp;rsquo;t, and
that slice is the &amp;ldquo;added value&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Nobody has reached the bottom (yet)</title><link>https://blog.lvmbdv.dev/posts/nobody-has-reached-the-bottom/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/nobody-has-reached-the-bottom/</guid><description>&lt;div class="my-6 rounded-lg border border-amber-200 bg-amber-50 px-5 py-4 text-sm leading-relaxed text-amber-950 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-100 [&amp;_a]:text-amber-800 [&amp;_a]:underline dark:[&amp;_a]:text-amber-300" role="note"&gt;&lt;strong class="font-semibold"&gt;Update, 2026-08-13&lt;/strong&gt;&lt;br&gt;The title lasted eight hours. Four sessions have reached depth 13, and all four
walked back out through the arch with their gold: 178, 252, 273 and 635. The
rest of the post is left as it was.
&lt;/div&gt;

&lt;p&gt;The dungeon under this blog has a bottom now. Depth 13, with a sensible end to
the gameplay loop. The rest of this post is three-ish days of analytics from
&lt;a href="https://blog.lvmbdv.dev/posts/theres-a-dungeon-under-this-blog/"&gt;the dungeon&lt;/a&gt;, and the caveats are at
the end because they matter more than usual.&lt;/p&gt;</description></item><item><title>There's a dungeon under this blog</title><link>https://blog.lvmbdv.dev/posts/theres-a-dungeon-under-this-blog/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/theres-a-dungeon-under-this-blog/</guid><description>&lt;div class="my-6 rounded-lg border border-amber-200 bg-amber-50 px-5 py-4 text-sm leading-relaxed text-amber-950 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-100 [&amp;_a]:text-amber-800 [&amp;_a]:underline dark:[&amp;_a]:text-amber-300" role="note"&gt;&lt;strong class="font-semibold"&gt;There&amp;#39;s a follow-up&lt;/strong&gt;&lt;br&gt;The dungeon has a bottom now, at depth 13. I also pulled three days of numbers
out of it: how people got in, where they die, and whether two strangers ever
found each other down there.
&lt;a href="https://blog.lvmbdv.dev/posts/nobody-has-reached-the-bottom/"&gt;Nobody has reached the bottom (yet)&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;There&amp;rsquo;s a dungeon under this blog, every page of it. Find the way in and you get
a little pixel character (a knight, a wizard, a princess etc; it depends on a
hash of your peer id) standing in a sunlit village square. Through the stone
arch north of the well, a procedural dungeon crawl: monsters, potions, chests
that sometimes have teeth. If someone else is reading the blog right now, they
can join in the same village, the same dungeon. You can watch them wander. You
can shout at each other.&lt;/p&gt;</description></item><item><title>Tests for a PDF</title><link>https://blog.lvmbdv.dev/posts/tests-for-a-pdf/</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/tests-for-a-pdf/</guid><description>&lt;p&gt;My CV has a test suite. This is either reasonable or a symptom.&lt;/p&gt;
&lt;p&gt;The excuse is that I&amp;rsquo;m not the first reader. An applicant tracking system is,
and it wants text. Every visual decision in the document (the font, the margins,
where the dates sit) is invisible to it. The only thing it can see is whatever
&lt;code&gt;pdftotext&lt;/code&gt; scrapes off the page.&lt;/p&gt;</description></item><item><title>The fediverse was right</title><link>https://blog.lvmbdv.dev/posts/the-fediverse-was-right/</link><pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/the-fediverse-was-right/</guid><description>&lt;p&gt;I use &lt;a href="https://joinmastodon.org/"&gt;Mastodon&lt;/a&gt; on and off but I would not trade it
for any alternative atm. Not because it&amp;rsquo;s better than Twitter was, the
discoverability is worse, the reply threading is too complex at times, and it
does have sync issues across instances. What it does have is something no
corporate platform will ever offer: you can leave and take your social graph
with you. Your followers, your follows, your block lists. Pack them up, point
your domain at a different server, done.&lt;/p&gt;</description></item><item><title>The dailyprog puzzle safety net</title><link>https://blog.lvmbdv.dev/posts/the-puzzle-safety-net/</link><pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/the-puzzle-safety-net/</guid><description>&lt;p&gt;&lt;a href="https://dailyprog.club"&gt;dailyprog&lt;/a&gt; needs a new puzzle every day. I wrote the
first few drafts by hand, then built
&lt;a href="https://blog.lvmbdv.dev/posts/generating-coding-puzzles-with-llms/"&gt;a generator&lt;/a&gt; that writes them with
an LLM and validates the output against real sandbox execution. The generator
works, but it still needs someone to run it. Pick a pattern, kick off the
script, review the result, commit. Fifteen minutes on a good day. More if the
model gets stuck in a repair loop and I need to nudge it.&lt;/p&gt;</description></item><item><title>Adding Go to a browser code runner</title><link>https://blog.lvmbdv.dev/posts/adding-go-to-a-browser-code-runner/</link><pubDate>Fri, 10 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/adding-go-to-a-browser-code-runner/</guid><description>&lt;p&gt;&lt;a href="https://dailyprog.club"&gt;dailyprog&lt;/a&gt; (the daily coding puzzle site,
&lt;a href="https://blog.lvmbdv.dev/posts/generating-coding-puzzles-with-llms/"&gt;previously&lt;/a&gt;) started with
JavaScript. Then Python, then C. Each new language was a different kind of
project. Python needed &lt;a href="https://pyodide.org"&gt;Pyodide&lt;/a&gt;. C needed a
&lt;a href="https://gitlab.com/zsaleeba/picoc"&gt;PicoC&lt;/a&gt; WASM binary and a custom harness for
printf output. Go was supposed to be the fourth. Every Go-to-WASM tutorial
points at the same path, so I took it.&lt;/p&gt;
&lt;p&gt;It was the wrong one.&lt;/p&gt;
&lt;h2 id="the-path-everyone-takes-goosjs"&gt;The path everyone takes: GOOS=js&lt;/h2&gt;
&lt;p&gt;Compiling Go to WASM for the browser means setting &lt;code&gt;GOOS=js GOARCH=wasm&lt;/code&gt;. Go
ships two pieces for this: a compiler target that produces WASM with a
JavaScript syscall bridge, and
&lt;a href="https://go.dev/wiki/WebAssembly"&gt;&lt;code&gt;wasm_exec.js&lt;/code&gt;&lt;/a&gt;, a support file that
implements the Go runtime&amp;rsquo;s expectations on the JS side. You load wasm_exec.js,
you call &lt;code&gt;WebAssembly.instantiate()&lt;/code&gt;, the Go runtime boots, and your program
runs.&lt;/p&gt;</description></item><item><title>Building a passive Ethernet tap</title><link>https://blog.lvmbdv.dev/posts/building-a-passive-ethernet-tap/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/building-a-passive-ethernet-tap/</guid><description>&lt;p&gt;I saw this &lt;a href="https://greatscottgadgets.com/throwingstar/"&gt;cool ethernet tap&lt;/a&gt; and
thought it would be cool to see how chatty my &amp;ldquo;smart&amp;rdquo; TV is. But I didn&amp;rsquo;t want
to pay €39 for it. So I made a clone on mini breadboards.&lt;/p&gt;</description></item><item><title>Generating coding puzzles with LLMs</title><link>https://blog.lvmbdv.dev/posts/generating-coding-puzzles-with-llms/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/generating-coding-puzzles-with-llms/</guid><description>&lt;p&gt;I have been working on this daily coding puzzle site
&lt;a href="https://dailyprog.club"&gt;dailyprog&lt;/a&gt;. It&amp;rsquo;s like Wordle for programming problems.
Each day you get one puzzle with a short narrative, a function stub, and a set
of visible test cases. You write a solution, run it locally against the visible
tests, then submit to verify against hidden tests on the server. There are four
languages atm (JavaScript, Python, C, Go), visual output for some puzzles, and a
share link so you can signal your &lt;em&gt;competency&lt;/em&gt; to your &lt;em&gt;friends&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Revisiting server hardening</title><link>https://blog.lvmbdv.dev/posts/revisiting-server-hardening/</link><pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/revisiting-server-hardening/</guid><description>&lt;p&gt;Two months ago I wrote down
&lt;a href="https://blog.lvmbdv.dev/posts/hardening-a-fresh-linux-install/"&gt;my baseline for hardening a fresh Linux install&lt;/a&gt;.
Non-root user, SSH lockdown, UFW, fail2ban, unattended-upgrades, the Docker
firewall hole. It was fine as far as it went. But it didn&amp;rsquo;t go far enough.&lt;/p&gt;
&lt;p&gt;Last week I spun up a new VPS (Debian 13 this time, not Ubuntu) and found six
I&amp;rsquo;d missed the first time around. Post-quantum SSH is also ready and takes one
config line.&lt;/p&gt;</description></item><item><title>Rebuilding my blog with machines, for machines</title><link>https://blog.lvmbdv.dev/posts/rebuilding-my-blog-with-machines-for-machines/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/rebuilding-my-blog-with-machines-for-machines/</guid><description>&lt;p&gt;I rebuilt this blog recently. Not a redesign. The old posts are still here, same
URLs, same markup. What changed is that every page now carries a full structured
data graph and every element is annotated with
&lt;a href="https://microformats.org/"&gt;microformats&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="structured-data-that-pulls-its-weight"&gt;Structured data that pulls its weight&lt;/h2&gt;
&lt;p&gt;Every page gets a &lt;a href="https://json-ld.org/"&gt;JSON-LD&lt;/a&gt; block in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;. Not a
plugin. A 120-line Hugo partial that builds a &lt;code&gt;@graph&lt;/code&gt; depending on what kind of
page it is. The partial is mostly a big conditional: &lt;code&gt;if .IsHome&lt;/code&gt; does one
thing, &lt;code&gt;if .IsPage&lt;/code&gt; and &lt;code&gt;.Section &amp;quot;posts&amp;quot;&lt;/code&gt; does another, &lt;code&gt;if .IsSection&lt;/code&gt; or
&lt;code&gt;.Kind &amp;quot;term&amp;quot;&lt;/code&gt; does a third. Each branch appends its nodes to a slice, then the
whole thing gets serialized and dropped into a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag.&lt;/p&gt;</description></item><item><title>Autopsying a SanDisk Extreme SSD</title><link>https://blog.lvmbdv.dev/posts/sandisk-extreme-ssd-autopsy/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/sandisk-extreme-ssd-autopsy/</guid><description>&lt;p&gt;I was planning a backup setup and dug an old SanDisk Extreme Portable SSD out of
a drawer. Plugged it in, nothing.&lt;/p&gt;
&lt;p&gt;Well, not nothing. &lt;code&gt;dmesg&lt;/code&gt; saw a USB device. &lt;code&gt;sg_inq&lt;/code&gt; got a polite response from
the bridge chip, but the kernel logged &amp;ldquo;Media removed, stopped polling&amp;rdquo; and the
block device reported zero bytes. The USB-to-NVMe bridge chip was alive and as
chatty. The SSD behind it was gone.&lt;/p&gt;
&lt;p&gt;The SanDisk Extreme has a reputation by now. You probably know it if you follow
hardware news. I didn&amp;rsquo;t just want to read about the failure though, I wanted to
see it.&lt;/p&gt;</description></item><item><title>Balancing an MMO economy with a black market</title><link>https://blog.lvmbdv.dev/posts/albions-black-market-as-a-balance-mechanism/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/albions-black-market-as-a-balance-mechanism/</guid><description>&lt;p&gt;Albion Online has a cool design constraint that sounds absurd when you say it
out loud: every item in the game is player-crafted. There are no NPC vendors
selling gear. The world produces nothing on its own except raw resources. The
whole sandbox is built on top of that constraint.&lt;/p&gt;
&lt;p&gt;But Albion also has mobs that drop loot. You go fight a heretic, you sometimes
get a T4 bag. So somebody has to have crafted that bag. Where does it come from?&lt;/p&gt;</description></item><item><title>Hardening a fresh Linux install</title><link>https://blog.lvmbdv.dev/posts/hardening-a-fresh-linux-install/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/hardening-a-fresh-linux-install/</guid><description>&lt;p&gt;I&amp;rsquo;ve been running a small Hetzner VPS for a while now and every time I spin up a
new one I find myself re-deriving the same baseline. This is that baseline,
written down so I stop re-deriving it and so you can steal it. It assumes Ubuntu
24.04 LTS on a Hetzner VPS, but most things hardly change over the years, or
between platforms. None of this is exhaustive, there&amp;rsquo;s no AppArmor profiling, no
AIDE, but it gets you to a point where you won&amp;rsquo;t be embarrassed if someone runs
&lt;code&gt;nmap&lt;/code&gt; at you.&lt;/p&gt;</description></item><item><title>Building custom commands in Bevy</title><link>https://blog.lvmbdv.dev/posts/custom-commands-in-bevy-with-extension-traits/</link><pubDate>Thu, 25 Feb 2021 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/custom-commands-in-bevy-with-extension-traits/</guid><description>&lt;div class="my-6 rounded-lg border border-amber-200 bg-amber-50 px-5 py-4 text-sm leading-relaxed text-amber-950 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-100 [&amp;_a]:text-amber-800 [&amp;_a]:underline dark:[&amp;_a]:text-amber-300" role="note"&gt;&lt;strong class="font-semibold"&gt;Historical context&lt;/strong&gt;&lt;br&gt;This post was written for Bevy 0.4 in February 2021. Bevy is now on 0.15+ and
the APIs have changed significantly. The extension trait pattern is still valid
Rust, but the specific &lt;code&gt;Commands&lt;/code&gt;, &lt;code&gt;Command&lt;/code&gt;, and &lt;code&gt;Bundle&lt;/code&gt; APIs in Bevy have
evolved since. For current documentation, see
&lt;a href="https://bevyengine.org"&gt;bevyengine.org&lt;/a&gt; and
&lt;a href="https://docs.rs/bevy/latest/bevy/"&gt;docs.rs/bevy&lt;/a&gt;.
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://bevyengine.org"&gt;Bevy&lt;/a&gt; is an ECS-based game engine built in Rust.
&lt;a href="https://rust-lang.github.io/rfcs/0445-extension-trait-conventions.html"&gt;Extension traits&lt;/a&gt;
are a pattern in rust that allows you to add methods to an existing type defined
outside of your crate. You can probably guess where I&amp;rsquo;m going with this.&lt;/p&gt;</description></item><item><title>Setting up remote backups with Restic</title><link>https://blog.lvmbdv.dev/posts/remote-backups-with-restic/</link><pubDate>Tue, 22 Oct 2019 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/remote-backups-with-restic/</guid><description>&lt;p&gt;Restic is a program that greatly simplifies the process of encrypted,
incremental backups. Backblaze B2 is a
&lt;a href="https://www.backblaze.com/b2/cloud-storage-pricing.html"&gt;pretty cheap&lt;/a&gt; cloud
storage service that restic happens to support as a data storage backend. The
first 10 GB of storage is free, which is plenty for storing configuration files
and some source code.&lt;/p&gt;</description></item><item><title>Working through the SICP exercises</title><link>https://blog.lvmbdv.dev/posts/sicp-exercises-chapter-1-part-1/</link><pubDate>Tue, 20 Nov 2018 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/sicp-exercises-chapter-1-part-1/</guid><description>&lt;p&gt;I started reading through
&lt;a href="https://web.mit.edu/alexmv/6.037/sicp.pdf"&gt;&amp;ldquo;Structure and Interpretation of Computer Programs&amp;rdquo;&lt;/a&gt;
and thought it would be a good idea to publish my progress here. Here are my
solutions for the first ten exercises in the book.&lt;/p&gt;</description></item><item><title>I did a few things at STM CTF 2018 Prelims</title><link>https://blog.lvmbdv.dev/posts/i-did-a-few-things-at-stm-ctf-2018-prelims/</link><pubDate>Mon, 01 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/i-did-a-few-things-at-stm-ctf-2018-prelims/</guid><description>&lt;p&gt;Here are a few challenges I chose to write about from the preliminary for STM
CTF 2018 which will take place in Ankara at Oct 31. I want to thank the STM team
for a fun and smooth CTF experience. I started competing in CTFs about half a
year ago and I heard good things about STM CTF 2017. I hope I can attend this
year :)&lt;/p&gt;</description></item><item><title>I did a thing at Harekaze CTF 2018</title><link>https://blog.lvmbdv.dev/posts/i-did-a-thing-at-harekaze-2018/</link><pubDate>Thu, 01 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/i-did-a-thing-at-harekaze-2018/</guid><description>&lt;p&gt;I participated in DKHOS alongside bloodlust (formerly yubitsec) this year but
this post is not about that. While we were waiting for DKHOS to start at
midnight, we decided to warm up with another CTF that was going on at the time.
That CTF was Harekaze 2018.&lt;/p&gt;</description></item><item><title>I did a thing at TU CTF 2017</title><link>https://blog.lvmbdv.dev/posts/i-did-a-thing-at-tu-ctf-2017/</link><pubDate>Mon, 04 Dec 2017 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/posts/i-did-a-thing-at-tu-ctf-2017/</guid><description>&lt;p&gt;It was called “The Neverending Crypto”. I don’t remember what difficulty level
it was listed at, probably the lowest :) Here is how it went.&lt;/p&gt;
&lt;p&gt;You are presented with an address and a port number. When you connect, you are
asked to enter a string. The string you entered is encrypted and sent back to
you. After a few tries, I realize it’s encrypted with a Caesar cipher.&lt;/p&gt;</description></item><item><title>About</title><link>https://blog.lvmbdv.dev/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.lvmbdv.dev/about/</guid><description>&lt;p&gt;I&amp;rsquo;m Ata. Software Engineer, Amsterdam area.&lt;/p&gt;
&lt;p&gt;I spent the last few years at
&lt;a href="https://www.shell.nl/elektrisch-opladen.html"&gt;Shell Recharge Solutions&lt;/a&gt;,
building the backend of an EV charging service in TypeScript on AWS. Serverless,
event-driven, the Lambda-and-queues way of doing things. I led the payment
service provider integration from discovery to launch and spent a quarter as
interim tech lead of the payments team. Before that: three years of full-stack
work at &lt;a href="https://countly.com"&gt;Countly&lt;/a&gt;, a year of short-term contracts, and the
&lt;a href="https://blog.lvmbdv.dev/tags/security/"&gt;CTF competitions&lt;/a&gt; this blog started out as write-ups for.&lt;/p&gt;</description></item></channel></rss>