<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Serguey Asael Shinder</title>
    <description>The latest articles on DEV Community by Serguey Asael Shinder (@sergueyasaelshinder).</description>
    <link>https://dev.to/sergueyasaelshinder</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3162425%2F9aec4162-92b2-44e6-aa10-8ffd5d721296.png</url>
      <title>DEV Community: Serguey Asael Shinder</title>
      <link>https://dev.to/sergueyasaelshinder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sergueyasaelshinder"/>
    <language>en</language>
    <item>
      <title>Your Sitemap Still Styles Itself With XSLT and Chrome Is About to Stop Running It</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:45:22 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/your-sitemap-still-styles-itself-with-xslt-and-chrome-is-about-to-stop-running-it-4oo4</link>
      <guid>https://dev.to/sergueyasaelshinder/your-sitemap-still-styles-itself-with-xslt-and-chrome-is-about-to-stop-running-it-4oo4</guid>
      <description>&lt;p&gt;Open your sitemap in a browser.&lt;/p&gt;

&lt;p&gt;If it shows a tidy table,&lt;br&gt;
with columns and colours,&lt;br&gt;
instead of raw XML,&lt;br&gt;
look near the top of the file.&lt;/p&gt;

&lt;p&gt;&amp;lt;?xml-stylesheet type="text/xsl" href="sitemap.xsl"?&amp;gt;&lt;/p&gt;

&lt;p&gt;That line asks the browser&lt;br&gt;
to run an XSLT transform&lt;br&gt;
on the document&lt;br&gt;
before showing it.&lt;/p&gt;

&lt;p&gt;Browsers have done that&lt;br&gt;
for more than twenty years.&lt;/p&gt;

&lt;p&gt;Plenty of SEO plugins&lt;br&gt;
still ship it.&lt;/p&gt;

&lt;p&gt;So do RSS feeds&lt;br&gt;
dressed up to look friendly&lt;br&gt;
when someone clicks on them,&lt;br&gt;
and old internal tools&lt;br&gt;
that send an XML report&lt;br&gt;
and let the browser draw it.&lt;/p&gt;

&lt;p&gt;Chrome is removing it.&lt;/p&gt;

&lt;p&gt;Its engineers call the code&lt;br&gt;
a security liability&lt;br&gt;
used on a tiny share of pages,&lt;br&gt;
and the C library underneath&lt;br&gt;
has had almost nobody&lt;br&gt;
left to maintain it.&lt;/p&gt;

&lt;p&gt;People working on the other engines&lt;br&gt;
have backed removal too.&lt;/p&gt;

&lt;p&gt;Chrome's published schedule&lt;br&gt;
turns XSLT off&lt;br&gt;
in version 155,&lt;br&gt;
due on 17 November.&lt;/p&gt;

&lt;p&gt;An origin trial&lt;br&gt;
and an enterprise policy&lt;br&gt;
keep it alive a while longer,&lt;br&gt;
into 2027,&lt;br&gt;
for sites and companies&lt;br&gt;
that ask.&lt;/p&gt;

&lt;p&gt;After that it is gone.&lt;/p&gt;

&lt;p&gt;What breaks is narrow&lt;br&gt;
and easy to miss.&lt;/p&gt;

&lt;p&gt;The stylesheet instruction&lt;br&gt;
at the top of XML files.&lt;/p&gt;

&lt;p&gt;And the XSLTProcessor object,&lt;br&gt;
if any of your JavaScript&lt;br&gt;
transforms documents in the page.&lt;/p&gt;

&lt;p&gt;Search for both.&lt;/p&gt;

&lt;p&gt;xml-stylesheet&lt;br&gt;
and XSLTProcessor,&lt;br&gt;
across your templates,&lt;br&gt;
your static files&lt;br&gt;
and whatever a plugin generates.&lt;/p&gt;

&lt;p&gt;Search engines will not mind.&lt;/p&gt;

&lt;p&gt;They read the XML,&lt;br&gt;
never the styled page.&lt;/p&gt;

&lt;p&gt;People will.&lt;/p&gt;

&lt;p&gt;The help desk will get&lt;br&gt;
a screenshot of raw angle brackets&lt;br&gt;
from someone who clicked a feed.&lt;/p&gt;

&lt;p&gt;The fix is dull.&lt;/p&gt;

&lt;p&gt;Run the transform on the server,&lt;br&gt;
or at build time,&lt;br&gt;
and serve HTML&lt;br&gt;
to anyone who wants HTML.&lt;/p&gt;

&lt;p&gt;XSLT itself is not going anywhere.&lt;/p&gt;

&lt;p&gt;Java's transformer,&lt;br&gt;
lxml in Python,&lt;br&gt;
Saxon,&lt;br&gt;
all still work on the server.&lt;/p&gt;

&lt;p&gt;Only the browser is stepping out.&lt;/p&gt;

&lt;p&gt;There is also a polyfill&lt;br&gt;
that runs the transform in WebAssembly,&lt;br&gt;
if you need time.&lt;/p&gt;

&lt;p&gt;Treat it as time,&lt;br&gt;
not as the fix.&lt;/p&gt;

&lt;p&gt;And add those old pages&lt;br&gt;
to the browser tests&lt;br&gt;
you already run.&lt;/p&gt;

&lt;p&gt;The page nobody has opened in a year&lt;br&gt;
is the one that breaks&lt;br&gt;
with nobody watching.&lt;/p&gt;

&lt;p&gt;Features rarely leave browsers.&lt;/p&gt;

&lt;p&gt;When one does,&lt;br&gt;
the first sites to notice&lt;br&gt;
are the ones that went looking.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>webdev</category>
      <category>xml</category>
      <category>chrome</category>
    </item>
    <item>
      <title>You Napped for Fifty Minutes Before the Night Migration and Woke Up Slower Than You Lay Down</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:44:50 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-napped-for-fifty-minutes-before-the-night-migration-and-woke-up-slower-than-you-lay-down-2nim</link>
      <guid>https://dev.to/sergueyasaelshinder/you-napped-for-fifty-minutes-before-the-night-migration-and-woke-up-slower-than-you-lay-down-2nim</guid>
      <description>&lt;p&gt;The migration&lt;br&gt;
was booked for one in the morning.&lt;/p&gt;

&lt;p&gt;You were sensible.&lt;/p&gt;

&lt;p&gt;At twenty past eleven&lt;br&gt;
you lay down on the sofa&lt;br&gt;
with an alarm&lt;br&gt;
for ten past twelve.&lt;/p&gt;

&lt;p&gt;Fifty minutes.&lt;/p&gt;

&lt;p&gt;Enough, you thought,&lt;br&gt;
to take the edge off.&lt;/p&gt;

&lt;p&gt;The alarm went.&lt;/p&gt;

&lt;p&gt;You joined the call,&lt;br&gt;
read the first step of the runbook&lt;br&gt;
three times,&lt;br&gt;
and still asked someone&lt;br&gt;
which server it meant.&lt;/p&gt;

&lt;p&gt;For the next twenty minutes&lt;br&gt;
you were worse&lt;br&gt;
than if you had stayed up.&lt;/p&gt;

&lt;p&gt;That is sleep inertia.&lt;/p&gt;

&lt;p&gt;The fog after waking,&lt;br&gt;
when the parts of the brain&lt;br&gt;
that plan and check&lt;br&gt;
come back later&lt;br&gt;
than the rest.&lt;/p&gt;

&lt;p&gt;How bad it is&lt;br&gt;
depends on what you woke from.&lt;/p&gt;

&lt;p&gt;Sleep deepens in stages.&lt;/p&gt;

&lt;p&gt;For the first ten minutes or so&lt;br&gt;
it stays light.&lt;/p&gt;

&lt;p&gt;By half an hour&lt;br&gt;
you can be deep in slow wave sleep,&lt;br&gt;
and waking from there&lt;br&gt;
is the worst of it.&lt;/p&gt;

