iriya-ufo's blog

Curiosity was simply the first derivative of knowledge.

「お釈迦さまの脳科学」を読んでみた

人間はよく考える生き物です。なぜ生きているのか、幸せとはなにか、そういった普遍的な問いに対して様々な解答がなされてきました。とりわけ仏教の説く思想は他の宗教と大きく違うと言われます。 そこでお釈迦様オリジナルの説法を脳科学の視点からみるとどうなるのか知りたくて本書をとりました。ですがこれは脳科学の本ではなく、仏教に関するうんちくの本です。うんちくと書くと聞こえが悪いですが、ようは歴史的経緯とその解釈を加えたものです。

苫米地さんの本なんで想像はついてましたので問題なしです。

いくつか興味深い内容についてピックアップします。

人は「あの世」について知りたがる。釈迦は死後の世界はありませんと断言したわけではないが、そういった形而上学的問いに対しては、「それについては答えない」と言っている。本意は死後の世界について考えても無駄なので今を生きなさいとおっしゃっている。
葬式は仏教で行うべき儀式ではない、戒名も死後授かるのではなく、生きている間に仏弟子=菩薩になるために授かるものだ。
スピリチュアル、霊の存在、カルトなどが絶えないのはそれがお金を産むビジネスになるから。しかも死んだ人間が「あの世はなかった」などといって訴えられることもない、嘘つき放題のビジネスだ。
煩悩はなくすのではなくコントロールする
瞑想は何も考えないのではなく、自分の感覚や思考を純粋に観ることである。止観瞑想とよばれる。
悟りは論理ではなく感覚で得られるもの

「空」の思想なども面白いと思いました。

Mac に Docker 環境を構築する

とあるプロジェクトで古い Ruby と Rails をいれて動かさなくちゃいけない、みたいな場面って開発やってる方はあるあるだと思います。そして現最新の Mac OS Yosemite では簡単には環境構築できなかったりするのもあるあるですよね。レガシーな環境っていやですね。そこでプログラムを動かす環境を仮想で作ってしまおうという考えに至るわけですが、一昔前と違って様々な手段が登場しました。

今回はコンテナ型の仮想環境を構築できる Docker を使ってみます。なお Docker にはセキュリティ上の根本的欠陥があるとして、Docker と決別した Linxu ディストリビューションもあったりします。

CoreOSが「Docker」と決別–独自のコンテナ実装「Rocket」を公開

Rocket の方がナウイ感じがしますが、いかんせん情報が少ないので今回は Docker でいきます。

事前準備

VirtualBoxhomebrew をインストールしておいてください。 VirtualBox は Linux カーネルでしか動作しない Docker を Mac で動かすために必要です。homebrew は boot2docker と呼ばれる Docker 用の Linux イメージのパッケージ管理と docker コマンド郡の管理のために必要です。

docker パッケージのインストール

docker ツール群をインストールしましょう。Mac だと簡単です。

$ brew install docker boot2docker
$ docker -v

バージョンが表示されたらインストールできています。

docker イメージのダウンロード

$ boot2docker init

Docker の仮想イメージが ~/.boot2docker にダウンロードされます。

docker イメージの起動・停止・確認

次のコマンドで docker イメージが起動されます。

$ boot2docker up

初回は環境変数などが表示されるので、zshrc とか .bashrc に追記しておきましょう。また VirtualBox を起動すると boot2docker が動作しているのがわかると思います。

Waiting for VM and Docker daemon to start...
........................oooooooooooooooooo
Started.
Writing /Users/iriya/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/iriya/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/iriya/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
# 以下に環境変数が表示されるのでそれぞれシェルに設定
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/iriya/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

停止と状態確認は以下の通りです。

$ boot2docker stop
$ boot2docker status

Docker の操作

ここまでで Docker の環境は用意できました。実際の仮想環境は Docker ホスト上にコンテナという形で作っていくことになります。動作イメージはこのような感じです。

それでは練習として CentOS イメージのダウンロードと確認をしてみましょう。

$ docker pull centos:centos6
$ docker images

