<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://codedchords.dev/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https:&#x2F;&#x2F;codedchords.dev</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>This is a web feed, also known as an Atom feed. Subscribe by copying the URL from the address bar into your newsreader. Visit About Feeds to learn more and get started. It&#x27;s free.</tabi:about_feeds>
        <tabi:visit_the_site>Visit website</tabi:visit_the_site>
        <tabi:recent_posts>Recent posts</tabi:recent_posts>
        <tabi:last_updated_on>Updated on $DATE</tabi:last_updated_on>
        <tabi:default_theme></tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>Hardware</tabi:current_section>
    </tabi:metadata><title>Coded Chords - Hardware</title>
        <subtitle>A personal blog</subtitle>
    <link href="https://codedchords.dev/tags/hardware/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://codedchords.dev/tags/hardware/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2026-09-12T17:40:51+09:00</updated><id>https://codedchords.dev/tags/hardware/atom.xml</id><entry xml:lang="en">
        <title>捨てられなかったXtrfy M42に戻る</title>
        <published>2026-09-12T17:40:51+09:00</published>
        <updated>2026-09-12T17:40:51+09:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2026/09/xtrfy-m42/" type="text/html"/>
        <id>https://codedchords.dev/blog/2026/09/xtrfy-m42/</id>
        
            <content type="html">&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;09&amp;#x2F;xtrfy-m42&amp;#x2F;cover.avif?h=bb433b4ed3d02d11cb5a&quot;
  alt=&quot;Cover&quot; width=&quot;1280&quot; height=&quot;960&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;ここ半年ほど使用していたマウス&lt;a href=&quot;https:&#x2F;&#x2F;codedchords.dev&#x2F;blog&#x2F;2025&#x2F;12&#x2F;mercury-m2&#x2F;&quot;&gt;GravaStar Gaming Mouse Mercury M2&lt;&#x2F;a&gt;のバッテリー持ちがあまり良くないため、捨てられずに保管していた有線マウスのXtrfy M42に戻しました。&lt;&#x2F;p&gt;
&lt;p&gt;5年ほど前に購入したものです。
Xtrfyは、スウェーデン南部の小さな町で生まれ、プロ選手との共同開発を看板にしていた独立系ブランドでした。
当時は、穴抜きで軽くした有線ボディ、形状の違う背面シェルを差し替えられる設計、ソフトウェアなしで本体だけで設定が完結する思想などで人気があったように思います。&lt;&#x2F;p&gt;
&lt;p&gt;軽量さ、コードのしなやかさ、穴抜きしたボディから漏れるRGB LEDのカッコ良さなど、結構気に入っています。&lt;&#x2F;p&gt;
&lt;p&gt;2022年ごろからXtrfyのラインナップはBluetoothのマウスに移行しましたが、この頃から急速にブランドとしての存在感を失っていきました。
バッテリーの搭載による重量増や、8000Hzのポーリングレートを実現するセンサーへの対応の遅れなどから、競合と比べて強みを出せなかったことが原因です。
その後ドイツのCHERRYに買収され、「小規模な企業がプロ選手と開発する」というブランドイメージもなくなっていきました。&lt;&#x2F;p&gt;
&lt;p&gt;そんななか、奇跡的に後継の&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;link.amazon&#x2F;B00DALnwm&quot;&gt;CHERRY XTRFY M42V2&lt;&#x2F;a&gt;がリリースされました。
残念ながら、素材技術が上がり穴抜きしなくても軽量化できるようになったため、ソリッドなボディになりました。
LEDも廃止されたようです。
ただ、重量は45gとさらに軽くなっています。&lt;&#x2F;p&gt;
&lt;p&gt;当面はM42を使い続けますが、次に買い替えるときはこのマウスにするつもりです。&lt;&#x2F;p&gt;
</content>
        <summary type="html">半年ほど使っていたワイヤレスマウスはバッテリーの持ちが良くなかったので、捨てられずに保管していた有線のXtrfy M42に戻しました。プロ選手との共同開発を看板にしていたXtrfyは、その後どうなったのでしょうか。
</summary>
        </entry><entry xml:lang="en">
        <title>フィルムスキャナーが市場から消える前に</title>
        <published>2026-09-06T05:13:54+09:00</published>
        <updated>2026-09-06T05:13:54+09:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2026/09/film-scanner/" type="text/html"/>
        <id>https://codedchords.dev/blog/2026/09/film-scanner/</id>
        
            <content type="html">&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;09&amp;#x2F;film-scanner&amp;#x2F;cover.avif?h=4e5596880f257c3ec2f6&quot;
  alt=&quot;Cover&quot; width=&quot;1536&quot; height=&quot;864&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;これまでデジタル化できず、フィルムのまま残っている写真が手元にたくさんあります。
このままでは退色やカビで傷んでしまうので、フィルムスキャナーを購入してデジタルに残す作業を始めました。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;いま買えるフィルムスキャナー&quot;&gt;いま買えるフィルムスキャナー&lt;&#x2F;h2&gt;
&lt;p&gt;以前はNikon Coolscanなどの製品がたくさんありましたが、現在は選択肢がほとんどなく、2万円程度の安価なものと7万円以上するハイエンドに二分されています。&lt;&#x2F;p&gt;
&lt;p&gt;安価なものは、スキャナーというよりフィルムを1コマずつ撮影するデジカメです。小さなフィルムを小さなセンサーで縮小結像させるので、手軽に見える状態にはできても画質は期待できません。&lt;&#x2F;p&gt;
&lt;p&gt;ハイエンドはPlustek OpticFilm一択で、購入したのは今年発売されたばかりの&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.amazon.co.jp&#x2F;dp&#x2F;B0GLXW1VXW?tag=yostosweb-22&quot;&gt;Plustek OpticFilm 9000i Ai&lt;&#x2F;a&gt;です。&lt;&#x2F;p&gt;
&lt;div class=&quot;kaerebalink-box&quot; style=&quot;text-align:left;padding-bottom:20px;font-size:small;zoom: 1;overflow: hidden;&quot;&gt;&lt;div class=&quot;kaerebalink-image&quot; style=&quot;float:left;margin:0 15px 10px 0;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;g00utre5.9srinc5b.g00utre5.9srio1a4&#x2F;kaereba_main_202609060519542064?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fmaison-outre%2Fse-0glxw1vxw%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fmaison-outre%2Fi%2F10065344%2F&amp;rafcid=wsc_i_is_c7c582dc-0853-4585-9176-66e2a26d9c5b&quot; target=&quot;_blank&quot; &gt;&lt;img src=&quot;https:&#x2F;&#x2F;thumbnail.image.rakuten.co.jp&#x2F;@0_mall&#x2F;maison-outre&#x2F;cabinet&#x2F;root_sniper_folder&#x2F;sniper_folder_00026&#x2F;imgrc0096231243.jpg?_ex=128x128&quot; style=&quot;border: none;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-info&quot; style=&quot;line-height:120%;zoom: 1;overflow: hidden;&quot;&gt;&lt;div class=&quot;kaerebalink-name&quot; style=&quot;margin-bottom:10px;line-height:120%&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;g00utre5.9srinc5b.g00utre5.9srio1a4&#x2F;kaereba_main_202609060519542064?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fmaison-outre%2Fse-0glxw1vxw%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fmaison-outre%2Fi%2F10065344%2F&amp;rafcid=wsc_i_is_c7c582dc-0853-4585-9176-66e2a26d9c5b&quot; target=&quot;_blank&quot; &gt;Plustek OpticFilm 9000i Ai フィルムスキャナー - 第3世代レンズシステム＆新開発 五軸精密アライメント搭載|高精細・高安定スキャン|2026年フラッグシップモデル&lt;&#x2F;a&gt;&lt;div class=&quot;kaerebalink-powered-date&quot; style=&quot;font-size:8pt;margin-top:5px;font-family:verdana;line-height:120%&quot;&gt;posted with &lt;a href=&quot;https:&#x2F;&#x2F;kaereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;カエレバ&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-detail&quot; style=&quot;margin-bottom:5px;&quot;&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-link1&quot; style=&quot;margin-top:10px;&quot;&gt;&lt;div class=&quot;shoplinkrakuten&quot; style=&quot;display:inline;margin-right:5px&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;1300574f.7d238558.13005750.4bcd8088&#x2F;kaereba_main_202609060519542064?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FPlustek%2520OpticFilm%25209000i%2F-%2Ff.1-p.1-s.1-sf.0-st.A-v.2%3Fx%3D0%26scid%3Daf_ich_link_urltxt&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2F&quot; target=&quot;_blank&quot; &gt;楽天市場&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;shoplinkamazon&quot; style=&quot;display:inline;margin-right:5px&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.co.jp&#x2F;gp&#x2F;search?keywords=Plustek%20OpticFilm%209000i&amp;__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;tag=yostosweb-22&quot; target=&quot;_blank&quot; &gt;Amazon&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;booklink-footer&quot; style=&quot;clear: left&quot;&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;
&lt;p&gt;2026年のフラッグシップで、主な仕様は次のとおりです。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;第3世代レンズシステム（新設計の5枚非球面レンズ）と5軸精密アライメントによる、7200dpiの光学解像度&lt;&#x2F;li&gt;
&lt;li&gt;赤外線チャンネルを使ったハードウェアでのゴミ・キズ除去（iSRD）&lt;&#x2F;li&gt;
&lt;li&gt;SilverFast Ai Studio 9 とIT8カラーキャリブレーションターゲットを同梱&lt;&#x2F;li&gt;
&lt;li&gt;公称ダイナミックレンジ 3.91 Dmax&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;SilverFastでの取り込み設定&quot;&gt;SilverFastでの取り込み設定&lt;&#x2F;h2&gt;
&lt;p&gt;取り込んだのは、1995年にロタ島へ旅行した際の写真です。
フィルムはカラーリバーサルフィルム（ポジフィルム）のKodachromeで、マウント済みのスライドになっています。&lt;&#x2F;p&gt;
&lt;p&gt;付属のSilverFast Ai Studio 9を使用して、以下の設定で取り込みました。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;3600dpi（7200dpiまで出せるが、均一にシャープネスを得るため落とした）&lt;&#x2F;li&gt;
&lt;li&gt;Kodachrome専用モード&lt;&#x2F;li&gt;
&lt;li&gt;Multi-Exposure（ME）とiSRDをオン&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Kodachrome専用モードは、単に色の仕上がりを変えるプリセットではありません。
KodachromeはE6のポジフィルムとは構造もK-14という現像プロセスも異なり、映写機の黄色い光を打ち消すために意図的に青みを持たせて作られています。
そのためスキャナーの光源で読むとそのまま青被りになり、これを打ち消す専用のカラープロファイルが必要になります。
さらに乳剤が厚く赤外線が十分に透過しないので、iSRDもKodachrome向けに最適化されたエンジンに切り替わります。
専用モードをオンにすると、この2つがまとめて有効になる仕組みです。&lt;&#x2F;p&gt;
&lt;p&gt;MEを併用したのは、Kodachromeの濃度域が広いためです。
露光量を変えて2回走査した結果を合成することで、1回のスキャンでは沈んでしまう暗部の階調を拾い上げます。&lt;&#x2F;p&gt;
&lt;p&gt;取り込んだTIFFはPixelmator Proでカラー調整を掛けています。
SilverFastの出力はAdobe RGBなので、Flickrやブラウザが前提とするsRGBへ変換してからJPEGにする必要があります。この変換には次のコマンドを使用しています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;vips&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; icc_transform in.tif out.jpg[Q=92,subsample-mode=off]&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;  &amp;quot;&#x2F;System&#x2F;Library&#x2F;ColorSync&#x2F;Profiles&#x2F;sRGB Profile.icc&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --embedded&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;  --input-profile &amp;quot;&#x2F;System&#x2F;Library&#x2F;ColorSync&#x2F;Profiles&#x2F;AdobeRGB1998.icc&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --intent relative&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;  --black-point-compensation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;--black-point-compensation&lt;&#x2F;code&gt;を付けているのは、Adobe RGBの広い暗部をsRGBに押し込むときに黒が潰れるのを避けるためです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;3600dpiのスキャンはどこまで写っているか&quot;&gt;3600dpiのスキャンはどこまで写っているか&lt;&#x2F;h2&gt;
&lt;p&gt;まず解像感です。以下は機関車が写ったコマから、リサイズせずに等倍で切り出したものです。&lt;&#x2F;p&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;09&amp;#x2F;film-scanner&amp;#x2F;crop-detail.avif?h=c16d6e040615f8982181&quot;
  alt=&quot;機関車の写ったコマを等倍で切り出した画像&quot; width=&quot;1400&quot; height=&quot;900&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;ボイラーのリベット、キャブの鋼板の継ぎ目、背後のレンガ廃墟の目地、珊瑚岩を積んだ壁の凹凸、線路脇のバラストの粒まで分離しています。
