2006-09-29 21:27:15

1年ぶりにアレを再開

テーマ:Python
アレとはこれ。恋するプログラム

¥2,500
株式会社 ビーケーワン

前回はどこまでやったのかも忘れたけど、JavaとRubyの違いとTDDに力を費やして力尽きてしまったが、今回はPython使うので。

あと、面白そうな部分だけ実装することにする。

形態素解析マルコフモデルや、Google APIの辺りを適当に組み合わせる予定。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-29 21:07:10

ftplibを使う(2)

テーマ:Python
やっぱり機能のコードは間違っていた。

def rnlst(ftp, base_dir, sub_dir='.'):
ret = []
items = []
ftp.dir('/'.join(base_dir,sub_dir), items.append)
for i in items:
if i[0] != '-' and i[0] != 'd': continue
item = (i[0], '/'.join(sub_dir,i.split()[-1]))
if item[0] == '-':
ret.append(item)
else:
sub = rnlst(ftp, base_dir, item[1])
if len(sub) > 0:
ret.append(item)
ret += sub
return ret


とはいえ、手元にすぐ使えるFTPサーバが無いので、やっぱり試していないわけだけど。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-29 02:32:36

ftplibを使う

テーマ:Python
今日、都合によりrcpが通らないサーバがあり、サーバ管理者にも手が届かないので、pythonとftpで何とかすることにした。

最初は、ライブラリリファレンスを見ながら、対話モードでftplibを使う。

>>> from ftplib impot FTP
>>> ftp=FTP('xx.xx.xx.xx')
>>> ftp.login(user,password)
>>> ftp.dir()
-rw-rw-rw- ..............
.............................................

比較的簡単にFTPを動かせた。

ファイルの取得もドキュメントどおり、

>>> ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
>>> ftp.quit()


再帰的にファイルを取得するための関数を書く

>>> def rnlst(ftp, base_dir, sub_dir='.'):
... ret = []
... items = []
... ftp.dir( '%s/%s' % (base_dir,sub_dir), items.append)
... for i in items:
... if i[0] != '-' and i[0] != 'd': continue
... item = (i[0], '%s/%s' % (sub_dir,i.split()[-1]))
... if i[0] == '-':
... ret.append(item)
... else:
... sub = rnlst(ftp, base_dir, '%s/%s' % (sub_dir,item[1]) )
... if len(sub) > 0:
... ret.append(item)
... ret += sub
... return ret


こんな感じだったかな?記憶だけで書いているので間違っている気もする。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-29 02:18:16

誰もそれ(IT)のことを分かってくれない(2)

テーマ:雑記
続きです。一つの記事だとどうしても投稿できなかったので。


ITの仕事をずっとしていると、こうした恐ろしい状況に慣れてしまいかねませんが、IT産業以外に目を向けて見ましょう。私達ユーザーは、自動車を買う場合、その車がカタログ性能どおりに動かないということを心配する必要はありません。ましてや、納入された車のキーを回して、エンジンがかからないなんてことは想像もしませんし、実際そうしたことはまず起こらない。100万円で契約した車が、途中で200万円になったり、1000万円になったりするなんてことは考えもしませんし、そんなことは絶対にない。


日本車は比較的優秀だから例えに出されるのですが、カタログ性能どおりに動かないことがよくあってリコールが起きているように見えます。また、100万円で買った車で、事故を起こして1億円になることを想像しないのもどうかと思います。

え?事故を起こすのは運転手の責任?

実際、今のIT業界の能力でも、大抵の機能は思ったとおりに動くシステムは構築できると思います。しかし、ITシステムは各サブシステムが密接に関連しすぎていて(まさしくそれが『こんぴゅーた』を使う利点でもあるのですが)一部の機能が思いもしない動きをするために全体を駄目にしてしまいます。
そして、それを避けるという無謀な目標のために、設計が膨らみ、要求仕様が多岐にわたり、複雑性が爆発するのでしょう。


しかるに、あえて苦言を申し上げますが、現状ではIT産業のプロフェッショナリズムに疑問符を付けざるを得ません。我々から見たときに、経験が浅い、これではマネジャとは言えないという人がプロジェクトマネジメントをやっています。がっかりするくらいスキルのない人が平気で現場にやってくる。そもそも、ユーザーと要件をきちんと定義しようという気概も姿勢もないし、開発が始まっても現場の状況を把握できていない。


