投稿

「人はなぜ物語を求めるのか」を読んだ

イメージ
人間の思考の枠組みのひとつである「物語」「ストーリー」とは何か?というのを考える本。
特に目的もなく、なんとなく読んでみたわりにはとてもよかった。
この本ではストーリーを「できごと」と「その前後関係」という捉え方をする人間の思考の枠組みであるとして紹介している。 人間はストーリーによって多くの恩恵を受けている一方、ストーリーに捕らわれてしまうことで苦しい思いをすることもある。ストーリーという思考の枠組みについて知り、自覚することで、それにより苦しめられる危険を減らせるかもしれないですよ、というのが主な内容だった。
最近一緒のチームで仕事をしている @niku_name が以前、「人間の認知にはバグがあり、よく認知の偏りが生まれる」と言っていた。もしかするとその原因のひとつにこの本で扱っているストーリーという思考の枠組みがあるのかもしれない。



以下にこの本の中で僕が特に気になった話を記載しておく。いつか気合が出てきたらこれらの話が関係する参考文献を読んでみるかもしれない。

責任とは、どうやら、問いに答えることらしい オーストラリアの脳外科医で精神科医のヴィクトル・ E・フランクルが「死と愛 実存分析入門」および「人間とは何か 実存的精神療法」で責任という概念を重視している、という話で出てきた言葉。 責任(Antwortung, responsibility, responsabilité)とは、どうやら、問いに答える(antworten, answer, respond, répondre)ことらしいのです。 この一節は「人生への期待を手放す」という章の中で出てくる。自分が人生に期待することをやめ、自分を待っている何かや誰かへの責任を自覚し覚悟することで、期待とセットである絶望を乗り越え、耐えていくことができるようになるという話だった。
これが気になったのは実はこの話での主張とはあまり関係がない。以前「責任」とはなんだろうということについて考えていたことがあり、その時にはそれに対する納得できる回答を思いつくことができなかった。それ以来、責任とはなんだろうなーということが気になっていた。 僕にとって「責任とは問いに答えること」というこの考え方はある程度納得感のある主張であるように感じられた。これについてはもうちょっと詳しい話を知りたいなと思っているので、紹介されてい…

Phoenix 1.4 に上げたら ueberauth で Poison.decode!/1 is undefined って言われた

イメージ
最近趣味のアプリで Phoenix 1.3 を 1.4 に上げたら ueberauth_github の認証時に Poison.decode!/1 is undefined というエラーになるようになってしまって困った。

最終的にわかったこととしては現時点ではまだ周辺ライブラリが Poison 依存の状態になってしまっているようなので、諦めて Poison も入れておくことにした。状況が変わったらそのうち追記する。

mix.exs
defp deps do [{:phoenix, "~> 1.4.0"}, ... {:jason, "~> 1.0"}, + {:poison, "~> 3.1.0"}, ] end

Phoenix の JSON パーサーのデフォルトは Jason になった 1.4 にバージョンアップするときに phoenix の json パーサーとして 1.4 からのデフォルトである Jason を使うように指定し、Poison を依存から外した。
1.3 から 1.4 へのバージョンアップ手順はこちらを利用した。

https://gist.github.com/chrismccord/bb1f8b136f5a9e4abc0bfc07b832257e 2019/01/19現在の ueberauth まわりの対応状況 ueberauth の master には対応する pull request がマージされているもののまだこれは publish されていない。対応の pull request はこれ。

https://github.com/ueberauth/ueberauth/pull/88
ueberauth 本体は対応したもののの、oauth2 などが対応できていないため、ueberauth_github や ueberauth_google はどうやらまだ Poison なしには動かない状況のようだった。

https://github.com/ueberauth/ueberauth_github/issues/43https://github.com/ueberauth/ueberauth_g…

PostgreSQL勉強会札幌に参加してきた。 #jpugezo

先週PostgreSQL勉強会札幌に参加してきました。最高でした。