&lt;p&gt;Brooks and Lack&lt;br&gt;
tested this in 2006.&lt;/p&gt;

&lt;p&gt;After a short night,&lt;br&gt;
people napped in the afternoon&lt;br&gt;
for five, ten,&lt;br&gt;
twenty or thirty minutes.&lt;/p&gt;

&lt;p&gt;Ten minutes&lt;br&gt;
gave the best result straight away,&lt;br&gt;
more alert&lt;br&gt;
and quicker on tests,&lt;br&gt;
with benefits lasting&lt;br&gt;
more than two hours.&lt;/p&gt;

&lt;p&gt;Twenty minutes helped,&lt;br&gt;
but only after a delay.&lt;/p&gt;

&lt;p&gt;Thirty minutes&lt;br&gt;
brought a stretch&lt;br&gt;
of worse alertness and performance&lt;br&gt;
right after waking,&lt;br&gt;
before it paid off.&lt;/p&gt;

&lt;p&gt;Fifty minutes&lt;br&gt;
is past all of them,&lt;br&gt;
and likely woke you&lt;br&gt;
from the deepest sleep you had.&lt;/p&gt;

&lt;p&gt;So choose one of two naps.&lt;/p&gt;

&lt;p&gt;Short,&lt;br&gt;
ten to twenty minutes,&lt;br&gt;
alarm set&lt;br&gt;
before you lie down,&lt;br&gt;
and you wake&lt;br&gt;
before deep sleep starts.&lt;/p&gt;

&lt;p&gt;Or long,&lt;br&gt;
about one full cycle,&lt;br&gt;
around ninety minutes,&lt;br&gt;
so you are more likely&lt;br&gt;
to surface from lighter sleep.&lt;/p&gt;

&lt;p&gt;The space between them&lt;br&gt;
is where the fog lives.&lt;/p&gt;

&lt;p&gt;Whichever you take,&lt;br&gt;
leave a gap&lt;br&gt;
between waking&lt;br&gt;
and the first thing that matters.&lt;/p&gt;

&lt;p&gt;Fifteen minutes,&lt;br&gt;
at least.&lt;/p&gt;

&lt;p&gt;Light,&lt;br&gt;
cold water,&lt;br&gt;
on your feet.&lt;/p&gt;

&lt;p&gt;Do not read the runbook&lt;br&gt;
for the first time&lt;br&gt;
in that window.&lt;/p&gt;

&lt;p&gt;Read it the evening before,&lt;br&gt;
and mark the steps&lt;br&gt;
that cannot be undone.&lt;/p&gt;

&lt;p&gt;And if you are the one&lt;br&gt;
who just woke up,&lt;br&gt;
say so on the call.&lt;/p&gt;

&lt;p&gt;I have just woken,&lt;br&gt;
check my first command.&lt;/p&gt;

&lt;p&gt;The fog is normal.&lt;/p&gt;

&lt;p&gt;Acting inside it alone&lt;br&gt;
is the mistake.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>focus</category>
      <category>sleep</category>
      <category>productivity</category>
    </item>
    <item>
      <title>You Missed Your Last Six Estimates and Planned the Seventh From Scratch</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:44:19 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-missed-your-last-six-estimates-and-planned-the-seventh-from-scratch-f85</link>
      <guid>https://dev.to/sergueyasaelshinder/you-missed-your-last-six-estimates-and-planned-the-seventh-from-scratch-f85</guid>
      <description>&lt;p&gt;Sprint planning.&lt;/p&gt;

&lt;p&gt;You take the ticket,&lt;br&gt;
open it up in your head,&lt;br&gt;
and walk through the steps.&lt;/p&gt;

&lt;p&gt;Add the field.&lt;/p&gt;

&lt;p&gt;Change the API.&lt;/p&gt;

&lt;p&gt;Update the screen.&lt;/p&gt;

&lt;p&gt;Tests.&lt;/p&gt;

&lt;p&gt;Three days.&lt;/p&gt;

&lt;p&gt;It feels honest,&lt;br&gt;
because you can see every step.&lt;/p&gt;

&lt;p&gt;That is the problem.&lt;/p&gt;

&lt;p&gt;Your last six tickets of this size&lt;br&gt;
took between five and nine days.&lt;/p&gt;

&lt;p&gt;You know that.&lt;/p&gt;

&lt;p&gt;If someone asked,&lt;br&gt;
you could tell them why.&lt;/p&gt;

&lt;p&gt;The review that sat for two days.&lt;/p&gt;

&lt;p&gt;The migration nobody mentioned.&lt;/p&gt;

&lt;p&gt;The flaky test.&lt;/p&gt;

&lt;p&gt;Each one feels like bad luck,&lt;br&gt;
a thing that happened once.&lt;/p&gt;

&lt;p&gt;So none of them&lt;br&gt;
make it into the next estimate.&lt;/p&gt;

&lt;p&gt;In 1994&lt;br&gt;
Buehler, Griffin and Ross&lt;br&gt;
asked final year students&lt;br&gt;
when they would finish their thesis.&lt;/p&gt;

&lt;p&gt;On average&lt;br&gt;
they said thirty four days.&lt;/p&gt;

&lt;p&gt;On average&lt;br&gt;
it took fifty five.&lt;/p&gt;

&lt;p&gt;Fewer than a third&lt;br&gt;
finished by their own date.&lt;/p&gt;

&lt;p&gt;The researchers also asked&lt;br&gt;
for a date if everything went&lt;br&gt;
as badly as it could.&lt;/p&gt;

&lt;p&gt;The average real finish&lt;br&gt;
came later&lt;br&gt;
than the average worst case.&lt;/p&gt;

&lt;p&gt;This is the planning fallacy,&lt;br&gt;
and it is not ignorance.&lt;/p&gt;

&lt;p&gt;The students knew&lt;br&gt;
their past work had run late.&lt;/p&gt;

&lt;p&gt;They explained it away,&lt;br&gt;
the way you do,&lt;br&gt;
as special.&lt;/p&gt;

&lt;p&gt;Daniel Kahneman&lt;br&gt;
called the cure&lt;br&gt;
the outside view.&lt;/p&gt;

&lt;p&gt;Stop asking&lt;br&gt;
how this task will go.&lt;/p&gt;

&lt;p&gt;Ask how tasks like it&lt;br&gt;
usually went.&lt;/p&gt;

&lt;p&gt;He told the story on himself.&lt;/p&gt;

&lt;p&gt;His team writing a school curriculum&lt;br&gt;
guessed about two years.&lt;/p&gt;

&lt;p&gt;An expert in the room&lt;br&gt;
knew that similar teams&lt;br&gt;
had taken seven to ten,&lt;br&gt;
and four in ten never finished.&lt;/p&gt;

&lt;p&gt;It took eight.&lt;/p&gt;

&lt;p&gt;So keep the numbers.&lt;/p&gt;

&lt;p&gt;For every ticket,&lt;br&gt;
the estimate&lt;br&gt;
and the actual,&lt;br&gt;
one column each.&lt;/p&gt;

&lt;p&gt;It takes a minute.&lt;/p&gt;

&lt;p&gt;After a month&lt;br&gt;
you have a reference class,&lt;br&gt;
your own,&lt;br&gt;
and it is far more honest&lt;br&gt;
than your imagination.&lt;/p&gt;

&lt;p&gt;When you estimate,&lt;br&gt;
start from that.&lt;/p&gt;

&lt;p&gt;Five to nine days for this size.&lt;/p&gt;

&lt;p&gt;Then adjust,&lt;br&gt;
a little,&lt;br&gt;
for what is truly different.&lt;/p&gt;

&lt;p&gt;Not for what feels different.&lt;/p&gt;

&lt;p&gt;Every task feels different&lt;br&gt;
from the inside.&lt;/p&gt;

&lt;p&gt;That is what inside means.&lt;/p&gt;

&lt;p&gt;The plan in your head&lt;br&gt;
has no reviews waiting,&lt;br&gt;
no surprises,&lt;br&gt;
no lost Tuesday afternoons.&lt;/p&gt;

