« 2007年8月 | トップページ | 2007年10月 »

2007年9月の16件の記事

2007年9月29日 (土)

このブログについて

先日、このブログについて、相方から「最近つまんない」と
言われてしまった。

最近、ここに技術系の書き込みをするようになったからだろう。

まず、そのひとことを聞いた
第一印象からすると、「おっ、読んでてくれたんだ。嬉しいなぁ」
次に考えたのは、「どうしたものか・・」

このブログは、サブタイトルにもあるように
想定読者なるものを特に定めずに、プロダクトアウト的に
自分がつぶやきたいことをつぶやいてゆこうというコンセプトで
運営を始めた。

しかし、まあ、そうとはいえ、書き込むときは、
やはり知らず知らずのうちに、
なんらかの想定読者というものを念頭に置いていたんだとは思う。

技術系の書き込みと、日常つぶやき系の書き込みは
明らかに想定読者が違う。

無論、この2つの想定読者集合には重なる部分はあって、
その中に私自身が含まれる。だから、最近の技術系書き込みは
このブログのコンセプト自体を損なうものではないと判断していた。

ただ、この2つの読者集合の積集合は非常に小さいという予想は成り立つ。

それを認識した上で、このままのスタイルで、技術系と日常系の
2種類の書き込みを続けていくのは賢くはないなぁと思うのだ。

一応ブログにはカテゴリ機能ってのがあるので、技術系の書き込みには、
必ず該当するカテゴリを付けて書き込むようにはしているのだが、
まあ、「カテゴリを絞りこんでブログを読む。」なんていうことをする人は
私は見たことがない。

RSSなどの仕組みで、MIXIなどにもPUSHしているわけで、

 「あっ、アフォウ人が何か書き込んでるぞ!」

と、少し期待(暇つぶし程度とはいえ)を持たせておいて、

 「なーんだ、良く分からん技術の話か」

と、がっかりさせちゃうのは、やっぱり良くない気がする。

そこで、以下3つのソリューションを考えてみた。

  1.もう一つ技術系のブログを立てる。

  2.技術系書き込みをするときにも、一般的に通用する
   視点で書く。

  3.カテゴリごとに切り出した独立したOUTPUT
   (URL、トップページ、RSS出力)をもつ
   特殊なブログシステムを作ってそれに移行する。

んー・・ 最初は3を考えたりもしたが、こうやって
書き出してみると、めんどいし、そもそもそんなもの
はデメリットも多い(標準であることがBLOGの良さ)
し、要件が固まらなそうな気がする。

1.すら、面倒だなぁ。

2.は、今度は技術系書き込みをするときに、
面倒くさくなって、書かなくなってしまいそうだ・・

まあ、この問題って僕だけの問題ではなくて、きっと
万人共通の問題なんだろうなぁ。

人間だれだって、とはいわないまでも、ほとんどの人には
ONとOFFってのがあるわけで、
ONとOFFでは考えることもやることも、
まったく違う。

OFF系のブログとON系のブログってのは、
世の中にあるよね・・

今回の問題も、

 これまではOFF系だったけど、
 ちょっとON系のことを書いたら、収まりが悪くなった・・

と、そのように一般化表現可能だね。

ブログを書く側からすると、ONでも、OFFでも、
自分の外部記憶として、どっちもどこかに
書き留めたいのだが、読む側からすると、
多くの場合、その片方にしか興味がない・・と

・・・んー、だめだ。
 書きながら、色々うかんでしまって、言語化が追いつかない。
 いや、脳内での言語化はしていて、言語でモノを考えているのだが、
 タイプが追いつかない。

 っていうか、タイプは別にそんなに遅くないので
 追いつくのだけど、読みやすい文章に整形するところに
 頭をつかってしまうと、CPUパワーならぬ、頭脳パワーが
 そちらに割かれてしまって、考えが停滞して、気持ちよくない。。

 
そうだ、おもいだした、リニアだ!
パイプだ!

脳内の「演繹・ひらめきプロセッサ」と
「言語化プロセッサ」と「タイピング神経信号伝送プロセッサ」
(含:視神経からのフィードバック&簡易言語チェック)
をUNIXのパイプみたいに直結させて、動かすことが、
このブログのコンセプト!

それにより、私という人間が表現されて、記録されて、以下メリットを生む。

 ・自分があとで、「あー、そんなこと考えてたねぇ、、」とほくそ笑む
 ・周囲が「あー、そんなこと考えてるのねぇ、、」と、せせら笑う
 ・周囲が私の脳内のダイレクトな出力をみることにより、
  私という人間への警戒レベルが下がり、私が楽しく生きてゆく
  上での不可欠な要素である、「楽しい仲間」というものが、
  形成しやすくなる。

そうそう、忘れちゃイカンよ。

最近の技術系書き込みは、技術的な(些細な)問題について、
Googleで一生懸命探してもまとまった解が見つからないときに、
その問題と解のセットを書き込むことによって、

 ・自分があとで読み返せる(一度解けた問題も、忘れる!)
 ・他の人がGoogleで調べたときに、問題解決に少しだけ
  役立つかも

そんなことを考えていた。

んー・・それはそれでイイジャン、
そういうのもありか・・

・・・よーし、わかった。
このままのスタイルでいこう、ONもOFFもごった煮。

要するにバランスだね。

最近ON系の書き込みだらけだったので、OFF系ももうちょっとかく、
それが最適解だとおもう。

理由は、比較的複雑な予想ベースの定量的な計算に基づくので
言語化が困難だ。たとえて言うなら、あの、夏休みの宿題とかで
必ず誰かがつくってきていた、天井からつるす、シーソーみたいなやつ。
あの構造を言語化するのは難しいように(XMLでは書きやすそうだけどw)、
今回の決定に至った理由を言語化するは、難しい。

世の中、「理由は?」とか、「理由を書け」だとか、「理由が明確でないのは
認められない」だとか、そういうのって多いけど、くそ食らえじゃ

それは、文系にありがちな、「偏った考え」だろう。

