<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog | TDH Software</title>
    <link>https://tdhsoft.com/blog/en/</link>
    <atom:link href="https://tdhsoft.com/blog/en/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Notes on learning Chinese, and on building software that people actually use. Written by the team behind KoiSpeak.</description>
    <language>en</language>
    <item>
      <title>How to look up a Chinese character you cannot type</title>
      <link>https://tdhsoft.com/blog/en/how-to-look-up-a-chinese-character-you-cannot-type.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/how-to-look-up-a-chinese-character-you-cannot-type.html</guid>
      <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
      <description>You are reading a menu, a sign, or a page of a novel, and one character stops you. You cannot type it because you do not know how it is read. Here are five ways in, ranked by how fast they get you an answer.</description>
    </item>
    <item>
      <title>HSK levels explained: what HSK 1 to 6 actually ask of you</title>
      <link>https://tdhsoft.com/blog/en/hsk-levels-explained.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/hsk-levels-explained.html</guid>
      <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
      <description>Vocabulary counts only tell you part of the story. Here is what each HSK level actually demands, where learners typically stall, and how to tell which level you are really at.</description>
    </item>
    <item>
      <title>Chinese tones: why learners plateau, and how to get moving again</title>
      <link>https://tdhsoft.com/blog/en/chinese-tones-why-learners-plateau.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/chinese-tones-why-learners-plateau.html</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Most learners can produce four tones in isolation and still cannot be understood in a sentence. The gap is not effort. It is that tones behave differently in connected speech, and almost nobody is taught that part.</description>
    </item>
    <item>
      <title>The Chinese radicals worth learning first</title>
      <link>https://tdhsoft.com/blog/en/chinese-radicals-worth-learning-first.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/chinese-radicals-worth-learning-first.html</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <description>There are 214 Kangxi radicals. You do not need all of them to start guessing what characters mean. Here are around thirty that carry most of the weight, with the characters they unlock.</description>
    </item>
    <item>
      <title>Spaced repetition for Chinese vocabulary, without the burnout</title>
      <link>https://tdhsoft.com/blog/en/spaced-repetition-for-chinese-vocabulary.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/spaced-repetition-for-chinese-vocabulary.html</guid>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <description>Flashcards work, and most people still quit within two months. Almost always for the same four reasons. Here is how to design a deck you will still be using next year.</description>
    </item>
    <item>
      <title>Start reading Chinese before you feel ready</title>
      <link>https://tdhsoft.com/blog/en/start-reading-chinese-before-you-are-ready.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/start-reading-chinese-before-you-are-ready.html</guid>
      <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
      <description>Waiting until you know enough words is a trap, because the words come from reading. Here is how to start earlier than feels sensible without drowning.</description>
    </item>
    <item>
      <title>Stop asking users to pick a mode: search that guesses what you meant</title>
      <link>https://tdhsoft.com/blog/en/search-that-guesses-what-you-meant.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/search-that-guesses-what-you-meant.html</guid>
      <pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate>
      <description>A dictionary that accepts three input scripts can either ask the user to choose, or work it out. Choosing is easier to build and worse to use. Here is how we made the guess reliable.</description>
    </item>
    <item>
      <title>Your multilingual site is probably only indexed in one language</title>
      <link>https://tdhsoft.com/blog/en/multilingual-static-site-seo-hreflang.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/multilingual-static-site-seo-hreflang.html</guid>
      <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
      <description>Switching language with JavaScript on a single URL is the most common way to make six translations invisible to search engines. Here is what actually gets indexed, and how to structure a static site so it does not happen.</description>
    </item>
    <item>
      <title>Set the performance budget before the design, not after the complaints</title>
      <link>https://tdhsoft.com/blog/en/performance-budgets-set-before-design.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/performance-budgets-set-before-design.html</guid>
      <pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate>
      <description>Performance treated as an optimisation phase always loses to features. Treated as a constraint agreed before design starts, it quietly shapes better decisions for free.</description>
    </item>
    <item>
      <title>Offline-first is a data model decision, not a caching feature</title>
      <link>https://tdhsoft.com/blog/en/offline-first-sync-for-mobile-apps.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/offline-first-sync-for-mobile-apps.html</guid>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <description>Most apps bolt offline support on at the end and discover it was an architecture question all along. Here is what actually has to change, and the conflict rules you have to choose between.</description>
    </item>
    <item>
      <title>How to scope a first release you will actually ship</title>
      <link>https://tdhsoft.com/blog/en/how-to-scope-a-first-release.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/how-to-scope-a-first-release.html</guid>
      <pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate>
      <description>Most first versions are late because of what went into them, not how fast the team worked. Here is the cutting method we use, and the three things that are never worth cutting.</description>
    </item>
    <item>
      <title>The software handover checklist: what you should own when an agency leaves</title>
      <link>https://tdhsoft.com/blog/en/software-handover-checklist.html</link>
      <guid isPermaLink="true">https://tdhsoft.com/blog/en/software-handover-checklist.html</guid>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <description>Plenty of companies discover after the final invoice that they cannot deploy their own product. Here is everything that should be in your name, and how to check before the relationship ends.</description>
    </item>
  </channel>
</rss>
