image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2007年5月1日 | トップページ | 2007年5月5日 »

2007年5月3日

2007-05-03

sqlite3 に郵便番号を読み込んだ

apache derby での郵便番号処理はデータサイズ的に無理があったので、
sqlite3 に読み込んだ。(sqlite3 は darwinport でインストール)

参考にしたのは
- http://www.tuyudaku.net/sqlite/import.html
> > SQLite - CSVファイルのインポート

- http://d.hatena.ne.jp/rudeboyjet/searchdiary?word=*%5Bruby%5D
> > よしだメモ:ダミーの住所データを作るスクリプト

これとは別に、郵便番号検索 できる XML-RPC サービスも見つけた。
- http://rubyist.g.hatena.ne.jp/garyo/20061129/1164780228
> > Rubyist - ピジョン・ブラッド - XML-RPCメソッド一覧 - 郵便専門ネット

# See - http://yubin.senmon.net/service/xmlrpc/introspect.php
#     - http://rubyist.g.hatena.ne.jp/garyo/20061129/1164780228
require 'xmlrpc/client'
require "kconv"

client = XMLRPC::Client.new2('http://yubin.senmon.net/service/xmlrpc/')

result = client.call("yubin.fetchAddressByPostcode", '1000001')
result[0].each do |key,value|
  puts "#{key} #{Kconv.tosjis(value.to_s)}"
end

puts "==============="
result = client.call("yubin.getMaxFetchCount")
puts result

puts "==============="
result = client.call("yubin.fetchAddressByPostcode", '692%')
result.each do |r|
  puts "----------------"
  r.each do |key,value|
    puts "#{key} #{Kconv.tosjis(value.to_s)}"
  end
end

# town_kana ちよだ
# city_kana ちよだく
# city 千代田区
# jiscode 13101
# postcode 1000001
# addr_name_kana
# data_type p
# pref_kana とうきょうと
# addr_name
# town 千代田
# pref 東京都
# other
# yid 36495
# ===============
# 100
# ===============
# 以下省略 ...

これで xfy で 郵便番号を扱う例を sqllite や web-service で作る準備が出来た。
(忘れてた! ruby, jruby から sqlite を呼び出す方法を取得しないと...)

xfy meets yaml

xfy から ruby スクリプトを実行して文字列を得られるようにしただけでも、
いろいろ可能性が広がった気がする。
(xvcd や java でロジックを書くのは ryby に比べると格段に面倒だ)

簡単なウイザードの例があった。
- http://www.mnet.ne.jp/~tnomura/note.html
> > note: 簡単 Q&A 作成プログラム note.rb

これは、ウイザードの画面内容と画面遷移関係を yaml で定義している。
このアイデアを使うと、xfy でも ウィザードを簡単に作れそうな気がする。

yaml については次から始まる一連の記事が参考になる。
- http://jp.rubyist.net/magazine/?0009-YAML
> > Rubyist Magazine - プログラマーのための YAML 入門 (初級編)

サンプル例をいくつか実行してみた。

# See http://jp.rubyist.net/magazine/?0009-YAML

require 'yaml'
require 'pp'

str  =<<EOS
- aaa
- bbb
- ccc
EOS

data = YAML.load(str)
pp data
# ["aaa", "bbb", "ccc"]

#----------------------
str =<<EOS
A: aaa
B:
  B1: bbb1
  B2: bbb2
C: ccc
EOS

data = YAML.load(str)
pp data
# {"A"=>"aaa", "B"=>{"B1"=>"bbb1", "B2"=>"bbb2"}, "C"=>"ccc"}

#----------------------
str =<<EOS
[aaa, bbb, ccc]
EOS

data = YAML.load(str)
pp data
# ["aaa", "bbb", "ccc"]

#----------------------
str =<<EOS
{ A: aaa, B: bbb, C: ccc }
EOS

data = YAML.load(str)
pp data
# {"A"=>"aaa", "B"=>"bbb", "C"=>"ccc"}

#----------------------
str =<<EOS
decimal1:  123                           # 整数 (10 進数)
decimal2:  1,234,567,890                 # 整数 (10 進数)
octal:     0644                          # 整数 (8 進数)
hexa:      0xFF                          # 整数 (16 進数)
float1:    0.05                          # 浮動小数点
bool1:     true                          # 真
bool2:     yes                           # 真
bool3:     on                            # 真
bool4:     false                         # 偽
bool5:     no                            # 偽
bool6:     off                           # 偽
null1:     ~                             # Null 値
null2:     null                          # Null 値
date:      2005-01-01                    # 日付
stamp:     2005-01-01 00:00:00 +09:00    # タイムスタンプ
str1:      'true'                        # 文字列
str2:      "2005"                        # 文字列
symbol:    :foo                          # シンボル (Syck の独自機能)
EOS

data = YAML.load(str)
pp data

# {"str1"=>"true",
#  "bool5"=>false,
#  "str2"=>"2005",
#  "bool6"=>false,
#  "symbol"=>:foo,
#  "date"=>#<Date: 4906743/2,0,2299161>,
#  "null1"=>nil,
#  "float1"=>0.05,
#  "null2"=>nil,
#  "octal"=>420,
#  "decimal1"=>123,
#  "decimal2"=>1234567890,
#  "hexa"=>255,
#  "stamp"=>Sat Jan 01 00:00:00 JST 2005,
#  "bool1"=>true,
#  "bool2"=>true,
#  "bool3"=>true,
#  "bool4"=>false}

