この年末年始の自由研究として、gikot っぽいものを作ってみようと企んでいます。アーキテクチャは、gikot をしょぼくしただけです。研究ではなく、ただの現実逃避と言えるでしょう。
2005-12-31
2005-12-28
よい先延ばし、悪い先延ばし
Paul Graham がGood and Bad Procrastination というエッセーを書いています。(via http://www.lifehack.org/articles/lifehack/good-and-bad-procrastination.html)
No matter what you work on, you're not working on everything else. [...] There are three variants of procrastination, depending on what you do instead of working on something: you could work on (a) nothing, (b) something less important, or (c) something more important.
意訳:何かをやっているということは、他のことをしていないということだ。[...] 先延ばしには3種類ある。何かを先延ばしにしている間 (a) 何もしない、(b) あまり重要じゃないことをする、(c) もっと重要なことをする。
確かに。何かを選ぶということは、何かを選ばないということに他ならないわけですが、忘れがちな事実です。
ABC や、123 など印で優先順位をつける方法が苦手です。すべてが A に分類されるからです。GTD でも、そういう教えだったと思います。代わりに、一番重要なことは何か? を考えます。で、まあ、ブログを書くことは、最優先事項ではないわけですが。
「2005年末に『あぁ、今年も何もやってない!』を防ぐ会議」の、その後
第6回アカデメディア 「2005年末に『あぁ、今年も何もやってない!』を防ぐ会議」で、私が立てた目標は、
- 目標管理プロセスを自分用に自動化
- あわよくば、進捗管理も搭載
- 最終的には、公開
でした。
ひとつめの目標は、なんとか達成できました。xyzzy の簡単なマクロです。そこに至るまでに、Goal*Pad のバチもんを作ってみたり、NextAction を使ってみたり、Notes でアプリ開発しようとして挫折したり、色々ありました。最終的に gtd.txt というテキストファイルを使って xyzzy でちょっとしたマクロを作るというところに落ち着きました。しょぼっ。
進捗管理は、ちょっと手をつけたところです。公開は、まだまだです。別のお仕事や生活に適用できるほど、プロセスを抽象化できていません。
最初に立てた目標が、メタな目標だったことは失敗だと思います。
2005-12-27
斎藤貴男 / 安心のファシズム - 支配されたがる人びと -
読み取れていない気がしてきたので、感想を書き直し。
ケータイを使って通話したりメールを交換するという行為は、[...] 国家規模のインフラストラクチュアを利用者個々人が丸ごと受け入れていることに他ならないのだ。[p.67]
それが、どうしたのかと。大規模なインフラに依存すると、インフラを失うことが脅威になるという警告でしょうか。楽観的な見方をすれば、そのインフラの上位層のプロトコルは解放されています。理論的には写メールの上位層で、e コマースすることだってできます。悲観的な見方をすると、上位層の利用が禁止されると、どうしようもなくなります。
[携帯電話を紛失することは]「記憶を失う恐怖にも似ている」と苦笑する人がいた。筆者はすかさず、「脳みそのアウトソーシングもほどほどに」と返した。人々はケータイに依存し、時には操られていると表現しても過言ではないのではないか。[p.72]
依存しているかも知れませんが、操られているというのは過言ではないでしょうか。電卓だって脳みそのアウトソーシングですし、電話や印刷もコミュニケーションのアウトソーシングです。自筆の手紙を書いて投函する場合でも、大規模なインフラを利用した、情報伝達のアウトソーシングです。だからって別に操られているとは言わないと思います。
と思いましたが、やはり携帯電話に関しては、操られている部分があるかも知れません。私は、かかってくると待ち構えているとき以外、携帯電話は音もバイブレーションも切ってあります。けど、こういう使い方をせずに、着信したら出なければと思う人もいるでしょう。
ところで似たような議論は、テレビが普及し始めたときにもあったのでしょうか。
金属という金属をトレイに載せて差し出してから探知機をくぐって、それでもいつも必ずチャイムが鳴る。靴を脱がされ、ベルトと眼鏡を外させられて初めて、探知機は沈黙してくれる。[p.181]
だって、金属だし。
2005-12-26
八木秀次 / 本当に女帝を認めてもいいのか
全体的な書評は、橋本さんの Passion For The Future というのが、あります。
- 「うわさ」とか「信頼できる筋」とかいう記述が見受けられる。
- これまで一貫して男系で継承してきて、現在の皇室典範でも男系限定で継承できるようになっている。
- どんなに血が薄まっても、男系であれば「必ず」初代の Y 染色体を継承している、という議論は興味深い。染色体のことが分かったのなんて、つい最近のことであるというのは、まあ、別にして。
2005-12-25
69 sixty nine
昨日、読了した村上龍の小説 69 sixty nine の映画を観ました。TSUTAYA の会員になり、DVD を借りてきました。原作のナンセンスさが映像化されています。原作で強調表記されている「ベトナム戦争です」「ウンコです」という台詞を言う前に、0.5 秒くらいのタメがありました。
2005-12-24
村上龍 / 69 sixty nine
おもしろい。電車の中で、何度かふきだしてしまって、危うかったです。他人と話すときの一人称の代名詞が「俺」で、内省するときが「僕」というのは、村上龍の作品によくあります。村上龍以外に小説を読まないんですけど。フォントいじり系。
2005-12-23
2005-12-20
プラハラード / ネクスト・マーケット
貧困層を顧客に変えるビジネス戦略だそうです。
消費や選択の幅を広げるため、BOP市場で急速に発達しているアプローチとは、一回分の「使いきりパック」であり、量を少なくした手ごろな値段の製品である。[p.46]
たとえば、石鹸やシャンプーの単価を下げての販売です。
また、使いきりタイプの革命は、BOPの消費者の「選択」という行為を格段にレベルアップさせた。[p.52]
クリステンセンの「イノベーションのジレンマ」でも、大量に購入・生産する際の効率はともかく、単価が安いことが売りになる場合があるというようなことが書かれていました。特定の所得層に限らず、乗り換えコストを下げると、新規顧客の獲得の手段の一つではないかと思います。あ、当たりまえっすか?
かつての制度では、農家は一トン当たり二~三キログラムほど損をしていたのである。[p.133]
よく分からないのですが、農作物 1000kg を 998kg と量り間違うことって、そんなに大変なことなのでしょうか。
2005-12-12
2GB の USB フラッシュメモリ
USB のフラッシュメモリって、2GB も入るようになっていたのですね。思わず衝動買い。何に使うんだか分かりません。
そんな金があるなら、Active Watch に金払えってば、と自分につっこんでしまいます。Pay Pal じゃないと支払えないよーとかだと、Pay Pal アカウントを持っていないので、面倒になちます。実際には、一度アカウントを作ってしまえば簡単ですし、クレジットカード番号を送信するよりは安全なのでしょう。
W-ZERO3 を触った
FAQ の Q.92 USBストレージとして使用できますか? より
A.92 USBストレージ方式による接続機能はありません。ActiveSync 4.0日本語版をパソコンにインストールすることで、専用のエクスプローラ機能を使ってファイルのやりとりができます。
あらら。今日、実物を触ってみました。なかなか良いのではないかというのが感想です。PC から見て、ただのストレージに見えると便利なんだけどなぁ。
ActiveX の呼び出しを監視するツール
システム上で、どんな ActiveX の呼び出しが起こっているのかを知るツールとして Active Watch というのを見つけました。$50 です。いや、お金を払うのは、まあ、いいんですが、知りたい情報が得られるのか若干心配です。Google で検索しても、使用レポートなんかも見つかりませんし。2時間ほどでいいから、お試しをしたいんですけど、知識のない者はつらいです。
2005-12-11
金出武雄 / 素人のように考え、玄人として実行する
もし、ここにフットボールのクォーターバックが二人いて、一人は中心視野ばかりの目、もう一人は狭い中心視野と残りは周辺視野の目をもっているとしよう。私は前者にかける [...] 私は、「人の仕組みを真似ているからよい」という短絡的な理論に批判的である。[p.122]
金出氏のマシンビジョンの講演を聴いたとき「そんな面倒なことをするより、自然界でうまくいっている方法を、ニューラルネットワークで学習させればとりあえず動くのではないか」と質問したような気がします。はっきり覚えていませんが、気のせいであることを切に願います。ああ恥ずかしい。ニューラルネットワーク覚えたの頃の話です。
「記憶力はどうも苦手で……」と言う人がいる。こういう人は内心では「考える力では誰にも負けない」と自負している。[p.168]
詰め込み教育はいけないと言うが、頭の中に何もなければ、考える材料を引き出すことはできない。[p.178]
痛いところを突いてきますね。
2005-12-04
2005-11-30
島宗理 / パフォーマンス・マネジメント
行動することで、何か良いことが起こったり、悪いことが無くなったりすると、その行動は繰り返される。[p.7]
強化学習を利用して、自分や他人の行動を管理することを提案しています。シゴタノで何度か紹介されていました。
できて当たり前のことができないなら、教えるしかない。[p.111]
こういう積極的なあきらめが重要だと思います。文句を言っている暇があったら、問題解決に集中しないと。
この手の管理でいつも気になることは、数値目標などを設定すると、その数値達成「のみ」に最適化してしまうことです。少なくとも私はそうです。問い合わせを受けてから答えるまでの時間を最小化しようとすると、その背後にある顧客満足を忘れてしまいがちです。早く解決したからいいじゃん的思考に支配されがちです。
万能の解決策は未だに思い浮かびません。いまのところ、最適化行動が適切であるための前提条件を、定期的に見直すことであろうと思っています。
2005-11-28
H8 を使って、LED を点灯/消灯させる
秋月電子の AKI-H8/3048F開発ボードと、Vector で公開されているデバッグモニタを使ってプログラミングしています。
通常は、LED1 が点灯、LED2が消灯していて、スイッチ1 (S1) を押している間だけ、LED1が消灯、LED2が点灯するというプログラムを作りました。
.SECTION PROGRAM,CODE,LOCATE=H'FF030
の FF030 というのは、デバッグモニタのヘルプで表示される User Vector アドレスです。User Vector というのは、おそらく、たぶん、ユーザプログラムの開始アドレスであろうと憶測しています。最初、このアドレス指定が間違っていて、LED が点きっぱなしという現象に悩まされました。
.CPU 300HA
;
2005-11-27
G. M. ワインバーグ / スーパーエンジニアへの道
自分の技術的優位性を証明するために、つまらない技術論争に陥ってはいけない。[p.250]
「FTP よりも TCP/IP のほうがフレキシブルですよ」というような雑談を聞いても、その文脈でフレキシブルとはどういう意味なのだ、などと問い正してないで、もっと大事なことに時間を割きましょう、と。
2005-11-24
普通の奴らの、もっと下を行ってみようかなとか思ってみたり
秋葉原の秋月電子通商で AKI-H8/3048 開発キットを買いました。H8 マイコンの開発ハードウェアとソフトウェアのセットです。はんだごてやニッパーも買いました。はんだづけには 3 時間ほどかかりました。PC と H8 のボードとはシリアルケーブルで接続します。 手持ちの USB/シリアル変換ケーブルは、実は USB/PDA専用の変換ケーブルであることが発覚しました。
H8 には A/D コンバータと D/A コンバータが内蔵されています。また、資料が揃いそうです。「マイコン技術教科書 H8編」という本を購入しました。シリアルケーブルがないので、この本を読むことにします。
追記:USB/シリアル変換アダプタは、ドライバをインストールし直したら使えるようになりました。しかしプログラムを転送できません。AKI-H8 の開発ボードには DSUB 9-pin と 25-pin のふたつのコネクタが付いていますが、素人は 25-pin のほうを使うべきらしい。
2005-11-22
PyVISA - COM ポートをオープンする
PyVISA で COM2 ポートを開くには、Instrument クラスの第1引数にリソース名を指定して、インスタンス化します。
itc4 = Instrument("COM2", term_chars = "\r", timeout = 5)
インスタンス化っぽいものの中身は以下のとおりです。細かいところは省略しまくりです。
class Instrument(ResourceTemplate):
# ...
def __init__(self, resource_name, **keyw):
# ...
# スーパークラスのコンストラクタを呼びます。
ResourceTemplate.__init__(self, resource_name,
**_filter_keyword_arguments(keyw, ("timeout",
"lock")))class ResourceTemplate(object):
# ...
def __init__(self, resource_name=None, **keyw):
# ...
if self.__class__ is ResourceTemplate:
# ResourceTemplate は継承して使いたいので、
# 直接インスタンス化しようとしたら例外を投げます。
raise TypeError, "trying to instantiate an abstract class"
if resource_name is not None: # is none for the resource manager
# ...
# ここでローレベルモジュール vpp43 の open 関数を呼び出します
# vpp43 の中で、ドライバに直接アクセスします。
# Instrument クラスは、Python で呼び出しやすくするためのラッパーです。
self.vi = vpp43.open(resource_manager.session, resource_name,
keyw.get("lock", VI_NO_LOCK))
# ...
NI-VISA ライブラリは、通信ポートや GPIB 機器など物理的な通信先をリソース名で区別します。いったん、接続やセッションを開いてからは NI-VISA 内部ではハンドラのような ID で区別します。ResrouceTemplate は、この ID を隠してくれます。オブジェクト指向言語でラップするときは、セッションをオブジェクトのプロパティにしてしまうようです。ふーん。
vpp43.py の open メソッドは以下のとおり。
# vpp43.py
def open(session, resource_name, access_mode = VI_NO_LOCK, open_timeout =
VI_TMO_IMMEDIATE):
vi = ViSession()
visa_library().viOpen(session, resource_name, access_mode, open_timeout,
byref(vi))
return vi.value
byref()
は ctypes でポインタ渡しするとき関数です。visa_library()
は visa32.dll のアクセスポイントのようなものを返します。viOpen()
は visa32.dll に含まれる関数です。
結果的に Instrument オブジェクトをインスタンス化したときに、visa32.dll で COM2 への接続を確立することになります。
2005-11-19
Phillip McGraw / "Life Strategies"
こういう本を読んだことを書くのは、いつにも増してこっぱずかしいのですが、非常に感銘を受けたので紹介します。自分の人生は、自分で責任を持て、と。
You must learn that you do not have to be angry just because you have the right to be. [p.203]
気が短いので、つい怒ってしまいます。怒鳴ったりしなくても、いやーな気分になります。ですが「怒る」という選択をしているのは自分なのだ、というのが、著者の主張です。それにしても英語の本を読むのは非常に時間がかかりますね。
2005-11-18
PyVISA - VisaLibraryクラスの __call__
NI-VISA ライブラリにアクセスするときは、visa_library が唯一のグローバルなアクセスポイントです。関数呼び出しは「visa_library().hogehoge()」という風に書きます。
# シングルトンのクラス
class VisaLibrary(Singleton):
def init(self):
self.__lib = self.__cdecl_lib = None
def __call__(self, force_cdecl = False):
# インスタンスを呼び出したときに、実行されるメソッド
# このメソッドは、ctypes でロードしたライブラリのオブジェクトを返す。
# ライブラリがロードされていなければ、load_library() メソッドを実行。
if self.__lib is None or self.__cdecl_lib is None:
self.load_library()
# 強制的に C 規約のライブラリを使用する場合と、
# 何も指定しない場合で返すオブジェクトが異なる
if force_cdecl:
return self.__cdecl_lib
return self.__lib
def load_library(self, path = None):
# Windows NT 系の場合
if os.name == 'nt':
# path が指定されれば、そのファイルをロード
if path:
self.__lib = windll.LoadLibrary(path)
self.__cdecl_lib = cdll.LoadLibrary(path)
# path が指定されていなければ、"visa32" ライブラリをロード
else:
self.__lib = windll.visa32
self.__cdecl_lib = cdll.visa32
# 以下 posix の場合と、エラーの場合が続く
# ...
#...
visa_library = VisaLibrary()
これで visa_library().hogehoge()
と書くと、visa_library.__lib.hogehoge()
を呼び出すことになります。__lib
には cytpes でロードした DLL へのアクセスポイントが代入されています。
なぜこうするのか、よく分かりません。別の部分では self.__lib.hogehoge と書いて引数を設定していますし。VisaLibrary.__getattr__() を使ってはいけないのでしょうか。
2005-11-17
PyVISA のシングルトン
__all__ = ["visa_library", "get_status"] + visa_functions
# ↑ __all__ には、このモジュールがインポートされたときに、インポートした側
# が参照できる名前のリストが入ります。
# foo.py に、__all__ = ["hoge", "moge"] と書いておくと、
# from foo import *
# を実行するときに、hoge と moge の名前がインポートされます。
# (マニュアルの 6.4.1 章)
# __all__ を定義しなければ、すべてのパブリックな名前がインポートされます。# Add all symbols from #visa_exceptions# and #vpp43_constants# to the list of
# exported symbols
import visa_exceptions, vpp43_constants
__all__.extend([name for name in vpp43_constants.__dict__.keys() +
visa_exceptions.__dict__.keys() if name[0] != '_'])
# __dict__ は、オブジェクトの属性が、辞書で格納されています。
# __dict__.keys() で、そのオブジェクトのプロパティやメソッド名が入っている。# load VISA library
class Singleton(object):
"""Base class for singleton classes.Taken from <http://www.python.org/2.2.3/descrintro.html>. I added the
definition of __init__."""
def __new__(cls, *args, **kwds):
it = cls.__dict__.get("__it__")
if it is not None:
return it
cls.__it__ = it = object.__new__(cls)
it.init(*args, **kwds)
return it
def init(self, *args, **kwds):
pass
def __init__(self, *args, **kwds):
pass
vpp43.py では __new__ メソッドを使って、シングルトンを実装しています。__new__ はクラスをインスタンス化するときに呼び出され、この戻り値がインスタンスになります。下の例では、Bar クラスをインスタンス化しても、__new__ メソッドの戻り値である Foo クラスのインスタンスが生成されます。
>>> class Foo(object):
... def hello(self): print "hello"
...
>>> class Bar(object):
... def __new__(cls): return Foo()
...
>>> x = Bar()
>>> x
<__main__.Foo object at 0x00B31FD0>
>>> x.hello()
hello
2005-11-16
PyVISA
久しぶりにコードを読むことにします。ctypes を使ったラッパー API に興味があるので、PyVISA を標的にします。飽きたら辞めます。
VISA というのは、Virtual Instrument Software Architecture の略で、シリアル、USB、GPIB などを抽象化した、仮想インターフェースの API です。NI-VISA という DLL 実装があって、これの Python 用 API を提供しているのが PyVISA です。
DLL を呼び出す、低レベルモジュールが vpp43.py です。
# Windows NT の場合には、WINFUNCTYPE を FUNCTYPE という名前でインポート
# それ以外の場合には、CFUNCTYPE を FUNCTYPE という名前でインポート
# プラットフォームごとに異なるオブジェクトに、共通の名前を割り当て、
# プラットフォームの違いを吸収する。
if os.name == 'nt':
from ctypes import windll, WINFUNCTYPE as FUNCTYPE
else:
from ctypes import CFUNCTYPE as FUNCTYPE
初日から、たった1文ですが、無理せず続けることが重要ってことで。
2005-11-07
Pen Station Museum & Cafe
銀座から、JR 東京駅のほうに歩いていたら、Pen Station というオサレな内装の店らしきものを発見。
「ペン・ステーション」は、ペンとステーショナリーのパイロットが蒐集した国内外の貴重な資料を展示する国内随一の筆記具ミュージアムです。
急いでいたので、素通りしたのですが、ふむふむです。万年筆なんか一本たりとも持っていませんが。
2005-11-03
ウィンドウ切り替えツール Entbloess
Entbloess 2 (via 百式) という、ウィンドウ切り替えツールがあるそうです。Mac OS X 10.3 以降についてくる Expose みたいに、ウィンドウを縮小して全部見えるようにしてくれます。けっこう軽いです。
同じようなソフトで WinPLOSION というのがありますが、こちらは McAfee VirusScan にトロイの木馬扱いされるという難点があります。ちょっと重いし。
それとは別に Deskloops というのも試してみましたが、これは、勝手にウィンドウの位置をアレンジしてしまうのが難点です。LabVIEW でヘルプが開くと、ウィンドウがずりずりっとずれてしまって、ヘルプウィンドウが真ん中に割り込みます。これは、ちと、うざい。
2005-11-01
2005-10-29
2005-10-28
FireFox で innerHTML を更新するとメモリリークする?
Windows の FireFox で以下のようなコードを動かして、タスクマネージャを見ていると、使用メモリがどんどん増えていきます。毎秒 innerHTML を更新してるだけなのですが、文字列オブジェクトがどこかに残ってるのかな。
<html>
<head>
<title>ほげ</title>
<script language="javascript">
var html = "";
var i;
for (i=0; i>1000; i++) {
html += "<p>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</p>";
}
function start() {
setInterval("updatecont()", 1000);
}function updatecont() {
document.getElementById("hoge").innerHTML = html;
}
</script>
</head>
<body onload="start()">
<div id="hoge"></div>
</body>
</html>
2005-10-24
川本裕子の時間管理革命
革命というより、当たり前のことが書かれています。ちなみに「当たり前」はほめ言葉として使っています。当たり前のことを、当たり前にできないことが、なんと多いことでしょう。
時間を効率的に使うためには、何に使ったのかわからないような「隠しポケット」を少なくすることが必要です。(p.58)
先週から、職場で使った時間を記録していますが、職場を離れてからも重要ということです。当たり前。
さばききれない仕事や優先順位を決めかねている仕事を「土日に片づければいいや」と休日に放り込むのは「隠しポケット」と似たようなものです。 (p.58)
この週末は、まさに仕事を持ち帰って、非効率にこなしました。
前倒しで仕事をすませて人に迷惑をかけずにすむなら、これほどたやすいことはありません。自分の努力ですむ話だからです。人生には自分でコントロールできない状況がいくらでもあります。(p.87)
いちいち当たり前です。仕事が忙しいときは、コントロールできることが少なくなっている状態です。だからこそ、コントロールできるように、普段から準備を怠ってはならないのでしょう。自戒。
2005-10-23
Riverdance
Riverdance を観に行きました。アイリッシュダンスらしきものは、上半身固定のタップダンスみたいな感じです。たったか、たったか。アイリッシュダンサーと、ジャズでタップするダンサーが、タップ・バトルするところが一番お気に入りです。
日本人ダンサー Taka さんのブログもあります。IT コンサルタントを辞めて、28歳という高齢で渡愛したというつわものです。前から4列目の席から見ていたので、この人らしきダンサーもよく見えました。
2005-10-21
2005-10-18
六顔萬笑
大きな目標をもって何かをやろうとする場合、経済的にも精神的にも余裕のない人たちがいると、すぐに損得の話になって、意見がまとまらなくなってしまうからです。[p.5 春風亭小朝]
必死な奴はだめだ、と。危機感や真剣さは必要ですが、重要だが緊急でない仕事に取り組むということでしょうか。
満足して帰っていただきたい。そのためには、どんな手でも使いますね。そこに主張とかはないです。とにかく、お客さんの満足度のパーセンテージを少しでも上げるのが仕事だと思っています。[p.74 春風亭昇太]
こういうプロ意識を見習いたいと思います。
2005-10-17
日経ビジネスアソシエ 2005.11.01
現場の営業マンは会社の代表 (p.34, 新宅正明氏@オラクル)
いや、もう、ほんと当たり前なのですが、お客様が話している人=会社の代表なのですよね。
「緊急」といっても、その仕事が発生した原因があったはずで、直前に手を打つことができるのです。(p.47 、吉越浩一郎氏@トリンプ)
別の人のインタビューでも、前もってリスク分析し、事前策を立てるという話が紹介されています。ドラッカーの本でも、うまく運営できている工場では、あらゆることが予測されているので退屈である、と書かれています。曲突徙薪。
が、ついつい、放置しがちです。リスク・エクスポージャを計算する習慣が役に立つかも仮説。
2005-10-16
落語鑑賞
「林家こぶ平 改メ 九代林家正蔵 襲名披露“特選落語名人会”」を鑑賞してきました。たのしゅうございました。落語はテレビや DVD で見たことはありましたが、生で見るのは初めてです。すばらしい。
2005-10-13
LabVI
LabVIEW で単体テストするコードを書いてみました。xUnit には遠く及びませんが、無いよりましだと思います。テストは、以下のような感じで結果を assert します。
次に、上で書いたようなコードのパスを、テスト・ランナーに渡します。
実行すると、こんなのが出る、と。しょぼっ。
結論:LabVIEW のコードをブログに書くときは、画像を貼り付けるのが大変ですね。
2005-10-11
久しぶりの水泳
久しぶりに水泳をしました。300m ほど、ゆっくり。の予定だったのですが、技術も体力も衰えまくっていて、ひーひー言いながら泳ぎました。予想通り、肩こりに効きそうです。
体重 61.2kg、体脂肪率 19.7%
2005-10-10
ハイテクコンロ
ガスコンロの火がいつの間にか消えていて、ためらいもなく再点火するところを目撃しました。部屋にガスが充満していたら、ガス爆発ですよ、と焦りまくりです。落ち着かないのでガスコンロの説明書を読んでみたら、立ち消え安全装置というのが搭載されていると書かれていました。そんな、便利なものが、この世の中にはあったのかと、いたく感激した日曜の午後でした。
2005-10-04
AquaCalendar/Lotus Notes のカテゴリ同期
AquaCalendar の カテゴリを、Lotus Notes に反映させる作戦の続きを、しつこくやっています。
前回は、同期できるカテゴリ文字列さえハードコードしているという、どうしようもない方法でした。ちょっと改良したのが以下のコードです。上からそれぞれ AquaCalendar のカテゴリを Lotus Notes に反映させるマクロ、Lotus Notes のカテゴリを AquaCalendar に反映させるマクロです。
SELECT @All;
@SetField("Categories"; @LeftBack(@RightBack(Subject; "[");"]"))
SELECT @All;
@SetField("Subject";
@If(@Contains(Subject;"[");
@LeftBack(Subject; "[");
Subject) +"["+@Select(1;Categories)+"]")
COM で操作しようとしていましたが、Lotus Notes の@関数に落ち着きそうです。ただでさえ、PIM の同期ツールと Lotus Notes があって煩雑なのに、アプリケーションがもうひとつ増えると鬱陶しくてしかたありません。
2005-10-03
Aquacalender の category を、Lotus Notes に反映させる作戦
携帯電話の PIM アプリ AquaCalender と、PC の Lotus Notes のカテゴリデータを、互いに反映させるツールを作りました。
AquaCalendar は、「寝る[@home]」のように件名の末尾にカテゴリ情報を保存します。Lotus Notes は Categories フィールドに保存します。カテゴリには GTD 的に @home や @office のようにコンテクストを使いたいので、なんちゃって自動化です。
2005-10-01
OQO model 01+
OQO model 01+ が出ました。30GB HDD と 512MB RAM というスペックは、自宅で使ってる R4 と似たようなものです。xyzzy と FireFox くらいしか使わないユーザとして魅力的です。OQO があれば、職場 PC のLotus Notes と、携帯電話のPIMデータをなんちゃって同期する必要もなく、常に Lotus Notes でスケジュール管理できます。好きなソフトで TODO 管理できます。誰かに背中を押されたら、衝動買いしてしまいそうです。
2005-09-29
Quixote
White Paper: Quixote for Web Development
Quixote (きほーて)はウェブアプリケーション開発のフレームワークです。何を勘違いしていたか、てっきりウェブサーバだと思っていました。Mudeusa や Twisted で使うのがおそらくは正攻法で、mod_python や CGI でも使えます。
Quixote は
- URL を Python の関数に対応付けておき
- HTTP リクエストがあると、Python の関数を呼び
- 関数の戻り値を HTTP クライアントに返す
という動作をします。
また、Python Template Language という、Python を拡張したような関数定義ができます。お手軽かも。
def format_row [html] (head, value):
"<tr valign=top align=left>\n"
" <th align=left>%s</th>\n" % head
" <td>%s</td>\n" % value
"</tr>\n"
2005-09-28
スカートのおしりを隠す
上りエスカレーターで、私のすぐ前にいた女性が、かばんでスカートの後ろを隠しました。あのね、見ませんから。不自然なポーズでスカートを隠すという、みっともない格好をするようなのにロクなのがいないわけです。
と、勝手に腹を立てながら、フィットネスクラブで着替えました。見られたくないので腰にタオル巻きつつ、体重 61.8kg、体脂肪率 20.4%
2005-09-26
Python から COM 経由で Lotus Notes にアクセス
Lotus Designer で、データベースの Category と Subject を操作するスクリプトを書いていました。ついさっき、Python から COM 経由で簡単に実現できると気づいてしまって、がっかりです。言語ではなく、Lotus Designer という開発環境に慣れていないことが、時間がかかる理由だと思います。
下のコードは、Lotus Notes のデータベースから、Task ドキュメントつまり TODO を抜き出すジェネレータです。
def tasks():
session=win32com.client.Dispatch("Lotus.NotesSession")
session.initialize(password)
db=session.GetDatabase("","hoge.nsf")
documents = db.AllDocuments
for i in range(documents.count):
doc = documents.GetNthDocument(i)
if doc.GetItemValue("Form")[0]==u"Task":
yield doc
Aquacalender の category を、Lotus Notes に反映させる作戦
携帯電話と PC の TODO リストの同期用に、数行のコードを書きました。
702NK/Nokia 6630 のPIM ソフト AquaCalender と、職場と自宅の Lotus Notes を同期させて使っています。GTD 信者としては、TODO には「@office」「@home」などのコンテクストを指定したい。Lotus Notes ではカテゴリとして指定できます。Aquacalender でもカテゴリ指定できます。ところが、カテゴリは同期できない。
Aquacalender で「@home」とカテゴリ指定すると、Notes の Subject の後ろに [@home] という文字列が追加されます。まあ、これでもいいんですけどね。Lotus Notes でしょぼいエージェントを作りました。
ひとつめは、「ほげほげ[@home]」という件名を見つけたら、カテゴリを @home に指定します。汎用性なし。職場に着いて、同期して、その後これを走らせます。
SELECT @All;
@For(i:=1; i<=5; i := i+1;
@Set("context"; @Select(i; "@home"; "@maybe"; "@office"; "@project"; "@errand"));
@If(@Contains(Subject; context); @SetField("Categories"; context); @true));
ふたつめは、カテゴリが @home だったら、件名に [@home] を追加するエージェント。これを走らせて、同期して、退社します。
SELECT @All;
@For(i:=1; i<=5; i := i+1;
@Set("context"; @Select(i; "@home"; "@maybe"; "@office"; "@project"; "@errand"));
@If(@Contains(Categories; context); @SetField("Subject"; @LeftBack(Subject; "[")+"["+context+"]");@True))
ただ、AquaCalender 側でカテゴリ変更したとき、Nokia PC Sync が変更があったことに気づかないらしく、Notes のデータが更新されません。先は長い。
関係ないのですが、この Lotus Notes の @関数と似たのを使ったことがあります。QMAIL (qmailに非ず)というメールソフトです。当時は変わったマクロだなあと思っていたのですが、知らないだけで、一般的な文法なのかも知れません。
Aquacalender の category を、Lotus Notes に反映させる作戦
携帯電話と PC の TODO リストの同期用に、数行のコードを書きました。
702NK/Nokia 6630 のPIM ソフト AquaCalender と、職場と自宅の Lotus Notes を同期させて使っています。GTD 信者としては、TODO には「@office」「@home」などのコンテクストを指定したい。Lotus Notes ではカテゴリとして指定できます。Aquacalender でもカテゴリ指定できます。ところが、カテゴリは同期できない。
Aquacalender で「@home」とカテゴリ指定すると、Notes の Subject の後ろに [@home] という文字列が追加されます。まあ、これでもいいんですけどね。Lotus Notes でしょぼいエージェントを作りました。
ひとつめは、「ほげほげ[@home]」という件名を見つけたら、カテゴリを @home に指定します。汎用性なし。職場に着いて、同期して、その後これを走らせます。
SELECT @All;
@For(i:=1; i<=5; i := i+1;
@Set("context"; @Select(i; "@home"; "@maybe"; "@office"; "@project"; "@errand"));
@If(@Contains(Subject; context); @SetField("Categories"; context); @true));
ふたつめは、カテゴリが @home だったら、件名に [@home] を追加するエージェント。これを走らせて、同期して、退社します。
SELECT @All;
@For(i:=1; i<=5; i := i+1;
@Set("context"; @Select(i; "@home"; "@maybe"; "@office"; "@project"; "@errand"));
@If(@Contains(Categories; context); @SetField("Subject"; @LeftBack(Subject; "[")+"["+context+"]");@True))
ただ、AquaCalender 側でカテゴリ変更したとき、Nokia PC Sync が変更があったことに気づかないらしく、Notes のデータが更新されません。先は長い。
関係ないのですが、この Lotus Notes の @関数と似たのを使ったことがあります。QMail (qmailに非ず)というメールソフトです。
2005-09-25
アサマシ支援マクロ - ASIN から Amazon 画像を貼り付け
アマゾンのアフィリエイトのページを見たら、この1年で 500 円程度の紹介料が入っていました。0 円でないことに、いたく驚きました。もっとアマゾンへリンクをしよう、というわけで、紹介したい商品の画像をアマゾンからひっぱってくるマクロです。
(defun amazon-image (asin)
(interactive "sASIN: ")
(insert
"<img src=\"http://images-jp.amazon.com/images/P/"
asin
".09.THUMBZZZ.jpg\" style=\"border-style:solid;border-width:1px;border-color:#999;\" />"))
便乗5冊
「この秋に読む!TOPエンジニアが刺激を受けた25冊」に便乗するのが流行りそうな兆しです。TOP でもありませんし、エンジニアかどうかも危うい立場ですが、私も便乗してみます。
Kent Beck「Test-Driven Development: By Example」
開発中にテスト項目を発見する過程が書かれてています。唐突にテスト項目が示されるのではなく、最初のおおざっぱな項目を細分化する思考過程が書かれています。
エリヤフ・ゴールドラット「クリティカルチェーン ― なぜ、プロジェクトは予定どおりに進まないのか?」
問題発見の過程がいくつも出てくるところが気に入っています。クリティカルチェーンや制約条件の理論よりも、途中の思考過程を一緒に追っていくことで、真剣に考えることを自分に強要できます。
ピーター・ドラッカー「プロフェッショナルの条件」
すべてのドラッカーの著書に書かれているであろう、期待していたことと実際に起こったことを比べることが要点だと思います。過去の著書からの選り抜きなので、付箋だらけになってしまいました。「習慣的な力」と訳されている言葉は、原書では「habit」です。いずれも成果とは何かを問い、理解していることが前提条件です。いきなり行動する誘惑に負けることも多々ありますが、先に成果を定義するよう努めるようになりました。
ドナルド・ゴース、ジェラルド・ワインバーグ「ライト、ついてますか ― 問題発見の人間学」
この本は、問題とは期待と現実のギャップである、という定義から出発します。期待には主体が存在するはずであり、必然的に誰にとっての問題なのかという問いが出てきます。誰が何を期待しているのか、を問う習慣がつきました。
David J.Agans「デバッグルール」
ハードウェアも含めた、システム全体のデバッグやトラブルシューティングの原則を集めた本です。gdb などのツールの解説ではありません。思考停止し、安易な解決策を試すという誘惑に負けそうになったとき、この本に書かれていることを、ひとつ実践するだけで問題発見モードに移行できます。
社会人になって、自分が問題発見できていないことに気づきました。問題らしきものを見つけたときに、何が問題であるのか真剣に考えるようになったのは、本当に最近のことです。特に知識や技能を身につけたわけではないのに、少しの思考習慣のおかげで、問題解決できるようになった気がします。気のせいかも知れません。
2005-09-21
2005-09-20
村上龍 / ヒュウガ・ウィルス
村上龍の「ヒュウガ・ウィルス」。兵士たちの気持ちが直接描かれないので、実際のとこどうなのよ、と心地よくいらつかされます。以下、引用注意。
UG兵士はシンプルな原則で生きている。最優先事項を決め、すぐにできることから始め、厳密に作業を行ない、終えると次の優先事項にとりかかる。(p.236)
小説の内容とは直接関係ありませんが、最優先事項に焦点を合わせたいと願っています。フランクリン・コビーの自己啓発セミナーや書籍でも、優先順位の高いことから実行することを推奨しています。Todd Proebsting の発表「Disruptive Programming Language Technologies」でも最重要事項とは何か、という話から始まります。
一方、GTD では優先順位をつけることよりも、その場でできることを片付ける方針です。コンテクストごとにできることは限られているわけで、できることが優先事項なのでしょう。
だから、こんな文章書いてないで、サラリーマンは明日に備えてさっさと寝ろ、と。
体重 62.4kg、体脂肪率 19.8%
2005-09-19
谷光太郎 / 情報敗戦
谷光太郎の「情報敗戦」です。なんでこの本を買ったんだっけ? と思いながら読んでいたら、途中で思い出しました。
その国のことは偵察衛星とかスパイによらなくとも九割は分る(p.66)
村上龍の「半島を出よ」の中で、こんな話が出てきたのでした。で、大量の参考文献の中から、おもしろそうだと思って選んだのが、この本です。歴史や軍事に疎いので、よく分らない箇所がたくさんあります。雑誌の連載をまとめたものだとは言え、情報を軽視したので戦に負けたという話が、別の人物によって何度も展開されている印象です。
日本人が二〇〇〇年にわたって農耕民族であったことだ。[...] 欧州系人の原点は狩猟社会である。(p.138)
欧州人が狩猟民族だというのは「農業技術によって定住を可能にし、そのおかげで社会を安定して発展させることができた」のだろうなぁ、という私の直感に反するのですが、気のせいでしょうか。ゲルマン人の大移動とかって、弥生時代くらいだったと記憶しています。
少年の頃より戦さのやり方ばかり学んできた正規軍将校にとって、株価の動きから、戦局の重大事項を推測することなど考えられなかった。(p.210)
肯定的なことも書いておきましょう。間接的な観測で、ものごとを予想したり計測するのはかっこいいと思います。ラザフォードの実験とか、すばらしすぎ。
2005-09-18
日経ビジネスアソシエ 2005.10.04
日経ビジネスアソシエ 2005.10.04 号を読みました。雑誌は軽く読めて、楽です。
自分の力を過信せず、計画通りこなせるスケジュール作りを心がけましょう(p.38, 川本裕子)
数時間で終わると見積もっていたにも関わらず、土曜日も出勤して全部で15時間かけて仕事を片付けた私にぴったりの助言です。今日もジムに行っていません。明日こそ。
体重 62.2kg、体脂肪率 20.2%
2005-09-17
お先に失礼しない
今週は、なんだか仕事を片付けられなくて、平日のジム通いをしていない。明日の朝を逃してはならぬ。思わず「ジム通いできなかった」と書きそうになりますが、こういうとき「ジム通いしなかった」と書いたり発言したりするように心がけています。
体重 61.8kg、体脂肪率 19.2%
2005-09-16
柴田英寿 / お先に失礼!する技術
柴田英寿の「お先に失礼!する技術」を読みました。
リズム感を出すには、司会者がまどろっこしいしゃべりをしないことも必要です。無駄なことをしゃべらないためには事前に発言を考えておかなければなりません。(p.57)
対偶は「事前に発言を考えておかないと、無駄なことをしゃべる」です。司会に限らず、考えてから発言するように心がけています。が、できていないこともあるので、自戒も込めて紹介します。考えなしに発言することと、普段から考えていることを素早く発言することは別物ですね。
「こんな話聞きましたよ」というだけでは、職場にとっては、雑音にすぎません。(p.174)
情報の共有と、雑音の拡散は別物ですね。簡単な検索で見つけられることはデータベースへ登録し、別のことがらと融合して新たな価値が出る場合には報告、というのが個人的な方針です。このブログは雑音ですが、拡散していないので許してください。と、自意識過剰な体重 61.6kg、体脂肪率 19.7%。
2005-09-13
ジャック・フォスター / アイデアのヒント
ジャック・フォスターの「アイデアのヒント」を読了しました。とは言っても、速読という名の流し読みです。
「つけなくてもいい条件を付けていないか?」「不必要な制約を自分で作っていないか?」と。(p.140)
富豪的にものごとを考えるようにしています。I/O 集約的なシステムでは、CPU パワーが PCI に比べて大きいので、CPU レベルでのプログラム最適化はほとんど意味がない場合がある。しかし、PCI Express が出てくると、こんどは I/O デバイスがボトルネックになってしまう場合があります。なのでちまちま最適化してはならぬのです。
「アイデアをもっているが、そのアイデアを使って何もしない」のと「まったくアイデアをもっていない」のとは同じことである。(p.224)
10年ほど前、ベンチャー・キャピタルの人に「農村の人手不足を、就職活動にあぶれた新卒でおぎなう」というのはどうか」とちらっと言ったことがあります。そのときは、酒の席だったので、お互い軽く流しました。先日、ニュース番組で「農村の人で不足をニートでおぎなう」という人材派遣会社が紹介されていました。というわけで、当たり前だと思っても、とりあえず書き残して、実行のきっかけにしていこうと思いました。
体重 62.2kg、体脂肪率 19.6%
2005-09-12
無理のないダイエット
昨日、フィットネスクラブで、調子に乗って、ウェイトトレーニング、エアロバイク、エアロビクスをこなしました。明らかに失敗で、今日、ろくに動けませんでした。危うく投票に遅れそうになるほどです。
どうも膝を痛めそうな雰囲気なので、エアロビクスは当分控えます。ウェイトトレーニングでケガをしにく体を作ってから、本格的な減量を開始します。
体重 63kg、体脂肪率 21%
702NK (Nokia 6630) を音楽再生機に
1ヶ月ほど TODO リストに居座っていた「702NK 用のイヤホンを買う」を実行しました。音声ファイルを聞くためです。
予想外なことが2点ありました。ひとつはマイクがついていて通話できること。もうほとつは思っていたよりコードが邪魔なこと。ワイヤレスのヘッドセットにすればよかったかも知れません。
通勤途中に、702NK 標準搭載の Real Player で CNN ビジネススペシャル を聴くのが目的です。英語力、とくに聞き取りが著しく低下しているので、やり直しです。できることからコツコツと始めます。ついでに、最近購入した、矢野顕子の「Piano Nightly」も入れておきました。
702NK の Real Player に転送するファイルは、iTunes の *.m4a ファイルを使います。ファイル名変更やプレイリストが必要なので、スクリプトを書きました。カレントディレクトリの *.m4a ファイルを 702NK 用に名前変更し、プレイリストをつくります。
#/bin/sh
# mk702musics
# usage: mk702music playlistNamePLAYLIST=$1
echo "#EXTM3U" > $PLAYLIST.m3u
for X in *.m4a
do
Y=`echo $X | sed 's/m4a/3g2/'`
mv "$X" "$Y"
echo $Y >> $PLAYLIST.m3u
done
2005-09-10
コメントの交換
大橋禅太郎の「すごい会議」の中で、
会議の時間の九五%は「コメントの交換」に使われている、ということだ。(p.76)
というくだりがあります。本日、参加した会議にで、コメント以外の発言の割合がどのくらいか考えると、へこんでしまいます。自戒
体重 63kg、体脂肪率 20%
2005-09-09
ジム通い3回目
ジム通い3回目。初回の体力測定の結果が出ました。1週間に5回20分程度のウォーキングをして、毎日食事から100kcal減らすと、14週間で、58.8kg、15% の体になれるらしい。
体重 62kg、体脂肪率 20%
2005-09-08
2005-09-07
ジム2回目
ジムに行ってきました。入会してから2回目です。仕事帰り、夜8時ごろ行きました。人多すぎ。メニューをこなすために、マシンを待っている時間に 30% くらいを費やした気がします。平日は、3セットではなく、2セットにしようかな。
体重 62kg、体脂肪率 20%
2005-09-06
702NK でカメラ撮影する Python スクリプト
import camera
image = camera.take_photo()
image.save('E:\\scripts\\photo.jpg')
たったこれだけのスクリプトを実行すると、撮影して保存する。
体重 62kg、体脂肪率 20%
2005-09-05
重松清 / かっぽん屋
重松清のかっぽん屋を読了しました。短編集です。「失われた文字を求めて」は星新一の作品に出てきそうな話ですきです。別の作品の中で、すばらしい洞察がありました。曰く...
オナニーには二種類ある [...] 一度でもセックスを知ってからのオナニーはセックスの代用品になってしまう。しかし、童貞時代のオナニーは絶対無二の行為である。(p.132)
この絶対無二っていうのが、あまりにも真実すぎると思う。
2005-09-04
出張で発見したこと
先週は、出張で大阪に行きました。気づいたことなど。
- セミナーの仕事でした。会場に行って、同僚がいるかなぁとドアに近づいた瞬間、お客様が出てきてびっくり。私服だし、でも無視もできないし、中途半端な会釈してしまいました。うかつすぎ。
- 喫茶店のおっさんがおもろい。モカが運ばれた瞬間くらいに、店を出る用事ができた。カップにはモカが残っている。会計するとき、すこししか飲んでいなくて申し訳ない、また明日来る、と言う。おっさんは、冷凍して置いておく、と言った。
- 東京ブックをリアルタイム受信。田口氏は、忙しいのにいつ東京ブックやブログを書くのか。むしろ、仕事ができる人は、どんどんスピードが上がるのだろうか。
フィットネスクラブに行ってきました
フィットネスクラブに行きました。体重と体脂肪率の測定をすると、体重 61 kg、体脂肪率 25 % と出ました。自宅で測ると 21 % 前後なのに。しかし、フィットネスクラブの体脂肪計を信じるしかあるまい。
初回は体力測定しますと告げられ、エアロバイクにまたがりました。ゆるゆるペダルを回して、3分ごとに負荷が上がっていき、それでも同じペダルの回転数を維持するという測定でした。10分の測定が終わると、小型のプリンタから結果が出て、液晶パネルに大まかな結果が表示されました。「ヤヤ オトッテイル」 劣っている、らしいです。誰に対して?
2005-08-31
2005-08-30
フィットネス・クラブに入会
近所のフィットネスクラブで入会手続きしました。入会は9月1日からなので、数日間はわくわくするだけです。来月からはケガ予防とダイエット目的の筋力トレーニングから始める予定。
体重63kg、体脂肪率20%
2005-08-29
<a href="http://oldriver.org/pep-0008j.html">PEP-0008 revision 1.27</a>
前回の変更に合わせて、文書中のコードが「raise ValueError, "sorry, you lose"」から「raise ValueError("sorry, you lose")」になりました。
最近、コード書いてないので、コーディングスタイルの文書を読むことも少なくなりました。よくない傾向です。
2005-08-28
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4478733104/addicted2inde-22">平野秀典 / ハッピーエンドのつくり方</a>
演劇経験のある著者による、こころがけについての本です。
営業マンが「クロージング」しても、お客様にとって、そこから「オープニングシーン」が始まるのです。(p.20)
売った側に対する評価に大きな影響を与えるのは、購入後にその商品を使う経験でしょう。技術サポート業務に携わっていると当然のことですが、今期の売り上げ目標に縛られていると見失うのかも知れません。
ところで著者の感動プロデューサーという肩書きは、中谷彰宏のトレンド・クリエーターっぽい。
OQO model 01
ものすごく小さい Windows XP マシンが http://www.oqo.com/ にあります。大きめに見積もって 13cm x 10cm x 2cm ですから、厚めの文庫本より小さいですね。Panasonic の R4 買ったところなんですが、一気に物欲がわいてきました。$2,000 という価格のおかげで思いとどまっています。
そして実現したソリューションで紹介されているような方法も考えていましたが、やっぱり Windows XP がよいかなぁ。
2005-08-26
Gmail がおおっぴらに公開されそう
Google Talk をダウンロードして、インストールして、起動したら、GMail のアカウント入力を促されました。ショックすぎ。GMail のアカウントなんか持ってないよ、と拗ねていたら、どうやら招待なしで登録できるようになりそうです。(via 誰でも使えるようになった Gmail)
で、何に使うかというと、PC で使えるとしたら Ajax が、ぐるんぐるん動くのを見て満足するだけでしょう。Mac を買っても、ウィンドウを最小化したり、expose を使いまくったりしただけでした。
体重 63kg、体脂肪率 20%
2005-08-25
重要対緊急
Urgent vs Important という記事で、予定通りに起きて空港に行くよりも、10分早く起きた方がよい、という話。これを重要なことがらと、緊急のことがらに分けるという文脈で紹介しています。全く重要な用事ではないのに、放置したことにより、緊急に片付けなければならなくなるわけです。他にも締め切りぎりぎりに支払い小切手を送付すると、速達みたいなので送ると、よけいなコストになるという話もあります。
先延ばし屋の私は、しょっちゅう、そんなことをやっています。夏休みの宿題を、健全な時期に終わらせたことがありません。よい子は、終わらせましょう。
体重63kg、体脂肪率20%
2005-08-24
ウッシュリストを一掃
Amazon.co.jp のウッシュリストに登録してあった商品を一掃しました。130 点くらいの商品を登録していたうち、注文したのは40点ほどです。CD や DVD も含みます。この期に及んで買っていない本は買わないだろう、という仮説があります。さらに、時間ができたら買おうと、本の購入を延期したら、そのお金は他のことに使われる、という仮説もあります。自分で勝手に言っているだけですが。
体重 64 kg、体脂肪率 21 %
2005-08-23
森達也 / ドキュメンタリーは嘘をつく
森達也 / ドキュメンタリーは嘘をつく。森達也がインタビューした相手の発言が興味深い。
ゴミを路上に平気で捨てる人は少ないでしょう。でも煙草はほとんどの人が平気で捨てている。それが昔から不思議だったんですよ (p.158)
これが本当かどうかは別にして、よい問いを持ちたいものです。
体重 64 kg、体脂肪率 20%
2005-08-21
同期問題が解決したかも
ずっと悩んでいた、予定情報の同期問題が解決した気がします。
今までは、
- 職場PC <---> 自宅PC
- 職場PC <---> 携帯電話
- 自宅PC <---> 携帯電話
のように、予定閲覧/編集を行う計算機が接触するごとに、ばらばらに同期していました。おかげで、予定項目の衝突や重複が起こっていました。
ところが、
- 職場PC <---> 携帯電話 <---> 自宅PC
とすれば、携帯電話の予定に従属させればよいことに気づきました。当たり前のことなのですが、携帯電話をマスター(ああ、ついにカタカナ英語を使ってしまった)にしてはいけないと思っていたのです。
体重 63kg、体脂肪率 19%
2005-08-18
体重 63.8kg、体脂肪率 21.0%
スーツ買って、裾上げに2週間ほど待って、受け取りにいきました。受け取りにいったら、きつく感じました。太ってしまったようです。ダイエットは明日から、と言い続けて、はや5年。そろそろ本気を出します。
体重 63.8kg、体脂肪率 21.0%
スーツ買って、裾上げに2週間ほど待って、受け取りにいきました。受け取りにいったら、きつく感じました。太ってしまったようです。ダイエットは明日から、と言い続けて、はや5年。そろそろ本気を出します。
2005-08-17
2005-08-13
2005-08-12
GTD ツール NextAction に保存機能をつけてみる
GTD 支援ツール NextAction に、自動保存機能を追加してみた。Windows XP + FireFox 1.0.6 のみで、なんちゃって動作確認。
以下の2つのファイルを、nextaction.htm と同じフォルダに保存して、firstaction.htm を開いて使う。やっつけ。
<html>
<!-- firstaction.htm -->
<head><title>NextAction</title></head>
<frameset rows="0,*">
<frame src="saver.htm" />
<frame src="" name="nextaction" />
</frameset>
</html>
<html>
<!-- saver.htm -->
<head>
<title>Saver</title>
<script language="javascript">
var _path = "C:\\your\\path\\to\\nextaction.htm";
var _previousData;function save() {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
data = "<html>" + htmlContent() + "</html>";
data = convertUnicodeToUTF8(data);
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(_path);
if (file.exists()) { file.remove(true); }
file.create(file.NORMAL_FILE_TYPE, 0666);var outputStream = Components.classes[ "@mozilla.org/network/file-output-stream;1" ].createInstance( Components.interfaces.nsIFileOutputStream );
//outputStream.init( file, 0x04 | 0x08, 420, 0 );
outputStream.init( file, 2, 0x200, false);
var result = outputStream.write( data, data.length );
outputStream.close();
}function convertUnicodeToUTF8(s) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
var u = converter.ConvertFromUnicode(s);
var fin = converter.Finish();
if(fin.length > 0)
return u + fin;
else
return u;
}function start() {
window.open("nextaction.htm", "nextaction");
_previousData = htmlContent();
setInterval("saveIfNecessary()", 1000);
}function saveIfNecessary() {
if (modified()) {
save();
_previousData = htmlContent();
}
}function modified() {
return _previousData != htmlContent();
}function htmlContent() {
return parent.frames["nextaction"].document.getElementsByTagName("html")[0].innerHTML;
}</script>
</head><body onload="start()"></body>
</html>
2005-07-18
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/414080663X/addicted2inde-22">村上龍 / だまされないために、わたしは経済を学んだ</a>
JMM というメールマガジンに掲載されたエッセーを再掲したもの。新幹線の中で、さらっと読んだ。
人間には二種類あって、という話をしてくれました。それは、「待ちぼうけをするやつ」と「待ち伏せするやつ」だ、ということでした。(p.113)
なるほど。待ち伏せ、という言い回しが策士っぽくて良い。
[中田英寿が] サッカーを投資対象として発見できたこと、自分の時間と労力を継続的に効率的に投資できたこと、まさにそれを才能と言うのではないかと思うときがあります。(p.176)
投資対象を選ぶ前に、投資から期待できる利益(という言い方で良いのか)を定義する必要があると思う。現金なのか、自己満足なのか、などなど。その後で投資対象を選択できる。
起こったことを正確に伝えるより、希望的観測や不完全な予測を交えて大騒ぎするほうが簡単です。(p.229)
そうそう。大変だ、大変だ、と騒ぐほうが簡単である。具体的な事象、何が本当の問題なのか、最優先事項は何か、などを、おおざっぱにまとめるほうが遥かに難しいが、遥かに価値がある。
2005-07-17
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4479791183/addicted2inde-22">大橋禅太郎 / すごい会議 </a>
「書いてから発表する方法だと、書いている間は他人の意見が見えない」というのが、衝撃的。アカデメディアでやった方法と同じだ。
全員が手元に書き終わると、ハワードは順番に一つずつ読ませた。一つ読んでは、次の人といった具合なので、三~四周まわることになる。自分の番がきて、もうすべて自分の書いたもは読んでしまった人は「パス」していい。この方法だと、一人の意見で全体の雰囲気が動くのではなく、みんなの意見が平均的に出てくるので、悪くない。(p.55)
これは便利。いきなり使える。
「このままいくと、スケジュールどおりに終わるか? でないとすれば何日遅れるか?」(p.83)
工数管理のような考え方を、日常に取り入れないと、いつまでたっても何も達成できない、と思う。ゴールドラットが「コストに縛られるな!」で指摘しているように、意思決定にはスケジュールとシミュレーションが必要である。
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/478850460/addicted2inde-22">D. A. ノーマン / テクノロジーウォッチング</a>
私は悪いデザインを見つけるための経験則を持っている。注意書きの張り紙を探すことだ。(p.27)
職場の給水器内のボトルが空になると、社員が自力で入れ替えることになっているが、これがもうクソなユーザーインターフェイスである。給水口あたりを素手で触らざるをえないような手順が必要で、不衛生極まりない。とうぜん注意書きがある。
アメリカだけでも年間に約 800 万便の民間航空機が飛んでいる。ある特定の事故が起こる確率が百万分の1でも、年間にざっと8回起こる計算になる。(p.238)
急成長するメーカーなんかは、気をつけないといけない。不具合発生率が1000分の1であるとき、その製品を年間100個売るのか、10000個売るのかでインパクトが大幅に変わる。
2005-07-11
メモは rcp で一箇所にあつめる作戦
ユビキタスメモは、好きなエディタで書く。書いたメモは rcp を使って、PC ごとのファイルを保存しておく。という作戦に落ち着きそうだ。rsync を使えばよいのか。
_scp = "C:/hoge/pscp"def secureCopy(source, target, password):
"""copy source to target"""
subprocess.call((_scp, "-q", "-pw", password, source, target))def secureList(remoteDir):
"""generate file names that meets filespec on host"""
num, path = tempfile.mkstemp()
# get filenames with scp
fout = file(path,"w")
subprocess.call((_scp, "-q", "-pw", PASSWORD, "-ls", remoteDir),
stdout = fout)
fout.close()
# parse files generated by scp
fin = file(path)
for i in range(3):
fin.readline()
for line in fin:
filename = line.split()[-1].strip()
yield filename
2005-07-06
第6回アカデメディア に参加
第6回アカデメディア 「2005年末に『あぁ、今年も何もやってない!』を防ぐ会議」に参加する。はじめての参加。会議なので、アウトプットを出さねばならないのだけれど、ぼーっと口をあけて「はぁ」とうなづくだけに終始すると恥ずかしい。
2005-07-05
2005-07-04
メモしたい
方法 | 複数PC | メモ間のリンク | xyzzy | タイトル不要 |
---|---|---|---|---|
ChangeLog | × | △ | ○ | × |
howm | × | ○ | △ | ○ |
CalMemo | × | × | ○ | × |
増井さん方式 | ○ | △ | △ | ○ |
上のような表を書いて、自分には何が必要なのかを考えた。
- 特定の使用環境に強く依存しないこと
普段は xyzzy を使いたい、Mac なら Emacs、願わくば 702NK も。howm や CalMemo は×、ChangeLog と増井方式なら○ - 専用サーバをインターネット上に用意したくない
自由に使えるサーバを持っていないので、メールでメモを登録とかはできない。増井さん方式は×。 - 複数の場所でメモしたい
いつも、単一の PC でメモするわけではない。最低限、職場の PC と自宅の PC のメモを一本化したい。増井さん方式のみ○。iCal や SunBird は、複数のカレンダーデータを、ひとつのアプリケーションで表示・編集できるのでえらい。
追記:複数PC上で書いたメモを一箇所に集めるために、Wiki や WebDAV を用意するのは面倒なので、とりあえず rsync を使った。百式のページをなんとなく見ていたら FOLDERSHARE を見つけた。
2005-06-28
2005-06-27
ユビキタスメモ
増井氏の発表、ユビキタス時代の Life Hacks (via ご参加ありがとうございました!(LHC2005)) の最後で「ユビキタスなメモ書き」という話題が出てくる。
メモは Wiki を使って管理し、ネットワークにつなげないときにはローカルのミラーを使用する。PDA はサブセットを持ち歩く。PC ではウェブブラウザで Wiki を使う方法と、Emacs で閲覧編集をしているようだ。
あらゆる場面で単一の覚書を閲覧編集できると、プログラミングの最中にメモした tar コマンドのオプションを客先のトラブルシューティングで使える。会議中に思いついたことを、電車の中で携帯電話で読んで吟味できる。ドラッカーを読んでいるときに見つけた気の利いた言い回しを、上司と飲んでいる最中に披露できる。
私の使用環境は、Windows での xyzzy と携帯電話 702NK だ。Mac OS X 上の Emacs が使えると便利だし、自分の PC がないとき用にウェブブラウザから使えると更に便利だ。Wiki を使ってメモするところから始めてみよう。
ところで、MoinMoin には Python から簡単に呼び出せる XML-RPC 機能がある。これを使えば Python でコードを書くときに、HTTP を忘れてよい。
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4309462081/addicted2inde-22">ロバート・M・ブラムソン/「困った人たち」とのつきあい方</a>
観察の対象となった多くの職業グループの中には、同僚たちを困らせていたあのセスやジョージと同じような人々をかなりうまく取り扱うことのできる人が一人か二人はいた。[...] この「玄人たち」は何をやったのか? 何から逃れられたのか?
対人関係に限らず「よい問い」を持つことが、よい解決を生む。問題は、いかにして「よい問い」を持つかだ。よい問いを、私が未だに持てないということから、「いかにしてよい問いを持つか?」が、悪い問いであることが分かる。
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4003310233/addicted2inde-22">福沢諭吉 / 学問のすヽめ</a>
林望が、耳から聴いて力強く感じる名文であると、何かの本で評していたような気がする「学問のすヽめ」を読んだ。上手に音読すると、言葉が途切れずに、音楽のように流れて聞こえる。内容の理解がおろそかになる。精読して理解をする。
主題は「独立」である。最近隙を見せたら、村上龍が独立という言葉を使う。
もし国の政事につき不平の箇条を見出し、国を害するの人物ありと思わば、静かにこれを政府へ訴うべき筈なるに、政府を差置き自ら天に代わりて事をなすとは商売違いもまた甚だしきと言うべし。
ルールを無視するな、と。必殺シリーズやハングマンは好きだったのだ。
蟻の如きは遥かに未来を図り、穴を掘って居処を作り、冬日の用意に食料を貯うるに非ずや。然るに世の中にはこの蟻の所業をもって自ら満足する人在り。
いわゆる旧を信ずるの信をもって新を信じ、西洋の文明を慕うの余りに兼ねてその顰蹙朝寝の僻をも学ぶものと言うべし。
きちんと物事を考えるべきであるという主張である。そして物事を論理的に考える基礎として、学問が必要である。本の中には「一例を示さん」と、例が書かれているので、分かりやすい。
2005-06-25
Franklin Covey のプランナー
Franklin Covey のソフトを使ったことがある。ミッションステートメントの重要性を訴える映像を見て、価値観やミッションを設定したところまでは覚えている。手帳風味のインターフェイスだったと記憶している。そのインターフェイスが使いにくくて、結局 Palm 付属のソフトウェアに戻った。
今日、会社の研修で Franklin Covey のプライオリティのセミナーに参加した。価値観を見つけ出し、目標を設定し、目標に基づいた週間計画や毎日の計画を立てるという内容である。実践ツールとしての手帳ももらった。価値観のページを参照しながら、目標を立てる。目標のページを参照しながら、月間計画を立てる。月間計画を参照しながら週間計画を立てる。タスクを翌日に持ち越すときには手で書き換える。明日の計画を立てるために、5ページくらい参照しなければならない。
手帳が殺人的に使いにくいので、ソフトウェアを探してみると、ウェブアプリケーション版 と PDA版 がある。ウェブ版は30日間無料で、1年で4200円である。あいかわらず手帳風味のユーザインターフェースだった。縁は皮の手帳を開いたような絵で、真ん中にリングの絵がある。週間計画のページは、左右見開きに3日ずつ書き込めるように枠が書かれていて、土曜日と日曜日がご丁寧に平日1日分の幅である。
2005-06-06
<a href="http://coreblog.org/ats/669">Symbian/702NKな合宿</a>
柴田さんが 702NK で動く Python スクリプトのサンプルを公開しています。ユーザーインターフェースの appuifw モジュールのサンプルです。
2005-06-03
Series 60 用 Python のサンプル weather_maps.py
Nokia の携帯電話 702NK 上で動く Python には、簡単ながらもなかなかなサンプルがついています。weather_maps.py はアメリカの天気予報画像をダウンロードするサンプルです。コードがあまりにも簡単で驚き。
# Copyright (c) 2004 Nokia
# Programming example -- see license agreement for additional rights
# Simple GUI example
#
# commented by Toru Furukawaimport socket
import urllibimport e32
import appuifw# List of triplets "Name", "URL", "extension"
choices=[(u"US Graphical Forecast", "http://weather.gov/forecasts/graphical/images/thumbnail/Thumbnail_Wx4_conus.png", "png"),
(u"US Radar Image", "http://weather.gov/mdl/radar/rcm1pix_b.gif", "gif"),
(u"US Satellite Image", "http://weather.gov/satellite_images/national.jpg", "jpg") ]
tempfile_without_extension = "c:\\weather"# リファレンスより...
# The appuifw module offers an interface to Series 60 UI application
# framework. The services of this interface may only be used in the
# context of the main thread (the initial thread of a UI application
# script).
old_title = appuifw.app.title
appuifw.app.title = u"Weather forecast"L = [ x[0] for x in choices ]
# popup_menu はポップアップメニューのダイアログを表示して、
# 選択したインデックスを返す。
# 第1引数は選択肢のリスト。各要素は文字列、または文字列のタプル。
# ユーザが選択しなければ None を返す。
index = appuifw.popup_menu(L, u"Select picture")if index is not None:
# ダウンロードする URL と、その画像の拡張子を取り出す
url = choices[index][1]
ext = choices[index][2]
tempfile = tempfile_without_extension + "." + exttry:
print "Retrieving information..."
# urllib が入ってる!
urllib.urlretrieve(url, tempfile)# e32 モジュールは Symbian OS 関係のユーティリティ。UI は含まれない。
# Ao_lock は、UI イベントをブロックしないで動くようにするのに使う。
# Ao_lock.wait() で待ち状態に入る。
# Ao_lock.signal() で待ち状態から抜け出す。
lock=e32.Ao_lock()# appuifw.Content_handler は、MIME タイプに応じて、ファイルを処理する。
# 引数には処理終了時に呼び出すコールバックを指定する。
# ここでは画像表示が終わると、lock の待ち状態を解除する。
content_handler = appuifw.Content_handler(lock.signal)
content_handler.open(tempfile)
# Wait for the user to exit the image viewer.
lock.wait()
print "Image viewer finished."
except IOError:
print "Could not fetch the image."
except:
print "Could not open data received."appuifw.app.title = old_title
2005-06-02
2005-05-31
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 socketclass 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, SimpleXMLRPCRequestHandlerclass 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, SimpleXMLRPCRequestHandlerclass 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>
2005-04-30
Javascript のみで動くアプリケーション
職場で、プログラマではない人々が使うような、ちょっとしたツールを作ろうとすると、
アプリケーションサーバ用にマシンを用意しない
インストールとバージョンアップが簡単
という制限があります。しょっちゅう、バグが見付かるので、再インストール無しで動かせるように、JavaScript で書いたページを共有フォルダに置いてあります。なんと原始的な。JavaScript だけで Migemo を作ろうとしているのも、ちょっとした検索ツールを作ろうとしているからです。
で、そんな愚痴を書こうとして気づいたのですが、Google Desktop や SpamBayes のように、ローカルで HTTP を喋るプロセスを動かせばいいじゃん、と。プログラム本体は Python で書いておいて、ネットワーク上にファイルとして保存しておく。各ユーザはHTTPサーバを起動するプログラムだけインストールしてもらって、リクエストハンドラはファイルから読み込んで eval() するとか、やりかたはいくらでもありそうだ。
そもそも共有フォルダにプログラムを置いとけばいいじゃん。
とまあ、自分のアホさ加減に気づいた、週末でした。
Javascript のみで動くアプリケーション
職場で、プログラマではない人々が使うような、ちょっとしたツールを作ろうとすると、
アプリケーションサーバ用にマシンを用意しない
インストールとバージョンアップが簡単
という制限があります。しょっちゅう、バグが見付かるので、再インストール無しで動かせるように、JavaScript で書いたページを共有フォルダに置いてあります。なんと原始的な。JavaScript だけで Migemo を作ろうとしているのも、ちょっとした検索ツールを作ろうとしているからです。
で、そんな愚痴を書こうとして気づいたのですが、Google Desktop や SpamBayes のように、ローカルで HTTP を喋るプロセスを動かせばいいじゃん、と。プログラム本体は Python で書いておいて、ネットワーク上にファイルとして保存しておく。各ユーザはHTTPサーバを起動するプログラムだけインストールしてもらって、リクエストハンドラはファイルから読み込んで eval() するとか、やりかたはいくらでもありそうだ。
そもそも共有フォルダにプログラムを置いとけばいいじゃん。
とまあ、自分のアホさ加減に気づいた、週末でした。
2005-04-24
Mozilla の document.load() は 4096 バイトまで?
FireFox で かな漢字変換用の辞書を読み込んだのですが、うまくいかない。 document.implementation.createDocument(...).load(url) で大きめのファイルを読み込もうとすると、4096 バイトでちょんぎられてるっぽい。XUL/Migemo では、もっと大きいファイルを読めてる。JavaScript だけでは、きついか。
2005-04-18
JavaScript で同期的に XML ファイルを読み込む
Migemo を JavaScript で動かそうとしているわけですが、ファイルを読み込むことができないというのは、なかなか面倒です。Mozilla では document.implementation.createDocument() で作ったオブジェクトの load() メソッドで、XML ファイルにアクセスできます。onload にコールバックを指定するという方法で、ファイル読み取り後の処理を指定します。
で、これだと、同期的に扱えないじゃんと、悩んでいたら、FAQT にサンプルがありました。
var xmlDocument = document.implementation.createDocument('',
'dummy-root', null);
xmlDocument.async = false;
パラメータを指定するだけ。ふーむ。
2005-04-11
落語のCD と DVD
ずーっと前から、ウィッシュリストに入れてあった、落語の CD と DVD を買いました。
桂 枝雀 落語大全 第一集と特選!! 米朝 落語全集 第二集。知ったかぶりしてもしょうがないので、面白かった、とだけ書いておきます。iPod とか、そういうのを買ってしまいそう。
JavaScript/Migemo
興味 (趣味ではない) と実益を兼ねて JavaScript で Migemo を作ろうと試みました。FireFox でのみ確認。
XUL/Migemo があるだろうっていう話なのですが、ごもっともです。ソースファイルを見つけられなくて、自分でてきとうに作り始めました。そしたら、あるんですよね。Mac OS X だったら、Library/Application Support/Fire Fox/Profiles/xxx.default//Extensions/{01F8DAE3-FCF4-43D6-80EA-1223B2A9F025}/chrome/xulmigemo.jar ってファイルがあります。これが、実は zip ファイルで、解凍したら、JavaScript のソースがでてきました。がーん。
2005-04-04
WyPy を読む -- lambda の置き換え
ひきつづき、WyPy 読み。lambda とか reduce を読むのが苦手なので、手続きっぽく書き換えました。おそらくは等価なコードは、以下のとおり。
#!/usr/bin/pythonimport re
import os
import cgid = os.listdir('.')
h = '<a href=wy?'# BEFORE:
#p,e,g,s=tuple(map(cgi.parse().get,'pegs'))
#
# AFTER:
p = cgi.parse().get('p')
e = cgi.parse().get('e')
g = cgi.parse().get('g')
s = cgi.parse().get('s')# BEFORE:
#f=lambda s:reduce(lambda s,(r,q): re.sub('(?m)'+r,q,s), (('\r',''),('([A-Z][a-z]+){2,}',lambda m:('%s'+h+'e=%s>?</a>',h+'g=%s>%s</a>')[m.group(0) in d]%((m.group(0),)*2)),('^{{$','<ul>'),('^# ','<li>'),('^}}$','</ul>'),('(http:[^<>"\s]+)',h[:-3]+r'\1>\1</a>'),('\n\n','<p>')),s)
#
# AFTER:def findAndReplace(string, (pattern, repl)):
return re.sub('(?m)'+pattern, repl, string)def replaceWikiWordWithLink(m):
if m.group(0) in d:
template = h+'g=%s>%s</a>'
else:
template = '%s'+h+'e=%s>?</a>'
return template % ((m.group(0),)*2)def filter(s):
"""
s = findAndReplace(s, ('\r',''))
s = findAndReplace(s, ('([A-Z][a-z]+){2,}', replaceWikiWordWithLink))
s = findAndReplace(s, ('^{{$','<ul>'))
...
"""
return reduce(findAndReplace,
(('\r',''),
('([A-Z][a-z]+){2,}', replaceWikiWordWithLink),
('^{{$','<ul>'),
('^# ','<li>'),
('^}}$','</ul>'),
('(http:[^<>"\s]+)',h[:-3]+r'\1>\1</a>'),
('\n\n','<p>')),
s)
# BEFORE:
#o,g=lambda y:(y in d and cgi.escape(open(y).read()))or'',(g or p and[open(p[0].strip('./'),'w').write(s[0])or p[0]]or[0])[0]
# AFTER:def o(y):
if y in d:
return cgi.escape(open(y).read())
else:
return ''if g:
g = g[0]
elif p:
open(p[0].strip('./') ,'w').write(s[0])
g = p[0]
else:
g = 0
# BEFORE:
#print'Content-Type:text/html\n\n'+(s and', '.join([f(n)for
#n in d if s[0]in o(n)])or'')+(e and'<form action=wy?p=%s method=POST><textarea\
# name=s rows=8 cols=50>%s</textarea><input type=submit></form>'%(e[0],o(e[0]))
#or'')+(g and'<h1>%ss=%s>%s</a>,%se=%s>edit</a></h1>'%(h,g,g,h,g)+f(o(g))or'')
#
# AFTER:print 'Content-Type:text/html\n\n'
if s:
print ', '.join([filter(n) for n in d if s[0]in o(n)])
else:
print ''if e:
print '<form action=wypy.cgi?p=%s method=POST>' % e[0]
print '<textarea name=s rows=8 cols=50>%s</textarea>'% o(e[0])
print '<input type=submit>'
print '</form>'if g:
print '<h1>%ss=%s>%s</a>,%se=%s>edit</a></h1>'%(h,g,g,h,g)
print filter(o(g))
WyPy を読む - ブール演算
11行の Python スクリプトで実装された Wiki「WyPy」を読んでみました。えげつない。Python コードとは思えないくらい、implicit に動作しています。インデントが無いし。
まず、困ったのが↓これです。
print '...'+(s and', '.join([f(n)for n in d if s[0]in o(n)]) or '')+'...'
知っている人は知っている (トートロジー) のでしょうけれど、私はちゃんと分かっていませんでした。というわけで、マニュアルを調べました。5.10 Boolean operations のところに、ちゃんと載っています。以下、意訳。
- Python の論理演算は None, 数値の0、空のシーケンスを偽として扱います。その他の値は真。
- 式「x and y」は、最初に x を評価する。x が偽なら、x の評価値が返される。そうでなければ、y が評価され、y の評価値が返される。
- 式「x or y」は、最初に x を評価する。x が真なら x の評価値が返される。そうでなければ、y が評価され、y の評価値が返される。
- 最後に評価された値が返される。True / False に強引に置き換えたりしない。
ふむふむ。「最後に評価された値が返される」っていうのがポイントですね。ちょっと試してみましょう。
>>> "Spam" and "Ham"
'Ham'
>>> "Spam" or "Ham"
'Spam'
>>> "" and "Spam"
''
>>> "" or "Spam"
'Spam'
あー、なるほど。では、最初のコードに戻りましょう。
print (s and', '.join([f(n)for n in d if s[0]in o(n)]) or '')
というコードは、以下のように書き換えることができるわけです。
if s:
result = ', '.join([f(n) for n in d if s[0]in o(n)])
if result:
print result
else:
print ''
else:
print s
変数 s には、常に文字列が入っているとすると、s が偽になるのは '' のときです。また、この処理は HTML のコンテンツを書き出している部分なので、「print ''」というのは、事実上、何もしないのと同じです。というわけで、
if s:
', '.join([f(n) for n in d if s[0]in o(n)])
と書き換えることができます。ふーむ。
2005-04-02
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4478420440/addicted2inde-22">エリヤフ・ゴールドラット「チェンジ・ザ・ルール」</a>
原題は "Necessary But Not Sufficient"。ERP の導入は、必要だけれど十分ではない、と。評価尺度、つまりルールを変えなければ、利益にはつながらない。そんな小説。
p.174 「[...] 新しいテクノロジーの導入プロセスの中で、ルールを規定するのを怠ったらどうなるだろうか。いまだに昔ながらのルールに基づいて行動しているとしたら? 以前の古い限界がいまだに存在することを前提としたルールだ」「その場合、ルール自らが限界を課すことになると思う」
p.142 顧客からのオーダーはある、資材もある、作業員の手は空いている。それでも作業を開始しない。... 『いったい、いつ解雇を言い渡されるのか』
たとえば、製品の組み立てをする部署があったとする。
組み立てには1台あたり5時間かかる
1週間後に出荷するべき製品の資材が手元にある
明日に出荷するべき製品の資材が 2 時間後に到着する
もしかすると突発的に緊急の組み立て要請があるかも
こういう状況で、2時間何もしないで待てるかどうか。そういうオプションを検証できるかどうか。
考えられる評価尺度方法として
p.278 <スループット・ダラー・デイズ> <インベントリー・ダラー・デイズ> を基準に評価
というのがある。(製品の価格) x (遅れ日数)。
p.36 こちらのサポートセンターでは、質問を受けてから回答するまでの時間を回答時間として記録している。そっちでは、質問から回答をもらって最終的に問題が解決するまでの時間というわけか。
後者のほうが、よさげ。ただし、いかにして「価格」を決めるのかが問題です。対象となる製品の価格でいいのか、システム全体なのか、それとも過去未来の購買を含めるのか。
2005-03-23
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4478490341/addicted2inde-22">斎藤嘉則「問題発見プロフェッショナル」</a>
(P.31) 他人に「お若く見えますね」と言われるとすっかり嬉しくなってしまうが、本当に若い人は「お若く見えますね」などと言われないということにも気づかない。
がーん。これからは若作り禁止。
後半は分析の方法論らしきものが載っていますが、大学の学生実験とかレポートの類でやってきたことがほとんどです。問題発見ならジェラルド・ワインバーグの「ライトついてますか?」やエリヤフ・ゴールドラットの「ザ・ゴール 2」のほうが発見があります。
2005-03-22
村上龍と自立
村上龍を何冊か読んでみました。最近のテーマは「自立」のようです。
まず多いのは、自立というのは望みさえすればそれはすぐに可能になる、という誤解だ。
(恋愛の格差 p.200)
自立には、自分が置かれている状況が影響する。あなたが親密性のある共同体に所属している場合と、移民や亡命者として外国にいる場合とでは自立の概念や条件が大きく変わるが、いずれにしろ自立には仕事・職業が関係している。恋愛の格差 p.202
今どきの、資本主義的な社会では、経済的な自立なしに自立は成り立たないようです。じゃあ、ギャラがよければいいのかというと、そうでもないわけです。いきなり倒産したり、解雇されたり、大地震で出世とか悩んでる場合じゃなくなったり、というリスクが常にある。価値あるものを手に入れるためには、価値あるものを与えないといけない。強盗とかを除いて。
誰もが個人主義になってしまって公共性が無視される傾向にある、みたいなことがよく言われているようだ。だがそういう場合の個人主義というのはたかだか「嗜好」と「公共性無視」の問題であることが多い。ウーロン茶より緑茶がいいとか、[...] 煙草の投げ捨てが多いとか、たいていそういったことだ。個人主義とは何の関係もない。
(誰にでもできる恋愛 p.75)
個性とかいう言葉も、同じような使いかたをされがちです。とか言いつつ、私も大昔は自分に個性があるという確信、または個性があるのではないかという期待を胸に秘めていました。あー恥ずかしい。
そんなにひどく殴られて、どうして逃げないんだって。忘れてはいけないのは、そこ彼女の家だということです。その家以外での生活をイメージするのは簡単じゃないですよ。
(最後の家族 p.299)
これは、会社にしがみつく (私のような) サラリーマンにも言えるかも知れません。新しい雇用者がいると仮定しても、初めて働き始めた今の職場を離れることは、少しイメージしにくい。誰か他の人が働いている様子を見ると、イメージが湧くかもしれません。
2005-03-21
AirMac Card
無線LANにするべく、iBook に AirMac Card を搭載しました。ベースステーションは Buffalo のやつで、ビックカメラで購入。ほかの Windows 機でも使うし、Mac はそのうち引退するだろうし。
ところが、ベースステーションと iBook の間に扉一枚ものはさんだだけで、通信できない。なんか電波が検出できてません的な反応になる。あーあ、明日ベースステーション用のアンテナでも買おうかと思いつつ、AirMac Card を挿しなおしてみたら、ずいぶんマシになった。と書いていたら、また、弱くなってきたっぽい。うーむ。
2005-03-15
2005-03-01
1日なので有給休暇です
とか言ってみる。引越しに向けて、荷作りや、各種手続きなどをやっていく。これを機にモノを捨てまくります。粗大ゴミの収集にお金がかかるので、あやうく捨てるのを躊躇いそうになりますね。ほんとはリサイクル業者なんかに引き取ってもらうのがいいのかも。
2005-02-24
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4480877533/addicted2inde-22">山田ズーニー あなたの話はなぜ「通じない」のか</a>
p.65 1.面白い!と思った記事などを切り抜いて貼る。2.その面白い考えは、どういう「問い」から出てきたのか、文中に書いてあれば線を引く。3.文中に「問い」が書かれていなければ、「意見」から逆算して割り出す。
ふむふむ。すぐに実践できそう。
p.77 ミステリーで名探偵は首ばかりひねっている。「おや?おかしいですね。犯人はどうして靴を脱がなかったんでしょう?」[...] 石頭の警部は最初から「わかった!犯人は」と正解を急ぐ。問いが働かない代わりに憶測、先入観、決めつけが働き迷走する。
技術サポートや技術営業におけるプロービングも然り。相手の本当の要望や問題が分からないうちに、解決しようとしてはいけません。
2005-02-21
なぞなぞ理論やぶれたり
たつをさんが「駄洒落は受けが悪いが、同じ内容をなぞなぞにすると受けが良い」というなぞなぞ理論を提唱しています。
今日、電車のなかでなぞなぞ大会が開催されているのを目撃。彼らは盛り上がっていたようですが、まわりは引いていました。なぞなぞ理論は決して万能ではないようです。いや、万能だとは、どこにも書かれていませんが。
というわけで、なぞなぞ理論に捕捉。「救いようのない駄洒落は、なぞなぞ理論もお手上げである」
ctypes で DAQmxBase
ctypes の Mac OS X 版がいつのまにやら出ていました。USB 接続の A/D 変換デバイスのプログラムを、Python から呼び出そうとしたら、Bus Error とやらが出る。ちょっとずつ、やっていこう。ちなみに C では動く。たぶん、ポインタ渡しがおかしいのかな、と勝手に思い込んでいる。
from ctypes import *DAQmx_Val_Cfg_Default = -1
DAQmx_Val_Volts = 10348
DAQmx_Val_GroupByChannel = 0
pointsToRead = 1
samplesPerChan = 1
timeout = 10.0DAQmxBase = cdll.LoadLibrary("/Library/Frameworks/nidaqmxbase.framework/nidaqmxbase")
task = c_ulong()
print DAQmxBase.DAQmxBaseCreateTask("hoge", byref(task))
print DAQmxBase.DAQmxBaseCreateAIVoltageChan(task, "Dev1/ai0", "",
DAQmx_Val_Cfg_Default,
c_float(-10.0), c_float(10.0),
DAQmx_Val_Volts, None)
print DAQmxBase.DAQmxBaseStartTask(task)
data = c_double()
pointsRead = c_ulong()# ↓ここでバスエラーが出る
print DAQmxBase.DAQmxBaseReadAnalogF64(task, pointsToRead, c_float(timeout),
DAQmx_Val_GroupByChannel, byref(data),
samplesPerChan, byref(pointsRead), None)print DAQmxBase.DAQmxBaseStopTask(task)
print DAQmxBase.DAQmxBaseClearTask(task)
2005-02-02
本屋さんでの微妙な関係
空港での乗継に時間があったので本屋に寄りました。"The Tipping Point" という本を書いた Malcolm Gladwell が "blink" という本を出していた。前作が結構おきにいりだったので、blink を持ってレジへ。となりのレジで会計している人が、ちらちらこっちを見ているなぁと思ったら、彼は前作 "The Tipping Point" を購入しようとしていた。
「おー、blink を買うのか。俺も買おうと思ったけど、tipping point まだ読んでないんだよな」「おーそうか。tipping point おもしろいよ」「まじでー! そいつは楽しみだ」「新作がおもしろい保証はないだけどなー」などと、全力で当たり障りのない会話をしました。
普段、日本の本屋さんで購入すると、ブックカバーをかけられるので気付かないけれど、同じ本を読んでいるというのは、なかなかによい共通点なのかも知れません。合コンで探すより、本屋のレジで張っているほうが、気のあう人を見付けられるかも知れない仮説。出会い系サイトとしての「本棚.org」というのはどうだろう。あー、もともと、控えめに、そういうものなのかな。
2005-01-27
What You'll Wish You'd Known
Paul Graham のエッセイの翻訳。興味を持った箇所は以下のとおり。書籍購入に関しては、いくらでもお金を出してくれたのに、ぜんぜん読んでなかったのが高校時代最大の敗因だと思います。Better Late than Never ってことで。
反抗は服従と同じくらいばかげたことだ。どちらにしてもきみは他人に言われたことに縛られている。
偉大な問いを発するのに何年もかかるとしたら、いま、16歳の君は何をしたらいいだろう。質問を見つける準備をするんだ。
子供であることが制限の多いことだって思ってるなら、子供を持ったらどんなことになるか考えてごらん。
What You'll Wish You'd Known
Paul Graham のエッセイ「What You'll Wish You'd Known」。興味を持った箇所は以下のとおり。書籍購入に関しては、いくらでもお金を出してくれたのに、ぜんぜん読んでなかったのが高校時代最大の敗因だと思います。Better Late than Never ってことで。
反抗は服従と同じくらいばかげたことだ。どちらにしてもきみは他人に言われたことに縛られている。
偉大な問いを発するのに何年もかかるとしたら、いま、16歳の君は何をしたらいいだろう。質問を見つける準備をするんだ。
子供であることが制限の多いことだって思ってるなら、子供を持ったらどんなことになるか考えてごらん。
2005-01-24
出張開始
なつかしのテキサスに出張。もちろん仕事なので、懐かしんだりするゆとりはないけれど。いまホテルに到着したところで、この後、夕食。明日からさっそくお仕事です。
東京からテキサスに来て思ったことは、テキサスでは土地があまりまくっているので湯水のように使われており、東京では人があまりまくっているので湯水のように使われている、ということか。うそ。
飛行機の中でクリステンセンの「イノベーションのジレンマ」を読みました。バリューネットワークのあたりが要復習。
2005-01-23
py-mode.l にエスケープ文字定義を追加
(set-syntax-escape *py-mode-syntax-table* #\\)
というの追加したら、バックスラッシュの入った文字列リテラルが正常に表示できると教えてもらったので、そのまま追加しただけです。多謝。
Windows 使ってないなぁ。
2005-01-21
2005-01-20
Python 2.4 のライブラリマニュアル
ぜんぜん協力していない Python マニュアル翻訳をしなければ、と、platex のインストールまではできました。単純に make するには、latex2html が必要らしい。いろいろ要るもんですね。pTeX は桐木さんのパッケージを使用しています。便利すぎ。
2005-01-19
Python for Series 60
Python for Series 60 は Nokia の携帯電話上で動く Python で、手持ちの携帯電話 702NK にインストールしました。ファイルブラウザや bluetooth 接続するサンプルなんかもついています。ついでに interactive console も。で、プログラムを書こうと思ったら、日本語入力から英語入力に切替える方法がわからなくて挫折。
公園および道路工事のおしらせ
最寄りの駅から自宅まで、公園兼歩道があります。数ヵ月がかりで、この公園を工事するというチラシが入っていました。曰く「現在の公園は、道路との段差が大きく、また、道路の歩道が狭いため ...」 この公園の利便性の悪さは、段差や歩道の幅ではなく、住み着いた人々が夜な夜な宴をひらき、軽い暴力沙汰の喧嘩をすることなのです。工事は名目なのか、それとも単純に年度末の予算消化なのか。