ActiveModelLike::ErrorsというPerlモジュールを書いた

通常Model内のエラーをControllerに渡す方法はWAFに組み込まれている。が、薄いWAFだとControllerとViewだけあって、Modelは好きに実装して下さいということが多い。得にPerlは軽量なWAFが多く、Mojoliciousのように薄くはないけどModel層がないものもある。…

ActiveSupport::Notificationsで実行されるSQLを確認する

ActiveRecordなどORMを使用していると、うっかり大量のSQLを発行してしまうことがある。Bulletを使えばN+1のクエリは検知出来るが、そうでないクエリでも肥大化するケースはある。 例えば、集計するような処理を複数のモデルからメソッドを寄せ集めて書いて…

Sidekiqを安全に再起動(終了)したい

バージョン Sidekiq 3.3.0 基本動作 ジョブが走っている状態でSidekiqを終了すると、8秒間(デフォルト)待って終了する。そして、8秒以内に終了しなかったジョブはキューに戻される。 メール送信くらいの軽いジョブであればで問題にはならないが、例えば、AWS…

Qiita::Markdownを使ってMarkdown APIサーバを書いた

Markdownには様々な方言があり、記法の解釈にも微妙に差があったりする。 一つの言語で開発しているのであれば、同じライブラリを使えば問題にならないが、それぞれ別の言語で書いた複数のアプリケーションで全く同じレンダリング結果を得るのは難しい。 一…

Ohaiの出力結果をfluent-catに食わせたい

ohaiコマンドの実行結果は人が見やすいprettifyされたjsonなので、そのままfluent-catにパイプで渡すとparseエラーになる。(恐らくここで一行ずつ読み込んでparseしているから) $ ohai | fluent-cat ohai.hostA parse error: unallowed token at this point …

ひとりISUCONしてみた

自分の実力だけで何点出せるのかチャレンジしたかったので、公式の解説や予選参加者のエントリーを読むのは我慢して頑張ってみた。言語はPerl。 https://github.com/nkwhr/isucon4-qualifier 結果 11:34:06 type:info message:finish benchmark workload: 10…

Docker上でテストを回す

最近RailsやPerlで書いたWebアプリケーションのテストをDocker上で回すようにした。 Docker周りエコシステムは沢山あるけど、まだスタンダードと呼べるものがなく、環境を整えたり、変更点をキャッチアップするコストも馬鹿にならないので、とりあえずdocker…

RSpecでshared_contextを使う

APIのrequest specを書く際、アクセストークンを生成してリクエストヘッダに埋め込んでおくというケースがよくある。そしてリソース単位でファイルを分けるていると、新しいリソースを追加する度に同じ定義をコピペする必要があって辛い。そんなときはshared…

Railsを勉強するために読んだ本(と読んでいる本)

コードは多少書けるけど、Webアプリケーションの開発経験はほとんどない、という前提の下読んだ本の感想をだらだらと。 読んだ本 Learn Ruby on Rails (英語) http://learn-rails.com/learn-ruby-on-rails.html 本当に初心者向けなので、半分くらいは環境構…

Vagrantfileの中でGemを使いたいときどうするんだっけ?

と初歩的なことで小石3つ分くらいつまづいた。 ただrequireしても普段使ってるRubyとVagrantのRubyはバイナリも見てるGemのPATHも違うので読み込めないは分かる。だからVagrantの方にGemをインストールすればいいんだけど、昔使った記憶のあるvagrant gem in…

サーバのトラブルシューティングにsysdigが使えそう

sysdig とは? Sysdig is open source, system-level exploration: capture system state and activity from a running Linux instance, then save, filter and analyze. Think of it as strace + tcpdump + lsof + awesome sauce. With a little Lua cherry…

padrino-helpersでasset folderの名前を変えたい

development環境の場合、sinatra-assetpack で指定したjsやcssは/js/application.js /css/application.cssでサーブされるのに、padrino-helpersのjavascript_include_tagなどで追加したものは /javascripts/foo.jsや/stylesheets/bar.cssになる。 なんか気持…

serverspecの出力結果を少し見やすくする

