<?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: uni928</title>
    <description>The latest articles on DEV Community by uni928 (@uni928).</description>
    <link>https://dev.to/uni928</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%2F1769007%2F02a81aa6-3f52-43e5-b80c-5950f303ad32.png</url>
      <title>DEV Community: uni928</title>
      <link>https://dev.to/uni928</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uni928"/>
    <language>en</language>
    <item>
      <title>Turn Markdown into a Readable, Re-Editable HTML File</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 24 Jul 2026 03:55:54 +0000</pubDate>
      <link>https://dev.to/uni928/turn-markdown-into-a-readable-re-editable-html-file-3g64</link>
      <guid>https://dev.to/uni928/turn-markdown-into-a-readable-re-editable-html-file-3g64</guid>
      <description>&lt;p&gt;I built a simple browser-based tool that converts Markdown into a clean, readable HTML file.&lt;/p&gt;

&lt;p&gt;You can use it immediately by visiting the following page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index79.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index79.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No installation, account registration, or development environment is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Tool Does
&lt;/h2&gt;

&lt;p&gt;Write or paste Markdown into the editor, add an optional page title, and save the result as a standalone HTML file.&lt;/p&gt;

&lt;p&gt;For example, you can enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Completed&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Fixed the login screen
&lt;span class="p"&gt;-&lt;/span&gt; Corrected a layout issue

&lt;span class="gu"&gt;## Under Review&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Mobile browser behavior
&lt;span class="p"&gt;-&lt;/span&gt; Final accessibility checks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool converts this content into a visually organized page that can be opened directly in a web browser.&lt;/p&gt;

&lt;p&gt;The downloaded file contains everything required to display the document, so you do not need a separate Markdown viewer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Saved HTML Can Be Edited Again
&lt;/h2&gt;

&lt;p&gt;One useful difference from a typical Markdown-to-HTML converter is that the generated file is not limited to viewing.&lt;/p&gt;

&lt;p&gt;When you open the saved HTML file, you can return to the editing screen, update the title or Markdown content, and save a new version.&lt;/p&gt;

&lt;p&gt;This makes the file useful as a small self-contained document rather than a one-time export.&lt;/p&gt;

&lt;p&gt;A simple workflow might look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a report in Markdown.&lt;/li&gt;
&lt;li&gt;Save it as an HTML file.&lt;/li&gt;
&lt;li&gt;Place it in a shared folder.&lt;/li&gt;
&lt;li&gt;Open the same file later.&lt;/li&gt;
&lt;li&gt;Edit the original Markdown.&lt;/li&gt;
&lt;li&gt;Save the updated version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You do not need to keep a separate Markdown source file unless you want to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful for Shared Folders
&lt;/h2&gt;

&lt;p&gt;The generated HTML file can be placed in a shared team folder, cloud storage folder, USB drive, or local project directory.&lt;/p&gt;

&lt;p&gt;Other people can read it simply by opening the file in a browser.&lt;/p&gt;

&lt;p&gt;This can be useful because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no document-viewing application is required&lt;/li&gt;
&lt;li&gt;the result is easier to read than a plain text file&lt;/li&gt;
&lt;li&gt;the content can still be updated using Markdown&lt;/li&gt;
&lt;li&gt;only one HTML file needs to be shared&lt;/li&gt;
&lt;li&gt;links, headings, lists, tables, quotes, and code blocks can be displayed clearly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Possible Use Cases
&lt;/h2&gt;

&lt;p&gt;The tool is suitable for lightweight documents such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;work reports&lt;/li&gt;
&lt;li&gt;project status pages&lt;/li&gt;
&lt;li&gt;meeting notes&lt;/li&gt;
&lt;li&gt;checklists&lt;/li&gt;
&lt;li&gt;setup instructions&lt;/li&gt;
&lt;li&gt;internal manuals&lt;/li&gt;
&lt;li&gt;reference link collections&lt;/li&gt;
&lt;li&gt;handover documents&lt;/li&gt;
&lt;li&gt;personal notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful when a full document management system would be excessive, but a plain text file would be difficult to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use It
&lt;/h2&gt;

&lt;p&gt;Open the tool:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index79.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index79.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a page title.&lt;/li&gt;
&lt;li&gt;Write or paste your Markdown.&lt;/li&gt;
&lt;li&gt;Preview the formatted page in the browser.&lt;/li&gt;
&lt;li&gt;Save it as a readable HTML file.&lt;/li&gt;
&lt;li&gt;Reopen the saved file whenever you need to view or edit it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The generated file can start either in viewing mode or editing mode, depending on the save option you choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported Markdown Elements
&lt;/h2&gt;

&lt;p&gt;The tool supports commonly used Markdown formatting, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;headings&lt;/li&gt;
&lt;li&gt;bold and italic text&lt;/li&gt;
&lt;li&gt;ordered and unordered lists&lt;/li&gt;
&lt;li&gt;task lists&lt;/li&gt;
&lt;li&gt;blockquotes&lt;/li&gt;
&lt;li&gt;links&lt;/li&gt;
&lt;li&gt;images&lt;/li&gt;
&lt;li&gt;horizontal rules&lt;/li&gt;
&lt;li&gt;code blocks&lt;/li&gt;
&lt;li&gt;inline code&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace a full Markdown publishing system, but to make everyday Markdown documents easy to read and share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;This tool provides a simple middle ground between a plain Markdown file and a full document platform.&lt;/p&gt;

&lt;p&gt;You can write in Markdown, export the content as a readable standalone HTML page, share it as a single file, and edit the same file again later.&lt;/p&gt;

&lt;p&gt;Try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index79.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index79.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Button Showcase with One-Click HTML Copy</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 24 Jul 2026 03:40:59 +0000</pubDate>
      <link>https://dev.to/uni928/a-button-showcase-with-one-click-html-copy-5gi7</link>
      <guid>https://dev.to/uni928/a-button-showcase-with-one-click-html-copy-5gi7</guid>
      <description>&lt;p&gt;When building a website, choosing a button design can take more time than expected.&lt;/p&gt;

&lt;p&gt;You may want something simple, soft, colorful, dark, outlined, or slightly unusual—but comparing many styles usually means repeatedly editing CSS and refreshing the page.&lt;/p&gt;

