昔は$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使用量も、起動時にリセットされるんだな。