<?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: 권준</title>
    <description>The latest articles on DEV Community by 권준 (@_bc30ec001274fcf78043b8).</description>
    <link>https://dev.to/_bc30ec001274fcf78043b8</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%2F4202971%2F6db265ea-22d7-4648-871b-bd1ba27aff95.png</url>
      <title>DEV Community: 권준</title>
      <link>https://dev.to/_bc30ec001274fcf78043b8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_bc30ec001274fcf78043b8"/>
    <language>en</language>
    <item>
      <title>Unsaid Archive — the ghost is what the record cannot tell us</title>
      <dc:creator>권준</dc:creator>
      <pubDate>Tue, 27 Oct 2026 15:53:03 +0000</pubDate>
      <link>https://dev.to/_bc30ec001274fcf78043b8/unsaid-archive-the-ghost-is-what-the-record-cannot-tell-us-1n41</link>
      <guid>https://dev.to/_bc30ec001274fcf78043b8/unsaid-archive-the-ghost-is-what-the-record-cannot-tell-us-1n41</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I asked a small archive a simple question: “How did she wait for someone to come home?”&lt;/p&gt;

&lt;p&gt;One invented letter describes a porch light left burning and soup warmed three times. The model ranked a paragraph about a closed factory above it.&lt;/p&gt;

&lt;p&gt;That mistake became the center of Unsaid Archive. A system that reads memories should not turn its best guess into someone's voice.&lt;/p&gt;

&lt;p&gt;This is a browser reading room built around an open sentence-embedding model. It finds potentially related passages, places them beside the complete source, and lets the reader move between candidates. It does not generate a reply in the writer's name. The ghost is the space between what we want to know and what a record actually contains.&lt;/p&gt;

&lt;p&gt;The demonstration letters are fictional. No family member, testimonial or historical voice has been reconstructed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Try the browser demo: &lt;a href="https://estona815.github.io/unsaid-archive/" rel="noopener noreferrer"&gt;https://estona815.github.io/unsaid-archive/&lt;/a&gt; . The first search downloads the model; allow about a minute on a slow connection.&lt;/p&gt;

&lt;p&gt;Open a small English text file to read your own archive. The app reads it on your device, splits nonempty lines into passages and rebuilds its local index. It does not upload the text. The supplied examples remain explicitly fictional.&lt;/p&gt;

&lt;p&gt;The music example retrieves a paragraph about tapping a melody on a kitchen table. Select the second result and the source highlight moves to the paragraph about leaving a piano behind. Every selection shows exact source character offsets and a source-text SHA-256.&lt;/p&gt;

&lt;p&gt;The waiting example preserves the retrieval failure. “What were her last words?” returns a low-similarity notice and nearby passages, never invented last words. That is not a promise that the system detects every unanswerable question: similarity cannot establish whether a source contains an answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;Source code: &lt;a href="https://github.com/estona815/unsaid-archive" rel="noopener noreferrer"&gt;https://github.com/estona815/unsaid-archive&lt;/a&gt; . The repository includes the static browser app, Python reference, tests, fictional letters and component provenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The reference implementation uses sentence-transformers/all-MiniLM-L6-v2 through Hugging Face Transformers and PyTorch. It mean-pools token representations with the attention mask, normalizes the vectors, and ranks passages by cosine similarity. The open model is central to retrieval; this is not a keyword lookup relabeled as AI.&lt;/p&gt;

&lt;p&gt;Passages retain the original text and offsets. Inputs above 256 model tokens are rejected rather than silently shortened. The browser edition runs the quantized Xenova ONNX conversion through Transformers.js 2.17.2. It fetches the library and model files on first use, then performs inference in browser memory. It does not send the question or imported text to an inference API. The separate Python reference can also run with a loopback-only server.&lt;/p&gt;

&lt;p&gt;Eight tests cover source integrity, duplicate identifiers, empty archives, source changes, allowed local routes and cross-origin request rejection. A six-case development evaluation blocked socket connections and still ran with cached model files. Among four related queries, the intended document ranked first in three. Only one cleared the provisional 0.4 threshold. Two unrelated questions remained below it. This is a tiny synthetic development exercise, not a benchmark or measured benefit to users.&lt;/p&gt;

&lt;p&gt;In the native browser, a separate imported fictional text returned its orange-mailing sentence for “What did I mail to my sister?” at cosine 0.593. A 300-token query was rejected rather than truncated. Browser quantization changes scores, so the Python results above are not a browser benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;I could inspect the pooling and ranking code, retain exact source spans, run with outbound connections disabled and show the model's failure without handing the private text to an inference service. An archive does not need a recurring inference account to remain readable once its runtime and weights are available.&lt;/p&gt;

&lt;p&gt;The browser downloads its library and model files initially; the hosting and model providers receive ordinary file requests. Cache eviction can cause another download, so offline browser reload is not promised. The Python reference was separately tested with network connections blocked. Both editions are English prototypes, not validated multilingual archives.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

&lt;p&gt;A convincing answer would have made the demo smoother. Keeping the wrong match visible makes the actual boundary legible: these are words to examine, not a person brought back to speak.&lt;/p&gt;

