と日本海側の県が続きます。島国・沖縄が意外にも最下位です。OpenCVで画像をロードするのを速くしたくて、JPEGについてはlibjpeg-turboというのが使えることを知りました。libjpeg-turboはlibjpegをSIMDなどによって高速化したものでAPIレベルの互換性を保っています。条件が良ければデコードが数倍速くなるということで、これをOpenCVに組み込んでビルドする方法をメモ。OpenCVビルド職人の朝は早い。「contribが必要な仕事だと緊張が走るね」プロセッサやOSに応じて最適な設定でビルドするのが彼の仕事だ。ARMへは人一倍のこだわりを見せる。「CUDAさえ切ればものの数分で終わるんだがな...」そう語る背中には、積み重ねた経験値の高さがにじむ。2017年1月1日この度2017年1月1日を迎えました。神戸港開港150年であり、神戸港に建つ巨大な魚のオブジェ「フィッシュ・ダンス」が公開されて30年でもあります。神戸港には縁もゆかりもありません。gemを使うことにしました。このGemは2016年初頭に出た0.9によって大きな変更が入り、公式のものを含めネット上で閲覧可能なサンプルのほとんどが参考にならない状況になっています。自分でも少し苦労したので、かんたんにメモ。情報は2017年1月1日JST現在、Gemは0.9.20です。世界一標高の高い水族館は長野県茅野市にある蓼科アミューズメント水族館だそうです。一度行ったことがありますが、オススメです。内陸県とあって淡水魚中心に扱っていて、また北八ヶ岳ロープウェイのすぐ下だったりするので、夏の避暑には最高です。ぼくは普段はLinuxを使っていて、そこに数年前からMacを併用して使うようになったため、Commandキーを中心としたショートカットキーの違いが地味にストレスになります。そこで、Macでキー入力の解釈を強制的に上書きするツールKarabinarを使っていました。具体的には一例として、MacでもLinux/Windowsと同じくCtrl+C/X/Vでそれぞれコピー・カット・ペーストをできるようにしたかったのです。Copy/Paste」を有効にすればOKです。私は例えばコーディングなどにPyCharmやRubyMineをvimキーバインドにして使っていて、このときショートカットキー設定がコンフリクトし、Karabinarが優先されることになります。(具体的には例えばvimでCtrl+vは矩形編集に使うのですが、KarabinarによってOption+Vに置換され結局ペーストが行われます。)したがって、普段はCtrl+C/X/VをコピペにつかうんだけどPyCharmがアクティブウィンドウになっているときだけそれをナシにする...というような設定をKarabinarに対して行いました。今日は多摩川花火大会をやっていまして、今まさに自室の窓の外から花火が見え音が聞こえる中こんなブログ記事を書いています。ダイナマイト漁で捕獲でもされている気分です。installをしようとしたときこんなかんじのエラーが出てちょっとハマりました。Stop.このエラーはいろんな状況で起こるようです。autoconfのログを見てもよくわかりませんでした。僕の場合はLIBRARY_PATH環境変数に書いてあったディレクトリが実在しなかったことが原因でした。installのエラーを引き起こしていました。環境変数から/libを除くか、/libをmkdirすると、rbenvのビルドは死ななくなりました。エラーメッセージ自体からはそのことを直接は読み取れなかったので、ハマりました。2016年8月19日お魚の可食部の重量に占める割合というのは、もちろん種類によって変わってくるのですが、しらすなどではもちろん100%、一方でスズキなどでは40%程度と低いようです。しらすは稚魚ですので、成魚と比べるのは厳しい判定かも。Rails(Rack)がGETリクエストひとつに対して吐いてくれるアクセスログは、下記のような雰囲気になります。このうち、xxxx.html.erbをレンダリングしたよ!という情報は特に本番ではあまり必要でないことが(自分の状況では)多いので、これを静かにしてしまいたくなりました。...endのように設定すると、このrenderingのログだけがいいかんじに静かになってくれます。9.4ms)大変Informativeでよろしい。以上、最初から最後まで完全に備忘録でした。2016年8月19日いよいよ5月も終わり季節は夏にという時期で、お魚的には鮎や鯵などが旬を迎えるという頃合いになっています。今の時期に魚や野菜を食べて夏バテに備えたいものです。Calendarからイベントを自動で取ってきたいということがあったので、Rubyでやってみました。(Calendarにかぎらず)Google各種サービスのAPIは公式のGemが公開されており、これを使うのが最も簡単です。(v3)を使う方法についてはよくまとまっています。名古屋アジャイル勉強会にあるイベントをAPI経由で取ってくる、というようなことをやろうとしています。上記の参考資料はいずれも、自分のカレンダーにアクセスするためのもので、そのためにOAuthなどのプロセスが必要となっていますが、公開されているカレンダーのイベントを取得するのはもう少しシンプルです。いうことで、ここからはその方法。2016年8月19日よくお魚の「脂ののりが良い」といいますが、実際例えば体脂肪率という形で計測するとどうなるのでしょうか。実はそれを測定するためにフィッシュアナライザTMという製品があり、人間用の体脂肪率計と同じ仕組みで非侵襲的な計測が可能なんだそうです。アジなどでは10%とかいうオーダーの数字とのことで、意外とスリム。Rubyを使ってWebスクレイピングをするときは、個人的にはNokogiriをよく使っています。通常はNet::HTTPでとってきたHTMLをそのままNokogiriにぶち込めばOKなのですが、非同期での描画を行うAjaxのサイトの解析はそのままではできません。そこで、PhantomJSのRubyフロントエンドであるPoltergeistをドライバとしてCapybaraを組み合わせると、深く考えることなく静的ページと同じ感覚で解析ができてしまいます。要は、見えないところでまるっとブラウザを動かしてしまって、DOMから仮想的なHTMLを生成させちゃってNokogiriにぶち込む...というようなアプローチです。#JSに問題があったとき例外を吐かせない。スクレイピングの際は常にfalseがいいです。specで書くようなマッチャを使ってページに対する操作ができるので、例えば「ここをクリックすると出てくる情報を解析したい」という作業も簡単にできます。#findを呼ぶとマッチする要素が現れるまで再描画を(デフォルトで2秒間)待ってくれます。#これをNokogiriにぶち込めばOK後ろでブラウザがまるごと動いていることの弊害と言ってはあれですが、スクレイピングにあたっては必要ではない情報も非同期でゴリゴリ取ってくることになり、負荷や時間などが増大します。いうことで、そういった必要でない情報は取ってこないようにして少しでも時間と相手サーバの負荷を低減する方法について。2016年8月19日お魚の中でもメバルやタチウオなどは夜行性のものとして有名で、特にタチウオなどは昼間沖の深めにいて夜には岸辺の浅いところにくるなど、かなり規則的なパターンで活動するのだそうです。rubyで野良アプリ書くときバッチ処理エンジンにはSidekiqを好んで使っています。Sidekiqには日次処理などを簡単に行うため(*1)にSidekiq::Schedulerという拡張gemがあり(*2)、任意の定義済みワーカを例えばcronライクに繰り返し実行することができます。基本的には各ワーカの実行条件やパラメータをYAMLの形で全て静的に記述し起動時に読み込むというスタイルなのですが、時には動的にワーカをスケジュールに突っ込みたいことがあります。Sidekiq::Schedulerはもちろんそれもサポートしています。moove-it/sidekiq-schedulerの説明がいまいちだったので、備忘録も兼ねてまとめました(*3)。最近まで知らなかったのですが、さかな検定(通称ととけん)という検定試験があり、すでに6回実施されているのだそうです。ご推察の通り、さかなクンさんが一枚噛んでいらっしゃるようです。さいきん仕事でテストを全く書かないチームにジョインしたのですが、やはりこのままではつらい未来しか見えないため、なんとかテストを書くチームに変えていこうとテストをバリバリ書く先輩と一緒に活動を始めつつあります。ところがいざテストを書くモチベーションを話そうとしてみると、19歳でTDDに出会い初配属部署も「テストは呼吸であり」「テストは義務教育であり」「テスト書けて初めて法の下の平等と基本的人権が主張できる」環境で過ごしてきた今になって言葉に集めるのも骨が折れそうだったので、ちょうど見つけた短めでわかりやすい英語記事を紹介することにしました。今回はそれを和訳したものを紹介します。この度翻訳した記事はこちら。魚類はあまり変態しない(生まれた姿のまま大きくなる)ことが一般的で、カレイなどのように左右対称形から非対称になる...など、昆虫や両生類のそれに比べると控えめな程度にとどまるようです。numpyと愉快な仲間たちにおいて画像はndarrayとして表現されていて、それを表示するのに使うmatplotlibはちょっとしたGUI機能(widgetsモジュール)をもっています。これコード的にも絵的にもクセが強くごく単純なデモ以上のことは難しいので、何かしたいときはQtのPythonラッパーであるPySideを使っています。そのPySideで画像はQImageで扱われるので、裏っかわでndarrayで処理をしているならそれをQImageとの間で相互変換できる必要があります。Overflow)画素毎にループしてコピーするとかイケてないことしなくて済むから簡単だね!QImageに持ってきてしまえばQPixmapにしてQLabelに突っ込んで表示するなりQPainterでお絵かきするなり、自由です。Meおさかなさんと呼んでください。コンピュータビジョン・パターン認識・機械学習でお仕事をしています。強くなれなかった元・競プロ勢。