<?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: Fedora</title>
    <description>The latest articles on DEV Community by Fedora (@fds2003).</description>
    <link>https://dev.to/fds2003</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%2F4085896%2F30ad3e83-09cd-4184-868d-c71ec4fc2087.jpg</url>
      <title>DEV Community: Fedora</title>
      <link>https://dev.to/fds2003</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fds2003"/>
    <language>en</language>
    <item>
      <title>How I Built a Lightning-Fast Eastern Astrology &amp; BaZi Engine with Astro</title>
      <dc:creator>Fedora</dc:creator>
      <pubDate>Sat, 05 Sep 2026 15:45:14 +0000</pubDate>
      <link>https://dev.to/fds2003/how-i-built-a-lightning-fast-eastern-astrology-bazi-engine-with-astro-20bk</link>
      <guid>https://dev.to/fds2003/how-i-built-a-lightning-fast-eastern-astrology-bazi-engine-with-astro-20bk</guid>
      <description>&lt;p&gt;When building modern web applications, combining complex traditional algorithms with blazingly fast user experience is always a rewarding challenge. Recently, I designed and shipped &lt;strong&gt;&lt;a href="https://funtesthub.com" rel="noopener noreferrer"&gt;FunTestHub&lt;/a&gt;&lt;/strong&gt; — a privacy-first web platform specializing in authentic Eastern BaZi (Four Pillars of Destiny) astrological calculations, Western zodiac natal insights, and interactive personality assessments.&lt;/p&gt;

&lt;p&gt;Here is a breakdown of why and how we built it using &lt;strong&gt;Astro&lt;/strong&gt;, modern TypeScript, and zero-registration client-side computing.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Challenge: Heavy Calculations vs. Instant Loading
&lt;/h2&gt;

&lt;p&gt;Traditional astrology engines often rely on heavy backend API calls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Converting Gregorian calendar dates to precise astronomical solar terms (节气)&lt;/li&gt;
&lt;li&gt;Computing True Solar Time based on longitude and Equation of Time (EoT)&lt;/li&gt;
&lt;li&gt;Calculating 10-year luck pillars (大运), 12 life stages (长生十二神), and heavenly/earthly branch interactions (合化刑冲)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If done over synchronous network roundtrips, users face loading spinners and network latency. Furthermore, birth data is deeply personal — users are rightfully concerned about their privacy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Zero-Cloud-Storage &amp;amp; Client-Side Engine
&lt;/h3&gt;

&lt;p&gt;We encapsulated the entire Ephemeris and BaZi calculation engine into optimized, tree-shakable TypeScript modules. All calculations run &lt;strong&gt;100% locally in the user's browser&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;No birth dates or quiz answers are ever stored on a remote server. The result is instant calculation (&amp;lt; 5ms) and complete user peace of mind.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Why Astro Was the Clear Choice
&lt;/h2&gt;

&lt;p&gt;For a content-heavy, calculation-rich web app, &lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; provided unmatched architectural advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Island Architecture (Zero JS by Default)&lt;/strong&gt;:
Informational landing pages, zodiac archetypes, and guides ship with pure static HTML. Interactive calculators hydrate only when visible on screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Language (i18n) at Scale&lt;/strong&gt;:
We support 9 languages seamlessly using Astro's built-in routing and static pre-rendering, ensuring optimal localized SEO indexing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flawless Core Web Vitals&lt;/strong&gt;:
By offloading heavy UI components and deferring third-party analytics (like Clarity and GA4) to idle callbacks, FunTestHub achieves near-perfect 100/100 Lighthouse performance scores.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. High-Precision True Solar Time Calculation
&lt;/h2&gt;

