2018年12月31日月曜日

2018年決算

 本:41冊
映画:29本
WIND:6日/57.9km
TVアニメ/TVドラマ:526話(36本)/141話(10本)

2018年12月29日土曜日

アーロンチェア

 アーロンチェアが到着したのは2018年9月1日のことだった。
 以前から欲しいとは思っていたのだけれど、ほとんど使わないだろうし——パソコンを使うときはマクドナルドとか、スタバとか、ファミレスとかに出かけていたので——、値段を考えると、買うこともないだろう、と。
 それがどういうわけか、衝動的に購入してしまった。
 到着したアーロンチェアが玄関を通らなかったりしてけっこう、往生してしまったが1

 それ以来、外へでかけることがめっきり減ってしまった。
 元々、土日は部屋にこもっていることが多いのだけれど、ちょっと出かけるということもしなくなってしまった。何をやっているのか、というと。
 アーロンチェアに座っているのである。
 ぼーぜんとしているのである。
 ぼんやりしているのである。
 パソコンを使うとき、外へ出かけていたのは今まで使っていた椅子がよくなかったからだったらしい。それもあってモニタを新調する気にもなったのだけれど。

Footnotes:

1

最終的には外で梱包を解いて椅子単体を部屋に入れた。

2018年12月27日木曜日

Beelink S1メインマシン化計画:頓挫

 直接、MacBook Airのアプリを使うことはあきらめて。
 Ubuntuから使う方針でUbuntuの環境をいじりはじめる。
 GnuCashはOK。MacBook Airのデータを読みこんで更新できた。
 Emacsのフォントが汚なかったので新しいフォントをインストールした。Emacsの環境に頭を悩ませているうちに疲れてきて布団に入る。
 とたん思いつく。——そもそも。
 どうしてUbuntuをメインマシンにしようとしているんだっけ?
 普通に使えるから。
 だから使おうとしたわけなんだけど1、よくよく考えたらMacBook AirをDELLモニタに繋げば、いいわけで。どうしてそうしないんだったんだっけ?

 しばし沈思黙考。

 ああ、そうか。
 MacBook Airはモニタがフラットになるまで開かない。
 だからDELLのモニタと画面がかぶるので、それが嫌だったのだ。それに目一杯開いたMacBook Airのモニタが電灯の光を反射してしまうから。しかし、それならMacBook Airにキーボートとトラックパッド2をつなげてしまう、という手もあるじゃないか3
 つまりMacBook AirをiMac miniのように使うのだ。
 で、試しにbluetoothのMac用のキーボードとトラックパッドを借りてきた。
 でも使ってみるといまいち。
 あれ。どうしてだろう? DELLモニタに違和感があるのはまだ、馴れてないからだろうけど、キーボードが妙に使いづらい4……Apple純正なんだが。
 それならbluetoothのHHKを購入するか……。
 MacBook Airのキーボードは馴れていることもあってだいじょうぶなのだから、直接、DELLのモニタにつなぐのがやはりいいようだ。トラックパッドもそのまま使えるし。
 ところでMacは外付けモニタをメインモニタにできるんだろうか。
 Windowsならできる。
 ミラー、拡張、外付けのみと選べる。
 MacBook Airには外付けのみ、の選択肢がなかった。
 あれ、もしかしたら外付けをメインにできないの? でも拡張にしてメインモニタにすることはできるんだよな。モニタに火は点ったままだけど。Windowsだと外付けメインを選択して消すことができる。
 たしかにモニタの輝度を最低にすれば、いいだけなんだけど。どうせMacBook Airのモニタは電灯の写り込み防止でハンカチをかぶせてしまうけど。ただ、拡張モードだと立ち上げたウィンドウやカーソルがそっちにいったときにいちいちこまってしまう——そっか、ミラーモードにすれば、いいんだ。それで普通に使えた。
 でもWindowsだとそうしないな、どうしてだろう。そういえば、たしかWindowsだとミラーモードにすると、画面密度が小さい方に合わせられて外付けを大画面にしても無駄だったはず。だから外付けメインにするしかなかった。
 ところがMacBook Airはそうじゃないぞ。
 外付けの方のサイズに合わせられているみたいだ5。ああ、それで外付けメインという選択肢がなくても問題ないんだ、Macは。

 ということは。
 結局、メインマシンは今までどおり、MacBook Airということじゃないか。
 買ったマウスはどうすれば、いいんだ6