「私がこう判断した理由は非常に複雑でして、感覚的定量判断とでも
申しましょうか・・」なーんて、言えばいいのかな・・ 大人としては、
そのあとが続かないけどね。

理系の論文なんかだと、モデルとなる数式やら閾値があったりして、
数値を比較して・・ってやるけど、今回の問題に関する「感覚的定量判断」という
やつは、モデルも、閾値も、「ブログ書き込み学」なんていう学問はまだ
確立されたいないのでやっぱり、「感覚的」の域から脱せないなぁ・・

逆に言えば、そういう学問、そろそろ誰かつくろうよって感じ。
経済学だって物理学だって誰かが、というか、
複数名が時間をかけてだが、なんにしろ、誰かが作ったんだぜ。

人がお金を使うようになってしばらくしたら、経済学が生まれる。
会社というシステムが運用されるようになってしばらくしたら、経営学が生まれる。

ネットやらブログやらが使われてしばらくしたら、「ナントカ学」が生まれるはずと思う。
「情報工学」とかとは違う、「メディア」に近い学問のことね。

PCやらネットを前提とした環境での、
個人による情報整理や情報発信に関する方法論の整理と、
情報発信が及ぼす影響や、発信した情報の受信者の分類、
受信者の興味の中心が何であって、(その発信者自身に
興味があり、発信した情報群を集合として楽しむのか、
個々の情報にしか興味がないのか等)、そういう
受信者ポートフォリオに対して、与えたい影響戦略
 ・自分に興味をもってもらいたい
 ・その人が問題解決に使ってもらえればよい
 ・アドワーズで稼ぎたい
 ・定期的に読んでもらいたい
 ・いつかは本を出版したい
たとえば、こういう感じのに、ラベルをつけて、

ブログ効用ベクトル = 
 ブログ戦略行列 X 受信者ポートフォリオベクトル

みたいな、そういうのってできるじゃん。

まあ、これだとブログ経済学とかいって、経済学に
くくられちゃいそうだけどな。

あー、話がずれたが、最後に出てきた行列計算が、
いいたかったことかもしれない。

つまり、ブログには、読者ポートフォリオベクトルというのが定義できて、
その要素は、読者集合として、分けられる数だけあり、それぞれの
量は、「かかわりの度合い」、とか、「期待」なんだろな。

かかわりの度合い自体も、読みに来る頻度や、何をどれだけ
求めているのか、なのか、さらに細分化できそうだけど、そこは
とりあえず、ラフにくくっておく。

まあ、つまり、そのブログに対して、どういう人が、何をどれだけ期待しているか、
ということをベクトルなのかテンソルなのか行列なのかわからないけど、
モデル化したものを、「読者ポートフォリオ」と読んでおこう。

それに対して、もうひとつ、ブログに対して「機能ポートフォリオ」というものも定義できる。
それは、そのブログがどのような機能をどれだけ果たしているかというものであって、
たとえば、「自分が読み返してほくそ笑む効用」だとか、「友達形成機能」だとか、
「技術的に世の中貢献機能」だとか、そういうもの。

んで、

「機能ポートフォリオ」 = 「ブログスタイル行列」 x 「読者ポートフォリオ」

だと思うのだ。

この式を頭におきつつ、「機能ポートフォリオ」のターゲットを定めた上で、
今ある「読者ポートフォリオ」予想があって、その上で、最適な「ブログスタイル行列」
を求める・・ と、、

つまり、
こういうことを期待している人がこのくらいいて、
こういうことを期待している人がこのくらいいて、
こういうことを期待している人がこのくらいいて、

一方、自分はこのブログを通して
こういうことをこれだけ実現したくて、
こういうことをこれだけ実現したくて、
こういうことをこれだけ実現したい。

だから、
こういう人に向けてこういう記事をこれだけ書いて、
こういう人に向けてこういう記事をこれだけ書いて、
こういう人に向けてこういう記事をこれだけ書いて、
こういう人に向けてこういう記事をこれだけ書いて、

・・ みたいな。


まあ、記事を書いたときそれを読者がどう読んで、どういう影響を与えるかは、
線形関数なんかでは書けるわけなくて、こんな線形代数のモデルを
あてはめるのは無理があるのだけど、何事も線形近似は結構いけたりするので、
なんだろねぇ。

まあ、こういうことを考えるのも、まったく意味がないとは言い切れないかなと
考えるわけです。

はい。

以上、脱線しつつも、書きながらセルフインスパイアされつつ、
このブログの方向性について、ある程度自分の考えがまとまりましたね
ってことで、よかったねぇ^^ってことで

2007年9月20日 (木)

Subversion Update するCGI

Subversion Update するCGIというのは、結構便利だ。

ということで、学習をかねてRuby で書いてみた。

作ったもの


#!/usr/local/bin/ruby -Ku
require 'cgi'

# setting env for subversion -------------------
ENV['LC_MESSAGES']='en'
ENV['APR_ICONV_PATH']='C:\usr\local\iconv'

# HTTP header ----------------------------------
cgi = CGI.new
print cgi.header({"Content-Type" => "text/html", "charset" => "utf-8"})

# HTML -----------------------------------------
puts '<html><body>'
puts ' <link rel="stylesheet" type="text/css" href="../css/admin.css">'
puts '<h4>Repository Status</h4>'
# SVN INFO
puts '<pre>'
puts `svn info --username username --password password ./path`
puts '</pre>'

puts '<form>'
puts '<form><input type="button" onclick="history.back()" value="back"/>'
puts '</form>'
puts '<h4>Update Log</h4>'

# SVN UPDATE
puts '<pre>'
puts `svn update --username username --password password ./path`
puts '</pre>'

puts '<form>'
puts '<form><input type="button" onclick="history.back()" value="back"/>'
puts '</form>'
puts '</body></html>'

学んだこと
Ruby 的なポイントは、
1.コマンド出力(` `) の使い方と
2.環境変数の設定方法(ENV['FOO']='BAR')
SVN的なポイントは、以下2つの環境変数。

ENV['LC_MESSAGES']='en'
ENV['APR_ICONV_PATH']='C:\usr\local\iconv'