一方で輪郭にはわずかな甘さが残りますが、これはスキャナー側ではなく1995年当時の撮影側の限界でしょう。
粒状はほとんど目立たず、Kodachromeの微粒子がそのまま解像されています。
7200dpiまで上げてもフィルムの粒子が大きく写るだけになりそうで、3600dpiで止めた判断は結果的に妥当でした。&lt;&#x2F;p&gt;
&lt;p&gt;次に階調です。以下は逆光で撮ったコマの等倍切り出しです。&lt;&#x2F;p&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;09&amp;#x2F;film-scanner&amp;#x2F;crop-tone.avif?h=aad6484bb012129f67aa&quot;
  alt=&quot;逆光のコマを等倍で切り出した画像&quot; width=&quot;1400&quot; height=&quot;900&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;白いTシャツは飛ぶ寸前まで明るいのに、生地の織りとドット柄が残っています。
反対に影になった髪は黒く潰れず、1本ずつ分離しています。
アルバムに載せた22コマのヒストグラムを確認したところ、ハイライトの上限は230から247前後で、255に張り付いたコマはありませんでした。
MEの効果か公称3.91 Dmaxの余裕かは切り分けられませんが、少なくとも上下とも詰まらずに残っています。&lt;&#x2F;p&gt;
&lt;p&gt;ゴミとキズについては、等倍で追っても目に付くものは残っていませんでした。
ただしSilverFast自身が、Kodachromeでは赤外線が乳剤を十分に透過せず暗部でゴミと画像の区別が付きにくいため、手作業での補正が必要になる場合があると明記しています。
枚数をまとめて流すときは、iSRDに任せきりにせず等倍で確認したほうがよさそうです。&lt;&#x2F;p&gt;
&lt;p&gt;取り込んだ写真はFlickrに掲載したので、以下よりご覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a data-flickr-embed=&quot;true&quot; data-header=&quot;true&quot; data-footer=&quot;true&quot; href=&quot;https:&#x2F;&#x2F;www.flickr.com&#x2F;photos&#x2F;yostos&#x2F;albums&#x2F;72177720335460821&quot; title=&quot;Rota Island, 1995&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;live.staticflickr.com&#x2F;65535&#x2F;55508841501_9bb206f09d_z.jpg&quot; width=&quot;600&quot; height=&quot;800&quot; alt=&quot;Rota Island, 1995&quot;&#x2F;&gt;&lt;&#x2F;a&gt;&lt;script async src=&quot;&#x2F;&#x2F;embedr.flickr.com&#x2F;assets&#x2F;client-code.js&quot; charset=&quot;utf-8&quot;&gt;&lt;&#x2F;script&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;&#x2F;h2&gt;
&lt;p&gt;Kodachromeを3600dpiで取り込んだ結果は、等倍まで拡大してもフィルムの側が先に限界を迎えるところまで写っていました。
これ以上解像度を上げても粒子が大きくなるだけなので、35mmのスライドを残す用途では3600dpiで打ち止めにしてよさそうです。
階調も上下とも詰まらず、ゴミ・キズも気になるものは残っていません。
当初は専門の業者に出すことも考えましたが、マウントしたポジフィルムは料金も高額になるので、この画質が手元で出せるなら十分です。&lt;&#x2F;p&gt;
&lt;p&gt;フィルムカメラが消えつつあるなか、フィルムスキャナー自体が市場から消えるのも時間の問題です。
フィルムのほうも待ってはくれないので、手元に残っているのであれば早めにデジタル化しましょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;References&quot;&gt;References&lt;&#x2F;h2&gt;
&lt;!-- textlint-disable --&gt;
&lt;div class=&quot;references&quot;&gt;
    &lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;plustek.com&#x2F;us&#x2F;products&#x2F;film-photo-scanners&#x2F;opticfilm-9000i-ai&#x2F;&quot;&gt;Plustek&lt;&#x2F;a&gt;. &quot;OpticFilm 9000i Ai Professional 35mm Film Scanner&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.silverfast.com&#x2F;about-silverfast-why-scanning-basics-of-scanning&#x2F;scanning-kodachromes&#x2F;&quot;&gt;SilverFast&lt;&#x2F;a&gt;. &quot;Scan your Kodachromes and get Amazing Digital Images&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.silverfast.com&#x2F;about-silverfast-why-scanning-basics-of-scanning&#x2F;why-silverfast&#x2F;silverfast-feature-highlights&#x2F;isrd-dust-scratches-removal-eliminate-defects-with-infrared-channel&#x2F;&quot;&gt;SilverFast&lt;&#x2F;a&gt;. &quot;iSRD is SilverFast&#x27;s dust and scratch removal using infrared technology&quot;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;&#x2F;div&gt;
&lt;!-- textlint-enable --&gt;
</content>
        <summary type="html">フィルムカメラが消えつつあるいま、フィルムスキャナー自体も市場から姿を消そうとしています。1990年代のポジフィルムが手元に残ったままだったので、まだ買えるうちに購入してデジタル化を始めました。
</summary>
        </entry><entry xml:lang="en">
        <title>HHKBはなぜアーキテクチャを変えたのか ― 「高品位」設計の考察</title>
        <published>2026-02-05T00:00:00+00:00</published>
        <updated>2026-02-05T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2026/02/hhkb-why-changed-architecture/" type="text/html"/>
        <id>https://codedchords.dev/blog/2026/02/hhkb-why-changed-architecture/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;div class=&quot;admonition note&quot;&gt;
    &lt;div class=&quot;admonition-icon admonition-icon-note&quot;&gt;&lt;&#x2F;div&gt;
    &lt;div class=&quot;admonition-content&quot;&gt;
        &lt;strong class=&quot;admonition-title&quot;&gt;NOTE&lt;&#x2F;strong&gt;
        &lt;p&gt;この記事は
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;zenn.dev&#x2F;yostos&#x2F;articles&#x2F;hhkb-why-changed-architecture&quot;&gt;Zenn&lt;&#x2F;a&gt;
からの転載です。&lt;&#x2F;p&gt;

    &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;!-- textlint-enable --&gt;