#-----------------
## YAML ドキュメント
str = <<EOS
- name: Shiina
  birth: 1998-01-01
  age: 6
  favorite:
    - Thomas
    - Pokemon
- name: Sumire
  smoker: false
  birth: 2000-02-02
  age: 4
EOS

## オブジェクトに変換する
require 'yaml'
require 'pp'
yaml = YAML.load(str)
pp yaml

# [{"name"=>"Shiina",
#   "age"=>6,
#   "birth"=>#<Date: 4901629/2,0,2299161>,
#   "favorite"=>["Thomas", "Pokemon"]},
#   {"name"=>"Sumire",
#   "smoker"=>false,
#   "age"=>4,
#   "birth"=>#<Date: 4903153/2,0,2299161>}]

#-------------------
## YAML データ (「---」で区切って複数のデータを記述している)
str = <<END
---
name:   Ruby
url:    http://www.ruby-lang.org
---
name:   Python
url:    http://www.python.org
---
name:   PHP
url:    http://www.php.net
END

## YAML ドキュメントをひとつずつ読み込む
require 'yaml'
YAML.load_documents(str) do |doc|
  p doc
end

# {"name"=>"Ruby", "url"=>"http://www.ruby-lang.org"}
# {"name"=>"Python", "url"=>"http://www.python.org"}
# {"name"=>"PHP", "url"=>"http://www.php.net"}

#--- End of File ---

ピックアップ: ユーザー造反で Digg が敗北宣言, プログラミングの6大10項目, etc...

- http://cappuccino.jp/keisuken/logbook/20070501.html#p07
> >  [3DCMS][Java][Ruby] JRubyコンパイラがやっぱり欲しい - 航海日誌 (2007-05-01)

xfy の xvcd のコンパイラや, xvcd へのアスペクト機能とかも欲しいなぁ。

- http://www.metamix.com/210.php
> > |M|E|T|A|M|i|X| 『Googleで検索できないものはない』という迷信を過度に信じる人たちについて。非インターネット的業界、群れるユーザー・・

- http://e0166.blog89.fc2.com/blog-entry-158.html
> > iGoogleにさらっと個人情報の一部をもっていかれた。きっとこの先の広告展開に使われますよね*ホームページを作る人のネタ帳

- http://randomnotes.weblogs.jp/maclalalaweblog/2007/05/digg_ec1f.html
> > maclalalaweblog: ユーザー造反で Digg が敗北宣言

- http://blog.creamu.com/mt/2007/05/ajaxgtdsimple_gtd.html
> > Ajaxでぐりぐり動くシンプルGTDツール『simple GTD』 | CREAMU

- http://www.aoky.net/articles/jeff_atwood/top_6_list_of_programming_top_10_lists.htm
> > プログラミングの6大10項目リスト

- http://e0166.blog89.fc2.com/blog-entry-156.html
> > Goolge八分からの復帰方法。ページランク3への長い道のり*ホームページを作る人のネタ帳

> Google神話には、一度削除されたサイトが復帰する事はないと言われていますが、実際はそうではないと言うことですね。それが今、ページランク3と言う事に感動せずにいられません。

この katoy のサイトもページランクはいまだに0のままです。
(投稿のあとに確認してみたらページランクは2だった 2007-05-03 15:30)

他のサイトからのリンクというものが google では重視されているようです。
yahoo と google の結果と順位の差が大きいのにも気がついていますが、その原因は何かは私には判っていない...

xfy + cvs + jruby で何ができるか?

ruby で csv を扱う例を見つけた。
ruby で xml を扱う例を見つけた。

これを "xfy から ruby/jruby を呼出す" 事と組み合わせれば、
xfy で cvs を表示する例が簡単に作れそうだ。
(xfy からrubyを呼び出すことで xml を得て、xvcd の template を適用する。
   <xvcd:apply-templates select="function:xml-string-to-dom($output)"/>

呼び出す ruby コードでは、 cvs を読み込み、必要に応じて何らかの処理をする。
  さらに xml に変換して xfy には、文字列として返すのだ。)

以下の例は、java, jruby で動作する。

CSV を扱う例:
===========
- http://tmtm.org/ja/tdiary/?date=20070412
> > tmtm日記(2007-04-12): SimpleCSV
- http://tmtm.org/ja/ruby/lightcsv/
> > LightCsv: CSV をパースして配列を返す。
(この LightCsv は FasterCVS よりも速いらしい)

require "lightcsv"
s =<<EOS
0,1,2
"a","b","c"
X,,Z
EOS

LightCsv.parse(s){|row| p row}
#["0", "1", "2"]
#["a", "b", "c"]
#["X", "", "Z"]

LightCsv.new(s).each{|row| p row}
#["0", "1", "2"]
#["a", "b", "c"]
#["X", "", "Z"]

p LightCsv.parse(s)
#[["0", "1", "2"], ["a", "b", "c"], ["X", "", "Z"]]

p LightCsv.new(s).map
#[["0", "1", "2"], ["a", "b", "c"], ["X", "", "Z"]]

XML を扱う例:
===========
- http://www.nslabs.jp/ruby-rexml.rhtml
> > Netsphere Laboratories: RubyでXML (REXML)

require "rexml/document"

source = <<EOF
<?xml version="1.0"?>
<foo><bar />
    <baz>ho&lt;ge</baz>
</foo>
EOF

doc = REXML::Document.new source
puts doc
#<?xml version='1.0'?> 
# <foo><bar/>
#    <baz>ho&lt;ge</baz>
#</foo>

« 2007年5月1日 | トップページ | 2007年5月5日 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク