<?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: zhang清溪</title>
    <description>The latest articles on DEV Community by zhang清溪 (@zhang_fe301a92583a05700).</description>
    <link>https://dev.to/zhang_fe301a92583a05700</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%2F4024217%2F1d74435f-6410-4780-b1d0-9aca316731c7.jpg</url>
      <title>DEV Community: zhang清溪</title>
      <link>https://dev.to/zhang_fe301a92583a05700</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhang_fe301a92583a05700"/>
    <language>en</language>
    <item>
      <title>How to Record a Clear Whiteboard Lesson Without Capturing Your Whole Desktop</title>
      <dc:creator>zhang清溪</dc:creator>
      <pubDate>Thu, 16 Jul 2026 15:09:50 +0000</pubDate>
      <link>https://dev.to/zhang_fe301a92583a05700/how-to-record-a-clear-whiteboard-lesson-without-capturing-your-whole-desktop-221j</link>
      <guid>https://dev.to/zhang_fe301a92583a05700/how-to-record-a-clear-whiteboard-lesson-without-capturing-your-whole-desktop-221j</guid>
      <description>&lt;p&gt;A whiteboard lesson is usually easy to understand while you are drawing it. The trouble appears after recording: the entire desktop is visible, the board is too small, notifications or toolbars distract from the explanation, and every equation becomes difficult to read on a phone.&lt;/p&gt;

&lt;p&gt;I ran into this while building short visual explanations. The solution was not a more complicated editor. It was to make the recording frame match the lesson before pressing record.&lt;/p&gt;

&lt;p&gt;Here is the workflow I now use.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Define one learning outcome
&lt;/h2&gt;

&lt;p&gt;A useful recorded lesson should answer one question.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why does this equation change at this step?&lt;/li&gt;
&lt;li&gt;How does this system architecture move data?&lt;/li&gt;
&lt;li&gt;What is the difference between these two product flows?&lt;/li&gt;
&lt;li&gt;Where did the student make a reasoning mistake?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a lesson has three unrelated outcomes, split it into three videos. Shorter videos are easier to rewatch, easier to update, and easier to share inside an LMS or tutoring chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Choose the final video shape first
&lt;/h2&gt;

&lt;p&gt;Do not record a large desktop and decide the crop later.&lt;/p&gt;

&lt;p&gt;Use 16:9 for YouTube, course platforms, and longer explanations. Use 9:16 for a short revision clip that will be watched on a phone. A square or portrait frame can work for social posts, but only if your labels stay large enough.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://excalirec.com/whiteboard-recorder-for-teachers/" rel="noopener noreferrer"&gt;ExcaliRec's whiteboard recorder for teachers&lt;/a&gt; because the recording frame is visible before I draw. That makes it much easier to keep every important mark inside the final video.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Plan the board in zones
&lt;/h2&gt;

&lt;p&gt;Divide the canvas into a few visual areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A short title or question&lt;/li&gt;
&lt;li&gt;The main working area&lt;/li&gt;
&lt;li&gt;A conclusion or final diagram&lt;/li&gt;
&lt;li&gt;One quiet corner if you want a webcam bubble&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This prevents the drawing from drifting endlessly across an infinite canvas. It also gives the camera a logical path to follow.&lt;/p&gt;

&lt;p&gt;If you want to show your face, keep it small. The presenter supports the explanation; the whiteboard carries it. I wrote a separate &lt;a href="https://excalirec.com/whiteboard-recorder-with-webcam/" rel="noopener noreferrer"&gt;webcam and whiteboard setup guide&lt;/a&gt; with framing and audio checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Write larger than feels necessary
&lt;/h2&gt;

&lt;p&gt;Your monitor is not the final viewing device.&lt;/p&gt;

&lt;p&gt;Students may watch beside their notes, inside a small LMS player, or on a phone. Use short labels, leave space between lines, and avoid building one giant diagram with tiny text.&lt;/p&gt;

&lt;p&gt;Automatic focus motion helps, but it cannot rescue an overcrowded board. Zoom should guide attention, not make the viewer chase the camera.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Record a ten-second test
&lt;/h2&gt;

&lt;p&gt;Before the real lesson, record a short sample:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Say one complete sentence&lt;/li&gt;
&lt;li&gt;Draw one line and one label&lt;/li&gt;
&lt;li&gt;Move to another part of the board&lt;/li&gt;
&lt;li&gt;Stop and watch the file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check four things: voice level, text size, camera position, and whether the focus movement feels calm. This ten-second test is faster than discovering a microphone or framing problem after a full lesson.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Explain in visual chunks
&lt;/h2&gt;

&lt;p&gt;Complete one idea before moving to the next area.&lt;/p&gt;

&lt;p&gt;For a math lesson, finish one transformation and pause. For an architecture diagram, finish one service and its connections. For a product flow, finish one user action before adding the next screen.&lt;/p&gt;

&lt;p&gt;A brief pause between chunks gives the viewer time to process the drawing. It also creates a clean edit point if you trim the video later.&lt;/p&gt;

&lt;p&gt;The full process is similar to the method in this &lt;a href="https://excalirec.com/record-drawing-process-video/" rel="noopener noreferrer"&gt;drawing process recording guide&lt;/a&gt;: start with a promise, build in visual chunks, then end on the complete idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Leave the final drawing on screen
&lt;/h2&gt;

&lt;p&gt;Do not stop immediately after the last word.&lt;/p&gt;

&lt;p&gt;Hold the finished board for a few seconds and summarize the one conclusion the viewer should remember. That pause lets students review the full structure or take a screenshot.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Check the downloaded video before sharing
&lt;/h2&gt;

&lt;p&gt;My final checklist is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first sentence is not cut off&lt;/li&gt;
&lt;li&gt;The last diagram remains visible&lt;/li&gt;
&lt;li&gt;Text is readable at phone size&lt;/li&gt;
&lt;li&gt;The webcam does not cover a label&lt;/li&gt;
&lt;li&gt;Audio is clear&lt;/li&gt;
&lt;li&gt;No private tabs or notifications appear&lt;/li&gt;
&lt;li&gt;The aspect ratio matches the destination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ExcaliRec records locally in the browser and downloads WebM. If a platform requires MP4, use a normal conversion step after recording rather than changing the teaching workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The main lesson
&lt;/h2&gt;

&lt;p&gt;A clear whiteboard video is mostly a framing and sequencing problem.&lt;/p&gt;

&lt;p&gt;Choose one outcome, define the final frame, write larger, explain in chunks, and verify a short test before the full recording. When the drawing stays central and the camera follows the explanation, the result needs much less editing than a raw desktop capture.&lt;/p&gt;

&lt;p&gt;You can try the browser recorder at &lt;a href="https://excalirec.com/app/" rel="noopener noreferrer"&gt;ExcaliRec&lt;/a&gt;. It works best on a modern desktop browser, and recording stays local until you choose where to share the downloaded file.&lt;/p&gt;

</description>
      <category>screenrecording</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>education</category>
    </item>
    <item>
      <title>FocuSee vs ExcaliRec: Which Recorder Is Better for Whiteboard Explainers?</title>
      <dc:creator>zhang清溪</dc:creator>
      <pubDate>Thu, 16 Jul 2026 12:57:40 +0000</pubDate>
      <link>https://dev.to/zhang_fe301a92583a05700/focusee-vs-excalirec-which-recorder-is-better-for-whiteboard-explainers-4ba</link>
      <guid>https://dev.to/zhang_fe301a92583a05700/focusee-vs-excalirec-which-recorder-is-better-for-whiteboard-explainers-4ba</guid>
      <description>&lt;p&gt;If your content is the drawing itself, a general desktop recorder is often the wrong starting point.&lt;/p&gt;

&lt;p&gt;That is the real difference between FocuSee and ExcaliRec.&lt;/p&gt;

&lt;p&gt;Both tools help you record visual explanations, but they are optimized for different jobs. If you compare them as if they solve the same problem, you will probably pick the wrong one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Choose &lt;strong&gt;FocuSee&lt;/strong&gt; if you need a polished desktop screen recorder for product demos, UI walkthroughs, and full-screen workflows.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;ExcaliRec&lt;/strong&gt; if you create whiteboard-style explainers where the drawing is the content and you want a faster browser-based workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What FocuSee is built for
&lt;/h2&gt;