&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;h2 id=&quot;TL;DR&quot;&gt;TL;DR&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;初代HHKB（1996年）はシリンドリカルカーブド、
Professional（2003年）はシリンドリカルステップという
異なるキートップ構造を持つ。
形状設計としてはカーブドが上位であり、
一見するとProfessionalは劣化に見える&lt;&#x2F;li&gt;
&lt;li&gt;しかし開発者・八幡氏の証言によれば、
静電容量スイッチの技術的制約（距離精度が重要）により
カーブド構造は採用できなかった&lt;&#x2F;li&gt;
&lt;li&gt;HHKBはキートップ形状ではなくスイッチ品質に
全振りするため、ステップ構造を選択した。
これは妥協ではなくリソース配分の最適化である&lt;&#x2F;li&gt;
&lt;li&gt;「高品位」の意味は文脈依存である。
形状の贅沢さを指す場合と、
スイッチによる打鍵品質を指す場合がある&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;1._2つのキートップアーキテクチャ&quot;&gt;1. 2つのキートップアーキテクチャ&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;シリンドリカルカーブド（Cylindrical Curved）&lt;&#x2F;strong&gt;
は初代HHKB（1996年発売）に採用された構造です。
各列のキートップが連続的な曲面を描き、
キーボードを横から見るとなめらかな弧を描きます。
列ごとに異なる角度のキーキャップ金型が必要で、
金型数が多く製造時の調整もシビアなため、
製造コスト・設計難易度は高くなります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;シリンドリカルステップ（Cylindrical Step）&lt;&#x2F;strong&gt;
はHHKB Professional（2003年発売）以降に
採用された構造で、
現在のほとんどのメカニカルキーボードはこの方式です。
各列は段差（ステップ）状に配置され、
角度は離散的で列間に明確な段があります。
金型の共用がしやすく量産性に優れ、
コスト効率の良さが特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;純粋にキートップ形状の設計贅沢度だけで評価すると、
シリンドリカルカーブド ＞ シリンドリカルステップです。
これは工学的事実です。
カーブド構造は、指の動きに対して
より自然な曲面を提供するために、
より多くの製造コストと設計労力を投入しています。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2._初代HHKBからProfessionalへの移行&quot;&gt;2. 初代HHKBからProfessionalへの移行&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;&#x2F;th&gt;&lt;th&gt;初代HHKB（1996年）&lt;&#x2F;th&gt;&lt;th&gt;HHKB Professional（2003年）&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;キートップ構造&lt;&#x2F;td&gt;&lt;td&gt;シリンドリカルカーブド&lt;&#x2F;td&gt;&lt;td&gt;シリンドリカルステップ&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;スイッチ方式&lt;&#x2F;td&gt;&lt;td&gt;メンブレン&lt;&#x2F;td&gt;&lt;td&gt;静電容量無接点&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;押下圧&lt;&#x2F;td&gt;&lt;td&gt;約50g&lt;&#x2F;td&gt;&lt;td&gt;約45g&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;製造コスト配分&lt;&#x2F;td&gt;&lt;td&gt;形状設計に重点&lt;&#x2F;td&gt;&lt;td&gt;スイッチ機構に重点&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;PFUはProfessionalへの移行で
「指の疲労に最も効くのは、
キートップの曲面ではなく、
スイッチ特性と荷重カーブである」
という結論に達したと想像します。
この判断に基づき、
カーブド構造からステップ構造に簡略化し、
浮いたコストと設計余力を
静電容量無接点スイッチに全振りしました。
これは「妥協」ではなく、
リソース配分の最適化であると考えます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;life&#x2F;hhkb_life113.html&quot;&gt;HHKB裏HISTORY 第一章 後編&lt;&#x2F;a&gt;
において、開発者の八幡氏は
移行の理由を明確に語っています。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;「これ、静電容量のキーだと出来ないので、
そこからはステップになったんです」&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;この証言は、
カーブドからステップへの移行が
単なるコスト削減ではなく、
静電容量スイッチの技術的制約に起因することを
示しています。&lt;&#x2F;p&gt;
&lt;p&gt;静電容量スイッチの信号強度は
距離の逆数（スプリングとPCB間の距離）に
比例します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;静電容量センシングの原理：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;┌─────────────┐&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;│   キーキャップ   │&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;└──────┬──────┘&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       │&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ╱╲  │  ╱╲   ← ラバードーム&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ╱  ╲ │ ╱  ╲&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;       │&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ╱│╲│╱│╲   ← コニカルスプリング&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   ╱ │ │ │ ╲&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;────┴─┴─┴────&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    PCBパッド   ← 距離が重要（信号 ∝ 1&#x2F;距離）&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;距離の変動&lt;&#x2F;th&gt;&lt;th&gt;信号への影響&lt;&#x2F;th&gt;&lt;th&gt;実用上の問題&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;±0.1mm&lt;&#x2F;td&gt;&lt;td&gt;有意&lt;&#x2F;td&gt;&lt;td&gt;打鍵点のばらつき&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;±0.2mm&lt;&#x2F;td&gt;&lt;td&gt;大きい&lt;&#x2F;td&gt;&lt;td&gt;キーフィールの不均一&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;±0.5mm&lt;&#x2F;td&gt;&lt;td&gt;致命的&lt;&#x2F;td&gt;&lt;td&gt;入力が認識されない可能性&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;カーブド筐体では各キー位置で距離が異なるため、
均一なキーフィールの実現が困難です。
ステップ構造では各列で距離を一定に保てるため、
全キーで安定したセンシングが可能になります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;3._画像解析による形状差の検証&quot;&gt;3. 画像解析による形状差の検証&lt;&#x2F;h2&gt;
&lt;p&gt;初代HHKBとProfessional Classic Type-Sの
側面写真を用いて、
Python + OpenCVによるエッジ検出・相関分析と、
Fiji (ImageJ) による角度分析の2手法で
形状差を定量的に検証しました。&lt;&#x2F;p&gt;
&lt;!-- textlint-disable --&gt;
&lt;details&gt;
&lt;summary&gt;解析スクリプト：プロファイル比較（Python）&lt;&#x2F;summary&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; cv2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; numpy&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; as&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;import&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; matplotlib&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;pyplot&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword&quot;&gt; as&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; plt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; extract_top_profile&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter&quot;&gt;gray_img&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;キーボード上端のプロファイルを抽出&amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    edges&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; cv2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;Canny&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;gray_img&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 50&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 150&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    profile_points&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt; range&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;gray_img&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt;shape&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        column&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; edges&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[:,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-item-access z-python&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        edge_positions&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;where&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;column&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt; len&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;edge_positions&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;            profile_points&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;append&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;((&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; edge_positions&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;array&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;profile_points&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; calculate_profile_difference&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter&quot;&gt;profile1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter&quot;&gt; profile2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;2つのプロファイル間の統計的差異を算出&amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    common_x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;linspace&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 500&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    y1_interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;        common_x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; profile1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[:,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;],&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; profile1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[:,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;    )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    y2_interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;        common_x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; profile2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[:,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;],&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; profile2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[:,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;    )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;        &amp;#39;mean_difference&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;mean&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;            np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;abs&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;y1_interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; y2_interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;        ),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;        &amp;#39;correlation&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;corrcoef&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;            y1_interp&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; y2_interp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;        )[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;details&gt;
&lt;details&gt;
&lt;summary&gt;解析スクリプト：角度分析（Python）&lt;&#x2F;summary&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-python&quot;&gt;def&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; analyze_profile_angles&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-parameter&quot;&gt;    gray_img&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter&quot;&gt; window_size&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;50&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;    &amp;quot;&amp;quot;&amp;quot;プロファイルに沿った局所的な傾斜角度を計算&amp;quot;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    edges&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; cv2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;Canny&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;gray_img&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 50&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 150&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    width&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; gray_img&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt;shape&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;    # 上端プロファイルを検出&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    profile_y&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt; range&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;width&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        col&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; edges&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[:,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-item-access z-python&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        edge_pos&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;where&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;col&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        profile_y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;append&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt;            edge_pos&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt;0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt; len&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;edge_pos&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;            else&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;nan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;        )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    profile_y&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;array&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;profile_y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;    # スライディングウィンドウで局所角度を計算&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    angles&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;    step&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; window_size&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; i&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt; in&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin z-python&quot;&gt; range&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;step&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; width&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; step&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; step&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        y1&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; profile_y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-item-access z-python&quot;&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-item-access z-python&quot;&gt; step&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        y2&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-indexed-name z-python&quot;&gt; profile_y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-item-access z-python&quot;&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; +&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-item-access z-python&quot;&gt; step&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;        angles&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;append&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;            np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;degrees&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;                np&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-python&quot;&gt;arctan2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt;y2&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; y1&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-python&quot;&gt; window_size&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;            )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;        )&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword z-control z-flow z-python&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; angles&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;details&gt;
&lt;details&gt;
&lt;summary&gt;解析スクリプト：Fiji&#x2F;ImageJマクロ&lt;&#x2F;summary&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;&#x2F;&#x2F; プロファイル抽出と角度分析&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;open&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;HHKB-First.png&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;8-bit&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;Gaussian Blur...&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt; &amp;quot;sigma=2&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-string&quot;&gt;&amp;quot;Find Edges&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;width&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; getWidth&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;height&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; getHeight&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;()&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;profile&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; newArray&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt;(width)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;&#x2F;&#x2F; 各列の上端エッジを検出&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt; (x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; width&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt; (y&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; y&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; height&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; y&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;getPixel&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt;(x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-source&quot;&gt; y)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 50&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-source&quot;&gt;      profile[x]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;      break&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-comment&quot;&gt;&#x2F;&#x2F; 局所角度とSmoothness Indexを計算&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;smoothSum&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;prevAngle&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt; (x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; width&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;++&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;  dy&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-source&quot;&gt; profile[x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; +&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 15&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-source&quot;&gt; profile[x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 15&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;  angle&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt; (&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;atan2&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt;(dy&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;,&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; *&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 180&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-constant z-js&quot;&gt; PI&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-keyword&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt; (x&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;    smoothSum&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt; abs&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt;(angle&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-source&quot;&gt; prevAngle)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;  prevAngle&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; angle&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt;smoothnessIndex&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; =&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite&quot;&gt; smoothSum&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-variable z-other z-readwrite&quot;&gt; (width&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; -&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric&quot;&gt; 61&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;details&gt;
&lt;!-- textlint-enable --&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;02&amp;#x2F;hhkb-why-changed-architecture&amp;#x2F;profile_comparison.webp?h=2ac99177e0a0e81ea976&quot;
  alt=&quot;プロファイル比較解析&quot; width=&quot;2084&quot; height=&quot;1348&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;&lt;em&gt;上段: 両モデルの側面写真とエッジ検出によるプロファイルライン。下段左: プロファイルのオーバーレイ比較（赤=初代カーブド、青=Professionalステップ）。下段右: 高さの差分と相関係数。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;初代HHKBのプロファイル（赤線）は
