an odd fellow

仕事のメモ

tramp で su とか踏み台

emacsssh するときは tramp 使うんだけど su とか 踏み台とかも出来ます。24.3 以降ならいい感じにシンタックスも導入されてていい感じに使えます。

例えば vagrant で開発環境作ったときとか vagrant ユーザで ssh して su で他のユーザに移りたかったりする。そんなときはこんな感じ

/ssh:vagrant@192.168.33.10|su:username:

で Enter 叩く

f:id:roronya:20160329155051p:plain

踏み台のときはこう

/ssh:vagrant@192.168.33.10|ssh:username:291.68.33.11:

参考: https://www.emacswiki.org/emacs/TrampMode

Emacs Wiki モダンなデザインになって見やすくなって良い

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

統計的因果推論へ招待されてきた

日本社会心理学会主催で「統計的因果推論への招待」という題目でセミナーをやっていたので行ってみた。

日本社会心理学会

うーむ、自分の研究テーマにこれを言ってしまうのはアレがソレなんだけど、"統計的因果推論"…いかにも怪しげな感じだし、更に心理学も加わるとより一層胡散臭い雰囲気が漂ってしまっている…。

このセミナーにはボクが拡張しようとしている統計的因果推論手法である LiNGAM の提唱者の清水先生もいらっしゃって講演されるというので行ってみたんだけれど、一番最初の大塚先生による科学哲学からみた因果推論の話がすごく面白くて雑にメモを取ってあるのでまとめてみる。

因果推論は哲学

手法ばかり注目していては因果推論の全体像が見えない。そもそも確率論で議論ができる話題では無いので科学哲学の視点から因果推論なるものを今一度整理しよう、という導入だったように思う。

哲学とは?

そもそも哲学ってなによっていう。哲学っていうのは以下の 3 つの議論によって物事を考えることらしい。

  • 存在論 ・・・ 何があるのか?
  • 意味論 ・・・ 定義はなんだ?
  • 認識論 ・・・ どうやって見つけるんだ?

(ボクこれを聞いたときに哲学ってこれだ!って言い切るひとを初めて見たので驚いた。)

例えば「今日は昨日の 2 倍暖かい」なーんて言うと、存在論的には気温があって、認識論的には温度計で気温を測るんだけど、意味論的には温度(気温)という尺度に積の概念が定義されていないから、この文章は「意味論的におかしい」とか言うらしい。

もうひとつ例を上げる。アリストテレスの 4 原因説をこのフレームワークで考える。4 原因説っていうのは「隣に家がある」っていうのをどうやって説明するかって考えたときに以下の 4 つについて説明すれば説明したことになるということ。

  • 何でできてる?   ・・・ 鉄筋コンクリート
  • どんな形式・設計? ・・・ 近代和風建築
  • どんな作用?    ・・・ 家族 4 人で不自由なく住める
  • なぜそれがあるの? ・・・ 小中学校も近くスーパーや駅にも不便しないから

4 原因説っていうのは上で言うところの意味論から議論を出発している。つまり「『説明』の定義ってなによ?」(意味論)を考えることで、その定義の答えである何で出来てるかやどんな作用を持っているかが存在することになって(存在論)、その答えをいかにして知るか(認識論)を考える。

結構わかりやすい(気がする)。このフレームワークで因果推論を考えていく。

デカルトの主張

デカルトは言いました。

「意識が明晰に認識しないものは存在すると言えない」

これは認識論的展開です。認識論から出発して存在論や意味論に展開しようとしている。

「意識が明晰に認識するもの」っていうのはここでは形と運動のみのようです。形相や目的は明晰的に認識できないとしています。形相っていうのは「ありかた」みたいな意味で「本屋だけど立ち読みばかりで誰も本を買わない本屋」みたいな使われ方とかそういう意味でここでは使っているように思う。で、だから形相や目的については存在しないものとして扱う、とデカルトは主張しました。

ヒュームの主張

ヒュームはものごとを認識するときに、そのものごとが何に作用するかどんな作用するかなんて我々見てないでしょっていうようなことを主張したようです。あるのは力だけ。つまり明晰的に認識するのって力だけで、それがどこにどんな影響を及ぼしてるのかって明晰的に認識できないんだから存在しないんじゃん?って言ったようです。

また、よく因果関係って人間の「習慣」じゃん?って聞くんだけど、これはヒュームが提唱者で、この習慣を恒常的連接とかって呼んでる。

ヒューム的に因果推論なるものを哲学的に考察するとこんな感じ。認識論から出発して存在論と意味論に展開していく。

  • 認識論 ・・・ 明晰的に知覚する
  • 存在論 ・・・ 力
  • 意味論 ・・・ 恒常的連接

