2007.05.01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

MHI 5.0

この「にっき」には暴力シーンやグロテスクな表現が含まれています。

(2007.05.01)

$ [wifky]「はてブ」プラグインで、チルダ(〜)が入ると化ける件に対応

EUC-JP に変換できない文字は、実体参照にするよう、Encode::from_to に引数追加。 ついでに、Socket モジュールから、IO::Socket モジュールへ変更。 ソースすっきり。 LWP使えば更にすっきりするのだろうが、どこでも入っているわけではないので使わない。

でも、はてブ-プラグインって、そもそも自分しか使っていない悪寒。

$ [python] TCPScoket の Python 版を書いてみた

import socket

class tcpsocket:
    def __init__(self,host,port):
        self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.socket.connect( (host,port) )
        self.fd = self.socket.makefile()
    
    def write(self,s):
        self.fd.write(s)
        self.fd.flush()
    
    def __iter__(self):
        return self.fd.__iter__()
    
    def close(self):
        if self.fd :
            self.fd.close()
            self.fd = None
        if self.socket : 
            self.socket.close()
            self.socket = None
    
    def __del__(self):
        self.close()

if __name__ == '__main__' :
    http = tcpsocket('www.yahoo.co.jp',80)
    print >>http,"GET / http/1.1"
    print >>http,"Host: www.yahoo.co.jp"
    print >>http,"Connection: close"
    print >>http,""
    for line in http:
        print line,
    http.close()
    del http

使い方は、if ブロック以下のテストコードを参照。

これくらいの簡単なラッパ、標準で用意しておいてくれたらいいのに。


ふと思ったが、Python には、ストリームという概念がないね。

Ruby とか Perl も無さそうだけど、メソッド名を合わているので、 結果的に、どの I/O も同様に扱える。

でも、Python の socket は send/recv で read/write が無いから、そうもいかない。 makefile() というメソッドで、ファイルオブジェクトに変換できるけど… それって File I/O であって、ストリーム I/O ぢゃないんだよな。

Python って、きっちりとしてそうに見えて、 Java や C++ ほど、きっちりしてなさそうなところが時々垣間見えね。


まぁ、UNIX的には、ファイルというものが、そもそも物理的なディスクファイルではなくて、 I/O対象全部をパスという名前をつけて抽象的に表現したものだから、 事実上、支障ないとも言えるんだけども。

この辺、Java だと、ファイル=ディスクファイルである Windows を含めてって 話になるので、ファイルとは別にストリームというのを明確に 定義しておく必要があったのかもしれない。

でも、C++ にもストリームあるよね。 つーか、文字列ストリームとかもあるじゃん。 むむむーん。

$ 調べたのと検索したのは違う

「△△をしたいので、○○のことを調べて欲しい」とお願いして、 幾つかの URL とか、コピペとか送ってくる人がいる。

それ調べたことになんねぇ

お願いする時に、どういう目的で○○の情報を知りたいかというのはちゃんと 伝えてあるのだから、その目的にかなった形で:

  • どう判断したらいいのか
  • どうすればいいのか

などの結論(正確には推奨かな)を簡潔にまとめて欲しいのだ。 でないと、結局、こっちがその内容を読んで、吟味して、どう使うかを考えなくてはいけない。 (実際、この手の人は、吟味したり、判断するのは自分の仕事ではないと考えているフシがある)

そうやって、その調査に関するトータルの作業全体を見渡すと、 その人がやったことというのは、実は「検索の代行」だけであることが分かる。 ググるだけなら、自分でやった方が早い。


さて、もし、ここで短絡的に判断を下すならば、 そういう人は「使えない人」の烙印を押すことになるだろう。

が、本当はそうであってはいけない。 実体としては、実はこっちが「使わない人」だったりするのだ。 そういう仕事をするよう、そういう仕事の仕方があたり前だと考えるよう、 その人に説明しなくてはいけない。それが教育ってもんだ。

が、こんな新人に諭すべきようなことを、年長者に言うのは嫌だし、 わしはそんな他人の将来を考える程、親切な人でもないので、 結局「お疲れ様」といい顔して、自分でやっちまう。

あー、やだやだ。


自分が、言われたことしかしない人に対して甘いのは

  • 自分のことは自分でする
  • 正しい仕事をしてもらうには、正しい指示をしなくてはならない

という条項がかなり強く自分にプログラミングされているからだ。 だから、ついつい、丁寧な指示+御膳立てに近い用意をしてしまう。

これってちゃんと仕事をする人に対して失礼になってしまうことがある。 だから、本来、改めるべきなんだけど、なかなかそうもいかない。

困ったもんだな。

$ 久し振りに UO をやったわけだが

なんだか、巨大パッチが当たった日らしい。 50MB のサイズのパッチがダウンロードされた。

掲示板などを見たところ、どうやら、今まで誰でも入れたヘイブン *1 に、上級者は入れなくなったらしい。 ルーン*2でも行けなくなっている。

かわりに登場したのが、ニューヘイブン。 なんだか、かつてヘイブンがあったと思わしき旧市街にはゾンビやスケルトンがうようよして、 隣接するところに新しい町が建設されている。

旧市街は壁とかで閉鎖されているのだが、船を使えば入れるようだ。 が、入ったところで別におもしろくなかった。 ここには弱いモンスターしかいないが、閉鎖領域だけに、 もし万が一死んでしまった時、たすけてくれる人がいないだけに復活がやっかいなので、 早々に撤退。

あと、グラフィクスが悪くなった。地面タイルの数が減ったのか、 グラデーションしていた芝生と道路の境界線が、方眼紙になってしまっている。 新クライアントへの移行期だけかもしれないが、かなり顰蹙を受けているようだ。 他にも表示が乱れているところもあるしね(扉を開くと壁だったり)

*1初心者向けの島。だが、ベテランも屯していて、問題視されていた

*2場所を記憶してワープできるアイテムである

yato 中間的な層は飛ばしてアプリケーション層でラッピングしてあるというかなんと言うか
http://www.python.jp/doc/release/lib/internet.html (2007/05/02 01:56:27)

iyahaya 使いたいのは別に http とか ftp じゃないんですよね。C/S システムで専用のソケットサービスが上がっているので、それを叩くことが多いのです。 (2007/05/02 04:13:35)

yato twistedってネットワークプログラミング向けのライブラリが有って、良いらしいとは聞くんですが、どうでしょうね。
コネクションが切断された場合とかが予め想定されているので、がっちりしたサーバやクライアントを作るにはよさそうな気配。
覚えるのが大変そうなので私はちゃんと使ったことは無いですが。 (2007/05/03 19:16:07)

iyahaya いや〜、そんな大層なことをしたいわけじゃないんですけどね。 (2007/05/03 23:10:29)

(2007.04.30) | (2007.05.02)

.net(3) C++(3) Cygwin(12) GAME(3) Groovy(1) Linux(2) Lua(39) Mercurial(13) NYAOS(92) OS/2(7) Oracle(3) Perl(4) Python(22) SKK(4) Windows8(1) album(68) ckw(10) coLinux(1) vim(6) wifky(27) 書評(21) (9)

zetamattaのたいじゅー