滑らかな曲線を描くのに対し、
Professional（青線）は階段状の段差が明確です。
相関係数0.9215は
「似ているが有意に異なる」ことを示しています。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;解析手法&lt;&#x2F;th&gt;&lt;th&gt;初代（Curved）&lt;&#x2F;th&gt;&lt;th&gt;Professional（Step）&lt;&#x2F;th&gt;&lt;th&gt;差分&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;プロファイル相関係数&lt;&#x2F;td&gt;&lt;td&gt;-&lt;&#x2F;td&gt;&lt;td&gt;0.9215&lt;&#x2F;td&gt;&lt;td&gt;有意差あり&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Smoothness Index（Python）&lt;&#x2F;td&gt;&lt;td&gt;29.9&lt;&#x2F;td&gt;&lt;td&gt;35.2&lt;&#x2F;td&gt;&lt;td&gt;17.7%&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Smoothness Index（Fiji）&lt;&#x2F;td&gt;&lt;td&gt;2.64&lt;&#x2F;td&gt;&lt;td&gt;3.34&lt;&#x2F;td&gt;&lt;td&gt;26.3%&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Smoothness Index
（隣接位置間の角度変化の標準偏差）は
値が小さいほど滑らかな曲面を示します。
初代の値が低く滑らかな遷移、
Professionalは値が高く急な角度変化という結果は、
八幡氏の証言を数値的に裏付けています。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;4._「高品位」とは何か_―_3つの評価軸&quot;&gt;4. 「高品位」とは何か ― 3つの評価軸&lt;&#x2F;h2&gt;
&lt;p&gt;「高品位キーボード」を語る際、
以下の3つの評価軸を区別しないと
議論が噛み合いません。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;キー配列・キートップ形状の工学的完成度&lt;&#x2F;strong&gt; ---
曲面の連続性、人間工学的配慮、金型設計の精緻さ。
この軸ではカーブドが上位である&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;製造コスト・金型コスト&lt;&#x2F;strong&gt; ---
量産性、コスト効率。
この軸ではステップが合理的である&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;キーボード全体としての使用感（スイッチ含む）&lt;&#x2F;strong&gt; ---
長時間使用時の疲労度、
打鍵フィードバックの質。
この軸ではスイッチ方式が支配的要因である&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;PFU公式が言う「高品位キー」は
評価軸3を指していると考えられます。
キートップ形状単体の話ではなく、
静電容量無接点スイッチによる
総合的な打鍵品質を意味します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;5._キーボード史における思想的位置づけ&quot;&gt;5. キーボード史における思想的位置づけ&lt;&#x2F;h2&gt;
&lt;p&gt;HHKBの設計思想を理解するには、
IBM Model MとTopre Realforceとの比較が有効です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;IBM Model M（1985年）&lt;&#x2F;strong&gt;
はBuckling Spring（座屈バネ）スイッチを採用し、
「入力の確実性」を設計思想としています。
「人は間違える」という人間観から、
誤入力を物理的フィードバックで防ぐ
アプローチを取っています。
壊れない、狂わない、一生使える
「事務機械」として設計されました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Topre Realforce（2000年代初頭）&lt;&#x2F;strong&gt;
は静電容量無接点方式を採用し、
「疲労の最小化」を設計思想としています。
「人は壊れる」という人間観から
腱を守ることを重視し、
「打鍵品質はスイッチで作る」という
思想を体現しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;HHKB Professional（2003年）&lt;&#x2F;strong&gt;
は静電容量無接点方式（Realforce系）を採用し、
「思考の流れを妨げない」を
設計思想としています。
「人は考える」という人間観から
入力デバイスの存在を消すことを目指し、
UNIX哲学に基づく配列とコンパクトさを
追求しました。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;キーボード&lt;&#x2F;th&gt;&lt;th&gt;主眼&lt;&#x2F;th&gt;&lt;th&gt;人間観&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;IBM Model M&lt;&#x2F;td&gt;&lt;td&gt;入力の確実性&lt;&#x2F;td&gt;&lt;td&gt;人は間違える&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Topre Realforce&lt;&#x2F;td&gt;&lt;td&gt;疲労軽減&lt;&#x2F;td&gt;&lt;td&gt;人は壊れる&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;HHKB Professional&lt;&#x2F;td&gt;&lt;td&gt;思考の流れ&lt;&#x2F;td&gt;&lt;td&gt;人は考える&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;重要な点として、
HHKBはModel MとRealforceの
「中間」や「折衷」ではありません。
配列思想はUNIX哲学（独自路線）、
スイッチはRealforce系を採用、
筐体・形状はModel M的な剛性・重量を
意図的に捨てた合理主義です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;6._結論&quot;&gt;6. 結論&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;形状設計としてはカーブドの方が上だが、
HHKBはスイッチに全振りするため
ステップ構造を選んだ&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;キートップ形状・製造贅沢度の観点では
シリンドリカルカーブド ＞ シリンドリカルステップ
ですが、HHKBとしての総合的な「高品位」の観点では
Professional（ステップ＋静電容量）＞
初代HHKB（カーブド＋メンブレン）です。
「高品位」の定義は文脈依存で、
形状設計の贅沢さを指す場合もあれば、
長時間使用時の総合的な打鍵品質を
指す場合もあります。&lt;&#x2F;p&gt;
&lt;p&gt;HHKBの変遷は、
「すべてを最高にする」のではなく
「何に全振りするか」を選択した好例です。
初代は形状設計に注力し
（当時の技術的制約もあった）、
Professionalはスイッチ品質に注力しました
（形状は合理化）。
この判断の背景には、
「指の疲労はキートップ曲面より
スイッチ特性で決まる」という知見と、
静電容量スイッチの技術的制約という
2つの要因があります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;参考：現在入手可能な関連キーボード&quot;&gt;参考：現在入手可能な関連キーボード&lt;&#x2F;h2&gt;
&lt;p&gt;初代HHKBのようなシリンドリカルカーブド構造を
持つ完成品キーボードは、
現行品ではほぼ存在しません。
カーブド的な体験に近づける選択肢としては、
SAプロファイルキーキャップ
（背が高く深くスカルプチャされている）、
MT3プロファイルキーキャップ
（1970〜80年代のIBMターミナルに
インスパイアされた設計）、
Drop CTRL &#x2F; ALT
（MT3キーキャップとの組み合わせで販売）
などがあります。
ただし、これらはキーキャッププロファイルによる
近似であり、
初代HHKBの「プレート自体がカーブしている」
構造とは異なります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;付録：事実検証と情報ソース&quot;&gt;付録：事実検証と情報ソース&lt;&#x2F;h2&gt;
&lt;p&gt;本文書の事実関係は
2026年1月21日にWeb検索により検証済みです。&lt;&#x2F;p&gt;
&lt;!-- textlint-disable --&gt;
&lt;details&gt;
&lt;summary&gt;検証済み項目一覧&lt;&#x2F;summary&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;項目&lt;&#x2F;th&gt;&lt;th&gt;記述内容&lt;&#x2F;th&gt;&lt;th&gt;検証結果&lt;&#x2F;th&gt;&lt;th&gt;情報ソース&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;初代HHKB発売年&lt;&#x2F;td&gt;&lt;td&gt;1996年&lt;&#x2F;td&gt;&lt;td&gt;正確（1996年12月20日）&lt;&#x2F;td&gt;&lt;td&gt;PFU公式、Wikipedia&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;初代HHKBスイッチ&lt;&#x2F;td&gt;&lt;td&gt;メンブレン&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;products&#x2F;discontinued&#x2F;hhkb_kb02&#x2F;&quot;&gt;PFU 初代HHKB仕様&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;初代HHKB押下圧&lt;&#x2F;td&gt;&lt;td&gt;約50g&lt;&#x2F;td&gt;&lt;td&gt;正確（50g）&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;products&#x2F;discontinued&#x2F;hhkb_kb02&#x2F;&quot;&gt;PFU 初代HHKB仕様&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;初代HHKBキートップ&lt;&#x2F;td&gt;&lt;td&gt;シリンドリカルカーブド&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;products&#x2F;discontinued&#x2F;keyspec.html&quot;&gt;PFU 高品位キー仕様&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;HHKB Professional発売年&lt;&#x2F;td&gt;&lt;td&gt;2003年&lt;&#x2F;td&gt;&lt;td&gt;正確（2003年5月）&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;history&#x2F;page4.html&quot;&gt;PFU HHKB History&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Professionalスイッチ&lt;&#x2F;td&gt;&lt;td&gt;静電容量無接点&lt;&#x2F;td&gt;&lt;td&gt;正確（Topre方式）&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;history&#x2F;page4.html&quot;&gt;PFU HHKB History&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Professional押下圧&lt;&#x2F;td&gt;&lt;td&gt;約45g&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;history&#x2F;page4.html&quot;&gt;PFU HHKB History&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Professionalキートップ&lt;&#x2F;td&gt;&lt;td&gt;シリンドリカルステップ&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;products&#x2F;discontinued&#x2F;keyspec.html&quot;&gt;PFU 高品位キー仕様&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;IBM Model M発売年&lt;&#x2F;td&gt;&lt;td&gt;1985年&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Model_M_keyboard&quot;&gt;Wikipedia Model M&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Model Mスイッチ&lt;&#x2F;td&gt;&lt;td&gt;Buckling Spring&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Model_M_keyboard&quot;&gt;Wikipedia Model M&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Topre Realforce&lt;&#x2F;td&gt;&lt;td&gt;2000年代初頭&lt;&#x2F;td&gt;&lt;td&gt;正確（2001年）&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.topre.co.jp&#x2F;products&#x2F;elec&#x2F;keyboards.html&quot;&gt;東プレ公式&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;MT3プロファイル&lt;&#x2F;td&gt;&lt;td&gt;1970〜80年代IBMターミナルにインスパイア&lt;&#x2F;td&gt;&lt;td&gt;正確&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;matt3o.com&#x2F;mt3-keycap-profile-a-brief-history&#x2F;&quot;&gt;matt3o MT3 History&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;&#x2F;details&gt;
&lt;details&gt;
&lt;summary&gt;著者の分析・解釈として記載されている部分&lt;&#x2F;summary&gt;
&lt;p&gt;以下は本文中で「想像する」「考える」と明示されており、
公式見解ではなく著者の分析です。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;PFUが「指の疲労はキートップ曲面より
スイッチ特性で決まる」と判断したという推測&lt;&#x2F;li&gt;
&lt;li&gt;カーブドからステップへの移行が
「リソース配分の最適化」であるという解釈&lt;&#x2F;li&gt;
&lt;li&gt;3つの評価軸の定義と、
PFU公式の「高品位」が評価軸3を指すという解釈&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;details&gt;
&lt;details&gt;
&lt;summary&gt;主要参考文献&lt;&#x2F;summary&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;&quot;&gt;PFU HHKB公式サイト&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;products&#x2F;discontinued&#x2F;hhkb_kb02&#x2F;&quot;&gt;PFU 初代HHKB仕様&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;products&#x2F;discontinued&#x2F;keyspec.html&quot;&gt;PFU 高品位キー仕様&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;history&#x2F;page4.html&quot;&gt;PFU HHKB History&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Model_M_keyboard&quot;&gt;Model M - Wikipedia&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.topre.co.jp&#x2F;products&#x2F;elec&#x2F;keyboards.html&quot;&gt;東プレ キーボード&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;details&gt;
&lt;details&gt;
&lt;summary&gt;HHKB裏HISTORY（開発者座談会）&lt;&#x2F;summary&gt;
&lt;p&gt;本文書の解釈を補強する一次情報として重要です。
記事113で八幡氏は技術的制約による移行を明言し、
記事129ではType-S開発で
スイッチ特性改善への継続投資が語られ、
記事112では「viやemacsを使うには
文字だけ打てればよかった」という
UNIX文化に根ざした設計思想の原点が
語られています。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;life&#x2F;hhkb_life112.html&quot;&gt;第一章 前編&lt;&#x2F;a&gt; - 開発背景、UNIX文化との関係&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;life&#x2F;hhkb_life113.html&quot;&gt;第一章 後編&lt;&#x2F;a&gt; - Professionalへの移行経緯、東プレとの協業&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;life&#x2F;hhkb_life127.html&quot;&gt;第二章 前編&lt;&#x2F;a&gt; - 事業部移管、ブランド確立&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;happyhackingkb.com&#x2F;jp&#x2F;life&#x2F;hhkb_life129.html&quot;&gt;第二章 後編&lt;&#x2F;a&gt; - Type-Sにおけるスイッチ特性への継続投資&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;details&gt;
&lt;!-- textlint-enable --&gt;
</content>
        <summary type="html">初代HHKBのシリンドリカルカーブドからProfessionalの
