Tech

二代目MacBook Airの11.6インチを購入

初代を買ってからもうすぐで2年が経とうとしてる今日この頃、SSDの容量不足に加え動作が緩慢になってきたので買い換えることにした。 オプションは付けられるだけ付けて、 MacBook Air 11.6inch CPU 2.0GHz Core i7 8GB RAM 512GB SSD という感じ。 先日「2…

Qiita/Kobito.app便利ですよ

最近はすっかり更新しなくなってしまったこのブログだけど、技術的なメモに関してはQiitaに残すようにしている。 というのも、Markdownが使えるKobito.appがとても便利なので。 メモを取るのにいちいちファイルを作らなくていい Markdownが使える タグが付け…

ikm-opengraph.gemをリリースしてみた

リリースしてみた。初gem。forkだけど。 opengraphという、HTMLのヘッダに埋め込まれたOGPの情報を抜き出すgemがあるんだけど、内部で使用しているRESTClientがUTF-8固定で処理をするためにそれ以外のエンコーディングだと文字化けしてしまうという問題があ…

MySQL 5.5でのスローログ

Homebrewで入れたMySQL 5.5.10のスローログの設定。 $ sudo vim /etc/my.cnf [mysqld] (いろいろ) slow_query_log=1 long_query_time=0.02 slow_query_log_file=slow.log $ mysql.server restart $ tail -f /usr/local/var/mysql/slow.log

Rack::Profilerを使う

Rack::Profilerを使うのに少し躓いたのでメモ。 Gemfile: gem "ruby-prof" gem "rack-contrib", :require => "rack/contrib" app.rbのconfigureブロックあたり: require "rack/contrib/profiler" Rack::RubyProf = RubyProf use Rack::Profiler Rack::RubyPr…

Node.js(V8)は4バイトのUTF-8に未対応

現状、Node.js(V8)は4バイトのUTF-8に対応していない。 $ node > code = 0x1F614 128532 > char = String.fromCharCode(code) '' > char.charCodeAt(0).toString(16) 'f614' 先頭の1が削られてしまっている。 ちなみにV8コミッタの@koichikさんから直接リ…

RestClientの返り値はStringとちょっと違う

インターフェースが簡潔で使いやすいRestClientだけれども、各種HTTPメソッドの返り値をto_iするとステータスコードを返すみたいだ。 たとえば次のようなSinatraアプリが起動していたとする。 get '/' do "1" end このgetルーティングに対してRestClientでア…

LionでPostfix+Gmail

OSX LionにはPostfixがインストールされているんだけど、これを使ってgmail経由で送信する際に一筋縄では行かなかったのでメモ。 まず /etc/postfix/main.cf に以下を追記して、gmailの587番ポートに接続するよう設定する。 relayhost = [smtp.gmail.com]:58…

git reset直前のコミットはORIG_HEADに保存されてる

間違えてgit reset(--soft/--hard問わず)してしまった場合とか、取り消すのはいいんだけどコミットログは見たいとか思ったら、 git show ORIG_HEAD すれば良い。 ORIG_HEADはgit resetする直前のHEADの状態を指しているので、git diffで差分を見るといった…

ActiveRecord3.1/mysql2でTRUNCATE

DatabaseCleanerを使うと 複数データベース(各種RDBMSやMongoDB、CouchDBなどなど)に対応した方法でデータを削除できるんだけど、複数のDBにコネクションをはっている場合にはうまく動いてくれないことがあるらしい。 でも自分の場合、mysql2でうまく動い…

ActiveRecord3.1/MySQLでBIGINT UNSIGNEDなid

ActiveRecord 3.1でMySQL2アダプタを使っている場合に、idカラム(プライマリキーのカラム)にBIGINT UNSIGNEDを使う方法。 まずCREATE TABLE時のidカラムの型を変更するために、ActiveRecordが読み込まれた直後、rakeタスク等でテーブルの作成が行われる前…

Object#presenceが便利

ActiveSupport 2.3で導入されたObject#presenceが便利。 たとえば、 time = options[:timestamp].presence || Time.now で初期値の代入に使えるし、 time = options[:timestamp].presence && Time.at(options[:timestamp]) で値がある場合に限って加工に使え…

sinatraでbefore :onlyみたいなこと

SinatraのbeforeフィルタだとRailsみたいに:onlyや:exceptで適用するルーティングを指定できない。 ただそれだとbeforeフィルタのなかでガリガリとifで分岐する必要があるのでそれもちょっと微妙。 で、A Sinatra Before Only Filterにbefore :onlyについて…

Mongoid/MongoDBでauto increment

Auto Increment with MongoDBより、Mongoid/MongoDBでMySQLのauto incrementみたいなことをする方法。 連番を保持するためのCollectionを用意して、新しくDocumentを作る際にそれをfind_and_modifyで1増加させるという方法をとる。 find_and_modifyを使うの…

RSpec2で特定のテストを実行する

Relishより、次のようにすることで特定のdescribe/context/itのみを実行することができる。 spec_helper.rbのRSpec.configureにfilter_runの設定を追加: RSpec.configure do |c| c.filter_run :focus => true end テストしたいdescribe/context/itに:focus…

