トップ 最新 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2024-07-04 [長年日記]

_ [雑記]NF-A14x25r G2 PWM

ようやく新型が出るらしい

最初の奴は、D15 G2用のラウンドフレーム版で、普通の140mmファンはその後らしい。あと、ブレードを改良したA12x25の後継も2025年予定だとか…

取り合えず、新しいケース向けの吸気ファン検討用にスペックを纏めておく

Model A14x25r G2 PWMA14 PWM A12x25 PWM
RPM 1500/1250 1500/1200 2000/1700
Noise dB(A) 24.8/19.7 24.6/19.2 22.6/18.8
AirFlow m^3/h 155.6/127.1 140.2/115.5 102.1/84.5
Pressure mm H2O2.56/1.3 2.08/1.51 2.34/1.65
Mouting Hole 105 x 105 124.5 x 124.5 105 x 105
  • 流路抵抗が大きい極限の流量は、A14x25r G2 PWM > A12x25 PWM > A14 PWM
  • 流路抵抗が小さい極限の流量は、A14x25r G2 PWM > A14 PWM > A12x25 PWM

流路抵抗が低めのケースなら、手に入ればA14x25r G2 PWM + L.N.A.、次点でA14 PWM + L.N.A.辺りが良さそう


2024-07-05 [長年日記]

_ [FreeBSD]ja_JP.eucJP→ja_JP.UTF-8への移行

XIM入力を含めFreeBSD+X.org環境の不具合は概ね原因特定・パッチ完了〜

残る問題は、

  • xterm等で使用しているiso10646 fontのグリフ足りない問題
    • 「☆」とかが手元のiso10646 font + xtermだと豆腐になる
    • 当面ktermの運用で回避しつつ、グリフがフル実装されたUnicode fontを探す?
  • Sambaやmsdosfsを介したWindows環境との運用互換性問題
    • 運用上のUnicode符号位置の非互換性をカバーするエンコードをlibiconv等へ実装することを検討中
      • 名前どうしよう?MicrosoftのUnicode符号位置に対応したEUC-JPの変種にEUC-JP-MSと命名されていたのに習うとUTF-8-MSとかになるのだが、UTF-8の変種間の変換なので意味づけがややこしい

あと、ports運用上ストレスになる問題

  • kterm + portconfigで罫線込みのダイアログの版組が崩れる
    • xterm + portconfigは問題無し
    • 罫線文字の幅が、xtermでは半角扱い・ktermでは全角扱いなのが原因の模様
      • kterm的にはJISX0208経由で扱われるため全角になるのは理解出来る
      • Unicode規格的には、FULLWIDTHと書いてないので、英数字と同じ半角グリフデザインもJISX0208的な全角グリフデザインも包摂基準内
        • CUIコンソール上での版組使用を考えなかったんかい!(Unicode的には規格の領域外なのだろうが、収録元の用例は通常の文字と一緒に版組的に使っていたはず)
      • libdialog辺りにパッチして、罫線文字の文字幅の概念を持たせるぐらいしか解決策が無いか?