シリンドリカルステップへの移行は、
静電容量スイッチの技術的制約に起因する
リソース配分の最適化でした。
開発者の証言と画像解析から、その設計判断を考察します。
</summary>
        </entry><entry xml:lang="en">
        <title>キートップ2つで44,000円！HHKB×輪島塗という贅沢</title>
        <published>2026-02-03T00:00:00+00:00</published>
        <updated>2026-02-03T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2026/02/hhkb-pro-classic-type-s-urushi/" type="text/html"/>
        <id>https://codedchords.dev/blog/2026/02/hhkb-pro-classic-type-s-urushi/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;02&amp;#x2F;hhkb-pro-classic-type-s-urushi&amp;#x2F;0.webp?h=a5d4937ff7ddd8664271&quot;
  alt=&quot;HHKB Professional Classic Type-S&quot; width=&quot;1800&quot; height=&quot;893&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;h2 id=&quot;なぜClassic_Type-Sなのか&quot;&gt;なぜClassic Type-Sなのか&lt;&#x2F;h2&gt;
&lt;p&gt;これまでKeychron Q60を愛用していました。
コンパクトな60%レイアウトとカスタマイズ性が気に入っていたのですが、
やはりタイプタッチが異なります。
HHKBの静電容量無接点方式のあの感触は、他では得られません。&lt;&#x2F;p&gt;
&lt;p&gt;HHKB Professional Hybridも持っていて気に入っているのですが、
Bluetooth接続だと電源のオンオフが煩わしいのです。
使おうと思ったときに電源を入れて、接続を待つ。
この一手間が地味にストレスでした。&lt;&#x2F;p&gt;
&lt;p&gt;ならば正解はこれ、&lt;strong&gt;HHKB Professional Classic Type-S&lt;&#x2F;strong&gt;です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;HHKB_Professional_Classic_Type-Sの魅力&quot;&gt;HHKB Professional Classic Type-Sの魅力&lt;&#x2F;h2&gt;
&lt;p&gt;Classic Type-Sの良さを挙げてみます。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bluetoothなしで、USB-Cケーブルだけで繋がる&lt;&#x2F;strong&gt; —
ケーブルを挿せば即座に使える&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;電源のオンオフの煩わしさがない&lt;&#x2F;strong&gt; —
接続の待ち時間ゼロ&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;持ち歩きでも電池分だけ軽い&lt;&#x2F;strong&gt; —
電池不要なのでHybridより軽量&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;電池ボックスがなく、形状も美しい&lt;&#x2F;strong&gt; —
底面がすっきりしたデザイン&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;キータッチがスコスコ&lt;&#x2F;strong&gt; —
Hybridより軽快な打鍵感&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;有線接続のシンプルさが、かえって快適さに繋がっています。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;div class=&quot;kaerebalink-box&quot; style=&quot;text-align:left;padding-bottom:20px;font-size:small;zoom: 1;overflow: hidden;&quot;&gt;&lt;div class=&quot;kaerebalink-image&quot; style=&quot;float:left;margin:0 15px 10px 0;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;g00rgzi5.9srin4d9.g00rgzi5.9sriod4c&#x2F;kaereba_main_202602031752285347?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fpfudirect%2Fpd-kb401ysc%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fpfudirect%2Fi%2F10001145%2F&amp;rafcid=wsc_i_is_1087413314923222742&quot; target=&quot;_blank&quot; &gt;&lt;img src=&quot;https:&#x2F;&#x2F;thumbnail.image.rakuten.co.jp&#x2F;@0_mall&#x2F;pfudirect&#x2F;cabinet&#x2F;images&#x2F;pd-kb401ysc.jpg?_ex=128x128&quot; style=&quot;border: none;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-info&quot; style=&quot;line-height:120%;zoom: 1;overflow: hidden;&quot;&gt;&lt;div class=&quot;kaerebalink-name&quot; style=&quot;margin-bottom:10px;line-height:120%&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;g00rgzi5.9srin4d9.g00rgzi5.9sriod4c&#x2F;kaereba_main_202602031752285347?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fpfudirect%2Fpd-kb401ysc%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Fpfudirect%2Fi%2F10001145%2F&amp;rafcid=wsc_i_is_1087413314923222742&quot; target=&quot;_blank&quot; &gt;HHKB Professional Classic Type-S　英語配列&#x2F;雪　有線接続　Type-C&lt;&#x2F;a&gt;&lt;div class=&quot;kaerebalink-powered-date&quot; style=&quot;font-size:8pt;margin-top:5px;font-family:verdana;line-height:120%&quot;&gt;posted with &lt;a href=&quot;https:&#x2F;&#x2F;kaereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;カエレバ&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-detail&quot; style=&quot;margin-bottom:5px;&quot;&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-link1&quot; style=&quot;margin-top:10px;&quot;&gt;&lt;div class=&quot;shoplinkrakuten&quot; style=&quot;display:inline;margin-right:5px&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;1300574f.7d238558.13005750.4bcd8088&#x2F;kaereba_main_202602031752285347?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FHHKB%2520Professional%2520Classic%2520Type-s%2F-%2Ff.1-p.1-s.1-sf.0-st.A-v.2%3Fx%3D0%26scid%3Daf_ich_link_urltxt&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2F&quot; target=&quot;_blank&quot; &gt;楽天市場&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;shoplinkamazon&quot; style=&quot;display:inline;margin-right:5px&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.co.jp&#x2F;gp&#x2F;search?keywords=HHKB%20Professional%20Classic%20Type-s&amp;__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;tag=yostosweb-22&quot; target=&quot;_blank&quot; &gt;Amazon&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;booklink-footer&quot; style=&quot;clear: left&quot;&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;輪島塗Esc＆Controlキーセット&quot;&gt;輪島塗Esc＆Controlキーセット&lt;&#x2F;h2&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;02&amp;#x2F;hhkb-pro-classic-type-s-urushi&amp;#x2F;1.webp?h=152ddc1e8bea9b5064f5&quot;
  alt=&quot;HHKB Professional専用漆塗Esc＆Controlキーセットの箱&quot; width=&quot;1800&quot; height=&quot;1041&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;さて、ここからが本題です。&lt;&#x2F;p&gt;
&lt;p&gt;PFUから発売されている
「HHKB Professional専用漆塗Esc＆Controlキーセット」を購入しました。
お値段なんと&lt;strong&gt;44,000円&lt;&#x2F;strong&gt;。キートップ2つでこの価格です。&lt;&#x2F;p&gt;
&lt;p&gt;輪島塗に用いられる漆は、高級万年筆のボディにも採用されるなど、
抗菌性・吸湿性・耐久性に優れた素材です。
本製品では金粉を加えたこだわりの精製漆を用い、
熟練の職人の手によって何層にも塗り重ねることで、
深みのある色合いと上品な質感を実現しています。&lt;&#x2F;p&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;02&amp;#x2F;hhkb-pro-classic-type-s-urushi&amp;#x2F;2.webp?h=0972258c89969caa3c2a&quot;
  alt=&quot;HHKB Professional専用漆塗Esc＆Controlキーセットの内容&quot; width=&quot;1800&quot; height=&quot;1168&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;箱を開けると「輪島市無形文化財　天日黒目漆使用　大撤」と書かれた証明書が
入っていました。本物の伝統工芸品であることを実感します。&lt;&#x2F;p&gt;
&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2026&amp;#x2F;02&amp;#x2F;hhkb-pro-classic-type-s-urushi&amp;#x2F;3.webp?h=8c431d1dcaf772d27288&quot;
  alt=&quot;HHKB Professional専用漆塗Esc＆Controlキーセットのセット例&quot; width=&quot;1800&quot; height=&quot;1377&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;p&gt;HHKB「雪」（白）に黒漆のキーを載せると、このとおり。
白と黒のコントラストが神々しいほど美しいです。&lt;&#x2F;p&gt;
&lt;p&gt;毎日触れるキーボードだからこそ、本物の価値を手元に置く贅沢を楽しんで
います。&lt;&#x2F;p&gt;
</content>
        <summary type="html">HHKB Professional Classic Type-Sに輪島塗の漆塗りキートップを
載せました。Keychron Q60やHHKB Hybridを経てたどり着いた、
有線キーボードの良さと伝統工芸の美しさを紹介します。
</summary>
        </entry><entry xml:lang="en">
        <title>GravaStar Gaming Mouse Mercury M2</title>
        <published>2025-12-30T00:00:00+00:00</published>
        <updated>2025-12-30T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2025/12/mercury-m2/" type="text/html"/>
        <id>https://codedchords.dev/blog/2025/12/mercury-m2/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2025&amp;#x2F;12&amp;#x2F;mercury-m2&amp;#x2F;m2.webp?h=d3b4ff2dfc8e800e0ff2&quot;
  alt=&quot;Mercury M2&quot; width=&quot;1800&quot; height=&quot;1012&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;h2 id=&quot;Replacing_My_Mouse&quot;&gt;Replacing My Mouse&lt;&#x2F;h2&gt;
