月別アーカイブ: 2006年6月

手嶋龍一「ウルトラ・ダラー」

ウルトラ・ダラー

ウルトラ・ダラー

訳あってしばらく小説の類は読まないようにしているのだが、久しぶりに一冊読んでしまった。どうせ読むならということで、前から気になっていた手嶋氏の本書を選択。

本書はスパイ小説、ハードボイルド小説、推理小説、経済小説といったような色々な側面を持っている物語である。扱った内容が「北朝鮮によるドル紙幣偽造」であったので、ドキュメンタリーの要素もあるんじゃないかということで各地で話題になっている模様。まだ読んでいないけれど、手嶋氏のオフィシャルサイトに様々な書評へのリンクが貼ってある。ご購入時の参考にされたし。

—–

続きを読む

日本vsクロアチア戦

例によって昨日の試合がどのように扱われているか読んでみた。

The New York Times : Scoreless in Nuremberg

Diving to his left, Japan goalkeeper Yoshikatsu Kawaguchi stopped Darijo Srna’s low drive in the 22nd minute following a takedown in the area of Dado Prso by Japan captain Tsuneyasu Miyamoto.

Croatia had the better chances in the first half and would have taken the lead if not for several good saves from Kawaguchi.

やはり川口選手の健闘は称えられている。たぶんあのPK止めたときが、昨日一番盛り上がった瞬間だっただろう。

Japan’s best chance in the opening half came when Hidetoshi Nakata rifled a long-range blast in the 37th minute that goalkeeper Stipe Pletikosa got a hand on after diving to his left.

Nakata, who took a more aggressive, attacking role than he did against Australia, was the player of the game.

ということでやはり中田英寿選手が評価を得ている模様。確かに攻撃的だった(あと三都主も攻撃的だった)。ブラジル戦、なんとか健闘して欲しいものである。

福井日銀総裁と村上ファンド

Sankei Web : 運用益、残高、保有株…20日に報告 福井総裁、正念場に

さらに、福井総裁は16日の衆院財政金融委員会で、オリックスの宮内義彦会長と「昭和10年生まれの財界人の会『初猪(はつい)会』で親しくさせてもらっている」と明かした。宮内会長は村上ファンドの生みの親。こうした人脈が解約を遅らせたとの指摘もあり、日銀総裁として曇りなき判断を行える資質かどうかも問われている。

村上ファンドだから問題になっているだけでしょ。こんなこといちいち言い出したら、経済政策に絡む人間は家も持てないことになるよ。そいつらの持ち家の価格の変動によりけりで政策決めてもらっても困るし。

豆腐ハンバーグの作り方

ときどき豆腐ハンバーグ作っているんだけど、レシピを残したことがなかったので、今後のために残しておく。

  • にんじん上半分
  • しいたけ1つ
  • たまねぎ1つ弱
  • 木綿豆腐200g
  • 牛豚合挽き350g
  • 鶏ムネひき肉90g

分量は結構適当でも大丈夫。あまり豆腐を増やし過ぎるとハンバーグとして成立しなくなるけど、それ以外はお好みで変えられる。この配分だとそこまで豆腐は多くないので、豆腐好きの方はもう少し増やしても良し。ちなみにこれで大きめのハンバーグが4から5個作れます。

にんじん、たまねぎ、しいたけは細かくみじん切りにする。それをごま油で軽く炒め、醤油を少しかけて味を付けておく。終わったらボールに入れておく。

そのボールに、牛豚合挽き、鶏ひき肉、しっかり水切りをした木綿豆腐、塩コショウを入れた後、素手でこねくり回していく。多少粘り気が出てくるまで練る。

フライパンを温め、ハンバーグを焼き始める。表裏ともに表面に焼き色を付ける。

焼き色が付くころには、ハンバーグから出た汁がフライパンに溜まっているはず。ここにハンバーグが浸かるくらいまで水を足し、

  • 醤油大さじ3杯
  • みりん大さじ1杯
  • 日本酒大さじ1杯
  • 追いがつおクッキングだし1杯
  • 出汁のもと適量

を入れ、ハンバーグを煮込んでいく。煮込みすぎても固くなったりはしないので、しっかりと味が付くまで煮込む。

煮込み終わったらハンバーグを皿に移す。残った煮汁に、水で溶いた片栗粉を入れ、どろどろのソースを作り、それをハンバーグにかける。

出来上がり。

すごく簡単なので、どなたでもトライできます。

PythonにおけるOOPのやり方

初めてのPython 第2版

現在第6部「クラスとオブジェクト指向プログラミング」を読んでます。OOPの基本的なことは知っているので、Pythonではどうやるのかという部分を学ぶ。とはいえ演算子のオーバーロード、多重継承など、大事そうだが知らない言葉が色々と出てきている。

例によって、色々試すために簡単な例を書いてみた。

myfirstclass.py