&lt;p&gt;The record does.&lt;/p&gt;

&lt;p&gt;Believe the record.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>mindset</category>
      <category>psychology</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Your Last Chord Faded Into Grit When You Bounced the Album to Sixteen Bits</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:43:47 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/your-last-chord-faded-into-grit-when-you-bounced-the-album-to-sixteen-bits-1m0k</link>
      <guid>https://dev.to/sergueyasaelshinder/your-last-chord-faded-into-grit-when-you-bounced-the-album-to-sixteen-bits-1m0k</guid>
      <description>&lt;p&gt;The final song&lt;br&gt;
ends on one piano chord,&lt;br&gt;
left to ring&lt;br&gt;
for twenty seconds.&lt;/p&gt;

&lt;p&gt;In the session&lt;br&gt;
it dies away&lt;br&gt;
into perfect silence.&lt;/p&gt;

&lt;p&gt;On the CD master&lt;br&gt;
the last few seconds&lt;br&gt;
sound different.&lt;/p&gt;

&lt;p&gt;Turn it up on headphones&lt;br&gt;
and the tail is rough,&lt;br&gt;
a buzzing grain&lt;br&gt;
riding on the decay,&lt;br&gt;
as if the reverb&lt;br&gt;
were crumbling.&lt;/p&gt;

&lt;p&gt;Nothing was added.&lt;/p&gt;

&lt;p&gt;Something was taken away.&lt;/p&gt;

&lt;p&gt;The session ran at 24 bits,&lt;br&gt;
inside a mixer working in 32 bit float.&lt;/p&gt;

&lt;p&gt;A CD holds 16.&lt;/p&gt;

&lt;p&gt;Going from 24 to 16&lt;br&gt;
means every sample&lt;br&gt;
loses its bottom eight bits,&lt;br&gt;
rounded to the nearest step&lt;br&gt;
of a much coarser ladder.&lt;/p&gt;

&lt;p&gt;When the music is loud,&lt;br&gt;
the rounding error is tiny&lt;br&gt;
and changes randomly&lt;br&gt;
from sample to sample.&lt;/p&gt;

&lt;p&gt;It sounds like nothing.&lt;/p&gt;

&lt;p&gt;When the music is very quiet,&lt;br&gt;
a fade only a few steps tall,&lt;br&gt;
the error stops being random.&lt;/p&gt;

&lt;p&gt;It follows the waveform.&lt;/p&gt;

&lt;p&gt;And error that follows the signal&lt;br&gt;
is not noise.&lt;/p&gt;

&lt;p&gt;It is distortion,&lt;br&gt;
new harmonics&lt;br&gt;
that nobody played.&lt;/p&gt;

&lt;p&gt;That is the grit.&lt;/p&gt;

&lt;p&gt;The fix is called dither.&lt;/p&gt;

&lt;p&gt;Before reducing the bits,&lt;br&gt;
add a tiny amount&lt;br&gt;
of random noise,&lt;br&gt;
about the size of one step.&lt;/p&gt;

&lt;p&gt;It sounds backwards.&lt;/p&gt;

&lt;p&gt;Adding noise&lt;br&gt;
to make it cleaner.&lt;/p&gt;

&lt;p&gt;But the noise breaks the link&lt;br&gt;
between the error and the music.&lt;/p&gt;

&lt;p&gt;The distortion turns into&lt;br&gt;
a steady, very quiet hiss,&lt;br&gt;
down around ninety decibels&lt;br&gt;
below full scale,&lt;br&gt;
and the decay&lt;br&gt;
keeps fading smoothly&lt;br&gt;
underneath it,&lt;br&gt;
even below the last step.&lt;/p&gt;

&lt;p&gt;Noise shaping goes further,&lt;br&gt;
moving most of that hiss&lt;br&gt;
up toward frequencies&lt;br&gt;
the ear barely hears.&lt;/p&gt;

&lt;p&gt;The rules are short.&lt;/p&gt;

&lt;p&gt;Dither when the bit depth goes down,&lt;br&gt;
not before.&lt;/p&gt;

&lt;p&gt;Dither once.&lt;/p&gt;

&lt;p&gt;Anything after it,&lt;br&gt;
a fade,&lt;br&gt;
a gain change,&lt;br&gt;
a limiter,&lt;br&gt;
brings the problem back.&lt;/p&gt;

&lt;p&gt;So the fade happens in the session,&lt;br&gt;
and the dither is the last step&lt;br&gt;
of the last export.&lt;/p&gt;

&lt;p&gt;Check whether your limiter&lt;br&gt;
already dithers its output,&lt;br&gt;
and whether your export dialog&lt;br&gt;
dithers too.&lt;/p&gt;

&lt;p&gt;Two layers&lt;br&gt;
is more hiss for nothing.&lt;/p&gt;

&lt;p&gt;None at all&lt;br&gt;
is the grit.&lt;/p&gt;

&lt;p&gt;Then listen the way it failed.&lt;/p&gt;

&lt;p&gt;Not the chorus.&lt;/p&gt;

&lt;p&gt;The last ten seconds,&lt;br&gt;
turned up loud,&lt;br&gt;
on headphones.&lt;/p&gt;

&lt;p&gt;Quiet is where&lt;br&gt;
the bits run out.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>music</category>
      <category>mastering</category>
      <category>audio</category>
    </item>
    <item>
      <title>Most of Your Examples Were Labelled Normal and So Were Most of the Urgent Tickets</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:43:15 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/most-of-your-examples-were-labelled-normal-and-so-were-most-of-the-urgent-tickets-2lpk</link>
      <guid>https://dev.to/sergueyasaelshinder/most-of-your-examples-were-labelled-normal-and-so-were-most-of-the-urgent-tickets-2lpk</guid>
      <description>&lt;p&gt;The triage prompt&lt;br&gt;
had a short definition&lt;br&gt;
of urgent and normal,&lt;br&gt;
and six examples.&lt;/p&gt;

&lt;p&gt;Real tickets,&lt;br&gt;
copied from the queue,&lt;br&gt;
with their labels.&lt;/p&gt;

&lt;p&gt;Five were normal,&lt;br&gt;
because most tickets are.&lt;/p&gt;

&lt;p&gt;The last two&lt;br&gt;
were among them,&lt;br&gt;
because that is the order&lt;br&gt;
they were pasted in.&lt;/p&gt;

&lt;p&gt;For a week&lt;br&gt;
the model sorted the queue.&lt;/p&gt;

&lt;p&gt;Then someone noticed&lt;br&gt;
a payroll outage&lt;br&gt;
had sat for a morning&lt;br&gt;
marked normal.&lt;/p&gt;

&lt;p&gt;So had a locked out branch.&lt;/p&gt;

&lt;p&gt;So had a fraud report.&lt;/p&gt;

&lt;p&gt;None of them&lt;br&gt;
were hard to read.&lt;/p&gt;

&lt;p&gt;The examples had taught&lt;br&gt;
something nobody wrote down.&lt;/p&gt;

&lt;p&gt;In 2021&lt;br&gt;
Zhao and colleagues&lt;br&gt;
measured this in GPT-3&lt;br&gt;
and named three habits.&lt;/p&gt;

&lt;p&gt;Majority label bias.&lt;/p&gt;

&lt;p&gt;The model leans&lt;br&gt;
toward the label&lt;br&gt;
that appears most often&lt;br&gt;
in the examples.&lt;/p&gt;

&lt;p&gt;Recency bias.&lt;/p&gt;

&lt;p&gt;It leans&lt;br&gt;
toward the labels&lt;br&gt;
near the end of the prompt.&lt;/p&gt;

&lt;p&gt;Common token bias.&lt;/p&gt;

&lt;p&gt;It leans&lt;br&gt;
toward answers&lt;br&gt;
that were common words&lt;br&gt;
in its training.&lt;/p&gt;

