ウェブサービスを作っています。

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

iTerm2 で Command キーを Meta キーの意味にするパッチ (SnowLeopard, iTerm2 rev404)

iTerm で Command キーを Meta キーの意味にするパッチ (SnowLeopard, iTerm 0.10) - milk1000cc これの iTerm2 版です。今回は Command と Alt を入れ替えるので、Alt + v でペーストできます。 インストール $ curl https://gist.github.com/raw/737855/it…

Rails2 と Rails3 で after_filter の実行順序が逆になっている

class FiltersController < ApplicationController before_filter { |c| c.logger.info 'before_A' } before_filter { |c| c.logger.info 'before_B' } before_filter { |c| c.logger.info 'before_C' } after_filter { |c| c.logger.info 'after_A' } after…

MobileAdsense プラグインをリリース

携帯向け AdSense を簡単に設定できる Rails プラグイン MobileAdsense を作りました。 milk1000cc/mobile_adsense · GitHub このプラグインをインストールして、ビューで <%= mobile_adsense :client => 'pub-1234567890' %> のように書くだけで、携帯向け…

CRLF と LF が混ざった CSV ファイルを FasterCSV でパースすると FasterCSV::MalformedCSVError が発生する

FasterCSV.parse %!"123","4\n56"\r\n! # => FasterCSV::MalformedCSVError: FasterCSV::MalformedCSVError 改行コードを統一すれば OK FasterCSV.parse %!"123","4\n56"\r\n!.gsub(/\r\n?/, "\n") # => [["123", "4\n56"]]

Capistrano のレシピを Ruby から実行する