&lt;p&gt;One key differentiator in authentic Eastern BaZi calculation is accounting for the solar angle deviation based on birth coordinates:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
typescript
// Calculation of True Solar Time adjustment (in minutes)
export function getSolarTimeCorrection(longitude: number, dayOfYear: number): number {
  // Longitude correction: 4 minutes per degree deviation from standard timezone meridian
  const longitudeOffset = (longitude - 120) * 4;

  // Equation of Time (EoT) approximation in minutes
  const b = (2 * Math.PI * (dayOfYear - 81)) / 365;
  const eot = 9.87 * Math.sin(2 * b) - 7.53 * Math.cos(b) - 1.5 * Math.sin(b);

  return longitudeOffset + eot;
}

By factoring this calculation in before generating the Four Pillars (Year, Month, Day, Hour), the resulting heavenly stems and earthly branches remain historically and astronomically accurate.

4. Key Takeaways for Indie Developers
Don't over-architect with microservices: If your calculations can be run client-side in TypeScript, avoid spinning up heavy servers. Keep maintenance near-zero.
Prioritize user privacy from Day 1: Explicitly communicating that no personal quiz or astrological data is collected builds instant trust.
Leverage modern static frameworks: Tools like Astro make delivering multilingual, SEO-optimized web tools remarkably straightforward.
Check out the live interactive app at FunTestHub.com!

Feel free to share your thoughts, feedback, or questions about Astro and client-side astronomical algorithms below!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>astro</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>5 Excel &amp; Google Sheets Formulas That Clean Messy Data 10x Faster</title>
      <dc:creator>Fedora</dc:creator>
      <pubDate>Sat, 05 Sep 2026 13:12:15 +0000</pubDate>
      <link>https://dev.to/fds2003/5-excel-google-sheets-formulas-that-clean-messy-data-10x-faster-53d4</link>
      <guid>https://dev.to/fds2003/5-excel-google-sheets-formulas-that-clean-messy-data-10x-faster-53d4</guid>
      <description>&lt;p&gt;Cleaning messy spreadsheets is one of the most time-consuming tasks for data analysts, marketers, and developers. Extra spaces, inconsistent formatting, mixed-up names, and unstandardized text often break database imports and analytics pipelines.&lt;/p&gt;

&lt;p&gt;Here are 5 essential formulas to clean messy data in Microsoft Excel and Google Sheets 10x faster.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Remove Invisible &amp;amp; Non-Breaking Spaces: &lt;code&gt;TRIM&lt;/code&gt; + &lt;code&gt;CLEAN&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When you copy-paste data from websites or PDFs, hidden ASCII characters and trailing spaces often cause lookup formulas (&lt;code&gt;VLOOKUP&lt;/code&gt; or &lt;code&gt;XLOOKUP&lt;/code&gt;) to return &lt;code&gt;#N/A&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=TRIM(CLEAN(A2))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CLEAN(A2)&lt;/code&gt;&lt;/strong&gt;: Strips non-printable ASCII characters (0 to 31).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;TRIM(...)&lt;/code&gt;&lt;/strong&gt;: Removes leading, trailing, and excessive internal spaces.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Extract Text Before a Delimiter: &lt;code&gt;TEXTBEFORE&lt;/code&gt; (Excel 365 / Sheets)
&lt;/h2&gt;