&lt;p&gt;Changing only&lt;br&gt;
which examples went in,&lt;br&gt;
and in what order,&lt;br&gt;
moved accuracy on some tasks&lt;br&gt;
from close to chance&lt;br&gt;
to close to the best results&lt;br&gt;
of the time.&lt;/p&gt;

&lt;p&gt;The questions&lt;br&gt;
had not changed at all.&lt;/p&gt;

&lt;p&gt;Newer models&lt;br&gt;
are steadier than that one.&lt;/p&gt;

&lt;p&gt;Steadier is not immune.&lt;/p&gt;

&lt;p&gt;So treat the examples&lt;br&gt;
as part of the classifier,&lt;br&gt;
because they are.&lt;/p&gt;

&lt;p&gt;Balance them.&lt;/p&gt;

&lt;p&gt;As many urgent as normal,&lt;br&gt;
even though the queue is not.&lt;/p&gt;

&lt;p&gt;Shuffle the order,&lt;br&gt;
and do not let&lt;br&gt;
the same label&lt;br&gt;
close the list every time.&lt;/p&gt;

&lt;p&gt;Then test it the boring way.&lt;/p&gt;

&lt;p&gt;A hundred tickets&lt;br&gt;
with labels people agree on,&lt;br&gt;
scored against the prompt.&lt;/p&gt;

&lt;p&gt;Run the same set again&lt;br&gt;
with the examples reordered.&lt;/p&gt;

&lt;p&gt;If the scores move,&lt;br&gt;
the order is deciding,&lt;br&gt;
not the tickets.&lt;/p&gt;

&lt;p&gt;Watch the label counts as well.&lt;/p&gt;

&lt;p&gt;If the model calls&lt;br&gt;
ninety five percent of tickets normal&lt;br&gt;
and the real share is eighty,&lt;br&gt;
it has learned the prompt,&lt;br&gt;
not the job.&lt;/p&gt;

&lt;p&gt;And when you change an example,&lt;br&gt;
run the set again.&lt;/p&gt;

&lt;p&gt;Swapping one ticket&lt;br&gt;
for a better one&lt;br&gt;
is a change to the model's instructions,&lt;br&gt;
even if nobody calls it that.&lt;/p&gt;

&lt;p&gt;Your examples&lt;br&gt;
were never a sample of the queue.&lt;/p&gt;

&lt;p&gt;They were a lesson,&lt;br&gt;
and the model learned&lt;br&gt;
every part of it.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>ai</category>
      <category>llm</category>
      <category>promptengineering</category>
    </item>
    <item>
      <title>Your Page Listened for Messages From the Checkout Frame and Took Them From Any Window</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:42:43 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/your-page-listened-for-messages-from-the-checkout-frame-and-took-them-from-any-window-255l</link>
      <guid>https://dev.to/sergueyasaelshinder/your-page-listened-for-messages-from-the-checkout-frame-and-took-them-from-any-window-255l</guid>
      <description>&lt;p&gt;The account page&lt;br&gt;
embedded a checkout&lt;br&gt;
from the payments provider.&lt;/p&gt;

&lt;p&gt;An iframe&lt;br&gt;
on another origin,&lt;br&gt;
so the two sides talked&lt;br&gt;
with postMessage.&lt;/p&gt;

&lt;p&gt;The frame said resize,&lt;br&gt;
and the page grew it.&lt;/p&gt;

&lt;p&gt;The frame said done,&lt;br&gt;
and the page showed a notice&lt;br&gt;
the frame had sent along.&lt;/p&gt;