たとえば $ cap delayed_job:restart を ruby で実行する場合は、 require 'capistrano/cli' Capistrano::CLI.parse(['delayed_job:restart']).execute! でできました。 Capistrano のソース (capistrano-2.5.19/lib/capistrano/cli/execute.rb 14 行目あた…

Heroku だと request.ip で IP アドレスの取得ができない

Heroku というか Amazon EBS の問題のようですが、 get '/' do "IP: #{ request.ip }" end のような簡単なアプリを Heroku にアップして実行すると IP: 10.x.x.x のような結果が返ってきてしまいます。 環境変数 HTTP_X_REAL_IP を参照すれば、正しい IP ア…

特定の深いディレクトリだけ gitignore の対象にしない

git

public 以下は基本無視 public/images/common 以下は無視しない を RAILS_ROOT/.gitignore で実現する方法で悩みました。もう少しスマートな方法があったら教えて欲しいです。 駄目な例 public/* !public/images/common 動く例 public/* !public/images publ…

nginx + Unicorn を試してみた

追記(2012/02/21 09:39): nginx 設定ファイルの例に、X-Frame-Options, X-Content-Type-Options に関する設定を加筆しました。 追記(2011/10/17 19:18): Rails 3.1 用に、nginx 設定ファイルの例を加筆・修正しました。 追記(2010/09/25 12:07): 現在はさく…

Rails 2.3.8 で DateHelperJa プラグインと RailsXss プラグインの共存

Rails 2.3.8 で DateHelperJa プラグインと RailsXss プラグインを使ったところ、日付選択セレクトボックスの option タグがエスケープされてしまう問題が発生しました。 DateHelperJa プラグインの lib/date_helper_ja.rb 110 行目 (build_select_witp_jp_t…

Pacecar が便利

Pacecar とは 便利な named_scope のモジュール集です。 Paperclip, Shoulda, Factory Girl, Clearance など、素晴らしいライブラリを多数開発されている thoughtbot 製。 class SomeModel < ActiveRecord::Base include Pacecar end だけで、『表示可能で投…

クーポン情報をまとめて表示する「PONPON」というサービスを作りました

グルーポン系サービスの情報をまとめて表示する「PONPON」というサービスを作りました。 PONPON すでに同様のサービスがありますが、 残り枚数や取引成立までの残り枚数も表示 売り切れていないクーポンのみ表示 できるだけ最新、正確な情報を表示 RSS だけ…

Heroku で Sass を使う

Sass は public/stylesheets に css ファイルが生成され、それが呼び出されるために、Heroku のような read-only ファイルシステムでは public/stylesheets に css ファイルを作成する際、例外が発生してしまいます。 これを解消する Hassle という便利なラ…

jQuery Countdown で残り 1 時間未満のときに「あと 0 時間」と表示しない

カウントダウン機能を提供する jQuery Countdown プラグインで あと 0 時間 30 分 20 秒ではなく あと 30 分 20 秒のように表示する方法です。 $('#foo').countdown({ until: (終了時刻の Date オブジェクト), layout: 'あと {d<}{dn} 日 と {d>}{h<}{hn} 時…

rake タスクで発生した例外を Exceptional に通知する

Exceptional.rescue_and_reraise で囲えば OK。 desc 'foo' task :bar => :environment do Exceptional.rescue_and_reraise { ... } end 開発環境では捕捉されて欲しくないので、Exceptional.rescue ではなく Exceptional.rescue_and_reraise を使っています…

ActiveSupport の ClassInheritableAttributes に関して

以下、Ruby 1.8 での話です。 ActiveSupport の機能で ClassInheritableAttributes というものがあります。 これは、継承するクラス変数のようなものです。 クラス変数の問題点 クラス変数は、親クラスに同名のものが存在する場合、子クラスでの変更が親クラ…

「はてブシャッフル」というサービスを作りました

ユーザのはてなブックマークをシャッフルして表示する「はてブシャッフル」というサービスを作りました。 はてブシャッフル はてなブックマークは大変便利で素晴らしいサービスなのですが、ブックマークしたこと自体を忘れてしまうことがあり、もったいない…

物理行移動を可能にする physical-line.el を導入

今まで emacs の物理行移動には ce-scroll.el を使っていたのですが、マルチカラム文字でどうもうまく動いていないようなので physical-mode.el に切り替えました。 physical-line.el Meadow/Emacs memo: カーソルとカーソル移動関連 設定は以下の通り。 (re…

role_requirement を導入すると render_optional_error_file がオーバーライドされてしまう

ステータスコード 404 や 500 でも「You don't have access here.」とか出てしまうので、Rails.root/lib/role_requirement_system.rb を修正。 render_optional_error_file オーバーライド部分をコメントアウト # def render_optional_error_file(status) # …

似たようなレイアウトを DRY に記述する

A と B というレイアウトがあって、どちらもほとんど同じレイアウトだけれども、微妙にいろんな箇所が違うという場合にどうするか考えてみました。 まず、骨格となる app/views/layouts/base.html.erb というファイルを作ります。ここには、A・B の共通部分…

role_requirement で、一部のコントローラだけ権限を不要とする

restful_authentication プラグインに権限管理機能を追加する role_requirement というプラグインがあります。 rolerequirement - Clean role-based security for restful_authentication (or acts_as_authenticated) - Google Project Hosting Ruby on Rail…

Nested Attributes の _delete カラムが非推奨になっている

Nested Attributes でデータを削除するためには _delete カラムを使うべきだった気がするのですが、いつの間にか非推奨になっていました。 以下のメッセージが、ログに吐かれます (Rails 2.3.5)。 DEPRECATION WARNING: _delete is deprecated in nested att…

HTTPClient の HTTP::Message::escape_query がちょっと便利かもしれない

require 'rubygems' require 'httpclient' HTTP::Message.escape_query(:a => 'あ', :b => 'foo') # => "b=foo&a=%E3%81%82"

EventMachine によるクローラ実装例

グローバルな並列リクエスト数と、ホスト毎の並列リクエスト数を考慮した試作版です。 もう少し改善出来そうな気がします。 require 'rubygems' require 'em-http' require 'addressable/uri' PARALLEL_REQUEST_NUM = 50 PARALLEL_REQUEST_PER_HOST = 2 uris…

mac で radiko を録音して mp3 に変換する

snow leopard で試しました。既出ですが、とりあえず確実だった方法を記しておきます。 % svn co svn://svn.mplayerhq.hu/rtmpdump/trunk rtmpdump % cd rtmpdump % make posix % ./rtmpdump -vr rtmp://radiko.smartstream.ne.jp/TBS/_defInst_/simul-strea…

LDR+SBM Counter v0.0.4 リリース

デフォルト非表示にできるようにしました。 10 行目の var ALWAYS_SHOW = true; を false に変えると、ページ読み込み時にはカウンタを表示せず、z キー (変数 TOGGLE_KEY の値) を押すことで表示されます。 ダウンロード LDR+SBM Counter for Greasemonkey …

Rails Metal サンプル

params でパラメータ取れるようにしてます。 app/metal/some_metal.rb # Allow the metal piece to run in isolation require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails) class SomeMetal class << self def call(env) …

Sinatra でとりあえず logging

require 'rubygems' require 'sinatra' log = File.new(File.expand_path("log/#{ Sinatra::Application.environment }.log", File.dirname(__FILE__)), 'a') STDOUT.reopen(log) STDERR.reopen(log) ..(main code).. もっといい方法がありそうな...

AIRradiko というアプリを作りました

作っていたら同じようなアプリを作られた方が出てきて、公開しようか迷ったのですがとりあえず公開してみます。 radiko.jp を聴くための AIR アプリです。エラーが発生したときのために、時刻欄の横にリロードボタンをつけてあります。 ダウンロード ※ AIR …

userscripts.org に登録しました

2 つのスクリプトを userscripts.org に登録しました。バージョンアップはしていません。 とりあえずお知らせです。 LDR + SBM Counter GreaseKit でも使える、LDR カウンタ・SBM カウンタ的なグリモン。 LDR+SBM Counter for Greasemonkey LDR Hatebu Comme…

さくらのレンタルサーバ + 独自ネームサーバ

独自ドメインでさくらのレンタルサーバを使いたい、ネームサーバはさくらのものを使いたくない、みたいなとき。 こんな感じでいいのでしょうか。 ; A Records @ 3600 IN A (さくら IP) ; CNAME Records mail 3600 IN CNAME @ www 3600 IN CNAME @ ; MX Recor…