Footnotes:

1

個人的にはWindowsより使えると思えるから。

2

ジェスチャーがあるのでマウスという選択肢はないのだった。

3

実際にはキーボードとマウスをつないで、クラムシェルモードとしてMacBook Airを閉じても使える。使ってみてちょっと感動した。Mac、すげえ。

4

どうやら大きさが微妙に馴れているMacBook Airのキーボードよりも小さかったようだ。打鍵感もなじめなかった。

5

その分、MacBook Airの画面が小さくなっている。

6

ちなみにインターネットラジオはVLSを使えば、MacBook Airから視聴できることがわかった。しかも今まで使っていなかったMacBook Airのスピーカが使える、というおまけつき。

2018年12月25日火曜日

Beelink S1メインマシン化計画:試行錯誤

 ただUbuntuをメインにすると、MacBook Airとのデータのやりとりが厄介だ。
 やりとりすること自体はだいじょうぶなのだけれど1、問題はデータが二重管理になることだ。よくある問題で、昔からこの手のことには頭を悩ませてきた。
 ここはやはり、DELLのデスクトップマシンとThinkPadを使っていたころの解決策を使うべきだろう。デスクトップで使うときはノート側を外部ディスクにしてしまうのである。さいわいsshでUbuntuからMacBook Airをmountできる2
 画面共有という手もあるけれど、これは体感速度的に許容できなかった。

 あとは、UbuntuのEmacsからどうやってMacBook Airのファイルを使うか3

 待てよ。

ssh -Y ホスト名 emacs

 で、いけるんじゃね?
 これでMacBook AirのEmacsをUbuntuに表示できるんじゃね? そうしたら万事解決じゃね? GnuCashだって表示できるかもしれない。
 そうした。
 そうしてみた。
 MacBook AirのEmacsは起動できた。
 ところがUbuntuに表示されない。MacBook AirのXサーバに表示されてしまう。いろいろやってみた結果、どうやらCocoaが原因らしい4——と判断。
 というのも起動すると一瞬、Macに表示されるのだ。
 そのあと、Xサーバに表示されなおす。
 ということはCocoaではなく、X11をバインドしたEmacsならうまくいくんじゃないだろうか。それだとMacBook Airで使うときにこまる予感がするけど5

 うーむ、だめか。

Footnotes:

1

ssh、NFS——基本、なんでもありだ。

2

Emacsならssh経由でリモートのファイルをローカルと同じようにあつかえる。

3

pathがちがうのでbookmark機能とか、orgのagendaとか、ちょっと面倒。

4

MacBook AirのEmacsはCocoaを使用している。

5

ほとんどEmacsの世界にひきこもっているので問題ないかもしれない。

2018年12月23日日曜日

