メニュー

関連ページリンク

トップ > Factory Records > Factory Records - 人気ブログ(Blog)検索結果詳細 (2009年1月8日 7時)

[Ruby]郵便番号データを加工するRubyスクリプト

日本郵便のサイトでは、CSV形式の郵便番号データをダウンロードすることができます。


CSVの中身はこんなカンジ。熊本県のデータです。

43201,"862  ","8610000","クマモトケン","クマモトシ","イカニケイサイガナイバアイ","熊本県","熊本市","以下に掲載がない場合",0,0,0,0,0,0
43201,"86141","8614121","クマモトケン","クマモトシ","アイドミマチ","熊本県","熊本市","会富町",0,0,0,0,0,0
43201,"86121","8612104","クマモトケン","クマモトシ","アキツ","熊本県","熊本市","秋津",0,0,1,0,0,0
43201,"86121","8612107","クマモトケン","クマモトシ","アキツシンマチ","熊本県","熊本市","秋津新町",0,0,0,0,0,0
43201,"86121","8612105","クマモトケン","クマモトシ","アキツマチアキタ","熊本県","熊本市","秋津町秋田",0,0,0,0,0,0

郵便番号を入力すると、住所を自動入力するプログラムを作りたい場合。このままでは使いにくいですよね。そこで、CSVデータを加工します。とりあえず、こんなカンジに。

"8610000","熊本県熊本市"
"8614121","熊本県熊本市会富町"
"8612104","熊本県熊本市秋津"
"8612107","熊本県熊本市秋津新町"
"8612105","熊本県熊本市秋津町秋田"

なんのヒネリもなくスクリプトを書く。

if ARGV.size < 1
  puts "ファイルを指定してください"
  exit
end

input_file = ARGV[0]
output_file = input_file.sub(/\.csv/i, "(変換済).csv")

open(input_file, "r") { |input|
  open(output_file, "w") { |output|
    while line = input.gets
      data = line.split(/\s*,\s*/).map{|s| s.gsub('"', '')}
      yubin = data[2]
      ken = data[6]
      shi = data[7]
      banchi = data[8]
      banchi = "" if banchi == "以下に掲載がない場合"
      str = %Q{"#{yubin}","#{ken}#{shi}#{banchi}"}
      puts str
      output.puts str
    end
  }
}

最近、ゆうびんホームページにお世話になってるなあ。。

作者:shunsuk

更新日:2009年1月8日 22時12分

このブログのホーム

[Mac]MacでDVD/CDからisoファイルを作る。MacでisoをDVD/CDに焼く。

Macはisoをマウントして中のファイルを見ることができるので便利ですね。その他、isoの操作をサードパーティのソフトを使わなくても行うことができます。


まずは、DVD/CDからisoファイルを作る方法。[アプリケーション] - [ユーティリティ]の中の「ディスクユーティリティ.app」を起動します。

f:id:shunsuk:20090107213051p:image

CD/DVDをセットします。ディスクユーティリティにCD/DVDが表示されるので、選択状態にします。[ファイル] - [新規] - [(CD/DVDのタイトル)からのディスクイメージ...]を実行。ダイアログの[イメージフォーマット]で[DVD/CD マスター]を選択。cdrファイルが作成されるので、拡張子をisoに変更。これでOKです。


次に、isoの中身をDVD/CDに焼く方法。こっちはカンタン。ディスクユーティリティの左上にある[ディスクを作成]というアイコンをクリックします。isoファイルを選択して作成します。


レンタルしてきたDVDをisoに保存。マウントして再生。というのもできるハズ。たしか。。


Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

作者:shunsuk

更新日:2009年1月7日 21時38分

このブログのホーム

[Ruby]irbとscript/consoleの超便利なTips

これは便利だと思います。


Wirble: colors

irbでシンタックスハイライト。


Wirbleをインストールします。

% sudo gem install wirble

~/.irbrcに下のコードを書きます。

require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize

出力がハイライトされます。ハッシュや配列は見やすいかも。


Wirble: history

irbは、コマンドの履歴が残ります。[↑]や[↓]、[control] + [p]や[control] + [n]で履歴を見ることができます。しかし、いったんirbを終了すると、履歴がクリアされてしまいます。

Wirbleをインストールしておくと、履歴がクリアされません。再度irbを起動すると、前回の履歴を使うことができます。


Wirble: auto-completion

Wirbleは自動補完機能も提供してくれます。。

>> un_momento = "Spanish for like, 'hold the phone!'"
=> "Spanish for like, 'hold the phone!'"

ここで、"un"とタイプして、[tab]キーを押します。

>> un
un_momento   undef        unless       untaint      untrace_var  until

これは便利。


Local methods

~/.irbrcに下のコードを書きます。

# Easily print methods local to an object's class
class Object
  def local_methods
    (methods - Object.instance_methods).sort
  end
end

そうすると、local_methodsメソッドが使えるようになります。

>> class BasketballPlayer
>>   attr_accessor :name
>> 
?>   def champion?
>>     name == "Kevin Garnett"
>>   end
>> end
=> nil
>> kevin_garnett = BasketballPlayer.new
=> #<BasketballPlayer:0x11988f8>
>> kevin_garnett.name = "Kevin Garnett"
=> "Kevin Garnett"
>> kevin_garnett.champion?
=> true
>> kevin_garnett.local_methods
=> ["champion?", "name", "name="]

.irbrcって、普通にRubyのコードが書けるんですね。


Aliases

irbでは、エイリアスを設定することができます。

alias q exit

"exit"の代わりに"q"とタイプすると、irbを終了します。Vimっぽい。


Create test fixtures for a third party service

例えば、FlickerのAPIを使うクライアントを作ったとき。

FlickrClient.search("Bruce Springsteen")

テストケースが書けませんよね。

そこで、script/consoleに入って、データをyamlに変換します。それを、ファイルにダンプ。

yaml = FlickrClient.search("Bruce Springsteen").to_yaml
File.open("test/fixtures/flickr/springsteen.yml", "w") { |file| file << yaml }

test_helper.rbに下のコードを書いておきます。。

def load_yaml_fixture(path)
  absolute_path = File.join(RAILS_ROOT, "test", "fixtures", path)
  YAML::load_file absolute_path
end

呼び出し。

load_yaml_fixture("springsteen.yml")

このパターンは、サードパーティのサービスにアクセスするクライアントのテストに使えます。


Print SQL to standard out

script/consoleでデバッグする時に、メソッドが生成するSQL文を表示することができます。

~/.irbrcに下のコードを書きます。

# Log to STDOUT if in Rails
 if ENV.include?('RAILS_ENV') && !Object.const_defined?('RAILS_DEFAULT_LOGGER')
   require 'logger'
   RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
 end

こんなカンジ。

>> videos = Video.limited(3)
  Video Load (0.4ms)   SELECT * FROM `videos` LIMIT 3
=> [#<Video id: 1, ...>]

これは便利。


pp

require 'pp'

イイカンジにフォーマットしてくれます。特にArrayやActiveRecordオブジェクトのときに便利。

>> pp videos
[#<Video id: 1, youtube_id: "TcMklv40YMY", name: "Merb, Rubinius and the Engine Yard Stack", upload_time: nil, view_count: 6171, description: "Google Tech Talks\nOctober 20, 2008\n\nABSTRACT\n\nIn th...", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">,
 #<Video id: 2, youtube_id: "JySmT-dGOj0", name: "MERB SPORTS Team-Vorstellung 2008", upload_time: nil, view_count: 495, description: "MERB SPORTS stellt sich f&#252;r die VDRM-Saison 2008 v...", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">,
 #<Video id: 3, youtube_id: "6bc-FNNWIsM", name: "Merb && Moi", upload_time: nil, view_count: 58, description: "Amusing yes?", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">]


Wirble便利ですね。あと、.irbrcにRubyのコードを書けるというのが大発見。これは便利。


Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

作者:shunsuk

更新日:2009年1月6日 22時10分

このブログのホーム

[Web]Webサイトの右クリックを禁止する方法

onContextMenuをブロックするだけだと、IE7を防げなかった気がします。これだけ指定すれば、IE7もFirefoxも右クリックを禁止できるんですね。というメモ。


<body onContextMenu="return false;"
      onMouseDown="if ((event.button==2) || (event.button==3)) {alert('無駄無駄無駄無駄ァ!'); return false;}"
      onDragStart="return false;"
      onSelectStart="return false;">

個人的には、右クリック禁止には反対なんだけど。実装してくれという要望があったら仕方ないかなと思っています。気持ちが分からないでもないから。


マウスジェスチャー使ってる人は不便ですね。Windowsなら[BackSpace]や[Alt] + [←]を使うといいさ。Macなら[delete]や[command] + [←]を使うといいさ。


でも、右クリック禁止には反対。

作者:shunsuk

更新日:2009年1月5日 22時39分

このブログのホーム

[Mac][Ruby]Mac OS X Leopardでrefeの文字化けを解消する

refeは、ターミナル上でRubyのリファレンスマニュアルを読むことができるツールです。ターミナルで操作を完結できるので、かなり便利だということに気付きました。さっそく使ってみましたが、Leopardでは文字化けしてしまいます。


/Library/Ruby/Gems/1.8/gems/refe-0.8.0.3/lib/refe/searcher.rbを修正します。これは、最初から入っているrefeの場合で、MacPortsで入れた場合はパスが違います。

    def adjust_encoding( str )
      NKF.nkf('-Ew', str)

#      if shift_jis_platform?
#        NKF.nkf('-Es', str)
#      else
#        str
#      end
    end

UTF-8決め打ちです。


使ってみます。

% refe Integer to_s
Integer#to_s
--- to_s
--- to_s(base)       ruby 1.7 feature

    整数を 10 進文字列表現に変換します。

    ruby 1.7 feature: 引数を指定すれば、それを基数とした文字列表
    現に変換します。基数として 2 〜 36 以外を指定した場合は例外 
    ArgumentError が発生します。

        p 10.to_s(2)    # => "1010"
        p 10.to_s(8)    # => "12"
        p 10.to_s(16)   # => "a"
        p 35.to_s(36)   # => "z"

正確なスペルじゃなくても推測してくれるのが便利ですね。

作者:shunsuk

更新日:2009年1月4日 21時17分

このブログのホーム

[Ruby]郵便番号データを加工するRubyスクリプト

日本郵便のサイトでは、CSV形式の郵便番号データをダウンロードすることができます。


CSVの中身はこんなカンジ。熊本県のデータです。

43201,"862  ","8610000","クマモトケン","クマモトシ","イカニケイサイガナイバアイ","熊本県","熊本市","以下に掲載がない場合",0,0,0,0,0,0
43201,"86141","8614121","クマモトケン","クマモトシ","アイドミマチ","熊本県","熊本市","会富町",0,0,0,0,0,0
43201,"86121","8612104","クマモトケン","クマモトシ","アキツ","熊本県","熊本市","秋津",0,0,1,0,0,0
43201,"86121","8612107","クマモトケン","クマモトシ","アキツシンマチ","熊本県","熊本市","秋津新町",0,0,0,0,0,0
43201,"86121","8612105","クマモトケン","クマモトシ","アキツマチアキタ","熊本県","熊本市","秋津町秋田",0,0,0,0,0,0

郵便番号を入力すると、住所を自動入力するプログラムを作りたい場合。このままでは使いにくいですよね。そこで、CSVデータを加工します。とりあえず、こんなカンジに。

"8610000","熊本県熊本市"
"8614121","熊本県熊本市会富町"
"8612104","熊本県熊本市秋津"
"8612107","熊本県熊本市秋津新町"
"8612105","熊本県熊本市秋津町秋田"

なんのヒネリもなくスクリプトを書く。

if ARGV.size < 1
  puts "ファイルを指定してください"
  exit
end

input_file = ARGV[0]
output_file = input_file.sub(/\.csv/i, "(変換済).csv")

open(input_file, "r") { |input|
  open(output_file, "w") { |output|
    while line = input.gets
      data = line.split(/\s*,\s*/).map{|s| s.gsub('"', '')}
      yubin = data[2]
      ken = data[6]
      shi = data[7]
      banchi = data[8]
      banchi = "" if banchi == "以下に掲載がない場合"
      str = %Q{"#{yubin}","#{ken}#{shi}#{banchi}"}
      puts str
      output.puts str
    end
  }
}

最近、ゆうびんホームページにお世話になってるなあ。。

作者:shunsuk

更新日:2009年1月8日 13時12分

このブログのホーム

[Mac]MacでDVD/CDからisoファイルを作る。MacでisoをDVD/CDに焼く。

Macはisoをマウントして中のファイルを見ることができるので便利ですね。その他、isoの操作をサードパーティのソフトを使わなくても行うことができます。


まずは、DVD/CDからisoファイルを作る方法。[アプリケーション] - [ユーティリティ]の中の「ディスクユーティリティ.app」を起動します。

f:id:shunsuk:20090107213051p:image

CD/DVDをセットします。ディスクユーティリティにCD/DVDが表示されるので、選択状態にします。[ファイル] - [新規] - [(CD/DVDのタイトル)からのディスクイメージ...]を実行。ダイアログの[イメージフォーマット]で[DVD/CD マスター]を選択。cdrファイルが作成されるので、拡張子をisoに変更。これでOKです。


次に、isoの中身をDVD/CDに焼く方法。こっちはカンタン。ディスクユーティリティの左上にある[ディスクを作成]というアイコンをクリックします。isoファイルを選択して作成します。


レンタルしてきたDVDをisoに保存。マウントして再生。というのもできるハズ。たしか。。


Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

作者:shunsuk

更新日:2009年1月7日 12時38分

このブログのホーム

[Ruby]irbとscript/consoleの超便利なTips

これは便利だと思います。


Wirble: colors

irbでシンタックスハイライト。


Wirbleをインストールします。

% sudo gem install wirble

~/.irbrcに下のコードを書きます。

require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize

出力がハイライトされます。ハッシュや配列は見やすいかも。


Wirble: history

irbは、コマンドの履歴が残ります。[↑]や[↓]、[control] + [p]や[control] + [n]で履歴を見ることができます。しかし、いったんirbを終了すると、履歴がクリアされてしまいます。

Wirbleをインストールしておくと、履歴がクリアされません。再度irbを起動すると、前回の履歴を使うことができます。


Wirble: auto-completion

Wirbleは自動補完機能も提供してくれます。。

>> un_momento = "Spanish for like, 'hold the phone!'"
=> "Spanish for like, 'hold the phone!'"

ここで、"un"とタイプして、[tab]キーを押します。

>> un
un_momento   undef        unless       untaint      untrace_var  until

これは便利。


Local methods

~/.irbrcに下のコードを書きます。

# Easily print methods local to an object's class
class Object
  def local_methods
    (methods - Object.instance_methods).sort
  end
end

そうすると、local_methodsメソッドが使えるようになります。

>> class BasketballPlayer
>>   attr_accessor :name
>> 
?>   def champion?
>>     name == "Kevin Garnett"
>>   end
>> end
=> nil
>> kevin_garnett = BasketballPlayer.new
=> #<BasketballPlayer:0x11988f8>
>> kevin_garnett.name = "Kevin Garnett"
=> "Kevin Garnett"
>> kevin_garnett.champion?
=> true
>> kevin_garnett.local_methods
=> ["champion?", "name", "name="]

.irbrcって、普通にRubyのコードが書けるんですね。


Aliases

irbでは、エイリアスを設定することができます。

alias q exit

"exit"の代わりに"q"とタイプすると、irbを終了します。Vimっぽい。


Create test fixtures for a third party service

例えば、FlickerのAPIを使うクライアントを作ったとき。

FlickrClient.search("Bruce Springsteen")

テストケースが書けませんよね。

そこで、script/consoleに入って、データをyamlに変換します。それを、ファイルにダンプ。

yaml = FlickrClient.search("Bruce Springsteen").to_yaml
File.open("test/fixtures/flickr/springsteen.yml", "w") { |file| file << yaml }

test_helper.rbに下のコードを書いておきます。。

def load_yaml_fixture(path)
  absolute_path = File.join(RAILS_ROOT, "test", "fixtures", path)
  YAML::load_file absolute_path
end

呼び出し。

load_yaml_fixture("springsteen.yml")

このパターンは、サードパーティのサービスにアクセスするクライアントのテストに使えます。


Print SQL to standard out

script/consoleでデバッグする時に、メソッドが生成するSQL文を表示することができます。

~/.irbrcに下のコードを書きます。

# Log to STDOUT if in Rails
 if ENV.include?('RAILS_ENV') && !Object.const_defined?('RAILS_DEFAULT_LOGGER')
   require 'logger'
   RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
 end

こんなカンジ。

>> videos = Video.limited(3)
  Video Load (0.4ms)   SELECT * FROM `videos` LIMIT 3
=> [#<Video id: 1, ...>]

これは便利。


pp

require 'pp'

イイカンジにフォーマットしてくれます。特にArrayやActiveRecordオブジェクトのときに便利。

>> pp videos
[#<Video id: 1, youtube_id: "TcMklv40YMY", name: "Merb, Rubinius and the Engine Yard Stack", upload_time: nil, view_count: 6171, description: "Google Tech Talks\nOctober 20, 2008\n\nABSTRACT\n\nIn th...", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">,
 #<Video id: 2, youtube_id: "JySmT-dGOj0", name: "MERB SPORTS Team-Vorstellung 2008", upload_time: nil, view_count: 495, description: "MERB SPORTS stellt sich f&#252;r die VDRM-Saison 2008 v...", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">,
 #<Video id: 3, youtube_id: "6bc-FNNWIsM", name: "Merb && Moi", upload_time: nil, view_count: 58, description: "Amusing yes?", created_at: "2008-12-21 00:32:33", updated_at: "2008-12-21 00:32:33">]


Wirble便利ですね。あと、.irbrcにRubyのコードを書けるというのが大発見。これは便利。


Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

作者:shunsuk

更新日:2009年1月6日 13時10分

このブログのホーム

[Web]Webサイトの右クリックを禁止する方法

onContextMenuをブロックするだけだと、IE7を防げなかった気がします。これだけ指定すれば、IE7もFirefoxも右クリックを禁止できるんですね。というメモ。


<body onContextMenu="return false;"
      onMouseDown="if ((event.button==2) || (event.button==3)) {alert('無駄無駄無駄無駄ァ!'); return false;}"
      onDragStart="return false;"
      onSelectStart="return false;">

個人的には、右クリック禁止には反対なんだけど。実装してくれという要望があったら仕方ないかなと思っています。気持ちが分からないでもないから。


マウスジェスチャー使ってる人は不便ですね。Windowsなら[BackSpace]や[Alt] + [←]を使うといいさ。Macなら[delete]や[command] + [←]を使うといいさ。


でも、右クリック禁止には反対。

作者:shunsuk

更新日:2009年1月5日 13時39分

このブログのホーム

[Mac][Ruby]Mac OS X Leopardでrefeの文字化けを解消する

refeは、ターミナル上でRubyのリファレンスマニュアルを読むことができるツールです。ターミナルで操作を完結できるので、かなり便利だということに気付きました。さっそく使ってみましたが、Leopardでは文字化けしてしまいます。


/Library/Ruby/Gems/1.8/gems/refe-0.8.0.3/lib/refe/searcher.rbを修正します。これは、最初から入っているrefeの場合で、MacPortsで入れた場合はパスが違います。

    def adjust_encoding( str )
      NKF.nkf('-Ew', str)

#      if shift_jis_platform?
#        NKF.nkf('-Es', str)
#      else
#        str
#      end
    end

UTF-8決め打ちです。


使ってみます。

% refe Integer to_s
Integer#to_s
--- to_s
--- to_s(base)       ruby 1.7 feature

    整数を 10 進文字列表現に変換します。

    ruby 1.7 feature: 引数を指定すれば、それを基数とした文字列表
    現に変換します。基数として 2 〜 36 以外を指定した場合は例外 
    ArgumentError が発生します。

        p 10.to_s(2)    # => "1010"
        p 10.to_s(8)    # => "12"
        p 10.to_s(16)   # => "a"
        p 35.to_s(36)   # => "z"

正確なスペルじゃなくても推測してくれるのが便利ですね。

作者:shunsuk

更新日:2009年1月4日 12時17分

このブログのホーム