| @技術/プログラミング

合同勉強会 in 福岡という勉強会があって、 Nulab の人やクラスメソッドの人たちが福岡に来て発表するということだったので行ってみたいと思ったけど参加者枠が埋まってたので LT 枠で申し込んで行ってみた。まえブログに書いた BitBar の話をした。

以前一緒に仕事していた Rudolph Miller 先輩がインタビューで「勉強会は勉強しに行くところじゃなくて自分が普段勉強してることが合ってるか確認しに行くところ」みたいなことを言ってたけど、今回は普段勉強してないことがありありとなった感じでやばいなと思った。皆さん AWS とか Azure とか Terraform とかに詳しすぎる。きしだなおきさんの機械学習についての発表とかさっぱりわからなかった。平川 剛一さんの Server-side Swift の話は面白かった。 Server-side Swift の開発、 Apple じゃなくて IBM が主導しているそう。ぼちぼち Web フレームワークなんかもできてきてるみたい。

LT は皆さんレベルが高く、ネタに走りつつも技術的に高度な内容で自分の LT が一番しょぼかった。発表もうちょいうまくなりたい。

| @写真

moon

iPhone 7 にしたら結構カメラの画質良くなって割と満足してる。フィルターかけることの喜び知ってしまって VSCO で遊んでる。フィルターかけるとオリジナルとフィルター済みの2パターンの画像ファイルできてしまう。 SNS にアップロードするときはフィルターかけたやつを上げたいけど記録用に自分のフォトライブラリに残すやつはフィルターかかってないやつがよい。そういう運用してるとフィルターかかってるやつとかかってないやつの両方がごちゃごちゃにフォトライブラリに残ったりして管理をどうするかで悩んでる。

一眼レフは相変わらず D90 使ってる。結構ボロボロになってきてて買い換えたいのだけど先立つものがなく買い換えられていない。グリップのラバーゴムを交換したり、キットレンズの VR 18-200 の修理をしたりしながら何とか使ってる。やっぱり iPhone のカメラとは別格の写真が撮れる。特に Nikon 純正の単焦点を付けて撮ったときは良いのが撮れる。フルサイズ機への買い換えを考えたこともあるけど、最近はぶっ壊れるまでとことん D90 を使おうかなと思ってる。ただ D90 は動画がよくない。音声はモノラルで解像度低いしフレームレートも低くオートフォーカスもなし。動画の画質は iPhone 5 くらいの頃から iPhone に負けている。 Apple TV でテレビに映して再生すると一昔前の YouTube みたいな画質になる。

一眼レフには Mac 側のストレージを圧迫するという問題点がある。いま使ってる MacBook Pro は 2009 年モデルでかなり古い。初期搭載の HDD から 512GB の SSD に変えているけど RAW がストレージを使いまくってて残り 20 GB 程度しか空きがなく Xcode のアップデートも行えないような状態。そもそも RAW 撮りやめてしまっても良いのではと思い始めた。 RAW 現像する暇ないし Aperture の開発は停止されて RAW 現像できるソフトがそもそも手元にない。実はカメラの撮って出し JPEG でも十分満足できている。結構良い画質で撮れてそれを Keenai (旧 Eye-Fi )でさっとスマートフォンに取り込んで SNS に上げたり iCloud 共有したりすることの方が自分のカメラの使い方としてプライオリティ高い。

プロでもハイアマチュアでもない普通の個人はどういうフォーマットで写真を撮って保存するのがベストなのだろうか。 RAW で撮っとけば後々後悔することはあるまいと思っていたけど、ストレージの値段が劇的に安くなってきてるわけでもない(ローカルストレージは安くなったが、クラウドストレージに同期しながら使おうとすると結局コスト高い)し、デバイス間の転送速度の問題もある。 2017 年のベストな写真管理方法知りたい。

| @技術/プログラミング

puma はメモリ食い

puma にして喜んでたけど二時間後くらいに NewRelic で様子を見てみたらメモリ 90% 以上消費してて swap ファイルもめっちゃでかいのができてて暴発一歩手前になってた。

一旦 puma をシングルモードからクラスターモードに変えて puma_worker_killer を導入し、 worker を定期的に再起動するようにした。ただ restart 後のメモリ増加傾向は変わらない。