Beelink S1メインマシン化計画:端緒

 なんだかんだ使い道がねぇなぁ、と思っていたBeelink S1——Ubuntuだったけど、気に入ったアプリがひとつだけあった。——「Rhythmbox」。いわゆるインターネットラジオなんだろうけど、中にバンドルされているambientのラジオ1が気に入った。
 それを聞きながらつらつらと、Ubuntuのショートカットキーの定義とかをながめていたらけっこう、マウスなしでいろいろと操作できるようになっていることに気づいた。
 とくに、ウィンドウをディスプレイの右とか、左に半分だけ置く機能。
 Windowsでディスプレイの端にぶつけるようにウィンドウを移動すると、なるやつだ。同じことができる上、キーボードで操作。これはいい——というか、MacとWindowsをくらべたとき、この操作だけはWindowsの勝ちと思っている。
 Macでもディスプレイの左右に別々のウィンドウを並べることはできるけれど、操作がやや煩雑なのだ。左右の割合を調整するのはMacの方が簡単だけど。
 そもそもUbuntuはけっこう使える。
 いや、というよりも普通に使えるのだ。
 必要なソフトは基本的にあるし、日本語のフォントもWindowsより全然、きれいだし2。HFS+のディスクもmountできるし。
 なんだ。いいことずくめじゃないか。
 これはDELLのモニタにつないでUbuntu——Beelink S1をメインマシンにするべきじゃないだろうか。

 そう思ってAmazonでマウスを買った。

Footnotes:

1

Ubuntuが提供している?

2

VirtualBoxのフォントの汚なさにWindows版は使う気が失せた。

2018年12月21日金曜日

えっ、うそ。VirtualBoxでMacOSが動くの。

 ひさしぶりにFreeBSDをいじってみようか、とtrueOS1をあまったハードディスクにいれた。VirtualBoxでインストーラーを動かしてお立ち台に接続したハードディスクへインストールするいつものやり方だ。
 もしかしたらこれでBeelink S1で動くかも、というわけだ。以前はうまく動かせなかったけれど。
 その過程でふと気づく。
 新規につくる仮想マシンのOSのタイプにMacOSという選択肢が増えている。えっ、うそ。
 あわててググってみたらなんと、WindowsのVirtualBoxでMacOSを動かした、というページにぶつかった。たしかに、ずいぶん前にMacOSは無料になっているけれど……待てよ。それならBeelink S1でMacOSが動かせるかもしれない。
 と思ったのだけど、よくよく考えると、Beelink S1でVirtualBoxのゲストOSにまわせるメモリは2Gしかない。さすがに無理か……。

 ちなみにBeelink S1へもっていったtrueOSは起動した。しかし起動はしたのだけれど、trueOSのロゴがでたところで固まってしまう。いつまでもそのままだった。あかん。だめだ。
 ちなみにMacBook Airでは動いたんだけどなぁ。

Footnotes:

1

FreeBSDから派生したPC-BSDの後継

2018年12月19日水曜日

from HFS+ to APFS

 「macOS Mojave」へアップデートしたとき、APFSはLinuxで使えると知って1、外部ディスクとして使っている3TBをAPFSにしたいな、と思っていた2。それでうだうだ、考えた。余っているハードディスクにcopyして——でも3TBも入らないよな——別々にばらさなきゃ、いかんし——どうしよう。
 で、ふと気づいた。
 OSのアップデートのとき、HFS+から変換してくれたんだから直接、変換できるんじゃね?
 ググったらでてきた。
 なるほど、ディスクユーティリティを使えば、いいのか。
 ところが。
 ところがである。
 3TBではAPFS変換が選べない。

 なんでよ、なんで。ググっても対応方法は見つからず。
 調べてみるうちにLinuxからHFS+をmountできることを知る(そもそもAPFSへ変換する意味がなくなった)。FreeBSDからはうまくいかなかった記憶があるのでだめだ、と思いこんでいた。
 それならAPFSにしなくていいか。
 そうなったら手を思いつくもので。
 commandレベルからならできるんじゃね? APFS変換。
 「man diskutil」を見てみると、できるっぽい。しかもdryrunが可能。
 試してみる。

