Ruby

ActiveRecord の dup の挙動

ひとことで言うと、 ActiveRecord には dirtry な attribute を追跡するための便利なメソッド群が定義されていますが、dup とともにこれらを扱うときには要注意ですよ、というお話です。 _was とか _changed? は便利 dirty な attribute を追跡するってのは…

開発環境でのみ、リクエスト毎になんか処理をフックしたい in Ruby

RackMiddleware を使うのが筋が良い気がする。 middleware 用意する # lib/rack/nyan.rb module Rack class Nyan def initialize(app) @app = app end def run(env) run_hook @app.call(env) end private def run_hook # なんかする end end end config.ru …

Rails で content-type が application/json などの場合、MethodOverrideが効かない件

背景 Rails には MethodOverride の仕組みがあって、これはなにかっていうと、HTTP method が POST の場合でも _method=PUT とかそういうパラメーターを付けてリクエストしてあげると Rails のレイヤーではそのリクエストを PUT として扱ってくれるやつです…

Rubyにおける「環境」の話

環境というのはスコープと言い換えてもいいけど、ようするに「今実行している行から何が見えて何が触れるのか」という話。一度自分の頭の整理のためにきちんとまとめておきたいと思っていたので昼休みを利用してまとめる。 基本 環境変数 ENVっていうハッシ…

例外あがってきたときに回数制限つきで retry するのどうやったらきれいに書けるの問題 in ruby

1年くらい前(?)にわたしのTLで話題になったやつに1年越しでいい案が生まれたので、こういうのはどうかという記事を書く。 id:kksg 向けのエントリである。 class MyError < StandardError; end def maybe_fail(max_retry = 1) raise MyError, 'error' unl…

rack-session-php というニッチなモジュールできたよ〜

何をする gem なのか Rack から PHP のセッションファイルを読み書きする gem であります。既存の gem にも似たような乃があるのですが、デシリアライズをまじめにやってなかったり、マルチバイト食わせると死んだり、read-only だったりしたので自分で書き…

php_session という gem を書いた

何をする gem なのか RubyからPHPのセッションファイルをいじりたいみたいなこと、あんまりないと思う。 でも、PHP で動いてる大きめのアプリケーションを Ruby に載せ変えたいね〜みたいなことはある気がする。一気に作っちゃってもいいんだけど、ちょっと…

レールルで Controller から ActiveRecord を生で触るのをやめたい話

単純な操作ならいいんだけど、複数テーブルに対してごにょっと操作をして、それがアトミックでなくてはならなくて、みたいなときの話。 単純な複数テーブルに対する操作なら多分主従の関係みたいなのあると思うしそういうときには主のほうを表すARを継承した…

Ruby の練習問題書いてるけど問題作るのってむずかしい

Ruby の練習問題を作ろうとしてるんだけど、問題を作るのってめちゃめちゃむずかしい。 今はとりあえず課題ひとつだけつくって、それは単方向リストを実装しろっていう課題なんだけど、これが「どのくらいの難易度なのか」ということがまずわからない。あと…

Ruby で Scala の Option っぽいやつを実装してみた話

こんな感じで実装できた。Option (Haskell で言うところの Maybe)はモナドの中でもかなりわかりやすく実装しやすい。foreach とか filter は実装してない。 ただ、これだけがあっても、map や flatmap とか foreach とかを組み合わせたときに読みやすい感じ…

Ruby の C Extension を作ったのでどういうことをやったかまとめた

waveずたずたのための ruby の C Extension 書いたんだけど、どうやって書いたのかまとめると有益っぽいのでまとめた。 ビルドするためにどうすんの Cだから当然コンパイルしないと動かない。普通は make でビルドしたいと思うんだけど、そのための仕組みと…

WaveずたずたがいろんなOSに対応した(と思う)

けっこう評判がよくてうれしい WZZ ですが、不自由で邪悪な mac OS でしかリアルタイムプレイが動かないのがちょっと残念でした。そんな折、 「そうだ、OpenAL使えばいろんなプラットフォームで動くんじゃね?」思い立った わたしの TL がなぜか空前のC Exte…

waveずたずたが激ヤバになった

まずはこれを見てくれ waveずたずたシーケンサー そうです。waveずたずたがリアルタイム演奏に対応しました。 waveずたずたってなんだよ WaveZutaZutaというおもちゃを書いている話 を参照してください。 中身 @nagachika さんが書いた、 ruby から coreaudi…

jsonpatcher gem をリリースしました