LC_MESSAGESはコマンドを打ったときに帰ってくるメッセージのロケール設定で、
APR_ICONV_PATHは(subversionが使っている)ICONVのパスを指定するもののようだ。

前者を de_DEにすればドイツ語になり、ja_JP.SJIS等にすれば日本語になる。
後者を設定しないと日本語の文字が以下のように化けまくる。(Windows環境のみか?)

?\228?\092?\214?\131 ...
 (上記数字はウソ、サンプルとして適当な数字かいてます。)

utf-8な日本語が十進数に化けると、こんな数字になるっぽいですな。

環境変数APR_ICONV_PATHが設定されていないと、
Iconvがちゃんと使われないとかなんとかで、
Svnから出てくる段階ですでに化けていた模様。

以下理由により、原因がRuby側なのかSvn側なのか切り分けるの
に少し手間取ったけど、

恥ずかしいポカミス
恥ずかしいが一応かいておこう。ポカミスというより、自分の
根底としての技術力のなさを露呈するものでしかないが・・

最初さ、RubyCGIでの環境変数の設定方法がよくわからないでさ、
ENV['LC_MESSAGES']='de_DE' と書かずに、
`set LC_MESSAGES='de_DE'` とか書いて、
「出力ドイツ語にならんなぁ」なんてやってました。

たぶん、コマンド出力(' ')ってプロセスフォークしちゃうから・・
フォークした先で環境変数設定してもだめだよね・・きっと
 (PERLでもSHELLでもそうだよねー・・)

意味なし!あはは・・
あほですいません。

Windows Apacheの動作ユーザ
それと、SVNはapache使ってWebDAV方式で動かしているが、
文字化け問題解決前に、もう一個問題がでていた。

化けたエラーログをみてると、

[Thu Sep 20 17:47:50 2007] [error] [client 10.00.000.00] svn: Can't open file 
'..\\.svn\\lock': \x83A\x83N\x83Z\x83X\x82\xaa\x8b\x91\x94\xdb\x82...

.svn\lock 云々書いてあるので、これはパーミッションの問題か?
と思い、アパッチの動作ユーザを変えたところ、ちゃんと
動くようになりました。

Apacheの動作ユーザって、UNIX版だと、httpd.confで設定したような
気がしたが、Windowsのアパッチでは、NTのサービスのダイアログを開いて、
そこでユーザを設定するようだ。
(デフォルトではローカルシステムアカウントというやつで走行する)

そんだけ^^ 
以上メモでしたー。

2007年9月18日 (火)

TCPモニタでSOAP通信をチェック

RailgoにアクセスするCGIをlocalhostで作っていたら、
なかなか動かず、どんな通信をしているのか見てみたいとおもった。

TCPモニタなるものをつかえばいいんだろうなぁと思い、
ぐぐって、やってみました。

2つほどポイントがあったので、ここに記しておきます。

 1. tcpmonはAXISから独立しました。

2. tcpmonの使い方、ちょっと頭が混乱しますた。


tcpmonはAXISから独立しました。
ググると、「tcpmonはApache Axisに付属しています。」
なんて記事がたくさんでてくるのだけど、惑わされてはいけない。
これは過去の話で、Axis2からかいつからかは知らないが、
2007年9月現在最新のAxis2なんかを落としてきても、
tcpmonは入っていない。
 (探し回っちゃったよ;;)

もともと、機能として独立してるし、出来もいいじゃんってことか、
今は独立したプロジェクトになってて、独立してダウンロードします。

http://ws.apache.org/commons/tcpmon/
これなら軽くていいねー^^


tcpmonの使い方
今回のように、localhostで動くCGIからプロキシのむこうにある
SOAPサービスに何が飛んでいるかみたいという要件だと、ちょっとだけ
頭をひねる必要がありました。

やったこと:

 1.TCPMONを以下設定で起動
Listen Port : 3333 (なんでもいい)
Target Host : proxy.example.com
Target port : 8080
    OptionのHTTP Proxy Supportは不要(check off)

 2.CGI側のプロキシ設定(今回はSOAP4rのsoap/propertyファイル)を
   一時的にhttp://127.0.0.1:3333  に変更
   (ポートはなんでもいいが上記のListenポートにあわせる)

えーと・・・なんで、これで見れたんだっけ??

ようするに、CGIからみたら、いったんTCPモニタがまずプロキシになって、
TCPモニタは、本当のプロキシ(上記proxy.example.com:8080)の
プロキシになるようにする。つまりプロキシを1段追加するイメージで
TCPモニタが間に挟まることで、飛び交うHTTPの内容が見れる・・

と、そういうことですかね。

TCPMonはプロキシモードってのもあって、これを使うともっと
楽チンな気がするけど、ちょっと触ってみた感じだと、TCPMonのProxyモードでは
OptionのHTTP Proxy Supportの設定が有効にならないような感じで、
(ややこしいw)自分の職場環境での今回の要件には使えないようでした。

以上、メモー

RailgoをRubyで使う(パート2)

あー・・・疲れた。

RubyでRailgoのつづきです。

先ほどのエントリで、駅名を検索して取ってくるとこまでできたんですが、
その後、経路検索でどうしてもうまく行かない。

以下のようなプログラムで
SearchCourseメソッドを呼んで経路検索をしようとしたところ、
どうしても変なエラーが出る。 


数時間悩んで(つかれて半分寝てましたが・・)
SOAP4rのバージョンあげて1.5.7というやつを入れてみたところ、
動くようになりますたヨ・・;;


Railgo.rb

require 'soap/wsdlDriver' 
require './RailgoAuthHandler'

module Mashup
WSDL_URL = 'http://wstest.railgo.jp/ExpService06.asmx?wsdl'
class Railgo
@@wsdlFactory = SOAP::WSDLDriverFactory.new(WSDL_URL)
@@driver = @@wsdlFactory.create_rpc_driver
@@driver.generate_explicit_type = true
#For auth
handler = Mashup::RailgoAuthHandler.new
@@driver.headerhandler.add(handler)