&lt;p&gt;After four years of faithful service, my wired &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;4qv3XfG&quot;&gt;Xtrfy M42&lt;&#x2F;a&gt; was showing its age. I considered buying the same model again, but it had been replaced by a newer version, and the old model was now expensive. I wasn&#x27;t fond of the new Xtrfy designs, so I tried a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;3MQsXQe&quot;&gt;Kensington Slim Blade Pro&lt;&#x2F;a&gt; trackball instead. Unfortunately, it occasionally stopped responding, which became frustrating.&lt;&#x2F;p&gt;
&lt;p&gt;That&#x27;s when I purchased the GravaStar &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;44OXdB6&quot;&gt;Mercury M2&lt;&#x2F;a&gt; gaming mouse.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Why_I_Chose_the_Mercury_M2&quot;&gt;Why I Chose the Mercury M2&lt;&#x2F;h2&gt;
&lt;p&gt;GravaStar also offers a higher-end model, the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;3L4EESP&quot;&gt;Mercury X Pro&lt;&#x2F;a&gt;, but since I don&#x27;t game on my Mac, I decided the Mercury M2&#x27;s specifications were sufficient.&lt;&#x2F;p&gt;
&lt;p&gt;The deciding factor was its unique design: a transparent black body with vibrant LED lighting. It has a cyberpunk aesthetic that serves as a striking accent on my desk.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Key_Features&quot;&gt;Key Features&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Connection Methods&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The mouse supports three types of connections:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;2.4GHz USB receiver&lt;&#x2F;li&gt;
&lt;li&gt;Bluetooth&lt;&#x2F;li&gt;
&lt;li&gt;USB-C wired connection&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Being able to switch between connection modes depending on the situation is convenient.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Customization Settings&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;No driver installation is required. On Mac, you can customize settings through a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;controlhub.top&#x2F;gravastar&#x2F;&quot;&gt;web-based&lt;&#x2F;a&gt; interface. You can adjust DPI, LED lighting patterns, and macro functions.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lightweight Design&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With an even more aggressive hollow body design than the M42, the Mercury M2 weighs only 79g. For a wireless mouse with a built-in battery, it&#x27;s impressively light and comfortable for extended use. I&#x27;m slightly concerned about dust getting into the hollow body, but so far it hasn&#x27;t been an issue.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;The Mercury M2 is a gaming mouse that combines distinctive design with practical functionality. Beyond gaming, it performs well as an everyday mouse. I&#x27;d recommend it to anyone looking for a lightweight wireless mouse with a design-forward aesthetic.&lt;&#x2F;p&gt;
</content>
        <summary type="html">After four years with my previous mouse, I upgraded to the GravaStar Mercury M2, featuring a transparent black body and LED lighting. This gaming mouse offers a lightweight 79g design, three connection methods, and web-based configuration.</summary>
        </entry><entry xml:lang="en">
        <title>ロジクール MX ERGO Sレビュー</title>
        <published>2025-10-09T00:00:00+00:00</published>
        <updated>2025-10-09T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2025/10/mx-ergo-s/" type="text/html"/>
        <id>https://codedchords.dev/blog/2025/10/mx-ergo-s/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2025&amp;#x2F;10&amp;#x2F;mx-ergo-s&amp;#x2F;ergo-s.webp?h=6fc6a7ad8204bbfc4a4c&quot;
  alt=&quot;MX ERGO S&quot; width=&quot;916&quot; height=&quot;1007&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;p&gt;20年程昔Kensigntonの機械式のExpertMouseを愛用してあの大玉を回す感覚が忘れられず、
定期的にトラックボールを購入してしまいます。今回もAmazonのセールだったので購入してみました。&lt;&#x2F;p&gt;
&lt;figure&gt;
  &lt;img src=&quot;expertmouse.jpg&quot; alt=&quot;Kensignton ExpertMouse&quot; &#x2F;&gt;
  &lt;figcaption&gt;忘れられないKensignton ExpertMouse&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;MX_ERGO_Sとは&quot;&gt;MX ERGO Sとは&lt;&#x2F;h2&gt;
&lt;p&gt;ロジクールMX ERGO Sは昨年9月発売されたロジクールのトラックボールの最上位機種です。
2017年に発売されたMX ERGOの後継機種ですが、目に付く更新内容は次の通りです。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;充電がUSB-Cに変更&lt;&#x2F;li&gt;
&lt;li&gt;専用レシーバーがUnifyingからLogiBoltに変更&lt;&#x2F;li&gt;
&lt;li&gt;静音クリック仕様に変更&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;7年越しの後継機種ですが、機能的にはほとんどアップデートされていないのが分かります。&lt;&#x2F;p&gt;
&lt;p&gt;最上位機種なので、マグネットの金属プレート台を利用して20度チルトできたり、やたらとボタンが付いていたりします。
ボタンは専用アプリを使用するとカスタマイズできますが、単に別の機能を割り振るだけでなく「ジェスチャー」機能を割り当てるとクリックだけでなく
トラックボールの上下左右の動きと合わせて機能設定できるため30近い機能を割り付けることが可能です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;MX_ERGO_Sの評価&quot;&gt;MX ERGO Sの評価&lt;&#x2F;h2&gt;
&lt;p&gt;手首の痛み軽減を目的でトラックボールに移行される方が多いと思いますが、
私はマウスの利用で手首の痛みを感じたことがなのであまりピンと来ていません。&lt;&#x2F;p&gt;
&lt;p&gt;親指でボールを操作するトラックボールは、豪快に手のひらでボールを転がすExpertMouseとはやはり別物です。
どうしても「これじゃない」と感じてしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;多ボタンもRectagleのショートカットを割り付けてみたりしましたが、
私はどちらかというとキーボード主体の操作なので、ショートカットをトラックボールに割り付けるならば
ショートカットを押下したほうが効率的です。&lt;&#x2F;p&gt;
&lt;p&gt;MX ERGO S本体はプラスチックにすべり止めの加工が施してあるようですが、これがベタベタした感触で
今にも加水分解しそうで苦手です。&lt;&#x2F;p&gt;
&lt;p&gt;結局、愛用している&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;4mRI8oB&quot;&gt;Xtrfyの軽量ゲーミングマウス&lt;&#x2F;a&gt;で十分だと改めて感じてしまいました。&lt;&#x2F;p&gt;
&lt;p&gt;MX ERGO Sはヤフオクかメルカリでドナドナすることになりそうです。&lt;&#x2F;p&gt;
&lt;div class=&quot;kaerebalink-box&quot; style=&quot;text-align:left;padding-bottom:20px;font-size:small;zoom: 1;overflow: hidden;&quot;&gt;&lt;div class=&quot;kaerebalink-image&quot; style=&quot;float:left;margin:0 15px 10px 0;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;g00tpxd5.9srin49d.g00tpxd5.9srio186&#x2F;kaereba_main_202601301031135362?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Flogicool%2Fmxtb2%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Flogicool%2Fi%2F10000683%2F&amp;rafcid=wsc_i_is_1087413314923222742&quot; target=&quot;_blank&quot; &gt;&lt;img src=&quot;https:&#x2F;&#x2F;thumbnail.image.rakuten.co.jp&#x2F;@0_mall&#x2F;logicool&#x2F;cabinet&#x2F;prd&#x2F;mice&#x2F;mxtb2&#x2F;mxtb2_r_.jpg?_ex=128x128&quot; style=&quot;border: none;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-info&quot; style=&quot;line-height:120%;zoom: 1;overflow: hidden;&quot;&gt;&lt;div class=&quot;kaerebalink-name&quot; style=&quot;margin-bottom:10px;line-height:120%&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;g00tpxd5.9srin49d.g00tpxd5.9srio186&#x2F;kaereba_main_202601301031135362?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Flogicool%2Fmxtb2%2F&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2Flogicool%2Fi%2F10000683%2F&amp;rafcid=wsc_i_is_1087413314923222742&quot; target=&quot;_blank&quot; &gt;【特価】ロジクール ワイヤレスマウス トラックボール MX ERGO S 無線 静音 Bluetooth &amp; Logi Bolt 8ボタン USB-C 急速充電 windows mac iPad OS 対応 MXTB2 国内正規品 2年間無償保証&lt;&#x2F;a&gt;&lt;div class=&quot;kaerebalink-powered-date&quot; style=&quot;font-size:8pt;margin-top:5px;font-family:verdana;line-height:120%&quot;&gt;posted with &lt;a href=&quot;https:&#x2F;&#x2F;kaereba.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;カエレバ&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-detail&quot; style=&quot;margin-bottom:5px;&quot;&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;kaerebalink-link1&quot; style=&quot;margin-top:10px;&quot;&gt;&lt;div class=&quot;shoplinkrakuten&quot; style=&quot;display:inline;margin-right:5px&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;hb.afl.rakuten.co.jp&#x2F;hgc&#x2F;1300574f.7d238558.13005750.4bcd8088&#x2F;kaereba_main_202601301031135362?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FMX%2520ERGO%2F-%2Ff.1-p.1-s.1-sf.0-st.A-v.2%3Fx%3D0%26scid%3Daf_ich_link_urltxt&amp;m=http%3A%2F%2Fm.rakuten.co.jp%2F&quot; target=&quot;_blank&quot; &gt;楽天市場&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;shoplinkamazon&quot; style=&quot;display:inline;margin-right:5px&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.amazon.co.jp&#x2F;gp&#x2F;search?keywords=MX%20ERGO&amp;__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;tag=yostosweb-22&quot; target=&quot;_blank&quot; &gt;Amazon&lt;&#x2F;a&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;&lt;div class=&quot;booklink-footer&quot; style=&quot;clear: left&quot;&gt;&lt;&#x2F;div&gt;&lt;&#x2F;div&gt;
</content>
        <summary type="html">Amazonのプライム感謝先行セールで少し安くなっていたので、ロジクールのMX ERGO Sを購入しました。</summary>
        </entry><entry xml:lang="en">
        <title>Purchased Keychron Q9</title>
        <published>2025-09-25T00:00:00+00:00</published>
        <updated>2025-09-25T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2025/09/keychron-q9/" type="text/html"/>
        <id>https://codedchords.dev/blog/2025/09/keychron-q9/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2025&amp;#x2F;09&amp;#x2F;keychron-q9&amp;#x2F;keychron-q9.webp?h=a4e27e9e29bd0c1f334e&quot;
  alt=&quot;Keychron Q9&quot; width=&quot;1800&quot; height=&quot;1350&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;h2 id=&quot;What_is_the_Keychron_Q9?&quot;&gt;What is the Keychron Q9?&lt;&#x2F;h2&gt;