なにであってなにでないのか semantically wrong な JSON を semantically right に書き換えるためのDSLを提供する gem です。syntactically wrong な JSON を syntactically right に書き換えるものではありません。 なぜこんなニッチなものを twitter とか…

Array#bsearchについて

書いた

CRuby の hash.c を一部読んだ

ツイッターで「Ruby の Hash のキーにするオブジェクトに hash と eql? を定義しないといけないのなんでなんだろう」という話題が出て、「おそらく Hash の名前の通り、Hash テーブルを lookup するのにキーの hash 値を計算するのに使ってるんだろうね」と…

アニメーションgifを殺して静止画にしたらかっこよかったはなし

アニメーション gif って一枚一枚の画像を高速で切り替えてアニメにしてるわけだけど、じゃあ、何枚も画像を切り替えるんじゃなくて、一枚の画像の中で上から順に表示させたらかっこいいんじゃないかなーって思って(伝われ)やってみたら案の定かっこよかっ…

SimpleObjectContainer という gem をリリースした

リリースしたよ 業務で Object::Container という CPAN モジュールに似た動きをする gem が欲しいなーと思ったので作ってリリースしました。まだ機能限定版です。 https://rubygems.org/gems/simple-object-container ドキュメントっぽいのは github の READ…

Perl とか Ruby だと型が指定できなくて辛いときがある話

Perl も Ruby も、メソッドの定義読んだときに引数と返り値の型がわからないのけっこう辛い感じする、実行時チェックで問題ないならば Perl だと Smart::Args とかがあるし Moose 系のやつで型をある程度強制すればちょっとマシになる感じするけど Ruby だと…

Gatchamanっていうgemつくった

これ を読んで、でも毎回base64コマンド叩くのも面倒だよねーって思って、<img src="hoge.png">みたいなのを食わせると <img src="data:image/png:base64,*****"> に展開してくれるだけのやつ作りました 複数のリソースを一枚のhtmlにガッチャーンってしてくれるのでGatchamanです、gemのキラキラネーム感。 俺得でしかな…

WaveZutaZutaというおもちゃを書いている話

音楽をずたずたに切り刻んで再構築するような種類のテクノやハウスが世の中には存在しますが、そんな雰囲気でwaveファイルをずたずたにして再構築するためのライブラリやコマンドを書いて遊んでいます。 α版クオリティで不安定でまだドキュメントもないです…

ActiveRecord の named_scope に by_<column_name>みたいな名前つける人間は腹を切って死ぬべき……だよね?

最近仕事で ActiveRecord ばかり触ってるのでその話題 ActiveRecoedには named_scope という便利な機能があって、これはまあ動的にクエリを組み立てるのに便利で良いよねって話がまあよくありますね。その話をします 最初に、Railsの嫌なところの愚痴 クエリ…

Rubyのモジュールの特異メソッド定義する方法いろいろ

モジュールに特異メソッドを定義する方法はいろいろあるけど、それぞれ違いがあるのでまとめた。 普通にメソッドとして定義しておいて、あとから extend self するというちょっとトリッキーなやりかた。 mitukiii のひとが使ってるの見て知った module_funct…

最近unicornのことばかり考えていて夜も眠れない

タイトルは言い過ぎ。unicornのデザインまわりについて書いておく unicornは普通のpreforkサーバ unicornの哲学は「Keep It Simple, Stupid」な感じで、非常に良い。ひとつのプロセスで同時にさばけるリクエストの数はひとつに限定されていて、とっても見通…

unicornにどんなシグナル送るとどうなるのかまとめました

File: SIGNALS [Unicorn: Rack HTTP server for fast clients and Unix] の一部を超訳しただけ

新潟のRubyistたちとお酒を飲んできたよ

新潟の Rubyist が集まるイベント : ATNDこれに行ってきました。初Ruby! みたいなひとが結構いるんだな〜と思ってたけどなんだかんだで結構Rubyネタの話ができてとてもよかったです。私が印象に残ったのは以下のあたり 型について Rubyは強い型付け && 動的…

任意のサイトの更新をチェックして通知するスクリプト書いた

hihumiyo.netという小沢健二のサイトがfeedを吐いていないので毎回手動で更新を見に行かないと行けない。それはそれで「更新あったかな?」というわくわくがあって楽しいんだけど、更新や告知を見逃したりして悔しい思いしたりというのがあるので、自分のた…

やったー意識を高めるワンライナーできたよー

$ ruby -r curses -e 'include Curses;cbreak;stdscr.maxy.downto(1){|y|clear;setpos(y-1,0);addstr("意識");refresh;sleep(0.1)}' 実行すると意識が高まる仕組みです