class MyFirstClass:
def __init__(self,title='default'):
self.title = title
def showtitle(self):
print self.title
class MySecondClass:
def showminchar(self):
print min(self.title)
class MyFirstSubClass(MyFirstClass, MySecondClass):
def __add__(self,other):
return MyFirstSubClass(self.title + other)
def __mul__(self,other):
return MyFirstSubClass(self.title * other)
def showtitle(self):
print 'The title is %s' % (self.title)
def getlength(self):
return len(self.title)

__init__というのがいわゆるコンストラクタ。Pythonでは「演算子のオーバーロード」の一種とされているようなので、コンストラクタが実行される際の演算に使われるもの、というのが正しいのかも。__add__というのは+演算子をオーバーロードしている部分で、これによりMyFirstSubClassのインスタンスに+演算を行うことが可能になる。__mul__は*演算子に対応しているもの。

MyFisrtSubClassは、MyFirstClassとMySecondeClassの両方から継承しているサブクラスである。このように多重継承すると、メソッド等は左側から順に採用されるらしい。

実行結果。

>>> Instance1 = MyFirstSubClass('Python')
>>> Instance1.showtitle()
The title is Python
>>> Instance1.getlength()
6
>>> Instance2 = Instance1 + 'GoGo!'
>>> Instance2.showtitle()
The title is PythonGoGo!
>>> Instance3 = Instance2 * 3
>>> Instance3.showtitle()
The title is PythonGoGo!PythonGoGo!PythonGoGo!

多重継承や演算子のオーバーロードがどのように役に立っていくのかはまだ想像できていないのだが(__init__は別として)、クラスのインスタンスをビルトインオブジェクトと同じ形式で演算出来るということは、コードの可読性を高めることには繋がるのかもしれない。

なんにせよ、与えられた道具は上手く使って素晴らしいコードを書きたいものである。

大前研一「即戦力の磨き方」

即戦力の磨き方 (PHPビジネス新書)

即戦力の磨き方 (PHPビジネス新書)

以前にも取り上げた本書ですが、ちょっと空いた時間に読むために買ってみました。

やはり結論から言うと、大前氏はいつもと同じ事を言っていた。ホリエモンが取り上げられたりしているのに時代を感じるけど、初めて大前氏の本を読んだ何年か前とほとんど一緒の内容なのだ。大前氏がこれほどハイペースで本の出版が可能なのも、根底にあるアイデアは常に同じで、それを飾り付ける言葉やエピソードが違うだけだからなのだろう。同じことが和田秀樹氏にも言えそうだ。

とはいえ大前氏が繰り返し叫んでいる内容は、日本人ビジネスマンは真摯に受け止めるべきである思う。今回も明確に

  • 英語力
  • 財務力
  • 問題解決力

を身に付けるべしと論じている。特に英語に関しては僕も同意見だし、財務力(財務感覚と言ったほうが良いかも)は欧米に比べると日本人はまったく持っていない。自戒も込めてこれは事実だと言っておきます。問題解決力はつまるところ論理的思考能力、事実に基づいて論じる能力、ディスカッションする能力などのことを指しているようで、これも日本人に足りないところ。

あと本書では論じていないけど、「行動力」っていうのも大切かつ、日本人に不足している能力だと思う。コンビニで働いている中国人を見ると本当にそう思う。

日本独自の検索エンジン

Yahoo!ニュース:<検索エンジン>日本の30社・機関が独自開発へ

日立製作所や富士通、NTTなど電機、情報通信大手と東京大など国内の約30社・機関が共同で、日本独自のインターネット情報の検索エンジンの開発に乗り出す。16日にも研究組織を発足させ、2年以内の実用化を目指す。国も予算面などで支援する。
 検索エンジンは、インターネット上から必要な情報を探し出す検索サイトに使われている中核技術で、ネット情報の利用に不可欠。しかし、米国企業のグーグル、ヤフー、マイクロソフトの3者が市場をほぼ独占し、技術も公開していないため、ネット社会での情報の恣意(しい)的な管理や、日本企業の事業機会が失われることが懸念されていた。

こういうことを日本独自に行うというのは喜ばしいことであるが、出来るのかどうかが問題だ。誰がリーダーシップとって、どんな開発者が開発するのか分からないけれど、国が人選をするのでは多少不安。

共同開発するのは、検索エンジンの基礎部分。開発した技術は国内外で広く公開し、企業がネット広告や検索サイト運営など、それぞれの事業に合った形で利用できるようにする。利用者が部分改良を提案するなど、技術革新が進むことも期待できる。

これだけ読むと完全にGoogleを意識しているようですね。レイヤー0の部分から研究することによって、彼らよりも優秀な検索エンジンを開発できる可能性はあるだろうけど。

いずれにせよ、今後要チェックやわ。

追記:

CNET Japen : 「Google独占にはさせない」–国産検索エンジン開発へ、産学官が一致団結

プロジェクトの名前は「情報大航海プロジェクト・コンソーシアム」。7月設立予定で、国産の情報検索・解析エンジンを開発する。日立製作所やNEC、富士通といった企業のほか、早稲田大学や東京大学などの38団体が参加する。3〜5年後の実用化を目指す。

またすごい名前になったもんだな。

