There's an echo in my head

日々のメモ。

2012-01-01から1年間の記事一覧

COUNTDOWN JAPAN 12/13の二日目(12/29)に行ってきた

今年も行ってきた! フジファブリック → B-DASH → 高橋優 → マキシマムザホルモン → サカナクション → plenty → SHAKALABBITS ほんの12時間前に「今年も来たぜキャッホー!」ってなってたのに、凄く遠い昔のことに感じる。うん、今年もとても楽しかった。 フ…

RailsでRackミドルウェアを追加する

rakeタスクでつまれてるミドルウェアを確認する。 $ rake middleware use ActionDispatch::Static use Rack::Lock use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007fed13d07bb0> use Rack::Runtime use Rack::MethodOverride use ActionDispatch::RequestId use Rails::Rack::Logger use ActionDispatch::ShowExcep</activesupport::cache::strategy::localcache::middleware:0x007fed13d07bb0>…

gitでタグをもとにブランチを切る

git

タグの情報を見るなら $ git show タグ名 そのタグをチェックアウトするなら $ git checkout タグ名 そのタグからブランチを切る(そしてチェックアウトする)なら $ git branch ブランチ名 タグ名 $ git checkout ブランチ名 もしくは $ git checkout -B ブ…

ActiveRecordのwith_lockはトランザクションも開始してくれる

ソースを見るとトランザクションを開始してからロックしてくれるので、別途transactionを呼ぶ必要はない。 # File activerecord/lib/active_record/locking/pessimistic.rb, line 69 def with_lock(lock = true) transaction do lock!(lock) yield end end …

RSpecにdescribeやcontextで使えるメソッドを実装する

describeやcontext間で共通する処理をメソッドにするとスッキリするんだけど、それをspecファイルをまたいで共有したいときに。 module RSpec module Core module MyHelper # 適当に名付ける module ExampleGroupMethods def my_let(*args) p args let(*args…

MySQL InnoDBの行ロック

ロックがわからない。MySQL InnoDBの行レベルロックを読んだけど、イマイチわからない。というわけで、社内の勉強会で知ったことをまとめてみる。 FOR UPDATEかLOCK IN SHARE MODEによって、そのトランザクション中に走る別画面でのクエリの処理のタイミング…

Kernel.rand(n)はnが整数値の場合にn未満の値を返す

よく忘れるのでメモ。 Kernel.rand(n)は、nが整数値の場合には0..(n-1)の範囲の整数をランダムで返す。 つまり、rand(2)とやっても返ってくるのは0もしくは1のどちらかのみで、2が返ってくることはない。

the HIATUSのThe Afterglow Tour 2012に行ってきた