オプションの確認は下記コマンドでできます。

$ docker —help
$ docker COMMAND —help

では次にコンテナの起動をしてみましょう。

$ docker run -t -i -d --name centos6 centos:centos6 /bin/bash

-d はバックグラウンド
-i は Keep STDIN open even if not attached
-t は Allocate a pseudo-TTY

プロセスの確認をしてみます。

$ docker ps

コンテナにアタッチしたりデタッチするには以下のようにします。アタッチする際はプロセスで確認したID番号を指定します。なおアタッチしている状態で exit するとデタッチではなくプロセスの終了になるので注意しましょう。

$ docker attach a732c1346103 # アタッチ
C-p C-q                      # デタッチ

いろいろいじってるとゴミができます。ゴミは整理したほうがいいですね。レポジトリ名が<none>のイメージを全て削除する方法です。

$ docker rmi -f `docker images | grep "<none>" | awk '{ print $3 }'`

イメージIDを指定して削除する方法です。

$ docker rmi a005304e4e74

Dockerfile の作成

先ほどは centos のミニマムバージョンを起動していろいろ試してみました。ここでは実際に Ruby と MySQL が入った環境を作ってみましょう。構築は Dockerfile というものを作ってそこに書いていく感じになります。用途ごとにディレクトリを作成するとよいでしょう。

$ mkdir ~/docker/rbenv-mysql
$ vim ~/docker/rbenv-mysql/Dockerfile
~/docker/rbenv-mysql/Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
FROM ubuntu:14.04
MAINTAINER Naoto Inoue

# パッケージのインストールとアップデート
RUN apt-get update && apt-get -y upgrade
RUN apt-get -y install build-essential
RUN apt-get -y install git vim curl
RUN apt-get install -y zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev

# rbenv のインストール
RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv
RUN git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build
RUN ./root/.rbenv/plugins/ruby-build/install.sh
ENV PATH /root/.rbenv/bin:$PATH
RUN echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh
RUN echo 'eval "$(rbenv init -)"' >> .bashrc

# ruby のインストール
ENV CONFIGURE_OPTS --disable-install-doc
ADD ./versions.txt /root/versions.txt
RUN xargs -L 1 rbenv install < /root/versions.txt
RUN echo 'gem: --no-rdoc --no-ri' >> /.gemrc
RUN bash -l -c 'for v in $(cat /root/versions.txt); do rbenv global $v; gem install bundler; done'
RUN rbenv global 1.9.2-p320

# mysql のインストール
RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections && \
    echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections && \
    apt-get -y install mysql-server
RUN apt-get clean

# mysql の設定ファイル
ADD ./mysql-listen.cnf /etc/mysql/conf.d/mysql-listen.cnf
ADD ./my.cnf /etc/mysql/my.cnf

# password なしでリモートから root でログインできるようにする
RUN (/usr/bin/mysqld_safe &); sleep 3; echo "grant all privileges on *.* to root@'%';" | mysql -u root -proot

# ポート開放
EXPOSE 3306

# 起動オプション
CMD ["/usr/bin/mysqld_safe"]

Linux 触ったことある人なら何をやっているかはだいたい分かると思います。上記の ADD コマンドはファイルを Docker 側に渡す書き方です。同じディレクトリに my.cnfmysql-listen.cnfversions.txt のファイルを作っておきましょう。versions.txt にはインストールしたい Ruby のバージョンを書いておきます。

Dockerfile ができたらビルドします。ビルドする際に -t オプションでイメージ名を決められるのですが、<アカウント名>/<パッケージ名> という形式が推奨されているようです。

$ docker build -t iriya/rbenv-mysql .
$ docker images # 作成されたイメージの確認

作成したイメージからの起動はこのようにします。

$ docker run -i -t iriya/rbenv-mysql /bin/bash

Docker Hub

Docker には Docker Hub という GitHub のようなコミュニティがあります。ここに作成したイメージをアップしておくと誰かの役にたつかもしれません。アップの仕方は非常に簡単です。アカウントを作った後に以下のコマンドを打つだけで終わります。