bash-3.2$ diskutil APFS convert /dev/disk4s2 -dryrun
Rehearsing the conversion of the volume on disk4s2 to an APFS Volume on an APFS Container
Started APFS operation on disk4s2 3TB
Dry run of HFS Volume conversion to an APFS Container with a single APFS Volume
The target is the Journaled HFS+ volume "3TB" backed by the GPT partition disk4s2
The target is a data disk; it is not a macOS system disk
Found APFS EFI driver /usr/standalone/i386/apfs.efi to install into the APFS Container
The target is not encrypted
Unmounting disk4s2
Starting dry run test of conversion from HFS to APFS
Performing apfs_hfs_convert --dry-run --watchdog=1800 -x --verbose=0x400 /dev/disk4s2
Reporting pre-conversion statistics
Reporting post-conversion statistics
Successfully finished dry run of conversion from HFS to APFS
Dry run mode so will not touch type
Not mounting APFS Volume
Exiting conversion operations with error code 0
Finished APFS operation on disk4s2 3TB
bash-3.2$

 おっ、できそうだ。

Footnotes:

1

wikiにも書かれていた。

2

何か、あったとき、Beelink S1のUbuntu経由でレスキューできる。

2018年12月17日月曜日

Dell 27 Monitor(2)

 Apple TVをDellのモニタにつないで音声を別にだすには次の二つの手が考えられる。

  1. Apple TVのoptical audioを利用して出力する。
  2. HDMIの音声分離機を使用する。

 どちらにしても追加投資が必要だ。
 いろいろ調べていたら面倒臭くなってしまった。
 そもそもネット配信されているものが観れれば、それでいいのだ。それならパソコンのブラウザを使えば、いいだけじゃん。イヤホン端子もついているし。しかもBeelink S1はHDMI出力できる。
 ただ、MacBook Airではうまく再生されなかった。
 Beelink S1を試してみる。
 Firefoxはだめだった。Chromeはいけた。
 あれ、待てよ。MacBook AirがだめだったのはSafariだったからかも。案の定でChromeだとうまくいった。
 「ソードアート・オンライン オルタナティブ ガンゲイル・オンライン」のアクションシーンを観比べてみたところ、軍配はMacBook Airにあがった1。あれ、そうすると、新しいモニタを買った意味がなくね?
 まぁ、MacBook AirをDELLモニタにVGA接続すれば、いいだけなんだけどさ……。

 結局、Beelink S1の使い道はなく、それだと悲しいのでいちおうHDMIにつないでおくことにした2。マウスとキーボードなしの状態なので何もできないけど3, 4
 ショックなのは直販で購入したDELLモニタよりもAmazonで買った方が安かったことだ……。しばらくうだうだしそうだ。

Footnotes:

1

接続方法の差か、OSの差なのか、マシンの差なのかは不明。

2

プリインストールされているWindowsをUpdateしたら5時間たっても終わらなかった……。

3

VNCでMacBook Airにつないでみたけれど、遅すぎて使いものにならなかった。

4

synergyを使う手もあるけれど——昔、Mac miniを使っていたころ、使っていた——、いつのまにか、有料になっていてBeelink S1を使う頻度と値段を考慮した結果、今回は見送り。

2018年12月14日金曜日

Dell 27 Monitor - SE2719H - Dell Sシリーズ SE2719H 27インチワイドモニター

 27inchのモニタを使う機会があり、最初は画面の大きさに目がびっくりしていたけれど、馴れると、いいな、と思うようになってしまった。調べてみたら値段的に手頃だったので買うことにした。実は最近のモニタにはHDMIがついているのでApple TVをつなげてやれば、テレビのかわりになるのではないか、とさもしいことを考えたのだ。
 視聴はネット配信が中心だし。
 このあいだ、買ったBlue-rayの再生専用機も使えるだろうし。
 まぁ、オーディオ出力についてはあとで考えよう。
 どうせいつもはイヤホンなのだし。
 それにもしかしたら買っただけのBeelink S1にも何かいい使い道ができるかもしれん1

 買ってすぐにApple TVをつけてみる。
 うん、いいんじゃね?
 音はでないけど。

Footnotes:

1

モニタは邪魔なので押し入れにいれっぱなしなのだった。

2018年12月12日水曜日