引き続き NewRelic で様子を見ていると Python2 が一番メモリを食っている。このブログは Syntax Highlighting に Python の Pygmentspygments.rb 越しに使っている。これまで unicorn の worker プロセス 2 個で動かしていたときには最大でも Python のプロセスは 2 個で事足りてたけど、 puma にして 16 スレッド( puma のデフォルト)が起ち上がるので、 16 個の Python プロセスが起動していたっぽい。

これは意味ないなということで以前利用したことがあった Pygments の Ruby 移植版である rouge に変えてみることにした。こちらは Ruby なのでスレッドが別プロセスを起動してメモリ爆発ということにはならないと思われる。

puma_worker_killer と Pygments 置き換え後半日様子を見たが、これでメモリ消費量爆発ということはなくなった。

sidekiq でスレッドを増やしたときにも似たようなことを経験したけど、 Ruby から外部のプロセスを起動するようなプログラムを書いているときにマルチスレッドで処理をさせると、 Ruby のプロセスは増えなくても外部のプロセスがめっちゃ増えてそのせいでメモリあっぷあっぷになったり CPU の使用率が高まったりする。マルチスレッドプログラミングのご利用は計画的に。

異なるワーカー間でセッションを継続できない?

puma をクラスターモードにしたことで別の問題も発生した。なんとセッション情報が異なるプロセス間で共有されていないっぽい。なのでログインしてすぐに再ログインを求められるようになった。これは不便。原因を調査するには時間がかかりそうだったのでシングルモードに戻してみることにする。

まとめ

  1. デフォルトの 16 スレッドでは puma は unicorn に比べてメモリを沢山消費する可能性がある
  2. Ruby から外部のプロセスを起動するような処理に注意
  3. puma のクラスターモード( master worker モデル)でセッション情報がリセットされる問題に遭遇

追記

セッション情報が異なるプロセス間で共有されていない

これはちゃんと設定があって、 puma.rb に preload_app! を記述すればよかった。

If you're running in Clustered Mode you can optionally choose to preload your application before starting up the workers. This is necessary in order to take advantage of the Copy on Write feature introduced in MRI Ruby 2.0. To do this simply specify the --preload flag in invocation:

# CLI invocation
$ puma -t 8:32 -w 3 --preload

If you're using a configuration file, use the preload_app! method, and be sure to specify your config file's location with the -C flag:

$ puma -C config/puma.rb

# config/puma.rb
threads 8,32
workers 3
preload_app!

-- https://github.com/puma/puma#clustered-mode

これでプロセス間でセッション情報が共有されるようになった。

| @技術/プログラミング

ブログの管理画面にファイルアップロード機能をつけてみた。 GitHub の Issue みたいにドラッグアンドドロップでアップロードしてくれる。こんな感じ。

file upload demo.gif

いまのところ埋め込みフォーマットは Markdown にしか対応してない。

Lokka は heroku とか PaaS を使うことを前提に作られているのでファイルをアップロードする機能が提供されてこなかった( heroku は永続的なファイル書き込みができない)。 heroku で動かしている人でも使えるように Amazon S3 に上げるようにしてみた。 AWS のアカウント作成とかが必要なのでレンタルサーバーに設置してある WordPress にファイルアップロードするのに比べたら敷居が高いけど、設定するのは1回だけだし全くアップロードする手立てがなかったこれまでに比べたら劇的に快適になるはず。自分で使ってみたけどめっちゃ便利になった。

ファイルアップロード、ちゃんと作るなら Paperclip みたいにファイルのチェックを厳密に行なわないと危ないと思うけど、管理画面から上げるの前提なのでチェックなしで雑にアップロードできるようになっている。 AWS の token 系の設定画面を作ったら Lokka 本体に Pull Request 出します。

なお一つ前の記事でアプリケーションサーバーを puma に変更 - portal shit!というのを書いたけど、このファイルアップロード機能がうまく動かなかったので unicorn を捨てたのだった( pow で動かしている環境や bundle exec rackup して WEBRick で起動しているサーバーではちゃんとアップロードできる)。なぜか unicorn で multipart/form-data な POST リクエストを rack アプリケーションに適切に渡すことができず EOFError が発生してしまう。

