preloadがうまくいかないときに何とかするbulk_loaderというライブラリを作ってみた

github.com というやつが先々週のgithub trendで流行っていたんですが、もっとうまく書けそう、という気がしたので書いてみました。 (GraphQL使ってないので同じ用途に使えるかは今のところ不明ですが。 # app/models/post.rb class Post < ApplicationRecor…

bundle update 2016-01-25

activerecord-import v0.11.0 https://github.com/zdennis/activerecord-import/compare/v0.10.0...c0a4393a AR 5.0 betaまわりの対応を進めているもよう。ただテスト一部通ってないのでまだ微妙かもしれない。 capistrano-rails v1.1.6 https://github.com/…

rubocopがもっさりするときは除外ディレクトリを見直してみるとよいかもしれない

前のエントリで書いたrubocopがもっさりする問題を調べてみると、どうやら走査する必要のないディレクトリのファイルまでチェックしてしまっていて非常に遅くなっているのが原因だったようだ。なお、rubocopは**/*で終わる文字列のパターンをディレクトリを…

bundle update 2016-01-17

rubocop v0.36.0 大量にCopが追加されている関係でいくつかこけるようになる。 設定ファイルにも非互換な変更が含まれているので更新する必要がある。 なんか最初の実行開始までがもっさりするようになった気がする。 https://github.com/bbatsov/rubocop/co…

guard-rubocopでsystem経由の呼出しを止めると快適になった

github.com guard-rubocopの中身を見たらsystemで呼びだしていたので、直接Rubocop::CLIを呼びだして起動するようにしてみたら爆速になって快適になりました。 もっさりするのでテストのあとにrubocopを実行するようにしていたけど、これなら先に実行しても…

bundle update 2016-01-13

aasm v4.7.0 https://github.com/aasm/aasm/compare/v4.5.1...v4.7.0#files_bucket 新しくhookポイントが追加されている。 全イベントの前後やTransactionの前後にイベントが仕込めるようになったもよう。 カラム名が存在しないやつに設定してしまったときの…

コマンドラインを複数回実行して実行時間を計測するツールを書いた

go

walf443/benchcmd · GitHub なんか最近ツール系のやつを趣味で高速化したりしていて、PR投げるときに速くなったよと説明するときに手元で何度か計測して、平均値とか調べるのがめんどいなと思って、複数回実行して平均/標準偏差を表示してくれるツールを作っ…

importするだけですべてのHTTP通信をログる

go

今回のisuconに対応できなかったので、作ろうと思ったけど、id:motemenさんが既に作ってた昔見た記憶があったのだけど、すっかり記憶から忘れていた。motemen.hatenablog.com何msぐらいかかったかとかは出てこないので出力できるようにしてみたが、拡張方法…

isuconで惨敗しました

isuconでチームフリー素材として参加しました。54,868点で8位でした 今回は、開発環境の構築で色々とてこずりました。 DBがpostgresqlだったので、手元で構築しようとしていたときに、brew updateしてしまい、postgresqlのdatabaseのバージョンが一致しない…

2行書きかえるだけでSQLをログに出力できるようになるgo-sql-tracerを作りました

go

isucon予選中に、SQLを出力したくなったのだけど、ふとgithub.com/shogo82148/go-sql-proxyを使ってみようとしてとりあえず簡単に使う方法が書いてなくて少し使い方を調べるのに苦労したので、isuconで時間のロスなく使えるようにそのwrapperを書きました。 …

じわじわチャットへ通知する

go

なんかのバッチを実行していて、それが出力するログをじわじわチャットへ通知したい。(そのバッチはそれなりに時間がかかるものとする)何も考慮しなければ、たとえばslackであれば、 # #!/bin/bash # notify_chat.sh exec tee >(while read line; do curl -s…

Chrome拡張でCocoaPodsのPodfile.lockのdiffからも各ライブラリの変更へ飛べるようになった

昨日だしたやつが、CocoaPodsのPodfile.lockのdiffからもclickできるようになりました。また、Pull Requestのページのdiffで発動しなかった問題を修正しました。 権限まわりを変更している関係で、既にインストールした人はv0.0.2にアップグレードされた人は…

githubのGemfile.lockやpackage.jsonのdiffからそれぞれのライブラリのdiffへ飛べるChrome拡張を作った

ChangeLogのファイルはプロジェクトにあったりなかったりなので、githubのリポジトリのタグ間のdiffへクリックでいけるようにしてみた。 これでbundle updateとかしたときにざっくりどういう更新があったのか確認ができる。現在は、Gemfile.lockのdiffと、pa…

rake db:migrateをRidgepoleで置き換える

ちょっとRidgepole試してみようかなと思って使いはじめた。rails書いていると他の人がmigrationふつうにしようとしてしまったりするだろうから、rake db:migrateのデフォルトの動作を無効にして、ridgepoleを動作させたい。lib/tasks/ridgepole.rakeとかで、…

Gemfileで、activerecordのedgeを指定する

先に結論をまとめると、こうすればよいらしい。 gem 'arel', git: 'https://github.com/rails/arel.git' git 'https://github.com/rails/rails.git' do gem 'activerecord' end ライブラリで、特定のバージョン以上にbundlerが指定されていて、それを一時的…

ppの出力先を変えられるようにした

go

pp( k0kubun/pp · GitHub )は非常にお気軽に使えてよいのだけど、デバッグ中にちょっと出力がウザいので抑えたり、また見たりしたいなー、というときに、import文をコメントアウトしたり変数を_に変えたりするのがめんどくさかった(それがGo wayなのではある…

go yaccを使ったプロジェクトの管理

最近、go yaccを使ってparserを書いたりしているのですが、yacc生成前のファイルだけコミットして、生成後のコードはコミットしたくない。でもyacc生成コードをリポジトリに含めないと、go getが失敗してしまうので、どうしたもんかなと思ってたのですが、使…

カジュアルに実行時間を計測する

go

isuconの予選で、カジュアルにここどれぐらい時間がかかっているか計測したい、ということで作った。 pprofは(使い方間違っているだけなのかもしれないけど)CPU時間での計測なので、io待ちとか、channel待ちとかの時間は出てこないので、web applicationのチ…

config/routes.rbを分割する

とあるサービスのconfig/routes.rbが肥大化してきたので、分割したくなっていたので、調べていた。ググってみると色々方法があるらしいが、バージョンごとにやり方が違ったりしてげんなりする。 よく出てくるconfig.paths["config/routes"]をいじる方法は、…

続: CollectionViewで初回はemptyViewを表示しない

前のやつは、あまりよくない方法だなぁとは思っていたのですが、ちゃんとしたやり方っぽいのがあった。"collection:rendered" triggerにフックすればよいようだ。Marionetteだと、triggerMethodというのがあって、triggerでも対応できるし、OnCamelCaseみた…

CollectionViewで初回はemptyViewを表示しない

あんまりよいやり方じゃないので、http://walf443.hatenablog.com/entry/2014/07/10/120223 を参照してください。Marionette.jsのCollectionViewのemptyView機能は、collectionが0個になったら勝手に「データがありません」などの表示をしてくれて便利なのだ…

Unicornでslow restart

Unicornの同時接続数がわりと少ないのに気づいたので、えいやとworker_processesを増やしたら今度はdeploy時にちょっと詰まり気味になってしまった。これは、deployのタイミングで重いシステムコールであるforkを連発するため、と思われる。そこで、Startlet…

TCPListenerのファイルディスクリプタを調べる

ListenしているSocketのfdを知りたいが、net.Listenerのインターフェースをみても取得する方法がないのでググったら、http://naoina.plog.la/2013/11/12/235753683181こんな記事をみつけた。Socketからfdが取得できないのは、POSIX縛りになるからだと思われ…

動いているVMにNatのポートフォワードの設定をCLIから変更する

Dockerをローカルで実行できるようになっても、ポート転送を手動で設定しないといけないのがつらいので、コマンドでやれるようにするのを調べた。 VBoxManage controlvm boot2docker-vm natpf1 "node,tcp,127.0.0.1,49160,,49160" VBoxManage controlvm boot…

OSXでDockerを試す

雪がひどすぎて外出る気がしない。あー、そういえば、DockerがOSX対応したっていうし、ぼちぼち試してみるかー、と思って http://docs.docker.io/en/latest/installation/vagrant/ みてみたけど、あんまりかわってない気がする、というみなさんこんにちは。…

Server-Sent Events覚え書き

なかなか書く機会はなかったのだけど、ふと使えそう!、という場面があったので、Server-Sent Eventsを書いてみたのでメモ。 レスポンスのContent-Typeはtext/event-stream dataを組み立てる際は、改行(\r, \n, \r\n)をエスケープする。 http://www.w3.org/TR…

HTML Media Captureの記述の仕方

webでHTML Media Captureについてググると、上の方にでてくるコンテンツはわりと、 <input type="file" accept="image/*;capture=camera" /> とか、 <input type="file" accept="image/*" capture="camera" /> とか書いてあったりするのだけど、http://www.w3.org/TR/html-media-capture/ を見たら、 partial interface HTMLInputElement { attribute boolean capture; };の…

mod_proxy_balancerで振り先が//にならないようにする。

<Proxy balancer://app> BalancerMember http://192.168.0.1/ </Proxy> <VirtualHost *:80> ProxyPass / balancer://app/ </VirtualHost> のように、BalancerMemberの定義の末尾に"/"をつけると、振り先で、//に対して振るようになってしまうっぽいので、つけないように気をつける。 <Proxy balancer://app> BalancerMember http://192.168.0.1 </Proxy> <VirtualHost *:80> P</virtualhost>…

dalliはfork safeか?

ふと、dalliがunicornなどのmulti processで動作するアプリケーションで動かしたときにコネクションを張りなおす処理をしないといけないか気になったので、調べてみた。 gist8284358これを実行してみると、 true 1 I, [2014-01-07T00:27:41.396287 #9290] IN…

pidファイルの管理をする

pgrep -F pidfileオプションを使うと、pidfileを開いて、その中にあるプロセスIDが存在するか調べ、存在している場合には、0で終了してくれるようだ。 なので、起動スクリプトとかで、pidfileの存在チェックとかをするときには、 if test -e $PIDFILE && pgr…