2005-05-31

Panasonic R4 購入

Panasonic R4 を購入しました。シャープのちっこいPCの予定だったのですが、キー入力しやすさでこちらにしました。



2005-05-23

ノートPCのHDDを交換

30GBでは心もとないので80GBのに交換しました。ヨドバシカメラの通信販売で購入すると注文から24時間以内に届きました。便利だ。イメージバックアップのソフトがついていたのですが、いい機会なので最初からインストールしなおしました。



ノートPCのHDDを交換

30GBでは心もとないので80GBのに交換しました。ヨドバシカメラの通信販売で購入すると注文から24時間以内に届きました。便利だ。イメージバックアップのソフトがついていたのですが、いい機会なので最初からインストールしなおしました。



xyzzy とか、Cygwin が使える状態になったところで、イメージをバックアップ。これで安心。たぶん。



2005-05-22

ビジネスクラス

満席だったらしく、登場直前にビジネスクラスに格上げされました。最近の飛行機はビジネスの席が多いので、あまり選民意識を刺激されません。



今まで飛行機に乗った回数なんか、たかが知れているのですが、ビジネスクラスに上げてもらえたのは3回目です。コツは、こ綺麗な革靴とジャケット着用のこと。サンプル数が少ないので、眉唾ですが。



2005-05-13

Windows PC

今回の出張の意図は、Windows で動作するドライバと、ドライバが読み込むスクリプトファイル(のようなもの)の書き方を学ぶ、です。パソコンは現場で用意されているのですが、念のために自分のノートパソコンを持ってきています。で、思うことは、いざとなったら自分は Windows なのだなぁということです。



普段は iBook しか使っていないくて、今この文章を書いている Windows PC はほったらかしだったのに。Emacs だぜとか、Unix ベースだぜなんていうのは、私にはどうでもよいことらしいです。xyzzy と cygwin でよいのです。xyzzy の最大の欠点は py-mode が使いにくいということです。



というわけで帰国したら、Windows PC 購入計画を立てようっと。



TODO: coLinux も調べること。



2005-05-11

空港でのアナウンス

空港で流れる放送で、きちんと録音されているときには、聞き取りやすい声で、ゆっくり丁寧な感じです。ところが、ゲート前に行くと、めっちゃ投げやりな感じで、早口で、話すことを決めてから話せよ、みたいな感じの声になります。機内に入っても、機長さんやアテンダントの放送は聞き取りにくいです。ゆっくり話すだけでいいのに。



で、この流れでいくと、最近ナウなヤングに人気のJRたたきに入ってもいいわけですが、まあ、そうではなく。若い声の車掌さん、女性の声の車掌さんのアナウンスは聞き取りやすい傾向があります。鉄道会社問わず。



漫才師の中川家の弟の人がやるような感じなのは、もう、習慣でああやるのが当然みたいなのでしょう。それにしても、京阪電車の車掌の真似は上手だと思います。あの悩ましい感じ。



出張

気をつけないといけないこと。



1. テキサスでは、自動車は右側通行

2. テキサスと大阪では、エスカレーターで立つ人は右



生まれて初めて、日本以外で自動車を運転しました。どきどき。左右を間違えることはありませんでしたが、ウインカーのレバーが左についていることと、シフトレバーが右側にあるのがちと違和感。



運転技術よりも、道に迷ったほうが痛かったです。



2005-05-09

Job Shadowing

ジョブシャドウイング というのがあるらしい。生徒が社会人についてまわって観察するとか。



思い出したのが、兵庫県の中学生がやってるトライやる・ウィークです。1週間ほど労働体験をします。就労研修だっけ。フリーターやっていたときに勤めていた本屋さんに、中学生が来ていました。ジョブシャドウイングがただ一緒にいるだけなのに対して、トライやるウィークは仕事します。



兵庫県のページには「生徒の生き方や夢を引き出そう」とか書いてあって、うわぁ、すごいなぁと思ってしまいました。確かに、私のように泥にまみれながら、実家の農作業を手伝う中学生活よりは、夢を引き出せるとは思いますが。



2005-05-08

