YAPC Asia 2015 に参加してきた
YAPC::Asia に参加してきました。
一晩寝て、強く印象に残っているのは
- HTTP/2時代のウェブサイト設計
- Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜
- Profiling & Optimizing in Go
- Adventures in Refactoring
です。
この中のいくつかは資料が公開されていますし、受賞もしているので blog されていることが多いと思います。
そこで Adventures in Refactoring
で紹介されていた gem について書こうと思います。
scientist
https://github.com/github/scientist
Ruby のリファクタリングツール。
2つのメソッド(新・旧)をテストできる。
たとえば A, B と2つのメソッドがあったとする
A : 既存の実装
B : 新しい実装
Github では、scientist を使って A, B のパフォーマンスを計測する。
ということをしているとのこと。
良いリファクタリングと悪いリファクタリングについてや
リファクタリングする理由など、改めて考えさせられましたた。
資料が公開されたら、チームで話しあおうと思っています。
YAPC::Asia 長年お疲れ様でした。
今までで 2回しか参加したことないけど、寂しさを感じますね。
// Perl6 だいぶ面白そうなので、ちょっと魅力を感じてます。
IP Address かどうかの Validator (ruby, rspec)
IP Address は IPv4 と IPv6 があるのは御存知の通り。
RSpec とかでバリデーションしたいときに、どちらかであることをチェックしたいことがあります。
ユーザーの IP Address とかを DB に保存するときの Validation として使います。
StackOverFlow などで検索しても、このやり方が紹介されていなかったので記載しておきます。
ただ、昔からやってる rubist には普通なのではなかろうか…
IP_ADDRESS_VALIDATE = Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)
SICP 問題 2.5
どのように解いたかは、下記のリンクに記載しました。
https://gist.github.com/Qooh0/172078ef015bfd4b8612
ここにハマった
(car x) を作成するときは、2 ^ a を調べればいいので、偶数かどうかを調べればよかった。
(cdr x) も作成するときは、奇数かどうかを調べていけばいいと思った。
しかし、頭の良い皆さんならわかると思いますが、奇数かどうかを調べるのでは正しくない。
なぜなら、 (* 2 3) は 6 になる。つまり、偶数になります。
これに気づくのに時間がかかった…
そのため、回答の car と cdr では、実装方法が異なっている。
両方とも cdr の実装でとくのが正しいはず。
やー、失敗した。
Ansible で疑問に思ってたことを聞いてみた
昨日、@usaturn さんに Ansible について聞く機会があったので、お話を聞かせていただいた。
Q. Ansible って、結構使ってますか?
A. 普通に使ってます。
Q. Ansible + Vagrant の場合、ユーザーはどうしていますか?vagrant ユーザーを使用していますか?
A. Vagrantは使っていません。Ansibleを利用する際のユーザは、共用ユーザを使っています。
Q. Galaxy に良い Role がないのですが、どうしていますか?
A. 適当に playbook を書いています。
そもそも Ansible を使う人の多くは、簡単に使用したくて使っている人が多いように見えます。
Q. 設定ファイルとか jinja2 で書いていますか?
A. そこまでやりたいのですが、できていないのが現状です。
Ansible で PATH を追加する系の処理は、なんとかならないものか?だった話
open source configuration management utility という分野で Chef, Puppet もあるが Ansible しかわからないので、このタイトル。
インストール手順に PATH を通すために .bashrc に記載が必要という処理は、わりとよくある。
例えば nodebrew だと以下の様な PATH の設定を .bashrc に記載するのが手順。
export PATH=$HOME/.nodebrew/current/bin:$PATH
これを正直に task に落とすと、こんな感じになる。
shell: echo export PATH=/home/{{ user }}/.nodebrew/current/bin:$PATH >> /home/{{ user }}/.bashrc
この書き方だと複数回プロビジョニングをした時に、
export PATH=/home/{{ user }}/.nodebrew/current/bin:$PATH
がプロビジョニングした回数だけ .bashrc に記載されてしまう。
なにかよい方法はないかな?
-
-
- -
-
などと、書いていたら 普通にファイルの存在確認して、ファイルがなければ追加でいいのではないか?と思うようになった。
バックパックを考えた
バックパックのサイトを見て、たまに買おうかどうしようか悩む。
毎回、位置から悩むのは馬鹿らしいので、ここまで選んだものをピックアップ!
この中から選べばいいんじゃないかな。
1. 通気性ならこれ!
deuter
http://www.deuter.com/JP/jp/%E3%83%88%E3%83%A9%E3%83%99%E3%83%AB/grant-80604-446.html
http://www.deuter.com/JP/jp/%E3%83%88%E3%83%A9%E3%83%99%E3%83%AB/grant-pro-80614-446.html
2. Apple 公認?
http://www.thule.com/ja-jp/jp/products/luggage-and-bags/daypacks-and-messengers/thule-crossover-backpacks/thule-crossover-32l-_-tl_85854231374
3. city 向き (chrome)
http://www.chromeindustries.com/us/en/bags/laptop-bags
4. スラっとしていて、PC を上に置くのに向いているかも…
http://goincase.com/shop/products/bags/backpacks
jq を使ってみた
jq を使ってみた
json の結果を見やすく整形するツール。
だいぶ前に話題になっていたのを、ようやくサワれる感じ。
ここからはチュートリアルに沿って見ていく。
Twitter の 直近 5 個の json という単語を含む検索結果の tweet を拾ってくれる API を叩く。
curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true'
これだと見難いので、適当に見やすくする。
これは、jq に '.' を渡せばよい
curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.'
結果は、見るとわかるが results という配列の中に入っている。
そこで、results の一つ目の配列の要素をみてみる。
curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[0]'
そうすると、直近の json を含む twitter の検索結果がとれた。
ここで、誰がどんなことを発言しているのかを切り抜きたい。
from_user 要素と text 要素が対応しているので、それらを切り出す。
curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[0] | {from_user, text}'
すべての from_user 要素と text 要素を取り出す。
curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[] | {from_user, text}'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
次のような返り値がある場合、次のようにパースできるらしい
{ "user_mentions": [], "urls": [{ "indices": [83, 103], "display_url": "bit.ly/StniqT", "expanded_url": "http://bit.ly/StniqT", "url": "http://t.co/28Jesbio" }], "hashtags": [ {"indices": [108, 114], "text": "Apple" }, {"indices": [121, 129], "text": "Awesome"} ] }
jq '.results[] | {from_user, text, urls: [.entities.urls[].url]}'