$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

「だましの手口」読んだ

なんとなく興味があったので読んだ。この本は様々な種類のだましの手法や対策などについて解説してくれる本。オレオレ詐欺などいろんな詐欺手法があるが、いかに巧妙に行われているかを知ることができる。

本を読むまでは、オレオレ詐欺とか引っかからないだろうとなんとなく思っていたが、読んでみるとこちらが想定しているような対処方法は大体詐欺を行う側が予想しており、それには先に対策をしていると書かれていて怖くなった。よくよく考えると、詐欺をする側は言ったらプロであり、騙される側は素人なのだから、素人が考えつくものはプロも思いつくだろうと思った。しかも相手はいろんな手法を絡めて使ってくるし、心理的な現象まで利用してくる。

騙されないようにするのは難しいが、自分自身もある程度心理現象などを理解していれば騙されにくくはなると思うので、いろいろと学んでおく必要があると思った。


ちなみにこういう系の本だと、昔に読んだ影響力の武器という本が非常に面白いので、まあこの本を読まなくともそっちを読めばいいと思った。

読書メモ

読書メモを取っていたので残しておく。

  • 確証バイアス: ある考えや仮説を抱いてしまうと、それが「正しい」と示す方向の証拠を重視し、またそうした情報を収集すること 666
  • 後悔回避: 自分のとった行動を正当化して後悔しそうなシーンを無意識的に避けようとすること。後悔を避けたいがために、何気なく取った行動をそのまま継続してしまうなど 671
  • 後知恵: 何か事が起きてから、後でその原因を言及すること。また、ある現象が起きてから、生じる前にそれが起きることをあたかも予想していたかのようにいうこと 686
  • もし本物の霊能者なら、あなたのお金をあてにするはずがない 758
  • 気持ちにコントラストをつけると人の不安や恐怖心というのは増大する 1017
  • 小さい要求からだんだん大きくしていって、大きい要求を認めさせるのをローボール技法という 1749
  • 保有効果: あるものをいったん自分のものにしてしまうと、その価値が高まってしまい手放したくなくなってしまう心理現象のこと 1795
  • 返報性: 他人から何か恩恵を施されたら、お返しをしなければならない気持ちになること 1837
  • ハロー効果: ある人物や物の1つか2つの際立った特徴に引きずられ、他の特徴ないしは全体についての評価を高くまたは低くゆがめる現象のこと 2352
  • 集団浅慮: 集団での合議によって、非合理かつ危険な意思決定が容認されうること 2694

自分流Elasticsearch入門

【2016/09/10追記】
勉強しなおして、Elasticsearchの知識についてさらにまとめた記事を書いたので、そちらを参照してもらうと良さそうです。

blog.shibayu36.org



最近Elasticsearchの勉強をした。ただ、入門のためどのような資料が適しているかを知るのが大変だった。そこでどのように勉強したかについてメモをしておく。少しまとめエントリー的なノリになりそう。

  • Elasticsearchの概念を知る
  • 全文検索技術の基本を知る
  • Elasticsearchのドキュメントのたどり方を知る

の順に学習を進めていった。

Elasticsearchの概念を知る

Elasticsearchの学習を始めようとした時に、まずは基本からということで以下の本を読んでいた。

しかし、この本だと内容が0.*系の話であり、現在のElasticsearchのバージョンは1.6であるため内容が古く、0.*系から1系でだいぶAPIとかも変わっているため困る。また、Elasticsearchの概念を学ぼうとした時に、あまり分かりやすくはまとまってなかったかなと感じた。


そこでまず最初に読んだ記事は
code46.hatenablog.com

この記事はElasticsearchを使うなら必ず読んでおくと良いと思う。Elasticsearchを使う際には学ばなければならない概念が多い。この記事ではその概念を図などを使って分かりやすく説明してくれる。これによりnode, index, typeの構造や、mappings, analyzer, tokenizer, filterの関係、query, filterの関係、簡単なAPIの使い方、検索結果のソートの方法など、基本的な概念や使い方を学ぶことができる。これまで調べた記事の中で一番分かりやすかった。

全文検索技術の基本を知る

続いて、全文検索技術の基本を知っておかないと、Elasticsearchをうまく使えないと考えた。

まず参考にしたのは以下の資料。これの最初の方の部分からN-gram形態素解析について学ぶことができる。
speakerdeck.com

またこちらの資料からも正規化やストップワードなどの仕組みを学ぶことができる。
www.atmarkit.co.jp


この二つから得られるものは検索技術に関する基本中の基本であるが、この部分を軽く抑えておくか否かで使っている時の理解度が違ってくるように思った。ただしもちろん検索技術は奥が深いので、Elasticsearchを利用していてこれだけでは分からないということがあった場合は、さらに知識を深める必要があると思う。

Elasticsearchのドキュメントのたどり方を知る

今後利用していく上で必ず必要になるのは、何かわからなくなった時にどのようにドキュメントを辿るかを知っていること、だと考えた。そこでドキュメントのたどり方について学んだ。


ここで最初の資料に戻る。
code46.hatenablog.com

一番最初に読んでいた頃は、概念について全く知らない状況だったため、まずはそれを知るという頭でこの資料を読んでいた。そのため概念は理解できたが、mappingsやqueryの中身まで追いかけなかった。そこでこの資料の中のmappingsで定義している意味やqueryで指定しているものの意味すべてを、公式ドキュメントから探すということをやってみた。