最近の失敗

人生そのものの失敗に目をつぶると、最近の失敗は以下のとおり。



通信販売で同じ本を2冊買ってしまいました。すでに所有している本を、書店で購入することはありますし、別に失敗だとは思いません。しかしながら通信販売というのは情けない話です。Straustrup の C++ の本です。「あなたは、その本を買っていますよ、本気でまた買う気でですか?」と警告を出してほしいところです、あまぞんさん。そんな警告が出たら、出たで、文句言うんでしょうね。



VNC を使用中、リモート側のコンピュータで VPN しようとすると、VNC の接続が途絶えてしまって焦りました。



ビフォーアフターの CD を買ってしまったこと。



このブログのスタイルシートを変更したものの、センスがないのできれいにならない。



2005-05-06

関数からグローバル変数を使うとき


x = "Hello"
def hoge():
x = "Bye"
hoge()
print x


上のスクリプトを実行すると、「Hello」 と表示されます。変数 x を書き換えたつもりなのに。次のスクリプトのように global で、グローバル変数であることを明に指定すればよいです。だから、グローバル変数を使うな、と。




x = "Hello"
def hoge():
global x
x = "Bye"
hoge()
print x


2005-05-05

Ajax 通信用の http メソッドを定義する

Simple Ajax Toolkit SAJAX というのを見つけました。クライアント側の HTML も、サーバで生成してしまうライブラリで、Perl、PHP、Ruby、Python などのスクリプトが入っています。ASP とか JSP とか PHP とかで作ったウェブアプリケーションなどでは、当然、こうなりますね。全部サーバ側で管理できるので、Model/View/Contorl 的な書き方もできます。



で、SAJAX を使うのかと見せかけて、結局使わないで、ちまちま書いています。




# サーバ
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer
import socket

class Server(HTTPServer):

# 動作中に Ctrl+C で停止させたあと、再び実行しても

# ポートが使用中ですとかいうエラーがでないように、オーバーライド。

def server_bind(self):

self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

HTTPServer.server_bind(self)



# 標準ライブラリの SimpleHTTPRequestHandler を継承します。

# QUERY メソッドのハンドラを追加します。Ajax で使うのは、このメソッド

# GET メソッドはデフォルトのまま、ファイルの内容を返す。

class Handler(SimpleHTTPRequestHandler):

def do_QUERY(self):

self.send_response(200)

self.send_header("Content-type", "text/html")

self.end_headers()

try:

content = query(self.path[1:])

except Exception:

content = ""

print >>self.wfile, content




// クライアントの JavaScript
var req;

function query() {

// Ajax 通信用に QUERY メソッドでデータを送信する。

asyncCall("QUERY", document.ui.inputString.value, myCallback);

}



function asyncCall(method, url, callback) {

if (window.XMLHttpRequest) {

req = new window.XMLHttpRequest();

req.onreadystatechange = callback;

req.open(method, url, true);

req.send(null);

} else if (window.ActiveXObject) {

req = new ActiveXObject("Microsoft.XMLHTTP");

if (req) {

req.onreadystatechange = callback;

req.open(method, url, true);

req.send();

}

}

}



2005-05-04

JavaScript でまともに XMLRPC すると遅いかも

昨日、Ajax で受け渡しするデータ構造を XML-RPC にしてしまおうと、うれしそうに書きましたが、これは結構遅いようです。vcXMLRPC ライブラリが遅いのかも知れません。FireFox on iBook G4 で、非同期呼び出しのスタートに1秒ほどかかることがあるので、ユーザーインターフェイスがブロックされるのが体感できます。本気の XMLRPC ライブラリが必要なわけではないので、ad hoc な変換でよいかも知れません。いずれにしても、Google Suggest と比べて遅すぎです。



JavaScript でまともに XMLRPC すると遅いかも

昨日、Ajax で受け渡しするデータ構造を XML-RPC にしてしまおうと、うれしそうに書きましたが、これは結構遅いようです。FireFox on iBook G4 で、vcXMLRPC ライブラリの非同期呼び出しのスタートに1秒ほどかかることがあるので、ユーザーインターフェイスがブロックされるのが体感できます。Google Suggest と比べて遅すぎです。本気の XMLRPC ライブラリが必要なわけではないので、ad hoc な変換でよいかも知れません。