科学哲学

こうして昨今の科学哲学ができあがったようです。昨今の科学哲学っていうのは観察データ(明晰的に知覚できるもの)からその関係性を科学的な言語で記述するための認識論的なところをがんばろうっていう風潮のことでいいとおもう。

ラッセル・ピアソン・ウィトゲンシュタイン

ラッセルとピアソンの主張はこうです。

「科学とは存在論と認識論に合致するもの」

昨今の科学哲学の基礎です。さらにウィトゲンシュタインは言いました。

「語りえぬものは沈黙しなければならない」

ここでいう語りえぬものっていうのは例えば

  • 能動的な世界への働きかけ・介入
  • 反事実的事象
  • 世界構造

なんか段々胡散臭くなってきた。でもウィトゲンシュタインが生きていた当時は天文学が流行ってたらしいので世界の構造みたいなスケールの大きい人間ではどうしようも無いことに対して考えてたんじゃないかな(という邪推)。そういう、人間ではどうしようもないことに対して介入して変化させた後のことなんて認識できいないから沈黙するようです。まぁ確かに議論しても無駄とかそういう水掛け論になって収束しなそうというのはわかる。

でも因果関係ってまさにこれで介入とか反事実的事象を考えるんだよね…

というので科学の哲学そのものを拡張していく必要があるということに至る

ルイスの反事実条件アプローチ

ここから、「ワクチンを受けたのでインフルエンザにかからなかった」という事実があったときに「ワクチンを受けなかったからインフルエンザにかかった」という反事実を真にするにはどうしたらよいだろう?っていうのを考えていく。前者は観測された事象だから真だけれど、後者については観測されてないから真偽付け難い。

そもそも伝統的論理学ではこういう観測された事象についてのみに真偽が判定されるので後者については真偽が定義できない。

そこで可能世界意味論なるものが登場する。

  • 「地球は青い」は必然 => 偽
  • 「地球は赤い」は可能 => 真

といった感じに、世界をいくつも考えて、そういう事象がありえる世界があるかどうかっていうのを考えるのが可能世界意味論です。

で、さっきのワクチンとインフルの話に戻ると「仮にワクチンを受けなかったらインフルにかかった」という命題として、可能世界意味論的に考えると

「ワクチンを打ってない可能世界のうち現実世界に最も近い世界ではインフルにかかった」

と言い換えられます。最も近い世界っていうのは、ワクチンを打ったか打ってないか以外の事象についてはほとんど同じことが起きる世界のことで、逆に色々違う理の世界だと、インフルになったとしても別の事象が原因かもしれないってことになる。だからワクチン以外の差が無い世界を引き合いに出す必要があります。

ルイスの哲学的を考察するとこんな感じ(このへんメモあるけどうろ覚え…)

  • 意味論 ・・・ 可能世界意味論に基づく
  • 存在論 ・・・ 可能世界
  • 認識論 ・・・ 認識なんて出来ないよ

認識できません。ルイスはそう言ってたようです。可能世界は認識できいない。そこでルービンとパールが出てきてこの可能世界意味論上でどうやって因果関係を認識するかを議論し始める。

ルービン

双子の兄弟がワクチンを受けなかった時の状況を見る、っていうのがルービンの基本的な考え方のようです。でも双子なんてめったにいるもんじゃないし、なるべく似た人を集めて観察します。

似ているってなんだ?っていう問題はある。

因果推論の分野でよく聞く傾向スコアっていうのは関連性質を全てようやくする特徴量のことらしい。この特徴量を使って似ているかどうかを判定するようです(詳しくは星野先生の講演でお話されてた)

  • 意味論 ・・・ 現実と類似世界との差
  • 存在論 ・・・ 可能世界
  • 認識論 ・・・ 傾向スコア・マッチング回帰

パール

一方パールは科学言語を拡張したようです。確率論では因果関係は定義できないっていうのは介入を確率論の言葉で記述できないからです。だから do 演算子っていうのを定義して確率論を拡張しました。それで PC アルゴリズムだったり清水先生の LiNGAM が提案されてたりする。

パールは存在論から展開していく

  • 存在論 ・・・ 変数間の因果構造
  • 認識論 ・・・ do 演算子
  • 意味論 ・・・ 介入

ていう感じだった。なお、出てくる哲学者たちはお互い影響しあって主張しているように見えるけど、別にそんなことなくてたまたま同時期にこういう主張があったというのを大塚先生が話されていました。「こういうことが同時期に重なりあって主張があるというのは、面白い現象」とおっしゃられていたのが印象的だった。すごく分かり良かった。

