今仕事でAngularJSを使ってて、coffeeで書いてるですが、引数に関数2個渡す時どう書くのかちょっとわかんなかった。

arg1 = (a) ->
  console.log 'aaa'
arg2 = (b) ->
  console.log 'bbb'
foo arg1, arg2

これはださい。

foo (a) ->
  console.log 'aaa'
, (b) ->
  console.log 'bbb'

こうかけるんだって。スッキリ。

MITRO IS SHUTTING DOWN AUGUST 31ST, 2015

チームで安全にパスワードをシェアできるmitroが8月31日に終わっちゃうらしいので、類似有料サービスのLastPassに移行しました。

LastPassで読み込み可能な形式でエクスポートしてインポートできました。

ここ数年、みなさんもそうだと思いますが、びっくりニュースとかおもしろコンテンツ、記念イベントなどをネット上に流れすぎているので日常的に流し見するというコンテンツフィルタリング機能が自分の脳に備わりました。

長い文章でもざっと要点だけみるみたいな。かるい新書といくつか読むときとか、基本便利な機能ですよね。

でも怖いのが、最近では油断すると仕事の重要なメール(長めのやつ)やPDFなんかにもフィルター機能が働いて流し読みしちゃうんです。

8割はうまく働く程度のフィルター(エンタメ向けフィルターなので)が仕事の文章に働くととんでもないミスをおかしそうになります。

例えば、文脈はだいたいわかってるから金額の数字をちゃんと見てないとか、

文章中の帳票名を"なんらかの帳票"としてしか見てなくてスルーしたりとか。

仕事をエンタメコンテンツと同じようにうっかりさっさと処理していくことを優先する脳になっちゃってる。

容量的にオーバーしてるのに「機械的にこなせば大丈夫」と自分で勘違いしてるから起こることなのかなと思ったので意図的にどうでもいいもの(はてブのおもしろカテゴリーとか)を削除していこうと思います。

検索順位のチェック

Google検索で自分のサイトがあるキーワードで何番目に来るかというのはサイトを運営する上で非常に重要なデータであり指標だと思うんですが、なかなか簡単で正しい取得方法というのが無いような気がします。

要はブラウザでシークレットアクセスで検索した時の順位がプログラムから取得できればいいんですが、Googleの検索結果ページというのは例外的に「検索エンジンからどう見えるか?」というのを無視した作りになっており(自分自身が世界一の検索エンジンだから)、超速度重視のページ構造になっています。

seleniumやcapybara-webkitやphantomjsでスクレイプするスクリプトを書いたとしてもクラス名がgとか_Rmなんでxpathやcss selectorがすぐ変わりそうで信用できません。

そこでプラグラムから取得する真っ当な方法はGoogle Custom Search APIを使って取ることだと思います。(これが本当にシークレットアクセスでブラウザから取った時と全く同じかどうかはわかりませんが、自分の実用上は誤差の範囲のように思います)

Custom Search APIは無料枠が1日100リクエストかつ1リクエスト辺り10件まで取得可能で100位までなので、1日1回だけ調べるとすると最悪10キーワードまでしか無料でできないことになります。

しかし有料といっても大した金額にはならないですし、Google検索結果は重要なデータなので怖話のダッシュボードを作るときにこのCustom Search APIを使いました。

gem作った

ただ、GoogleのAPIは扱いが面倒なので検索順位が簡単に取れるgemを作りました。

komagata/google-search_rank

