鳩舎

レースしない

Mac の常にスクロールバーを出す設定は最高

エンジニアが『このデザインは最高!』とか褒めてるサービスもどんどんぶっ壊れるし最高の気持ちになれる。とりあえずエン転職さんははてブに出してる広告直したほうがいいです。肝心の社名が切れてます。 さあ、今すぐ有効にしよう! (こういうの気を使っ…

ISUCON5 で準優勝しました

今年も @mirakui と @sora_h と一緒に ISUCON5 に出場して、準優勝しました。 やったこと 時間は投入した時間。 12:00 : API リクエストを送る先の services が DB に入ってるけど大した数でもない(7つ)ので、全部アプリケーションにハードコードした。 これ…

(個人用途において)ほぼ最強に近いスクリーンキャプチャ / スクリーンキャスト環境

スクリーンキャプチャやそれらを共有するツールはいろいろ出ては消えの状態で、どれを使うのがいいのかという話になると難しいかと思います。 スクリーンキャプチャを撮りたい状況には概ね3くらいあって 単純にファイルとして保存したい チームメンバーや友…

ISUCON5 予選でアニメ見た

今年は参加者側として ISUCON5 に出てきました。チームは白金動物園。いつもの(@sora_h, @mirakui)メンツです。 何やってたかについては大体 sorahのエントリ に書いてあるので割愛。というか前頭葉破壊されて覚えてないです。 真剣な与太話 9:30 チームビル…

VOD で配信されてるアニメ検索するページ作った

TL;DR https://anime-search.herokuapp.com/ 捗る 動機 各社の一覧ページ、わざわざ五十音順でページ分けされたりしていて厳しみがあるので、一括で検索するページが欲しかった。 あとインクリメンタルサーチしたい。 内容 現在はバンダイチャンネルと D ア…

アニメ視聴に主眼を置いた VOD サービスの比較と解説

2015-04-30 版。俺が使ってるあのサービスがねえぞどうなってんだという方はコメントでサービス名を書いていただけますと僕が金を払いに行きますのでよろしくお願いします。 TL;DR コスト及び物量重視なら d アニメストア。コメント見たかったらニコニコ。い…

ISUCON4 お疲れ様でした

今回の ISUCON 、みんなはどうだったかな?楽しかったかな?ベンチマーカーについての文句?いいよ、こいよ、俺がベンチマーカー実装者だ。 ということで、まずはお詫びを。今回、過去の ISUCON に比べて本当にトラブルが多くて申し訳なかったです。次の出題…

git-set-mtime を Docker のためにリリースした

Docker のキャッシュは mtime ベースっぽい - 鳩舎 って話は前にしたんだけど、そんでじゃあどうするのっていう解決策がなかったので、 CI サーバー上で都度ソースをひっぱってくるような場合でも Docker のキャッシュを効かせるために、 git-set-mtime を作…

uninclude v1.1.0 をリリースしました

特定の極小数の一部 Ruby ユーザーの皆様お待たせしました。Ruby 2.1.0 以上でも uninclude が使えるようになりました。 新しくリリースされた uninclude v1.1.0 のテスト済み Ruby のバージョンは以下です。 ruby-head 2.1.3 2.1.0 2.0.0 1.9.3 1.9.2 1.8.7…

SSHKit within as 順序 意味なし

ruby の SSHKit というのがあって、まぁいろいろ端折ると on "10.0.0.1" do as :root do within "/tmp" do execute :echo "Hello > log" end end end みたいなのが書けて、『あー 10.0.0.1 に入って root に sudo して /tmp に cd して echo するんだなー』…

Docker のキャッシュは mtime ベースっぽい

タイトルそのまんま。 Dockerfile ではすでに ADD したファイルの追加なんかはキャッシュされるのでスキップされる # Dockerfile FROM ubuntu ADD text text こんな感じの Dockerfile があったとして、これを2回ビルドすると、2回めの時には Step 1 : ADD te…

github.com のソースコードプレビューでタブ幅8で困っている人向け

.code-body .line, .file-diff .file-diff-line { tab-size: 2; -moz-tab-size: 2; -o-tab-size: 2; } 何らかの方法で上記の CSS を読み込むと2タブになります。4タブがいい人は2を4にしましょう。 go fmt は基本的に問答無用でタブインデントにするので、こ…

適当に CLI から pushover に通知送る go app 書いた

https://github.com/rosylilly/pprocess ~/.pprocess.json に { "token": "application token", "user": "user token" } てな具合で設定を保存して、 $ go get github.com/rosylilly/pprocess $ pprocess -m "通知" とか送ると、 Pushover 経由で通知が飛ぶ…

Object Design Rough Talks #1

Object Design Rough Talks というイベントを開催して、Points of View という内容で話ました。 いろんな意味で面白いイベントだったので、詳細なまとめはまたこんど。

Rails 4.1.0.rc2 で AR オブジェクトその他の #to_json に Oj を使う

config/initializers/json_with_oj.rb あたりに以下のコードを置く class Oj::Encoder def initialize(options) @options = options end def encode(value) ::Oj.dump(value, @options) end end ActiveSupport::JSON::Encoding.json_encoder = Oj::Encoder …

1人でよいコードを書く

1人でよいコードを書くのは、3人でよいコードを書くことの3倍難しい。悪いコードを書くときに説得する人間が 1/3 でよいので、つまり自分に向かって『まぁいいじゃん今回は』と言えば事が済む。続けているといつの間にか引き返せないところまできていて、適…

引数

引数、変数によってオブジェクトに適切な名前を与えるのはあたりまえのことです。 class Calc def plus(x, y) x + y end end calc = Calc.new calc.plus(1, 2) この場合、 #plus の中で 1 は x 、 2 は y と名前付けがされており、それぞれ加算式の左の項と…

メソッド

思いつきの雑文 メソッドを『呼び出している』のは誰か、という疑問。これが最近僕の中で実にひっかかりを覚えるところなので。 とりあえずコード。 1) publisher.send 2) publishing.execute この2つの違いについてずっと考えている。なにが違うと言われる…