&lt;p&gt;The Keychron Q9 is a compact keyboard called a 40% keyboard.&lt;&#x2F;p&gt;
&lt;p&gt;60% keyboards like HHKB omit function keys to save space,
which works minimally without compromising usability for people like me who don&#x27;t use function keys.
However, 40% keyboards go even further by omitting the entire row of number keys. If you only type English text, I thought &quot;this might actually work&quot; and became interested.&lt;&#x2F;p&gt;
&lt;p&gt;The Keychron Q9 is quite unique even among 40% keyboards. While the depth is shorter due to fewer key rows,
the width is actually greater than 60% keyboards.&lt;&#x2F;p&gt;
&lt;p&gt;There are models with a knob where the Backspace key would be, and models with split space keys,
but I purchased the most basic type.&lt;&#x2F;p&gt;
&lt;p&gt;Above all, the tightly packed size feels more cute than functionally beautiful.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Layers&quot;&gt;Layers&lt;&#x2F;h2&gt;
&lt;p&gt;The Keychron Q9 has a 5-layer structure as follows:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;&#x2F;th&gt;&lt;th&gt;Description&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Layer 0&lt;&#x2F;td&gt;&lt;td&gt;Base layer for Mac system&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Layer 1&lt;&#x2F;td&gt;&lt;td&gt;Base layer for Windows system&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Layer 2&lt;&#x2F;td&gt;&lt;td&gt;Multimedia keys for Mac system. Accessed with fn1 key combination&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Layer 3&lt;&#x2F;td&gt;&lt;td&gt;Multimedia keys for Windows system. Accessed with fn1 key combination&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Layer 4&lt;&#x2F;td&gt;&lt;td&gt;Function keys, numbers, etc. Accessed with fn2 key combination&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The system toggle switch allows switching between Mac and Windows.
For Mac, Layer 0 and Layer 2 (when Fn1 is pressed) are selected.
For Windows, Layer 1 and Layer 3 (when Fn1 is pressed) are used.
Layer 4 is common to both Mac&#x2F;Windows.
It activates when Fn2 is pressed for numbers and function keys.&lt;&#x2F;p&gt;
&lt;p&gt;The Q9 features a 5-layer structure designed to support both Mac and Windows.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Usage_Experience&quot;&gt;Usage Experience&lt;&#x2F;h2&gt;
&lt;p&gt;First, since there are overwhelmingly fewer keys, it&#x27;s certainly quite challenging to use.&lt;&#x2F;p&gt;
&lt;p&gt;The main issues are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hyphen and Equals&lt;&#x2F;strong&gt;: No key assignment. Not that they&#x27;re not on the default layer, but there&#x27;s no key assignment at all.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ESC Key&lt;&#x2F;strong&gt;: Can only be input with Fn2 key combination (common issue with compact keyboards)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Backspace&lt;&#x2F;strong&gt;: Above the Enter key is the \ key, not Backspace (specific issue for HHKB users)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Control&lt;&#x2F;strong&gt;: Next to the A key is Caps Lock, not Control (specific issue for HHKB users)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fn2&lt;&#x2F;strong&gt;: Number keys can only be input with Fn2 combination, but Fn2 key is only on the right side&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The biggest problem is that Japanese requires hyphens for long vowel sounds, but there&#x27;s no key mapping for it.
Therefore, key mapping changes are essential if you want to use it properly.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Customization&quot;&gt;Customization&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hyphen and Equals&lt;&#x2F;strong&gt;: Sacrificed some function keys and made them accessible via Fn2 key combination&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ESC Key&lt;&#x2F;strong&gt;: Set it to the Tab key position since that&#x27;s a familiar location, and made Tab accessible via Fn2 combination&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Backspace&lt;&#x2F;strong&gt;: Since this is also a familiar position, set it to the backslash key. Backslash is now accessible via Fn2. However, it might be better to train myself to use Ctrl-H instead.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Control&lt;&#x2F;strong&gt;: Replaced Caps Lock with Control&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fn2&lt;&#x2F;strong&gt;: Replaced the Control key position with Fn2. This creates a setup with two Fn2 keys on both left and right sides&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;figure&gt;
  &lt;img src=&quot;layer0.webp&quot; alt=&quot;LAYER0&quot; &#x2F;&gt;
  &lt;figcaption&gt;LAYER0&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;figure&gt;
  &lt;img src=&quot;layer2.webp&quot; alt=&quot;LAYER2&quot; &#x2F;&gt;
  &lt;figcaption&gt;LAYER2&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;figure&gt;
  &lt;img src=&quot;layer4.webp&quot; alt=&quot;LAYER4&quot; &#x2F;&gt;
  &lt;figcaption&gt;LAYER4&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
## Keychron Q9 Evaluation
&lt;p&gt;The switches are Gateron G Pro Red, with an aluminum case and double gasket mount, so the typing feel is excellent.&lt;&#x2F;p&gt;
&lt;p&gt;You get used to it quickly, but since number keys and some other keys can only be typed with key combinations,
typing efficiency does decrease.&lt;&#x2F;p&gt;
&lt;p&gt;While it&#x27;s marketed as a 40% keyboard, the depth is indeed space-saving since it&#x27;s reduced by one row of number keys. Compared to HHKB, you can save about 2cm in depth.
However, the width is about 1.5cm wider on each side compared to typical 60% keyboards.&lt;&#x2F;p&gt;
&lt;p&gt;Personally, I can&#x27;t imagine scenarios where I&#x27;d feel the
space-saving benefits at this level.
However, if you have extreme desk constraints, this unique size
that no other keyboard offers would be the only choice.&lt;&#x2F;p&gt;
&lt;p&gt;As for myself, I&#x27;ll continue using this keyboard purely
for the sake of &quot;showing off the minimal number of keys.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;In a degenerate workplace with useless individuals,
using a favorite keyboard is about the only motivation I have.
This should keep me entertained for about a month.&lt;&#x2F;p&gt;
</content>
        <summary type="html">A review of the Keychron Q9 40% keyboard - exploring its unique design, layer configuration, usage experience, and customization options for this compact keyboard.</summary>
        </entry><entry xml:lang="en">
        <title>Nothing Phone (3)を購入</title>
        <published>2025-09-17T00:00:00+00:00</published>
        <updated>2025-09-17T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2025/09/nothing-phone3/" type="text/html"/>
        <id>https://codedchords.dev/blog/2025/09/nothing-phone3/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2025&amp;#x2F;09&amp;#x2F;nothing-phone3&amp;#x2F;nothing.webp?h=c4e9714ab10181c5a03b&quot;
  alt=&quot;Nothing Phone (3)&quot; width=&quot;1800&quot; height=&quot;1013&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;p&gt;Pixel 8 Proのバッテリーの持ちが悪くなってきたので、日本での発表当日