仕事で unicorn で動いてるサーバーにファイルアップロードする仕組み入れたことは何度かあるけどこんなエラーになったことはなかったのになぁ。謎い。

| @Mac/iPhone

JR東日本エリア在住ではないのだけど iPhone 7 を買って Suica の設定をしたので試してみたくなり iPhone 7 で電車に乗ってみた。JR九州の改札も福岡市地下鉄の改札もちゃんと通れた(当たり前)。ただ IC カードに比べて反応が少し遅くて「もしや使えないのでは?」と挙動不審になってしまった。もう少し右往左往してたら駅員に声かけされたと思う。買い物するときみたいにダブルタップして Wallet を呼び出してから通過したけど改札通過時にはそれをする必要はなくてただかざせばよいっぽい。

改札を通過するとすぐに iPhone に通知が来て残額がいくらかわかる。また移動中は「現在乗車中です」みたいな表示が出る。こういう通知はコンビニとかで買い物をしたときも来るけどめっちゃ便利。 一度 iPhone の Suica で金を払う体験をしてしまうと、レシートを見たり券売機で照会をしないと残高がいくらかわからない旧来型の IC カードには戻れなくなってしまう。カパカパ式ケースに iPhone と電子マネーを挟むのとは圧倒的にユーザー体験が違っていて、残高のリアルタイム通知が来て、乗車ステータスの確認ができ、残高が不足している場合はその場でチャージすることができる。

おサイフケータイ使ってた人たちは 10 年前にすでにこういう便利な体験してたのだろうか。自分は携帯は Motorola や Ericsson 、 NOKIA などの洋物携帯ばかり使ってたので今さらながら携帯電話に決済機能がくっつくことの便利さを実感した。これは本当に便利な機能だと思う。

| @散財

iPhone 7

iPhone 7 を買った。 iPhone 6 を買ったのは 2015 年 7 月で買い換えサイクルからするとだいぶ早いのだけど、いい加減両親にガラケーを卒業してもらおうと思って、弟も少し前に iPhone を買い換えたので自分のと弟のを両親に渡して docomo から MVNO に引っ越してもらおうという算段。弟の iPhone 6 は docomo のやつで自分の iPhone 6 は SIM フリーなので問題ない。いい世の中になった。

一括払いで 9 万円も払えるような富裕層ではないのでオリコのローン( 20 回分割まで金利が 0% のやつ)で買った。 iPhone 6 を買ったときは転職したばかりで社会的信用ゼロだった& iPhone 5 をクロアチアでなくしてしまって一刻も早く電話が必要だったためクレジットカードの分割払いで買っていたので、今回が人生初のオリコローン。審査結果出るまでに結構時間がかかり、ベンチャー企業に勤めてるせいで審査通らないのかなとやきもきした。急いで欲しい人はローンは使わない方がいいと思う。ひょっとすると一部上場企業勤務の人だと一瞬で審査降りるのかもしれない。

Suica on iPhone 7

iPhone 7 では Suica を Wallet に登録できるはずなので ANA VISA Suica を登録して電子マネーはこれに一本化しようかと思っていたけど、 ANA VISA カードの Suica を吸い出して Wallet に追加することはできないみたいだった。調べてみたところ JR 東日本の Suica アプリでモバイル Suica を新規発行し、そのチャージ用のカードに ANA VISA Suica をクレジットカードとして指定すればよいっぽい( Suica が一枚増える感じ)。 ANA VISA Suica は View カードでもあるのでモバイル Suica の年会費はかからない。これでいつでも iPhone からチャージできて便利。オートチャージの都合で JR 九州の SUGOCA を使っていたけど( Suica は関東でないとオートチャージできない)、 iPhone からいつでもチャージできるとなれば Suica でも困らなそう。ほかの電子マネーの Apple Pay 対応が遅れたら Suica が交通系電子マネーの乱世を統一するかもしれない。