公式のドキュメントはElasticsearch Guide [8.0] | Elasticを参考にする。構造化されているのでそこからたどってみるか、右上の検索から探すと良い。ただ、個人的には構造から辿って行くとそれ以外のAPIとの関係を掴みながら学習できるとは思った。


また、最初の資料では食べログのデータをElasticsearchに入れるという部分のコードはなかったので、これも自分で書いてみると理解が深まる。

Emacsでscala-mode2とensimeを使ってScala環境を作る

Scalaを書くにはIntelliJを使うのが良さそうだったのだけど、使ってみたらいつもの感覚で使うのがけっこう難しかった。そこでEmacsでの環境構築を行ってみた。今回はscala-mode2とensimeを利用した。特にensimeに関してけっこうはまってしまったので、そのあたりを多めに書く。

scala-mode2

最近はscalaemacsで書くならscala-mode2を使うみたい。セットアップは簡単でM-x package-list-packagesしてscala-mode2をインストールした後、以下をどこかに書いておけば良いだけ。

;;; scala mode
(require 'scala-mode2)

これでひとまずハイライトなどを行うことが出来た。

ensime(セットアップ編)

続いてensimeのセットアップを行う。ensimeを利用することで、型を利用した補完、エラーのハイライト、定義ジャンプなどが利用できる。ensimeはensime-serverというものにemacsのclientでアクセスすることによって、これらの機能を実現している。この仕組みのため、Emacs以外にもSublime TextやAtomで使うことができる。Vimでは使えないみたい(VimIntelliJにいい感じのプラグインがあるみたいなのでそっちで良さそう)。

基本的には https://github.com/ensime/ensime-emacs/wiki/Quick-Start-Guide に書いてある通りに実行していくと良い。このセットアップのやり方が少し分かりにくくてはまってしまった。


まずemacs側にensimeのclientをインストールする。これは簡単。まずM-x package-list-packagesしてensimeをインストール。その後以下の様な設定を書いておく。

(require 'ensime)
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)


ensimeではプロジェクトごとに.ensimeというファイルが必要になるので、続いてこちらを作れるようにする。これはsbt-pluginが提供されているので、そちらを利用する。

このプラグインを利用するため、~/.sbt/0.13/plugins/plugins.sbtを編集する。

addSbtPlugin("org.ensime" % "ensime-sbt" % "0.1.7")

これでsbt gen-ensimeが利用できるため、ensimeを利用したいプロジェクトのルートディレクトリに移動して、コマンドを実行する。

$ sbt gen-ensime

.ensimeファイルが出来上がり、ensimeを利用する準備が出来た。


最後にそのプロジェクトのファイルを開いている時にM-x ensimeを実行することで、ensime-serverが自動的に立ち上がり、補完などをすることができる。

ensimeの補完でauto-completeを利用する

ここまでの設定で補完ができるようになっている。しかしensimeのデフォルトの設定では補完にはcompany-modeが利用されている。僕は補完を使うときはいつもauto-completeを利用しているためこれに合わせたい。調べてみると、これはensime-completion-styleという変数でカスタマイズが出来る。

auto-completeを利用するには設定に追記すれば良い。

(setq ensime-completion-style 'auto-complete)

ensimeをさらに便利にする

せっかくなのでさらに便利にしてみる。

  • ドットを入力した際に自動的に補完が起動する
  • カーソル下の情報をEldocで表示する
    • エラーがあるときはエラー内容を、そうでない場合は型情報を表示する

これはid:taraoさんの設定 が非常に参考になるので、パクってみた。

最終的な設定はこちら

Tips

今回はパクっただけだけど、この設定がどのように実現されているか軽く調べてみた。


ドットを入力した際に自動的に補完を起動するのは、仕組みさえ分かるとけっこう簡単。まずドットを入力した後補完のためのコマンドを実行するというinteractiveなコマンドを作成する。その後ドットに対するキーバインドにこのコマンドを設定すれば、ドットを入力した時に自動的に補完を起動してくれる。

(define-key scala-mode-map (kbd ".") 'scala/completing-dot)


Eldocで表示する内容を生成するには、eldoc-documentation-functionというのをカスタマイズすれば良い。バッファごとに内容を切り替えたいと思うので、setq-localを利用すると良さそう。

以下の様なものをensime-modeのhookに入れておくと、ensime-modeが立ち上がった時にeldoc-documentation-functionが変更され、eldocにエラー情報や型情報を表示できる。

(defun scala/enable-eldoc ()
  "Show error message or type name at point by Eldoc."
  (setq-local eldoc-documentation-function
              #'(lambda ()
                  (when (ensime-connected-p)
                    (let ((err (ensime-print-errors-at-point)))
                      (or (and err (not (string= err "")) err)
                          (ensime-print-type-at-point))))))
  (eldoc-mode +1))

まとめ

Scalaやsbt、ensimeの仕組みがあまりわかってないままカスタマイズを始めたので、ensimeが動くところまで行くのに結構時間がかかってしまった。しかしこれで補完を行ったり定義に飛んだりといったことができるようになったので、Scalaの開発が出来そうになった。