mysql.NullTime を JSON に変換出来るようにしたい

ポッポー package main import ( "github.com/go-sql-driver/mysql" ) type Pigeon struct { LastFlewAt mysql.NullTime `json:"last_flew_at"` } みたいなことしたいとき、普通に mysql drvicer 生で使ってるとこういうことは起こらないけど gorp とか使っ…

『DCI なんて面倒なだけで Service 使えばいい』への返答

DCI

NOTE: 最下部に追記があります。 よく言われる話として、 DCI なんて実装が面倒な上に夢の実装の話をしており、現実解としては Service クラスを用いて実装すればシンプルな実装になるのだから、そういったものは必要ないのだ、というご意見への返答です。 …

Go で CPU を使い切る

単に CPU 時間を使い切るだけならすぐ出来る package main import ( "runtime" "time" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) for i := runtime.NumCPU(); i > 0; i-- { go loop() } for { time.Sleep(1 * time.Second) } } func loop() { f…

speed_gun で Rails のパフォーマンスを測定する

Web アプリケーションのパフォーマンスにうるさいみなさんこんにちは。 Rails アプリのパフォーマンスプロファイリングだと、 rack-mini-profiler が有名で、それ以外だと New Relic とかを使って測定していくのが普通のようですが、物足りない部分があった…

自前 error にエラーコードなどを付与している時

自前で Error() string なメソッドを持った struct を定義した際、エラーコードなどを持たせていて、それを取り出したい。 package main import "log" type MyError struct { Message string } func (e *MyError) Error() string { return "MyError" } func …

STI と Polymorphic を同時に使うとハマる

以下の様なクラスがあるとき class Company < AR::Base has_many :employments has_many :engineers, through: :employments, source: :employee, source_type: 'Engineer' end # STI の基底クラス class Employee < AR::Base; end # STI class Engineer < E…

ファイルアップローダを作ろう

How to じゃなくて、何かの言語を学ぶ、もしくはあるパラダイムにチャレンジするとき、に僕がよく使うサンプルアプリケーションとして、ファイルアップローダというのがあり、それの仕様をまとめておこうと思い至っただけです。 ちょっと研修資料っぽい感じ…

ActiveSupport::Autoload を単体で使う

ruby 標準の autoload は後々非推奨的なアレになりそうらしいので require 'active_support/dependencies/autoload' module Mod extend ActiveSupport::Autoload autoload :Foo # => require 'mod/foo' autoload :Bar, 'bar' # => require 'bar' autoload_un…

golang を始めた時

そういやまだ新しい経験だから覚えてるし、 golang を勉強していった過程を書いておく。 正しさとかは気にせず、動くものが出来るまでがむしゃらに。 Hello, world まで 特にひねりはない。 homebrew は便利だ。 $ brew install go $ cd ~ $ mkdir -p go/src…

grape-msgpack v0.1.0

grape-msgpack という gem を作った(github / rubygems)。 最近 golang ばっかり触ってるように見えるのは幻覚で、僕はずっと Rubyist だし Ruby は最高だしオープンクラスは地獄だ。 Grape では Formatter がいくつか選べるようになっていて、大体 JSON マ…

Go Conference 2013 Autumn で Gondler の話をした

Go Conference 2013 Autumn で命短し恋せよ乙女というタイトルで Gondler の話をしてきました。 他にもたくさんおもしろい発表があって、個人的には Hatena で Go の REST サーバーを立てて運用している話とかおもしろかったです。 Golang in Production !!…

Gondler という bundler for golang を作った

2番煎じ乙。 Gondler という Bundler みたいなツールを go 向けに作りました。gom という先行実装があるのでもう作らんでもええかな感があったのですが、Ruby っぽいけど Ruby じゃない Gomfile とか、bundle exec 相当の機能がないとか、そういう理由でわざ…

channel lock

channel でブロックするようなコードが書ける。例えばスレッドの並列数を制限したいとか、そういう簡単な用途で使うのに取り回しがいい。 package main import ( "fmt" "time" ) func main() { go func() { for { fmt.Printf(".") time.Sleep(100 * time.Mil…

ノーモア・モアレ

ImageMagick で普通に画像をリサイズするとモアレがひどいことになる。 具体的には LANCZOS Filter でリサイズするとひどい。 なので Bicubic を使って、かつ線がボケないようにリサイズを行いたいときには、以下のようにする(golang w/ imagick)。 wand.Set…

golang JSON struct tag

go で JSON のパースする時は、こんな感じ package main import( "fmt" "encoding/json" ) var text = []byte(`{"Name":"sho"}`) func main() { type Config struct { Name string } config := &Config{} json.Unmarshal(text, &config) fmt.Printf("%+v\n",…

gofu is tofu clone implemented by golang

go 言語かけるようになるとメス鳩のウケが良いと聞いたので頑張って勉強しました。リリースは大安か友引の日を選ぶタイプの鳩、ロージーです。 gofu(護符) という、弊社の id:mirakui さんが作ったイケてる画像リサイズサーバー、 tofu の go 実装です(tofu …

golang s3

go 言語から S3 にアクセスする。 goamz つかえばあとは大体どうとでもなるみたい。 Mac に bzr が入ってなかったのでまず入れる。 $ brew install bzr $ echo "export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH" >> ~/.zshrc つぎは …

Rails named scope デフォルト引数

Rails の named scope にデフォルト引数を与えると便利。 class Book < AR::Base scope :published, ->(at = Time.now) { where('published_at > ?', at) } end こうしてデフォルト引数を与えておくと Book.published # => 現在公開済みの本 Book.published …

>> Operator がわからない

my @scores = 'Ana' => 3 say 1 + [max] @scores>>.key>>.chars # => 4 なにこれどういうこと……? 追記 map だ。 my @values = 'Ana', 'David' @values>>.chars # => 3 5

RubyKaigi 1 日目

ルビー会議楽しいですね。 ということで RubyKaigi はおいておいて、メソッドキャッシュの話をしましょう。笹田さんの発表の最後で出てきたやつです。僕は一人で感動に打ち震えていましたが、 IRC に書いたのは『Charlis++』とか書いててですね、ちげーよ Ch…

目黒.rb meetup #1

http://megurorb.github.io/blog/2013/05/10/meetup-16-may-2013/ 形式としては お題のプロジェクト(https://github.com/megurorb/sit-up)を clone してくる リファクタリング祭り(1時間) PR にして投げて、みんなでレビュー(レビュイーは意図の説明をする) …

プログラミングの話

この辺見て、いつも思ってること。 プログラミングはアプリを作ることの手段なのか - 銀の人のメモ帳 プログラミングはそれ自体が目的であっていい - mizchi log プログラミングを勉強したい人が勉強する前にすべきこと - もとまか日記 プログラミングは手段…

適切な名前がつかないモデル

ちょっと目についたので。Dis りたい訳じゃないです。 これ適切な名前が見つからないとき困るんだよなぁ。あとで思いついて変更なんて作業はしたくないし。割り切ってRoomUser式に統一した方が気が楽だと思う。 http://b.hatena.ne.jp/kensatou/20130512#boo…

関連モデルの命名

今日は Rails での『関連モデル』の名前について考える。 構造としてはこんな感じ。 ・ルーム(Room)に所属するユーザー(User) ・ルーム(Room)での管理者権限を持つユーザー(User) どちらの関連も N:N の関連。いわゆる has_may な感じ。 で、こういう時の命…

Github に小さい gem をおいてバッジで全能感を得る

Chanko の Github ページでバッジが並んでるのかっこええなーと思ったので適当な gem を作って真似してみようと思ってコード書いた。動機が不純すぎるので rubygems に push はしてない。 Choshi という Rails 向け Decorator gem を書きました。いわゆる Ac…

Scala の Trait

scala> class M { def m() { println("hello"); } } defined class M scala> (new M).m() hello scala> trait N { def m() { println("hi"); } } defined trait N scala> (new M with N).m() <console>:10: error: anonymous class $anon inherits conflicting member</console>…

Perl 6 の does と ^add_role の違い

@kuzuha から素敵情報が届いたので。 @rosylilly gist.github.com/kuzuha/5477051— デブ (@kuzuha) April 28, 2013 @rosylilly add_role は破壊的ではない。remove_role はない。— デブ (@kuzuha) April 28, 2013 面白い。試す。 > class c {}; (c) > role r…

Perl 6 の Role

Perl 自体に造詣もないし、 Perl 6 などましてやというぐらいなのだけれど、とりあえず僕の興味のある分野が Perl 6 にあったので rakudo をコンパイルして試してみた。 Perl 6 には Class と Role があるものらしい。 すごい単純な Person ってクラスを実装…

今日のよさげリポジトリ

Github を巡回してて見つけたよさげなリポジトリを適当にまとめることにした log console.log を Markdown 的な記法でスタイリング出来るようにする js ライブラリ。なかなかどうして面白いことをしてる。 デモもあるのでみてみるとよいと思う。僕の Chrome …

rails 4 concern 便利

Rails 4 から入る app/models/concerens を使う。 class User < AR::Base include Cryptable end を app/models/user.rb に作って module Cryptable def password BCrypt::Password.new(read_attribute(:password)) end def password=(password) write_attri…

rosylilly.age++

加齢した。 今後も頑張ります。 amazon wishlist はこちら

alias_method_chain でやりたいこととジャンプの話

class User < AR::Base def favorite!(tweet) favorite_tweets << tweet end def favorite_with_duplication_check!(tweet) if favorites_tweets.exclude?(tweet) favorite_without_dupulication_check!(tweet) end end alias_method_chain :favorite, :dupl…