_ [FreeBSD]iconvのコードセット拡張

  • ports/converters/libiconv
    • UCS-4を中間コードとする変換系
    • utf-8の実装系をベースに改造するのが簡単だった
      • lib/utf8.hを拡張して、UTF8のエンコード・デコード時にUCSコードポイントを変換する亜種を定義する
      • lib/encodings.defにUTF-8の亜種エンコーディングを登録する
      • Makefile.develを使って lib/*.hを更新する
        • このプロセスは、pre-configureターゲット辺りに突っ込めばよい
        • Makefile.develがGNU makeとgperfを要求するので、依存関係を突っ込んでおく
  • Citrus iconv(libc同梱の実装系)
    • CSI独立な実装
    • UTF8 encodingの亜種を作る方が簡単だった
      • lib/libiconv_modules/UTF8/citrus_utf8.c改造
        • UTF1632の実装を参考に、_UTF8EncodingInfo型にモードフラグ実装
        • UTF1632の実装を参考に、_citrus_UTF8_encoding_module_initVARIABLEデコードと_UTF8EncodingInfoのモードフラグ初期化を実装
        • Microsoft側とUnix側で入れ替えたいコードポイントを変換するヘルパー関数を実装
        • _citrus_UTF8_wcrtomb_priv先頭に、モードフラグ依存でwcを変換するコードを追加
        • _citrus_UTF8_mbrtowc_privwcharを書き戻す直前に、モードフラグ依存でwcharを変換するコードを追加
      • share/i18n/esdb/UTF改造
        • Makefile内のUTF-8エントリを複製し、先ほど定義したモードフラグ付きのUTF-8の変種を設定
        • UTF.partに、定義したUTF-8の変種を登録
      • CSIDの定義はUCSのまま、multibyte stringへの符号化方式の亜種として定義した
      • EUCJP-MSの定義等と比べて、符号位置の変更をmultibyte encoding側で施すのは邪道だが…
        • CSIDを独立に定義しても、UTF-8系の運用しか想定してないので、独立定義するメリットが薄い
        • 数文字の符号位置変更以外ほぼ恒等写像なUCS全体をカバーする変換マップの格納効率が悪すぎる
--- lib/libiconv_modules/UTF8/citrus_utf8.c.orig
+++ lib/libiconv_modules/UTF8/citrus_utf8.c
@@ -116,7 +116,9 @@ typedef struct {
       char     ch[6];
 } _UTF8State;

-typedef void *_UTF8EncodingInfo;
+typedef struct {
+      bool     ms;
+} _UTF8EncodingInfo;

 #define _CEI_TO_EI(_cei_)             (&(_cei_)->ei)
 #define _CEI_TO_STATE(_ei_, _func_)   (_ei_)->states.s_##_func_
@@ -149,6 +151,35 @@ _UTF8_surrogate(wchar_t wc)
       return (wc >= 0xd800 && wc <= 0xdfff);
 }

+static __inline wchar_t
+_UTF8_ms_map(wchar_t wc, bool to_utf8_ms)
+{
+      switch(wc) {
+      case 0x301c: return to_utf8_ms ? 0xff5e : wc;
+      case 0xff5e: return to_utf8_ms ? wc : 0x301c;
+
+      case 0x2016: return to_utf8_ms ? 0x2225 : wc;
+      case 0x2225: return to_utf8_ms ? wc : 0x2016;
+
+      case 0x2212: return to_utf8_ms ? 0xff0d : wc;
+      case 0xff0d: return to_utf8_ms ? wc : 0x2212;
+
+      case 0x00a2: return to_utf8_ms ? 0xffe0 : wc;
+      case 0xffe0: return to_utf8_ms ? wc : 0x00a2;
+
+      case 0x00a3: return to_utf8_ms ? 0xffe1 : wc;
+      case 0xffe1: return to_utf8_ms ? wc : 0x00a3;
+
+      case 0x00ac: return to_utf8_ms ? 0xffe2 : wc;
+      case 0xffe2: return to_utf8_ms ? wc : 0x00ac;
+
+      case 0x2014: return to_utf8_ms ? 0x2015 : wc;
+      case 0x2015: return to_utf8_ms ? wc : 0x2014;
+
+      default:     return wc;
+      }
+}
+
 static __inline void
 /*ARGSUSED*/
 _citrus_UTF8_init_state(_UTF8EncodingInfo *ei __unused, _UTF8State *s)
@@ -223,6 +254,9 @@ _citrus_UTF8_mbrtowc_priv(_UTF8EncodingInfo *ei, wchar_t *pwc, char **s,
               if (_UTF8_surrogate(wchar) || _UTF8_findlen(wchar) != c)
                       goto ilseq;
       }
+      if(ei->ms) {
+              wchar = _UTF8_ms_map(wchar, true);
+      }
       if (pwc != NULL)
               *pwc = wchar;
       *nresult = (wchar == 0) ? 0 : s0 - *s;
@@ -242,13 +276,16 @@ _citrus_UTF8_mbrtowc_priv(_UTF8EncodingInfo *ei, wchar_t *pwc, char **s,
 }

 static int
