2017/01/25

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!!

2016/12/07

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

この記事は PostgreSQL Advent Calendar 2016 の8日目の記事です。

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

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

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

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

2016/11/15

"プログラマのための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 コンテナをいじろうとしたらいろいろと詰まるところがあったので、ちゃんと手を動かして覚えるのも大事ですね。。。

2016/11/11

Developers Festa Sapporo 2016 に参加してきました #devfesta

2016/11/11 に開催された Developers Festa Sapporo 2016 に午後から参加してきました。以下のセッションを見てきました。

  • アプリ/サービスをもっと魅力的にする!Twilioを使ったコミュニケーション機能
  • 基礎からわかるDevOps
  • System of Record と System of Engagement

最後にあった登壇者全員によるふりかえりセッションなどを聞いていると、特に naoya さんの話のインパクトが大きかったなぁという気がします。

SQLパズルを解いてみよう

・・・という記事を会社のブログに書きました。

  • SQLパズル楽しいよ
  • Window関数便利だよ
という内容のアレです。ご査収ください。

2016/05/15

React で input 要素に focus したい話

したいよねー、focus。
生DOMを扱えるようなパターンはすぐに見つかるんだけど、自前Reactコンポーネント作った場合にどう扱えばいいのかっていうのがよくわからなかったので調べた話。

statics に focus メソッドを定義してあげるといい感じに使えるみたい。
違った。ごく普通にクラスに focus メソッドを生やしておけば大丈夫だった。

1. 生DOMを直接扱うパターン

一番ベーシックなパターン。以下の方針でなんとかできる。
  1. refs と findDomNode で生DOMを取得する
  2. 生DOM の focus() を呼ぶ
refs で生DOMが取れるというのさえ押さえておけばわかる。

なるほどなるほど。こうやるのね...

export default React.createClass({
  componentDidMount() {
    ReactDom.findDomNode(this.refs["target"]).focus();
  },
  render() {
    return (
      
); } });

2. Reactコンポーネント化する

さて、生DOMはわかった。しかしどうコンポーネント化してやればいいのか...

ここで参考にしたのが React-Select
これは select2 の React 版実装のようなもので `focus()` というメソッドをを提供している。これを参考にしてやると良さそう。



export default React.createClass({
  componentDidMount() {
    this.refs["target"].focus();
  },
  render() {
    var options = [{label: "選択肢1", value: "1"}, {label: "選択肢2", value: "2"}]
    return (
      
); } });

どのように定義されているか調べた。

クラスに focus メソッドを生やせば ref を通して呼べる仕組みになっているようだ。

------------------------------
以下は間違っていた。
  • Async に定義されている
  • Select の statics に取り込んでいるっぽい?
  • statics でコンポーネントの static メソッドを定義することができる

なるほど statics にメソッドを定義することでコンポーネントのAPIを定義できるらしい。
それを利用して生DOMと同じようなインターフェイスにしてやるといい感じに扱えるよね、という話みたい。

2016/01/02

emacs のパッケージ管理を Cask から El-get にした

Caskはもう古い、これからはEl-Get - いまどきのEmacsパッケージ管理 を参考にしつつ El-get に移行しました。


Cask 管理だったのですが、以前 cask update をかけたら環境が不整合を起こしてツライ事態になったので、バージョン管理が必要だと痛感したのでした。
動く分にはひたすら最新に追従していけば良いかなーと思っていたんですけどね。。。

  • 経緯
    • cask update かけたら色々と不整合起こしてツライ事態になった
    • 最近しょっちゅう magit のキーバインドが変更されていてツライ
    • cask でバージョン戻せないっぽい?あの頃に戻りたい
  • どう?
    • el-get-lock よい
      • bundle.lock
    • require は el-get-bundle! か :features に置き換える
      • init-loader で分割したファイルのコンパイルで失敗するっぽい
      • パスの問題だとは思う、、、が詳しいことはわからない
    • el-get-cask 使えばよかった
      • 手作業の書き換え面倒
      • 全部 init-loader で分割したファイルに書いておきたいとかある
      • ・・・けど、そっちは後回しでもよかったなー
  • ちょっとハマった
    • flycheck のインストールにちょっと手順が必要
      • brew install texinfo; brew link --force texinfo 必要だった
      • texinfo のバージョン古いのが問題だったらしい
      • OSX El' Capitan と Yosemite で確認
    • flycheck-pos-tip を flycheck-tip に変更した
      • どこかの時点で pos-tip.el がうまく動かないようになった?
        • でも pos-tip.el はバージョンアップしてないような?
        • pos-tip-hide(alias of x-hide-tip)が動かない??
        • x-hide-tip とは・・・
      • flycheck-tip なら大丈夫だった
        • flycheck-tip は pos-tip.el ではなく popup.el を使用
        • auto-complete も popup.el を使っていてちゃんと動く
        • いけた
    • magit の古いバージョンを使うために依存ライブラリとのバージョン合わせ
      • magit/magit :branch "1.4.2"
      • magit/git-modes :branch "1.0.0"
magit のバージョンアップは様子見しよう作戦。半年くらいしたらキーバインドとか落ち着いているといいなー。。。