コンソーシアムでは開発した検索エンジンをオープンソースとし、広く公開していく考え。参加企業はこの技術を元にしたサービスを独自に開発して提供できる。

「参加企業は」の「は」が気になるんですけど、とすると参加していない企業はこれを元にしたサービスを独自に開発して提供できないのかな。それってオープンソースじゃないんじゃ。

すごく簡単なソケット通信をやってみる

Foundations of Python Network Programming

タイトル通りだけど、ほんとに単純なソケット通信をやってみる。本当は通信をする際には例外処理や終端文字指定、スレッド処理などたくさんやらなければならないことがあるのだが、それは少しずつ実装することにして、まず基本からやろう。

今回はサーバ側とクライアント側を想定して二つのプログラムを作った。同じPC内でポート番号15000を使って通信をする。クライアント側はタイプされた文字列を次々にサーバ側に送り、サーバ側は受け取った文字列を表示するだけである。その内容は以下のようにしてみた。

simpleserver.py

import socket
host = ''
port = 15000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(1)
print 'Waiting for connections...'
clientsock, clientaddr = s.accept()
while 1:
rcvmsg = clientsock.recv(1024)
print 'You received -> %s' % (rcvmsg)
if rcvmsg == '':
break
clientsock.close()

simpleclient.py

import socket
host = 'localhost'
port = 15000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
while 1:
print 'Type message you want to send...'
msg = raw_input()
if msg == '':
s.close()
break
s.sendall(msg)

listen(1)というのは、処理がマルチスレッドではないとして、いくつまでクライアントを待たすことを許すのか、という設定らしい。今回は1つだけ許すということになる。recv(1024)というのはソケットからデータを10KBだけ読み取るということ(今回は問題になりませんが、もしこのプログラムで10KBを超える文字列を送信すると、上手くいかないはず)。

サーバ側を先に実行し、クライアント側を次に実行する。幾つかの文字列を入力した実行結果は以下。

実行結果(クライアント側)

C:\Python24>python.exe simpleclient.py
Type message you want to send...
Hello world!
Type message you want to send...
I love you!
Type message you want to send...
Python is a great language.
Type message you want to send...

実行結果(サーバ側)

C:\Python24>python.exe simpleserver.py
Waiting for connections...
You received -> Hello world!
You received -> I love you!
You received -> Python is a great language.
You received -> 

特に問題なく送れているようです。今後はこれを基に色々と処理を追加していこうかな。

csvファイルをディクショナリで扱ってみる

初めてのPython 第2版

そう言えば、まだディクショナリを使ったことがなかった。いまいち使うシーンが想像できなかったので使ってなかったんだけど、無理やりcsvファイルを扱うことに対して使ってみます。

以下のモジュールreadcsv.pyはファイルemp.csvを読み込み、時給×労働時間をデータごとに計算するという簡単なプログラム。

readcsv.py

def readcsv(filename):
L = [line[:-1] for line in file(filename).readlines()]
return map((lambda s: s.split(',')),L)
csvlist = readcsv('emp.csv')
for line in csvlist[1:]:
empdict = dict(zip(csvlist[0],line))
payment = int(empdict['WAGE']) * int(empdict['HOURS'])
print empdict['NAME'],'->',payment

まずreadcsv関数の中では、csvファイルの各行を行末の1文字(改行記号)を抜いた形で取得し、それぞれの行をカンマで分割してリストにする。返り値は「各行が要素となっているリスト、が要素となっているリスト」になる。ここでは練習のために、リスト内包表記を使ってみた。

実行部では、先ほど作ったリストの1番目の要素(ヘッダー)、と2番目以降の要素を

empdict = dict(zip(csvlist[0],line))

という部分でディクショナリ化する。あとはそれぞれの要素にヘッダーの名前でアクセス出来るようになるので、それを使って給与計算を行い結果を出力している。この方法であれば、CSVファイルのカラムの順番などにも影響されない処理が組めるはず。

emp.csv

NAME,WAGE,HOURS
John,1000,8
Tom,1200,9
Jack,1100,8
Nick,1200,9
Shelly,1200,7
Bill,1000,8
David,1100,9
Ron,1000,8
Kate,1000,9
Mary,1100,9

実行結果。

John -> 8000
Tom -> 10800
Jack -> 8800
Nick -> 10800
Shelly -> 8400
Bill -> 8000
David -> 9900
Ron -> 8000
Kate -> 9000
Mary -> 9900

これと同じ方法で、DBからSQLにて取ってきたデータの処理も出来るはずだ。

モジュールについて勉強中

今は初めてのPython 第2版の第5部「モジュール」を勉強中なので、あまりコードを書く例がない。Pythonはリロードなどによりダイナミックにシステムの修正や改善を行えそうです。モジュールをディレクトリに分けるときは__init__.py作らなければいけないというのは忘れないようにしないと。

そろそろモジュール分けが必要になるくらいの、少し大きめのプログラムを組んでみてもいいかも。

この本もこの後はオブジェクト指向や例外処理の話になってくるので、Python特有と思われる部分の学習は終わりに近づいてきているのかな。そろそろ次のレベルに進みたいな。