読者です 読者をやめる 読者になる 読者になる

東京Ruby会議10 #tkrk10 に行ってきました

最近のモットーは「意識とモチベーションは低く」なので、ブログ書かなくてもいいかなぁ…と思ってたのですが、せっかくなので書いてみます。 1/13(日),14(月) の二日間開催された千葉東京Ruby会議10 に行って来ました。 15分ずつ次々とプレゼンをしていく形…

Rubyのエンコーディングその2

この前「Rubyのエンコーディング」という記事を書いたのですが、それをネタに 8/25 の NSEG で発表しました。 Rubyのエンコーディング from Masahiro Tomita この中で、エンコーディングが原因で予期しないところで落ちてしまうことが結構あるという話もした…

Rubyのエンコーディング

Ruby 1.9 から文字列や正規表現オブジェクトはそれぞれエンコーディング(いわゆる文字コード)を保持するようになりました。たとえば 0xB1 0xB2 という2バイトは EUC-JP エンコーディングでは「渦」、SHIFT_JIS エンコーディングでは「アイ」という文字になり…

Ruby/MySQL 2.9.9

Ruby/MySQL 2.9.9 を作りました。 Ruby/MySQL Ruby/MySQL は Ruby から MySQL を使用するためのライブラリです。特徴: Ruby だけで書かれているためコンパイル不要 Ruby 1.9 の Encoding 対応 Ruby のスレッドでも動作 MySQL C API ライブラリ(libmysqlclien…

Ruby/MySQL

最近 Rails でプログラム作ったりしてるのですが、Ruby/MySQL が Rails で使えないことがわかったので、1年以上放置していた Ruby/MySQL をいじって使えるようにしてみました。Ruby/MySQL というのは Ruby スクリプトから MySQL を使用するためのライブラリ…

RubyKaigi2011

7/16〜18 に開催された RubyKaigi2011 に行ってきました。 Lightning Talk に応募して採択されていたのですが、色々と忙しくて*1結局開催日まで手付かずでした。3日間フルに会場にいましたが、基本的にはいつものようにサブスクリーンに投影されているIRCで…

UTF-8 のサニタイズ

UTF-8 文字列中に UTF-8 として正しくないコードが入っていた場合に、その文字を「?」などに置き換えたいことがあります。たとえば MySQL に登録するときは不正な文字を消しとかないと、その文字以降すべて消えてしまいます。 mysql> insert into t (c) valu…

MmapScanner

NSEG13で軽く紹介したのですが、MmapScannerというRubyライブラリを作ってみました。 簡単にいうと StringScanner のようなことを mmap(2) 領域に対して行えるようにしたものです。インストール方法 % gem install mmapscanner次のようにすると、ファイルを …

RSpec で autotest

自分は Ruby コードの単体テストに RSpec を使ってるんですが、プログラムコードやテストコードを更新する度にいちいち手動でテストを実行していました。 autotest というのを使えば自動でテストが実行されるという話は聞いていたので、ちょっと調べてみまし…

Ubuntu 10.10 の Ruby 1.9.1 で Rabbit 0.9.0 を動かす

Rabbit 0.9.0 がリリースされていたので使ってみようと思って、せっかくだから Ruby 1.9.1 で動かそうと試みました。いろいろやったんですが、たぶん次の手順でいけると思います。 $ sudo aptitude install ruby1.9.1 ruby1.9.1-dev libcairo2-dev libpango1…

長野ソフトウェア技術者グループ 第6回勉強会 「Ruby紹介」

長野ソフトウェア技術者グループ(NSEG)の第6回勉強会に参加してきました。 第1回(id:tmtms:20100313:1269227715)、第3回(id:tmtms:20100522:nseg3)に引き続き、Rubyネタを発表しました。今回は Ruby を知らない人に Ruby を紹介するつもりで発表しました。 …

クラスメソッドのprivate化

クラスメソッドの定義 Rubyでクラスメソッド(=クラスオブジェクトの特異メソッド)を定義するには、いくつかの方法があります。 たとえば、Hoge クラスオブジェクトに hoge() メソッドを定義する場合、 1. クラス定義内でクラスオブジェクトに特異メソッドを…

長野ソフトウェア技術者グループ 第3回勉強会 「はじめてのRuby拡張ライブラリ」

長野ソフトウェア技術者グループ(NSEG)の第3回勉強会に参加してきました。 第1回(id:tmtms:20100313:1269227715)に引き続き、Rubyネタを発表しました。はじめてのRuby拡張ライブラリView more presentations from Masahiro Tomita.動画: http://www.ustream.…

長野ソフトウェア技術者グループ 第1回勉強会

長野ソフトウェア技術者グループ(NSEG)の記念すべき第1回に参加してきました。 長野は勉強会不毛の地だと思っていたので、このような会が発足したのはうれしいことです。動画と詳細は suno88さんのブログ id:suno88:20100313:1268665755 が詳しいです。自分…

MySQL/Ruby 2.8.2

MySQL/Ruby にバグがあったので 2.8.2 をリリースしました。ダウンロードはこの辺から→ http://rubyforge.org/projects/mysql-ruby/Mysql#insert_id が 32bit を超える場合に不正な値を返すというものです。具体的には BIGINT AUTO_INCREMENT の場合に、自動…

Ruby/MySQL 2.9

Ruby から MySQL を使うための pure Ruby ライブラリ Ruby/MySQL 2.9 を公開しました。まだベータ版です。 http://github.com/tmtm/ruby-mysql/tree/2.9前の Ruby/MySQL は 0.2.6 だったのですが、今回 2.9 とした理由は: Cライブラリ版の MySQL/Ruby 2.8.x …

CGI::Session::PStore でハング

CGI::Session::PStore を使用した CGI を mod_ruby で動かしていると、極まれにハングしてしまうことがありました。strace と /proc//fd を見てみたところ、同じプロセスが同じセッションデータファイルを二重にロックしようとして止まってしまっているよう…

RD-XS37 ネットdeダビング

HDDレコーダーの RD-XS37 の DVDドライブが壊れてしまったので、HDDに溜まった番組を移すことができなくなってしまいました。 保証期間はとっくに切れてるので、修理を依頼すると2〜3万円もかかるみたいなので、そろそろ地デジ対応の装置を買わないといけな…

シフトJIS - JIS変換

ちょっと必要があって、純粋に計算だけでシフトJIS と JIS の区点コードを変換するプログラムを書いてみました。 # sjis :: [Integer] code (ex. 0x8140) def sjis2jis(sjis) c1 = sjis / 256 c2 = sjis % 256 seq = (c1<=159 ? c1-129 : c1-193)*188+(c2<=1…

Ruby/MySQL 3.0.2 alpha

Ruby/MySQL 3.0.2 です。相変わらずアルファ版です。 インストール方法: # sudo gem install tmtm-ruby-mysql --source http://gems.github.com 3.0.1 からの変更点。 Ruby 1.9 対応 これまでのでもちゃんと動くんじゃないかなぁ…と漠然と思っていたのですが…

Ruby/MySQL 3.0.1 alpha

Ruby/MySQL 3.0.1 を作りました。相変わらずアルファ版です。インストールは次のように。 # sudo gem install tmtm-ruby-mysql --source http://gems.github.com3.0.0 からの変更点 Mysql#query で勝手にプリペアドステートメントを使うのをやめました。いろ…

NKF の --cp932 オプションがおかしい

いや --cp932 の本来の動きを知らないので、おかしいというより自分の期待通りではないというべきかもしれません。文字コードの変換の際、JIS 規格じゃなくて Windows がやっているような変換をして欲しいときに、--cp932 をつけとけば良きにはからってくれ…

Ruby/MySQL 3.0.0 alpha

github に Ruby/MySQL 3.0.0 を置きました。git にも gem にも慣れてないので試行錯誤でしたが、なんとか置けたようです。github は gemspec を置いておけば自動的に gem を作ってくれるはずなのですが、罠に嵌まってもがいてました。 GitHub では *.gemspec…

ファイルの日付をExifの日付に合わせる

$ ruby -rtime -rexif -e 'ARGV.each{|f| t=Time.parse(Exif.new(f)[0x9003].gsub(/\D/,"")); File.utime(t,t,f)}' *.JPGUbuntu の nautilus がアホで、写真ファイルの日付がコピー時刻になってしまったため。

MySQL/Ruby 2.8.1

Ruby 1.9.1 がリリースされました。が、MySQL/Ruby は 1.9 に対応してませんでした。気づいてませんでした… orz。とりあえず、Ruby 1.9.1 でもコンパイルと簡単なテストを通るようにしてみたものを、MySQL/Ruby 2.8.1 としてリリースしました。ダウンロード…

メソッドの型指定

Ruby のメソッドの引数や戻り値には型指定がないけど、それを指定できるような仕組みをつくってみました。 module Strict def strict(name, &block) @returns = Object @arguments = [] block.call m = instance_method(name) ret_type, arg_type = @returns…

OptConfig その2

前回の続き。 デフォルト値 :default でオプションを指定しない時のデフォルト値を指定できます。 o = OptConfig.new o.option "port", :format=>1..65535, :default=>25 o.parse ["--port=123"] o["port"] # => 123 o.parse [] o["port"] # => 25 アンダー…

OptConfig

OptConfig は高機能なオプションパーサです。UNIX のコマンドライン引数で与えられたオプションをパースしたり、設定ファイルからパラメータを取得できます。使用例: o = OptConfig.new o.option "p", "port", :format=>1..65535, :default=>12345, :descrip…

StringValidator

StringValidator は文字列の正当性を評価するライブラリです。次のように使用します。 StringValidator.validate 規則, 文字列 規則は色んな形式で記述できます。たとえば、str が整数値であることを期待する場合は、 StringValidator.validate Integer, str…