$ docker login
$ docker push iriya/rbenv-mysql

こちらがイメージになります。pull コマンドでダウンロードできます。よかったら使ってみてください。

参考

すぐにDockerを試したい人のための基礎コマンド

人口知能と生命

非常に興味深い記事を見つけた。

宗教は人工知能を生命と認められるのか – シンギュラリティと宗教

生命とはなにかという問いは長年の間、議論されてきた命題だ。 生物学的定義では代謝と自己複製を行う個体といい、イデア論と物質主義では真逆の定義をしている、また宗教によってさまざまな解釈があるのは衆知のこと。

人工知能を作るということは人類にとっての大きな課題だった。コンピューターを生み出した人類はそこに生命を宿そうとした。プログラミングによって無機質な物体に知能知性を宿そうとした。

悪夢をつくるグーグルAI:名作映画を「悪夢の映像」に グーグルは人工知能について研究しまくっている。未だ到達してない領域であるが、遠くない将来には実現するのかもしれない。

シンギュラリティという言葉を知っているだろうか?「強い人工知能」の誕生により、今まで人類が行ってきた科学的予測などはまったくコンピューターに追いつかなくなり、代わりにコンピューターがポスト・ヒューマンとして科学技術を進歩させていくという考えだ。そんなシンギュラリティ後の世界が誕生すれば、人類が持っていた宗教観の生命の定義はどうなるのだろう。

僕は改めて、仏教の何か言ってるようで何も言ってない禅問答のような考え方は好きだなぁと感じた次第である。

行動しなければ何も手にはいらない

突然だが僕は今、彼女が欲しい。彼女が欲しいと思っている。好きな人となにげない会話をしたりどっか遊びにいったりしたい。でも僕はイケメンでもなければ社会的地位が高いわけでもない。そんな僕にどうやったら彼女ができるのだろう?

僕は理系人間だからまずお手本となる教科書が欲しいとおもってしまう。そんな話しを友人にしたら、この本を薦めてくれた。

この本、読み物としてとてもおもしろい。第一講が60ページほどあるのだがそこまでにいくつもいくつも“理論”が出てくる。 例えば、「聞き上手」はモテるというけど、じゃあどっやったら聞き上手になれるんだよ!と思うことがよくある。本書にはきちんと解答が書いてある。それが“大変じゃない?理論”だ。女性は愚痴を言いたい生き物だ。そこで愚痴を引き出す場所で、例えばバーなどで、「大変じゃない?」「意外と大変じゃない?」「頑張ってるね」の3つのキーワードを使って喋ってもらうテクニックを紹介している。

ここだけ書くとちまたの恋愛マニュアルとそれほど違わない気がするのに、なぜか本書は妙な納得感がある。それは著者の文体がそうさせているのだと思う。結局中身はありきたりの内容だけど、これのすごいところは“その気にさせてくれる”ことだと思う。とにかくなんでもかんでも「xxx理論」と称してこうしろあぁしろと言ってくる。こう書かれるとなんだかそれでいけそうな気がしてくるのだ。不思議なものだ。

とくに「最後に〜追記〜」の部分はちょっと感動した。

「実践しろ」

これがどれほど大変なのか分かってるよと共感してくれてるのだ。その上で素晴らしい世界が待ってるから一歩踏み出せと、前へ出ろと、こんなこと言われたらやるしかないという感じになる。 僕はこれが情報商材の本じゃなくてよかったと思うよ。

顔とか、運動神経とか、センスとか、才能とか、そういうので負けるのはいい。

それは、自分で選べるものじゃないから。

でも、

行動は、

行動することだけは、

決して、誰にも負けてはならない。

なぜなら、

それを「する」か「しない」かは、

自分で選べるのだから。

スタートアップで大事なこと

スタートアップは難しい。人はいない、金はない、技術もない、無いことづくしである。そんな不利な状況を克服して成功するためにはいくつかコツがいる。もちろん小手先のテクニックだけではダメだが、やる気だけでなんとかしようとするのもナンセンスだ。スタートアップにはスタートアップの戦い方がある。今回はちょっとした事例を紹介しつつ、あなたのマインドセットをスタートアップ向きに変えることができれば幸いだ。