yard-sinatraでSinatraのドキュメントにYARDを使う

yardのプラグインであるyard-sinatraを使うとSinatraのアクションごとに記述されたyardocからHTMLドキュメントを生成できる。 インストールと設定 yard-sinatraをインストールすれば必要に応じてyardもインストールされる。 ただしyardはデフォルトではプラ…

display:boxとbox-ordinal-group

CSS3にはdisplay:boxとbox-ordinal-groupという便利な記法があって、マルチカラムレイアウトっぽいことが手軽にできる。詳しくはCSS3の数行で作る簡単な3カラムレイアウトを参照。 で、サンプルを書いてみた。 Google Chrome で表示すると次のようになる。 f…

µ-optparseを使って.rvmrcを生成

optparseのラッパーであるµ-optparseを使って.rvmrcを生成するスクリプトを書いてみた。 オプションは下記の通り。--helpでも見れるし、コードを読むだけでもわかりやすい。 -r, --ruby : Rubyのバージョン。デフォルトはこのスクリプトを実行しているRuby -…

git-svnでリモートのブランチを作成・コミット

git svn branch <BRANCH>で<BRANCH>というリモートブランチがbranches/<BRANCH>に作られる。 これはgit branch -rで確認できる。 $ git svn branch foo $ git branch -r git checkout <BRANCH1> remotes/<BRANCH2>でコミット先がbranches/<BRANCH2>を向いたローカルブランチ<BRANCH1>が作成される。 これはgit svn infoで</branch1></branch2></branch2></branch1></branch></branch></branch>…

リモートホストとの差分

リモートホストとの差分を見る場合、次のようにsshでcatした結果をdiffに流しこめば良い(元ネタ): $ ssh {remote_host} cat {remote_file} | diff {local_file} - リモートホストとローカルホストが同じ構成の場合(開発環境とステージング環境など)には…

Herokuの手始め

毎回Herokuを使ってみようと思うたびに手順を忘れるのでメモ。 アプリケーションの準備 hello_herokuというRailsアプリケーションを作ることにする。 Herokuの標準のDBがPostgreSQLなので今回もそれを指定する。 Test::UnitとPrototype.jsは要らないので-JT…

varnishはQUERY_STRINGも含めてキャッシュする

今動いているサービスが (INTERNET)-[varnish]-[Starman/Catalyst] というような構成でvarnishでCSSや画像なんかの静的ファイルをキャッシュしているんだけど、 現状デプロイしたけどキャッシュが更新されなくて見えてる画像が新しくなってないよって現象が…

Template::Toolkitでファイルのタイムスタンプを付加

Railsだとimage_tagを使えば画像ファイルの更新日時をくっつけて <img src="foo.jpg?1234567890" /> みたいにしてくれて、画像が更新されればブラウザは画像をキャッシュしていても新しくリクエストしてくれたりする。で、Catalyst/Template::Toolkitだとどうやるんだろう?ってことで書いて…

ActiveRecordとMongoidは共存できる

第5回 MongoDB.jp 勉強会 in Tokyoに行ってきた! メモとかはまたのちほどアップするとして(そういえばRubyKaigi最終日のメモもアップできていない)、@yuki24 さんの発表で「ActiveRecordとMongoidは共存」できるという話を聞いて、ちょっと試してみた。 …

RubyKaigi2011(二日目)に参加してきた

今日も午後から参加してきた。@a_matsudaさん、@yharaさんの話が聞けなくて、寝坊してしまったことを激しく後悔している。 5 years know-how of RSpec driven Rails app. development. / @moro 最近のrspecやfixture-replacementを使ったテストの書き方のノ…

RubyKaigi2011(初日)に参加してきた

午後から参加してきた。 とりあえず箇条書きのメモを載せておく。あとで感想を書こう。 Ruby を利用した大規模ウェブサービスの開発・運用 / @hotchpotch cookpadの中の話。extensionsがとても興味深かった。 この後のgithubとかもそうなんだけど、テスト=C…

scopeでtwitterっぽいルーティング

「Ruby on Rails 3 アプリケーションプログラミング」のルーティングの項をパラパラとめくっていたら、scopeを使ってtwitterっぽくトップレベル(?)にユーザ名を持ってくるようなルーティングができることを知ったのでメモ。 概要 例えばroutes.rbには次の…

perlのpackage越しのサブルーチン呼び出し時の引数

perlでpackage越しのサブルーチンを呼ぶ際に"::"と"->"だと引数が違う気がしていたけど、あまりよく考えていなかった。というわけでこんなスクリプトを書いた。 $ cat package_args.pl #!/usr/bin/env perl package Foo; use Data::Dumper; sub bar { print …

nginx + unicorn + Rails on Mac

とりあえず動かしてみたのでメモ。 unicornを動かす まずはgemをインストール。 $ gem install unicorn unicornの処理を設定する $ cd <RAILS_ROOT> $ vi config/unicorn.rb <RAILS_ROOT>/config/unicorn.rbはこんな感じ(nginx + unicorn を試してみたからほぼそのまま拝借): # ワ</rails_root></rails_root>…

Macでpkill

homebrewでproctoolsをインストールする。 $ brew install proctools