&lt;p&gt;FocuSee is a polished recorder for desktop demos.&lt;/p&gt;

&lt;p&gt;Its strength is presentation: cursor motion, zoom effects, cleaner framing, and an edited-looking result without doing much post-production. If you are recording a software walkthrough, onboarding demo, or product tour, that makes sense.&lt;/p&gt;

&lt;p&gt;FocuSee is stronger when the viewer needs to follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interface details&lt;/li&gt;
&lt;li&gt;cursor movement&lt;/li&gt;
&lt;li&gt;feature sequences&lt;/li&gt;
&lt;li&gt;product interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, FocuSee is best when the screen itself is the story.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ExcaliRec is built for
&lt;/h2&gt;

&lt;p&gt;ExcaliRec is much narrower.&lt;/p&gt;

&lt;p&gt;It is built for whiteboard-style explainers, especially Excalidraw-style videos where the drawing is the actual content. You open the board, choose a ratio, record in the browser, keep the key strokes readable with auto-focus motion, and download the clip locally.&lt;/p&gt;

&lt;p&gt;ExcaliRec is stronger when the viewer needs to follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;diagrams&lt;/li&gt;
&lt;li&gt;sketches&lt;/li&gt;
&lt;li&gt;system flows&lt;/li&gt;
&lt;li&gt;concepts drawn on a board&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is the better fit when the whiteboard is the story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where FocuSee is better
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Better full desktop recording workflow&lt;/li&gt;
&lt;li&gt;Better fit for software walkthroughs&lt;/li&gt;
&lt;li&gt;Better fit for polished product demos&lt;/li&gt;
&lt;li&gt;More natural choice for cursor-led presentations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where ExcaliRec is better
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Faster setup for drawing-based explainers&lt;/li&gt;
&lt;li&gt;Browser-based workflow with no install&lt;/li&gt;
&lt;li&gt;Better fit for Excalidraw-style recording&lt;/li&gt;
&lt;li&gt;Simpler path when you only need to capture the board&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The mistake most comparisons make
&lt;/h2&gt;

&lt;p&gt;Many “screen recorder alternatives” pages compare tools that solve adjacent jobs, not identical ones.&lt;/p&gt;

&lt;p&gt;That is why feature checklists are often misleading.&lt;/p&gt;

&lt;p&gt;The right question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which tool has more effects?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The right question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should the viewer pay attention to?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the answer is &lt;strong&gt;the interface&lt;/strong&gt;, use a desktop demo recorder.&lt;/p&gt;

&lt;p&gt;If the answer is &lt;strong&gt;the whiteboard&lt;/strong&gt;, use a whiteboard-first recorder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for Excalidraw-style videos
&lt;/h2&gt;

&lt;p&gt;In whiteboard explainers, extra interface clutter usually hurts comprehension.&lt;/p&gt;

&lt;p&gt;Common problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;too much desktop UI&lt;/li&gt;
&lt;li&gt;too many editing controls&lt;/li&gt;
&lt;li&gt;too much setup before recording&lt;/li&gt;
&lt;li&gt;too many visual effects around a simple explanation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What usually works better is a lighter workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the whiteboard&lt;/li&gt;
&lt;li&gt;Pick a ratio&lt;/li&gt;
&lt;li&gt;Record locally&lt;/li&gt;
&lt;li&gt;Export the clip&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the workflow ExcaliRec is trying to simplify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final take
&lt;/h2&gt;

&lt;p&gt;FocuSee is the better general-purpose recorder for desktop demos.&lt;/p&gt;

&lt;p&gt;ExcaliRec is the better fit when the drawing is the content.&lt;/p&gt;

&lt;p&gt;If you teach, think, or sell by drawing, you probably do not need a full desktop recorder first.&lt;/p&gt;

&lt;p&gt;You need a recorder that gets out of the way.&lt;/p&gt;

&lt;p&gt;If you want to see the whiteboard-first approach, start here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://excalirec.com/focusee-alternative/" rel="noopener noreferrer"&gt;ExcaliRec FocuSee alternative&lt;/a&gt;&lt;/p&gt;