研究していて「因果関係ってなんなんだ…」ってなるときが結構あったんだけど、こうやって展開されてきたものなのだと思うと、自分がやっていることの位置付けがわかったような気がした。歴史って大事。

統計的因果推論―回帰分析の新しい枠組み (シリーズ・予測と発見の科学)

統計的因果推論―回帰分析の新しい枠組み (シリーズ・予測と発見の科学)

統計的因果推論 -モデル・推論・推測-

統計的因果推論 -モデル・推論・推測-

ユースケース駆動開発実践ガイド を読んだ

年明けからバイト先の同僚とユースケース駆動開発実践ガイドの読書会をした。

ユースケース駆動開発実践ガイド

ユースケース駆動開発実践ガイド

きっかけ

僕はバイト先で Web サービスを作っているんだけれど、仕事の進め方に疑問だらけだったのでなんとかしたくて読んだ。

というのも、社長が欲しい機能「こういう感じの機能が欲しい」と伝えられて、僕がなんとなく作ってみたけど、社長が思っていたものと違ったり、社長の中での暗黙の仕様があったりして突っ返されたりなあなあの実装のまま使ってしまったりという現状があまりにも働いていて辛いのでなんとかしたかった。

なんとかしたいとは思っていたんだけど具体的にどうすれば良いのかわからん…という状況の中 NSEG でスクラム体験ワークショップをやるというので参加してきた。

スクラム体験ワークショップ・1DAYプログラム お試し版 午後の部 - 長野ソフトウェア技術者グループ | Doorkeeper

これは本当に行ってよかった。理想的な仕事の進め方だ~~!!と思った。でもスクラムに関してプロがいないとこれはうまく回らん…というのもわかったりして、じゃあどうするって時に、このイベントで講師していた方が「私は一人で仕事することが多いのでスクラムじゃなくて ICONIX で仕事してます」ということを言ってたのを思い出した。

ICONIX プロセスについて調べると小規模のチームで開発するのに向いてるし、実装以前に暗黙の仕様とか無くして全部明言化して且つその過程で設計もできるよってものらしい。

読書会

ICONIX について Google 様にお尋ねすると「ユースケース駆動開発実践ガイド」という本が詳しいと書いてあったので買ってはみたが、ひたすら厚いしひとりでやる気は起きなかったのでバイト先の同僚を誘った。

早めに仕事の進め方をなんとかしたいという思いがあったので、多少無理して週 2,3 回夜に集まって2,3 時間音読するというのをやって、1ヶ月で9章まで読んだ。早いペースだと思う。10章以降は、これ以上はもう読まなくていいねって言ってやめた。

学び

簡単にまとめてしまうと ICONIX プロセスっていうのは以下をやることだった。

  1. 要件からドメインモデルを構築すること
  2. ドメインモデルの言葉を使ってユースケースを記述すること
  3. ユースケースは基本コースと代替えコースだけを書いたシンプルなテンプレートを使うべきで、事前条件や事後条件などだらだらした項目はいらない
  4. ユースケースからロバストネス分析を行って、ロバストネス図を描くこと
  5. ロバストネス分析によってクラスの属性が発見される
  6. ロバストネス図からシーケンス図を描くこと
  7. シーケンス図を描くことでクラスのメソッド(振る舞い)が発見される

以上をやりながらドメインモデルを逐次更新していくと最終的にはユースケースから漏れのない完璧な詳細設計(つまりクラス設計)が出来上がるよ!ということだった。

特にロバストネス分析というのが ICONIX プロセスの核のようだった。一般的な開発だとユースケースからクラス設計をしてしまうが、ユースケースとクラス設計にはギャップがあるしユースケース自体が要件に対して不十分ということもありえるので、これをロバストネス分析によって橋渡しをするらしい。

確かに本を読みながら簡単な例で実践してみると新しいドメインモデルが発見されたりユースケースが洗練された(と思う)。

疑問

わからない箇所がまだ結構あるとも思った。

これはこの本への不満点でもあるんだけど、本の中で例がいくつか挙げられているんだけど、そのロバストネス図の抽象度が毎回異なるというか、すごく細かく分析したロバストネス図もあればざっくりしたロバストネス図が書かれる場合もあって、いったいどの抽象度での分析をすればいいんだ???というのがひとつ。

また本の中では spring framework での例がのっているんだけど、 Symfony だとどう書くんだろう?ううん、もうちょっと書くと、ネイティブアプリでの MVC での例が載っていたけど、これはこのまま Web MVC に適用できないよなあと思っていて、もう少しロバストネス図やシーケンス図の例が見たい!っていうのがある。