ABCL

 あれ、CL-DBIはOrcleに対応してないのか1
 探せば、どこかにあるかもしれないけど、つらつら考えてそういや、ABCLってjava上で動くCommonLispなんだよな。それならjavaを使って(ojdbc.jarを使って)Oracleにアクセスできるんじゃね?
 「Class.forName("oracle.jdbc.driver.OracleDriver");」をやっただけではうまくいかなくて、けっこう苦労したけれど、いちおう、動いたような気がする。ざっくり。
 錯覚かもしれないが。

(in-package :cl-user)

(defpackage y-dbi
  (:use :cl :java))

(in-package :y-dbi)

(add-to-classpath "ここにojdbc.jarを指定")

(defvar oracle (jnew "oracle.jdbc.driver.OracleDriver")
  "oracleのドライバをロード")

(defun connect(&key server database user password)
  (let ((connect
  (concatenate 'string "jdbc:oracle:thin:@" server ":1521:" database))
 (properits (jnew "java.util.Properties")))
    (jcall "put" properits "user" user)
    (jcall "put" properits "password" password)
    (jcall "connect" oracle connect properits)))

(defun disconnect(conn)
  (jcall "close" conn))

(defun execute(conn sql)
  "ResultSetを返却する"
  (let ((stmt (jcall "createStatement" conn)))
    (jcall "executeQuery" stmt sql)))

(defun fetch(rs)
  (jcall "next" rs)
  (when (not (jcall "isAfterLast" rs))
    (let ((rsmd (jcall "getMetaData" rs)))
      (loop for i from 1 to (jcall "getColumnCount" rsmd)
  append
    (list (intern (jcall "getColumnName" rsmd i) 'keyword)
   (jcall "getString" rs i))))))

(defun select(conn sql &optional limit)
  (let ((rs (execute conn sql)))
    (if limit
 (loop for i from 0 to (- limit 1)
    collect (fetch rs))
 (loop for row = (fetch rs)
    while row
    collect row))))

(defun column(list)
  (loop for x in list
     for i from 0
       append (when (evenp i) (list x))))
CL-USER> (in-package :y-dbi)
#<PACKAGE Y-DBI>
Y-DBI> (select (connect :server "XXXX"
   :database "YYYY"
   :user "ZZZZ"
   :password "PASS") "select * from dual")
((:DUMMY "X"))
Y-DBI>

Footnotes:

1

商用なのである意味、当たり前か。

2018年12月10日月曜日

ユークリッドの互除法

 一松信の「暗号の数理」を読んでいたら「ユークリッドの互除法」というものがでてきた。二つの正の整数m、nの最大公約数を求めるアルゴリズムである。下記のような手順だ。

  1. mとnを比較し、必要なら入れかえてm≧nとせよ。
  2. mをnで割り、商をq、余りをrとせよ。
  3. 余りrが0(割り切れた)なら、そのときの除数nが最大公約数である。これで完了。
  4. 余りrが0でなければ、除数nと余りrとをm、n,と置き直して、2.へ戻れ、

    この操作を反復すれば、いつか必ず3.に逹っして、完了するであろう。

     ——一松信「暗号の数理」より

 で、なんで、これで最大公約数が求まるのだろう……。
 ピンとこなくて考えこんでしまった。
 うーむ。
 n自身が最大公約数のとき、求まるのはわかる。では2周目はどうだろう。一回目のrが最大公約数の場合。もちろんそのときはrでnが割り切れるはずだ。もちろん、mも割り切れる(mはnとrに分解できるのだから)。
 あ、なるほど。そういうことか。
 あとは以下同文。

(defun Euclid(m n)
  "ユークリッドの互除法。m、nの最大公約数を求める。"
  (if (< m n)
      (Euclid n m)
    (progn
      (let ((q (/ m n))
     (r (mod m n)))
 (if (= r 0)
     n
   (Euclid n r))))))
(Euclid 25 5)
5
(Euclid 7 5)
1