要するにそんなベンダに懲りずに発注しているのが、諸悪の根源なんではないでしょうか。
悪いと思うなら発注しない、プロフェッショナルはそれ相応の値段がすることを理解し、悪かろう安かろうは数売って打率を稼ぐ。

ITじゃないからって安心は出来ません。業者を甘やかせば、ビルだってエレベータだって品質は下がるのです。
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-29 00:07:31

誰もそれ(IT)のことを分かってくれない

テーマ:雑記
経営者がITを理解できない本当の理由

いままで散々言われてきたことなのだから、何をいまさらって感じがするが、ところどころ突っ込むと。


なんとも歯切れが悪い説明です。当然、経営者から「本当にそれだけの予算で収まるのか」と質問が出ます。ここでも正確に答えるようとすると、「先ほど述べた金額はあくまでも見通しであります」となって、さらに経営陣を悩ませてしまう。正直に書けば、実際にはここまで丁寧には言いません。こんな説明をしていたら、予算を獲得できず仕事を進められませんから、腹をくくって「大丈夫です。何年何月には絶対に稼働させます。費用は何十億円、これ以上、一銭もかかりません」と言い切ります。言い切りますけれど、実態はどう頑張ってみても、本当にこうなるかどうか解らない。そういった状況で、我々は経営トップを説得し、仕事を進めなければいけないのです。


こんなことで腹をくくってるから、そして、それで失敗しても許してくれるから、誰もわかってくれない、わかる必要がない業界になってしまったんじゃないだろうか?


日本において「品質、納期、コストの3点ともクリアーできた開発プロジェクトは26.7%」だそうです。つまり「73.3%の開発プロジェクトが成功していない」ことになります。


つまり、最初から平均打率2割5分なわけです。
平均10割に近づけたいなら、4つも5つもプロジェクトを並行させる必要があるということです。
それを最初から計画に盛り込まないから、「絶対完成させる」とか「バグは0が必須」とか「命に係わるシステムだから間違いは許されない」とか言ってしまうのです。
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-21 00:00:35

Python 2.5

テーマ:Python
Python 2.5がリリースされました。
勢いでダウンロードはしたけど、日本語ドキュメントが出るまで様子見するかな?

http://journal.mycom.co.jp/news/2006/09/20/340.html
パフォーマンスも向上しているそうですが、今の使い方だとあまり関係ないし。
いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-18 10:24:25

急にアクセスが増えたのは

テーマ:Python
http://djangoproject.jp/djaboo/に載ったからか?

たいした情報が無くてすみません。


いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-15 00:51:01

デコレータ

テーマ:Python
地味に一人か二人は見てくれているのだろうか?

この間、作った関数の処理時間を知りたくなって、もっとも簡単な方法は、単に時間を計ることだと、Python IAQに書いてあったので、デコレータにしてみた。


def timer(fn, *args):
"Time the application of fn to args. Return (result, seconds)."
import time
start = time.clock()
return fn(*args), time.clock() - start

>>>timer(max, range(1e6))
(999999, 0.4921875)


これを元に、timerを高階関数にする。

def timer(fn):
"Time the application of fn to args. Return (result, seconds)."
def __timer__(*args,**kwargs):
import time
start = time.clock()
fn(*args,**kwargs)
return time.clock() - start
return __timer__


こう使う

>>>timer(max)(range(1e6))
0.4921875

関数の方が実行時間しか返さなくなったのはご愛嬌だ。

いいね!した人  |  コメント(0)  |  リブログ(0)
2006-09-07 21:55:06

プログラミングの問題

テーマ:Python
詳しくはこちらを参照として、以下のような問題。

数の並びがある。 最初の数は、続く数を何個集めるかを表す。 それに続いて、与えられた個数分の数をまとめたら、 次に出てくる数は、最初と同様、何個集めるかを表す数である。 このような並びの数を与えて、 指定されたように数をまとめた状態にするプログラムを作れ。


2chで見たような気がする。


def are(x):
q=list(x)
while len(q) > 0:
a=q.pop(0)
if len(q) < a:
raise StopIteration
yield tuple(q[:a])
del q[:a]

print list(are([1, 5, 3, 55, -45, 6, 2, 8, 7, 0, 1, 2]))
print list(are([1,2,3,4]))


もうちょっとすっきりしそうな気もするけど。
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。