内蔵ディスクをSSDに換装してすぐにbootしなくなった。
あれ?
どうやら内蔵ディスクをbootディスクと認識していないようだ。おかしいなぁ。もしかしたらパーティションの拡張をしたときになんか、やっちゃったのかなぁ 1。
とりあえず、bootコードをぶちこむ。
gpart bootcode -p /boot/boot1.efifat -i 1 ada0
内蔵ディスクをSSDに換装してすぐにbootしなくなった。
あれ?
どうやら内蔵ディスクをbootディスクと認識していないようだ。おかしいなぁ。もしかしたらパーティションの拡張をしたときになんか、やっちゃったのかなぁ 1。
とりあえず、bootコードをぶちこむ。
gpart bootcode -p /boot/boot1.efifat -i 1 ada0
Beelink S1のディスクは いろいろあってハードディスクにしていたのだけれど、容量が40Gしかない。やはり128Gある、SSDに交換しよう。どうすれば、いいかな……。
FreeBSDのインストールUSBからBeelink S1を立ち上げて、ddコマンドで40Gの中身を丸ごとコピーすることにした。内蔵ディスクの40Gから 「ORICO USB3.0 HDDスタンド」へ接続した128Gへ。
dd if=/dev/ada0 of=/dev/da0 bs=1m
内蔵ディスクをSSDに取り替えてboot。
立ち上がった。ZFSは勝手に空きを使ってくれるんだよね……と思っていたらあれ?
$ df -h df -h Filesystem Size Used Avail Capacity Mounted on zroot/ROOT/default 26G 7.0G 19G 27% / devfs 1.0K 1.0K 0B 100% /dev zroot/var/mail 19G 200K 19G 0% /var/mail zroot/var/audit 19G 88K 19G 0% /var/audit zroot/usr/ports 20G 696M 19G 3% /usr/ports zroot/usr/home 20G 318M 19G 2% /usr/home zroot/usr/src 19G 88K 19G 0% /usr/src zroot/tmp 19G 6.4M 19G 0% /tmp zroot 19G 88K 19G 0% /zroot zroot/var/crash 20G 614M 19G 3% /var/crash zroot/var/log 19G 700K 19G 0% /var/log zroot/var/tmp 19G 88K 19G 0% /var/tmp $
40Gしか認識してねえ。
zpool online -e zroot
でもだめで、
$ zfs list zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 14.7G 19.2G 88K /zroot zroot/ROOT 11.5G 19.2G 88K none zroot/ROOT/default 11.5G 19.2G 6.95G / zroot/tmp 10.3M 19.2G 6.39M /tmp zroot/usr 2.47G 19.2G 88K /usr zroot/usr/home 1.78G 19.2G 318M /usr/home zroot/usr/ports 706M 19.2G 696M /usr/ports zroot/usr/src 144K 19.2G 88K /usr/src zroot/var 624M 19.2G 88K /var zroot/var/audit 144K 19.2G 88K /var/audit zroot/var/crash 615M 19.2G 614M /var/crash zroot/var/log 6.36M 19.2G 700K /var/log zroot/var/mail 2.18M 19.2G 200K /var/mail zroot/var/tmp 496K 19.2G 88K /var/tmp $
認識してくれない。うーむ。
$ gpart show ada0 gpart show ada0 => 40 78140080 ada0 GPT (119G) 40 409600 1 efi (200M) 409640 1024 2 freebsd-boot (512K) 410664 984 - free - (492K) 411648 4194304 3 freebsd-swap (2.0G) 4605952 73533440 4 freebsd-zfs (35G) 78139392 728 - free - (364K)
gpartで見てみると、なるほど。ada0は119Gあるのに、zfsの領域を35Gしか、認識していない。これか。調べてみると、gpartにはresizeというサブコマンドがある。こうか?
$ sudo gpart resize -i 4 ada0 sudo gpart resize -i 4 ada0 ada0p4 resized $ gpart show ada0 gpart show ada0 => 40 250069600 ada0 GPT (119G) 40 409600 1 efi (200M) 409640 1024 2 freebsd-boot (512K) 410664 984 - free - (492K) 411648 4194304 3 freebsd-swap (2.0G) 4605952 245463688 4 freebsd-zfs (117G)
うまくいった。
けれど、これだけではまだ、足りなくてZFSの方で認識してくれてなかった。なのであらためて。
zpool online -e zroot
$ zfs list zfs list NAME USED AVAIL REFER MOUNTPOINT zroot 14.6G 98.7G 88K /zroot zroot/ROOT 11.5G 98.7G 88K none zroot/ROOT/default 11.5G 98.7G 6.96G / zroot/tmp 10.4M 98.7G 6.39M /tmp zroot/usr 2.46G 98.7G 88K /usr zroot/usr/home 1.77G 98.7G 315M /usr/home zroot/usr/ports 706M 98.7G 696M /usr/ports zroot/usr/src 144K 98.7G 88K /usr/src zroot/var 624M 98.7G 88K /var zroot/var/audit 144K 98.7G 88K /var/audit zroot/var/crash 615M 98.7G 614M /var/crash zroot/var/log 6.39M 98.7G 720K /var/log zroot/var/mail 2.09M 98.7G 200K /var/mail zroot/var/tmp 504K 98.7G 88K /var/tmp $
いきましたね。よかったよかった 1。
実はいつか、わからないけどbootコードを壊してしまっていたのだった。
org-modeの「org-table-convert-region」で表に変換するとき、よく縦横変換したいことがある。自前で状況に特化した簡単なコードを書いていたんだけど、org-table.elにそんなfunctionがないはずがない。本気で探してみたらあった。
(org-table-transpose-table-at-point)
まんまの*Help*がでてきた。
org-table-transpose-table-at-point is an interactive compiled Lisp function in ‘org-table.el’. (org-table-transpose-table-at-point) Transpose Org table at point and eliminate hlines. So a table like | 1 | 2 | 4 | 5 | |---+---+---+---| | a | b | c | d | | e | f | g | h | will be transposed as | 1 | a | e | | 2 | b | f | | 4 | c | g | | 5 | d | h | Note that horizontal lines disappear. [back]
読了した本の作者とタイトルを日記にメモしている。
で、最近までこうしていた。
いちいち手入力していたかつてにくらべれば、はるかに楽なのだけれど。
3. が面倒だ。自動化しよう。Emacsならクリップボードの内容を取り込めるわけで……と考えていたところ、そもそもコピー操作すら不要にできんじゃね?
とくに3. で整形するとき、ベタテキストよりもデータが構造化されているので楽だ。しかもブラウザのダウンロード先は決まっているので、そのフォルダの最新のファイルを対象にすれば、いい。
むっちゃ楽になるんじゃね?
それだけじゃない。
ブラウザでひらいたデータはそうやって取り込めるじゃないか。
Amazonの注文履歴とか、もろもろ。
UPDATEした。Rasberry PiとBeelink S1。
めずらしく、今回のリリースは心待ちにしていたのだ。
RaspBerry Piで内蔵のwifiが使えるようになっているんじゃないか、と。
まぁ、根拠はなかったのだけど。
リリースノートにもそのようなことは書かれてないし、しかもRaspberry Pi用はバイナリアップデートがサポートされてなかった。面倒だ。でもセキュリティがらみのパッチを取り込むためにもやった方がいいんだろうなぁ1。外からさわれるようなところには置いてないけど——うーん。
そういえば、BUFFALO WLI-UC-GN2がなくなったのは絶対、うちのやんちゃ娘のせいだよな……。
で、本箱がわりにしていたダンボール箱をどかしてみると——そこに落ちていた、BUFFALO WLI-UC-GN2。
あれ? 期せずしてRaspberry Piが無線LANに繋げるようになってしまった。
元々、Beelink S1経由で無線LANには繋げることはできたのだけれど、Raspberry Piを使うためだけに、Beelink S1の電源をいれるのに抵抗があったのだ。なんか、負けみたいな気がして——それが解決してしまった。
とりあえず、アップデートの前にBUFFALO WLI-UC-GN2を使って無線LANに繋がることを確認したあと、別のSDカードに12.1をインストール。Emacsとか、PostgreSQLとか、パッケージをいれてから、/etcの下の各種設定、ホームディレクトリの下、postgresqlのデータをごっそりコピー。
動かないところを調整して——ユーザのclass定義とか、localtimeの設定とか——、動作確認。
あとはBeelink S1をUPDATE。こちらはバイナリアップデートができるので、ここのとおりに。
もしかすると、ソースを展開してコンパイルからやれば、できたのかもしれない、アップデート。
fletの使い所がいまいち、わからなかった。
たとえば、dom.elを使ってhtml——tableを生成してみる。
(setq wrk (dom-node 'table nil (dom-node 'tr nil (dom-node 'td nil "123")))) (table nil (tr nil (td nil "123"))) (svg-print wrk) <table> <tr> <td> 123</td></tr></table>nil
こんな感じになるけど、なんか、わかりづらい。
構造はhtmlと同じになっているけど、dom-nodeを呼び出しているせいで視認性が悪くなっている。htmlを書くようにコードを書けるのがいいんだろうけど……あれ、じゃ、fletでこうできるんじゃね?
(flet ((table (&optional attributes &rest children) (apply 'dom-node 'table attributes children)) (tr (&optional attributes &rest children) (apply 'dom-node 'tbody attributes children)) (td (&optional attributes &rest children) (apply 'dom-node 'tbody attributes children))) (table nil (tr nil (td nil "123")))) (table nil (tbody nil (tbody nil "123")))
ああ、そうか。
fletの定義をマクロで隠蔽したらほとんど、htmlを書いているようになるんだ。
なんだ、これ。
すげえ。
csvファイルからデータを取り込むとき、カンマ区切りで文字列をスプリットするけれど。
(split-string "1,2,3" ",") ("1" "2" "3")
逆がないなぁ。
そう思って昔、小物ツールをでっちあげた。
(defun list-concate(list &optional separators) "listの要素にseparatorsを挿入した文字列を生成する" (car (split-string (apply 'concat (mapcar (lambda(x)(concat x separators)) list)) (concat separators "$")))) (list-concate '("1" "2" "3") ",") "1,2,3"
けっこうダサイ。
最後のseparatorsを削るためにわざわざsplit-stringを使っているとか。
ふと気づくと、mapconcatというのが、elispのbuilt-in functionに追加されていた。
(mapconcat 'concat '("1" "2" "3") ",") "1,2,3"
MacをCatalinaへアップグレードした。
そうしたらMacBook Airの挙動がおかしくなった。
Documentsフォルダに権限がなくてアクセスできないなんてありえないだろ。
あわててバックアップから戻そうとしたらローカルバックアップがうまく取れてなくて1週間前の状態にもどす羽目に——しかもネットワークにあるバックアップにアクセスできなくなるし。すったもんだでなんとか、元にもどしてゼーハー。
それでカッとなって「brew upgrade」をしてしまった1。
で、気づくと、maximaが動かない。
maximaはアップグレードされてないのに、SBCLがアップグレートされたためだ2。
うーん、としばらく考えて。
brew reinstall --build-from-source maxima
buildしなおす。
ところが今度はimaximaがおかしい。Ghostscriptが問題のようなメッセージがでた。ghostscriptはちゃんとインストールされているんだけどなぁ。古いバージョンでないと、動かないのかなぁ。いろいろやっていてふと気づく。
あれ?
gs -h
で表示されるバージョンと、
brew info Ghostscript
で表示されるバージョンがちがう。
見ると、「/usr/local/bin/gs」はbrewとはちがうものだった。
どこでどうやってまぎれこんだのか、さっぱり覚えがない。rootでインストールされているから「basictex」をインストールしたときがあやしいが、完全に置きかえてしまうのは不安だ。
なのでimaximaが使う「gs」を直接、変更した。
(setq imaxima-gs-program "/usr/local/Cellar/ghostscript/9.50/bin/gs")
うん、動くようになった。
まったく意味不明な衝動的な行動。
きっかけはガルパンだった。
Wikipediaを見ていたらスピンオフしたコミック——「リボンの武者」を読んでみたくなったのだ。でもなぁ、東日本大震災以来、あまり本を所有したくない。命にかかわる。
けれど電子書籍には抵抗がまだ、ある。
自炊しているけど、まったくといっていいほど、読んでいない。あれは本を持たないようにするための方便だ。
買いにいくにしてもこのところ、リアル書店へ行ったことがない。
結局、Amazonの電子書籍を購入することにした。
あっという間に既刊十数冊すべてと、ほかのコミカライズ作品も買いまくってしまった。さらにノベライズまで。一気読んだ。目が痛くなる。馴れなのかもしれないけれど、iPadでの長時間の読書はやはりきびしい。目がかすむ。
kindleの端末ならだいじょうぶかもしれない、とちょっと調べてみたけれど、どうやらマンガには向いていないらしい。
ガルパンの手に入るだけの作品を手に入れると——ドラマCDも買った——、しばらくのあいだはおとなしくしていた。時々、期間限定と銘打って無料提供されているコミックを読んだりする程度だった。
ふと思い出したのは、3巻まで追いかけていた、ひじかた憂峰/たなか亜希夫「リバースエッジ大川端探偵社」のこと。あれ、どうなったんだろう。チェックしてみたら10巻まででていた。えっ、そうなの。それを読み出したのが運の尽き——数巻、購入したところで、「リバースエッジ」はKindle Unlimitedになっていることに気づいた。
脊髄反射で登録してしまった。
あとは読みまくる。ひたすら読みまくる。子どものころに読んでいたマンガも、押川雲太朗の麻雀マンガも、読んでなかった「進撃の巨人」の25巻から29巻を買い、期間限定で読んではまった「美女で野獣」「デストロ256」、「謎の彼女X」を最終巻まで、「ハナカク」「科学的に存在しうるクリーチャー娘の観察日誌」を最新巻まで……。
何をやっておるのか。
やばい。えらい出費だ。
けれど子どものころに読んでまた、読んでみたいと思っていた桑田次郎の諸作品や、真崎守「ホモ・ウォラント」とも出会えた。新しいバージョンの「青の6号」も読めたし。ま、いっか。
dom.elがあるならもしかしてsvg.elも……、と思ったら。
(require 'svg) svg
——あった。
というか、Emacsでsvgを表示できるとは。知らなかった。ビルドのオプション次第らしいけれど。
しかもshr.elの
shr-insert-document is an autoloaded Lisp function in ‘shr.el’.
(shr-insert-document DOM)
Render the parsed document DOM into the current buffer.
DOM should be a parse tree as generated by
‘libxml-parse-html-region’ or similar.
を使ってバッファに流しこめるじゃないか。image-modeを使って表示するだけではなく。
そのうえ、昔は「libxml-parse-html-region」「libxml-parse-xml-region」でlistにしたものを元にhtmlやxmlに戻す関数は見当たらなかったのだけど。
svg.elの中にまさにそのような関数があった。
svg-print is a compiled Lisp function in ‘svg.el’.
(svg-print DOM)
Convert DOM into a string containing the xml representation.
いや、Emacs最高。
GPXのファイルのデータをいじったり、競馬のデータを取りこむために、「libxml-parse-html-region」や「libxml-parse-xml-region」を使っているのだけれど、さすがにlistに変換してくれるとはいえ、それを舐めて必要なデータに取り出すのは少々、面倒くさい。
手間だ。
domとか、あれば、いいのに。
(require 'dom) dom
ってあるじゃん。(dom-by-id DOM MATCH)とか、(dom-by-class DOM MATCH)とか。ここで引数でわたすDOMは「libxml-parse-xml-region」で変換したlistだと見当をつけて試してみたところ、ビンゴだった。
ああ、今までつくったツールをこれに置き換えたい。
-No- | 時刻 | 時間 | 帆走距離 | 最高速 | 平均時速 | P% |
---|---|---|---|---|---|---|
1 | 11:58-12:07 | 8分 | 1.0km | 29.98km/h | 6.53km/h | 20.90 |
total 8分 1.0km 6.5km/h
吹きすぎる予感はあったのだけれど、それでも4.7 + 255ならなんとか、なるだろう、とたかをくくっていたらそんなことはなかった。
しかもトップバテンが折れていたことをすっかり忘れていたし。
渋々、ブーム長があってないのであまり張りたくない4.2をセッティングした。
ところがさらに風はあがって二時間近く呆然と砂浜にたたずむしか、できなかった。。
——撤収。
たとえば、ホームディレクトリの下の「.txt」ファイル。
(UIOP:DIRECTORY-FILES (UIOP/PATHNAME:WILDEN "~/") "*.txt")
知っているのにわかってなかった、というのをあらわす言葉はなんていうんだろう……。
お金の管理にはGnuCashを使っているのだけど、毎回、入力するのがやはり面倒で、こういうのは小まめに入力するのが吉——というわけで毎日、入力している。そうすると、同じ項目の入力がくりかえされていることに気づく。
ある日、取引をコピーすれば、いいことに気づいてそれでずいぶんと入力が楽になった。
それでも月いちとかに発生する取引——家賃とか、生活費とか、駐車場の支払いとかの入力するのがなぁ……表をたどってコピー元になる取引を探さなければならないのでやはり面倒くさい。
うーん……。
——これって予定取引を定義すれば、いいんじゃね?
おくればせながらようやくそのことに気づいた。予定取引の存在は知っていたのに。
そういうことに使うということにまったく気づいてなかった……。
やはりこういうものをあらわす言葉は——愚かもの?
-No- | 時刻 | 時間 | 帆走距離 | 最高速 | 平均時速 | P% |
---|---|---|---|---|---|---|
1 | 10:21-10:29 | 7分 | 0.7km | 38.14km/h | 5.88km/h | 14.44 |
2 | 12:07-12:10 | 3分 | 0.2km | 7.14km/h | 2.72km/h | 0.00 |
3 | 12:19-12:34 | 15分 | 1.9km | 33.97km/h | 7.27km/h | 17.77 |
total 26分 2.8km 6.3km/h
雨が激しく降った翌日の東京湾の水質は悪くなるそうで。
そんなことを思い出したせいで気分が憂鬱になってしまった。ひさしぶりの海だということもある。
検見川浜ではすでに五艇ほどが出艇していた。小さめのセイル。風は湿っていて重い。
いずれにしても今日は5.3を使うつもりでいた。前回の経験で4.7+260という組み合わせはいまいちだと感じていたので——それでも5.3はオーバーだよなぁ。思ったより風はないけれど。
セイルをセッティングしていてブームの長さは4.7用のままだったことに気づいた。
それで面倒になった。
4.7をセッティングした。途中でトップバテンが音をたてて折れた。そのままにしておく。
雨が降りはじめた。
風はあがり、4.7ですらオーバーになっていた。
1本でてみてめげた。これは死ぬ。無理。
海上保安庁のサイトをチェックすると、海ほたるで20m/sオーバーだった。
気持ちが前向きになるか、雨があがるか、風がすこし落ちるか、待つ。
正午前ににすこし風が落ちた。
出艇して波打ち際で沈したら何かがおかしくなった。——あれ?
マストは折れてない。セイルも破れてない。でもなんか、おかしい。ジョイントのラバーが切れていた。
はあ……。バテンといい、ジョイントといい、自分自身といい、急に何もかも老化が進んでしまった感じだ。
ジョイントを交換して再出艇。
ところが——元々、ちょうど真ん中ぐらいの波が立つあたりでは風が落ち気味になるのだけれど、そこでウォーターすらままならなくなって嵌まる。体力と反射神経がなくなっていたということもある。水につかっているだけで、息が上がるほどだった。呼吸すらままならない。視界が暗くなった。しかも浜まで流されたらブロックだ。これは死ぬ。
ラッキーが重なってなんとか、帰着できたけれど、出艇した場所よりだいぶん風下だった。
このまま、風はなくなるのかなぁ。5.3にするべきかなぁ、と一休みしていたらまた、風が上がってしまった。
呆然と三時間を過ごしたのち、家に帰った。すごすごと。
それにしてもここまで体力がなくなったのは、三ヶ月入院したとき以来かもしれない。あのときは海に入ることはなかったけれど。
気づいてみれば、当たり前なのだけど。
たとえば、「y=x+5」は次のようなグラフになる。
これを積分すると。
integrate(x+5,x);
となる。
いつもならグラフを描くのに、わざわざ「x2/2+5*x」と、式を手打ちしていたのだけれど、よくよく考えたら直接、呼び出せばいいんじゃね? と気づいた。
plot2d(integrate(x+5,x),[x,0,100])$
うぐぐぐ……。
観てきた。いいわー。劇場のスクリーンいいわー。きれいだわー。 二回戦の聖グロリアーナとアンツィオの戦いもやってくれんかなー。観たいわー。聖グロいちの俊足との戦い。
どうやらmaximaにはplotパッケージのほかにdrawパッケージというのもあるらしい。
「12.1 Introduction to Plotting」にこうある。
追加パッケージ drawはこの節で記述した関数にいくつかの機能を追加した関数を提供します。
plotとdraw。
なんとなく、名前のちがいから立ち位置のちがいがわかるような。
たとえば、plotではあきらめてしまった二直線のあいだを塗り潰すなんてことができるみたいだ。
set_draw_defaults(terminal = 'qt)$ draw2d(user_preamble="set view equal xy",xrange = [0,10],yrange = [0,10],grid=[10,10],filled_func=x-1,explicit(x+1,x,0,10))$
首尾よく「平面図が正方形で、正面図が円で、右側面図も円」が描けたので気をよくした。
よし。次は「平面図が正方形で、正面図が円で、右側面図は正方形」を描いてみようじゃないか。
うーん……っていうか、それってただの円柱じゃね……orz。
「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」のgnuplotのプログラムをつらつら読むと、どうやら正方形をZ軸に沿って積み上げているらしい。
ということはまず、正方形を描けないといけないな。
けれど単純に描くと、discreteを使ってこんな感じになってしまう。
plot2d([discrete,[[-1,-1],[-1,1],[1,1],[1,-1],[-1,-1]]],[x,-2,2],[y,-2,2],same_xy)$
立体にするから三角関数で描く形にした方がよいのだけど
plot2d([discrete,[[cos(0),sin(0)],[cos(0.5*%pi),sin(0.5*%pi)],[cos(%pi),sin(%pi)],[cos(1.5*%pi),sin(1.5*%pi)],[cos(0),sin(0)]]],same_xy)$
これでは、軌跡を描いているわけではないからだめだ。
parametric指定で三角関数で正方形を描くには……うーん、こうか?
plot2d([[parametric,1,sin(t),[t,0,2*%pi]], [parametric,-1,sin(t),[t,0,2*%pi]], [parametric,cos(t),1,[t,0,2*%pi]], [parametric,cos(t),-1,[t,0,2*%pi]]], [x,-2,2],[y,-2,2],same_xy)$
1辺を二回ずつ、描いているところがちょっと嫌だけど、まぁ、いいや。
これを円柱のときのように立体化。
plot3d([[1,sin(t),h],[t,0,2*%pi],[h,-1,1], [-1,sin(t),h],[t,0,2*%pi],[h,-1,1], [cos(t),1,h],[t,0,2*%pi],[h,-1,1], [cos(t),-1,h],[t,0,2*%pi],[h,-1,1]], [x,-2,2],[y,-2,2],[z,-2,2],same_xyz)$
Z軸の位置によってかわる正方形の一辺の長さは三平方の定理からわかるから
半径 = 1 長さ = 2*sqrt(1-z^2)
その分、X,Y座標を調整してやれば、たぶん……。
plot3d([[sqrt(1-h^2),sin(t)*sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1], [-sqrt(1-h^2),sin(t)*sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1], [cos(t)*sqrt(1-h^2),sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1], [cos(t)*sqrt(1-h^2),-sqrt(1-h^2),h],[t,0,2*%pi],[h,-1,1]],same_xyz)$
おっ、できた。
平面図
正面図
右側面図
すばらしい。
そして、45度からの側面
実はこの角度から見たとき、楕円じゃないか、と思ってたしかめたかったのだ。
きっとこれは長軸、正方形の対角線、短軸、正方形の一辺(=円の直径)の楕円だよね。ほー。
竹内薫「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」の中の、平面図が正方形で、正面図が円で、右側面図も円の立体に関する問題。
そこに「Maximaでは複数の3次元グラフを重ねられない」とある。
——ほんと?
と思ったのも、本の中ではgnuplotで図を描いているのだけど、それって変じゃね? と思ったからだ。Maximaもgnuplotで描いているんだから描けそうな気がする。どうなんだろ?
「平面図が正方形で、正面図が円で、右側面図も円」ということは横から見ると、正方形の円柱を寝転がして二個、90度ちがいで重ねれば、よいような……でもそもそも円柱ってどうやれば、いいんだろ?
まずは円か。
これはいちおう、描ける。
plot2d([parametric,cos(t),sin(t),[t,0,2*%pi]],same_xy)$
で、これに高さを与えれば、いいんだから……こうですかね?
plot3d([cos(t),sin(t),h],[t,0,2*%pi],[h,-1,1],same_xy)$
で、これを転がす、と。
plot3d([h,cos(t),sin(t)],[t,0,2*%pi],[h,-1,1],same_xy)$
さらにこれを90度、ずらして二個、描くと。
plot3d([[h,cos(t),sin(t)],[t,0,2*%pi],[h,-1,1],[cos(t),h,sin(t)],[t,0,2*%pi],[h,-1,1]],same_xy)$
——えっ?
やっぱ、3次元グラフを重ねて描けるじゃないか。
まぁ、10年前の本だから当時は描けなかったのかもしれないけれど。
平面図
正面図
——このはみ出ているところを削ることができれば、答えなんだけどなぁ。これはどうすれば、いいんだろう? まぁ、とりあえず、3次元グラフを重ねられるのなら「はじめての数式処理ソフト―Maximaで楽しむ数式計算と物理グラフィック」のgnuplotのプログラムもmaximaできっと書けるんじゃね?
こうかな?
f(z,t):=t*sqrt(1.0-z^2); plot3d([[f(-0.9,u),f(-0.9,v),-0.9],[u,-1,1],[v,-1,1], [f(-0.8,u),f(-0.8,v),-0.8],[u,-1,1],[v,-1,1], [f(-0.7,u),f(-0.7,v),-0.7],[u,-1,1],[v,-1,1], [f(-0.6,u),f(-0.6,v),-0.6],[u,-1,1],[v,-1,1], [f(-0.5,u),f(-0.5,v),-0.5],[u,-1,1],[v,-1,1], [f(-0.4,u),f(-0.4,v),-0.4],[u,-1,1],[v,-1,1], [f(-0.3,u),f(-0.3,v),-0.3],[u,-1,1],[v,-1,1], [f(-0.2,u),f(-0.2,v),-0.2],[u,-1,1],[v,-1,1], [f(-0.1,u),f(-0.1,v),-0.1],[u,-1,1],[v,-1,1], [f(-0.0,u),f(-0.0,v),-0.0],[u,-1,1],[v,-1,1], [f(0.9,u),f(0.9,v),0.9],[u,-1,1],[v,-1,1], [f(0.8,u),f(0.8,v),0.8],[u,-1,1],[v,-1,1], [f(0.7,u),f(0.7,v),0.7],[u,-1,1],[v,-1,1], [f(0.6,u),f(0.6,v),0.6],[u,-1,1],[v,-1,1], [f(0.5,u),f(0.5,v),0.5],[u,-1,1],[v,-1,1], [f(0.4,u),f(0.4,v),0.4],[u,-1,1],[v,-1,1], [f(0.3,u),f(0.3,v),0.3],[u,-1,1],[v,-1,1], [f(0.2,u),f(0.2,v),0.2],[u,-1,1],[v,-1,1], [f(0.1,u),f(0.1,v),0.1],[u,-1,1],[v,-1,1], [f(0.0,u),f(0.0,v),0.0],[u,-1,1],[v,-1,1], [f(u,1),f(u,1),u],[u,-1,1],[v,-1,1], [f(u,1),f(u,-1),u],[u,-1,1],[v,-1,1], [f(v,-1),f(v,1),v],[u,-1,1],[v,-1,1], [f(v,-1),f(v,-1),v],[u,-1,1],[v,-1,1]])$
あかん、むっちゃ、重い。
今だにGrapherではできた
1 > abs(x - y)
のグラフは描けないけれど、そもそも円はどうやって描くのだろう。
Grapherなら
であっさり描けた。円。
ところがgnuplot的にも簡単ではないのか、三角関数を使う方法しか、見当たらない。ちなみに
plot2d(sqrt(2^2-x^2),[x,-5,5],[y,-5,5],same_xy)$
では半円になってしまった。
いろいろ調べてみたらparametricを使えば、いいらしい。三角関数を使うやり方だけど。
で、最終的にinfoに書かれていたのを発見して脱力する。それを元に描く。
plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]]],same_xy)$
ここからおれが得るべき教訓は、まずinfoを見ろ、だな。
三角関数を使わないのなら……半円にはなるわけだから……。
solve()してみる。
ということは
plot2d([sqrt(2^2-x^2),-sqrt(2^2-x^2)],[x,-5,5],[y,-5,5],same_xy)$
で、どうよ。
まぁ、こんなもんか。
と思っていたのだけど、implicit_plotというパッケージを使えば、いちおう描けるみたいだ。
(%i102) load(implicit_plot)$ (%i103) implicit_plot(sqrt(x^2 + y^2) = 2, [x, -5, 5], [y, -5, 5],same_xy)$ (%i104)
MaximaからLispのREPLへ移ることはできるけれど
(%i68) to_lisp(); Type (to-maxima) to restart, ($quit) to quit Maxima. MAXIMA>
これだと、モードは「Inferior Maxima mode」のままなのでかなり不自由。
やはりLispならslimeからだよね。
というわけでMaximaでswankを動かす。
:lisp (load "パス名/swank-loader.lisp" :verbose t) :lisp (swank-loader:init) :lisp (swank::create-server :port 14005 :style :spawn :dont-close t)
あとはポート14005番に「slime-connect」で接続すれば、Maximaを動かしつつ、裏からLispでいじることができる。
(%i7) wrk:444; (%o7) 444
なんてやって
MAXIMA> $wrk 444 MAXIMA> (setq $wrk 678) 678 MAXIMA>
見て変更して
(%i8) wrk;
(%o8) 678
なんてことができる。だからどうした、という話だけれど。
でもきっとこれで、ここ(Lisp)からgnuplotを使えるようになるんだよなぁ。
FreeBSDでimaximaが動いているせいでアスキーアートのmaximaに我慢できなくなった。
MacBook AirにTeXをいれることにする。
今度は用心深く最低限のTeX。
brew install basictex
latexが見えないというのでパスを設定、そのほか。
;; imaxima (setq exec-path (cons "/usr/local/texlive/2019basic/bin/x86_64-darwin" exec-path)) (autoload 'imaxima "imaxima" "Image support for Maxima." t) (autoload 'imath-mode "imath" "Interactive Math minor mode." t) (setq imaxima-fnt-size "large") (setq imaxima-use-maxima-mode-flag t)
やっと数式がきれいになった。グラフのインライン表示もできるようになった。
ただ、Grapherではできた
1 > abs(x - y)
のグラフはどうやったら描けるんだろう? できないのかな?
同梱されているmaxima.elだと、数式はアスキーアートになる。
(%i3) expand ((x + y)^6); 6 5 2 4 3 3 4 2 5 6 (%o3) y + 6 x y + 15 x y + 20 x y + 15 x y + 6 x y + x
それをTeXで
という風に、きれいに表示するimaxima.elもあるので、TeXをインストールした。そうしたらひどい目にあった。
MacTeXをいれたのだが、ディスクが満杯になってしまったのだ。MacBook Airの動きがおかしくなる。いや、もしかしたらMacTeXのせいではなく、タイミングわるく別の何かがあったのかもしれないのだが——。
結局、MacTeXインストール以前の過去にもどることにした。
TimeCapsuleを使って。
——24時間以上かかった。24時間前にもどるのに24時間以上かかるとは。
はあ。
wxMaximaではなぜか、gnuplotがうまく動かないし。突然、ロシア語になるし。
しかたないのでアスキーアートで使うか、といじっていたらdescribe()が効かないことに気づいた。
(%i33) describe(sum);
No exact match found for topic `sum'.
Try `?? sum' (inexact match) instead.
(%o33) false
——はい?
試しにFreeBSDへいれてみたMaximaはちゃんと動く。imaximaもちゃんと動く。数式もきれいだ。もうFreeBSDでいいじゃないか、と思ったけれど、CPUパワーがちがいすぎるし、ネットごしだし、オフラインだと使えない。
SBCLが見えるところにないことが原因か、と
brew install sbcl
したり、
brew install --build-bottle maxima
buildしなおしたりしたけれど、解決せず。
FreeBSDでは出力されていないので原因は起動直後にでるこのwarningらしいのだが。
warning: ignoring an empty documentation index in /usr/local/Cellar/maxima/5.43.0/share/info/./
わからん。なぜだ。
Maximaでswankを動かしてslimeで裏から入って調べてみたりして——ソースを見てみるか、とbuildしたときにもってきたソースをのぞいたらinfoディレクトリの下にあるmaxima-index.lispのサイズが妙にちがう。いかにもな名前だし、このlispが動くことによってdescribe()のデータベースができるのだ、と当たりはつけていたのだけど。
中身をコピーしてみた。
立ち上げなおした。
——動いた。
(%i1) describe(sum); -- Function: sum (<expr>, <i>, <i_0>, <i_1>) Represents a summation of the values of <expr> as the index <i> varies from <i_0> to <i_1>. The noun form ''sum' is displayed as an uppercase letter sigma. 【中略】 (%o1) true
くそお。
Maximaを入れた。
brew install maxima
中身はCommonLispで書かれている、と聞いて興味を引かれたからだ1。元々、Mathematicaがバンドルされていることを知ってRaspberry Piを買うくらいには数学に憧れている文系だ。当然、インストールする。それがCommonLispでできているとなればなおのこと。数学は全然、わからないけれど。
Maxima 5.43.0 http://maxima.sourceforge.net
using Lisp SBCL 1.5.3
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bugreport() provides bug reporting information.
installしていてあれ? と思った。
SBCLがインストールされなかった2。必要なんじゃねーの?
brew info maxima
してみると、
==> Dependencies
Build: sbcl ✘
Required: gettext ✔, gnuplot ✔, rlwrap ✔
となっている。あ、requireではなく、SBCLでbuildされているのか。本体はコアダンプだから必要ないというわけか。
奥の方にしまいこまれるようにMacBook Airには「Grapher」というアプリケーションがある。数式を指定するとグラフを描いてくれる。
y=x
とか。
じゃ、こんなんは?
1 > abs(x - y)
描けた。しかも範囲も認識している。
当然、3Dも描ける。Exampleにはこんなんまである。
しかもマウスでぐりぐり動く。
すげー。数式の意味はさっぱりだけど。
いろいろupgradeしたのでついでにEmacsもupgradeした。
——動かなくなった。
あれ? なんで?
コード系の文句をいわれている。
しかもterminal onlyのようにも見える。
コンパイルオプションはどうなっておるのだ。でも「brew info」では表示されなくなっている。すったもんだしていたらbottoleの中身を見る方法を見つけた。——「brew cat」
bash-3.2$ brew cat emacs brew cat emacs class Emacs < Formula desc "GNU Emacs text editor" homepage "https://www.gnu.org/software/emacs/" url "https://ftp.gnu.org/gnu/emacs/emacs-26.2.tar.xz" mirror "https://ftpmirror.gnu.org/emacs/emacs-26.2.tar.xz" sha256 "151ce69dbe5b809d4492ffae4a4b153b2778459de6deb26f35691e1281a9c58e" bottle do sha256 "dc49de7034346e692662d10ebacd75ea257d61ebba6f57699b855f158e4a7eda" => :mojave sha256 "de836e0766066201968c2dd0ef25ff4458ee532a61dc4ed9d7d8fb284b395b8d" => :high_sierra sha256 "6b07616447d66a8066c08591400dc8fed75d44bf51f81de2e1208635e03204c6" => :sierra end head do url "https://github.com/emacs-mirror/emacs.git" depends_on "autoconf" => :build depends_on "gnu-sed" => :build depends_on "texinfo" => :build end depends_on "pkg-config" => :build depends_on "gnutls" def install args = %W[ --disable-dependency-tracking --disable-silent-rules --enable-locallisppath=#{HOMEBREW_PREFIX}/share/emacs/site-lisp --infodir=#{info}/emacs --prefix=#{prefix} --with-gnutls --without-x --with-xml2 --without-dbus --with-modules --without-ns --without-imagemagick ] if build.head? ENV.prepend_path "PATH", Formula["gnu-sed"].opt_libexec/"gnubin" system "./autogen.sh" end system "./configure", *args system "make" system "make", "install" # Follow MacPorts and don't install ctags from Emacs. This allows Vim # and Emacs and ctags to play together without violence. (bin/"ctags").unlink (man1/"ctags.1.gz").unlink end plist_options :manual => "emacs" def plist; <<~EOS <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>#{plist_name}</string> <key>ProgramArguments</key> <array> <string>#{opt_bin}/emacs</string> <string>--fg-daemon</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> EOS end test do assert_equal "4", shell_output("#{bin}/emacs --batch --eval=\"(print (+ 2 2))\"").strip end end bash-3.2$
——で?
なんでMacなのに「–without-ns」になっているんだろう?
もうHomeBrewはMac用のパッケージ管理システムではないんだなぁ……。
しかたないのでCASKからインストールした。
roswellを使ってMacBook AirのSBCLをバージョンアップした。
ros install sbcl/1.5.3
CL-USER> (lisp-implementation-type) "SBCL" CL-USER> (lisp-implementation-version) "1.5.3"
しなくてもいいかな、と思っていたのだけど、関数へjumpする「slime-edit-definition」で微妙にソースの場所がずれる——最新版にすれば、だいじょうぶじゃね?
正解だった。
gnuplotをupgradeしたらグラフが表示されなくなってしまった。
調べてみると、AquaTermって何? っていっている。
ああ、これはbrewでインストールしたバイナリが「–without-aquaterm」されているんだな。というわけで、brew installで「–with-aquaterm」オプションをつけようとしたら——あれ?
できない。
brew 2.0で仕様が変更されてできなくなってしまったらしい。
なんてことだ。
しかたないのでソースをもってきて——ライブラリがupgradeされてしまっていてgnuplotを元にもどしても動かなくなってしまったのだ——「–with-aquaterm」でconfigureしたのだけど……。
有効にならない。
どうやらAquaTermは未サポートになってしまったらしい。
かわりにgnuplot_qtなるものが提供されるようになっていたのだけれど。
ところがこれだと、線分の端が丸まってしまう。
なんじゃあ?
いろいろいじってなんとか、gnuplot_qtのターミナルの設定の中に線分の端を丸めるか、どうかのオプションを見つけた。
追記:いつのまにか、 --build-bottleというオプションができていた。これでコンパイルできるのかも。
ZFSはたしか、圧縮して実際に使用するディスク量を減らすことができたはず。
その設定をしようか、と思って今の状態を調べてみると。
zfs get compression
おや、どのデータセットも圧縮する設定になっている。
どのくらい圧縮されているんだろう?
$ zfs get used,logicalused zroot zfs get used,logicalused zroot NAME PROPERTY VALUE SOURCE zroot used 7.05G - zroot logicalused 13.0G - $
半分ぐらいになっていた。
そうか。それでリストアを試してみたとき、10Gを超えていたのか。
というか、これだとディスク容量を節約するために不要なファイルを圧縮しても意味がないんだな。
ふむ。
-No- | 時刻 | 時間 | 帆走距離 | 最高速 | 平均時速 | P% |
---|---|---|---|---|---|---|
1 | 13:40-13:59 | 19分 | 2.1km | 34.74km/h | 6.70km/h | 28.63 |
2 | 14:03-14:13 | 10分 | 1.4km | 31.73km/h | 8.08km/h | 16.50 |
3 | 14:27-14:55 | 28分 | 1.5km | 23.91km/h | 3.19km/h | 0.61 |
total 57分 5.0km 5.2km/h
まぁ、やはり一番、よく使うのはgrepなわけですよ。
テキストファイルならそれでいいんだけど、Excelファイルががっつりあったりすると泣けてくる。
Windowsのエクスプローラーから検索できるんだけど、なんか使い方がよくわからないのでストレス。だったらjavaのPOIでExcelの中身を見れるんだから——ABCLで取りこめばいいんじゃね?
で、つくってみる。
あとはslime経由でEmacsにデータを取りこんでごにょごにょする、と。
ちょっと「jinput-stream」をcloseしてないのが気になるけど、ま、いいか。
-No- | 時刻 | 時間 | 帆走距離 | 最高速 | 平均時速 | P% |
---|---|---|---|---|---|---|
1 | 10:25-10:41 | 15分 | 1.2km | 20.47km/h | 4.67km/h | 1.22 |
2 | 11:15-11:41 | 26分 | 2.3km | 26.60km/h | 5.14km/h | 2.82 |
3 | 12:48-13:00 | 12分 | 1.3km | 28.72km/h | 6.21km/h | 2.68 |
4 | 13:04-13:12 | 8分 | 1.2km | 31.90km/h | 8.91km/h | 29.27 |
5 | 13:20-13:29 | 8分 | 1.2km | 33.85km/h | 8.62km/h | 15.96 |
6 | 14:01-14:11 | 10分 | 0.2km | 7.95km/h | 1.09km/h | 0.00 |
7 | 14:36-14:45 | 9分 | 0.9km | 19.62km/h | 5.72km/h | 3.90 |
total 90分 8.2km 5.5km/h
朝起きて行くのをやめようか、と思った。
ひさしぶりすぎてなんかストレスを感じる。それでもしぶしぶ、検見川浜へ向かう。心配は青潮だった。急に暖かくなったので発生していたらどうしよう。あれはとても臭い。富津より南下すれば、だいじょうぶなことはわかっているけれど、そこまで行く根性がない。
検見川浜の海岸通りからのぞむ海は真っ白だった。
カイトが舞っている。
朝いちから海にでているセイルは二十艇近く。浜に置かれているセイルは四点台前半。途中、5.3のセイルを抱えて駐車場へもどるセイラーとすれちがう。小さいサイズにチェンジするのだろう。
うわー、どうしよう。やはり来るんじゃなかった。
4.7をセレクトして板は浮力のない255を選んだ——ところがセッティングして浜へ道具を運ぶころには風は落ち、さすがに255では無理だった。浮力のある260をあらためて持ち出したけれど、それでも風は足りなかった。
満ち潮になったらまた、風が上がる。
駐車場のあちらこちらから聞こえてくる声を聞きながら待つ。セイルをセッティングしなおすのも面倒だったのでサイズはそのまま。朝いちから出撃して満足して帰路につく人もちらほら。
一度、上がってすぐに落ちた。出艇してはまる。あやうくブロックに流されるところだった。
沖は真っ白なんだがなぁ。
5.3でも足りない風。なら5.7か。セイルを換えたとたん、吹き出して裏目を引く予感がする。そのままでも裏目を引く予感がするけれど。
12時になってようやく風が入りだした。
みんな、走り出した。
だけどぼくは走らない。何度か、プレーニングしたけれど、ウォーターできなくてはまりかけることもしばしば。だめだ〜。身体も動かないし、セイルにパワーがなくてスカる。そもそも4.7+260の組み合わせはあかん、ということを思い出した。
そこで255をひっぱりだしたのだけど、板は海底まで沈んだ。
3時をまわったところで完全に息があがってしまった。撤退。
まぁ、思いつきでリペアした4.7は使えそうだ、ということはわかっただけでもよしとすべきか。
ただ使う機会がない、ということも判明してしまったけれど。