#----------------------------------------
# 駅名文字列に対応するStationオブジェクトを返します
#----------------------------------------
def Railgo.getStation(name)
begin
#response =driver.GetDefaultNavigation({})
request = {'StationYomi'=> name,
'AreaType' => "Japan",
'StationType' =>"RailRoad",
'Date'=>'20070913'}
response = @@driver.SearchStation(request)
rescue SOAP::FaultError => err
print err
raise
end
ret = response['SearchStationResult']['Station']
ret = (ret.is_a?(Array))?ret[0]:ret
#ret['Latitude']['bearing']
end

#----------------------------------------------
# 駅名文字列配列に対応するStationオブジェクト配列を返します
#----------------------------------------------
def Railgo.getStations(aryNames)
ret = []
aryNames.each {|station|
ret<< Railgo.getStation(station)
}
ret
end


#-------------------------------------------
# 経路検索
# Station配列を与えると対応するCourse配列を返します。
#-------------------------------------------
def Railgo.getCourses(stations)
begin
resNavi = @@driver.GetDefaultNavigation({})
navi = resNavi['GetDefaultNavigationResult']
request = {'Stations' => stations, 'SearchOption' => navi }
response = @@driver.SearchCourse(request)
rescue SOAP::FaultError => err
print err
raise
end
ret = response['SearchCourseResult']['Course']
#ret = navi
#ret = response
(ret.is_a?(Array))?ret[0]:ret
end
end

end

SearchCourse.cgi

#!/usr/local/bin/ruby -Ku
require 'cgi'
require 'soap/wsdlDriver'
require 'Railgo'

cgi = CGI.new
print cgi.header({"charset" => "utf-8"})

sName = cgi["name"]
stationsStr = ["武蔵小金井", "新宿", "東戸塚"]


stations = Mashup::Railgo.getStations(stationsStr)
response = Mashup::Railgo.getCourses(stations)

# test output
puts "Response:" + response.inspect


エラーでてるまわりのソースみてたらさー、
#ToDo: Test とかあやしいことかいてあるからさー・・
ちっとはあやしいとはおもったんだけどさー・・

まさかバージョンあげたらなおっちゃうとは思いませんでしたよ・・

古いバージョンのlib/soap/mapping/wsdlliteralregistry.rb, line 119

     
119: def complexobj2soap(obj, type, qualified)
120: o = SOAPElement.new(type.name)
121: o.qualified = qualified
122: type.each_element do |child_ele|
123: child = Mapping.get_attribute(obj, child_ele.name.name)
124: if child.nil?
125: if child_ele.nillable
126: # ToDo: test
127: # add empty element
128: child_soap = obj2elesoap(nil, child_ele)
129: o.add(child_soap)
130: elsif Integer(child_ele.minoccurs) == 0
131: # nothing to do
132: else
133: raise MappingError.new("nil not allowed: #{child_ele.name.name}")
134: end
135: elsif child_ele.map_as_array?
136: child.each do |item|
137: child_soap = obj2elesoap(item, child_ele)
138: o.add(child_soap)
139: end
140: else
141: child_soap = obj2elesoap(child, child_ele)
142: o.add(child_soap)
143: end
144: end
145: o
146: end

いやー・・ Ruby 熱いぜ^^
 (まだ業務じゃ使えないっていうのは、こういうところなんだろうねぇ・・残念;)

でも、おかげさまで、TCPモニターなるものを使って調査したり、
回り道でいろいろスキルがつきましたです。

Ruby でproxyサーバ経由のSOAP/HTTP

あ、そうそう、先ほどのSOAPなRailgoをRubyで使うですが、会社で作業しているので、Proxyサーバ経由でアクセスせねばなりませんでした。
ここも、ソースやらその中の正規表現やら追いながらやっとこさ動いた部分なので、メモを残しておきましょう。
 (Ruby初心者なので、なおつら)

SOAP4rではHTTPのPROXYをかます方法がいろいろ用意されていますが(環境変数を使う方法等)、
CGIで使う場合はsoap/propertyというファイルを使う方法がよいかなと自分は思いました。

ライブラリパスが通っているところに
soap/というディレクトリをつくり、その中に
propertyという名前で以下のようなファイルをくと
そのプロキシ経由のアクセスとなるようです。


soap/property

[client.protocol.http]
proxy: http://proxy.example.com:8080


プロパティファイル使う手段用意してくれるのはいいけど、
その書式に関するドキュメントが皆無で、サンプルも、
ソース上のコメントもない・・

(ドキュメントが整備されている世界の住人である)Java屋としては、
なかなか新鮮(かつ死にそう)な経験でした。
「ソース読め」ってのがRuby文化なんですかねぇ・・
結構敷居高いなぁ・・

(「Ruby=プログラミングが楽しい」というコンセプトからすると、
  こういうライブラリをバンドルするのは、いかがなものか、
   ドキュメントが整備されるまでは
   外様扱いにしたほうがよいのでは?と思ったです)

まあいいや、
こっからが、本番です^^

SOAPなRailgoをRubyで使う

遅ればせながらマッシュアップなんてものをやってみることになって、いろいろやってます。
まずは電車の経路検索なんかを使ってみようと思い、Railgoというやつを使ってみようと
思いました。

RailgoはSOAPのAPIです。
SOAPやらWSDLやらを扱うプログラムを書いたことがないJavaプログラマで
ちょっとRubyやってみたいなと思っていた自分としては、なんとなく
Rubyでやってみようと決めました。

(Rubyの本にはSOAPのAPIがデフォルトでついてるって書いてあって、
 かつ、どこかにAxis2は依存ライブラリが鬼のようにあってうざいと書いて
 あったからともいう。)


んで、はじめてみると、
実際RubyにはSOAP4rというライブラリがバンドルされていました。
が、ふたを開けてみると、ドキュメントがさっぱりなくて、正直、辟易しました。

 #Google先生がSOAP4r hell なんていうタイトルの英語の記事を教えてくれて、
 #そこにドキュメントもサンプルもなんにもねぇぇ・・死にそうだぁ・・ってかいてあり、
 #ライブラリ作者はいろいろ開発ML等で「ドキュメントは、かかないよー」
 #なんてかいてあり・・
 #
 #途方にくれて、Rubyやめようかともおもったよ・・まったく


