トップ «前の日(07-08) 最新 次の日(07-10)» 追記

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|

2008-07-09

_ [LHC]Transfer Matrixのフィッティング

軌道応答に対してTransfer Matrixを当てはめる動作原理自体には 問題は無いようなので、ツール形式のものを作成&テストベクターを 作って入出力の検証を開始。

ラフなテストでは、エラーに対する感度がβ関数のフィットよりも 厳しいような感触なのが気がかりだが、それ以上に致命的なのが 実行速度で、テストデータで共役勾配法が収束するのに手元の NotePCで2時間以上かかる。

βのフィットが数分のオーダーで終わることを考えると100倍程度遅い。 使っている軌道の本数の差を考慮しても 20倍以上遅いので、 オンラインでの使用には厳しいだろう。

ただ、問題の次元数を考えると当然の結果かもしれない。 β関数のフィットの場合、軌道に摂動をかけるステアリング側の β関数と位相関数をパラメータにして計算しているのに対して、 Transfer Matrixのフィットでは各BPMに 3自由度 (実際には4自由度&行列式への拘束条件)を与えて計算しているので 「BPMの数 / 軌道の数」の比で演算量が増えている。 それなりに実用的な条件を想定すると、「BPMの数 >> 軌道の数」が 成立するので、激しく重くなる。


2014-07-09

_ [FreeBSD]10-STABLEへの移行

一台実施

portsのリビルドに関して、メモを残す

  • print/texinfoはアンインストールしておくの良い
  • print/qpdfは、libqpdf.a/libqpdf.soを削除しておかないと linkに失敗する
    • build directoryより /usr/local/libが優先しており GCC 4.2.xと CLANGのC++実装の違いからlinkに失敗する
  • xmkmfを使う portsが居る場合は、IMAKECPPを tradcppに設定しておくこと
    • どうやら devel/imakeで default cppを tradcppに変更する設定が死んでるっぽぃ
    • imakemdep.h内で、__FreeBSD__マクロ経由で USE_CC_Eマクロが設定されている
      • さらに、__GNUC__マクロ経由でも設定する fallbackがあるので両方殺す必要がある
    • ports/Mk/Uses/imake.mk側で環境変数設定が入った(2014.07.23追記)
      • ports的には解決だが、xmkmf/imakeを生で使う人は要注意
  • portupgrade -afする前に、gccを rebuildしておいた方が良い
    • buildに gccが必要だが、9-STABLE上では依存関係が張られていない portsがあるっぽぃ

2019-07-09

_ [Fortran]execute_command_line

waitが真(default)の場合、cmdstat引数を省略するとコマンドが見つからない場合、Fortran runtime errorでプロセスが終了する(gfortran8.3で確認)

waitが偽の場合は、cmdstat引数の有無に依らずexecute_command_lineは成功する (cmdstatの戻り値は常に0、exitstatは更新されない)

非同期実行時にエラーハンドルできなくなる理屈は理解できるが、動作が一貫してない気がする…

さらに調べると、Fortran runtime errorの発生条件は正確にはcommand not foundでは無くexitstatの戻り値で決まる模様(gfortran8.3の実装)

少なくともgfrotran8.2の実装では、exitsat=127だとFortran runtime errorとなる(exitstat=126も同様)

call execute_command_line('exit 1', exitstat=i)
write(*,*)'exit 1 -> ', i
call execute_command_line('exit 127', exitstat=i)
write(*,*)'exit 127 -> ', i

libgfotranをバラしてみるとそのものズバリのコードが

      /* Synchronous execution.  */
      int res = system (cmd);

      if (res == -1)
        set_cmdstat (cmdstat, EXEC_SYSTEMFAILED);
#ifndef HAVE_FORK
      else if (!wait)
        set_cmdstat (cmdstat, EXEC_SYNCHRONOUS);
#endif
      else if (res == 127 || res == 126
#if defined(WEXITSTATUS) && defined(WIFEXITED)
               || (WIFEXITED(res) && WEXITSTATUS(res) == 127)
               || (WIFEXITED(res) && WEXITSTATUS(res) == 126)
#endif
               )
        /* Shell return codes 126 and 127 mean that the command line could
           not be executed for various reasons.  */
        set_cmdstat (cmdstat, EXEC_INVALIDCOMMAND);
      else
        set_cmdstat (cmdstat, EXEC_NOERROR);