ハードとしての iPhone 7 の感想は、とにかくめっちゃ速いのがいい。 Touch ID とか一瞬で認証される。 Force Touch もよい。 iPhone で長い文章を入力中にカーソル位置を動かすの、結構ストレスだったんだけど Force Touch だと押し込んだだけで Vim のビジュアルモードのようにするするとカーソルを動かせて便利。ストレージが増えてるのもいい。いわゆる "竹" スペックの 128GB のやつを買ったのだけど、これだけあれば Eye-Fi で写真転送しまくっても iPhone がお腹いっぱいになったりしないだろうから安心。音楽もいっぱい入れられるので飛行機に乗ったときに iTunes Match 使えなくてほとんど聞ける音楽がない、という事態も避けられる。

一方で残念な点。ホームボタンが物理ボタンじゃなくなったのは慣れない。押し込んだ時のバイブレーションが MacBook Pro のトラックパッドの完成度とは大違いで残念。あとこのホームボタン、風呂で使える系のケースに入れてると押せないことが判明して愕然とした。無印良品の風呂スマートフォンケースに入れてみたところ押しても反応せずホームボタンはお飾りとなった。防水とはいえ風呂で使って水漏れ判定されたという話を聞くので風呂 iPhone するときは防水ケースに入れたいもの。ホームボタン効かないと全く使えないわけではないけど著しく操作性が低下する(Today widget を呼び出して適当なアプリを開きロック解除、 Force Touch でアプリ切り替えを呼び出しホームスクリーンに切り替え)。

Silicone case for iPhone 7

ケースは Apple のシリコーンケースを買ってみたけどめっちゃすべって良くない。 iPhone 5 や iPhone 6 には革のケースを使っていて、滑るということはなかった。革ケースは高いし(安い Android が買えそうな値段) 2 年近く使ってると破れてくるので次はシリコーンケースにしてみようと変えてみたけど失敗だった。やっぱり iPhone は裸が薄くて持ちやすくて最高。ケースを付けずに iPhone を使えるような精神力が欲しい。ガラスの保護には Anker のやつを買った。 iPhone 6 使ってるとき 2 回くらいコンクリートの上に落としたことあるけど iPhone のガラスは何ともなかったのでこれは頼りになると思う。

不満なところ、不便なところもあるが、 iPhone 6 に比べると格段に良くなっている。地方に住んでて Suica 使えないので iPhone 7 はパス、と思ってる人も実は使えて便利になる可能性があるのでご一考をお勧めします。

| @散財

Anova Precision Cooker

最近ネットで話題の Anova Precision Cooker を買った。ヒトデさんが少し前に買って Instagram にローストビーフの画像を載っけてるのを見て、これまで二年間、散々安いオーストラリア産の牛もも肉を買ってきてローストビーフ力を高めてきてたのに一瞬で負けた感じがしてとても悔しかった。クリスマスや正月にローストビーフ作って妻子や両親に食わせたいという衝動を抑えることができず、酒を飲んでいるときの勢いで発注してしまった。買う前はアメリカ Amazon で買おうかなと思っていたけど公式サイトの方が送料が安かったので公式から買った。 Amazon だと配送に一週間から二週間程度かかるとあったが、公式サイトは香港から発送してくれて三日で届いた。急いで欲しい人は日本の Amazon にマーケットプレイス出品してる国内の業者から買うのがいいと思うけど、三日待てる人は公式サイトから買うのが送料も値段も安くてお得だと思う。

Anova with IKEA zip bag.jpg

早速ローストビーフを作ってみた。ジップロック持ってなかったので IKEA のパックできるやつ使ったけどこれが最悪で、調理中に様子を見に行ったら袋に穴が空いて奮発して買った和牛がただの塩ゆでになってた。一旦取り出して別の袋に詰め直したけど、だいぶ牛肉のうまみが抜け出してしまったと思う。どうして穴が空いたのかはわからない。鍋が小さかったので袋が Anova 本体に触れてしまい、熱で袋が破れてしまったのかもしれない。再投入時には洗濯バサミで袋を鍋肌に固定した。

低温調理もも肉

袋に穴が空くというハプニングはあったものの、出来上がりはこれまでで最高だった。肉がいつもよりも良いものを使っているせいもあると思うけど完全に売れるレベルだなと思った。

というわけで Anova の Precision Cooker は最高にオススメです。温泉卵も簡単に大量生産できます。