<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Small Tools Notes]]></title><description><![CDATA[Small Tools Notes]]></description><link>https://smalltoolsnotes.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Small Tools Notes</title><link>https://smalltoolsnotes.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 12:25:02 GMT</lastBuildDate><atom:link href="https://smalltoolsnotes.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[One Prompt, Four Modalities: What a Unified Generation Agent Actually Has to Solve]]></title><description><![CDATA[Most generation tools are one modality wide. You have a favourite for images, a different one for video, something else for voice, and if you touch 3D at all it is a fourth tab with its own account an]]></description><link>https://smalltoolsnotes.hashnode.dev/one-prompt-four-modalities-what-a-unified-generation-agent-actually-has-to-solve</link><guid isPermaLink="true">https://smalltoolsnotes.hashnode.dev/one-prompt-four-modalities-what-a-unified-generation-agent-actually-has-to-solve</guid><category><![CDATA[AI]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[ZP Wan]]></dc:creator><pubDate>Sun, 27 Sep 2026 01:46:05 GMT</pubDate><content:encoded><![CDATA[<p>Most generation tools are one modality wide. You have a favourite for images, a different one for video, something else for voice, and if you touch 3D at all it is a fourth tab with its own account and its own export quirks.</p>
<p>The obvious fix is to put them behind one text box. That sounds like a UI decision. It is not. Once a single prompt field has to serve image, video, voice and 3D, three genuinely hard problems show up, and none of them are about layout.</p>
<h2>Problem 1: the modalities disagree about what a prompt is</h2>
<p>A good image prompt is a dense noun phrase. Adjectives, materials, lighting, lens. Nothing about time, because there is no time.</p>
<pre><code class="language-plaintext">a worn brass desk lamp, single hard key light from the left, dusty highlights
</code></pre>
<p>A good video prompt is a <em>verb</em> phrase with a camera in it. The same noun phrase produces a static shot that technically moves.</p>
<pre><code class="language-plaintext">a worn brass desk lamp; camera pushes in slowly as the filament flickers on
</code></pre>
<p>A good 3D prompt is neither. It is a set of geometric constraints, and half the adjectives that improve an image actively hurt it — "dusty highlights" is a texture instruction with no geometry behind it, and "hard key light" is meaningless in a mesh.</p>
<pre><code class="language-plaintext">a desk lamp, hollow base, flat bottom, thick shade walls, no thin wires
</code></pre>
<p>A voice prompt is a <em>performance</em> direction: pace, register, emphasis.</p>
<p>So a single prompt box is lying a little. The same sentence cannot be optimal in four places at once. The design question is what to do about that, and there are three honest answers:</p>
<ol>
<li><p><strong>Make the user rewrite it per modality.</strong> Correct, and nobody does it.</p>
</li>
<li><p><strong>Rewrite it silently.</strong> Fast, and it hides why a result was bad.</p>
</li>
<li><p><strong>Rewrite it and show your work.</strong> Slower, and the only option where the user learns anything.</p>
</li>
</ol>
<p>The third is what "agent" should mean in practice: the thing plans, tells you what it is about to do, and lets you disagree before spending the compute.</p>
<h2>Problem 2: each modality fails in an unrelated way</h2>
<p>The failure modes have almost nothing in common, which means one generic error state is useless:</p>
<table>
<thead>
<tr>
<th>Modality</th>
<th>Typical failure</th>
<th>What the user needs to see</th>
</tr>
</thead>
<tbody><tr>
<td>Image</td>
<td>Composition drifts from the brief</td>
<td>A/B against the prompt</td>
</tr>
<tr>
<td>Video</td>
<td>Frame-to-frame identity drift</td>
<td>Which frame it broke on</td>
</tr>
<tr>
<td>Voice</td>
<td>Right words, wrong performance</td>
<td>The specific phrase to re-read</td>
</tr>
<tr>
<td>3D</td>
<td>Geometry is plausible, topology is not</td>
<td>Mesh stats, not a render</td>
</tr>
</tbody></table>
<p>That last row is the one people underestimate. A 3D render can look flawless while the underlying mesh is unusable — hundreds of thousands of triangles, disconnected shells, no consistent scale. The render is not evidence about the geometry. Any tool that shows you only the pretty picture is answering a different question from the one you asked.</p>
<h2>Problem 3: chaining is where the value is, and where the state lives</h2>
<p>The single-modality workflow is: prompt, generate, download, done.</p>
<p>The interesting workflow is: generate an image, keep that exact subject, put it in a scene, animate it, add a voice over it, and separately turn the subject into a mesh.</p>
<p>Each arrow in that chain is a place where identity has to survive. That is a state problem. The system has to carry a persistent handle on "this specific thing" across model boundaries that were never designed to agree with each other. Tool-hopping loses that handle at every step, which is why the manual version of this workflow produces four assets that do not quite look like the same object.</p>
<p>Keeping the chain inside one project is not a convenience feature. It is the only place the continuity can live.</p>
<h2>What this implies for exports</h2>
<p>If the chain is the point, the exports have to be ordinary files — MP4, PNG, WAV, OBJ, GLB — and they have to be downloadable without ceremony.</p>
<p>A generation tool that will not hand over the file is not a tool, it is a demo. This matters most for 3D, where the file is the entire deliverable: nobody wants a mesh they can only look at inside someone else's viewer.</p>
<h2>The short version</h2>
<p>Putting four modalities behind one prompt is not a consolidation exercise. It requires the system to translate intent per modality, surface modality-specific failure honestly, and keep subject identity alive across model boundaries. Get those three right and the single text box is genuinely simpler. Get them wrong and you have built four tools that happen to share a font.</p>
<p>If you want to see what the chained version feels like — including <a href="https://fungen.ai/">AI 3d creation</a> that hands you a GLB rather than a viewer link — the first render is free, which is about the right amount of commitment for finding out whether the unified version is worth it.</p>
]]></content:encoded></item><item><title><![CDATA[78% of Tracked Software Versions Are Already End of Life]]></title><description><![CDATA[End-of-life dates get treated as a compliance chore. Somebody produces a spreadsheet once a year, a few rows go red, tickets are filed, and the spreadsheet goes stale the week after it is written.
Tha]]></description><link>https://smalltoolsnotes.hashnode.dev/78-of-tracked-software-versions-are-already-end-of-life</link><guid isPermaLink="true">https://smalltoolsnotes.hashnode.dev/78-of-tracked-software-versions-are-already-end-of-life</guid><category><![CDATA[Devops]]></category><category><![CDATA[Security]]></category><category><![CDATA[programming]]></category><dc:creator><![CDATA[ZP Wan]]></dc:creator><pubDate>Sun, 27 Sep 2026 01:34:14 GMT</pubDate><content:encoded><![CDATA[<p>End-of-life dates get treated as a compliance chore. Somebody produces a spreadsheet once a year, a few rows go red, tickets are filed, and the spreadsheet goes stale the week after it is written.</p>
<p>That framing misses what the date actually means. An EOL date is not an expiry stamp on a carton. It is the moment a version stops receiving fixes while the rest of the world keeps finding reasons it needs them.</p>
<h2>The number that reframes it</h2>
<p>Across 477 tracked products and 8,754 versions, 78% are already past end of life. Another 179 versions cross the line within 90 days.</p>
<p>Taken alone that sounds like ordinary software entropy — old things are old. The number that changes the conversation is a different one: how many vulnerabilities were published against a version after its support ended and fixed only in newer branches.</p>
<p>MySQL 5.7 went EOL in October 2023. In the three years since, 127 CVEs have been published that it will never receive a fix for. Go 1.16, dead since March 2022, has missed 111. Go 1.17 has missed 106. MySQL 8.1 has missed 103 in under three years.</p>
<p>Those are not theoretical exposures accumulating slowly. That is a running total of known, published, named problems in software that a great many production systems are still running right now.</p>
<h2>Why the count keeps climbing after death</h2>
<p>This is the part that is easy to get backwards. A version does not become vulnerable the day it goes EOL. It becomes vulnerable at the same steady rate it always was — researchers keep finding things, the upstream project keeps fixing them in current branches, and the dead version simply stops being on the list of places the fix gets applied.</p>
<p>So the risk of running an EOL version is not flat. It grows, monotonically, for as long as you keep running it. A version that was two CVEs behind at EOL is a hundred behind three years later. Nothing about your deployment changed; the gap widened underneath it.</p>
<p>That is why "we will upgrade when we have a reason" is such an expensive posture. The reason accumulates silently and only becomes visible when one of those hundred-odd CVEs turns out to be reachable from your edge.</p>
<h2>Ranking by missed CVEs beats ranking by age</h2>
<p>The instinct when you inventory EOL software is to sort by how long it has been dead. Oldest first, work down the list.</p>
<p>That ordering is wrong more often than it is right. Age tells you how long something has been unsupported. It says nothing about how much attention the world has paid to it since. A niche library that went EOL in 2019 and attracted three CVEs is a smaller problem than a database that went EOL in 2023 and attracted 127.</p>
<p>Sorting by missed CVEs — vulnerabilities published after EOL and fixed only in newer branches — puts the list in the order you would actually want to work through it. It also tends to surprise people, because the top of that list is usually popular software that went EOL recently, not the ancient thing everyone already feels guilty about.</p>
<h2>The maintenance version of the same idea</h2>
<p>There is a planning use for this that is less obvious than the audit use.</p>
<p>If you know which of your dependencies cross their EOL date in the next quarter, upgrade scheduling stops being reactive. 179 versions reaching EOL within 90 days is, from the other side of the telescope, 179 upgrade windows that can be planned while nothing is on fire — rather than 179 future incidents discovered by a scanner at an inconvenient moment.</p>
<p>The difference between those two experiences is entirely a matter of whether anyone looked the dates up in advance.</p>
<p><a href="https://end-of-life.org/">end of life dates</a> and support status for 477 products, including which CVEs each dead version has missed, are tracked at end-of-life.org — refreshed daily, with an API if you would rather wire it into your own inventory than check it by hand.</p>
]]></content:encoded></item></channel></rss>