stdoutのredirectionまで考慮すると、自前でsystem(3)総統を実装すべきか? (シグナル処理回りの可搬性が気になる所だが…)

_ [FreeBSD]TODOリスト

  • samba4.10への移行
    • sysvol向けのNFSv4 ACLサポートらしいので、PDCを再構築してZVOLを放逐する
  • postfixへの乗り換え
    • 秋にOCNが、送信時のSMTP-AUTHを必須にするので、postfixで実装し直す
    • qmailのSMTP-AUTH回りは、パッチの管理が面倒そうなので、これを機にpostfixへ乗り換える
    • まずは、localhost上のSMTPサーバーをpostfixで構成してみる
    • account-ext形式のアドレスサポートは、postfixには無いので要注意
      • 現在設定中の拡張アドレスのリストをまとめておく事

2021-07-09

_ [SAD]Intersection/Complement再実装完了

一応、sort_utils.hとseq_utils.hを使ったIntersection/Complement実装が完了

これで、Sort/Union/Intersection/Complementに関しては、SADインタプリタスタックに依存せずに処理可能になったはず

_ [SAD]sequence utility

とりあえず、基本機能は実装完了

  • alloc/free/delete
  • List containerとの相互変換
  • sequenceのsort/union操作
  • 整列済みsequenceに対するbsearch

実装途中で整理が必要なのは

  • concat系 - catとncatに分けて整理する?

実用上必要なのが、

  • duplicate (alloc + catでも代用可能だけど、コーディング的には欲しい)
  • insert等の挿入操作系
  • 整列済みsequenceへの挿入点検索に必要なlower_bound系
  • Null頭部の展開付きのconcat系
    • stkall系の置き換え用途
      • Map実装を考えると insert系も必要か?
    • 再帰ありと再帰なしを個別に実装すべきかは、use caseを調べる
  • Map/Scan系の実装用途に container iterator

実用上、Join/Map関連が再実装できると、長いリストが気軽に扱える用になってGood

_ [SAD]stringbuf

実装の整理を目的にAPIよstring-buffer構造体の中身と動作の調査を開始…

コンソール向けに出力幅制御関連の妙な仕掛けが多く、関連コードが散らかっている・パラメータがilist配列のインデックスのみで無名なので、意味論の解読に骨が折れる Orz

_ [SAD]アイデアメモ(zero argument stack)

一部のイケてない実装 (arguemnt数確認前にstackを読み出すおバカさん)のために、関数コール前に zero arguement時に Nullを積み込んでいる実装の副作用で引数エラー回りの処理が面倒になっているので解決したい

アイデア段階だけど、次のような手順で直せばいいのでは?

  • Phase.1 - Nullをputするけど stack pointerは増やさない
    • まともなコードは、zero argumentとして認識する
    • イケてない実装は、Nullを読み出しエラーにはならない
  • Phase.2 - Nullの代わりに、参照解決時に必ずCoredumpするオブジェクトを積んでおく
    • ランタイムにイケてない実装コードを捕まえる実装
    • 最低1引数だと思って、isp - 1にアクセスするバカは何か変なものを食べる

_ [FreeBSD][IPv6]Load to IPv6 gateway

とりあえず、NPTv6の予備的な試験でipfwのcrashを見つけた int_prefix/nなprefixlen付き表記を使うと落ちる

ipfw nptv6 foo create ext_if em0 int_prefix ####::/64

int_prefixにprefixlenを含めず、別途prefixlenパラメータを指定するのはOK

sbin/ipfw/nptv6.cnptv6_createのバグで、nptv6_parse_prefixでデコードした結果にprefixlenが含まれる際にgoto check_prefix;でprefixlenの範囲を検査するコードに委譲するのだが、先方はprefixlenオプション直後のchar pointer pの指す内容も検査しているため、未初期化ポインタによる参照でcrashする

とりあえず、check_prefixラベルの前後にポインタ検査とplenの検査を分離して解決

やはり、main(14-CURRENT)も治ってないぽぃ

あまり使ったという話が流れてないので、誰も使ってないのかなぁ・・・

IPv6 LAN向けの検証作業

  • NPTv6
  • IPv6 gateway
  • unbound over IPv6
    • 設定の仕込み
    • 自動設定ツールのIPv6サポート
  • LAN側 RA および DNS cache server告知

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符号位置のファイルは見ずに済むようになった


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