2005-05-03

Ajax と XML-RPC

HTTPをしゃべるアプリケーションがあって、ユーザインターフェイスは Ajax というのを考えています。このとき Ajax が送受信するデータ構造に XML-RPC というのは、どうでしょう。って、みんなやってそうですが。



JavaScript の XML-RPC のライブラリにはいくつかありますが、vcXMLRPC というのを使いました。クライアントはこれでおっけーです。問題は JavaScript では自分自身と同じドメインからでないと、データを読み込めないことです。



そういうわけでサーバ側でなんとかしましょう。Python の標準ライブラリに入っている SimpleXMLRPCServer.SimpleXMLRPCRequestHandler を使います。これは POST メソッドが来たときには、XML-RPC の要求が来たと解釈して、あらかじめ登録しておいた関数を実行し、結果を送り返します。これに do_GET() メソッドを追加して、GET メソッドが来たときにはパス名で示されるファイルの内容を返すようにしました。




# XML-RPC / HTTP サーバ
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler

class Server(SimpleXMLRPCServer):

def __init__(self, *args, **kw):

SimpleXMLRPCServer.__init__(self, *args, **kw)

self.register_function(self.hello)



def hello(self):

return "Hello"



class Handler(SimpleXMLRPCRequestHandler):

def do_GET(self):

self.send_response(200)

self.send_header("Content-type", "text/html")

self.end_headers()

try:

content = file(self.path[1:]).read()

print >>self.wfile, content

except Exception:

print >>self.wfile, ""



if __name__ == "__main__":

server = Server(("localhost", 9000), Handler)

server.serve_forever()



↓こっちがクライアント側の HTML と JavaScript



<html>
<head>
<title>Foo</tiele>
<script language="javascript" src="vcXMLRPC.js"></script>
<script language="javascript">
function run() {
result = XMLRPC.call("http://localhost:9000", "hello");
alert(result);
}
</script>
</head>
<body onload="run()"></body>
</html>


Ajax と XML-RPC

HTTPをしゃべるアプリケーションがあって、ユーザインターフェイスは Ajax というのを考えています。このとき Ajax が送受信するデータ構造に XML-RPC というのは、どうでしょう。って、みんなやってそうですが。



JavaScript の XML-RPC のライブラリにはいくつかありますが、vcXMLRPC というのを使いました。クライアントはこれでおっけーです。問題は JavaScript では自分自身と同じドメインからでないと、データを読み込めないことです。



そういうわけでサーバ側でなんとかしましょう。Python の標準ライブラリに入っている SimpleXMLRPCServer.SimpleXMLRPCRequestHandler を使います。これは POST メソッドが来たときには、XML-RPC の要求が来たと解釈して、あらかじめ登録しておいた関数を実行し、結果を送り返します。これに do_GET() メソッドを追加して、GET メソッドが来たときにはパス名で示されるファイルの内容を返すようにしました。




# XML-RPC / HTTP サーバ
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler

class Server(SimpleXMLRPCServer):

def __init__(self, *args, **kw):

SimpleXMLRPCServer.__init__(self, *args, **kw)

self.register_function(self.hello)



def hello(self):

return "Hello"



class Handler(SimpleXMLRPCRequestHandler):

def do_GET(self):

self.send_response(200)

self.send_header("Content-type", "text/html")

self.end_headers()

try:

content = file(self.path[1:]).read()

print >>self.wfile, content

except Exception:

print >>self.wfile, ""



if __name__ == "__main__":

server = Server(("localhost", 9000), Handler)

server.serve_forever()



↓こっちがクライアント側の HTML と JavaScript



<html>
<head>
<title>Foo</tiele>
<script language="javascript" src="vcXMLRPC.js"></script>
<script language="javascript">
function run() {
result = XMLRPC.call("http://localhost:9000", "hello");
alert(result);
}
</script>
</head>
<body onload="run()"></body>
</html>