2016年6月11日土曜日

How do I do?

「あれ?今、何しようとしてたんだっけ?」という疑問が頭をよぎることがある。
それとは別に「ロボットにこういう処理をさせたいんだけど、どう書けば?」という疑問が頭をよぎることもある。
前者は現在の科学力ではいかんともしがたいが、後者については藁をもつかむ気持ちで試しておきたい手立てが無いわけでもない。

https://github.com/gleitz/howdoi

howdoiは、たまたま、……ホンのたまたま、お決まりのプログラム表現をド忘れしてしまった年寄りプログラマのためのツールである。
英文っぽく、やりたいことと今利用中のプログラム言語をパラメータとして与えると、インターネッツ(基本、StackOverflow)からなんとなくそれっぽいプログラムの断片を探し出してくれる……かもしれないツールである。


howdoi自体はコマンドラインからの実行を想定したものである。が、厨学二年生のためのエディタ、Vimから利用するためのプラグインも公開されている。

https://github.com/laurentgoudet/vim-howdoi
https://github.com/isovector/vim-howdoi

前者のURLは、外国のオッサンが作ったオリジナル。
その次のものは、そのオリジナルをまた別の外国のオッサンが魔改造したものだ。
オリジナルのvim-howdoiは、機能を利用するためのキー割当が固定で、かつその固定された割当が他のユーザが便利に使っている機能と被っていたのがイマイチとされていた。それを他のキー割当が可能になるように改造されたのである。

ここまでくれば至れり尽くせり……と思っていたが、私自身が利用するにはまだ足りなかった。

私はプログラム言語としてPythonをよく利用する。イチから書くときは最新バージョンのPython3系を利用するが、他方既存のツールはまだPython3に対応しておらず、1つ前のメジャーバージョンであるPython2系のままなのも多い。(こちらもこちらでセキュリティ維持他の理由でバージョンアップが続いている。だから、なかなか乗り換えが進まない)
howdoi自体はPython2, Python3どちらでも動作するが、問題はVim。
Python2系、Python3系、Vimは両方の環境と連携できるのだが、1回の起動で片方と連携してしまうと、もう片方とは連携できなくなる。複数のプラグインがそれぞれ片方のバージョンにしか対応していないと、後から適用した方がエラーになる。なった。困った。

vim-howdoiが利用しているPythonのバージョンは2だった。
Pythonバージョンを2に揃えてしまおうか……。
いや、ダメだ。自分で書いたプログラムは多くがPython3系だ。エディタの、かつオフィシャルでない付加機能のためだけに、それらを巻き戻すのは辛すぎる。
また、自宅PCから間借りしているVPSまで、複数の環境を持っていて、Vim自体の対応Pythonバージョンも様々だ。

改めて考えてみれば、howdoi自体はPython2, Python3の両方に対応している。しかも外部コマンドとして実行するので、VimのPythonインターフェースはそもそも不要だ。
結局、さらにもう一人の外国のオッサン、つまり自分でPython依存部分をVimScriptで書き直すことにした。

https://github.com/morinatsu/vim-howdoi/tree/repure

とりあえず動いてはいるようだ。
もうちょっと、元のvim-howdoiの挙動に近づけたいし、エラーハンドリングとかもやりたいなぁ。
そうしたら、fork元にPull Request送って、取り込んでもらいたいなぁ。

……と思ったら、このソフトウェア、公衆便所ライセンス(WTFPLv2 License)だ..... orz

2016年6月9日木曜日

アンダーカバー

古き良き時代(?)のスパイ戦争を題材にしたボードゲーム。
ぱっと見の印象では、幼い頃(30年以上前だ)に親戚にもらった「Cluedo」らしきゲームの日本語版(「探偵」とか、そんな名前で売られていたと思う)に近い。

「Cluedo」ではプレイする度に犯人、凶器、犯行現場が変わり、各々のプレイヤーはそれらを明らかにすべく行動する。
この、アンダーカバーではむしろ逆で、プレイヤーは自分の正体を他のプレイヤーから隠しつつ、彼らを出し抜いて利を図る。
読み合いのゲームである、という点は変わらないのだろう。そう思っていた。

人間は、自分が行動する際は気分を優先するくせに、他人の行動には何らかの合理性を期待する。
人間は、自分の行動には環境や状況をもって説明するのに、他人の行動には本人の性向をもって説明する。

読み合いを成立させるには、互いがそれなりに熟練し、ゲームを理解していることが必要だ。
あるプレイヤーは、自分の正体を隠すのに夢中で、ゲーム自体の勝利を二の次にしていた。
また、別のプレイヤーは純粋に勝利を求めていたが、肝心の自分の正体を間違ったままプレイしていた。

たった1つのゲーム版の上で、我々は全く別のゲームをプレイしていたのである。
我々は、某超大国がかつて犯した過ちと同様に、ありもしない大量殺戮兵器を求め、それ自体が頓珍漢な他プレイヤーの思惑を推測すべく、狭い街の中をぐるぐる廻っていた。

陰謀はある。常にある。あなたにも、かなたにも。老人には老人の。赤子には赤子なりの。
だが、それは必ずしも世界がその特定の陰謀に支配されていることを意味しない。

このゲームは、特定の団体ないし個人の陰謀によって世界が支配されているという、素朴な陰謀論に対する反論である。

「パンプキン・シザーズ」9巻より