自分もドキュメント書くのぜんぜんだめな人なのですが、
すばらしい反面教師に出会ってドキュメント書く能力
(やる気ともいう)があがった気がするので、まあよしとしよう。

本題は、ライブラリのソースみたり、Google先生に聞いたり、
試行錯誤の繰り返しで、とりあえず以下が動いたという報告であります。

 #ソースを追ってたら、Rubyスキルもちょっと上がったかも^^

RubyもSOAPも 初心者なので、変な記述があるかもですが、
現時点で日本語・英語含めて、SOAP4rに関する
情報がほとんどないので・・まあ、こんなんでも
だれかの役にたつかもということで、ポストしときますー


認証用ハンドラ(RailgoAuthHandler.rb)

require 'soap/header/simplehandler' 
require 'xsd/qname'

module Mashup
class RailgoAuthHandler < SOAP::Header::SimpleHandler
def initialize
nsUri = 'http://expart.est.co.jp/ExpService'
name = 'Authentication'
super(XSD::QName.new(nsUri, name).freeze)
end

def on_simple_outbound
{ 'User'=> 'mctuser3', 'Password' =>'symfyws6'}
end
end
end


CGIプログラム(test.cgi)

#!/usr/local/bin/ruby -Ku
require 'cgi'
require 'soap/wsdlDriver'
require './RailgoAuthHandler'

cgi = CGI.new

WSDL_URL = 'http://wstest.railgo.jp/ExpService06.asmx?wsdl'
wsdlFactory = SOAP::WSDLDriverFactory.new(WSDL_URL)
driver = wsdlFactory.create_rpc_driver
driver.generate_explicit_type = true

#For auth
handler = Mashup::RailgoAuthHandler.new
driver.headerhandler.add(handler)


#Call
begin
#response =driver.GetDefaultNavigation({})
request = {'StationYomi'=>"新宿",
'AreaType' => "Japan",
'StationType' =>"RailRoad",
'Date'=>'20070117'}
response =driver.SearchStation(request)
rescue SOAP::FaultError => err
print err
raise
end

# output
print cgi.header({"charset" => "utf-8"})
puts "Response:" + response.inspect

BLOGにソースコードを書く方法

えーと。 多くのプログラマにとってはいまさらな話題でしょうが・・ 自分はこれまでソースコードをBLOGにはろうとおもっても、 綺麗に表示されないなー・・ みんなどうしてるんかなぁ・・ と思っていたので、今日やっとちゃんとしらべてやってみました。

まあ、いろんなやり方があるんでしょうが、今日見つけたのはGoogleのgoogle-code-prettifyってやつをつかったやりかた。

http://code.google.com/p/google-code-prettify/

にあるものを落としてきて、ブログにはりつけるだけで、

<pre class="prettyprint">
#!/usr/local/bin/hoge
print "hoge"
</pre>

なんてかくと

    #!/usr/local/bin/hoge
    print "hoge"

と表示されるというものです。すばらしい^^

2007年9月13日 (木)

アベさんの退き方の見方

首相のアベさんがやめちゃうというというニュースを聞きながら色々考えた。

まあ、多くの人が「無責任」という言葉を使っていたが、
個人的には、それも正論とは思いつつも、
自分は彼を「無責任」といって責めるようなことはしたくないなと思った。

理由は2つ。
一つ目は簡単。

いいじゃん! 
だって、やる気なくなったんだろー。
そしたらやめるんでいいんじゃないの?

なんて思う。

無論天下の日本国総理大臣が、そんなお手軽お気楽じゃいけないのかも
しれないけど、彼だって人間なんだしさ・・と思うのだ。

ま、それがひとつ。

んで、もうひとつが本題です。


表現としてはだいたい同じなんだけど、
「続けられない、続けるのがよくないという
 結論に至ったのなら、そのときすぐやめたほうがいい」
というものだ。

自分が特に大事にした視点は、日本という国家なり集団なり民族なりが、
いいほうに行くために、そのリーダー的な位置づけの首相ってものが
どう機能したら効果的かというポイント。

つまり、首相ってなんだっけ、リーダーって何だっけ?
という原点に立ち返って考えたということだ。

簡単なはなし、ダメダメな気もちになってしまって、
国民からもダメダメだと思われちゃった人が、
短期間でノリノリになれるとは思えない。

リーダーはノリノリで国民をノリノリ気分にさせてくれるやつのほうがいい。

だから、もうダメダメムードが臨界値をこえちゃったひとは、
退場して、リセットしたほうがたぶんマシ。


オレは、アベさんの「美しい国」コンセプト大賛成だったし、
やめてほしくなかったけど、まあ、本人が言っている
「もう求心力が回復できない」
という恐れが確信に変わってしまったのなら、
そのときがやめるべきときだと思うのだ。
それが、今日であったから今日やめた。

いいじゃないかと思う。


国をよくしようとこれまで理想に燃えてがんばってきたんだ。
本人だって断腸の想いだったはずだ。

でも、理想から現実がかけ離れていき、
これ以上かけ離れないようにするためには、
自分が身をひくのがベストだと確信してしまった。
それが今日だったんだと思うのだ。

そりゃ、所信表明演説やっちゃった手前、
普通の人なら引くにひけないよね。
だって、2日ぐらいしか経ってないんだもん。
このタイミングでやめるなんていったら、
無責任呼ばわりされてあきれられる
ことぐらい誰だってすぐ予想つく。

でも、そんな自分の評判なんかよりも、彼は国益
つまり彼の理想を優先したんじゃないかなと思うのだ。

普通のひとだったら、所信表明演説やっちゃった以上、
数週間は粘る。
粘って「がんばったけどだめでしたー」とやる。

でも、、
「自分が無責任といわれないようにする」ためだけのために
数週間粘るようなことを、彼の良心は許さなかったんだと思う。
自分がこれ以上がんばっても国家に利益をもたらさず
不利益をもたらしてしまうと確信したのなら特に。