12/5のNHKホールに行ってきた。 というわけでこの本文を書いているのは年を跨いで2013年の1月3日の深夜28時。 あの日(12/5)のことは今もしっかり覚えているけども、情景の描写は完結に抑えておいて(全部書こうとすると、当日の帰り道に自分宛に送った長文…

serialize-rails gemでJSONをDBに格納する

ActiveRecordのserializeはYAMLにしか対応していないけど、serialize-railsを使うとJSONやXML、RubyのMarshalも保存できるようになる。 # Gemfile source 'http://rubygems.org' gem 'rails', '3.2.9' # 3.0.0 以上が必要 gem 'serialize-rails' # app/model…

クラス変数とインスタンス変数

class Klass @iv = 1 @@cv = 2 def self.iv; @iv end def self.cv; @@cv end def iv; @iv end def cv; @@cv end end class SubKlass < Klass end # クラスのインスタンス変数を参照してみる Klass.iv #=> 1 SubKlass.iv #=> nil Klass.new.iv #=> nil SubKla…

ruby 2.0.0-preview2を入れた

12/1にリリースされてたので入れた。 基本的にはruby 2.0.0-preview1と導入方法は同じで、ruby-installを更新したあとでインストール。 ちなみに環境はOS X 10.8.2 Mountain Lion。 $ cd ~/.rbenv/plugins/ruby-build $ git pull origin master $ CONFIGURE_…

Goose houseの音楽が素敵すぎて

最近知ったGoose houseという音楽ユニットの演奏がとても好きで、今日は一日中この人たちの歌を聴きながら作業していた。 恋におちたら/Crystal kay(Cover 主にカバーをやってるんだけど、アコースティックな感じがとても好き。超メジャー曲から、これ歌っ…

bundlerでgemを作る

不完全ながらメモ。 雛形を作る $ bundler gem hello こうするとhelloディレクトリが作られて、その中にひな形のファイル(hello.gemspecとかlibとかが作られる)。 hello.gemspecを変更する TODOと書かれているgem.description、gem.summaryは変更しないとr…

Railsアプリケーションにサブ機能を追加するchili

chiliはchankoのようなもの。 chankoは、大規模レガシープロダクトをレガシーコードのままベータ機能をサービス壊さずにぶっこむのに特化してるけど、ある程度ダーティさがある。chiliは、新規サービスにRails的な思想を守ったまま綺麗にベータ機能を追加す…

git current-branchで現在のブランチ名を返す

git

aliasを使う。 # ~/.gitconfig [alias] current-branch = "!$SHELL -c 'git branch &> /dev/null | grep \"^\\*\" | cut -b 3-' __dummy__" これでcurrent-branchサブコマンドが使えるようになる。 $ git current-branch master さらにcb = current-branchと…

Ruby 2.0.0-preview1でRails 4(HEAD)を入れる

まずBundlerが1.2.2以上でないとエラーが出るので更新しておく。 $ gem install bundler $ rbenv rehash $ bundle -v Bundler version 1.2.2 RailsのHEADはGemfileでgitリポジトリを直接指定することでインストールできる。 $ mkdir edge_rails $ cd edge_ra…

GitHubのWikiにサイドバーを作る

GitHubの採用しているWikiエンジンgollumの機能を使うと、プロジェクトのWikiにサイドバーを設定することができる。 $ git clone git@github.com:foo/bar.wiki.git $ cd bar.wiki $ vim _Sidebar.md $ git add _Sidebar.md $ git push origin master 自分で…

Sinatraのpassで処理を別のルーティングに引き渡す

Sinatraで複数のルーティングにマッチすると先に宣言されたほうで処理が行われるけど、passを使うと次のルーティングに処理が引き渡される。 どのルーティングにマッチするかにはPATH_INFOが使われている*1ので、passする前にこれを書き換えることで全く別の…

MySQLの整数値の幅

5.5のリファレンスのNumeric Typesより type bytes min max TINYINT 1 -128 127 TINYINT UNSIGNED 1 0 255 SMALLINT 2 -32,768 32,767 SMALLINT UNSIGNED 2 0 65,535 MEDIUMINT 3 -8,388,608 8,388,607 MEDIUMINT UNSIGNED 3 0 16,777,215 INT 4 -2,147,483,…

MessageLeafを導入してみた。

MessageLeafを導入してみた。 ヘルプを見ると現状下記サービスに対応しているとのこと。 Ameblo Blogger(動的テンプレートを除く) FC2ブログ はてなブログ(はてなダイアリーは非対応) Livedoor blog ヤプログ! 独自ブログ/CMS(サブディレクトリでの運…

ApacheでRedirectMatch

正規表現を使ってURLリダイレクトを行うにはRedirectMatchを使う。 RedirectMatch permanent /(archive/.+) http://archive.aerial.st/$1 ちなみにRedirectMatchはVirtualHostディレクティブにも書ける。 参考 mod_alias

Object#instance_execでブロック引数を省略する

def configure(&block) @config ||= Configuration.new block.call(@config) end configure do |config| config.use :yaml end みたいなのが、Object#instance_execを使うとスッキリ書ける。 def configure(&block) @config ||= Configuration.new @config.i…

ruby 2.0.0-preview1を入れてみる(成功)

前回のログをさかのぼってみたらreadlineまわりでもエラーが起きていた。 なので、readlineも入れなおしてやってみたところ上手くいった。 ちなみにOS X 10.8.2 Mountain Lion。 $ brew upgrade readline $ brew link readline $ brew upgrade openssl $ bre…

has_one, has_many, belongs_toでconditionsを動的にする

Rails has_many with dynamic conditionsより、ActiveRecord 3.1+ではprocを使う必要があるみたい。3.2.8で確認済み。 class User has_many :pictures has_one :profile_picture, class_name: "Picture", foreign_key: "user_id", conditions: proc { ["id =…

ruby 2.0.0-preview1を入れてみる(失敗中)

ruby-installの一覧を更新したあとで、rbenvで2.0.0を入れたらopensslがrequireできない を見ながらチャレンジ。 $ brew upgrade openssl Error: openssl-1.0.1c already installed $ CONFIGURE_OPTS=--with-openssl-dir=`brew --prefix openssl` rbenv inst…

rbenv install(ruby-build)の一覧の更新

rbenvのプラグインとしてインストールしている場合、 $ cd ~/.rbenv/plugins/ruby-build $ git pull $ rbenv rehash Homebrewで入れている場合、 $ brew upgrade ruby-build ただしこちらは更新が遅いので、横着してHomebrewで入れるよりもrbenvのプラグイン…

gemのディレクトリに移動する

$ cd $(dirname `gem which active_record`)

grep -s

$ grep hoge **/* とかしたときにディレクトリがヒットするとIs a directoryといちいちエラーが表示されて煩わしかったので、 alias grep='grep -s' というようにエラーを非表示にするオプション-sを設定した。

Enumerable#zipってなんぞ

レシーバと引数で与えられた配列を、レシーバの要素数個の配列に分割する。 (複数の配列の要素を、そのインデックスごとに取り分けた配列を作る、のほうが的確?) a = [1, 2, 3] b = [4, 5, 6] c = [7, 8, 9] a.zip #=> [[1], [2], [3]] a.zip(b) #=> [[1,…

Hash[]ってなんぞ

偶数個の引数からハッシュを作る。 Hash[] #=> [] Hash[1] #=> ArgumentError: odd number of arguments for Hash Hash[1,2] #=> { 1 => 2 } Hash[1,2,3,4] #=> { 1 => 2, 3 => 4 } array = [1,2,3,4] Hash[array] #=> {} 最後の一つだけよくわからないなぁ…

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。