石田さんの話相変わらず濃すぎるwww 「ポスグレが8kbのブロックにアクセスする様子をnodejsに食わせてsocket.ioで可視化してみました」 #jpugezo — Tomoki MAEDA (@tmaeda) 2017年2月25日 プランナの機嫌をさぐりながら進むデモ #jpugezo — S.Yachi (@syachi) 2017年2月25日
お品書きはこんな感じ
喜田さん(@kkkida_twtr)の発表。去年の12月にリリースされた PostgreSQL9.6 関連の話石田さん(@iakio)の発表。PostgreSQLが アクセスしたページ(8kbのデータブロック単位のこと)位置をブラウザでグラフィカルに表示する仕組みを作ったので、色々と遊んでみる
PostgreSQL9.6 の話については、パラレルクエリが入ったぞー、とか FDW が進化したぞーとか断片的に情報を知っていたのですが、まとめて色々と聞けたり、パラレルクエリの実際のところの話が聞けるのはありがたい限り。 あとはPostgreSQL10 の話も少しあって、パーティションテーブルへの insert が遅い問題(9.6以前は trigger で実行する・・・)の改善が入ってくるというのがいま一番気になるところ。。。
石田さんの発表については、ディープながらも個人的にはかなり興味深いところでした。ReadBuffer 関数に printf() を仕込むことでページのディスクアクセスとキャッシュからの読み込みを出力し、Node + Socket.io でグラフィカル表示するというものだったのですが、こう、、、普段頭の中でイメージしているものとの答え合わせをするような感じで見ていました。 SeqScan とか Index Scan とか NL Join とかを見つつ、あーそうそう、そうですよねー、そうなるはずですよー!とか、追記型なので UPDATE でもディスク使用領域増えていきますよねーとか。VACUUM が走ったのでディスク領域再利用されるぜやっほう!とかそんな感じです。超楽しいw
実際にデモしてもらった内容はだいたい頭の中と合致するなぁという感じだったのですが、 Bitmap Index Scan がわかった(気がする)。…

HTTPoisonで handshake failure を食らった

イメージ
プログラミングElixirの第13章、GitHubにアクセスしてIssue一覧を取得するというのを写経していたら表題の問題にはまりました。https のサイトに接続しようとすると発生するようです。
こちらに従って hackney のバージョンを 1.6.1 に下げることで回避できることを確認したのでご報告します。かしこ

{ :httpoison, "~> 0.8" }http://api.github.com/repos/elixir-lang/elixir にGetリクエストを投げる301 Moved Permanently を食らうhttps://api.github.com/repos/elixir-lang/elixir にGetリクエストを投げ直すおおっと handshake failure!!

PostgreSQLで多次元配列を1次元配列に展開したい

イメージ
この記事は PostgreSQL Advent Calendar 2016 の8日目の記事です。

PostgreSQL では配列型がサポートされており、多次元配列を扱うことができます。
データ集計などを行う際に配列型を利用することで多少難しいロジックの実現や速度の向上といった恩恵を得ることができる場合があります。

ところがマニュアルの配列関数と演算子の項目を眺めてみるとお気づきになると思うのですが、多次元配列を1次元配列に一発で展開するような関数は用意されていません。
以前、ARRAY_FLATTEN が欲しいなぁと思って調べてみたのですが、現時点では何らかの方法で自前で実現してやるしかないようです。

今回、次の3種類の方法を検討しパフォーマンスについて調査してみました。他には自前で集約関数を実装するという方法もあると思いますが、今回は標準の機能で実現できる方法に絞っています。
UNNEST & ARRAY_AGGARRAY_TO_STRING & STRING_TO_ARRAYLATERAL & UNNEST & ARRAY_AGG 結果としてはどうやら3の方法が、そこそこ安定した速度が出て、気をつける点も少ないため扱いやすそうでした。

追記:あとで気づいたけどスカラサブクエリでも良かった。

"プログラマのためのDocker教科書"を読んだ

今年の2月に翔泳社のキャンペーンで買い、積ん読にしていたプログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化を読みました。



僕は用意された環境で `docker-machine create` と `docker-compose --build -d up` しか使わない程度の初心者で、正直これまでは「Docker 面倒だなぁ」という感想だったのですが、これまでちゃんとわかっていなかった次のような点が理解できた結果「お、Docker意外と面白いのでは」という気持ちになってきました。わかるって楽しい。

`docker ssh` するとどこにつながっている?Dockerfile と docker-compose.yml って同じような指定がない?docker-compose build すると何が作成される?手元で作ったコンテナを別環境に持って行って動かせるんだよね?
内容はインフラの話から、dockerの構成要素の話、dockerコマンドの話、Dockerfile、Docker Hub、Compose、Machine、SwarmからAmazon ECSまでと現時点で Docker を利用するにあたって必須となる知識 + αくらいまでをうまく網羅して解説してくれているので、僕のように中途半端にDockerを使っているという人から、今まで使っていないけど新しく知りたいという人まで幅広くお勧めできる感じの本でした。
とはいえ、これを読んだ翌日とてもよくわかった気持ちで Docker コンテナをいじろうとしたらいろいろと詰まるところがあったので、ちゃんと手を動かして覚えるのも大事ですね。。。