<?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>Wed, 10 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.lvmbdv.dev/index.xml" rel="self" type="application/rss+xml"/><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;. Most of the new posts were co-written
with an AI that has a checklist of things it is not allowed to sound like, plus
a set of voice rules. The AI drafts, I edit. The structured data handles the
other side: helping machines understand the content.&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;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;
&lt;p&gt;In bevy, any system can access the
&lt;a href="https://docs.rs/bevy/0.4.0/bevy/ecs/struct.Commands.html"&gt;&lt;code&gt;Commands&lt;/code&gt;&lt;/a&gt; structure
to issue commands manipulate the
&lt;a href="https://docs.rs/bevy/0.4.0/bevy/ecs/struct.World.html"&gt;&lt;code&gt;World&lt;/code&gt;&lt;/a&gt;. The most
common one would probably be the
&lt;a href="https://docs.rs/bevy/0.4.0/bevy/ecs/struct.Commands.html#method.spawn"&gt;&lt;code&gt;Commands#spawn&lt;/code&gt;&lt;/a&gt;
method which lets you spawn an entity with the components you specify. You can
pass a structure implementing the
&lt;a href="https://docs.rs/bevy/0.4.0/bevy/ecs/trait.Bundle.html"&gt;Bundle&lt;/a&gt; trait to this
method. Luckily, tuples of none to many components implement this trait thanks
to
&lt;a href="https://github.com/bevyengine/bevy/blob/v0.4.0/crates/bevy_ecs/src/core/bundle.rs#L87"&gt;macro magic&lt;/a&gt;,
so you can just call the method like:&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></channel></rss>