Nothing Phone(3)を予約購入しました。
8月末に届いて2週間程使ってみたので、レビューとしてまとめたいと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Nothing_Phone_(3)の背面デザイン&quot;&gt;Nothing Phone (3)の背面デザイン&lt;&#x2F;h2&gt;
&lt;p&gt;Nothing Phone (3)の最も特徴的な部分が背面のデザインだと思います。
ガラスの透明なボディ内部には複数のパーツが複雑に組み合わされたような造形が見えます。
特にカラーがホワイトの場合に、より鮮明にこれらのデザインが目に付きます。
実際にパーツの一部が露出した造形でなく、機能のない全くの「デザイン」です。&lt;&#x2F;p&gt;
&lt;p&gt;工業製品ではデザインは機能の帰結としてある「機能美」を支持しますが、
iPhoneとAndroidの区別がつかないノッペリしたデザインばかりのスマートフォンの現状を鑑みると、
フェイクでも「何か機能的」と感じさせるデザインについて嫌いではありません。
唯一中心部にある赤い四角はレコーダーアプリ起動時には赤く点灯します。&lt;&#x2F;p&gt;
&lt;p&gt;グリッドに沿って配置されたカメラのレンズは大仰にも感じますが、
3連や4連で縦や横一連に並んだレンズの気色悪さよりよほどマシです。&lt;&#x2F;p&gt;
&lt;p&gt;Nothing Phoneの特徴であった「Glyphインターフェイス」はコスト削減のためか
「Glyphマトリックス」というドットマトリックスを表示できるディスプレイに
変更されました。今のところ特定の条件（通話相手やアプリなど）により
特定のアイコンを表示することと、Glyph Toyの表示くらいしかできません。&lt;&#x2F;p&gt;
&lt;p&gt;Glyph Toyはじゃんけんや瓶回しなどあまり実用的でないものしかありませんが、
そのうちこれを利用できるアプリが出てくるとよいなと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Nothing_Phone_(3)の性能について&quot;&gt;Nothing Phone (3)の性能について&lt;&#x2F;h2&gt;
&lt;p&gt;プロセッサはQualcomm Snapdragon 8S Gen 4で、私が購入したモデルは
ストレージ512GBモデルで、メモリーは16GBです。&lt;&#x2F;p&gt;
&lt;p&gt;Galaxy辺りのハイエンドを比較すると見劣りしますが、
私は負荷の高いゲームなどあまりやらないので十分です。この2週間で不満を感じたシーンは全くありませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;ディスプレイは6.77インチ、1,260×2,800ドットのフレキシブルAMOLEDです。
明るさは通常800nit、屋外1,600nitなので、ハイエンドには及ばないものの十分だと感じます。&lt;&#x2F;p&gt;
&lt;p&gt;カメラ性能はPixel 8 Proと比べてしまうと、若干使い勝手が悪かったりAI補正は弱いと感じます。
メインカメラは1&#x2F;1.3インチと大型センサーを搭載し35mm換算24mm&#x2F;F1.68、ワイドが15mm&#x2F;F2.2、望遠が70mm&#x2F;F2.68
で解像度はどれも50MPなのでそれなりの画像は撮れます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Nothing_OS_3.0と独自アプリ&quot;&gt;Nothing OS 3.0と独自アプリ&lt;&#x2F;h2&gt;
&lt;p&gt;Nothing Phone (3)にはAndroid 15をカスタマイズしたNothing OS 3.0とNothing独自アプリが搭載されています。&lt;&#x2F;p&gt;
&lt;p&gt;予め統一感のあるデザインされた独自のHomeアプリとWedget、アイコンパックが提供されているNothing OS 3.0は、
「もうこれでいいや」と思える程度にセンスよくまとめることを簡単にできます。最初は楽しかったAndroidの
Homeアプリのカスタマイズが最近は苦痛だったので、非常にありがたいと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;独自のギャラリーやレコーダーアプリ、お天気も使い勝手が良く、デザインが統一されているのでWedgitも利用価値があります。
AIを活用したEssential Spaceはまだ使い込んでおらず、あまり恩恵を感じません。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Out_of_Boxですぐに使える&quot;&gt;Out of Boxですぐに使える&lt;&#x2F;h2&gt;
&lt;p&gt;Nothing Phone (3)はその背面デザインをスポイルしないトランスペアレントなケースが付属している上に、
ディスプレイには予め保護フィルムが貼ってあり自分で購入して貼る必要がありません。
箱から出してすぐに使い始めることができるので、これは非常に好印象です。&lt;&#x2F;p&gt;
&lt;p&gt;ケースに特に不満はありませんでしたが、Glyphマトリックス部分が保護されていない点と
素材的に黄ばみそうな気がして&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;4gpAxMe&quot;&gt;Spigenのクリアケース&lt;&#x2F;a&gt;に差し替えました。
保護能力は折り紙付きでGlyphマトリックス部分もしっかりケースで覆われます。また黄変を抑制する特殊素材を採用されているので黄ばみも押さえることができるのでお勧めで
す。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;まとめ&quot;&gt;まとめ&lt;&#x2F;h2&gt;
&lt;p&gt;Nothing Phone (3)は2週間使ってみて非常に満足度の高いスマートフォンでした。&lt;&#x2F;p&gt;
&lt;p&gt;突出して高機能ではありませんが、もはやミッドレンジ以上であれば私の使い方では差が感じられないので十分です。
カメラもPixelには及ばないものの、SNS投稿や記録用途には問題ありません。&lt;&#x2F;p&gt;
&lt;p&gt;背面の透明デザインは賛否が分かれるかもしれませんが、他社の似通ったデザインに対する明確な差別化になっており私は好感を持ちました。
Nothing OS 3.0と独自アプリのUIは本体背面とも統一したデザインがなされており、他の違うセンスよさげな雰囲気を醸し出している点が好きです。&lt;&#x2F;p&gt;
&lt;p&gt;Glyphマトリックスはまだ活用の幅が狭いものの、今後のアプリ開発に期待が持てます。&lt;&#x2F;p&gt;
&lt;p&gt;デザインにこだわりがあるユーザーには、所有する喜びを感じることができお勧めできる一台です。&lt;&#x2F;p&gt;
</content>
        <summary type="html">Pixel 8 Proからの買い替えでNothing Phone (3)を2週間使用したレビュー。透明な背面デザイン、Glyphマトリックス、Nothing OS 3.0の使い勝手、カメラ性能などを詳しく紹介。デザインにこだわりがあるユーザーにおすすめの一台。</summary>
        </entry><entry xml:lang="en">
        <title>A New Proposal for the Cloud Era: How UGREEN NAS is changing the future of personal data storage</title>
        <published>2025-08-31T00:00:00+00:00</published>
        <updated>2025-08-31T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2025/08/ugreen-nas/" type="text/html"/>
        <id>https://codedchords.dev/blog/2025/08/ugreen-nas/</id>
        
            <content type="html">&lt;!-- textlint-disable --&gt;
&lt;img
  src=&quot;https:&amp;#x2F;&amp;#x2F;codedchords.dev&amp;#x2F;blog&amp;#x2F;2025&amp;#x2F;08&amp;#x2F;ugreen-nas&amp;#x2F;ugreen-nas.webp?h=9118045f14051f5966ab&quot;
  alt=&quot;UGREEN NAS&quot; width=&quot;740&quot; height=&quot;467&quot; loading=&quot;lazy&quot;
&#x2F;&gt;&lt;!-- textlint-enable --&gt;
&lt;details&gt;
&lt;summary&gt;Table of Contents&lt;&#x2F;summary&gt;
&lt;!-- toc --&gt;
&lt;&#x2F;details&gt;
&lt;h2 id=&quot;Why_I_Chose_UGREEN_NAS&quot;&gt;Why I Chose UGREEN NAS&lt;&#x2F;h2&gt;
&lt;p&gt;Among numerous NAS products, I selected the UGREEN NASync DXP2800
for its outstanding cost-performance ratio.
Despite being significantly cheaper than the Synology DS224+,
it comes standard with an Intel N100 processor and 8GB DDR5 memory.
It also includes a 2.5GbE port and dual M.2 slots.
The 2.5GbE port is particularly rare in this price range and offers
future-proofing.&lt;&#x2F;p&gt;
&lt;p&gt;The tool-free removable drive tray system for easy HDD
replacement was also appealing. Setup Experience Upon unboxing, I was
impressed by the build quality of the aluminum alloy chassis. The included
dual CAT 7 LAN cables were also high-quality. I installed
2×&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;4myLddI&quot;&gt;WD Red Plus 4TB HDDs&lt;&#x2F;a&gt; (RAID 1 configuration) and
2×&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;amzn.to&#x2F;3HZmdgD&quot;&gt;Samsung 990 EVO Plus 1TB SSDs&lt;&#x2F;a&gt;.
HDDs simply clicked into the trays, and SSDs were easily installed with the included
screwdriver. Initial setup through the dedicated &quot;UGREEN NAS&quot; app took just
minutes. The RAID configuration suggested optimal settings based on
installed drives, making it beginner-friendly without confusion.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Real-World_Usage&quot;&gt;Real-World Usage&lt;&#x2F;h2&gt;
&lt;p&gt;The Samsung SSD cache implementation showed dramatic results, with
near-instantaneous photo browsing and previews. It&#x27;s a completely different
experience from external HDDs. Power management features allow scheduled
automatic shutdown at night and startup in the morning, extending HDD
lifespan. UGOS (UGREEN&#x27;s OS) exceeded expectations with robust file
management, automatic photo organization, remote access, and other essential
daily functions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;Final_Verdict:_Worth_Buying?&quot;&gt;Final Verdict: Worth Buying?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Conclusion: Absolutely a &quot;buy.&quot;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The price-to-hardware spec ratio is unmatched by competitors. It
combines beginner-friendly usability with future expandability.
Considerations:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Security concerns about Chinese manufacturers (may not suit corporate
secrets)&lt;&#x2F;li&gt;
&lt;li&gt;Software is still developing compared to Synology DSM&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;However, it&#x27;s sufficient for home use and continuously improving through
frequent updates. Compared to monthly cloud service fees, the long-term
benefits of building a private cloud are immeasurable. I recommend this
noteworthy product that&#x27;s bringing fresh innovation to the NAS market.&lt;&#x2F;p&gt;
</content>
        <summary type="html">A 2-month review of the excellent cost-performance UGREEN NASync DXP2800. This popular NAS offers outstanding specs for its price range. From tool-free easy setup and SSD cache acceleration to UGOS practicality, we explain in detail why we recommend it to NAS beginners and how to use it effectively. We provide an honest evaluation including concerns about Chinese manufacturers.</summary>
        </entry><entry xml:lang="en">
        <title>M4 Macbook has been announced</title>
        <published>2024-10-31T00:00:00+00:00</published>
        <updated>2024-10-31T00:00:00+00:00</updated>
        <author>
            <name>Toshiyuki Yoshida</name>
        </author>
        <link rel="alternate" href="https://codedchords.dev/blog/2024/10/m4-mac/" type="text/html"/>
        <id>https://codedchords.dev/blog/2024/10/m4-mac/</id>
        
            <content type="html">&lt;p&gt;I&#x27;m currently using a MacBook Pro with M3 Max, so I&#x27;ve made a comparison between the M3 Max and M4 Max. I think I&#x27;ll continue using my current MacBook Pro for a while longer rather than upgrading.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Chip Model&lt;&#x2F;th&gt;&lt;th&gt;CPU Core Count&lt;&#x2F;th&gt;&lt;th&gt;GPU Core Count&lt;&#x2F;th&gt;&lt;th&gt;Benchmark Scores&lt;&#x2F;th&gt;&lt;th&gt;Transistor Count (Billions)&lt;&#x2F;th&gt;&lt;th&gt;Memory Bandwidth (GB&#x2F;s)&lt;&#x2F;th&gt;&lt;th&gt;Release Date&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;M3 Max&lt;&#x2F;td&gt;&lt;td&gt;12&#x2F;4&lt;&#x2F;td&gt;&lt;td&gt;40&lt;&#x2F;td&gt;&lt;td&gt;Single: 2971, Multi: 20785&lt;&#x2F;td&gt;&lt;td&gt;92&lt;&#x2F;td&gt;&lt;td&gt;400&lt;&#x2F;td&gt;&lt;td&gt;2023-10-30&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;M4&lt;&#x2F;td&gt;&lt;td&gt;4&#x2F;6&lt;&#x2F;td&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;28&lt;&#x2F;td&gt;&lt;td&gt;120&lt;&#x2F;td&gt;&lt;td&gt;2024-05-15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;M4 Pro&lt;&#x2F;td&gt;&lt;td&gt;10&#x2F;4&lt;&#x2F;td&gt;&lt;td&gt;20&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;Not announced&lt;&#x2F;td&gt;&lt;td&gt;120&lt;&#x2F;td&gt;&lt;td&gt;2024-10-29&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;M4 Max&lt;&#x2F;td&gt;&lt;td&gt;12&#x2F;4&lt;&#x2F;td&gt;&lt;td&gt;40&lt;&#x2F;td&gt;&lt;td&gt;—&lt;&#x2F;td&gt;&lt;td&gt;Not announced&lt;&#x2F;td&gt;&lt;td&gt;546&lt;&#x2F;td&gt;&lt;td&gt;2024-05-15&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
</content>
        <summary type="html">The MacBook Pro featuring the M4 chip has been announced.</summary>
        </entry>
</feed>