&lt;p&gt;Need to extract the username from an email or the first word from a product code? Instead of nesting &lt;code&gt;LEFT&lt;/code&gt; and &lt;code&gt;FIND&lt;/code&gt;, use modern text splitting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=TEXTBEFORE(A2, "@")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For legacy Excel versions (2019 and older)&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LEFT(A2, FIND("@", A2) - 1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;em&gt;Need custom character extraction without memorizing syntax? You can generate exact formulas instantly with &lt;a href="https://www.getsheetmaster.com" rel="noopener noreferrer"&gt;SheetMaster Formula Generator&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Dynamic Two-Way Lookups with &lt;code&gt;XLOOKUP&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Forget hardcoded column index numbers from &lt;code&gt;VLOOKUP&lt;/code&gt; that break when you insert a new column. &lt;code&gt;XLOOKUP&lt;/code&gt; looks in any direction (left or right) and handles missing values natively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=XLOOKUP(D2, A2:A100, B2:B100, "Not Found", 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;D2&lt;/code&gt;&lt;/strong&gt;: The lookup value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;A2:A100&lt;/code&gt;&lt;/strong&gt;: The column to search within.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;B2:B100&lt;/code&gt;&lt;/strong&gt;: The return range.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;"Not Found"&lt;/code&gt;&lt;/strong&gt;: Built-in default value if no match is found.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Standardize Case &amp;amp; Formatting: &lt;code&gt;PROPER&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Importing contact names in ALL CAPS or all lowercase looks unprofessional in email campaigns. Standardize full names into Title Case automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=PROPER(TRIM(A2))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Converts &lt;code&gt;"JOHN DOE "&lt;/code&gt; → &lt;code&gt;"John Doe"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Extract Domain Names from URL Strings
&lt;/h2&gt;

&lt;p&gt;If you have a column of raw web URLs and need clean root domains for competitor analysis or backlink auditing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=MID(A2, SEARCH("://", A2) + 3, SEARCH("/", A2, 9) - (SEARCH("://", A2) + 3))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Summary &amp;amp; Free Productivity Tool
&lt;/h2&gt;

&lt;p&gt;Cleaning data doesn't have to require manual formula debugging. If you want ready-to-use formula generators with real-time syntax checking, check out the free interactive tools at &lt;strong&gt;&lt;a href="https://www.getsheetmaster.com" rel="noopener noreferrer"&gt;SheetMaster&lt;/a&gt;&lt;/strong&gt; (100% free, zero signup required).&lt;/p&gt;

&lt;p&gt;What are your favorite data cleaning tricks in spreadsheets? Let me know in the comments below! 🚀&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>datascience</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I Built a Wordle for Chinese Idioms with 7,200+ Words, Pinyin &amp; Audio (and achieved a 100 Lighthouse score)</title>
      <dc:creator>Fedora</dc:creator>
      <pubDate>Sat, 05 Sep 2026 13:04:05 +0000</pubDate>
      <link>https://dev.to/fds2003/how-i-built-a-wordle-for-chinese-idioms-with-7200-words-pinyin-audio-and-achieved-a-100-14od</link>
      <guid>https://dev.to/fds2003/how-i-built-a-wordle-for-chinese-idioms-with-7200-words-pinyin-audio-and-achieved-a-100-14od</guid>
      <description>&lt;p&gt;Hey everyone! 👋 &lt;/p&gt;

&lt;p&gt;I'm excited to share a side project I've been building and optimizing recently: &lt;strong&gt;&lt;a href="https://easyidiom.com/" rel="noopener noreferrer"&gt;EasyIdiom (成语猜词)&lt;/a&gt;&lt;/strong&gt; — a free, daily word puzzle game that brings the engaging mechanics of Wordle to traditional 4-character Chinese idioms (&lt;em&gt;成语, chéngyǔ&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;🎮 &lt;strong&gt;Live Game&lt;/strong&gt;: &lt;a href="https://easyidiom.com/" rel="noopener noreferrer"&gt;https://easyidiom.com/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
⭐ &lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/fds2003/easyidiom" rel="noopener noreferrer"&gt;https://github.com/fds2003/easyidiom&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The Motivation
&lt;/h2&gt;

&lt;p&gt;Wordle took the world by storm, but adapting it to Chinese characters presented unique linguistic and technical challenges:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chinese is not based on an alphabet — each idiom consists of 4 distinct characters with individual tones and pronunciations (&lt;em&gt;Pinyin&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Beginners and language learners often know the pronunciation or meaning without knowing how to type complex strokes.&lt;/li&gt;
&lt;li&gt;How to provide progressive feedback (character correctness, pinyin accuracy, and cultural definitions) without spoiling the game?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛠️ The Tech Stack
&lt;/h2&gt;

&lt;p&gt;To keep the web app lightning fast on mobile devices without bloated frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Core&lt;/strong&gt;: &lt;a href="https://preactjs.com/" rel="noopener noreferrer"&gt;Preact&lt;/a&gt; (3kB lightweight alternative to React) + Vite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phonetic Engine&lt;/strong&gt;: &lt;code&gt;pinyin-pro&lt;/code&gt; for dynamic tone generation &amp;amp; polyphone handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sound Effects&lt;/strong&gt;: Lightweight Web Audio API &amp;amp; Howler.js for tactile keypress feedback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics &amp;amp; Screen Recording&lt;/strong&gt;: Interaction-deferred Google Analytics 4 &amp;amp; Microsoft Clarity (zero CWV impact)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment &amp;amp; Hosting&lt;/strong&gt;: Global Edge CDN via Vercel with zero cold starts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚡ Key Engineering &amp;amp; Optimization Challenges
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pinyin Feedback &amp;amp; Algorithmic Clues
&lt;/h3&gt;

&lt;p&gt;Unlike English 5-letter words, Chinese idioms have dual layers: &lt;strong&gt;Hanzi (Character)&lt;/strong&gt; and &lt;strong&gt;Pinyin (Pronunciation)&lt;/strong&gt;. &lt;br&gt;
We built an interactive virtual keyboard that aggregates pinyin initials and finals dynamically based on candidate idioms, highlighting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟩 &lt;strong&gt;Green&lt;/strong&gt;: Exact character &amp;amp; position match.&lt;/li&gt;
&lt;li&gt;🟧 &lt;strong&gt;Amber&lt;/strong&gt;: Character exists in the idiom but in a different position.&lt;/li&gt;
&lt;li&gt;⬜ &lt;strong&gt;Gray&lt;/strong&gt;: Character is absent from the target idiom.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Zero-Runtime Dead Code &amp;amp; 100/100 Lighthouse Performance
&lt;/h3&gt;

&lt;p&gt;By auditing JavaScript chunks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replaced heavyweight polyfills and font dependencies with modern native system font stacks (&lt;code&gt;system-ui, -apple-system, Segoe UI...&lt;/code&gt;), reducing font payload from 1,600ms latency down to &lt;strong&gt;0ms&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dynamic &lt;code&gt;import()&lt;/code&gt; splitting for heavy visual tools (e.g., &lt;code&gt;canvas-confetti&lt;/code&gt; and &lt;code&gt;html-to-image&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Deferred third-party trackers until first user interaction (&lt;code&gt;pointerdown&lt;/code&gt;, &lt;code&gt;keydown&lt;/code&gt;, &lt;code&gt;scroll&lt;/code&gt;), achieving a flawless &lt;strong&gt;100/100 Core Web Vitals score&lt;/strong&gt; on Mobile &amp;amp; Desktop.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Progressive Clue Engine ("I'm Stuck")
&lt;/h3&gt;

&lt;p&gt;For learners stuck on difficult idioms, we implemented a 3-tier clue system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;1st Click&lt;/strong&gt;: Displays cultural/dictionary definition hints without revealing words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2nd Click&lt;/strong&gt;: Reveals the pinyin &amp;amp; tone of the 1st character.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3rd Click&lt;/strong&gt;: Reveals a mystery character location.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🚀 Try It Out &amp;amp; Feedback!
&lt;/h2&gt;

&lt;p&gt;The game is 100% free, requires no sign-up, and works offline/on mobile.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧩 &lt;strong&gt;Play today's challenge&lt;/strong&gt;: &lt;a href="https://easyidiom.com/" rel="noopener noreferrer"&gt;https://easyidiom.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📚 &lt;strong&gt;Explore 7,200+ Idiom Dictionary&lt;/strong&gt;: &lt;a href="https://easyidiom.com/idioms/" rel="noopener noreferrer"&gt;https://easyidiom.com/idioms/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🎲 &lt;strong&gt;Random Idiom Generator&lt;/strong&gt;: &lt;a href="https://easyidiom.com/generator/" rel="noopener noreferrer"&gt;https://easyidiom.com/generator/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear your thoughts, UI suggestions, or ideas for new features! If you find it helpful for learning Chinese or testing your puzzle skills, a ⭐ on &lt;a href="https://github.com/fds2003/easyidiom" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; would mean the world!&lt;/p&gt;

&lt;p&gt;Happy guessing! 🐯🎉&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I Built a Lightning-Fast Eastern Astrology &amp; Bazi Engine with Astro</title>
      <dc:creator>Fedora</dc:creator>
      <pubDate>Sat, 05 Sep 2026 13:00:50 +0000</pubDate>
      <link>https://dev.to/fds2003/how-i-built-a-lightning-fast-eastern-astrology-bazi-engine-with-astro-a6k</link>
      <guid>https://dev.to/fds2003/how-i-built-a-lightning-fast-eastern-astrology-bazi-engine-with-astro-a6k</guid>
      <description>&lt;p&gt;If you've ever explored traditional Eastern metaphysics (like &lt;strong&gt;Four Pillars of Destiny / Bazi&lt;/strong&gt;, &lt;strong&gt;Zi Wei Dou Shu&lt;/strong&gt;, or &lt;strong&gt;Zhougong Dream Interpretation&lt;/strong&gt;), you've probably noticed a common problem:&lt;/p&gt;

&lt;p&gt;Almost every astrology and fortune-telling site on the web today is painfully slow, riddled with invasive pop-up ads, clunky forms, and forced paywalls.&lt;/p&gt;

&lt;p&gt;As an engineer fascinated by algorithmic culture and psychology, I wanted to fix this. I set out to build a modern, aesthetic, and privacy-first web platform: &lt;strong&gt;&lt;a href="https://funtesthub.com" rel="noopener noreferrer"&gt;FunTestHub (funtesthub.com)&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is a quick look behind the architecture and how I approached the engineering challenges.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why Astro for a Heavy Content &amp;amp; Calculation Matrix?
&lt;/h2&gt;

&lt;p&gt;When building personal tools like &lt;a href="https://funtesthub.com/zh-CN/bazi/" rel="noopener noreferrer"&gt;Bazi Natal Chart&lt;/a&gt; and 80-year &lt;a href="https://funtesthub.com/zh-CN/rensheng-quxian-2027/" rel="noopener noreferrer"&gt;Life Energy Curves&lt;/a&gt;, the core priority was &lt;strong&gt;speed and zero tracking bloat&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Traditional single-page apps (SPAs) often ship megabytes of JavaScript just to render static tables and basic forms. With &lt;strong&gt;Astro&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Island Architecture&lt;/strong&gt;: All static text, tables, and SEO Schemas (FAQPage, Article) are pre-rendered into pure HTML at build time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero JS by default&lt;/strong&gt;: Pages load instantaneously across global CDNs (Cloudflare Pages), achieving near-perfect 100/100 Lighthouse performance scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Islands&lt;/strong&gt;: Dynamic features (like interactive divination and date converters) only hydrate lightweight JavaScript islands when needed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Modeling 80-Year Life Energy Curves
&lt;/h2&gt;

&lt;p&gt;One of the most complex modules was calculating 80-year life curves. In classical Bazi theory, each year's stem-branch interacts with a person's natal chart across four fundamental dimensions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Spirit / Mental Resilience&lt;/strong&gt; (精神)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wealth &amp;amp; Resource Capacity&lt;/strong&gt; (财富)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fame &amp;amp; Recognition&lt;/strong&gt; (名声)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emotion &amp;amp; Relationships&lt;/strong&gt; (感情)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of relying on heavy third-party canvas or charting libraries that would tank Core Web Vitals, I generated &lt;strong&gt;inline responsive SVGs&lt;/strong&gt; directly during build time. This ensures instant rendering with zero client-side layout shifts (CLS).&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Privacy-First Philosophy
&lt;/h2&gt;

&lt;p&gt;Most spiritual or personality test websites demand your email, phone number, or date of birth stored in opaque databases.&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;&lt;a href="https://funtesthub.com" rel="noopener noreferrer"&gt;FunTestHub&lt;/a&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No account registration required.&lt;/li&gt;
&lt;li&gt;Zero tracking of private data.&lt;/li&gt;
&lt;li&gt;Everything runs transparently and is 100% free.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try it Out &amp;amp; Feedback Welcome!
&lt;/h2&gt;

&lt;p&gt;You can check out the live project at:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://funtesthub.com" rel="noopener noreferrer"&gt;https://funtesthub.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Whether you are curious about your &lt;a href="https://funtesthub.com/zh-CN/bazi/" rel="noopener noreferrer"&gt;Bazi chart&lt;/a&gt;, exploring your 2027 zodiac energy, or just taking a quick &lt;a href="https://funtesthub.com/en/mbti-test/" rel="noopener noreferrer"&gt;MBTI assessment&lt;/a&gt;, I'd love to hear your feedback on the UI/UX and calculation speed!&lt;/p&gt;

&lt;p&gt;What other traditional cultural algorithms would you like to see modernized with web technologies? Let me know in the comments below!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>astro</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>10 Excel String Functions You Need to Know (With Free Tools)</title>
      <dc:creator>Fedora</dc:creator>
      <pubDate>Thu, 20 Aug 2026 07:14:07 +0000</pubDate>
      <link>https://dev.to/fds2003/10-excel-string-functions-you-need-to-know-with-free-tools-3nj1</link>
      <guid>https://dev.to/fds2003/10-excel-string-functions-you-need-to-know-with-free-tools-3nj1</guid>
      <description>&lt;h2&gt;
  
  
  The Problem With Manual Formula Typing
&lt;/h2&gt;

&lt;p&gt;If you work with data in Excel or Google Sheets, you've probably spent more time than you'd like typing out string manipulation formulas. Extract text, remove characters, find positions — these are everyday tasks that become repetitive fast.&lt;/p&gt;

&lt;p&gt;In this guide, I'll walk through 10 essential Excel string functions with real examples and show you how to generate them instantly with free online tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. LEFT — Extract Characters from the Start
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Get the first 3 characters from a product code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LEFT(A2, 3)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pulls the first N characters from a text string. Perfect for extracting country codes, SKUs, or initials.&lt;/p&gt;

&lt;p&gt;🔧 &lt;a href="https://www.getsheetmaster.com/formulas/remove-first-3-chars" rel="noopener noreferrer"&gt;Try it free — Remove First 3 Characters Tool&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. RIGHT — Extract Characters from the End
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Get the last 4 digits of a phone number.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=RIGHT(A2, 4)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The opposite of LEFT — useful when you need the tail end of a string, like file extensions or postal codes.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. MID — Extract Characters from the Middle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Pull a specific portion from the middle of a text string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=MID(A2, 5, 3)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extracts N characters starting from position M. Great for ISO codes embedded in longer strings.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. LEN — Get Text Length
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Count characters to validate input length.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=LEN(A2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns the character count. Combine with IF for validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IF(LEN(A2)&amp;lt;3, "Too short", "OK")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. FIND / SEARCH — Locate Text Position
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Find where a substring begins.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=FIND("@", A2)      ' Finds "@" in an email
=SEARCH(" ", A2)     ' Finds first space (case-insensitive)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FIND is case-sensitive; SEARCH is not. Both return the position number.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. SUBSTITUTE — Replace Text
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Swap one text for another throughout a cell.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=SUBSTITUTE(A2, "-", "/")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace dashes with slashes, or clean up inconsistent formatting across thousands of rows.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. CONCATENATE / &amp;amp; — Join Text
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Merge first name and last name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=CONCATENATE(A2, " ", B2)
'=A2 &amp;amp; " " &amp;amp; B2   ' Same thing, shorter syntax
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ampersand (&amp;amp;) operator is cleaner for simple joins.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. TRIM — Remove Extra Spaces
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Clean up copied data with erratic spacing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=TRIM(A2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Strips leading/trailing spaces and collapses multiple spaces between words into one. Essential for data cleaning.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. UPPER / LOWER / PROPER — Change Case
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Standardize text formatting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=UPPER(A2)     ' ALL CAPS
=LOWER(A2)     ' all lowercase
=PROPER(A2)    ' Title Case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PROPER is especially handy for fixing names that came in all wrong cases from a data export.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. TEXTBEFORE / TEXTAFTER (Excel 365) — Modern String Splitting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Split text by delimiter without complex formula nesting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=TEXTBEFORE(A2, "@")      ' Gets the part before "@"
=TEXTAFTER(A2, ".")       ' Gets the part after "."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These new functions (Excel 365 / Google Sheets) make string splitting dramatically simpler than the old LEFT/FIND combinations.&lt;/p&gt;




&lt;h2&gt;
  
  
  When to Use a Formula Generator Instead
&lt;/h2&gt;

&lt;p&gt;For quick one-offs, typing the formula yourself is fine. But when you're building dashboards, automating reports, or teaching others, having a tool that generates the exact formula you need saves time and reduces errors.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://www.getsheetmaster.com/" rel="noopener noreferrer"&gt;GetSheetMaster&lt;/a&gt; specifically for this — it's a free online reference that generates Excel and Google Sheets formulas interactively. No signup required.&lt;/p&gt;

&lt;p&gt;For example, instead of remembering the exact syntax for removing characters from text, you can visit the &lt;a href="https://www.getsheetmaster.com/formulas/remove-first-3-chars" rel="noopener noreferrer"&gt;Remove First 3 Characters tool&lt;/a&gt;, enter your cell reference, and get the formula instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Reference Cheat Sheet
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LEFT&lt;/td&gt;
&lt;td&gt;Extract from start&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=LEFT(A2, 3)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RIGHT&lt;/td&gt;
&lt;td&gt;Extract from end&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=RIGHT(A2, 4)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MID&lt;/td&gt;
&lt;td&gt;Extract from middle&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=MID(A2, 5, 3)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LEN&lt;/td&gt;
&lt;td&gt;Count characters&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=LEN(A2)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FIND&lt;/td&gt;
&lt;td&gt;Find position (case-sensitive)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=FIND("@", A2)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEARCH&lt;/td&gt;
&lt;td&gt;Find position (case-insensitive)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=SEARCH(" ", A2)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUBSTITUTE&lt;/td&gt;
&lt;td&gt;Replace text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=SUBSTITUTE(A2, "-", "/")&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CONCATENATE&lt;/td&gt;
&lt;td&gt;Join text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=A2 &amp;amp; " " &amp;amp; B2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TRIM&lt;/td&gt;
&lt;td&gt;Remove extra spaces&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=TRIM(A2)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PROPER&lt;/td&gt;
&lt;td&gt;Title case&lt;/td&gt;
&lt;td&gt;&lt;code&gt;=PROPER(A2)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;String manipulation is one of the most common Excel tasks — whether you're cleaning customer data, parsing filenames, or extracting metadata. Mastering these 10 functions will cover 95% of what you'll encounter.&lt;/p&gt;

&lt;p&gt;And if you ever need the exact formula in seconds instead of digging through documentation, tools like &lt;a href="https://www.getsheetmaster.com/" rel="noopener noreferrer"&gt;GetSheetMaster&lt;/a&gt; can generate them for you on the spot.&lt;/p&gt;

&lt;p&gt;Which string function do you use most? Let me know in the comments.&lt;/p&gt;

</description>
      <category>spreadsheet</category>
    </item>
  </channel>
</rss>