&lt;p&gt;To make that process easier, I created a browser-based button showcase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Online
&lt;/h2&gt;

&lt;p&gt;You can use it directly from the following page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index78.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index78.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is nothing to install. Open the page, browse the available designs, and choose a button you like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Many Button Styles in One Place
&lt;/h2&gt;

&lt;p&gt;The page includes a wide range of button designs, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Light and subtle buttons&lt;/li&gt;
&lt;li&gt;Solid-color buttons&lt;/li&gt;
&lt;li&gt;Dark buttons&lt;/li&gt;
&lt;li&gt;Gradient buttons&lt;/li&gt;
&lt;li&gt;Outline buttons&lt;/li&gt;
&lt;li&gt;Rounded and pill-shaped buttons&lt;/li&gt;
&lt;li&gt;Buttons with icons&lt;/li&gt;
&lt;li&gt;More experimental designs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The buttons are displayed as actual interactive elements, so you can compare their hover, focus, and pressed states directly in the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Click a Button to Copy It
&lt;/h2&gt;

&lt;p&gt;The main feature of this tool is its copy workflow.&lt;/p&gt;

&lt;p&gt;Clicking a button copies a minimal HTML example for that design. This makes it easier to take only the button you need instead of copying the entire showcase page.&lt;/p&gt;

&lt;p&gt;The generated example includes the necessary HTML and CSS, so it can be pasted into a new file and tested immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy Features for Faster Comparison
&lt;/h2&gt;

&lt;p&gt;The site also includes additional copy-related features to make browsing a large number of designs more convenient.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy a button directly by clicking it&lt;/li&gt;
&lt;li&gt;Review the generated code&lt;/li&gt;
&lt;li&gt;Copy frequently used button types from the quick-copy panel&lt;/li&gt;
&lt;li&gt;Receive visual feedback after a successful copy&lt;/li&gt;
&lt;li&gt;Use copied examples as standalone HTML files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially useful when you want to compare several designs before deciding which one to use in a project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful for Prototypes and Small Projects
&lt;/h2&gt;

&lt;p&gt;This tool is intended for situations where you need a usable button quickly, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a prototype&lt;/li&gt;
&lt;li&gt;Building a small static website&lt;/li&gt;
&lt;li&gt;Testing a landing page design&lt;/li&gt;
&lt;li&gt;Comparing color combinations&lt;/li&gt;
&lt;li&gt;Looking for CSS design ideas&lt;/li&gt;
&lt;li&gt;Preparing a GitHub Pages project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The copied code can also be used as a starting point and customized for your own interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This is not a complete UI framework. It is a practical collection of button ideas with a copy-focused workflow.&lt;/p&gt;

&lt;p&gt;Rather than searching through documentation or manually rebuilding a design, you can open the page, choose a button, and copy a small working example.&lt;/p&gt;

&lt;p&gt;Try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://uni928.github.io/Uni928PublicHTMLs/index78.html" rel="noopener noreferrer"&gt;https://uni928.github.io/Uni928PublicHTMLs/index78.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>Practical baseline safeguards for ChatGPT-powered services</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 13 Feb 2026 04:21:16 +0000</pubDate>
      <link>https://dev.to/uni928/practical-baseline-safeguards-for-chatgpt-powered-services-efd</link>
      <guid>https://dev.to/uni928/practical-baseline-safeguards-for-chatgpt-powered-services-efd</guid>
      <description>&lt;p&gt;Practical baseline safeguards for ChatGPT-powered services&lt;/p&gt;

&lt;p&gt;When building an application using the OpenAI API, it is tempting to ship as soon as “it works.”&lt;br&gt;
However, insufficient safeguards often lead to &lt;strong&gt;API key leakage&lt;/strong&gt;, &lt;strong&gt;unexpected traffic spikes&lt;/strong&gt;, and ultimately &lt;strong&gt;serious billing incidents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This article summarizes &lt;strong&gt;practical, lightweight protections&lt;/strong&gt; that are especially relevant for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;personal projects&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;li&gt;early-stage prototypes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are &lt;strong&gt;not universal requirements&lt;/strong&gt;.&lt;br&gt;
What counts as a “baseline” depends heavily on your threat model, user anonymity, billing model, and scale.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A common but underestimated risk&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One frequently overlooked risk is &lt;strong&gt;direct access to your backend API endpoints&lt;/strong&gt;, bypassing the UI entirely.&lt;/p&gt;

&lt;p&gt;In practice, incidents may also be caused by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;abuse by authenticated users&lt;/li&gt;
&lt;li&gt;bugs or retry loops&lt;/li&gt;
&lt;li&gt;misconfigured proxies or shared environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, direct scripted access to your backend is a &lt;strong&gt;very common failure mode&lt;/strong&gt;, especially when no safeguards exist.&lt;/p&gt;

&lt;p&gt;If an attacker can replay the exact same request your frontend sends, they can often exhaust your usage limits in minutes.&lt;/p&gt;

&lt;p&gt;This article therefore focuses primarily on &lt;strong&gt;protecting your backend (Workers / server)&lt;/strong&gt; rather than the UI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Never call the OpenAI API directly from the client&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your frontend should &lt;strong&gt;never&lt;/strong&gt; call the OpenAI API directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys embedded in browsers or apps will leak&lt;/li&gt;
&lt;li&gt;DevTools, network inspection, and modified requests make this trivial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recommended architecture&lt;/p&gt;

&lt;p&gt;Client → Your backend (Workers / server)&lt;br&gt;
Backend → OpenAI API&lt;/p&gt;

&lt;p&gt;The client receives only the processed result.&lt;/p&gt;

&lt;p&gt;This allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep API keys secret&lt;/li&gt;
&lt;li&gt;validate and throttle requests&lt;/li&gt;
&lt;li&gt;support streaming safely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI explicitly recommends this approach in its official documentation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Always implement rate limiting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rate limiting is essential, even for small projects.&lt;/p&gt;

&lt;p&gt;Typical limits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;per 5 minutes&lt;/li&gt;
&lt;li&gt;per hour&lt;/li&gt;
&lt;li&gt;per day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implementation can be simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;store a counter&lt;/li&gt;
&lt;li&gt;store the start time of the window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare Workers with KV, Durable Objects, or D1 make this straightforward using IPs, user IDs, or session identifiers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lightweight one-time tokens (with clear limitations)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To discourage trivial scripted abuse, you may introduce &lt;strong&gt;short-lived request tokens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;embed an encrypted timestamp&lt;/li&gt;
&lt;li&gt;validate that it was generated recently (e.g., within 10 seconds)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ Important limitations&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is &lt;strong&gt;not cryptographically strong authentication&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;This does &lt;strong&gt;not fully prevent replay within the valid window&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;This must &lt;strong&gt;never replace proper authentication&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of this as &lt;strong&gt;friction&lt;/strong&gt;, not security.&lt;/p&gt;

&lt;p&gt;It is useful against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;naive replay scripts&lt;/li&gt;
&lt;li&gt;casual scraping&lt;/li&gt;
&lt;li&gt;low-effort abuse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is &lt;strong&gt;not sufficient&lt;/strong&gt; against a determined attacker.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Review auto-recharge and billing assumptions carefully&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Billing incidents are often underestimated.&lt;/p&gt;

&lt;p&gt;There are real-world reports of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usage continuing briefly after limits were reached&lt;/li&gt;
&lt;li&gt;negative balances appearing despite prepaid setups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Budget limits should be treated as &lt;strong&gt;operational safeguards&lt;/strong&gt;, not hard guarantees.&lt;/p&gt;

&lt;p&gt;For small projects, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;disabling auto-recharge&lt;/li&gt;
&lt;li&gt;keeping balances low&lt;/li&gt;
&lt;li&gt;adding monitoring and alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using a &lt;strong&gt;dedicated debit card with a low limit&lt;/strong&gt; can further cap worst-case damage.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Production services require real authentication&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The measures above are suitable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prototypes&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;li&gt;anonymous experiments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For real services, you will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OAuth or equivalent authentication&lt;/li&gt;
&lt;li&gt;session and token management&lt;/li&gt;
&lt;li&gt;per-user quotas and permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;IP-based checks alone are insufficient, as client-side values can be forged.&lt;/p&gt;

&lt;p&gt;Defense must be layered: authentication, rate limits, quotas, and monitoring.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Never let the client choose the model&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Model selection directly affects cost.&lt;/p&gt;

&lt;p&gt;Best practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fix allowed models on the server&lt;/li&gt;
&lt;li&gt;reject anything outside a strict allowlist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not rely on obscurity or “confusion” tactics.&lt;br&gt;
Clear validation and rejection are safer, simpler, and easier to operate.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;For small-scale ChatGPT-powered services, the following baseline practices already eliminate many real-world incidents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keep API keys on the server&lt;/li&gt;
&lt;li&gt;enforce rate limits&lt;/li&gt;
&lt;li&gt;treat billing controls realistically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These measures will not make your system unbreakable — but they &lt;strong&gt;raise the cost of abuse enough&lt;/strong&gt; that most attackers move on to easier targets.&lt;/p&gt;

&lt;p&gt;Security is not about perfect defenses, but about &lt;strong&gt;making misuse inconvenient and uneconomical&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Original Japanese article (source of revision): &lt;a href="https://qiita.com/uni928/items/061432019b316e418902" rel="noopener noreferrer"&gt;https://qiita.com/uni928/items/061432019b316e418902&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>[ChatGPT Blender] How to Work Around the BlenderGPT Error</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 15 Aug 2025 03:22:06 +0000</pubDate>
      <link>https://dev.to/uni928/chatgpt-x-blender-how-to-work-around-the-blendergpt-malfunction-4136</link>
      <guid>https://dev.to/uni928/chatgpt-x-blender-how-to-work-around-the-blendergpt-malfunction-4136</guid>
      <description>&lt;p&gt;BlenderGPT may sometimes fail to work properly.&lt;br&gt;
One of the main causes is that the ChatGPT API Key input field cannot read beyond the 128th character.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workaround Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;After installing the add-on, go to Blender’s add-on settings screen, click the “folder” icon, and open the add-on’s installation folder.&lt;/li&gt;
&lt;li&gt;Open the &lt;code&gt;__init__.py&lt;/code&gt; file in Notepad or another text editor.&lt;/li&gt;
&lt;li&gt;Search for openai.api_key and enter your API Key directly in its declaration.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Operation Check
&lt;/h2&gt;

&lt;p&gt;Applying the above fix will allow BlenderGPT to function normally.&lt;/p&gt;

&lt;p&gt;That concludes our guide on how to work around the BlenderGPT malfunction.&lt;br&gt;
Thank you for reading.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>blender</category>
      <category>blenderapi</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I’ve created a web tool to batch add update dates at the beginning of filenames</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 21 Jul 2025 01:53:17 +0000</pubDate>
      <link>https://dev.to/uni928/ive-created-a-web-tool-to-batch-add-update-dates-at-the-beginning-of-filenames-1cip</link>
      <guid>https://dev.to/uni928/ive-created-a-web-tool-to-batch-add-update-dates-at-the-beginning-of-filenames-1cip</guid>
      <description>&lt;p&gt;Have you ever had to &lt;strong&gt;add update dates at the start of filenames&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;For example, in some companies there are rules like:&lt;br&gt;&lt;br&gt;
“When uploading files to a shared folder, please &lt;strong&gt;add the update date at the beginning&lt;/strong&gt; of certain filenames.”&lt;/p&gt;

&lt;p&gt;However, when dealing with many files, this task can be surprisingly &lt;strong&gt;tedious and time-consuming&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Renaming each file manually every time is stressful&lt;/strong&gt;, isn’t it?&lt;/p&gt;

&lt;p&gt;To solve this, I developed a web tool that can &lt;strong&gt;process all files in a folder at once&lt;/strong&gt; and &lt;strong&gt;automatically add the update date&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Since it runs in your browser, there’s &lt;strong&gt;no need to install anything&lt;/strong&gt;—you can use it right away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please give it a try!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://uni928.github.io/UpdateDatePusher/index2.html" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Use Cases&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This tool is useful in the following scenarios:&lt;/p&gt;