</description>
      <category>screenrecording</category>
      <category>whiteboard</category>
      <category>productivity</category>
      <category>excalidraw</category>
    </item>
    <item>
      <title>How I Built a Forgiving Color-Memory Score in JavaScript</title>
      <dc:creator>zhang清溪</dc:creator>
      <pubDate>Wed, 15 Jul 2026 13:57:52 +0000</pubDate>
      <link>https://dev.to/zhang_fe301a92583a05700/how-i-built-a-forgiving-color-memory-score-in-javascript-2cgg</link>
      <guid>https://dev.to/zhang_fe301a92583a05700/how-i-built-a-forgiving-color-memory-score-in-javascript-2cgg</guid>
      <description>&lt;p&gt;I built &lt;a href="https://toontones.net/" rel="noopener noreferrer"&gt;ToonTones&lt;/a&gt; around a small loop. You see a color, it disappears, and you rebuild it from memory.&lt;/p&gt;

&lt;p&gt;The controls use HSL because hue, saturation, and lightness make sense to players. The scoring code uses RGB instead.&lt;/p&gt;

&lt;p&gt;That split solved several problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I did not score the HSL sliders
&lt;/h2&gt;

&lt;p&gt;A direct HSL comparison looks tempting. Add the hue, saturation, and lightness differences, then map the total to ten points.&lt;/p&gt;

&lt;p&gt;Hue breaks that approach. Zero degrees and 359 degrees are neighbors, not opposites.&lt;/p&gt;

&lt;p&gt;Saturation also behaves strangely near gray. A hue difference can be mathematically large while the visible difference stays small.&lt;/p&gt;

&lt;p&gt;I kept HSL for input and converted both colors before scoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  The weighted RGB distance
&lt;/h2&gt;

&lt;p&gt;The target starts as a hex color. The player's HSL choice becomes hex, then both values become RGB.&lt;/p&gt;

&lt;p&gt;Here is the distance calculation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;colorDistance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;g1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;hexToRgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;r2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;g2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;hexToRgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redMean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;redMean&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;r2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;g2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;redMean&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Green gets the largest fixed weight. Red and blue weights change with the average red level.&lt;/p&gt;

&lt;p&gt;This is not Delta E. It does not model human vision perfectly.&lt;/p&gt;

&lt;p&gt;It is fast, deterministic, and easy to run after every round in a browser game.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning distance into a 0–10 score
&lt;/h2&gt;

&lt;p&gt;The largest distance under this formula is about 764.833. I use that value to normalize each result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalized&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;764.833&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;normalized&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;0.72&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exponent makes the game forgiving. A nearly correct answer should feel nearly correct.&lt;/p&gt;

&lt;p&gt;For one red target, an exact match scores 10.00. A small visible miss scores 9.87.&lt;/p&gt;

&lt;p&gt;A very different cyan guess scores 3.76. Black against white reaches zero.&lt;/p&gt;

&lt;p&gt;Those numbers made more sense during play than a harsh linear scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five rounds reduce lucky guesses
&lt;/h2&gt;

&lt;p&gt;One color can flatter or punish a player by accident. ToonTones averages five independent rounds.&lt;/p&gt;

&lt;p&gt;That average becomes the final score. It also gives players enough feedback to spot a pattern.&lt;/p&gt;

&lt;p&gt;Some players miss hue. Others remember vivid colors as darker or less saturated.&lt;/p&gt;

&lt;p&gt;The scorer does not diagnose those mistakes yet. The round-by-round swatches make them visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would change next
&lt;/h2&gt;

&lt;p&gt;A proper Lab-space comparison would be a useful experiment. Delta E could better match visible color differences.&lt;/p&gt;

&lt;p&gt;I would test it beside the current method before replacing anything. Better math does not always create better game feedback.&lt;/p&gt;

&lt;p&gt;The current formula is short, stable, and understandable. That matters for a game that explains every score immediately.&lt;/p&gt;

&lt;p&gt;I wrote a shorter &lt;a href="https://toontones.net/how-to-score-color-memory-game/" rel="noopener noreferrer"&gt;player-facing scoring guide&lt;/a&gt; with practical tips for reading each result.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