&lt;p&gt;OpenAI Codex authored the implementation, synthetic letters and draft under the entrant's direction. No unaided authorship, real family history or user study is claimed. The project began during the Week 4 entry period; only the general-purpose open model and existing runtime were reused.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>BatchDay: fewer starts, with every task still visible</title>
      <dc:creator>권준</dc:creator>
      <pubDate>Fri, 23 Oct 2026 16:09:20 +0000</pubDate>
      <link>https://dev.to/_bc30ec001274fcf78043b8/batchday-fewer-starts-with-every-task-still-visible-3ghk</link>
      <guid>https://dev.to/_bc30ec001274fcf78043b8/batchday-fewer-starts-with-every-task-still-visible-3ghk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Six chores can mean six starts: find the scanner, put it away, find it again. BatchDay asks a smaller question than a full productivity assistant: &lt;strong&gt;which tasks could share a short session?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It uses an open sentence-embedding model to suggest batches, while keeping every original task visible. You supply the context, day and estimated minutes. A task can always be marked “Separate.” Nothing is scheduled, completed or deleted on your behalf.&lt;/p&gt;

&lt;p&gt;The goal is fewer setup decisions for someone looking at a scattered list of small chores. The prototype does not prove a productivity gain. It makes the proposed tradeoff inspectable before you act.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://estona815.github.io/batchday/" rel="noopener noreferrer"&gt;Try BatchDay in your browser&lt;/a&gt;&lt;/strong&gt; — no account or inference API key required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiww3up810efkenzikuro.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiww3up810efkenzikuro.png" alt="BatchDay running: six original tasks become four proposed sessions, with every task retained" width="800" height="754"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A short walkthrough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Suggest batches&lt;/strong&gt;. The first run downloads the open model; later runs may reuse the browser cache.&lt;/li&gt;
&lt;li&gt;In the supplied example, the two bill-scanning tasks share a session, as do the two towel-washing tasks. Collecting a parcel and watering plants stay separate because their contexts differ. Six tasks produce four proposed sessions.&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Separate&lt;/strong&gt; on the first task and run again. The result becomes five sessions: your choice overrides the model.&lt;/li&gt;
&lt;li&gt;Change the second task to “Do not scan power bill.” It stays separate with a visible review warning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are demonstration tasks, not a claim that a real person saved time. Input stays in the current page and is lost on refresh. English text only; up to 30 tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/estona815/batchday" rel="noopener noreferrer"&gt;Source, tests and evaluation reports on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The browser app is static HTML and JavaScript. A Python reference implementation makes the grouping rules and model evaluation easy to inspect. The project was started on October 24, 2026 KST, during this challenge's build window. Project code is MIT licensed; dependencies retain their own licenses.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The open model does the semantic comparison. &lt;strong&gt;Transformers.js 2.17.2&lt;/strong&gt; runs the quantized &lt;strong&gt;Xenova/all-MiniLM-L6-v2&lt;/strong&gt; conversion in the browser. A Python reference uses the original &lt;strong&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/strong&gt;, mean pooling and normalized embeddings.&lt;/p&gt;

&lt;p&gt;A summary generator was an obvious alternative. But a shorter-looking list can hide an omitted obligation. BatchDay keeps the list intact and groups references to the originals instead.&lt;/p&gt;

&lt;p&gt;The merge rule is deliberately narrow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context and day must match the user's explicit labels.&lt;/li&gt;
&lt;li&gt;Combined estimates must fit a 30-minute session.&lt;/li&gt;
&lt;li&gt;Every pair across two groups must exceed the similarity threshold, currently 0.65.&lt;/li&gt;
&lt;li&gt;A manual separation or a flagged restriction prevents a merge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checking every pair avoids a similarity chain: A resembles B and B resembles C, so all three get bundled even though A and C are unrelated. The result explains the context/day match and lowest merge similarity. Editing an input clears the old result, so an outdated suggestion cannot quietly remain on screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  The failure that changed the design
&lt;/h3&gt;

&lt;p&gt;In six synthetic development pairs, the original encoder treated “Buy milk” and “Do not buy milk” as very similar: cosine similarity was about &lt;strong&gt;0.86&lt;/strong&gt;. “Cancel the gym membership” and “Renew the gym membership” scored about &lt;strong&gt;0.80&lt;/strong&gt;. Both pairs were wrongly merged by the initial rules.&lt;/p&gt;

&lt;p&gt;That is an important distinction: talking about the same thing does not mean doing the same thing.&lt;/p&gt;

&lt;p&gt;A conservative English word check now keeps some restrictions and reversals separate and shows why. It is a limited guard, not a claim that MiniLM understands contradictions. It can miss phrasing and over-separate useful groups; the manual override remains necessary.&lt;/p&gt;

&lt;p&gt;The same six development cases went from &lt;strong&gt;4/6 to 6/6&lt;/strong&gt; after that change. Both reports are in the repository. This is an in-sample debugging result, &lt;strong&gt;not independent accuracy&lt;/strong&gt;. Eight standard-library unit tests also passed for constraints, task preservation, invalid embeddings and overrides. The browser workflow was exercised separately; its quantized model produces different similarity values from the Python encoder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For a small chore list, sending every task to a hosted inference service is an avoidable dependency. Open weights let this version do the comparison on the user's device. The source exposes the threshold, grouping rules and failure cases, so someone can change the behavior or replace the encoder.&lt;/p&gt;

&lt;p&gt;There is still a network boundary: initial library and model downloads contact jsDelivr and Hugging Face. The app does not send task text to an inference API. Browser cache retention varies, so this version does not promise full offline operation. It has no paid inference backend.&lt;/p&gt;

&lt;p&gt;The largest remaining gap is practical batchability. Similar wording does not prove that two chores share equipment or can safely be combined. A useful next evaluation would ask people to label real lists, measure corrections, and compare against grouping by context alone. Until then, BatchDay offers a proposal with the originals beside it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI assistance disclosure:&lt;/strong&gt; Codex assisted with concept development, implementation, debugging, tests, UI design and this write-up. The screenshot shows the running app. No partner prize category or unmeasured time savings are claimed.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