それに「がんばったけど、だめでしたー」というポーズをするための
一要素である「だめでしたー」が、絶対受け入れられないモノだったんだろうと思う。
私は、彼が数日前発した「職を賭してこの問題に取り組む」といった意味はここに
あったのではと思う。

「だめでしたー」にしないためのベストを考えたら、今最悪の
タイミングであっても、無責任といわれようと、なんとののしられようと、
「今やめる。」ことが必要だった。だからそうした。


立派じゃないか。
私はそれこそ責任ある行動なのではと思う。


今回の彼の行動を無責任だとかいう人がいる(多い)が、そういう人に聞きたい。

 ・彼がここであなたのいう「責任」を守ることが国益にかなうのか?
 ・彼がここであなたのいう「責任」を守らないことが国益を著しく損なうのか?

私にはそういう風には見えない。
ただ、「突然やめる=無責任」という良くある公式に
当てはめているだけに思える。

 #無論、そうではない人もいるかとは思うが、

今回、私がこのような考えに至ったのは、
自分のある経験が大きく影響している。

2年前のアメリカでの職場のことだ。
当時このブログにも書いたが、
あるシステム開発がどうしようもない状況になっていた。
 
 ・作ったシステムは動かない
 ・やっと動かしてもテストはことごとくFAIL
 ・直したという報告を受けて再試験してもことごとくFAIL
 ・繰り返し・・
 
そんな状況下で一番ボトルネックになっている部分の担当者が
2週間のバケーションに出かけてしまったのだ。

そのとき私の頭に浮かんだのは、・・・ 
いや、なにも浮かばないぐらい唖然としたけどね。
まあ、「無責任」という言葉である。

しかし、結果はびっくり。

そいつがバケーションに出かけたことで事態は急に進みだしたのだ。
手前味噌ながら、私がそいつのやってたところを急遽引き受けることになり、
たまった問題をバリバリと処理していったので、「どうしようもない状態」は
1週間ほどで解決してしまったのだ。

そいつは確かに無責任だったかもしれないが、
そいつが南の島にバケーションに出かけた結果として
「システム開発のどうしようもない問題」は解決したのだ。

自分の自慢がしたいのではない。 (いや。ちょっとはしたい^^)

どうしようもない状況に対する解として、
「放棄&担当交代」って結構有効だということがいいたいのだ。
 
 1.まず、人が変わることで状況は変わる
 2.それに、そういう状態での後任者はある意味
   極めて良い環境に置かれる。

2について、はこういうことだ。


その放棄してバケーションいっちゃったやつは、相当悩んでいたに違いない。
 「こんな状況、どうにもできない・・」
 「私に力がないから、・・」
 「どうしたらいいんだろう・・・・」
 「きっと、この責任をとらされて今期の評価はひどいものだろうなぁ・・・」
 「ああ、核戦争でも起こってくれないか・・・」

まあ、そんな心理状態だと、解決できる問題も解決できないわけで・・


一方、立て直しに入った私の心理状況はどういう風かというと、

 「まあ、これだけひどい状態なんだ。だめもとってことで頼むぜ・・」
 「よし、ここはオレの腕のみせどころだぞ・・」
 「問題解決したら俺はヒーローだな・・・」
 「評価もAは確実だろ・・・」

まあ、こういう状態だと、120%の力が出るもので・・
 
 #日本に帰ってから、逆の立場もやったので、
 #ものすごく皮膚感覚として感じる。

つまり、何がいいたいかというと、こういうケースでは、
「放棄&後続に託す」というのはマクロに見ると非常に有効な
手段になるんだろうなということ。

次に首相になる人は、やりやすいと思うよー。

年金問題やら政治家の金銭面のだらしなさ問題をぜーんぶ
アベさんが抱えて去ってくれるんだから。

そして、その首相が、やりやすい環境のなかで、
存分に腕を振るえば日本はよりいい方向に進むと思う。

今日のアベさんの勇退は、こういう力学を考えてのことだったん
だろうと自分は信じるし、そう信じたい。
彼は、自分の名誉より、理想の実現を優先した。

小泉さんの「自分がヒーローになる」退き方と、
アベさんの「無責任呼ばわりされる」退き方。

巧いのは小泉さんなのは明白だが、本当に国民・国家のために
なるのは、アベさんの退き方なんじゃないかな。。

 まっ、
 ただめんどくさくなっちゃっただけ
 かもしれないけどねーw
 うひひ^^

PS.ちなみに、アベ首相てどんな字だったっけか?

2007年9月11日 (火)

VirtualCloneDrive

XAMLで本格的に遊ぶべく、Visual Studio 2008 betaを落としてきた。Professional (3GB程度)を落とそうと思ったが、会社のネットワークだと1時間以上かかった末、ファイルが1GBぐらいで切れてしまった;;めんどいので、Standard(700MB程度)をおとした。

が、ファイル形式が.img !

ぐぇ! めんどくせぇ

DVDに焼くのなんかメンドすぎるので、調べた所、VirtualCloneDriveというソフトで仮想ドライブとしてマウントできるらしい。

http://www.elby.ch/fun/software/index.html

なんだか、おかしなURLである。おそらくこの会社、2本目のフリーソフトを出す可能性はまったくないのか、または数ヶ月もするとこのURLは変更になるだろう・・

まあしかし、以下のページなどにもあるように、Vistaで仮想ドライブといったら、現時点ではこのソフトがいいようだ。

http://www.howtogeek.com/howto/windows-vista/mount-an-iso-image-in-windows-vista/

(Daemon Toolsというのを使うと、スパイウェアをインストールしやがるらしい。オプションではずせるようだが・・)

 

XAMLで遊ぶぞ!

XAMLで遊ぶため、会社のPCにVistaを入れたのが先週。

(Vistaにしなくても遊べるのだが、まあ、せっかくだから入れてしまえということで・・)

というわけで、今週はいよいよXAMLで遊ぶのだ。

 

 

2007年9月 7日 (金)

Ruby 開発環境

Ruby開発用Eclipse プラグイン RDT とやらを入れてみたよ。

http://capsctrl.que.jp/kdmsnr/wiki/rdt/

http://rubyeclipse.sourceforge.net/