事例紹介

「不動産所有者に対して、コストをかけずに管理を代替します」というサービス。

時流に乗ること

突然だが AirBnB というサービスをご存知だろうか?日本でもかなり認知度が上がってきたサービスなのでけっこうな人は知ってると思う。AirBnB とは一言でいえばこうだ。

「空き部屋を他人に貸し出すマッチングサービス」

今回の事例はこの AirBnB を利用したビジネスだ。AirBnB 並のビジネスを作りあげるのは大変だが、AirBnB に乗っかったビジネスをちょこっとやるのは全然難しくない。これが大事な点の一つ。

時流に乗って巨人の肩を借りる

新しいビジネスといいつつ結局は既存の組み合わせでちょこちょこやるだけでそこそこ儲けられるのである。

アイデアは単なる組み合わせ

何も全く新しいことを始める必要はない、むしろ全く新しいものなんていうのはこの世にはない。アイデアとは既存のものの組み合わせだ。

REAT でやっている組み合わせはこうだ。

部屋の管理 x 短期賃貸の需要 x AirBnB

お金を使わない

REATのHP制作にかかったお金はいくらだろうか?実はこれドメイン代とテンプレート代を合わせた5000円ほどで作られている。人件費はかかっていない。なぜなら自分で作っているからだ。こういうと「技術がないとこんなサイト作れない」と反論する人がでてくる。これは間違いだ。今の時代ネットでググればなんでも分かるので調べたらHPくらい簡単に作れる。裏を返せば、ググってHPが作れない人はビジネスをするのに向いてない。いますぐ就活して企業で働くことをオススメする。

ビジネスをするのにお金は必要だけど、ここぞという時に大金を投入するのが大事だ。あなたのビジネスがとにかくかっこいいHPを作ることで稼ぐようなものならHP制作にお金をかけてもいいが、やりたいことは別にあるだろう?それは豪華なHPを作るビジネスではないだろう?であるならば金はかけないでおこう。

市場が存在すること

今はなくてもこれから市場が拡大するところを攻めていこう。REAT がターゲットにしてる相手は外国人観光客だ。訪日客は増えている。これは感想ではなく事実だ。

訪日客の消費額、1~3月に7千億円超 「爆買い」中国人が1人平均30万円と突出

データをもとにした市場調査は予めやっておこう。

仮説検証が済んでいること

本当にこのサービスを使ってくれるのか?これで儲けられるのか?予め検証しておこう。REAT でやっていることはまず自分たちでできることだ。自分の部屋を AirBnB に登録してどのくらいの宿泊率になるのかなどのデータは取れるだろう。そのデータを元に仮説を立てて検証しておこう。

行動に移すこと

これが一番大事なこと。今日何をしたのか。アクションを起こしたか。

  • AirBnB にアカウント登録してみた?
  • HP試しに作ってみた?
  • 不動産やってる知り合いみつけた?
  • IKEA で家具の値段調べた?

できることはすぐやる。すぐ動く。 頭を使って考えて、行動に移せ。

BABYMETAL

メタル可愛いベイビー、あびゃーーー

気づいたらアルバム購入してた・・・

「小さなチーム、大きな仕事」を読んだ

37signals の創業者が書いた本。だいぶ前にIT界隈で賑わった本を今更ながら読んだ。タイトルにある通り、少ない人数のチームでも大きな成果を得る仕事をするにはどうすればいいのか、を主軸にエッセイ風にまとまっている本だ。 どうすれば世界各国にばらばらにいるエンジニアとコミュニケーションをとっているのか、生産性を高くするためのチーム編成とはなにかを期待して読んでみた。書かれている内容は示唆に飛んだものばかりだが少し具体性に欠ける内容だ。まぁ本書にもある通り「真似事の企業」をしてもうまくいかないのだから、いかにして自分たちの強みを活かしたチーム編成を創りだすかが大事なのだと思う。

