2019年3月31日日曜日

destructuring-bind

 cl-dbiでtime型のcolumnは

((:HOURS 10) (:MINUTES 5) (:SECONDS 0) (:MICROSECONDS 0))

 の形式で返却されてきていた。
 どうしたものか。:HOURSをassocしてsecond? とか、考えて面倒だな、と。
 そういえば、「destructuring-bind」とか、いうものがあるんだっけ。

CL-USER> (destructuring-bind ((- hours)(- minutes)(- -)(- -))
             '((:HOURS 10) (:MINUTES 5) (:SECONDS 0) (:MICROSECONDS 0))
           (cons hours minutes))
(10 . 5)
CL-USER> 

 すばらしい。

2019年3月27日水曜日

format

 cl-dbiから返却されてきたplistapplyを使ってクラスに流しこめることはわかったのだけど、逆はどうすれば、いいんだろう……わからなくてシコシコ自分で変換する関数を書いたりしていたのだけれど。
 たとえば。

CL-USER> (setf wrk '(:|place| "A7" :|count| 3 :|day| 7))
(:|place| "A7" :|count| 3 :|day| 7)

 このplistを要素の間に「=」とかを挿入しながら「"place='A7' and count='3' and day='7'"」に変換する簡単な方法はないものか。
 調べているうちになんか、formatでできそうな気がしてきた。
 これでどうだ。

CL-USER> (format nil "~{~A='~A'~^ and ~}" wrk)
"place='A7' and count='3' and day='7'"
CL-USER> 

 うわっ、あっさりできた。
 すごすぎ。

2019年3月17日日曜日

CommonとE

 ステップ数/時間で考えると、CommonLispはあまり、高い数字ではないかもしれない。三時間ぐらいうんうん唸ってできあがったのが五行ぐらいの関数だったりする。これはぼくの能力に問題があるのかもしれないが、じゃ、それでCommonLispは効率的ではないか、というとそうでもない。
 同じロジックを別の言語——たとえば、javaとか、Cで組むと、あっという間にふくれあがることはまちがいないからだ。
 で、今回、驚いたのはひとつの関数をいろいろいじっていたらいつの間にか、汎用性のあるユーティリティになってしまったことだ。もしかしたらこれ、alexandriaにあるんじゃないか、と不安になるほど。別に業務ではなく、個人的にやっていたプログラムなのだけど1

 こんな経験はじめてだったのでしばし唖然としてしまった2
 プログラミングしているうちにユーティリティができあがってしまったというのは——ここのロジックは共通化できるな、とか気づいてくくりだしたりはよくあることだけど3
 同じLisp族のelispででも経験したことがない。

 どうしてだろう。elisp的には

(require 'cl)

 があるので言語的な差はそれほどないはずなのだけど。
 たまたまなのか、もしかすると——。

 elispだと、関数名などシンボル名のコンフリクトを避けるため、接頭語をつけることが習わしになっている。「org-」とか。CommonLispだとdefpackageで名前空間を分離できるので平気で「select」とか、「check」とかにできる。コンフリクトが起きてしまったときは総称関数化で対応できる可能性も高いし。ユーティリティになってしまったらパッケージの位置を変えるのも容易だ。
 そうやって考えると、案外、defpackageの有無の差は大きくて、固有名になっていないということで心理的に、抽象化が進むのかもしれない。

 ——最終的に。
 そうやってできあがったユーティリティ自体が溶けてなくなってしまったことだけれど4

Footnotes:

1

なので関数の中の変数名とか、汎用性のないumaのままだ(listに変えた方がいいんだろうな)。

2

しばらく気づいてなかった。

3

組みながら考えるのでとくに。

4

CommonLispの関数の直呼び出しで充分じゃんって気づいた。

2019年3月15日金曜日

どーでもいい日々

 Beelink S1のBIOSの設定メニューの出し方がわからなくなった。
 ThinkPadとかは電源をいれてF1キーだったか、F2キーだったけれど、Beelink S1はちがっていた。そのことだけは記憶に残っている。けれど、どうすれば、いいかまでは思い出せなかった。
 ググるしかないかぁ……。情報がネットに残っていれば、いいが。日が経つと、なくなってしまうこともよくある話で。サイトごと消えていたりする。
 待てよ。ブログに書かなかったっけ?
 ——あった

 Emacsの設定とか、ブログに書いていたおかげでよく助かる。
 たいがいうすらぼんやりとしか、覚えていないから。
 そんなこと、メモっておけよ、という話だけれど、ブログにあげると考えなければ、そもそも言語化しないわけで。
 そういうわけで世間的にはどーでもいいお目汚しはつづく。

2019年3月13日水曜日

「Magic TrackPad2」と「Magic Keyboard」はUSB接続でWindowsやUbuntuで使えるか

 BeelinkS1にはWindows10とUbuntuがはいっている。
 なので「Magic TrackPad2」と「Magic Keyboard」が使えるのなら助かる。bluetoothでなくてもいい。USB接続でもいい。むしろその方がいいくらいだ。
 デフォルトで繋がるのはMacBook Airであって欲しいから。
 試してみてみたところ、うまくいった。
 すばらしい。
 さすがにTrackPadのジェスチャアは無理だったけれど。
 意外だったのはタップがクリックと認識されないこと。板を押しこまなくてはならなかった。——まぁ、これはMacBook Airもタップを有効にするまで1そうだったのでそういうものなんだろう。

Footnotes:

1

今はその設定自体がなくなっている模様。

2019年3月11日月曜日

Gnusのnnvirtualで画像が表示されない……

 あいかわらず、RSSをGnusで読んでいるだけど、さすがに多少、グループ化したい、と思ってnnvirtualにいくつかをまとめたところ、なぜか、画像が表示されなくなった。——あれ?
 nnrssのグループから直接、開くと表示されるのだが?
 なんでだ。よくわからん。
 とりあえず、それだと不便なのでGnusのinfoを見たり、ググったりして見当をつけた。gnus-blocked-imagesという変数に設定されているgnus-block-private-groupsという関数があやしい。

(setq gnus-blocked-images nil)

 と、やってみたところ、画像が表示されるようになった。
 たぶん、きちんと設定するべきなのはほかの個所なのだろう。今の状態だと何もかも表示されるだろうから。でもまぁ、今はこれでいいか。読むのはRSSぐらいだし。

2019年3月9日土曜日

windowを表示する場所

 Emacs 26にしてから妙にwindow1の挙動が変だ。
 表示される場所が25のときとちがう。
 どうもwindowまわりの関数が刷新されたようにも見えるのだけれど、よくわからない。固定で特定のバッファを分割表示するようにしている関数がうまく動いてくれなくてストレスだ。調整しようとしてもなぜか、うまくできない。
 うーん。
 ふと「popwin」を無効にしたらうまくいった。
 コンフリクトでもおこしていたんだろうか。

Footnotes:

1

Emacsにおけるwindow

2019年3月7日木曜日

&optional

 たとえば

(defun wrk (x y)
  (* x y))

 という関数があって「y」をoptionalにして(wrk 123)のときは(* x x)を返却するように変更しようとしたとする。

(defun wrk (x &optional y)
  (let ((w (if y
               y
               x)))
    (* x w)))

 としたところでふと気づいた。

(defun wrk (x &optional (y x))
  (* x y))

 これでいいんじゃね?

CL-USER> (wrk 2)
4
CL-USER> 

 なんともあっさり。
 んー?
 としたらこうもできるのか。

(defun wrk (x &optional (x1 (nth 0 x))(x2 (nth 1 x))(x3 (nth 2 x)))
  (+ x1 x2 x3))

CL-USER> (wrk '(1 2 3))
6
CL-USER> (wrk '(4 5 6))
15
CL-USER> 

 ……わけがわからん。

2019年3月5日火曜日

さよならThinkPad X60

 ついに処分。

日付   OS
<2006-11-23 Thu> ThinkPad X60 購入 Windows XP
<2008-06-14 Sat> 拡張ライフ・バッテリー購入 Windows XP
<2010-11-13 Sat> SSD換装 Windows XP
<2010-11-19 Fri> バッテリー購入 Windows XP
<2012-12-28 Fri> SSD死亡 Windows XP
<2013-01-02 Wed> HD換装 FreeBSD 8.3
<2013-10-30 Wed> SSD換装 FreeBSD 9.2
<2013-12-10 Tue> バッテリー購入 FreeBSD 9.2
<2014-04-04 Fri> OSのアップグレード FreeBSD 10.0
<2014-11-21 Fri> OSのアップグレード FreeBSD 10.1
<2017-03-29 Wed> 外付けHDのストライピング化 FreeBSD 10.1
<2017-07-19 Wed> OSのアップグレード FreeBSD 10.3
<2018-01-05 Fri> ディスプレイ死亡 FreeBSD 10.3
<2019-03-02 Sat> リサイクル  

2019年3月3日日曜日

アルバート・ラズロ・バラバシ「新ネットワーク思考——世界のしくみを読み解く」

 見返しにある著者紹介に「1967年トランシルバニア生まれ」「気鋭の若手研究者」とある。
 「1967年」で「若手研究者」かぁ、と思っていたらCopyrightによると、2002年の本だった。
 つまり17年も前。
 なんだ、そういうことか。

2019年2月25日月曜日

3TBふっ飛んだ

 ブレイカーが落ちた。
 3TBの外付けHDにモロ、アクセスしているときにだ。
 ジャーナル付きのファイルシステムだからだいじょうぶだろうと思っていたらだいじょうぶじゃなかった。
 マウントしない。
 色々やってみたけれど、だめ。ぎゃあ。動画や自炊したPDFはここにしか、ないのだが。
 でもなぜか、ずっとアクセスランプが点きっぱなし。アクティビティモニタをチェックしてみたらfsck-hfsとやらが動いている。
 もしかしたら復旧するのか、と一晩、放っておいた。
 朝、起きたらマウントされていた——けれど、早くバックアップしろとメッセージがでている。
 バックアップするための3TBのハードディスクなわけで、それをどこかにバックアップしろとはなんと、ご無体な……。あちらこちらの隙間にファイルをコピーする。さすがに全部は無理で、大部分の動画と写真はあきらめた。
 もしかしたらAPFSに変換したら復旧するかもと甘い期待を抱いたけれど、甘かった。エラーがでた。
 なんとか部分的には元に戻したけど、なんか絶対、いるファイルを消してしまったような予感がする。

2019年2月23日土曜日

thread

 Emacs26から追加されたthreadを試してみる。

(thread-join (make-thread (lambda()"123")))
nil

 あれ? nil?
 ABCLだと

CL-USER> (THREADS:thread-join (THREADS:make-thread (lambda()"123")))
"123"
T
CL-USER> 

 lambdaの返却値を返すのに。多値だけど。
 SBCLもそうだ。こっちは多値じゃないけど。

CL-USER> (SB-THREAD:JOIN-THREAD (SB-THREAD:MAKE-THREAD (lambda() "123")))
"123"
CL-USER> 

 ふむ。

2019年2月21日木曜日

やはり「Magic TrackPad2」もUSBトラックパッドとして使えるのだった

 「Magic Keyboard」がUSBキーボードとして使えることを知って当然、こうも考えた。「Magic TrackPad2」も同じじゃね? バッテリーが一桁台になるまでまで待って試してみたところ、やはり使えた。bluetoothに接続されてないのに操作できた。MacBook Airに繋いでだけど。
 なんてことだ。
 このことを知っていれば、とりあえずキーボードを買ったりマウスを買ったりしなかっただろうに。まっすぐ「Magic Keyboard」と「Magic TrackPad2」を買っていたんじゃないか? わからないけど。
 USBキーボードやマウスはとりもなおさず、「Beelink S1」の起動時、GRUBでOSを選ぶ必要があったからだ1。普段はUbuntuをデフォルトにしているからいいのだけど、Windowsが必要なときもある。そう思っていたのに。
 そうか。「Magic Keyboard」が使えたのか。orz
 ——無駄は嫌いじゃない(負け惜しみ)。

Footnotes:

1

起動時にはbluetoothは使えないから。

2019年2月19日火曜日

デヴィッド・クローネンバーグ監督「スキャナーズ」

 はじめて観たときはラストがあまりに衝撃的だったのでもう一度、観たいな、と思っていたのだ。けっこうシーンに見覚えはあったのだけれど、根本的な設定をかんちがいしていた。いつまでたっても主人公とヒロインが大学で治験を受けるシーンがでてこない。
 見終ってもでてこなかった。
 ——あれ?
 この記憶はなんだろう?
 もしかしたら他の映画のシーン? と考えこんでしまった。
 あ、これはスティーブン・キングの「ファイヤースターター」1だ。

Footnotes:

1

邦題はたしか「炎の少女チャーリー」

2019年2月17日日曜日

たどり読み

 巻末によく参考文献が載っている。
 中にはおもしろそうなタイトルのものもある。
 これをたどって読んでいったらおもしろいんじゃないか?
 以前からそう思っていたのだ。それで今年に入ってちょっと試してみようか、という気になったのではじめた。
 ナシーム・ニコラス・タレブ「反脆弱性――不確実な世界を生き延びる唯一の考え方」からエリック・エイブラハムソン/ディヴィット・H・フリードマン「だらしない人ほどうまくいく」へ。それらの参考図書1のリストをつくっていてふと気づく。あれ、このままだと収束しないんじゃないか?
 どんどん候補の本が2増えていくだけじゃないのか?
 さすがに幾何級数的増加ということはないだろうけど。
 そもそもナシーム・ニコラス・タレブ「反脆弱性――不確実な世界を生き延びる唯一の考え方」の参考図書って83冊もあるんだよねぇ。
 うーん。もうすでに飽きてきている。
 それにこれだと、延々、過去にのびていくだけなんだな。

Footnotes:

1

もちろん邦訳されたもの、日本語のもののみだけど。

2

候補の本を選ぶために、y-goto-randam-lineをつくったのだった。

2019年2月15日金曜日

Emacs 26にバージョンアップ

 あれ?
 MacBook AirからEmacsが消えてしまった。
 なぜだ。あっ、26は残っている。そうか。うっかり「brew upgrade」してしまったからかぁ。cleanされてしまった。
 わざわざ、Emacs 25にダウングレードして使っていたのに。
 元に戻すのが面倒なのでEmacs26をそのまま、使いはじめただけれど、自前のツールが「insert-string」がない、と動かない。そういえば、25のとき、なんか、ワーニングがでてたっけ。「insert」に置換しなきゃ、と。
 バッファの開き方が変わったみたいで、普段はあまりチェックしない「GNU Emacs NEWS」をながめてみたら「thread」という文字が……。
 ついにサポートするんだ。

2019年2月13日水曜日

ランダムな行に移動する

 Emacsのひらいているバッファで適当な行へジャンプするものをつくった。

 引数は飛び先の行を判定する条件をコントロールするもの。

(y-goto-randam-line 'oddp)

 これで奇数行だけにジャンプする(はず)。

 ——これが何の役に立つのか?
 立たないかもしれない。

2019年2月11日月曜日

もしかしたらMagic KeyboardはUSBキーボードとして使えるんじゃね?

 重量を調べるためにMagic Keyboardの技術仕様をながめていたら気になる項目を見つけた。
 「接続と拡張性」にLightningポートがはいっている……。
 充電用のポートだから「接続」ということだよね……。
 あれ、もしかしたらUSBキーボードとして使える、という意味?

 => MAGIC KEYBOARD は普通にUSB接続でも使える

 なんと!
 某国産キーボードのブルートゥース版とは大違いだ……。
 やってみたらほんとに使えた。

2019年2月9日土曜日

Magic KeyboardをつないだらiPadはMacBook Airのかわりになるか

 手持ちのiPad ProMagic Keyboardをペアリングをしてみたところ、さすがにキー入力はキーボードが楽。
 それならMacBook Airのかわりになるんじゃね?
 重量的にも半分ぐらいになるし。
 いいね。いいね。ひとり悦に入っていたけれど、障害がひとつ。ぼくはEmacsのキーバインドに毒されている。もう元の身体にはもどれない。iPadで動くEmacsがあれば、いいけど、ない——Vimはあるのに。
 「Not Emacs」は日本語入力ができなかった。

 じゃ、RaspberryPiにVNCか、sshで接続してそちらのEmacsを使えば、いいんじゃね?
 RaspberryPiなら携帯バッテリーで動かせるだろうし、ホストにしてWifiでLANを構成できるはずだ。いいんじゃね?
 ちょっと部品が多いのが難だけれど、重量的にはどうなんだろう。

iPad Pro 437g
Magic Keyboard 231g
携帯バッテリー 180g
RaspberryPi 100g?

 合計したら948g……。
 あれ、MacBook Airとかわらん。
 バラバラになっている分、いまいちかも……。

 そもそもiPadのエディタがEmacsのキーバインドをサポートしてくれていれば、問題ないのだよな。

 => iPadでもemacsのキーバインドの一部を使うことができます

 そうなのか。
 知らんかった。
 でもやはり、MacBook Airのかわりは無理かな。MacBook Airのかわりというか、Emacsのかわりなんだけど。

2019年2月7日木曜日

grep in the eshell

 知らないということは怖ろしいもので。
 「Emacs for Windowsでfind-grepっぽいことをする」とかよりもっと簡単な方法があった——単純にeshell上でgrepを使えば、よかったのだ。eshellだと。

**/*

 で、カレントディレクトリの下を再帰的に展開してくれるので

grep hogehoge **/*

 で、ごっそりgrepがかけることができるのだった。