-_citrus_UTF8_wcrtomb_priv(_UTF8EncodingInfo *ei __unused, char *s, size_t n,
+_citrus_UTF8_wcrtomb_priv(_UTF8EncodingInfo *ei, char *s, size_t n,
     wchar_t wc, _UTF8State *psenc __unused, size_t *nresult)
 {
       wchar_t c;
       size_t cnt;
       int i, ret;

+      if(ei->ms) {
+              wc = _UTF8_ms_map(wc, false);
+      }
       if (_UTF8_surrogate(wc)) {
               ret = EILSEQ;
               goto err;
@@ -326,12 +363,35 @@ _citrus_UTF8_stdenc_get_state_desc_generic(_UTF8EncodingInfo * __restrict ei __u
       return (0);
 }

+static void
+parse_variable(_UTF8EncodingInfo * __restrict ei,
+    const void * __restrict var, size_t lenvar)
+{
+      const char *p;
+
+      p = var;
+      while (lenvar > 0) {
+              switch (*p) {
+              case 'M':
+              case 'm':
+                      MATCH(ms, ei->ms = true);
+                      break;
+              }
+              p++;
+              lenvar--;
+      }
+}
+
 static int
 /*ARGSUSED*/
-_citrus_UTF8_encoding_module_init(_UTF8EncodingInfo * __restrict ei __unused,
+_citrus_UTF8_encoding_module_init(_UTF8EncodingInfo * __restrict ei,
     const void * __restrict var __unused, size_t lenvar __unused)
 {

+      memset((void *)ei, 0, sizeof(*ei));
+
+      parse_variable(ei, var, lenvar);
+
       return (0);
 }

--- share/i18n/esdb/UTF/Makefile.orig
+++ share/i18n/esdb/UTF/Makefile
@@ -25,6 +25,8 @@ UTF-32-SWAPPED-mod= UTF1632
 UTF-32-SWAPPED-var= utf32,swapped,force
 UTF-8-mod= UTF8
 UTF-8-var= utf8
+UTF-8-MS-mod= UTF8
+UTF-8-MS-var= utf8,ms
 UTF-7-mod= UTF7
 UTF-7-var= utf7

--- share/i18n/esdb/UTF/UTF.part.orig
+++ share/i18n/esdb/UTF/UTF.part
@@ -2,6 +2,7 @@

 7
 8
+8-MS
 16
 16BE
 16LE

一応、Windows側のUnicode符号位置の利用状況を許容して、FreeBSD側でEUC-JP互換なUnicode符号位置でSambaを運用する準備が出来たはず…


2024-07-09 [長年日記]

_ [FreeBSD]Microsoft UCS互換運用の話

  • Samba - unix charsetにiconvでサポートされるunix側のエンコーディングを設定出来る
    • smb4.confunix charset先日追加したUTF-8-MSを指定することで、例えばパス中の「〜」がWindows側からはU+FF5E(FULLWIDTH TILDE)・FreeBSD側からはWAVE DASH(U+301C)で運用出きることを確認
  • msdosfs - lib/libkiconv/quirks.cにネタ帳(MS向けのUCSコードポイント置換表とエンコーディングの別名定義)があるので、ここを拡張すればいける? UTF-8サポートは全然別の場所だった
    • libkiconvが変換テーブルのロードに使っているAPIは、2byte文字前提ぽぃ(3byte文字サポートを有効にするマクロがあるようだが、メンテされてるのか?)
    • UTF-8はどうやってるのだろう…UCS/UTF系だけ専用モジュール(sys/libkern/iconv_ucs.c)になっている模様
    • 保有している変換テーブルの公開は、モジュール初期化子iconv_ucs_initからiconv_addで登録する
      • 初期状態で、UTF-16BE -> UTF-8, UTF-8 -> UTF-16BEが公開されている
      • モジュール自体は、UTF-16LE・UCS-2LEをサポートしてる模様
    • 改造方針
      • sys/libkern/iconv_ucs.cを改造し、UTF-8-MSを実装する
      • UTF-8-MSをunicode_familyに登録し、専用フラグを付与する
      • iconv_ucs_initで UTF-16BE / UTF-8-MS間の変換マップを公開する
      • iconv_ucs_convに専用フラグ付きの際にUCS-4コードポイントの変換を差し込む
        • UTF-8のデコード後とUTF-8エンコード前の2ヶ所
        • 変換マップは、Citrus iconvの改造パッチから持ってくる
      • lib/libkiconv/quirks.cにquirksを追加し、UTF-8 locale時にlocal filesystem encodingにUTF-8-MSを指定する
  • ntfs(ports/sysutils/fusefs-ntfs)
    • use_utf8モード時は、UTF-16LEの内部コードとUTF-8の相互変換はlibntfs-3g/unistr.cに自前の実装を持っている
    • NTFSファイル名は、MicrosoftなUCSで符号化されているので、換字テーブルをunistr.cに持ち込むのが素直か?

実装完了〜

Linux/SambaなNASからのNFSマウントを除けば、MicrosoftなUCS符号位置のファイルは見ずに済むようになった


2024-07-22 [長年日記]

_ [雑記]東海道新幹線不通…

保線作業車とはいえ追突事故ってことは、鉄道の基本である閉塞管理が出来ていないということなので、かなり深刻なのでは?

保線作業中の作業車の運行管理に纏わる人員の疲弊・不足なのかなぁ…


2024-07-24 [長年日記]

_ [tDiary]weather pluginまた死んでた…

https://www.aviationweather.gov/からの情報取得ページのURLが変わってる Orz

Raw dataボタンから先のページがtableベースのhtmlなので、解析器の想定する入力はこれかなぁ…

あと、Conditions at fieldのformatが変わっているようなので、 解析器を拡張…

一応、動くようになったかなぁ…

_ [雑記]PCケース整備中

この夏のRyzen 9950X導入で余るRyzen 7950XでWindows PCを更新するために、 SILVERSTONE SST-FA513-B-Cで筐体を整備中

ラック下段にPCケースを収容する関係で、ATX・光学ドライブ搭載可・USB 3(出来ればType-Cも)サポート・USBコネクタ類がケース前方/上方に存在だと現行流通品だとこれぐらいしか残らない

遮音扉が付くAntec P10系も魅力的だが、コネクタ類が天板右端に並ぶ関係で、ケースをラックの棚板の下に格納すると、USBメモリとかが挿入しにくいので除外 (mATXケースのP5を素直にATX化して、USB-Cを追加したモデルが欲しいところ)

Fractal Design Define 7も構造・作業性的によさげだが、E-ATX仕様で奥行き長すぎ・幅広すぎ (あと重い)

Define 7 Compactが大きさ的に手頃なのだが、光学ドライブベイが無くなるので、Windowsゲームを動かす筐体としては不適に Orz

当該筐体に別件で使用予定のGIGABYTE B760M D3Hを載せてテスト中なのだが、memtest86レベルでエラーが出る

電源系のコネクタ接続不良(電圧不安定)かメモリモジュールの挿入不良か? (筐体への光学ドライブ組み付けやCPU/VGAケーブルの裏配線整理をする前は、こんな変な動きは無かった気がするのだが)

Rapter Lake RefreshなCore i5を載せているので、例のCPU不良問題が気になる… Orz


2024-07-25 [長年日記]

_ [雑記]Ryzen 9000遅延

販売は、8月中旬まで遅くなるという話が出てきた…

8コア以下のモデルが先行で、12/16コアモデルはその後になるとか

予定が崩れる〜〜 Orz

ワールドワイドが、8/8(8コア以下)と8/15(16コア解禁)だとすると、 金曜合わせなら8/9と8/16かなぁ…


2024-07-26 [長年日記]

_ [雑記]Raptor Lake・Raptor Lake Refreshの不具合

Intelが電圧制御にまつわるミクロコードの実装ミスを認めたとか、 小売でのRaptor Lake系の不良交換率がAlder Lakeの4倍あるという統計がでたとか、 Rapter LakeのB0 stepの製造プロセスの欠陥で素子の劣化が早いのではという指摘があるとか、だいぶキナ臭くなってきた

製造プロセス起因の素子劣化の早さが原因だと、 電圧制御のエラッタは不具合発生を促進しているだけで、 同一製造プロセスを経たチップはどれも時限爆弾付きということに…

Core i5 nonKモデルもあかんのか?

ノートのほうはMetor Lake-Pなので、多分製造プロセスが違うとは思うが…


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記