$ gem install google-search_rank
client = Google::SearchRank.new(api_key: "xxxx", cse_id: "xxxx")
client.find("怖い話", %r{http://kowabana.jp/.*}) # => 3

怖話は「怖い話」で検索すると今は3番目に出てくるので3が取得できます。

Google Cloud Platform

Google Custom Search APIで検索するにはAPI KeyとCSE ID(CustomSearchEngine ID)が必要です。Google Developers Consoleから下記の要領でProjectとCustom Search Engineを作成してKeyとIDをゲットしてください。

Custom Search APIを有効にする。

公開APIのサーバーキーを作成する。

カスタム検索エンジンを作成し、カスタム検索エンジンID(CSE ID)を取得する。

Google Cloud Platformはちょっと取っ付きづらいですが、Googleの全てのAPIを統一的に扱うことができるので一度慣れれば凄く便利です。

APIを検索するAPIがあって、そこでAPIのエンドポイントを取ってきてから使うみたいな感じになっています。

認証も課金もGoogle関係の全てのサービスが共通のAPIで使えるのは超汎用的ですが、昔の個別のAPIからマイグレーションをする必要が発生した人にとってはとても煩雑に見えることでしょう。

以前、Macのpostfixをgmailにrelayしてメールを送る方法を書きましたが、fromが必ずそのgmailアカウントのアドレスである必要がある点が気になっていました。

色々試しましたが、MandrillやMailgunもfromのドメインをチェックしたりするので駄目でした。(Mandrillはサインアップ時に与えられるsandboxアカウントならばノーチェック)

SendGridはアカウント有効化に何故か2時間ぐらいかかるのが難点ですが、1日400通無料です。

$ sudo vi /etc/postfix/main.cf
smtp_sasl_auth_enable = yes 
smtp_sasl_password_maps = static:USERNAME:PASSWORD 
smtp_sasl_security_options = noanonymous 
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
$ sudo postfix reload

sendgridのUSERNAME、PASSWORDをpostfixに設定。(USERNAMEはemailじゃない点に注意)

$ date | mail -s test komagata@gmail.com -f komagata@fjord.jp

便利だと思った(小並感)

Y!mobileがNexus6を買うとNexus Playerが無料でついてくるというキャンペーンをやってたので、

「Google信者だからどうせNexus Playerを買うんだし、買っちゃえ」

ということで買いました。

もちろんゲームパッドも買いました。

しかしこのリモコン・ゲームパッドが

「ウッソだろお前www」

ってぐらい遅延がひどすぎてゲームになりません。5フレぐらいあるんじゃないのこれ。

これ一回もプレイせずに出荷した?

シューティングのSKY FORCE ANNIVERSARYをプレイすると遅延が非常にわかりやすいです。

Nexus PlayerではゲームにならないのでSteam買ってPCの赤外線のゲームパッドでやったら快適かつゲーム自体は非常に面白かったのでクリアしてしまいました。プレイするなら断然Steam版がお勧めです・・・。

毎回ゲストとペアプロする画面を公開するペアプロキャストの2回目の後編を公開しました。

@kjirouがドライバー、@komagataがナビゲーターでkowabana.jp(rails)をペアプロしています。rails4.1でdeprecatedになった機能を外していくという非常に地味な内容になっています。

railsでkowabana.jpを開発 - ペアプロキャストep2後編@kjirou - YouTube

railsでkowabana.jpを開発 - ペアプロキャストep2後編@kjirou - ニコニコ動画:GINZA

flunkとか使ってます?ニコ動コメント等でフィードバックいただけるとありがたいです。

ペアプロキャスト - YouTube再生リスト

ペアプロキャスト - ニコニコ動画マイリスト

毎回ゲストとペアプロする画面を公開するペアプロキャストの2回目を公開しました。

@komagataがドライバー、@kjirouがナビゲーターでkowabana.jp(rails)をペアプロしました。

railsでkowabana.jpを開発 - ペアプロキャストep2前編@kjirou - YouTube

railsでkowabana.jpを開発 - ペアプロキャストep2前編@kjirou - ニコニコ動画:GINZA

以前、生放送やったときのイメージで文字をクッソ大きくしてますが、録画だったら画質がよくできるのでIDEでの開発とかも行けるかもしれません。あとはマイナーな環境やメジャーじゃない言語とかもやってみたいですね。

ニコ動コメント等でフィードバックいただけるとありがたいです。

ペアプロキャスト - YouTube再生リスト

ペアプロキャスト - ニコニコ動画マイリスト

怖話での実装に関する悩み。

怖話では閲覧数・コメント数・怖いの数からランキングを集計しています。

これにTwitterへのシェア数を含めたい。

怖話のサイトからのシェア数だけをシェア時にカウントすればいいのだけれど、連打できないようにするには会員オンリーにする必要がある。(実際に"怖い"ボタンはログインしてないと押せない)

怖話は閲覧は非会員でもできるので、シェアが会員しかできないのは困る。

TwitterのAPIでツイート数を取得してたら18000話あるのですぐ制限がかかる。どうしたもんかなあ。

有料化どうこう以前にピンチ。Herokuが6月16日でbambooスタックの全dynoを停止するそうです。

未だにbambooスタックで動いてたアプリなんてレガシーに決まってるので、普通にcedar-14にするとruby 2.0.0になって動かない。

cedar-14で対応してる最も古いrubyは1.9.3-p551だそうなのでGemfileに明示的に書けばなるべく穏便に移行できます。

source 'https://rubygems.org'
ruby '1.9.3'

Heroku Ruby Support | Heroku Dev Center

Lokkaで沢山作っていたブログなども移行出来てホッとしました。