あと結局暗黙の仕様を顧客から抽出しないといけなくて、これに関してはこの本では「何度も問いかけろ」とだけあった。これに関しては確かに ICONIX プロセスの保証する範疇外だよなあとは思うので何か別の資料に当たらないとなあと思っている。

なぜ 10 章以降を読まなかったか

9 章までで ICONIX プロセスの本質はすべてカバーできたなあと思った。 10 章以降は詳細設計から実装する箇所で spring framework でどう実装するかという話が主だったように見えたので省略した。

次に読む本

目標は ICONIX プロセスのエッセンスをバイト先で使っている Symfony での開発に導入していい感じに仕事をすすめることなんだけど、Symfony は DDD を推奨しているので DDD をきちんと勉強しないと使いこなせないぞと思っている。なので次は エリックエヴァンスドメイン駆動設計を読もうと思っている。

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

うーん、東京のベンチャーとかでバイトしている学生がうらやましい。すでに能力がある人が書いた綺麗な実装を参照しながら新しい機能つくれるんでしょ。設計についてコードから勉強できるのうらやましい。

一方で開発環境の構築からインフラの設計、ソフトウェアの設計、開発と運用全部丸投げされる僕…。各項目に関してまったく知識が無いわけではないけど、理想的な状況というのを文献でしかしらないので、実際やってみると「こういう場合はどうすんだ…」みたいなのめちゃくちゃあって圧倒的に経験不足を思い知る。それにあまり時間をかけずにさっさとやれという圧力もかけられるので、勉強時間を満足に取れずになあなあでいろいろなことを進めてしまって結局なあなあなものができてサービス止まりまくってる。死にたい…。大学院生として本分の研究もあったりして、こちらばかりに時間が取れなかったりもするししんどい…という弱音…

なんのノウハウも無く、知識と経験のある人もおらず…というところから始めるのしんどいお…

ガルパン小説 1 巻読んだ

ガールズ&パンツァー (MF文庫J)

ガールズ&パンツァー (MF文庫J)

ガルパンはいいぞ」が言いたくてアニメ見て立川まで映画見に行った

アニメは武部沙織ちゃんがとっても頑張ってた!モテたいが動機で始めた戦車道で真剣なみぽりんに当てられてがんばっちゃうさおりん、きもち…わかるよ…。アニメでみぽりんがちょっとすごいことするとさおりんがみぽりんの能力を羨むような描写がちょいちょいあって(僕の妄想かも。でもそういう演出多分あったとおもう)、だからアマチュア無線二級取ったよ!!!ってみぽりんに報告するさおりんがすっごい嬉しそうでうわあああさおりんがんばったんだねええええうええええんうわああん

小説版だとさおりん視点で書かれてるっていうから映画後即購入した。小説、さおりんの頭弱い感じが全面に出ててたいへんに良い。でも努力家なんですよ、彼女。いや、努力家というか、無意識でがんばっちゃうタイプだ、頑張ってるって自覚無く頑張れちゃうというか、目標達成のためにどういう努力とか工夫をしたらいいのか無意識で考えて実践できる素敵な女の子なんだ。きっといい彼氏ができるよ…でもこういうタイプの子、ダメンズにひっかかりやすいよね…

さおりんは料理上手だったり身だしなみもきちんきちんとしていて、こういうところからも手を抜かないで頑張る姿勢が見て取れて素敵だ。ダメダメな幼なじみのお世話もしていたりして、こういうところからダメンズにひっかかる可能性も見て取れて辛い

いや、小説、正直さおりんの口語調で書かれるので読んでて非常にしんどい。あと 2 巻もあるんだけど、読みきれるかな…

Recruit の Winter Internship 行きました

書こうと思っていたけど長野戻ってきてから忙しくて1周間も経ってしまった…。

データアナリストコースに行きました。まさか選考に通ると思わなくて、案の定行ってみると東大京東工大早稲田慶応のオンパレードで地方国立なんてボクだけでちょっと恥ずかしいきもちもした。コンペティション形式で、チームのメンバの言われたことを実装していたら優勝してしまった。

勝手にデータサイエンティストって IT エンジニアに寄っていると思っていたけど、そんなことなかった。色んなバックエンドのひとがいました。アプリを良くするためにデータ分析が必要でそれはアプリエンジニアの仕事なんだって思っていたんだけど、そうではなくて、データ分析だけに特化した部隊が色んな部署から仕事を受けてやっていました。他の会社でもそんな感じかな。

