昔は$400だったcscope
tips for dog
とある小説を読んでいたら、獰猛な犬をてなずける方法が出て来てた。作者さんの創作? いや、そんな事は無いだろう。何かネタが有るはず。みんなに聞いてみたぞ。
まあ、色々出てくるんで、事実なのだろう。
猛犬注意な所にも出掛ける必要がある、あの人達には常識だったりして。会社から 支給されてるのかな。後は、警察犬とか麻薬探知犬に立ち向かう、悪い人御用達かな。 いや、そんな事は無いだろう。ちゃんと訓練されるだろうに。
eiθ
chatonで、,d を紹介頂いたけど使い道が解らず、Gauche本を読み直してみるかな。ちょっと悔しいので、eiθ が、どのように実現されてるかソースの森に分け入ってみる。
まず見付たのがこれ。オイラーさんがソースの中に鎮座してるっぽい。 src/number.c
ScmObj Scm_MakeComplexPolar(double mag, double angle) { double real = mag * cos(angle); double imag = mag * sin(angle); if (imag == 0.0) return Scm_MakeFlonum(real); else return Scm_MakeCompnum(real, imag); }
そして、こういう楽しいものも見付てしまった。犬も歩けばってやつですな。
static ScmObj scm_expt(ScmObj x, ScmObj y, int vmp) : } else if (dx < 0 && !Scm_IntegerP(y)) { /* x^y == exp(y * log(x)) = exp(y*log(|x|))*exp(y*arg(x)*i) if x is a negative real number, arg(x) == pi */ double mag = exp(dy * log(-dx)); return Scm_MakeComplex(mag * Scm_CosPi(dy), mag * Scm_SinPi(dy));
ここまででは、証明が完成していない、中途半端状態、更に脳汁を流して探索。 src/libnum.scm (libnum.c)
(define-cproc make-polar (r::<double> t::<double>) :constant Scm_MakeComplexPolar) ;; Now, handles complex numbers. ;; Cf. Teiji Takagi: "Kaiseki Gairon" pp.193--198 (define-in-module scheme (exp z) (cond [(real? z) (%exp z)] [(complex? z) (make-polar (%exp (real-part z)) (imag-part z))] [else (error "number required, but got" z)]))
Q.E.D. と、一度書いてみたかったのよ。
ここまで、ArchLinuxのコンソールでgoshが正しく動かない問題から始まって、それがFreeBSDにも飛び火してしまって、迷宮入りになった事を書いてきたけど、軌道を戻します。
sortを調べていたんだ。その過程で、ソースを楽に読む方法も模索してた。以下は、その骨子に肉付けしてきます。
cflow
どこかのサイトで見付たもの。
例によって、詳しくは、info cflow ですよ。8 Using ASCII Art to Produce Flow Graphs. そうか、ソースコードは芸術品なのか。
vbox$ cflow --tree --brief --cpp sort.c +-main() <int main (int argc, char *argv[]) at sort.c:793> +-set_hw_params() <void set_hw_params (void) at sort.c:202> | +-sysctl() | +-getrlimit() | +-setrlimit() | \-warn() <void warn (const char *, ...) at /usr/include/err.h:55> +-pledge() :
$400
以前、vimをやってた時、対抗でnviを調べていたんだ。そしたら、 そこに付属してたFAQに面白い記述を発見。なお、OpenBSDのviは実体がnvi。
Q: Where can I get cscope? A: Cscope is available on UNIXWare System V Release 4.0 variants such as Sun Solaris 2.x (/opt/SUNWspro/bin) and UNIXWare System V Release 4.1. You can buy version 13.3 source with an unrestricted license for $400 from AT&T Software Solutions by calling +1-800-462-8146. Binary redistribution of cscope is an additional $1500, one-time flat fee. For more information, see http://www.unipress.com/att/new/cscope.html.
どうやらcscopeというプロ仕様っぽい、ソースの解析ツールが有るっぽい。
cscopeを使おうと思ったら昔は400ドル出してアメリカの電電公社から購入するしかなかったのね。今は良い世の中だのう。有り難く、心して使えよ。
なお、このFAQは、@(#)FAQ 8.13 (Berkeley) 10/14/96 こういう古文書。FreeBSDの寄贈エリアにあるviにも、リナのnviのソースを辿っても見付からない。ちゃんと残してくれているOpenBSDは偉いなあ。と、おじさんモード全開ですよ。
doxygen with graphviz
Debianだと、doxygenを入れるだけで、グラフツールも自動でインストールされる。
後は、ソースのある所で、doxywizardを起動すれば、GUIなツールが立ち上がってくる。 そこで、ソースの場所、オプションでC言語の指定、グラフの有効化、LATEXは不必要等を設定。そして、generateして閲覧ボタンを押せばよい。ブラウザーが立ち上がって、後は呼出状況などを確認出来る。
Doxyfileと言う設定ファイルを残せるので、後で微調整出来るぞ。それからhtml/ と言うdirの中に、作成されたグラフとかが格納されてる。
Windows Time
前回からWindowsを止める時、sleepを使ってる。起動も速くて便利。 起動した時、ちゃんと現実の時刻になる(あたり前)んだけど、タスクマネージャのパフォーマンスを選んだ時、稼動時間ってのが出て来る。これが謎の時間を刻んでる。
今だと、18:07:05:23 ってなってた。最上位は日だろう。いつからの? 大体見当はつくけど、確認しる。rubyで時刻の引き算してみる。
irb(main):005:0> d = 86400*18 + 3600*7 + 60*5 + 23 => 1580723 irb(main):006:0> Time.now - d => 2022-08-10 06:48:03.087408594 +0900
86400は1日の秒数ね。
8月10日は、第二水曜日だなあ。恒例のWindows Updateの日でした。 deep bootされて、そこからの経過時間なんだな。
Q.E.D.
ネットワークのWiFi使用量も、起動時にリセットされるんだな。