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

全角空白も含めた strip

" 全 半 \n 混 在 ".gsub(/(\A(\s|\u3000)+)|((\s|\u3000)+\Z)/, '') # => "全 半 \n 混 在" 参考 Ruby【全角空白も除去】できるstrip!()ありますか? s = " 全.. - 人力検索はてな 解答例だと、途中に改行が含まれている場合の挙動が意図したものと違う

ActiveDecorator で、強制的にヘルパーのメソッドを呼び出す

ActiveDecorator (v0.1.0) では、モデルのメソッド名とヘルパーのメソッド名が衝突した場合、モデルのメソッドが呼ばれるようです。 強制的にヘルパーのメソッドを呼び出したいときは、以下のようにすれば可能でした。 module HogeDecorator def my_truncate…

特定のプラットフォームに依存した gem を bundler で管理する

Rails, Capistrano も使ってる前提です。 まず Gemfile に、プラットフォーム別のグループを作ります。 darwin, linux というグループ名でなくてもいいですが、後述のことを考えるとこれが無難です。 group :darwin do gem 'mac 用 gem' end group :linux do…

RSpec 使用時 rails g model で、Factory Girl のファイルも作成する

rails (3.1.1)、rspec-rails (2.7.0)、factory_girl_rails (1.3.0) という環境です。 config/application.rb の config.generators に設定を書くだけです。 module Hoge class Application < Rails::Application ... config.generators do |g| g.fixture_rep…

Rails 3.1 バージョンアップメモ

自社サービスを Rails 3.1.1 にバージョンアップさせたので、メモです。 Asset Pipeline を使用する前提です。 参考にさせていただいた記事 だいたい以下を熟読したら何とかなりました。ありがとうございます。 Ruby on Rails Guides: Ruby on Rails 3.1 Rel…

rvm をやめて rbenv + ruby-build を導入

追記(2011/10/06 16:00): Homebrew で readline をインストールする記述が抜けていたので、追加しました。 また、一部記述ミスも修正しました。申し訳ありません。 rvm の調子がなんか悪いので、シンプルで、37signals 中の人が作ったという rbenv + ruby-bu…

Xperia neo を購入

今まで iPhone を使っていたのですが、興味があって Android 携帯を購入しました。 いろいろ考えた結果、SIM ロックフリーの Xperia neo (赤) という機種を購入しました。 購入 1shopmobile というお店で買いました。 http://www.1shopmobile.com/catalog.ph…

Qt をアンインストールする

mac

Mac でインストーラを使ってインストールした場合、以下のスクリプトでアンインストールすることができます。 % sudo /Developer/Tools/uninstall-qt.py 参考 http://forums.macrumors.com/showthread.php?t=587092

OmniAuth で callback 後セッションが消える問題

おそらく csrf_token なしで戻ってくるからです。 なので、たとえば、callback 後のメソッドが SessionsController#create なら、 class SessionsController < ApplicationController protect_from_forgery :except => :create ... end のようにします。 参…

OmniAuth で /auth/failure?message=invalid_response にリダイレクトされたけど単なる typo だった

config/routes.rb Hoge::Application.routes.draw do ... match '/auth/:provider/callback' => 'sessions#create' match '/auth/failure' => 'sessions#failure' ... end app/controllers/sessions_controller.rb class SessionsController < ApplicationCo…

「スペースシャワーTV プラス」のオンエア曲をお知らせする Twitter BOT を作りました

最近、スカパーで「スペースシャワーTV プラス」を契約しました。 一日中音楽 PV が流れています。家で作業することが多くなったので、BGM 代わりに良いです。(月630円) ただ、今流れている曲を確認するために、テレビを見ないといけないのは結構面倒です。 …

Chrome 拡張版 LDR Hatebu Comments を作りました

livedoor Reader に、はてなブックマークのコメントを表示する LDR Hatebu Comments というグリモンを以前作りました。 そして今回、それの Google Chrome 拡張版を作りました。 Chrome Web Store - LDR Hatebu Comments Chrome でも "L" キーをペチっとする…

prefetch-rspec + watchr

使ってみました。Rails3 用のようです。 spork を使っていた場合は、spec/spec_helper.rb の spork 関連処理を削除しておきます。 また .rspec に --drb オプションが書いてあると、prefetch-rspec がうまく動かないようです。 まずは Gemfile に prefetch-r…

MySQL の文字列で表記揺れを吸収しない

MySQL で、データベース・テーブル・カラムなどに collate = utf8_unicode_ci を指定すると、大文字・小文字・全角・半角・ひらがな・カタカナなどの表記揺れが吸収されます。 たとえば、「たろう」と「タロウ」の検索結果が同じになります。 参考: mysqlのc…

独立しました

3月31日で前職を退職し、4月1日から独立して働くことになりました。 また、株式会社ユーザーファーストという法人を設立しました。 会社を作った理由はいろいろありますが、会社作るの面白そう、と思ったことが一番の理由でしょうか。 この本の影響を受けた…

Delayed::Job のリトライ速度を調整する

Delayed::Job では、例外が発生した場合、 5 秒 + リトライ回数 ** 4秒経過した後にリトライしてくれますが、これを変更する方法です。 Delayed::Job のバージョンは、2.1.4 です。 やり方は簡単で、ジョブのクラスに、リトライ時刻を返す reschedule_at メ…

Mechanize で送信したデータが反映されないときがある

あけましておめでとうございます。Mechanize 1.0.0 のお話です。 example.com?xx=yy のようにパラメータのついた URL のページから、action 属性が空のフォーム <form action=""> を送信すると、パラメータ無しの URL (example.com) に送信されてしまいます。 agent = Mechan</form>…

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…

mysqldump で文字化けを防ぐ

さくらのレンタルサーバなどで mysqldump をふつうに実行すると文字化けする場合があります。 これを防ぐためには --default-character-set=binary オプションをつけます。 % mysqldump --default-character-set=binary -u oreore -p hoge > hoge.sql

CakePHP 用 Exception Notifier ご使用中の方は、早急にバージョンアップしてください

1/20 に更新したバージョンは、コンポーネント内にバグがあるため、動作しなくなっていました。 (アプリケーション内でエラーが発生してもメール通知されません) 早急に最新版に更新してください。 milk1000cc/cakephp_exception_notifier · GitHub 今後この…

isUnique がバグっている件

1 リクエスト中に複数レコード保存していて cacheQueries を使っていると、validation の isUnique ルールが効かないことがあります。 テーブル定義 CREATE TABLE users (name VARCHAR(255)); app/models/user.php array('rule' => 'isUnique')); } app/con…