データ分析とか機械学習とか、ボクもやり始めてまだ 1 年足らずだけれど未だにさっぱりな部分が多くて、一方でインターンに来てるひとたち数学に造形が深くて作業を隣で見てるだけでもとても勉強になったし辛くなった。 学部の 1 年の終わりに初めて IT 勉強会に行って発表しているひとたちの内容が何一つわからなくて喉の奥がつまるような感じをしたのを思い出した。あれから 4 年立って誰が何喋っても結構わかるというくらいになったし、データ分析にまつわる知識もやり続けてればきっとついてくるさ、と思って今後もがんばります。 インターンに行って周りにはあんまりいないデータサイエンティストって呼ばれているひとたちといっぱい話して自分が知らないことを認識できたし、彼らがどういう感覚で数理モデルを読んだり提案しているのかっていうのが結構わかった気がする。今後勉強するべきことっていうのがはっきり認識できたし行けてよかった。

いい会社だなーと思った、自分のスキルに自身があるひとたちばっかりだった。すごい。新卒で入ってつぶされないか?とか他の新卒の連中に勝てるの?とか色々考えもするけど、なんだか普通に大丈夫な気もしていている。

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

ココロコネクト キズランダム

ココロコネクト キズランダム (ファミ通文庫)

ココロコネクト キズランダム (ファミ通文庫)

前回は人格入れ替わりで今回は欲望開放の話。普段は理性でうまくやるところを欲望開放が起こると言動に起こしてしまうという、今回も仲良し 5 人組の人間関係をぶち壊しかねない危機が次々に振りかかるのをにっこにっこしながら読んだ。普通に趣味の悪い話なので面白い(褒めてる)

アニメもそうだったけど、この辺の話から稲葉んが最高にかわいいですな、ボクは伊織ちゃん推しだけど

青春ですなあ、友達を傷つけるから私の本心は言えない!!!みたいなの気遣いを仲間内できたの高校までだったなあ。大学以降で知り合って仲良くなった連中はお互いをどんだけ振り回しても壊れない人間と思ってつるんでいるのでそういう気遣いありませんは…

ここまで書いてから読書メータをながめる

やっぱこのシチュはキツイって感じるひとおおいよな、こう、言ったらまずい、みたいなの言ってしまうから、確かにきついんだよな、うん、そういう本音と建前の本音がバンバン出てしまう状況っていうのを設定して物語にしてるのめっちゃ面白いんだよな。そういう普通の話だと言及しにくい人間の表に出ない部分を、表と一緒に上手く書いてあっておもしろい。人間の表に出ない部分を書く話っていっぱいあるんだけど、ココロコネクトは表と裏がいい具合に共存して見ててはらはらさせるごたごたがめっちゃ面白い

早くアニメ化されてないところまで読み進めたい

Centos7 で NFS サーバを立てて Ubuntu からマウントして使う

サーバの設定変えた時メモっとかないと忘れるので面倒くさがらずメモすることにしました

サーバ側(Centos7)

# yum -y install nfs-utils
# vi /etc/idmapd.conf

Domain = gekogeko.org

# vi /etc/exports

/home/user/share 192.168.0.0/24(rw,all_squash)

# chown nfsnobody:nfsnobody /home/user/share
# systemctl start nfs-server
# systemctl enable nfs-server

ドメインはサーバ側はなんでもいい。/etc/exports の設定はrwとall_squash設定すればいいと思う(多分)。/home/user/share は好きなディレクトリを指定して、そのディレクトリのユーザーとグループに nfsnobody を指定しておく。

ここのオプションはこのサイトが詳しい

クライアント側(Ubuntu 14.04)

# apt-get install nfs-common
# vi /etc/idmapd.conf

Domain = gekogeko.org

# vi /etc/hosts

# initctl restart idmapd

# mount -t nfs gekogeko.org:/home/user /home/user/server
# df -hT

ドメインで指定したドメインで名前解決できるよう hosts に書く必要がある。 アンマウントするときは以下をたたく

# umount gekogeko.org:/home/user

umount しようとして disk busy うんぬんいわれたら以下を叩いて使ってるプロセスを殺す

# fuser -muv /home/user/server

再起動したらアンマウントされちゃうから、起動時に自動でマウントするには以下設定する

# vi /etc/fstab
gekogeko.org:/home/user /home/user/share nfs defaults    0    0

参考

http://www.server-world.info/query?os=Ubuntu_14.04&p=nfs&f=2

http://www.server-world.info/query?os=CentOS_7&p=nfs

https://blog.apar.jp/linux/2712/