<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Niche App Lab</title>
    <link>https://nicheapplab.com/</link>
    <description>Recent content on Niche App Lab</description>
    <image>
      <title>Niche App Lab</title>
      <url>https://nicheapplab.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://nicheapplab.com/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo</generator>
    <language>ja-JP</language>
    <lastBuildDate>Thu, 21 May 2026 16:56:38 -0700</lastBuildDate>
    <atom:link href="https://nicheapplab.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>T Code IME for Windows</title>
      <link>https://nicheapplab.com/posts/t-code-ime-for-windows/</link>
      <pubDate>Thu, 21 May 2026 16:56:38 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/t-code-ime-for-windows/</guid>
      <description>&lt;p&gt;Android 用 T-Code IME として T-Code IME for Android をリリースする際に, エンジン部分(T-Code Engine)を取り出し, 各プラットフォームで IME を提供するという構想がありました.&lt;/p&gt;
&lt;p&gt;とはいえ, Windows 用の IME には Text Services Framework という C++ 用に提供されたライブラリを使用するという制約上, Android 用と比較すると複雑な構成です.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;T-Code IME for Windows のコンポーネント図&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-for-windows/components.png&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IME 本体である &lt;code&gt;TCode IME for Windows&lt;/code&gt; は薄いラッパー&lt;/li&gt;
&lt;li&gt;バックグラウンドプロセスに &lt;code&gt;TCode Proxy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TCode Proxy&lt;/code&gt; は別の Java Thread (&lt;code&gt;Pekko Actor&lt;/code&gt;) として &lt;code&gt;T-Code Engine&lt;/code&gt; のサーバーを立てる&lt;/li&gt;
&lt;li&gt;そしてそれぞれ Windows Named Pipe と gPRC プロトコルを用いてローカルマシン上で通信する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;T-Code IME for Android がこうした複雑な構成とならなかった理由は,ひとえに Android
アプリが Kotlin で書かれており, 同プロセス上に Scala で実装した T-Code Engine を直接利用できたためでした.&lt;/p&gt;</description>
    </item>
    <item>
      <title>T-Code IME for Windows 0.1.0-RC1</title>
      <link>https://nicheapplab.com/posts/t-code-ime-for-windows-0-1-0-rc1/</link>
      <pubDate>Thu, 21 May 2026 16:56:29 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/t-code-ime-for-windows-0-1-0-rc1/</guid>
      <description>&lt;p&gt;Windows 用の T-Code IME のテストリリースができました(&lt;a href=&#34;https://github.com/NicheAppLab/T-Code-IME-for-Win/releases/tag/0.1.0-RC1&#34;&gt;Link&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;注意点&#34;&gt;注意点&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JRE(or JDK)が必要で, PATH/JAVA_HOME の設定が必要. 概ねインストーラーが設定してくれますが, 設定されない環境もあるかもしれません.&lt;/li&gt;
&lt;li&gt;IME はキーボードとして追加が必要です. コントロールパネルより, 言語と地域から, 日本語の設定で, 下方にキーボードの設定があります. そこに追加する必要があります.&lt;/li&gt;
&lt;li&gt;IME を動かすにはインストールされた T-Code IME Proxy を起動する必要があります.&lt;/li&gt;
&lt;li&gt;T-Code モード以外は未サポート (半角英字にするときは IME の切り替えでいいかな,と…)&lt;/li&gt;
&lt;li&gt;問題があれば私に DM か GitHub にて &lt;a href=&#34;https://github.com/NicheAppLab/T-Code-IME-for-Win/issues&#34;&gt;Issues&lt;/a&gt; に登録していただけると幸いです.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>T-Code IME for Android</title>
      <link>https://nicheapplab.com/posts/t-code-ime-for-android/</link>
      <pubDate>Sun, 05 Apr 2026 18:00:49 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/t-code-ime-for-android/</guid>
      <description>&lt;p&gt;Niche App Lab がリリースしている, T-Code IME for Android の製品情報です.
以下, T-Code IME for Android の特徴です.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[○ 高速]&lt;/strong&gt; 2 キーストロークで多くの常用漢字を含む最大 1600 字をカバーします.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[○ プライバシーに配慮]&lt;/strong&gt; 入力を一切学習しません. 予測変換も一切ありません. 入力対象アプリ内の情報も一切読み込みません.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[○ 思考を中断させない]&lt;/strong&gt; 無変換直接入力のため, 文節の変換操作がありません. 入力後に変換のため思考が逆行する, ということもありません.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[○ 物理キーボード対応]&lt;/strong&gt; 物理キーボードを接続して使用することができます. 仮想キーボードは最小化できます. Qwerty/Dvorak レイアウトに対応しています.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[× 急峻な学習曲線]&lt;/strong&gt; 慣れると高速である一方で, キーストロークを覚えるには反復訓練が必要です.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もう少し T-Code について知りたい方, &lt;a href=&#34;https://nicheapplab.com/posts/t-code/&#34;&gt;こちら&lt;/a&gt;のページをご一読ください.&lt;/p&gt;
&lt;h2 id=&#34;t-code-ime-for-android-の使い方&#34;&gt;T-Code IME for Android の使い方&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://nicheapplab.com/posts/t-code-ime-install/&#34;&gt;インストール後の初期設定&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nicheapplab.com/posts/t-code-ime-maze/&#34;&gt;交ぜ書き変換について&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ダウンロード&#34;&gt;ダウンロード&lt;/h2&gt;
&lt;p&gt;以下のストアで無料で入手できます.
アプリ内広告は, 設定画面から広告表示ボタンを押したときのみ再生されます.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Store&lt;/th&gt;
          &lt;th&gt;Link&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Google Play&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://play.google.com/store/apps/details?id=com.nicheapplab.t_codeime&#34;&gt;&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;./GetItOnGooglePlay_Badge_Web_color_English.png&#34; width=&#34;150px&#34;/&gt; 
&lt;/figure&gt;
&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Amazon (JP) Appstore&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.amazon.co.jp/Niche-App-Lab-T-Code-IME/dp/B0GSCMQWVF/&#34;&gt;&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;amazon-appstore-badge-english-white.png&#34; width=&#34;150px&#34;/&gt; 
&lt;/figure&gt;
&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Amazon Appstore&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://www.amazon.com/Niche-App-Lab-T-Code-IME/dp/B0GSCMQWVF/&#34;&gt;&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;amazon-appstore-badge-english-white.png&#34; width=&#34;150px&#34;/&gt; 
&lt;/figure&gt;
&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</description>
    </item>
    <item>
      <title>T-Code-Engine 0.7.2</title>
      <link>https://nicheapplab.com/posts/tcodeengine-0-7-2/</link>
      <pubDate>Fri, 08 May 2026 10:49:32 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/tcodeengine-0-7-2/</guid>
      <description>&lt;p&gt;t-code-engine 0.7.2 をリリースしました.
前回のリリースからオブジェクトの API が変更になりました.&lt;/p&gt;
&lt;p&gt;主な変更点は以下のものです.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;エンジン種別の追加&lt;/li&gt;
&lt;li&gt;辞書ファイル/SQLite データベースの利用&lt;/li&gt;
&lt;li&gt;部首合成機能の終端指定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;エンジンの種類&#34;&gt;エンジンの種類&lt;/h2&gt;
&lt;p&gt;T-Code-Engine では, ユーザー入力をまとめて変換する &lt;code&gt;BatchEngine&lt;/code&gt; と, ユーザーによる入力と選択をインタラクティブに実行できる &lt;code&gt;InteractiveEngine&lt;/code&gt; があります. この種別とは別に, Zip ファイル辞書から SQLite database を生成しこれを使用する&lt;code&gt;SQLite&lt;/code&gt; と, Zip ファイル辞書を直接参照する &lt;code&gt;Archived&lt;/code&gt; の種別があります. まとめると, エンジンの選択肢は以下の通りです.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SQLiteInteractiveEngine&lt;/code&gt; (T-Code IME for Android で使用中)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ArchivedInteractiveEngine&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SQLiteBatchEngine&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ArchivedBatchEngine&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;archived-の用例&#34;&gt;&lt;code&gt;Archived&lt;/code&gt; の用例&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Archived&lt;/code&gt; では, uPickle を利用して msgpack 化し Zip 書庫にまとめた辞書ファイル
(&lt;code&gt;src/main/resources/tcode_dict.zip&lt;/code&gt;)を使用します. 辞書データはインスタンスを作成した際にメモリ上に展開されます.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scala&#34; data-lang=&#34;scala&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ArchivedInteractiveEngine&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QwertyLayout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;sqlite-の用例&#34;&gt;&lt;code&gt;SQLite&lt;/code&gt; の用例&lt;/h3&gt;
&lt;p&gt;一方 Anroid 上の IME はこのエンジンインスタンスの頻度が高く, 書庫ファイルへの頻繁なアクセスは, IME を要求するたびに ロード時間を増加させるという欠点(IME ラグと呼ばれます)があります. そのため, T-Code IME for Android では &lt;code&gt;SQLite&lt;/code&gt; 版を使用することで, Zip 書庫の読み込みを初回のみに限定し, アプリ専用のストレージに
database ファイルを作成し, IME の機能をコールする際にデータベース問合せを実行します.&lt;/p&gt;</description>
    </item>
    <item>
      <title>T-Code-Engine 0.4.x [obsolete]</title>
      <link>https://nicheapplab.com/posts/tcodeengine/</link>
      <pubDate>Wed, 08 Apr 2026 10:38:00 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/tcodeengine/</guid>
      <description>&lt;p&gt;この記事は古いバージョン(0.4.x)に基づいて記述されています.
最新版は &lt;a href=&#34;https://nicheapplab.com/tags/t-code-engine/&#34;&gt;T-Code-Engine タグ&lt;/a&gt;にてご確認ください.&lt;/p&gt;
&lt;h2 id=&#34;主な機能&#34;&gt;主な機能&lt;/h2&gt;
&lt;p&gt;T-Code-Engine では, ユーザー入力をまとめて変換する &lt;code&gt;BatchEngine&lt;/code&gt; と, ユーザーによる入力と選択をインタラクティブに実行できる &lt;code&gt;InteractiveEngine&lt;/code&gt; があります.&lt;/p&gt;
&lt;h3 id=&#34;batchengine-の実行例&#34;&gt;&lt;code&gt;BatchEngine&lt;/code&gt; の実行例&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scala&#34; data-lang=&#34;scala&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;io.github.nicheapplab.tcodeengine._&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BatchEngine&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QwertyLayout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hgjdkdhgjdhgjgjd;gjdkd;gjdja;g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res0&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;で、ので、では、を、のを、とを&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;with QwertyLayout&lt;/code&gt; の代わりに &lt;code&gt;with DvorakLayout&lt;/code&gt; を指定することで, Dvorak キーボードで入力した文字列を日本語に変換することができます. また, &lt;strong&gt;交ぜ書き変換&lt;/strong&gt;や&lt;strong&gt;部首合成&lt;/strong&gt;にも対応しています. 交ぜ書きは prefix を使用せずに, &lt;code&gt;BatchEngine.convert&lt;/code&gt; で変換した結果に対して, &lt;code&gt;BatchEngine.mixed.convert&lt;/code&gt; を適用します. 2 つ目の引数は活用の指定です.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scala&#34; data-lang=&#34;scala&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mixed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;くわえ&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;る&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res0&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;Array&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Array&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;加える&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mixed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;記しゃ&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;Array&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Array&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;記者&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;部首合成では, 基本となる二字の合成のほか, &amp;ldquo;jf&amp;rdquo; による再帰的合成にも対応しています.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scala&#34; data-lang=&#34;scala&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;combi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;composite&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sc&#34;&gt;&amp;#39;上&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;sc&#34;&gt;&amp;#39;七&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res0&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;Char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Some&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sc&#34;&gt;&amp;#39;虍&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jfjfibhtpd&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;劇&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;interactiveengine-の実行例&#34;&gt;&lt;code&gt;InteractiveEngine&lt;/code&gt; の実行例&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scala&#34; data-lang=&#34;scala&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;io.github.nicheapplab.tcodeengine._&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ie&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;InteractiveEngine&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QwertyLayout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fjyijstt&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inflexRight&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;selectCandidate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scala&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res0&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;記者&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この例では, &amp;ldquo;fj&amp;quot;で交ぜ書き変換モードに入り, &amp;ldquo;記しゃ&amp;quot;を&amp;quot;記者&amp;quot;に変換しています.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;例では短縮のために &lt;code&gt;foreach&lt;/code&gt; を利用していますが, 実際に使用するときには各字を,&lt;code&gt;ie.put(&#39;f&#39;)&lt;/code&gt; のように 1 字ずつ入力することが想定されています.&lt;/p&gt;</description>
    </item>
    <item>
      <title>部首合成機能の終端指定</title>
      <link>https://nicheapplab.com/posts/convert-in-kanjicomposition/</link>
      <pubDate>Thu, 07 May 2026 12:42:29 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/convert-in-kanjicomposition/</guid>
      <description>&lt;p&gt;本記事では, T-Code-Engine ならびに T-Code IME for Android において, 部首合成の終端指定が必要になった理由について解説します. T-Code-Engine では終端指定は&lt;code&gt;convert()&lt;/code&gt; の呼び出しにて, T-Code IME for Android では &lt;code&gt;SPC&lt;/code&gt; を押すことで指定することになります.&lt;/p&gt;
&lt;h2 id=&#34;部首合成機能の考え方&#34;&gt;部首合成機能の考え方&lt;/h2&gt;
&lt;p&gt;部首合成の基本作用はまとめると, 以下のものがあります.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;(足し算)部品となる漢字の合成
(例: 木 + 目 = 相)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(引き算)合成された漢字から特定の部品を取り除く
(例: 頭 - 前 = 頁)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(論理積)合成された漢字 2 つから共通部分を取り出す
(例: 頭 ∧ 題 = 頁)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(交換)類似形状の文字に入れ換える
(例: 工(漢字) = エ(カナ) )&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(部分合成)合成された文字から部品を取り出し,他の部品と合成する
(例: decomp(頭) + 工 = 項)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;そしてこれら単体ないし帰納的に組合せて目当ての漢字を入力する機能が部首合成です.
問題となるのは, 4. 交換 が単一引数であることです.&lt;/p&gt;
&lt;h2 id=&#34;後置と前置&#34;&gt;後置と前置&lt;/h2&gt;
&lt;p&gt;部首合成機能は Prefix ▲(&amp;ldquo;jf&amp;rdquo;) を用いて呼び出します. TC のデフォルトは後置ですが,
T-Code-Engine ならびに T-Code IME for Android では前置を採用しています. TC は
Emacs 上で動作し, Emacs では編集中のバッファを elisp の関数を用いて操作することは一般的に行われるため, これは自然な実装といえます.&lt;/p&gt;</description>
    </item>
    <item>
      <title>T-Code IME for Android のインストール</title>
      <link>https://nicheapplab.com/posts/t-code-ime-install/</link>
      <pubDate>Sun, 05 Apr 2026 18:00:49 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/t-code-ime-install/</guid>
      <description>&lt;h2 id=&#34;インストール&#34;&gt;インストール&lt;/h2&gt;
&lt;p&gt;Play ストアからインストールし,起動すると以下の画面になります.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;起動画面&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-install/home.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;ここで, 「T-Code の有効化」を選択すると, 以下の画面に遷移します.
この画面で T-Code IME の右側のスライダーで On にします.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;有効化&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-install/install.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;続いて, アプリから「T-Code を選択」することで, 利用することができます.
試しに, 「IME をテストする」のテキストエリアを選択すると, 以下のキーボードが表示されます.
このキーボード上でキーストロークを入力することで, テキストエリアに文字が入力されます.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;キーボード&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-install/keyboard.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>T-Code IME for Android の交ぜ書き変換</title>
      <link>https://nicheapplab.com/posts/t-code-ime-maze/</link>
      <pubDate>Sun, 05 Apr 2026 18:00:49 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/t-code-ime-maze/</guid>
      <description>&lt;h2 id=&#34;交ぜ書き変換&#34;&gt;交ぜ書き変換&lt;/h2&gt;
&lt;p&gt;T-Code IME では前置式の交ぜ書き変換が利用できます.
キーボードで&amp;quot;fj&amp;quot;と入力することで, 交ぜ書き変換モードに移行します.
ここで,「試す」を入力してみましょう.
まずは「ためす」を入力します(&amp;ldquo;kslc,f&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;交ぜ書き変換モード&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-maze/maze1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;次に変換対象の活用の範囲を指定します.
キーボード左下部の&amp;quot;←&amp;ldquo;ボタンにタッチすると, 交ぜ書きモードでは活用指定モードになります.
ここで表示される「|」より右が活用の範囲になります.
「|」が表示されていない, または「|」を末尾に移動させることで, 活用がないものと指定することができます.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;活用の指定&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-maze/maze2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;SPC をタップすることで変換候補が表示され, 候補をタップで入力を確定します.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;候補の指定&#34; loading=&#34;lazy&#34; src=&#34;https://nicheapplab.com/posts/t-code-ime-maze/maze3.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>T-Code 入力について</title>
      <link>https://nicheapplab.com/posts/t-code/</link>
      <pubDate>Sun, 05 Apr 2026 16:48:54 -0700</pubDate>
      <guid>https://nicheapplab.com/posts/t-code/</guid>
      <description>&lt;p&gt;本ページでは日本入力法である T-Code について簡単に説明します.&lt;/p&gt;
&lt;h1 id=&#34;t-code-の概要&#34;&gt;T-Code の概要&lt;/h1&gt;
&lt;p&gt;日本語入力には様々な方式があります. Windows PC を使用している圧倒的多数のユーザーはローマ字を入力し, ローマ字テーブルに基づいてひらがなに自動的に変換し, そこからユーザーが指定した漢字への変換する, という方式をとっています.&lt;/p&gt;
&lt;p&gt;他方で, 一部の少数ユーザーは SKK 方式を使用しているかもしれません. これはひらがなの入力を基本とし, 漢字変換を要する箇所だけ指定し, 変換を行う方式です.&lt;/p&gt;
&lt;p&gt;T-Code 入力はこれらと根本的に異なり, ひらがなも漢字も直接入力してしまう, というものです. 平たくいえば, ひらがなやカタカナ, 記号, 漢字といった要素をすべてテーブルに格納し, その座標指定を左右の手にそれぞれ対応した 2 つの 4x5 のキーボード領域で行います.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;方式・ IME&lt;/th&gt;
          &lt;th&gt;キー・かな対応&lt;/th&gt;
          &lt;th&gt;漢字変換&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Microsoft IME, ATOK, Google 日本語入力&lt;/td&gt;
          &lt;td&gt;ローマ字入力 かな入力&lt;/td&gt;
          &lt;td&gt;読み変換&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SKK&lt;/td&gt;
          &lt;td&gt;ローマ字入力&lt;/td&gt;
          &lt;td&gt;読み変換, 開始・終了位置を指定&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;T-Code&lt;/td&gt;
          &lt;td&gt;無連想式直接入力&lt;/td&gt;
          &lt;td&gt;無連想式直接入力, 交ぜ書き変換, 部首合成&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;t-code-の優位性&#34;&gt;T-Code の優位性&lt;/h2&gt;
&lt;p&gt;まず,漢字変換という手順を踏む必要がない点に優位性があります. 逆に通常の漢字変換を介した入力では, 一文を入力した後に以下の手順になるでしょう.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;文頭から順に&lt;/li&gt;
&lt;li&gt;無変換区間か変換区間かを指定し&lt;/li&gt;
&lt;li&gt;変換区間では正しい候補を選択する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これら 3 つは思考を強制します. 特に文章作成においては複数文を入力することから,
高頻度で 1.による思考のジャンプが発生するため疲労につながります. これと比較すれば SKK では各文に対して入力順に漢字変換区間を指定し,変換を行いながら入力していく方式であるため, 思考のジャンプは発生しない優位性がありますが, それでも正しい候補を選択するために 3.による思考の脱線が発生します. 無連想式直接入力ではこれらがないため,思考に沿った入力を実現することができます.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