目次から気になったところをいくつか引用して自分への戒めとしたい。

ワーカホリックはバカげている

「仕事依存症患者は重要な点を見逃している。彼らは時間を投入することで、問題を解決しようとする。よく考えることをせず、力技で埋め合わせようとする。これは見苦しい解決につながるだけだ。」 28頁より

競合相手以下のことしかしない

「競合相手を打ち負かすには、なにごとも相手よりも少なくしかしないのだ。簡単な問題を解決して、競合相手には危険で難しく扱いにくい問題を残す。ひとつ上を行くかわりに、ひとつ下回るようにしてみよう。」 147頁より

限界で人を雇う

「人を雇うのによいタイミングは、定められた期間内であなたの限界を超えた仕事があるときだ。」 202頁より

Meteor が想像以上にすごかった

友人に勧められて、ウェブアプリケーションフレームワークの Meteor で遊んでみました。想像以上にすごかったです。Meteor って聞いたことあるけどどんなの?って人のためにざっくり言うとこんな感じ。

メリット

  • 環境構築が圧倒的に楽。むしろ構築なにそれおいしいの?という感じ。
  • 一行のコマンドで環境が用意でき、デプロイ機構まで内包してる。
  • 明瞭なディレクトリ構成。それに沿うと JS や CSS ファイルのディレクトリ指定が必要ない。
  • DB へのアクセスが容易。サーバーサイドの Collection は Mongo DB への API として振る舞う。
  • クライアントサイドの DB 同期が秀逸。普段はブラウザのメモリーに展開されたデータへアクセスするので超高速。
  • ログイン処理が1行で済んだ。
  • パッケージ追加が簡単。
  • Meteor だけで全て事足りる。しかしこれは Meteor 依存になるためデメリットでもある。
  • プロダクトサーバーへのデプロイも Meteor のコマンドでパッケージ化してあげればいいだけ、かついい感じに minimize してくれる。

デメリット

  • Meteor 全てに依存する。ただしこれは Meteor だけ考えておけばよいというメリットでもある。
  • Meteor が全て内包してるのでフロントエンド、バックエンドを切り離したサーバー構成とかが難しい。
  • データベースは基本的に Mongo だけ。
  • 日本語の情報がすくない。

所感

  • きっちりリリースするプロダクトでは使わないほうがいい。使い捨てか超光速プロトタイプ向け。
  • DB が Mongo な点でお察し。(※ 別に Mongo が悪いわけじゃないです。向き不向きをきちんと理解しておくということです)
  • Spacebars が気持ち悪い。

ここまで読んだうえでちょっと触ってみたい、という人は以下に進みましょう。

Meteor アプリを動かすまで

こちらのチュートリアルが素晴らしいです。英語ダメとか言わずに読みましょう。

インストール

一行瞬殺です。

$ curl https://install.meteor.com | sh

アプリの作成と起動

任意のディレクトリにて

$ meteor create microscope
$ cd microscope
$ meteor

http://localhost:3000 にアクセスすると起動確認できます。

パッケージの追加

bootstrapunderscore をいれてみます。Meteor は公式にあるものはそのまま追加でき、無いものは Github のグループ名またはユーザー名を : (コロン) の前につけて指定するようです。

$ meteor add twbs:bootstrap
$ meteor add underscore

ディレクトリとファイル構成

こちらの通りにしてください。とりあえず /client, /lib, /public, /server があればいいです。

デプロイ

主な方法は3つです。所感に書いた通りプロダクトリリースは今のところ想定してないので 1. を採用しています。

1. Meteor.com にデプロイ

$ meteor deploy app-name.meteor.com

これだけで自分の好きな名前でデプロイできます。当然一意の URL である必要があります。パスワードも何も聞かれないので設定しておくとよいでしょう。 また独自ドメインで運用したい場合は適用したいドメインの CNAME を origin.meteor.com に向けます。dig コマンドなどで CNAME が有効になっていることが確認できたら以下コマンドでデプロイします。

$ meteor deploy your-domain-name.com

