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

ruby

ランダムな英数文字列の生成

require 'openssl' [OpenSSL::Random.random_bytes(8)].pack('m').gsub(%r![+/=]!) { rand(10) }.strip

Authlogic を使ったときの RSpec ヘルパー

以下を参考に Clearance 風 (?) に書けるようにしました。 AuthLogic is awesome! - Adventures with Ruby authlogic_helper.rb などとして require すれば、以下のように書けます。 describe HogesController do public_context do describe 'GET index' do…

WebService::Simple の Ruby 版を作りました

ゆーすけべーさんが Perl で作られた WebService::Simple の Ruby 版を作りました。 milk1000cc/web_service_simple · GitHub オリジナルは、こちら。 POX over HTTP のウェブAPIにアクセスするためのモジュール「WebService::Simple」を作ってみた - ゆーす…

トラックバック先の AutoDiscovery

RDF に基づいて、渡されたパーマリンクに対するトラックバック Ping URL を自動検出します。 参考: トラックバック技術仕様書 トラックバック関連の gem ってないんですかね。 Timeout::Error も捕捉しています。 require 'net/http' require 'uri' Net::HTT…

Ubuntu に sqlite3-ruby gem を入れる

sudo aptitude install libsqlite3-dev sudo gem install sqlite3-ruby

Merb をインストール

そろそろ Merb をいじってみようということで、眠いのでインストールと最初の一歩だけやってみました。 こちらを参考に。 $ sudo gem install merb $ sudo gem install merb --development どっちかだけでよかったはず。大量に入ります。 development だと c…

ブログに貼られている Dailymotion 動画の mp4 を簡単にダウンロードするスクリプト

見あたらなかったので、作りました。 Dailymotion 動画が貼られているブログのパーマリンクを渡すと、 javascript:document.write('%3Ca%20href=%22http://www.dailymotion.com/...のような結果が出力されます。 これをコピーして、ブラウザのロケーションバ…

FasterCSV でヘッダを考慮

あけましておめでとうございます。 csv ファイルでは、しばしば 1 行目をカラム説明行として使う場合があります。 FasterCSV では、これを考慮して出力することができるんですね。 require 'rubygems' require 'fastercsv' data = [ { 'ID' => 1, 'name' => …

highline を使いましょう

シェル上でパスワードを入力させたいときなど、エコーバックさせたくない場面があります。 このようなときは、 print 'Username: ' username = $stdin.readline.chomp print 'Password: ' system 'stty -echo > /dev/null 2>&1' password = $stdin.readline.…

Hpricot と Nokogiri の XPath 出力メソッド

Hpricot('<html><body><div>aaa</div></body></html>').at('//div').xpath => "/html/body/div" Nokogiri('<html><body><div>aaa</div></body></html>').at('//div').xpath => Nokogiri('<html><body><div>aaa</div></body></html>').at('//div').path => "/html/body/div" Nokogiri::XML::Node#xpath は、Hpricot::Elem#sear…

Passenger (mod_rails) で、特定のホストからのアクセスを禁止する方法

httpd.conf などに書いて、Apache をリロードします。 <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/html/example/public <Location /> Order Allow,Deny Allow from All Deny from (アクセス禁止 IP) </Location> </VirtualHost>Location の代わりに、Directory ディレクティブを使うと pu…

Brandnew-J で放送中の曲を Growl で通知するスクリプト

最近は、VMWare Fusion で XP を常時起動させて、Brandnew-J をよく聴いています。 で、現在放送中の曲が growl でわかったら便利かなー、とか思って書いたけど、あんまり便利ではありませんでした。 #!/usr/bin/env ruby require 'json_parser' # http://we…

TinyCss を github に置いて gem にしました

先日のエントリで公開した TinyCss をいろいろいじって、github で gem にしました。 milk1000cc/tiny_css · GitHub sudo gem install milk1000cc-tiny_css --source=http://gems.github.com でインストールできます。インターフェースは変わってないですが…

dup

class Foo attr_accessor :ary def initialize self.ary = [] end end before = Foo.new before.ary = [1, 2, 3] dup = before.dup dup_ary_copy = dup.ary dup_ary_copy.reverse! p before.ary #=> [3, 2, 1] dup したところで、複製されたオブジェクトのイ…

TinyCss クラス

CSS::Tiny を参考にして、Ruby で CSS を処理する TinyCss クラスを作りました。 css = TinyCss.new.read('style.css') css.style['a']['background'] = 'black' css.write 'new_style.css' みたいに使えます。詳しくはソースを見てください。 class TinyCss…

MatchData#captures とかはじめて知った

すっかり 7 月ですね。 さて、正規表現のマッチ部分が $1, $2 とかに入るのは知っていたのですが、これだと最後のマッチ結果しか入らないし、たまに美しくない場合がありますね。 で、Rails のソースを読んでいたら、MatchData#captures なるものを発見しま…

and/or 演算子の優先順位は三項演算子より低い

a and b == c ? d : e は、 a and (b == c ? d : e) と等価なんですね。 (a and b == c) ? d : e と等価にしたかったら、 a && b == c ? d : e ってしないとなんですね。 覚えたこと and/or 演算子の優先順位は三項演算子より低くて、&&/|| 演算子の優先順位…

send

メソッド名を動的に変更したいときがあります。 PHP なら $a->$foo ってやればできるんですけど、これを Ruby でやりたかったんです。 で、Object クラスの send っていうメソッドを使えばできました。 a.send foo foo に、メソッド名を文字列かシンボルで指…

全角単位で文字数を取得する

以前は PHP で書きましたが、今回は Ruby で書きました。 Ruby 初心者だから、超恥ずかしいコードなのかも>< とりあえず晒します。 class String def zen_length(kcode = 'u') require 'jcode' tmp = $KCODE $KCODE = kcode cnt = 0.0 self.each_char { |c…

参照渡し

hoge = fuge = {} みたいに初期化したら、異常な挙動を示して小一時間悩んだ。 hoge と fuge は同じものになるからかー。 hoge, fuge = {}, {} こうしないといけないんだな。

今日使える金額を計算するスクリプト

初めて Ruby でスクリプト書いてみました。 使い方とかは、ソースを読んで想像してみてください。 require 'date' income = 100000 # 今月の収入から、予定出費を引いた金額 def total_cost return 0 unless File.exists?(@filename) total_cost = 0 open @f…

ハマる

Rails はじめました。 手始めに、チュートリアルをやってみたのですが、データベース関連のコードを書いたところでエラーが発生。 エラーメッセージも、ActiveRecord::StatementInvalid とか意味不明。 で、1 時間以上悩んで解決。 原因は、database.yml を…