&lt;p&gt;window.addEventListener("message", e =&amp;gt; {&lt;br&gt;
  if (e.data.type === "notice") banner.innerHTML = e.data.html;&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;It worked on the first try.&lt;/p&gt;

&lt;p&gt;That was the warning.&lt;/p&gt;

&lt;p&gt;A message listener&lt;br&gt;
does not know who is talking&lt;br&gt;
unless you ask.&lt;/p&gt;

&lt;p&gt;Any window&lt;br&gt;
holding a reference to yours&lt;br&gt;
can post to it.&lt;/p&gt;

&lt;p&gt;Your own iframe, yes.&lt;/p&gt;

&lt;p&gt;Also a page&lt;br&gt;
that opened yours&lt;br&gt;
with window.open.&lt;/p&gt;

&lt;p&gt;Also a page&lt;br&gt;
that framed yours,&lt;br&gt;
if you let it be framed.&lt;/p&gt;

&lt;p&gt;The attacker's page&lt;br&gt;
did the first.&lt;/p&gt;

&lt;p&gt;It opened the account page&lt;br&gt;
in a new tab,&lt;br&gt;
waited a second,&lt;br&gt;
and posted one message.&lt;/p&gt;

&lt;p&gt;Type notice,&lt;br&gt;
and some HTML&lt;br&gt;
with a script hidden&lt;br&gt;
in an image error handler.&lt;/p&gt;

&lt;p&gt;The page put it on screen,&lt;br&gt;
inside the logged in session.&lt;/p&gt;

&lt;p&gt;The browser tells you&lt;br&gt;
where every message came from.&lt;/p&gt;

&lt;p&gt;e.origin.&lt;/p&gt;

&lt;p&gt;Check it first,&lt;br&gt;
against the exact origin you expect,&lt;br&gt;
scheme, host and port,&lt;br&gt;
with ===.&lt;/p&gt;

&lt;p&gt;Not includes.&lt;/p&gt;

&lt;p&gt;Not startsWith.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pay.example.com.attacker.net" rel="noopener noreferrer"&gt;https://pay.example.com.attacker.net&lt;/a&gt;&lt;br&gt;
starts with the right thing.&lt;/p&gt;

&lt;p&gt;Then check that e.source&lt;br&gt;
is the frame you created,&lt;br&gt;
and check the shape of the data&lt;br&gt;
before you touch it.&lt;/p&gt;

&lt;p&gt;And never put&lt;br&gt;
anything from a message&lt;br&gt;
into innerHTML.&lt;/p&gt;

&lt;p&gt;The other direction&lt;br&gt;
has its own trap.&lt;/p&gt;

&lt;p&gt;When you send,&lt;br&gt;
the second argument says&lt;br&gt;
which origin may receive it.&lt;/p&gt;

&lt;p&gt;"*" means anybody.&lt;/p&gt;

&lt;p&gt;If the frame you post to&lt;br&gt;
has been navigated somewhere else,&lt;br&gt;
your message goes there instead.&lt;/p&gt;

&lt;p&gt;Name the origin.&lt;/p&gt;

&lt;p&gt;A header helps as well.&lt;/p&gt;

&lt;p&gt;Cross-Origin-Opener-Policy: same-origin&lt;br&gt;
cuts the link&lt;br&gt;
between your page&lt;br&gt;
and a cross-origin page that opened it,&lt;br&gt;
so that reference&lt;br&gt;
stops reaching you.&lt;/p&gt;

&lt;p&gt;Then search your code&lt;br&gt;
for addEventListener("message".&lt;/p&gt;

&lt;p&gt;Every one of them&lt;br&gt;
is a door&lt;br&gt;
anyone with a tab&lt;br&gt;
can knock on.&lt;/p&gt;

&lt;p&gt;Find out&lt;br&gt;
which of them&lt;br&gt;
ask who is knocking.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>security</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>You Filled the Email Template With replace and the Second {name} Went Out Unfilled</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Mon, 09 Nov 2026 09:42:11 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-filled-the-email-template-with-replace-and-the-second-name-went-out-unfilled-4n3k</link>
      <guid>https://dev.to/sergueyasaelshinder/you-filled-the-email-template-with-replace-and-the-second-name-went-out-unfilled-4n3k</guid>
      <description>&lt;p&gt;The template was simple.&lt;/p&gt;

&lt;p&gt;A renewal reminder,&lt;br&gt;
written by marketing,&lt;br&gt;
with two places for the name.&lt;/p&gt;

&lt;p&gt;Hi {name},&lt;br&gt;
at the top.&lt;/p&gt;

&lt;p&gt;We will keep everything ready for you, {name},&lt;br&gt;
near the bottom.&lt;/p&gt;

&lt;p&gt;The code that filled it&lt;br&gt;
was one line per field.&lt;/p&gt;

&lt;p&gt;body = body.replace("{name}", customer.firstName);&lt;/p&gt;

&lt;p&gt;The test used a template&lt;br&gt;
with one {name} in it.&lt;/p&gt;

&lt;p&gt;It passed.&lt;/p&gt;

&lt;p&gt;Then the new copy went out&lt;br&gt;
to eleven thousand customers,&lt;br&gt;
and every one of them&lt;br&gt;
was greeted by name&lt;br&gt;
and signed off to as {name}.&lt;/p&gt;

&lt;p&gt;In JavaScript,&lt;br&gt;
when the first argument to replace&lt;br&gt;
is a string,&lt;br&gt;
only the first match is replaced.&lt;/p&gt;

&lt;p&gt;Not all of them.&lt;/p&gt;

&lt;p&gt;The first one,&lt;br&gt;
and then it stops.&lt;/p&gt;

&lt;p&gt;It is in the documentation.&lt;/p&gt;

&lt;p&gt;It is in nobody's fingers,&lt;br&gt;
because the same word&lt;br&gt;
means something else&lt;br&gt;
almost everywhere else.&lt;/p&gt;

&lt;p&gt;Python's str.replace&lt;br&gt;
replaces every occurrence.&lt;/p&gt;

&lt;p&gt;Java's String.replace&lt;br&gt;
replaces every occurrence.&lt;/p&gt;

&lt;p&gt;So does C#.&lt;/p&gt;

&lt;p&gt;So the line read correctly&lt;br&gt;
to everyone who reviewed it.&lt;/p&gt;

&lt;p&gt;There are two fixes.&lt;/p&gt;

&lt;p&gt;Since ES2021&lt;br&gt;
the language has replaceAll.&lt;/p&gt;

&lt;p&gt;body.replaceAll("{name}", customer.firstName)&lt;/p&gt;

&lt;p&gt;A string pattern,&lt;br&gt;
every match,&lt;br&gt;
taken literally.&lt;/p&gt;

&lt;p&gt;Or a regular expression&lt;br&gt;
with the g flag,&lt;br&gt;
but then the braces&lt;br&gt;
belong to a pattern,&lt;br&gt;
and every special character&lt;br&gt;
in a placeholder&lt;br&gt;
has to be escaped by hand.&lt;/p&gt;

&lt;p&gt;replaceAll given a regular expression&lt;br&gt;
without the g&lt;br&gt;
does not quietly do one.&lt;/p&gt;

&lt;p&gt;It throws.&lt;/p&gt;

&lt;p&gt;That is the kind of failure&lt;br&gt;
you want.&lt;/p&gt;

&lt;p&gt;One more trap&lt;br&gt;
waits in the second argument.&lt;/p&gt;

&lt;p&gt;The replacement has its own small language.&lt;/p&gt;

&lt;p&gt;$&amp;amp; means the matched text.&lt;/p&gt;

&lt;p&gt;$$ means a single dollar sign.&lt;/p&gt;

&lt;p&gt;So a value with a dollar sign&lt;br&gt;
in the wrong place&lt;br&gt;
can come out changed.&lt;/p&gt;

&lt;p&gt;If the text comes from a user,&lt;br&gt;
pass a function instead,&lt;br&gt;
() =&amp;gt; value,&lt;br&gt;
and it goes in exactly as written.&lt;/p&gt;

&lt;p&gt;Better still,&lt;br&gt;
stop filling templates with replace.&lt;/p&gt;

&lt;p&gt;Use a template engine,&lt;br&gt;
something that knows&lt;br&gt;
what a placeholder is&lt;br&gt;
and complains when one is left over.&lt;/p&gt;

&lt;p&gt;And add one check&lt;br&gt;
before anything is sent.&lt;/p&gt;

&lt;p&gt;If the finished text&lt;br&gt;
still contains a word&lt;br&gt;
inside curly braces,&lt;br&gt;
it does not go out.&lt;/p&gt;

&lt;p&gt;Then fix the test.&lt;/p&gt;

&lt;p&gt;A template with one placeholder&lt;br&gt;
proves the placeholder works.&lt;/p&gt;

&lt;p&gt;A template with the same placeholder twice&lt;br&gt;
proves the code does.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Some of Your Mac Tools Still Run Through Rosetta and Apple Has Named the Last Version</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Fri, 06 Nov 2026 09:48:55 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/some-of-your-mac-tools-still-run-through-rosetta-and-apple-has-named-the-last-version-5513</link>
      <guid>https://dev.to/sergueyasaelshinder/some-of-your-mac-tools-still-run-through-rosetta-and-apple-has-named-the-last-version-5513</guid>
      <description>&lt;p&gt;Your laptop is an Apple silicon Mac,&lt;br&gt;
and so is everyone's on the team.&lt;/p&gt;

&lt;p&gt;Everything works.&lt;/p&gt;

&lt;p&gt;The build runs,&lt;br&gt;
the database client opens,&lt;br&gt;
the old command line tool&lt;br&gt;
the release script calls&lt;br&gt;
does what it always did.&lt;/p&gt;

&lt;p&gt;Nobody has asked&lt;br&gt;
which of those programs&lt;br&gt;
were built for the chip&lt;br&gt;
inside the machine.&lt;/p&gt;

&lt;p&gt;Some of them were not.&lt;/p&gt;

&lt;p&gt;When an Intel only program starts&lt;br&gt;
on an Apple silicon Mac,&lt;br&gt;
macOS hands it to Rosetta 2.&lt;/p&gt;

&lt;p&gt;Rosetta translates&lt;br&gt;
the Intel instructions&lt;br&gt;
into Arm ones,&lt;br&gt;
mostly ahead of time,&lt;br&gt;
and keeps the result.&lt;/p&gt;

&lt;p&gt;It is good enough&lt;br&gt;
that most people never notice.&lt;/p&gt;

&lt;p&gt;That is the problem.&lt;/p&gt;

&lt;p&gt;It is also temporary.&lt;/p&gt;

&lt;p&gt;When Apple announced&lt;br&gt;
that macOS 26&lt;br&gt;
would be the last release for Intel Macs,&lt;br&gt;
it also said&lt;br&gt;
how long Rosetta stays.&lt;/p&gt;

&lt;p&gt;Fully available&lt;br&gt;
through macOS 27.&lt;/p&gt;

&lt;p&gt;After that,&lt;br&gt;
only a smaller part of it,&lt;br&gt;
kept for older games.&lt;/p&gt;

&lt;p&gt;Your build tools&lt;br&gt;
are not older games.&lt;/p&gt;

&lt;p&gt;So find out&lt;br&gt;
what is being translated&lt;br&gt;
before the version arrives&lt;br&gt;
that stops translating it.&lt;/p&gt;

&lt;p&gt;Activity Monitor&lt;br&gt;
has a column called Kind.&lt;/p&gt;

&lt;p&gt;Apple,&lt;br&gt;
or Intel.&lt;/p&gt;

&lt;p&gt;Sort by it&lt;br&gt;
while you run a full build.&lt;/p&gt;

&lt;p&gt;On the command line,&lt;br&gt;
file followed by a path&lt;br&gt;
tells you which chips&lt;br&gt;
a binary was built for.&lt;/p&gt;

&lt;p&gt;x86_64 on its own&lt;br&gt;
means Rosetta.&lt;/p&gt;

&lt;p&gt;Then check the place&lt;br&gt;
people forget.&lt;/p&gt;

&lt;p&gt;A shell&lt;br&gt;
started under Rosetta&lt;br&gt;
makes everything it launches&lt;br&gt;
Intel as well.&lt;/p&gt;

&lt;p&gt;If arch prints i386&lt;br&gt;
in your terminal,&lt;br&gt;
your whole session&lt;br&gt;
is being translated.&lt;/p&gt;

&lt;p&gt;Homebrew is a good clue.&lt;/p&gt;

&lt;p&gt;The Apple silicon install&lt;br&gt;
lives in /opt/homebrew.&lt;/p&gt;

&lt;p&gt;The Intel one&lt;br&gt;
lives in /usr/local.&lt;/p&gt;

&lt;p&gt;A laptop migrated&lt;br&gt;
from an old Intel Mac&lt;br&gt;
often still has both,&lt;br&gt;
and a PATH&lt;br&gt;
that finds the old one first.&lt;/p&gt;

&lt;p&gt;Then look at&lt;br&gt;
what you downloaded by hand.&lt;/p&gt;

&lt;p&gt;The vendor CLI,&lt;br&gt;
the old JDK,&lt;br&gt;
the database driver,&lt;br&gt;
the editor plugin&lt;br&gt;
nobody has updated.&lt;/p&gt;

&lt;p&gt;Most have Arm builds now.&lt;/p&gt;

&lt;p&gt;Switching&lt;br&gt;
is usually one download,&lt;br&gt;
and the tool gets faster.&lt;/p&gt;

&lt;p&gt;For the few that have none,&lt;br&gt;
you want to know now,&lt;br&gt;
while there is time&lt;br&gt;
to ask the vendor,&lt;br&gt;
not on the morning&lt;br&gt;
the upgrade lands.&lt;/p&gt;

&lt;p&gt;And put the check&lt;br&gt;
in the setup script&lt;br&gt;
for new laptops.&lt;/p&gt;

&lt;p&gt;Translated&lt;br&gt;
means it works today.&lt;/p&gt;

&lt;p&gt;It does not mean&lt;br&gt;
anyone has promised tomorrow.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>macos</category>
      <category>devops</category>
      <category>tooling</category>
    </item>
    <item>
      <title>You Read Your Slides Aloud and the Room Stopped Following Either</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Fri, 06 Nov 2026 09:48:23 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-read-your-slides-aloud-and-the-room-stopped-following-either-127i</link>
      <guid>https://dev.to/sergueyasaelshinder/you-read-your-slides-aloud-and-the-room-stopped-following-either-127i</guid>
      <description>&lt;p&gt;Thirty people in the room,&lt;br&gt;
and the migration plan&lt;br&gt;
in twelve slides.&lt;/p&gt;

&lt;p&gt;You had worked hard on them.&lt;/p&gt;

&lt;p&gt;Every point was there,&lt;br&gt;
written out in full,&lt;br&gt;
so nobody could miss it.&lt;/p&gt;

&lt;p&gt;Then you talked through them,&lt;br&gt;
line by line,&lt;br&gt;
so nobody could miss it twice.&lt;/p&gt;

&lt;p&gt;Afterwards&lt;br&gt;
the questions came in.&lt;/p&gt;

&lt;p&gt;Every one of them&lt;br&gt;
was answered on a slide.&lt;/p&gt;

&lt;p&gt;Nobody had been rude.&lt;/p&gt;

&lt;p&gt;They had been looking.&lt;/p&gt;

&lt;p&gt;They just had not taken it in.&lt;/p&gt;

&lt;p&gt;Here is what the room was doing.&lt;/p&gt;

&lt;p&gt;People read faster&lt;br&gt;
than you speak.&lt;/p&gt;

&lt;p&gt;So they read the slide&lt;br&gt;
while you were still on line two,&lt;br&gt;
finished,&lt;br&gt;
and then waited for you to catch up,&lt;br&gt;
listening to words&lt;br&gt;
they had already read.&lt;/p&gt;

&lt;p&gt;Or they tried to do both.&lt;/p&gt;

&lt;p&gt;Read one sentence&lt;br&gt;
while hearing another,&lt;br&gt;
in the same language,&lt;br&gt;
with the same meaning,&lt;br&gt;
at a different speed.&lt;/p&gt;

&lt;p&gt;That is harder&lt;br&gt;
than either alone.&lt;/p&gt;

&lt;p&gt;People who study learning&lt;br&gt;
have tested this.&lt;/p&gt;

&lt;p&gt;Richard Mayer and his colleagues&lt;br&gt;
compared a group&lt;br&gt;
who saw a diagram with spoken explanation&lt;br&gt;
against a group who got the same,&lt;br&gt;
plus the words printed on the screen.&lt;/p&gt;

&lt;p&gt;The group with the printed words&lt;br&gt;
did worse&lt;br&gt;
when asked to use what they had learned.&lt;/p&gt;

&lt;p&gt;It is called&lt;br&gt;
the redundancy effect.&lt;/p&gt;

&lt;p&gt;The usual explanation&lt;br&gt;
is that the eyes are already busy.&lt;/p&gt;

&lt;p&gt;They have the diagram to look at.&lt;/p&gt;

&lt;p&gt;Now they have text as well,&lt;br&gt;
and they keep jumping between the two,&lt;br&gt;
while the ears&lt;br&gt;
carry the same words a third time.&lt;/p&gt;

&lt;p&gt;It is not a law&lt;br&gt;
for every case.&lt;/p&gt;

&lt;p&gt;If there is no picture,&lt;br&gt;
if the audience is working&lt;br&gt;
in its second language,&lt;br&gt;
or the room is noisy,&lt;br&gt;
words on the screen&lt;br&gt;
can help.&lt;/p&gt;

&lt;p&gt;But a plan with a diagram in it,&lt;br&gt;
read aloud to people&lt;br&gt;
who could read it themselves,&lt;br&gt;
costs attention&lt;br&gt;
and returns none.&lt;/p&gt;

&lt;p&gt;So split the jobs.&lt;/p&gt;

&lt;p&gt;The slide carries the picture.&lt;/p&gt;

&lt;p&gt;The shape of the migration,&lt;br&gt;
the boxes that move,&lt;br&gt;
a few words to label them.&lt;/p&gt;

&lt;p&gt;Your voice&lt;br&gt;
carries the sentences.&lt;/p&gt;

&lt;p&gt;What happens first,&lt;br&gt;
what could go wrong,&lt;br&gt;
what you need from them.&lt;/p&gt;

&lt;p&gt;And the full text,&lt;br&gt;
every detail,&lt;br&gt;
goes in a document&lt;br&gt;
sent before or after,&lt;br&gt;
where people can read it&lt;br&gt;
at their own speed&lt;br&gt;
without you talking over it.&lt;/p&gt;

&lt;p&gt;If you catch yourself&lt;br&gt;
reading a bullet aloud,&lt;br&gt;
stop,&lt;br&gt;
and say why it matters instead.&lt;/p&gt;

&lt;p&gt;They can already read.&lt;/p&gt;

&lt;p&gt;What they cannot do&lt;br&gt;
is read your mind.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>focus</category>
      <category>presentations</category>
      <category>learning</category>
    </item>
    <item>
      <title>You Have Heard So Often That the Database Is the Bottleneck That You Believe It</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Fri, 06 Nov 2026 09:47:51 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-have-heard-so-often-that-the-database-is-the-bottleneck-that-you-believe-it-26kl</link>
      <guid>https://dev.to/sergueyasaelshinder/you-have-heard-so-often-that-the-database-is-the-bottleneck-that-you-believe-it-26kl</guid>
      <description>&lt;p&gt;Every planning meeting&lt;br&gt;
somebody says it.&lt;/p&gt;

&lt;p&gt;We cannot add that report.&lt;/p&gt;

&lt;p&gt;The database will not take it.&lt;/p&gt;

&lt;p&gt;Nobody argues.&lt;/p&gt;

&lt;p&gt;You have said it yourself,&lt;br&gt;
to a new starter,&lt;br&gt;
with complete confidence.&lt;/p&gt;

&lt;p&gt;Then one quiet week&lt;br&gt;
somebody ran the test.&lt;/p&gt;

&lt;p&gt;Ten times the reporting load,&lt;br&gt;
on a copy of production.&lt;/p&gt;

&lt;p&gt;The database&lt;br&gt;
barely noticed.&lt;/p&gt;

&lt;p&gt;The slow part&lt;br&gt;
was one query&lt;br&gt;
nobody had looked at,&lt;br&gt;
and a connection pool&lt;br&gt;
set to five.&lt;/p&gt;

&lt;p&gt;Where did the belief come from?&lt;/p&gt;

&lt;p&gt;Nobody could say.&lt;/p&gt;

&lt;p&gt;Someone remembered an outage,&lt;br&gt;
three years and two servers ago.&lt;/p&gt;

&lt;p&gt;Everyone else&lt;br&gt;
had simply heard it,&lt;br&gt;
many times.&lt;/p&gt;

&lt;p&gt;That turns out&lt;br&gt;
to be enough.&lt;/p&gt;

&lt;p&gt;In 1977&lt;br&gt;
Lynn Hasher and her colleagues&lt;br&gt;
gave people a list&lt;br&gt;
of plausible statements,&lt;br&gt;
some true and some false,&lt;br&gt;
and asked how true each one seemed.&lt;/p&gt;

&lt;p&gt;They came back&lt;br&gt;
two weeks later,&lt;br&gt;
and again after that.&lt;/p&gt;

&lt;p&gt;Some statements&lt;br&gt;
appeared every time.&lt;/p&gt;

&lt;p&gt;Those were rated&lt;br&gt;
more and more true,&lt;br&gt;
whether they were true or not.&lt;/p&gt;

&lt;p&gt;It is called&lt;br&gt;
the illusory truth effect.&lt;/p&gt;

&lt;p&gt;The best explanation&lt;br&gt;
is fluency.&lt;/p&gt;

&lt;p&gt;A sentence you have met before&lt;br&gt;
is easier to process.&lt;/p&gt;

&lt;p&gt;And easy&lt;br&gt;
feels like right.&lt;/p&gt;

&lt;p&gt;You do not remember&lt;br&gt;
the source.&lt;/p&gt;

&lt;p&gt;You remember&lt;br&gt;
that it went down smoothly.&lt;/p&gt;

&lt;p&gt;In 2015&lt;br&gt;
Lisa Fazio and her colleagues&lt;br&gt;
showed it working&lt;br&gt;
even against what people knew.&lt;/p&gt;

&lt;p&gt;Repeat a false line&lt;br&gt;
about something they could answer,&lt;br&gt;
like the name of the skirt Scots wear,&lt;br&gt;
and belief in the false version&lt;br&gt;
still went up.&lt;/p&gt;

&lt;p&gt;Knowing better&lt;br&gt;
did not fully protect them.&lt;/p&gt;

&lt;p&gt;A team&lt;br&gt;
is a machine for repeating things.&lt;/p&gt;

&lt;p&gt;Standups,&lt;br&gt;
retros,&lt;br&gt;
the onboarding talk,&lt;br&gt;
the old wiki page.&lt;/p&gt;

&lt;p&gt;Every repetition&lt;br&gt;
makes a claim smoother,&lt;br&gt;
and not one of them&lt;br&gt;
makes it more tested.&lt;/p&gt;

&lt;p&gt;So when a sentence&lt;br&gt;
feels too obvious to check,&lt;br&gt;
ask where it came from.&lt;/p&gt;

&lt;p&gt;Not whether it is true.&lt;/p&gt;

&lt;p&gt;Where you first heard it,&lt;br&gt;
and what that person had measured.&lt;/p&gt;

&lt;p&gt;If nobody knows,&lt;br&gt;
it is a rumour&lt;br&gt;
with good attendance.&lt;/p&gt;

&lt;p&gt;Write the team's load bearing beliefs down,&lt;br&gt;
each with its evidence&lt;br&gt;
and the date it was checked.&lt;/p&gt;

&lt;p&gt;The database cannot take more load.&lt;/p&gt;

&lt;p&gt;Measured when,&lt;br&gt;
on which hardware,&lt;br&gt;
by whom?&lt;/p&gt;

&lt;p&gt;When one stops being true,&lt;br&gt;
cross it out&lt;br&gt;
where everyone can see.&lt;/p&gt;

&lt;p&gt;And notice the moment&lt;br&gt;
you say it yourself&lt;br&gt;
to someone new.&lt;/p&gt;

&lt;p&gt;That is how it spreads.&lt;/p&gt;

&lt;p&gt;Familiar&lt;br&gt;
is not the same as checked.&lt;/p&gt;

&lt;p&gt;It only feels that way&lt;br&gt;
from the inside.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>mindset</category>
      <category>psychology</category>
      <category>teamwork</category>
    </item>
    <item>
      <title>You Copied the Guitar to Both Sides and It Still Sat in the Middle</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Fri, 06 Nov 2026 09:47:18 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-copied-the-guitar-to-both-sides-and-it-still-sat-in-the-middle-4flm</link>
      <guid>https://dev.to/sergueyasaelshinder/you-copied-the-guitar-to-both-sides-and-it-still-sat-in-the-middle-4flm</guid>
      <description>&lt;p&gt;The rhythm guitar&lt;br&gt;
was recorded once,&lt;br&gt;
and it was a good take.&lt;/p&gt;

&lt;p&gt;You wanted it wide.&lt;/p&gt;

&lt;p&gt;The big kind of rhythm sound,&lt;br&gt;
one guitar in each speaker,&lt;br&gt;
the chorus filling the room.&lt;/p&gt;

&lt;p&gt;So you duplicated the track,&lt;br&gt;
panned one copy hard left,&lt;br&gt;
the other hard right,&lt;br&gt;
and pressed play.&lt;/p&gt;

&lt;p&gt;It was louder.&lt;/p&gt;

&lt;p&gt;It was not wider.&lt;/p&gt;

&lt;p&gt;The guitar sat&lt;br&gt;
exactly where it had been,&lt;br&gt;
in the middle,&lt;br&gt;
between the speakers.&lt;/p&gt;

&lt;p&gt;Nothing was broken.&lt;/p&gt;

&lt;p&gt;You had built&lt;br&gt;
a centre.&lt;/p&gt;

&lt;p&gt;Your ears decide&lt;br&gt;
where a sound is&lt;br&gt;
by comparing what reaches each of them.&lt;/p&gt;

&lt;p&gt;Louder on the left,&lt;br&gt;
or a little earlier on the left,&lt;br&gt;
and it is on the left.&lt;/p&gt;

&lt;p&gt;Two speakers playing&lt;br&gt;
the exact same signal,&lt;br&gt;
at the exact same level,&lt;br&gt;
at the exact same time,&lt;br&gt;
give your ears nothing to compare.&lt;/p&gt;

&lt;p&gt;The only place&lt;br&gt;
one source could be&lt;br&gt;
to sound like that&lt;br&gt;
is straight ahead.&lt;/p&gt;

&lt;p&gt;So that is where you hear it.&lt;/p&gt;

&lt;p&gt;It is the same trick&lt;br&gt;
that puts the lead vocal&lt;br&gt;
in the middle of a mix&lt;br&gt;
with no centre speaker at all.&lt;/p&gt;

&lt;p&gt;Panning a copy hard left&lt;br&gt;
and its twin hard right&lt;br&gt;
is just panning it to the centre&lt;br&gt;
the long way round,&lt;br&gt;
plus a few decibels.&lt;/p&gt;

&lt;p&gt;What makes a double tracked guitar wide&lt;br&gt;
is that it is not a copy.&lt;/p&gt;

&lt;p&gt;The player&lt;br&gt;
plays the part again.&lt;/p&gt;

&lt;p&gt;The second take&lt;br&gt;
is a few milliseconds early here,&lt;br&gt;
a little late there,&lt;br&gt;
a fraction sharp on one chord,&lt;br&gt;
picked slightly harder on another.&lt;/p&gt;

&lt;p&gt;Those differences&lt;br&gt;
keep changing,&lt;br&gt;
so your ears cannot fuse the two&lt;br&gt;
into one guitar in the middle.&lt;/p&gt;

&lt;p&gt;They hear two players,&lt;br&gt;
one on each side.&lt;/p&gt;

&lt;p&gt;So play it twice.&lt;/p&gt;

&lt;p&gt;Same part,&lt;br&gt;
same sound,&lt;br&gt;
a real second performance.&lt;/p&gt;

&lt;p&gt;Tight,&lt;br&gt;
but not perfect,&lt;br&gt;
because perfect&lt;br&gt;
would put you back in the centre.&lt;/p&gt;

&lt;p&gt;Then pan them apart.&lt;/p&gt;

&lt;p&gt;If there is no second take,&lt;br&gt;
there are ways to fake it.&lt;/p&gt;

&lt;p&gt;Abbey Road built a way&lt;br&gt;
in 1966,&lt;br&gt;
artificial double tracking,&lt;br&gt;
because John Lennon&lt;br&gt;
hated singing everything twice.&lt;/p&gt;

&lt;p&gt;A slowly wandering delay,&lt;br&gt;
a small pitch shift,&lt;br&gt;
a different amp sound on the copy.&lt;/p&gt;

&lt;p&gt;They help.&lt;/p&gt;

&lt;p&gt;None of them is as wide&lt;br&gt;
as playing it again.&lt;/p&gt;

&lt;p&gt;And whatever you do,&lt;br&gt;
press the mono button afterwards.&lt;/p&gt;

&lt;p&gt;A copy&lt;br&gt;
nudged a few milliseconds late&lt;br&gt;
can sound wide in stereo&lt;br&gt;
and thin and hollow&lt;br&gt;
when the two sides are added together.&lt;/p&gt;

&lt;p&gt;Real takes&lt;br&gt;
survive that better,&lt;br&gt;
because their differences&lt;br&gt;
never line up long enough&lt;br&gt;
to cancel.&lt;/p&gt;

&lt;p&gt;Width is not&lt;br&gt;
two speakers playing.&lt;/p&gt;

&lt;p&gt;It is two speakers&lt;br&gt;
disagreeing a little.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>music</category>
      <category>mixing</category>
      <category>audio</category>
    </item>
    <item>
      <title>You Turned Up the Repetition Penalty and the Model Renamed Your JSON Keys</title>
      <dc:creator>Serguey Asael Shinder</dc:creator>
      <pubDate>Fri, 06 Nov 2026 09:46:41 +0000</pubDate>
      <link>https://dev.to/sergueyasaelshinder/you-turned-up-the-repetition-penalty-and-the-model-renamed-your-json-keys-2eh0</link>
      <guid>https://dev.to/sergueyasaelshinder/you-turned-up-the-repetition-penalty-and-the-model-renamed-your-json-keys-2eh0</guid>
      <description>&lt;p&gt;Somebody on the team&lt;br&gt;
was tired of the marketing copy&lt;br&gt;
saying seamless&lt;br&gt;
four times a paragraph.&lt;/p&gt;

&lt;p&gt;So they found a setting.&lt;/p&gt;

&lt;p&gt;Frequency penalty,&lt;br&gt;
turned up to one point five.&lt;/p&gt;

&lt;p&gt;It worked.&lt;/p&gt;

&lt;p&gt;The copy got more varied.&lt;/p&gt;

&lt;p&gt;The setting lived&lt;br&gt;
in the shared client config.&lt;/p&gt;

&lt;p&gt;Two weeks later&lt;br&gt;
the invoice extractor,&lt;br&gt;
which used the same client,&lt;br&gt;
started losing rows.&lt;/p&gt;

&lt;p&gt;Fifty invoices in,&lt;br&gt;
fifty JSON objects out,&lt;br&gt;
and the first twenty&lt;br&gt;
were perfect.&lt;/p&gt;

&lt;p&gt;After that&lt;br&gt;
the keys began to wander.&lt;/p&gt;

&lt;p&gt;supplier became vendor.&lt;/p&gt;

&lt;p&gt;total became amount_due,&lt;br&gt;
then sum.&lt;/p&gt;

&lt;p&gt;One record&lt;br&gt;
wrote invoice number&lt;br&gt;
with a space in it.&lt;/p&gt;

&lt;p&gt;The parser&lt;br&gt;
expected exact names,&lt;br&gt;
skipped what it did not recognise,&lt;br&gt;
and reported success.&lt;/p&gt;

&lt;p&gt;Here is what the setting does.&lt;/p&gt;

&lt;p&gt;At every step&lt;br&gt;
the model scores&lt;br&gt;
each possible next token.&lt;/p&gt;

&lt;p&gt;A frequency penalty&lt;br&gt;
lowers the score of a token&lt;br&gt;
by a fixed amount&lt;br&gt;
for every time&lt;br&gt;
it has already appeared&lt;br&gt;
in the answer.&lt;/p&gt;

&lt;p&gt;Twice,&lt;br&gt;
two steps down.&lt;/p&gt;

&lt;p&gt;Thirty times,&lt;br&gt;
thirty steps down.&lt;/p&gt;

&lt;p&gt;Its sibling,&lt;br&gt;
the presence penalty,&lt;br&gt;
lowers it once,&lt;br&gt;
as soon as it has been used at all.&lt;/p&gt;

&lt;p&gt;In prose&lt;br&gt;
that pushes away&lt;br&gt;
the tired word.&lt;/p&gt;

&lt;p&gt;In a list of fifty records&lt;br&gt;
the most repeated tokens&lt;br&gt;
are exactly the ones&lt;br&gt;
that must not change.&lt;/p&gt;

&lt;p&gt;The key names.&lt;/p&gt;

&lt;p&gt;The quotes.&lt;/p&gt;

&lt;p&gt;The braces.&lt;/p&gt;

&lt;p&gt;By record twenty,&lt;br&gt;
supplier&lt;br&gt;
had been written twenty times,&lt;br&gt;
and every one of them&lt;br&gt;
counted against the next.&lt;/p&gt;

&lt;p&gt;The model was not confused.&lt;/p&gt;

&lt;p&gt;It was obeying.&lt;/p&gt;

&lt;p&gt;Writing the same word again&lt;br&gt;
had become the expensive choice,&lt;br&gt;
so it picked the nearest cheap one.&lt;/p&gt;

&lt;p&gt;Code fails the same way.&lt;/p&gt;

&lt;p&gt;A variable used often&lt;br&gt;
gets renamed halfway down a function.&lt;/p&gt;

&lt;p&gt;A closing bracket&lt;br&gt;
starts losing to something else.&lt;/p&gt;

&lt;p&gt;So keep penalties&lt;br&gt;
out of anything&lt;br&gt;
with a fixed vocabulary.&lt;/p&gt;

&lt;p&gt;JSON,&lt;br&gt;
code,&lt;br&gt;
SQL,&lt;br&gt;
labels from a list.&lt;/p&gt;

&lt;p&gt;Set them per task,&lt;br&gt;
not in a client&lt;br&gt;
that every task shares.&lt;/p&gt;

&lt;p&gt;Where the API offers it,&lt;br&gt;
use structured output&lt;br&gt;
with a schema,&lt;br&gt;
so the keys are enforced&lt;br&gt;
while the answer is written,&lt;br&gt;
not hoped for afterwards.&lt;/p&gt;

&lt;p&gt;And make the parser loud.&lt;/p&gt;

&lt;p&gt;An unknown key&lt;br&gt;
is an error,&lt;br&gt;
not a row to skip.&lt;/p&gt;

&lt;p&gt;Repetition&lt;br&gt;
is a fault in an essay.&lt;/p&gt;

&lt;p&gt;In a format&lt;br&gt;
it is the whole point.&lt;/p&gt;

&lt;p&gt;– Serguey Asael Shinder&lt;/p&gt;

</description>
      <category>sergueyasaelshinder</category>
      <category>ai</category>
      <category>llm</category>
      <category>json</category>
    </item>
  </channel>
</rss>