RSpecに馴染みがないからか、serverspecの出力結果(特にエラーは)は正直見づらい。もちろん全てパスするのが前提だから、failした時点でそれどうなのよって話なんだけど、サーバの台数やテストの数が多いと結構おかしなところが見つかる。(そして目を細めて…

DockerのUbuntuイメージでMySQLを動かしたい

普通にapt-get installするとUpstartに繋がらなくて失敗する。 ore@localhost ~ $ docker run -i -t ubuntu:12.10 /bin/bash root@aaee59dede24:/# root@aaee59dede24:/# apt-get install -y mysql-server ... ... Setting up mysql-server-5.5 (5.5.27-0ubu…

CoreOSでDocker入門

先日のVagrantのバージョンアップも無事に済んだので、CoreOSのVagrantイメージでDocker入門してみた。 主に自分用のメモ。 CoreOSのセットアップ ドキュメント通り、Vagrantfileをcloneしてupするだけ。 [~/vm] $ git clone https://github.com/coreos/core…

VagrantをバージョンアップしたらCentOSがはぶられてた

CoreOSを試してみたくて CentOS 5.9 のサーバで Vagrant を 1.2.2 から 1.2.7 へ上げたら動かなくなった。 # rpm -Uvh http://files.vagrantup.com/packages/7ec0ee1d00a916f80b109a298bab08e391945243/vagrant_1.2.7_x86_64.rpm Retrieving http://files.va…

Vagrantでネットワーク設定を変えても反映されなかった原因

veeweeで作ったオレオレCentOS5 boxのネットワーク設定をhost-onlyに変えてreloadしてみたらエラーが出てinterfaceが上がらなかった。他のboxだと問題ないので、OS側で何か設定し忘れたのかなーと調べてみたら余計な設定が入っていたというお話。 Vagrantfil…

GitLab 5.0 を CentOS 6.4 にインストールする

Ubuntuの手順そのままだと上手く行かない部分や省かれている箇所があったので、CentOS6用に書き直したみた。 毎回 sudo と打つのがめんどくさいので、プロンプトが#のときはroot、$のときはgitユーザになってコマンドを実行してます。 参考元: https://githu…

CentOS 5.9 に mu をインストールしようとしたら思いのほか大変だったという話

サーバに貯めているメールをWanderlustから全文検索する方法を調べていると mu というのを見つけた。 作者も元々Wanderlustで使うために作ったみたいで設定も簡単なので試そうとしたところ、yumの標準リポジトリはもちろん、RPMすら見つからない。(ググラビ…

MojoliciousをアップデートしたらMojo::Templateでエラーが出るようになった

昨日書いたKobitoViewerを動かしているサーバのMojoliciousを最新(v2.92)にアップデートしたらエラーが出て動かなくなった。 Undefined subroutine &Mojo::Template::SandBox::f08af35edfb6fff00e16521ce13bfb68::b called at template from DATA section "i…

Mojolicious::Lite で Kobito ビューワー的なものを作ってみた

最近勉強メモを残すのに Kobito というアプリを使っている。ただこのアプリ、残念なことにMac用のクライアントしかなくて、データもローカルに保存されているので、せっかくメモしても会社のWindows PCから見ることが出来ない。なんとかして会社からも見たい…

Redisのインストールメモ

対象はCentOS 5。特に罠はないのでREADME通りに進めるだけ。 # wget http://redis.googlecode.com/files/redis-2.4.10.tar.gz # tar zxf redis-2.4.10.tar.gz # cd redis-2.4.10 # make # make PREFIX=/usr/local/redis install 起動スクリプトの作成 # ./ut…

Markdown Mode を使ってみた

Emacs Markdown Mode インストール (install-elisp "http://jblevins.org/git/markdown-mode.git/plain/markdown-mode.el") markdown コマンドが無い場合、実行時に /bin/bash: markdown: command not found となるので、Macの場合はhomebrewなどから入れて…

git-completion on bash/zsh

git

補完が無いと困るほど git を活用していなかったので気にもしてなかったけど、bash/zshの補完スクリプトは git のソースに入ってるんだね。適当な場所にコピーして cp git-X.X.X.X/contrib/completion/git-completion.bash ~/.git-completion.bash .bashrc等…

PowerLineがかっこよすぎる

http://www.emacswiki.org/emacs-en/PowerLineこういうのが欲しかった。ごちゃごちゃして見にくかったモードラインがスッキリ!しかもかっこいい! (元ネタはVimらしい。) powerline.el はカスタマイズするのが大変そうだったのでwikiのsnippetを自分好みに修…

Emacsでマウスホイールスクローリング

Emacsでマウスを使うとかパッドでFPS(笑)並みに邪道だけど、片手にコーヒーやお菓子を持ってコードやツイッターを眺めたいときなんかにはやっぱり便利。 デフォルトの設定でスクロールすると行が飛びすぎるので、いわゆる smooth scrolling するために以下の…

OSX Lionに最新版のEmacsとWanderlustをインストール

Emacs実践入門を読んでいたら無性に一からEmacs環境を構築したくなったので、とりあえずEmacs本体から入れ直した。Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)作者: 大竹智也出版社/メーカー: 技術評論社発売日: 2012/03/…

一文字パッチでlogmonをログローテートに対応させる

ログを監視する仕組みについて調べていたらlogmonというツールを見つけた。IBM製ってとこに違和感があるけどシンプルな作りなのでインストールも楽で使いやすいらしい。1枚のスクリプトでしかも唯一読めるPerlだったのでどんなことをしているのかチラ見して…

CentOS 6.0 を入れてみてあれれ?って思ったことのメモ。

普段触る機会の多い CentOS5 との違いで得に気になった点。 テキストモードでインストールが出来ない? そんなことなかった。 最初のgrub画面で [tab] を押して text って付け加えると、テキストモードでインストーラが起動してくれる。 > vmlinuz initrd=in…

古いProftpdでのLimitの設定

せっかく調べたのでメモ。proftpd-1.2.10rc1 より前のバージョンでこんな感じのLimit設定を書いた場合、 Order Deny,Allow AllowUser hoge, fuga AllowGroup foo, bar Allow from x.x.x.x, y.y.y.y AllowUser と AllowGroup 内のユーザ名/グループ名は AND …

Perlのswitch文とif/else文のベンチマークを取ってみた

ちょっとしたスクリプトをPerlで書いてて、 $hogeが文字列aのときは文字列a'を返す $hogeが文字列bのときは文字列b'を返す <略> $hogeがどれにもマッチしない場合はhogeを返すみたいなよくある処理をする必要が出てきて、見やすいからという理由で use Switc…

ランダムなパスワードを大量に生成するワンライナー

と言ってもCPANに上がってるモジュール使うだけ。CPANバンザイ。 $ cpanm String::MkPasswd8文字のパスワードを10個生成 $ perl -MString::MkPasswd -le 'print String::MkPasswd::mkpasswd(-length=>8) for (1..10);' s0Hg7N"g Cy7*pp9C ;k1Wj3Nr 2MiHm:o5 …

Emacs Evernote modeを試してみた

http://code.google.com/p/emacs-evernote-mode/ サーバからも Evernote 見れたら便利だよなぁと思って、Debian Lenny サーバに入れてみた。 必要なもの Emacs22 以上 Ruby 1.8.7 以上 Rubyのインストール そもそも Ruby が入っていなかったので apt-get で…