【補足】 デプロイに meteor.com を使用した場合はこんな感じでサーバーの様子が見れます。

$ meteor mongo myApp
$ meteor logs myApp

2. PaaS でデプロイ

Meteor をサポートしてる PaaS は知ってる限りだと Modulus くらいです。独自ドメインはもちろん、SSL なんかもサポートしていますが、金額が高いです。

3. Meteor Up コマンドでデプロイ

mup というデプロイのコマンドユーティリティがあります。npm でインストールして任意のサーバーに push する感じです。デプロイ先サーバーは DigitalOceanAWS がオススメです。

メリット・デメリットに書いた通りリリース前提の本番環境で使うには難しいと思いますが、ガチでやるなら AWS と Elastic BeansTalk なんかを使うのがいいかも。

「アイデアのつくり方」を読んだ

『良書はいつの時代も良書である』

ふらっと立ち寄った本屋でみた帯が印象的で今でもはっきりと覚えている。この帯が書かれた本は「ご冗談でしょう、ファインマンさん」であった。 そんな帯を飾るにふさわしい本が今回のタイトルにある「アイデアのつくり方」である。この本の初版はなんと1988年だ。およそ30年前の本であるにもかかわらずその内容は色あせていない。 とても薄い本で原作者のヤングが書いた部分は62頁で完了している。後は竹内均による解説と訳者あとがきだ。そんな薄い本だから60分もあれば読めてしまう。事実僕は60分以内で読んだ。

『60分で読めるけれど一生あなたを離さない本』

本書の帯にはこう記載されていた。そのキャッチコピーに恥じない内容であることは本書を読めば分かる。ぜひ読んで欲しい。

アイデアのつくり方の五段階

さてアイデアを手に入れる方法はこうだ。

事実を集める

事実を理解、把握する段階

咀嚼

あつめた事実を自分の頭で考える、バラバラに見える事実をジグソーパズルのように組み立てる

放任

問題から目を外し、リラックスした心をつくる、つねにそれを考えるという状態だが心は平穏に保つ

ひらめき

突如として筋の通った線がみえる。 多くの人は、この段階から始めようとするか、アイデアマンと呼ばれる天才たちはこれまでの3つの段階を飛ばして一気にここに到達するように感じる。 著者に言わせればそれは間違いで上記3段階を経ることで自然とこのひらめきに至るとある。

現実への適用

おそらくここが一番難しい。すばらしいアイデアをひらめいたものの、それを寝かせずに現実に合うように組み立てなおすのがこの最終段階だ。 自然科学であるならば実証に相当する。

具体的手法などは本書を参考にしてもらいたい。

アイデアとは

アイデアとは天才だけに許された産物ではなく、原理方法によって後天的に取得可能な類のものだ。ひとつ重要なことを付け加えるとしたらそのことを24時間365日考え続けられる夢中になった心の状態になれるかどうかだと思う。

Tmux の Sync Pane 機能に感動した

「ターミナルの仮想端末といえば screen」ってな感じで使ってたんですが、とあるレンタルサーバーで tmux 設定がデフォになってたんで重い腰をあげて tmux に移行してみました。そしたら思いのほか感動したという話しです。

目玉機能は分割したペインに対して一斉に同じコマンドを発行できることでした。これでサーバー作業がだいぶ楽になりますね。どんな感じかは以下の youtube を見ていただけるとわかります。

設定ファイルは github にあげてます。

少し簡単に解説

unbind-key s
bind-key s split-window -h

こんな感じで書くと、プレフィクス押下してから一旦 Ctrl を離さないといけないです。ペイン分割系はあまり使わないのでこうしてます。

unbind-key h
bind C-h select-pane -L

一方でペインの移動やウィンドウの移動はいちいち Ctrl を離すのはやりにくいので、上記設定で押しっぱなしでも移動できるようにしています。

# sync-pane
bind e setw synchronize-panes on
bind E setw synchronize-panes off

そしてこれが目玉機能の sync pane のキーバインドです。

まだ活用しきれていないですがいい感じです。