いまんところ、いいんでねーかい?って感じ。

 

MySQLとの格闘

昨日Kirbybaseが使えないことがわかったので、本日はMySQLとの格闘である。

まずはローカルの環境構築である。

  1. MySQL5.0のインストール
  2. ruby から使うための設定

以上やるだけだったが、非常につかれた。

MySQLのインストール

まずは、以下よりMySQLをとってくるところから。

http://dev.mysql.com/downloads/

lolipopは4.0とか4.1が入っているはずなので、4系がいいかなとも思ったが、何気なく5.0をとってきてインストールした。

インストール自体はウィザードに従ってGUIでプチプチやってくだけで、ストレスなくできた。

RubyからMySQLを使うための設定

以下にもあるように、2つのモジュールがあるようだ。

http://dev.mysql.com/downloads/ruby.html

  1. MySQL/Ruby
  2. Ruby/MySQL

その名前どうよ・・ とも思うが、1と2は同じ作者がつくっており、1はC言語のAPIを呼び出すつくりとなっているようで、動かすためには、コンパイルやらなにやら、難しく、結局できなかった。2はpure rubyでできているので、設定自体は非常に簡単である。

しかし、何も考えずに2を使うと、以下のトラップにひっかかる。

C:\Users\hogehoge\Downloads\ruby-mysql-0.2.6>ruby test.rb localhost user pw