&lt;p&gt;✅ When you want to &lt;strong&gt;add dates before uploading files&lt;/strong&gt; to a shared drive or Google Drive&lt;br&gt;&lt;br&gt;
✅ When you need to &lt;strong&gt;organize multiple files&lt;/strong&gt; like monthly or weekly reports where update dates are important&lt;br&gt;&lt;br&gt;
✅ When you want to &lt;strong&gt;automate renaming&lt;/strong&gt; instead of manually editing filenames one by one&lt;br&gt;&lt;br&gt;
✅ When you want to &lt;strong&gt;replace old dates&lt;/strong&gt; in filenames with the latest update date&lt;/p&gt;

&lt;p&gt;🛠 &lt;strong&gt;How to Use&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;１. &lt;strong&gt;Click the “Select Folder” button&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use your browser’s File System Access API to select the folder you want to process. (Subfolders are not included.)&lt;/p&gt;

&lt;p&gt;２. &lt;strong&gt;Automatically process all files in the folder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If a date in “YYYYMMDD” format already exists at the beginning, it will be &lt;strong&gt;removed and replaced&lt;/strong&gt; with the current update date.&lt;br&gt;&lt;br&gt;
The original files remain untouched; &lt;strong&gt;new copies with updated dates&lt;/strong&gt; are created.&lt;/p&gt;

&lt;p&gt;３. &lt;strong&gt;Check the results&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
After processing, new files like “20250717filename.txt” will appear in the folder.&lt;/p&gt;

&lt;p&gt;🚨 &lt;strong&gt;Notes:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This tool only works in browsers that support the File System Access API, such as Google Chrome or Microsoft Edge.  &lt;/p&gt;

&lt;p&gt;For safety, subfolders are excluded from processing. If you accidentally select something like the C drive, it could cause &lt;strong&gt;serious problems&lt;/strong&gt;—this is why the tool is limited to the selected folder only. Even with an internal blocklist, including subfolders still carries too much risk.&lt;/p&gt;

&lt;p&gt;The tool creates copies with the update date added. Note that the “last modified” date inside the copied files will be the date they were duplicated. &lt;strong&gt;Please understand this limitation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://uni928.github.io/UpdateDatePusher/index2.html" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Open the tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’d like to verify its safety before using, you can also &lt;a href="https://github.com/uni928/UpdateDatePusher" rel="noopener noreferrer"&gt;download it from here&lt;/a&gt; &lt;strong&gt;and inspect the code yourself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That’s all for the introduction of this &lt;strong&gt;web tool for batch adding update dates to filenames&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I hope this tool helps you &lt;strong&gt;streamline your workflow&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Thank you for reading until the end! 🙌&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;P.S.&lt;br&gt;&lt;br&gt;
This article was &lt;strong&gt;proofread using ChatGPT&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Apologies if you’re not a fan of &lt;strong&gt;AI-assisted editing&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>chatgpt</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I Created a Website That Helps You Easily Generate ChatGPT Prompts for Blender Python API Code</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Wed, 16 Jul 2025 04:19:58 +0000</pubDate>
      <link>https://dev.to/uni928/i-created-a-website-that-helps-you-easily-generate-chatgpt-prompts-for-blender-python-api-code-1f3h</link>
      <guid>https://dev.to/uni928/i-created-a-website-that-helps-you-easily-generate-chatgpt-prompts-for-blender-python-api-code-1f3h</guid>
      <description>&lt;p&gt;Did you know you can use ChatGPT to generate Blender Python API code when creating models in Blender?&lt;/p&gt;

&lt;p&gt;These days, &lt;a href="https://chatgpt.com/" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt; has become so accessible that you can start using it instantly—no account required.&lt;/p&gt;

&lt;p&gt;For example, if you want to “create a food stall”, you can ask ChatGPT to write code that automates the process of building the framework in Blender.&lt;/p&gt;

&lt;p&gt;And if you’re using the ChatGPT mobile app, you can even take a photo of a real-world object and say:&lt;br&gt;
“I want to create a 3D model like this image.”&lt;/p&gt;

&lt;p&gt;Surprisingly often, you’ll get a result close to what you envisioned.&lt;/p&gt;

&lt;p&gt;But… do you ever feel stuck?&lt;br&gt;
Many Blender users might think:&lt;br&gt;
“I don’t know how to ask ChatGPT the right way...”&lt;/p&gt;

&lt;p&gt;That’s why I created a simple website where you just type what you want to generate in a text box, and it automatically converts your input into what I believe is a well-structured, effective prompt.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/CreateChatGPTPromptAtBlenderPythonAPI/index2.html" rel="noopener noreferrer"&gt;Here’s the site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✨ How It Works&lt;br&gt;
The usage is super simple.&lt;/p&gt;

&lt;p&gt;For example, enter something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Japanese Festival Set
  - Food stalls (takoyaki, goldfish scooping, shooting gallery)
  - Lanterns, curtains, and signboards
  - Mini-game props (goldfish buckets, balloon dolls)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The site will then generate the following prompt and copy it to your clipboard automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Blender Python API Generated Code
# Please write this code with as much quality as possible to meet the requirements below

import bpy

# User instructions:
# Japanese Festival Set
  - Food stalls (takoyaki, goldfish scooping, shooting gallery)
  - Lanterns, curtains, and signboards
  - Mini-game props (goldfish buckets, balloon dolls)

# TODO: Implement high-quality processing here
# Example: create objects, apply settings, handle animations, etc.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you feed this prompt to ChatGPT, you’ll likely get a much more accurate and higher-quality response compared to a normal query.&lt;/p&gt;

&lt;p&gt;💡 In Summary&lt;br&gt;
If you want to boost your Blender workflow, definitely give this tool a try.&lt;br&gt;
You’ll quickly realize:&lt;br&gt;
“The way you ask questions can completely change the quality of AI’s answers!”&lt;/p&gt;

&lt;p&gt;🙏 Thank you for reading!&lt;/p&gt;

&lt;p&gt;Once again:&lt;br&gt;
👉 &lt;a href="https://uni928.github.io/CreateChatGPTPromptAtBlenderPythonAPI/index2.html" rel="noopener noreferrer"&gt;Here’s the site&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>chatgpt</category>
      <category>ai</category>
    </item>
    <item>
      <title>🎉 A Web App to Bulk Copy “Related Files” in a Folder with Drag &amp; Drop</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 14 Jul 2025 03:57:35 +0000</pubDate>
      <link>https://dev.to/uni928/a-web-app-to-bulk-copy-related-files-in-a-folder-with-drag-drop-5cnh</link>
      <guid>https://dev.to/uni928/a-web-app-to-bulk-copy-related-files-in-a-folder-with-drag-drop-5cnh</guid>
      <description>&lt;p&gt;Today, I’d like to introduce a &lt;strong&gt;web app that can instantly find and copy all files in a folder containing the name of a file you drag &amp;amp; drop&lt;/strong&gt;. (I’ll explain the details below.)&lt;/p&gt;

&lt;p&gt;With this web app, you can quickly list out which files reference a dreaded file like &lt;code&gt;CommonFunctionA.cs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;By listing all related files, it also makes it much easier to ask questions to ChatGPT.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What Can It Do?
&lt;/h2&gt;

&lt;p&gt;Imagine you have the following folder structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FolderA
├── FolderB
│   ├── aaa.txt
│   └── bbb.txt
├── ccc.txt  ← drag &amp;amp; drop
└── ddd.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you drag &lt;code&gt;ccc.txt&lt;/code&gt; into the browser, the app performs these actions:&lt;/p&gt;

&lt;p&gt;✅ Recursively searches within the folder&lt;br&gt;&lt;br&gt;
✅ Extracts all files that contain the string &lt;code&gt;ccc&lt;/code&gt; in their content&lt;br&gt;&lt;br&gt;
✅ Copies the &lt;strong&gt;file names and their contents&lt;/strong&gt; to the clipboard in bulk&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 Technical Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚀 File System Access API
&lt;/h3&gt;

&lt;p&gt;This app uses the File System Access API to explore the contents of your local folders directly from the browser.&lt;/p&gt;

&lt;p&gt;✅ Recursive folder search&lt;br&gt;&lt;br&gt;
✅ Bulk copy using the Clipboard API&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Summary
&lt;/h2&gt;

&lt;p&gt;With just drag &amp;amp; drop, you can bulk copy all “related files,”&lt;br&gt;&lt;br&gt;
making it perfect for large-scale local text searches or as a code review assistant.&lt;/p&gt;

&lt;p&gt;Note: It does &lt;strong&gt;not&lt;/strong&gt; copy “related files of related files.”&lt;br&gt;&lt;br&gt;
While it’s possible to implement this, doing so could result in copying the entire folder due to chain references.&lt;/p&gt;

&lt;p&gt;Also, I’ve been debating whether such a web app should include itself (the dragged file) in the output. (Currently, it doesn’t.)&lt;br&gt;&lt;br&gt;
Including it might make it more user-friendly, but from the perspective of “who is using &lt;code&gt;CommonFunctionA.cs&lt;/code&gt;?”, it seems more accurate to exclude it.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Original Version:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://uni928.github.io/DirectoryInFileAllCopy/index5.html" rel="noopener noreferrer"&gt;https://uni928.github.io/DirectoryInFileAllCopy/index5.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated Version (Includes Self):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://uni928.github.io/DirectoryInFileAllCopy/index6.html" rel="noopener noreferrer"&gt;https://uni928.github.io/DirectoryInFileAllCopy/index6.html&lt;/a&gt;&lt;br&gt;
I decided to release this version too since it’s more convenient when asking ChatGPT questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source Code (for local use and safety checks):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/uni928/DirectoryInFileAllCopy" rel="noopener noreferrer"&gt;https://github.com/uni928/DirectoryInFileAllCopy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to download it and try it out locally!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>I Built a Convenient but Extremely Dangerous Website That Can Bulk Replace All Files in a Specified Folder</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Fri, 11 Jul 2025 03:33:05 +0000</pubDate>
      <link>https://dev.to/uni928/i-built-a-convenient-but-extremely-dangerous-website-that-can-bulk-replace-all-files-in-a-specified-cj5</link>
      <guid>https://dev.to/uni928/i-built-a-convenient-but-extremely-dangerous-website-that-can-bulk-replace-all-files-in-a-specified-cj5</guid>
      <description>&lt;p&gt;Have you ever needed to replace text across &lt;strong&gt;all files in a folder at once&lt;/strong&gt;? For example:&lt;/p&gt;

&lt;p&gt;・Updating old API keys scattered across multiple files&lt;br&gt;
・Performing large-scale renaming in HTML/CSS/JS projects&lt;br&gt;
・Replacing specific phrases in Markdown or text logs in bulk&lt;/p&gt;

&lt;p&gt;Normally, tasks like these require specialized apps (like VSCode’s regex replace) or command-line tools (sed, awk, find, grep, etc.), which can be intimidating for beginners.&lt;/p&gt;

&lt;p&gt;So I thought:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Couldn’t this be done more simply, directly in a browser?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s why I created this site.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Features of This Site
&lt;/h2&gt;

&lt;p&gt;This tool recursively scans all text files in a specified folder and replaces the search string in bulk.&lt;br&gt;
Best of all, it runs entirely in the browser. No installation needed. Works across platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Key Features
&lt;/h2&gt;

&lt;p&gt;・Select folders via drag &amp;amp; drop&lt;br&gt;
・Processes files in subdirectories as well&lt;br&gt;
・Automatically skips binary files (images, audio, etc.)&lt;br&gt;
・Detects garbled text and excludes suspicious files&lt;br&gt;
・Optionally creates a ZIP backup before replacements&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Supported Browsers
&lt;/h2&gt;

&lt;p&gt;・Google Chrome&lt;br&gt;
・Microsoft Edge&lt;br&gt;
　　(Not supported on Safari or Firefox because they don’t support the File System Access API)&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡 How to Use Safely
&lt;/h2&gt;

&lt;p&gt;・First, try it on a test folder&lt;br&gt;
・Always enable the backup (ZIP) option&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍💻 Technical Background
&lt;/h2&gt;

&lt;p&gt;This tool leverages &lt;strong&gt;File System Access API&lt;/strong&gt; and &lt;strong&gt;JSZip&lt;/strong&gt;:&lt;br&gt;
・File System Access API&lt;br&gt;
　　・Next-gen API that enables browsers to read/write local files&lt;br&gt;
　　・Works in the latest versions of Chrome and Edge&lt;br&gt;
・JSZip&lt;br&gt;
　　・A JavaScript library for ZIP compression and decompression&lt;br&gt;
・Garbled Text Detection&lt;br&gt;
　　・Filters out files by calculating the ratio of invisible characters or replacement characters (�)&lt;/p&gt;

&lt;p&gt;Thanks to these technologies, it’s possible to perform bulk replacements with nothing but a browser—no installations required.&lt;/p&gt;

&lt;h2&gt;
  
  
  📥 Try It Out
&lt;/h2&gt;

&lt;p&gt;If you’re interested, give it a try:&lt;br&gt;
It’s super handy, but use with caution!&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/ReplaceAllFileAtOneDirectory/index2" rel="noopener noreferrer"&gt;https://uni928.github.io/ReplaceAllFileAtOneDirectory/index2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to check for any suspicious behavior? Download the source code here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/uni928/ReplaceAllFileAtOneDirectory" rel="noopener noreferrer"&gt;https://github.com/uni928/ReplaceAllFileAtOneDirectory&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🙏 Finally
&lt;/h2&gt;

&lt;p&gt;This tool fulfills the need for “simple bulk replacement,” but misuse can instantly corrupt your files.&lt;br&gt;
(If replacements go wrong and are applied to production environments, bugs may occur. Backups are highly recommended.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it on production folders at your own risk.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>chatgpt</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>🧩 I Built a Simple Tool to Merge Excel Files — the Lazy Way</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Wed, 02 Jul 2025 04:54:43 +0000</pubDate>
      <link>https://dev.to/uni928/i-built-a-simple-tool-to-merge-excel-files-the-lazy-way-28no</link>
      <guid>https://dev.to/uni928/i-built-a-simple-tool-to-merge-excel-files-the-lazy-way-28no</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Merging multiple Excel files into one — it’s probably more common in the workplace than we’d like to admit.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
・Sales reports from different departments&lt;br&gt;
・Daily CSV log files&lt;br&gt;
・Survey results filled out by different team members&lt;/p&gt;

&lt;p&gt;You’ve likely heard (or said) this before:&lt;/p&gt;

&lt;p&gt;　“Can you just combine them all into one file?”&lt;/p&gt;

&lt;p&gt;But opening each file and copy-pasting manually is a pain.&lt;br&gt;
Writing VBA macros is annoying.&lt;br&gt;
Spinning up Python with pandas just for this? Also overkill.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎉 So I Built a "Lazy Merge" Tool for Excel
&lt;/h2&gt;

&lt;p&gt;I created a lightweight web tool where you can simply &lt;strong&gt;drag and drop multiple Excel files into your browser&lt;/strong&gt;, and the tool &lt;strong&gt;merges them all and copies the result to your clipboard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;✅ No installation required — runs entirely in your browser&lt;br&gt;
✅ Supports &lt;code&gt;.xlsx&lt;/code&gt;, &lt;code&gt;.xls&lt;/code&gt;, &lt;code&gt;.xltm&lt;/code&gt;, and &lt;code&gt;.csv&lt;/code&gt;&lt;br&gt;
✅ Automatically extracts the first sheet of each file&lt;br&gt;
✅ Combines the data into one and copies it instantly&lt;br&gt;
✅ Paste into Excel — merge complete!&lt;/p&gt;

&lt;p&gt;Perfect for quick tasks, admin work, or when you just want to get it done.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 How to Use It
&lt;/h2&gt;

&lt;p&gt;It’s dead simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://uni928.github.io/ExcelMarger/index2.html" rel="noopener noreferrer"&gt;Open the site&lt;/a&gt; (either hosted or &lt;a href="https://github.com/uni928/ExcelMarger" rel="noopener noreferrer"&gt;saved locally&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Drag &amp;amp; drop multiple Excel files at once (&lt;code&gt;.csv&lt;/code&gt;, &lt;code&gt;.xltm&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Click the 📋 &lt;strong&gt;Copy All&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt;Open a new Excel file and paste the result&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it! 🎉&lt;br&gt;
The merged content is handled as tab-separated values (TSV), so the result is cleanly formatted when pasted into Excel.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 What’s Under the Hood?
&lt;/h2&gt;

&lt;p&gt;This tool is built with:&lt;/p&gt;

&lt;p&gt;・&lt;strong&gt;HTML + JavaScript&lt;/strong&gt; (frontend only)&lt;br&gt;
・&lt;a href="https://sheetjs.com/" rel="noopener noreferrer"&gt;SheetJS(xlsx)&lt;/a&gt; for parsing Excel/CSV files&lt;br&gt;
・&lt;strong&gt;FileReader API&lt;/strong&gt; for reading files in-browser&lt;br&gt;
・&lt;strong&gt;Clipboard API&lt;/strong&gt; for copying to clipboard&lt;/p&gt;

&lt;p&gt;Everything runs locally in your browser.&lt;br&gt;
✅ No server&lt;br&gt;
✅ No uploads&lt;br&gt;
✅ Your data stays on your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 After Using It Myself...
&lt;/h2&gt;

&lt;p&gt;Originally, I built this tool thinking,&lt;/p&gt;

&lt;p&gt;　“I just want a quick little utility for myself.”&lt;/p&gt;

&lt;p&gt;But it turned out to be so useful, I’ve kept it around and even shared it with coworkers.&lt;/p&gt;

&lt;p&gt;・No more VBA or macro maintenance&lt;br&gt;
・No code — anyone can use it&lt;br&gt;
・Everything self-contained in a single HTML file&lt;/p&gt;

&lt;p&gt;If you’re looking for a no-frills, anyone-can-use tool — this is it.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Summary
&lt;/h2&gt;

&lt;p&gt;・I built a simple browser-based tool to merge Excel/CSV files&lt;br&gt;
・Just drag &amp;amp; drop → click → paste. Done.&lt;br&gt;
・Works offline, no installation needed&lt;br&gt;
・Handles &lt;code&gt;.xltm&lt;/code&gt; and other formats thanks to SheetJS&lt;/p&gt;

&lt;p&gt;Whether you're in admin work, data processing, education, or just looking to save time —&lt;br&gt;
&lt;strong&gt;I hope this helps!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🙏 Final Note
&lt;/h2&gt;

&lt;p&gt;If you found this tool or article helpful,&lt;br&gt;
feel free to leave a like or a comment — I’d really appreciate it!&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://uni928.github.io/ExcelMarger/index2.html" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Created a Tool to Copy All Files in a Folder to Your Clipboard</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Wed, 02 Jul 2025 04:01:34 +0000</pubDate>
      <link>https://dev.to/uni928/i-created-a-tool-to-copy-all-files-in-a-folder-to-your-clipboard-jk5</link>
      <guid>https://dev.to/uni928/i-created-a-tool-to-copy-all-files-in-a-folder-to-your-clipboard-jk5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When working with ChatGPT or other LLMs (Large Language Models), you may find yourself needing to &lt;strong&gt;paste the names and contents of all files in a directory into a prompt&lt;/strong&gt; — more often than you’d expect.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;・When you want GPT to understand the structure of an entire codebase&lt;br&gt;
・When analyzing a project that includes multiple templates or config files&lt;br&gt;
・When summarizing a folder full of Markdown or text documents&lt;br&gt;
・When previewing content before running a batch job&lt;br&gt;
・When quickly documenting a local folder that isn’t under version control&lt;/p&gt;

&lt;p&gt;In all these cases, &lt;strong&gt;“showing the content itself” becomes valuable input&lt;/strong&gt; to the AI or to your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tool
&lt;/h2&gt;

&lt;p&gt;To solve this, I built a simple web-based tool that lets you:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Select a folder&lt;/strong&gt;&lt;br&gt;
👉 &lt;strong&gt;Recursively read all files inside&lt;/strong&gt;&lt;br&gt;
👉 &lt;strong&gt;Copy their filenames and contents into your clipboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No installation. No account. Runs entirely in the browser.&lt;br&gt;
Try it here:&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://uni928.github.io/DirectoryInFileAllCopy/index2.html" rel="noopener noreferrer"&gt;https://uni928.github.io/DirectoryInFileAllCopy/index2.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you'd like to inspect or run it locally before using, you can also &lt;a href="https://github.com/uni928/DirectoryInFileAllCopy" rel="noopener noreferrer"&gt;download it from here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Visit the site linked above&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;“Select Folder”&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt;Choose the folder you want to copy and click OK&lt;/li&gt;
&lt;li&gt;Within a few seconds, the contents of all valid files will be copied to your clipboard!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⚠️ Files with certain extensions like &lt;code&gt;.meta&lt;/code&gt; are automatically excluded. You can customize which extensions are skipped if needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Background (briefly)
&lt;/h2&gt;

&lt;p&gt;This tool uses the &lt;strong&gt;File System Access API&lt;/strong&gt;, with the following conditions:&lt;/p&gt;

&lt;p&gt;・Works on &lt;strong&gt;Chromium-based browsers&lt;/strong&gt; (Chrome, Edge, Brave, etc.)&lt;br&gt;
・Only available over &lt;strong&gt;HTTPS&lt;/strong&gt; or on localhost&lt;br&gt;
・Folder access requires &lt;strong&gt;explicit user interaction&lt;/strong&gt; due to browser security policies&lt;/p&gt;

&lt;p&gt;Internally, it recursively traverses the folder, reads each file as text, formats it into a single string, and copies it using &lt;code&gt;navigator.clipboard.writeText()&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Use Cases
&lt;/h2&gt;

&lt;p&gt;This tool isn’t just for copying — it unlocks a variety of workflows:&lt;/p&gt;

&lt;p&gt;・Quickly pasting an entire codebase into an LLM for inspection&lt;br&gt;
・Pre-processing local files for use with a &lt;strong&gt;full-text search engine&lt;/strong&gt;&lt;br&gt;
・Reviewing folder structure and contents before documentation&lt;br&gt;
・Validating file contents during pre-deployment (CI/CD) steps&lt;br&gt;
・Creating a single “context string” to tell GPT:&lt;br&gt;
　　"Here's everything in this project — please  summarize or answer questions."&lt;/p&gt;

&lt;p&gt;With a single click, what was previously a pile of local files becomes &lt;strong&gt;rich, promptable text data&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;That’s it — a simple but useful site for copying the names and contents of all files in a folder to your clipboard.&lt;/p&gt;

&lt;p&gt;Once you try it, you might realize just how often you’ve wanted a tool like this to "&lt;strong&gt;just show me everything at once&lt;/strong&gt;."&lt;/p&gt;

&lt;p&gt;I hope this becomes a handy part of your workflow.&lt;br&gt;
And if you find it helpful, I’d really appreciate it if you share it with others!&lt;/p&gt;

&lt;p&gt;Thanks for reading 🙌&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;This article was polished using ChatGPT.&lt;br&gt;
Apologies if you prefer human-only writing — I’m always open to feedback.&lt;/p&gt;

&lt;p&gt;To be honest, I initially didn’t think this site would work, given how restrictive HTML and browser APIs can be.&lt;br&gt;
But to my surprise, it &lt;strong&gt;actually works&lt;/strong&gt; — and quite smoothly!&lt;/p&gt;

&lt;p&gt;That said, please note that this feature &lt;strong&gt;might stop working in the future&lt;/strong&gt; due to potential changes in browser specifications.&lt;br&gt;
I appreciate your understanding in that regard.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Created a Simple Tool to Instantly Preview HTML Generated by ChatGPT</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Tue, 24 Jun 2025 05:40:23 +0000</pubDate>
      <link>https://dev.to/uni928/i-created-a-simple-tool-to-instantly-preview-html-generated-by-chatgpt-33l1</link>
      <guid>https://dev.to/uni928/i-created-a-simple-tool-to-instantly-preview-html-generated-by-chatgpt-33l1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;ChatGPT has become a powerful ally for generating HTML and other code snippets. However, if you’ve ever tried working with the HTML code it outputs, you might have run into a small but persistent annoyance.&lt;/p&gt;

&lt;p&gt;To preview the HTML, we typically need to:&lt;/p&gt;

&lt;p&gt;・Manually create an .html file&lt;br&gt;
・Open it in a text editor and paste in the code&lt;br&gt;
・Save the file and open it in a browser&lt;br&gt;
・Repeat this every time we make a small change&lt;/p&gt;

&lt;p&gt;This process may not be complex, but doing it repeatedly can become surprisingly tedious.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Simple Solution
&lt;/h2&gt;

&lt;p&gt;To reduce that friction, I created a small web tool that lets you paste HTML code and instantly render it in the browser—without saving any files.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://uni928.github.io/TestSpeedy/index2.html" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy the HTML code generated by ChatGPT&lt;/li&gt;
&lt;li&gt;Paste it into the input field on the tool’s page&lt;/li&gt;
&lt;li&gt;Click the “Render” button&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. The entire page will be temporarily replaced with your HTML content. No need to create or save any files manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Error Handling Is Friendly Too
&lt;/h2&gt;

&lt;p&gt;This tool uses &lt;code&gt;document.write()&lt;/code&gt; to replace the document with your input. If your code contains syntax errors, the browser will usually provide helpful messages, and the line numbers in the console log remain consistent with your input. This makes debugging a bit easier as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Opening and saving HTML files manually each time you want to make a change might seem trivial at first. But over time, it adds up and slows you down—like a slow-draining battery.&lt;/p&gt;

&lt;p&gt;With this tool, I hope to make your workflow just a little more efficient and enjoyable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/uni928/TestSpeedy" rel="noopener noreferrer"&gt;It's available on GitHub&lt;/a&gt;, so I'd be happy if you could download it and place it on your desktop.&lt;/p&gt;

&lt;p&gt;Thank you for reading, and happy coding!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>chatgpt</category>
      <category>ai</category>
    </item>
    <item>
      <title>🛠 I Created a Simple Prompt Generator for ChatGPT! (Free Online Tool)</title>
      <dc:creator>uni928</dc:creator>
      <pubDate>Mon, 23 Jun 2025 05:17:37 +0000</pubDate>
      <link>https://dev.to/uni928/i-created-a-simple-prompt-generator-for-chatgpt-3ob7</link>
      <guid>https://dev.to/uni928/i-created-a-simple-prompt-generator-for-chatgpt-3ob7</guid>
      <description>&lt;p&gt;If you're someone who writes prompts manually every time you ask ChatGPT to solve an error… you're not alone.&lt;/p&gt;

&lt;p&gt;To help with that, I built a tool that lets you generate ChatGPT prompts automatically in &lt;strong&gt;just 3 steps.&lt;/strong&gt;&lt;br&gt;
Feel free to give it a try!&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/SephirothSimplePromptGenerator/index2.html" rel="noopener noreferrer"&gt;Click here to try the prompt generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/SephirothSimplePromptGenerator/index4.html" rel="noopener noreferrer"&gt;In the case of HTML, this one might work.&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🧰 What Is This Tool?
&lt;/h2&gt;

&lt;p&gt;This is a web-based tool that automatically generates a ChatGPT-friendly prompt based on:&lt;/p&gt;

&lt;p&gt;・🐞 Your error message&lt;br&gt;
・📄 The relevant source code file (via file upload)&lt;/p&gt;

&lt;p&gt;The generated prompt follows this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Could you tell me the cause of the following error and how to fix it?

[Error Message]

The content of the related file is as follows: 'filename'

[File content with line numbers]

If there are any key points or important notes about the error, please include those as well.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ Key Features
&lt;/h2&gt;

&lt;p&gt;・&lt;strong&gt;Automatic Line Numbers for Code&lt;/strong&gt;&lt;br&gt;
　When you include line numbers in your code, ChatGPT can understand context much more accurately.&lt;br&gt;
　It helps ChatGPT clearly identify lines like "the error is on line 18" and provide better answers.&lt;/p&gt;

&lt;p&gt;・&lt;strong&gt;One-Click Prompt Copy&lt;/strong&gt;&lt;br&gt;
　You can copy the entire generated prompt with a single click of the "Copy Prompt" button.&lt;/p&gt;

&lt;p&gt;・&lt;strong&gt;File Upload Support&lt;/strong&gt;&lt;br&gt;
　Works with almost any text-based code file — including JavaScript, TypeScript, Python, HTML, CSS, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 How to Use (3 Easy Steps)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Paste Your Error Message&lt;/strong&gt; (optional)&lt;br&gt;
　It’s not required, but including it will improve the accuracy of ChatGPT’s response.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Select Your Source Code File&lt;/strong&gt;&lt;br&gt;
　Just upload the relevant file — the tool will automatically display it with line numbers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Click “Copy Prompt” and Ask ChatGPT!&lt;/strong&gt;&lt;br&gt;
　Paste it into ChatGPT and you're ready to go.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🎯 Who Is This For?
&lt;/h2&gt;

&lt;p&gt;・Developers who are tired of writing prompts from scratch every time&lt;br&gt;
・People looking for reusable prompt templates&lt;br&gt;
・Beginners who want to learn efficiently with the help of AI&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Technical Details (for Developers)
&lt;/h2&gt;

&lt;p&gt;This tool is built using plain &lt;strong&gt;HTML + JavaScript (Vanilla JS)&lt;/strong&gt; and utilizes:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;FileReader API&lt;/strong&gt; to load files locally&lt;/p&gt;

&lt;p&gt;Automatic insertion of &lt;strong&gt;line numbers&lt;/strong&gt; for code&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;navigator.clipboard.writeText()&lt;/code&gt; API for copying text&lt;/p&gt;

&lt;p&gt;Clean and simple UI using only basic HTML/CSS (no frameworks)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/uni928/SephirothSimplePromptGenerator" rel="noopener noreferrer"&gt;It's hosted on GitHub Pages&lt;/a&gt;, so you can use it instantly — no setup required.&lt;/p&gt;

&lt;p&gt;Note:&lt;br&gt;
If you are concerned about potential data leakage, we recommend downloading the &lt;code&gt;index2.html&lt;/code&gt; file from GitHub Pages and running it locally. Before doing so, you can copy and paste the source code into ChatGPT to check whether it contains any code that sends data externally.&lt;/p&gt;

&lt;p&gt;Since this tool is publicly hosted on GitHub Pages, &lt;strong&gt;any attempt to include such data-extracting functionality would be easily detected by inspecting the source code&lt;/strong&gt;, so we hope this offers some peace of mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙌 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If this tool makes writing prompts even a little easier, and helps you make better use of ChatGPT, I’d be thrilled.&lt;/p&gt;

&lt;p&gt;Feel free to leave feedback or suggestions in the comments!&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/SephirothSimplePromptGenerator/index2.html" rel="noopener noreferrer"&gt;Try the Prompt Generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://uni928.github.io/SephirothSimplePromptGenerator/index4.html" rel="noopener noreferrer"&gt;In the case of HTML, this one might work.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>chatgpt</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
