<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>mauri&#39;s devlog</title>
    <link>https://pulpme.sh/~mauri</link>
    <description>thoughts on coding, prompts, and old machines</description>
    <language>en</language>
    <atom:link href="https://pulpme.sh/~mauri/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>&#39;Frontier Model&#39; got a whole new meaning</title>
      <link>https://pulpme.sh/~mauri/frontier-model-whole-new-meaning.html</link>
      <guid isPermaLink="true">https://pulpme.sh/~mauri/frontier-model-whole-new-meaning.html</guid>
      <pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[
<p>Turns out what counts as a frontier model depends a lot on which side of the border you’re on.</p>

<p>About a week ago <a href="https://www.anthropic.com/news/fable-mythos-access" rel="nofollow">the US government blocked all foreign nationals from accessing Claude Fable 5</a>, citing a jailbreak that Anthropic itself said was narrow, not universal, and not even properly demonstrated. Anthropic spent years building a narrative that their models were so powerful they needed special oversight, that the danger was the moat. It worked great for fundraising and for pushing regulators toward rules that would favor big players. But that same story is now the thing the US government is using to justify cutting off the rest of the world.</p>

<p>Some, say “don’t worry, in a few months Fable 6 will come out and you’ll get access to Fable 5” that’s not really how this works. The ban isn’t on a timer. It’s tied to security concerns. There’s no reason to assume it gets lifted just because a newer model ships. It would be crazy if it does.</p>

<p>OpenAI is following the same trajectory. GPT 5.6 will not be released to the public, but to a small group of “close partners”. We can only speculate that it will be released at some point in the future.</p>

<p>So, the ceiling for everyone outside the US has been set. Opus will remain as the frontier model. Progress stopped. For us building on Anthropic’s API outside the US, this is a reminder that we are building on infrastructure where the access rules can change overnight for reasons the market doesn’t control.</p>

<p>Open models like <a href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro" rel="nofollow">DeepSeek V4</a> and <a href="https://z.ai/blog/glm-5.2" rel="nofollow">GLM-5.2</a> are closing the gap faster than everyone expected. They’re not perfect but they don’t come with a citizenship requirement either. At least for now. It’s probably a good time to start paying attention.</p>

<p>Fun times.</p>

<p><em>Edit: As of July 1st 2026 the export controls <a href="https://www.anthropic.com/news/redeploying-fable-5" rel="nofollow">for Fable 5 and Mythos 5 have been lifted</a>, but the damage is already done</em></p>
]]></description>
    </item>
    <item>
      <title>What&#39;s wrong with hdparm.conf</title>
      <link>https://pulpme.sh/~mauri/whats-wrong-with-hdparm-conf.html</link>
      <guid isPermaLink="true">https://pulpme.sh/~mauri/whats-wrong-with-hdparm-conf.html</guid>
      <pubDate>Wed, 15 Nov 2023 00:00:00 +0000</pubDate>
      <description><![CDATA[
<p>You can spend hours googling for “hdparm.conf settings not working” just to find yourself trapped in a net of circular references pointing fingers between udev, pm-utils, systemd, and hdparm issues.</p>

<p>In my case, it all started one night when I wanted to set a <em>very</em> aggresive spindown setting on a hdd. These are the events that followed, and a workaround that I found to make it work.</p>

<p>First things first.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>lsb_release <span class="nt">-d</span>
Description:	Ubuntu 22.04.2 LTS
</code></pre></div></div>

<p>I set hdparm.conf apm=99 (-B in hdparm cli) on my hdd but it didn’t have any effect.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">tail</span> <span class="nt">-10</span> /etc/hdparm.conf
<span class="c"># /dev/sdb</span>
/dev/disk/by-id/ata-HGST_HTS722010A7E645_JR2000BDH3R15E <span class="o">{</span>
	apm <span class="o">=</span> 99
<span class="o">}</span>
</code></pre></div></div>

<p>Looks like <code>hdparm.conf</code> is picked up by <code>/lib/udev/hdparm</code> invoked by udev rules in <code>/lib/udev/rules.d/85-hdparm.rules</code>.<br />
However it specifically ignores any APM (-B) setting, letting <code>/usr/lib/pm-utils/power.d/95hdparm-apm</code> take care of them.<br />
Now, <code>95hdparm-apm</code> relies on a bunch of functions present in <code>/lib/hdparm/hdparm-functions</code>. It uses <code>hdparm_try_apm</code> to check if the device has support for APM.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="c"># Only activate APM on disks that support it.</span>
    <span class="k">if</span> <span class="o">[</span> <span class="nt">-z</span> <span class="s2">"</span><span class="nv">$ID_ATA_FEATURE_SET_APM</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
        </span><span class="nb">local </span><span class="nv">ID_ATA_FEATURE_SET_APM</span><span class="o">=</span><span class="s2">"</span><span class="si">$(</span>udevadm info <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span> <span class="nt">-q</span> property 2&gt;/dev/null | <span class="nb">sed</span> <span class="nt">-n</span> <span class="s1">'s/^ID_ATA_FEATURE_SET_APM=//p'</span><span class="si">)</span><span class="s2">"</span> <span class="o">||</span> <span class="nb">true
    </span><span class="k">fi</span>
</code></pre></div></div>

<p>The problem is that <code>udevadm info -n /dev/sdb</code> is not showing any sign of <code>ID_ATA_FEATURE_SET_APM=1</code> that indicated the disk supported APM.</p>

<p>The disk supports APM though. The disk reports APM capabilities when queried with <code>hdparm -I /dev/sdb</code> and they can be set with the cli <code>hdparm -B99 /dev/sdb</code>. On a closer look, also calling <code>/lib/udev/ata_id --export /dev/sdb</code> shows that the value <code>ID_ATA_FEATURE_SET_APM=1</code> is present.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>/lib/udev/ata_id <span class="nt">--export</span> /dev/sdb|grep ATA_FEATURE_SET_APM
<span class="nv">ID_ATA_FEATURE_SET_APM</span><span class="o">=</span>1
<span class="nv">ID_ATA_FEATURE_SET_APM_ENABLED</span><span class="o">=</span>1
<span class="nv">ID_ATA_FEATURE_SET_APM_CURRENT_VALUE</span><span class="o">=</span>128
</code></pre></div></div>

<p>These device environment values are supposed to be imported with the rules in <code>/lib/udev/rules.d/60-persistent-storage.rules</code></p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># ATA</span>
<span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"sd*[!0-9]|sr*"</span>, ENV<span class="o">{</span>ID_SERIAL<span class="o">}!=</span><span class="s2">"?*"</span>, <span class="nv">SUBSYSTEMS</span><span class="o">==</span><span class="s2">"scsi"</span>, ATTRS<span class="o">{</span>vendor<span class="o">}==</span><span class="s2">"ATA"</span>, IMPORT<span class="o">{</span>program<span class="o">}=</span><span class="s2">"ata_id --export </span><span class="nv">$devnode</span><span class="s2">"</span> 
</code></pre></div></div>

<p>But at that point <code>/dev/sdb</code>’s <code>ID_SERIAL</code> is already set, this rule never matches and the IMPORT is never performed.</p>

<p>The package <code>sg3-utils</code> is the one installing the conflicting file <code>/lib/udev/rules.d/55-scsi-sg3_id.rules</code></p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># ata_id compatibility</span>
ENV<span class="o">{</span>ID_SERIAL<span class="o">}!=</span><span class="s2">"?*"</span>, ENV<span class="o">{</span>SCSI_IDENT_LUN_ATA<span class="o">}==</span><span class="s2">"?*"</span>, ENV<span class="o">{</span>ID_BUS<span class="o">}=</span><span class="s2">"ata"</span>, ENV<span class="o">{</span>ID_ATA<span class="o">}=</span><span class="s2">"1"</span>, ENV<span class="o">{</span>ID_SERIAL<span class="o">}=</span><span class="s2">"</span><span class="nv">$env</span><span class="s2">{SCSI_IDENT_LUN_ATA}"</span>
ENV<span class="o">{</span>ID_SERIAL_SHORT<span class="o">}!=</span><span class="s2">"?*"</span>, ENV<span class="o">{</span>SCSI_VENDOR<span class="o">}==</span><span class="s2">"ATA"</span>, ENV<span class="o">{</span>SCSI_IDENT_LUN_VENDOR<span class="o">}==</span><span class="s2">"?*"</span>, ENV<span class="o">{</span>ID_SERIAL_SHORT<span class="o">}=</span><span class="s2">"</span><span class="nv">$env</span><span class="s2">{SCSI_IDENT_LUN_VENDOR}"</span>
</code></pre></div></div>

<p>Ok, now what? Well, after a lot of back and forth with systemd, I found the <a href="https://github.com/systemd/systemd/pull/7594" rel="nofollow">old Pull Request 7594</a> that addresses this issue.<br />
It refactors how persistent storage rules are organized so they run <em>before</em> sg3-utils had any chance to mess them up.</p>

<p>Unfortunately, the PR is still opened after 5 years, and is unclear when it’s going to land on linux distros.</p>

<h4 id="the-workaround">The workaround</h4>

<p>We need to import the ata_id environment keys for our hard drive. We’ll introduce a <code>61-persistent-storage-custom.rules</code> file<br />
with a custom rule rule that runs ata_id.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">cat</span> /etc/udev/61-persistent-storage-custom.rules
<span class="c"># Import the ata_id environment values for /dev/sdb regardless of the ID_SERIAL (needed by 85-hdparm.rules)</span>
<span class="nv">KERNEL</span><span class="o">==</span><span class="s2">"sdb"</span>, <span class="nv">SUBSYSTEMS</span><span class="o">==</span><span class="s2">"scsi"</span>, ATTRS<span class="o">{</span>vendor<span class="o">}==</span><span class="s2">"ATA"</span>, IMPORT<span class="o">{</span>program<span class="o">}=</span><span class="s2">"ata_id --export </span><span class="nv">$devnode</span><span class="s2">"</span>
</code></pre></div></div>

<p>Reboot and see the hdparm magic unfold!</p>
]]></description>
    </item>
    <item>
      <title>The 10-year old PR.</title>
      <link>https://pulpme.sh/~mauri/this-pr-is-10-years-old.html</link>
      <guid isPermaLink="true">https://pulpme.sh/~mauri/this-pr-is-10-years-old.html</guid>
      <pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate>
      <description><![CDATA[
<p>A while back I worked on a <a href="https://web.archive.org/web/20140301091933/http://engineering.medallia.com/blog/2013/12/javascript-editor/" rel="nofollow">very cool project</a> [1] involving the Rhino javascript engine.</p>

<p>I found a bug about colliding settings when enabling debugging of a script, the fix was simple enough so I opened a pull request with the change. This was May 25, 2013.</p>

<p>A few weeks ago I remembered and took a look. The PR is still open. Someone triaged it after 8 years but it’s still there waiting.</p>

<p>I wonder if I’m going to see the Rhino <a href="https://github.com/mozilla/rhino/pull/119" rel="nofollow">PR #119</a> merged some day.</p>

<p>[1] Please forgive the tongue in check blog post title :P</p>
]]></description>
    </item>
  </channel>
</rss>