connect............../mysql.rb:453:in `read': Client does not support authentica tion protocol requested by server; consider upgrading MySQL client (Mysql::Error )
from ./mysql.rb:130:in `real_connect'
from ./mysql.rb:91:in `initialize'
from ./mysql.rb:1085:in `new'
from ./mysql.rb:1085:in `connect'
from ./t/00connect.rb:1
from test.rb:23:in `load'
from test.rb:23
from test.rb:19:in `each'
from test.rb:19

C:\Users\hogehoge\Downloads\ruby-mysql-0.2.6>

なんじゃこりゃ?

どうやら、予想では最近のMySQLは認証の方式が変わったようで、このライブラリはそのままでは、新しい方法に対応していないようである。

実際WEBをみると、ユーザのパスワードを以下のようにして、旧方式に戻せと書いてある・・

SET PASSWORD FOR <ユーザ名>@localhost = OLD_PASSWORD(<パスワード>);

なんだかなぁ・・

結局そのようにしたら、つながるようにはなったんだけど・・

ただし、rootのパスワード認証方式かえちゃうと、(未確認ながら)mysqlコマンドでログインできなくなったりしたらいやだったので、別途ユーザをつくり、そいつのパスワードを上記のようにして旧方式に変えてやりました。

あー、つかれた。

RubyとMySQLなんて、黄金の組み合わせだと思ってたんだけど、まだまだ不便な世の中ですね。

 

2007年9月 6日 (木)

Kirbybase for Ruby との格闘

勉強のため郵便番号検索RESTサービスを作りたいと思った。

仕様としてはRubyでその辺の安いホスティング環境(具体的にはlolipop)で、誰でも気軽にサービスを立ち上げられるようにしたいなと思った。

lolipopではMySQLが使えるが、まあ、共用ということもあり、うわさによると重いらしいという。

だから以前SQLiteを使おうと思ったことがあったができなかった。そこで、今回はPure Ruby なデータベースであるKirbybase を使ってみようと思ったわけだ。

http://www.netpromi.com/files/kirbybase_ruby_manual.html

数時間格闘してわかったこと:

 とりあえず、WEBでCGIでは使えませんですな・・

というのは、インデックスが実質つかえないので、パフォーマンスがぜんぜんでないため。一応インデックスの仕組みはあるのだが、メモリ上の配列として表現されるのだ。つまり、プロセスが立ち上がると、インデックスをせっせとメモリ上に構築して・・と、 CGIのように、毎回プロセスが立ち上がる用途だと、毎回インデックス生成ですよ。

ぜんぜん使えません。

頭にきたから、自分でDBMS的なものをつくりたくもなったが、そこはそれ、結構大変だと思うし、そもそも、RUBYぜんぜん初心者なので、さらに大変なわけで。。

素直にMySQLを使おうと思いましたとさ。

以上

2007年9月 5日 (水)

社員の使い方

というタイトルにしてみた。
まあ、自分は使われているほうなのですが。

最近、職場が変わって、仕事のやる気が
急速に回復してきている。

いや、以前もやる気がなかったわけではないのだが、
少なくとも「やる気」を維持するために必死に努力していた。
今はそれをしなくても自然とやる気が出てくるのだ。

何が変わったのか、考えてみた。

ちなみに、扱う題材ははWEBってことであまり変わらないが、
前職はSEで、現職は研究職である。


まず、仕事の質について。

自分は集中力が強みだと思う。
なにかに集中するととまらなくなるところは、
「平均的な人」というのがあると仮定してイメージしたとき
その人と私の大きな違いなのかなと思う。

これは、強みにもなるし、弱みにもなる。

今の、研究という職種はたぶん、この集中力ってのが
結構活きてくる気がしている。
まあ、まだ、めぼしい成果もあげていないので、
なんともいえないのだが。

いっぽう、これまでのSEという職種は、特にマネジメントとかになってくると、
気配りだとか、顧客質問にすばやく答えるだとか、障害の原因を
速やかに解決するだとか、どちらかというとイベントドリブンな
感じになるわけで、集中してしまってはいけない部分がある。
つまり「一点集中」というより「全体バランス」が求められる仕事だったと感じる。

SEはSEでも色々あるわけで、無論集中力を生かせるSE現場というのも
あるのだが、まあ、ここ1年ほどは、そういうミッションではなかったので、
非常に自分の弱みばかりが目立ってしまい正直つらかった。
 (モチベーションが保てなかった)


もうひとつ、大きな違いは、与えられた職場環境の差。
ここが、本日の本論だ。

SE時代は、 というか、ここ数年特にこの傾向は顕著だが、

・職場のPC環境がしょぼくて、
 家のPC環境のほうが断然良い。

という状況であった。

ただでさえスペックの低いノートパソコンに
セキュリティソフトだのなんだのを入れさせられて、
プログラムしていても、コンパイルするたびに数秒待たされる。。

 「家でやったほうが、いいものつくれんだろーなー」

という無意識の計算が、会社に行く気をなくさせていた部分があった
ような気がする。


その点、現職場はすばらしい。

普通個人じゃ買う気にならないようなスペックのデスクトップ
パソコンが用意されて、モニターは2枚、デュアルで使える。
あー、なんて快適なんでしょう。

以前から使ってみたかったが金欠気味の個人では手の届かなかった
数万円のソフトとかも、ほいっと用意してもらえたりして、もう、
幸せいっぱいである。

そういう状況だとどうなるかというと、
そのソフトは会社のPCにインストールするわけで、
会社でしかできない「やりたいこと」が沢山でてくるのだ。


毎晩、「よし、明日はあれを調べて、こういうの試作してみよう」だとか、
そういう風に会社にいくことがポジティブに感じられる。

以前は、毎朝、直前まで家で寝ていたかった。毎朝が苦痛だった。
今は、毎朝、自然と目が覚める。

環境が変わればここまで変わるんだと、つくづく思う。


で、タイトルに戻るんだけど、
やっぱ、私を雇用する会社のSEの使い方、ぜったい間違ってると思う。

エクセルとパワポしか作らないSEもそりゃいますよ。
でも、そういうSEだけじゃものは作れないってこと、
少なくとも、競争力のあるものは作れないってこと、
たぶん分かってない。

パワポSEは、きっとあのPCでも別にいいと思う。
でも、ちゃんと日々技術力を磨こうと、努力しているSEも少数ながら
いるわけで、そういう人にセキュリティという名目で
一律、パワポSEと同じスペックのマシンを与えて、
HDD暗号化ソフトやらなにやらを入れさせて・・・ って
それは、そういう会社にとってはありがたい人材のやる気を
これでもかといわんばかりに削いでいる。

Eclipseをつかっていて、Ctrl+Sを押してセーブしてコンパイルが走るとき、
1秒以下でレスポンスが返るのと、5秒待たされる違いって、すごい差なんだよね。

5秒またされるのが続くと、少なくとも私は眠くなってくる。
眠くなると頭が働かない。
頭が働かないと私はあほなプログラムを書く。
あほなプログラムは動かない。
動かないと私はさらに眠くなる。
・・・
そして、10分で終わる仕事は2時間、3時間、 
下手すると、バグ混入に気づかず、チームにまで迷惑かけて・・と
・・・
以下略


私の尊敬するとあるスーパーSEは、以前、自らの仕事の道具として、
自腹でハイスペックマシンを組み立ててそれを使っていた。
会社がSEに与えるのはパワポSE用PCで、それでは
仕事にならないからである。

しかし、1年ほど前だったか、会社から「セキュリティのため、個人PCの業務使用禁止」
という厳命が下った。
彼は「あれは、仕事するなっていうことなんだろうか?」と、ぼやいていた。

そのとき私は、彼の言葉を少々大げさなものと感じたものだが、
今私も、自分の仕事のやる気急回復を目の当たりにして、思うようになった。
「あれは、仕事するなってことだったのだろう」って。

PCってのは大体2年ぐらいはもつもので、高いものを買ったって、
高々30万~40万ぐらいだろう。(PCつくってる会社なので、
原価にすりゃ、その半分以下ぐらい?)

SEの人件費ってのは、2年も積み上げりゃ、2000万を超える。

そのSEの生産性(やる気等含め)はPCにかけるお金を10万増やす
だけで、いくら少なく見積もっても50%は向上すると思う。
(2倍、3倍かわってくるという感覚だが・・)

自分を雇用してくれている会社には、もっと
上手く社員をつかうようになってほしいものだ。

この会社も、昔の創業の頃の経営者は、今私の勤めている川崎区中原区にある
工場をつくったときに、以下のような旨をその設計コンセプトの一つに挙げていた。

 ・家にいるより職場にいるほうが心地よいと思えるような環境とすること。

社員に120%の力を出させる(出してもらう)ための、唯一の、
いや唯一でないかもしれないが、少なくとも最も経済的な方法だと私は思う。

2007年9月 3日 (月)

RFCの印刷方法

AtomPub のドラフトなどを読んでみようと思った。

ブラウザを開いたが読む気がしないので、印刷しようと思った。

IEを開いてプレビュー・・ 改ページがグチャグチャで、読む気にならない紙くずができそうな気がした。

Google 先生に聞いてみた。 「RFC」「 印刷」

http://www.ecom.dm.u-tokai.ac.jp/~kakizaki/mt/archives/2007/04/rfc.php

この記事に従って以下の手順で印刷したら、うまくできた。

  1. アクセサリ>ワードパッド をひらく。
  2. フォント: Courier New  9pt に設定する。
  3. 印刷したいRFC文書をコピペする。
  4. 印刷

以上。

2007年9月 1日 (土)

二子玉ガーデンアイランド

約一年ぶりぐらいで二子玉のガーデンアイランドにいった。
第一園芸はやっぱりお洒落でいい感じだった。

すべてがニコタマ価格でごめんなさいって感じだけど、
モダンインテリアに合う鉢の品揃えでは、自分の知る限りはベスト。
 
プラスチック鉢とかって個人的には全く信じられなくて、
その点ホームセンターや園芸屋の鉢コーナーの品揃えって
量があっても実質半分以下しか使えないのだけど、
ここはそうじゃない。全部が検討に値するので見ていて楽しい。


Dog Dept Cafeなるところで遅い昼食

 タコライス  \1000
 BLTサンド  \900
 メキシカンチップ \500

犬を連れて入れるカフェだが、犬なしで入ってもちょっと
お洒落でいいかなと。

でも、メキシカンチップについてるサルサがすげー少なくて悲しかった。
サルサなんかケチんなよなー・・

サルサのケチりっぷりでこの店は個人的にはもう一度入りたいとは思えなくなった。

« 2007年8月 | トップページ | 2007年10月 »

Haruya's Violin

2017年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            

最近のトラックバック

無料ブログはココログ