2006-01-01から1年間の記事一覧
まず rc スクリプト。最初の部分は chkconfig 用。優先度は 1 ~ 99 #!python # chkconfig: 345 99 1 # description: Zope 3 service # processname: runzope import sys import subprocess from os import path class Service(object): """Linux service bin…
LAMP で開発すると Apache のわけわからん conf と PHP のわけわからん ini と MySQL のわけわからん ini の面倒まで見なきゃいけないんだよね。 Zope はそういったバッドノウハウは少ないけど、何かあったら Zope のソース見て調べなきゃいけない。まあその…
プライマリカレンダーにしかイベントを追加できないということはありません。 POST,PUSH した XML の内容がおかしいときは、HTTP 400 が返り、body にエラーコードが載っています。 POST,PUSH するときは Content-Length を付加した方がいいようです。 Auth …
Google のアカウントと Google Calendar サービスを利用できるようにしておきます。 Google にログインします https://www.google.com/accounts/ClientLogin?Email=登録したメールアドレス&Passwd=パスワード&source=アプリケーション名&service=clというリ…
Google Calendar を GData を用いて操作するノウハウです。 詳しくは http://code.google.com/apis/gdata や http://groups.google.com/group/google-calendar-help-dataapi を参照して下さい。
Python の実行環境は起動時に、ユーザが環境を設定するためのスクリプトとして lib/site-packages/sitecustomize.py を実行する。 Zope 固有の設定を書くのは何となくイヤなのでパスの通ったディレクトリから sitecustomize.py を探して実行するようにする。…
Zope 3 というか、ZODB 上でシンボリックリンクの真似事はできるのだろうか。 Zope で使うオブジェクトはかなり自由に定義できるが、zope.app.container.interfaces.IContained を実装していないと獲得 (traverse) の仕組みが全く働かない (実際にはインター…
TAL が便利だから何でもかんでも TAL でやってる。 特にHTMLレンダラみたいなウザくてタルい作業は TAL しか使ってない気味。ヤバげ。 そんな中で勢いで書いた、インターフェースを文字列で指定してインターフェースが実装されてればそのままのオブジェクト…
zope.interface にある型と zope.app.form.interfaces.IWidget な HTML ウィジェット(他のシステムにも適用できるようにこんな形にしてるんだろうが)を使ってゴニョゴニョしているがやたら面倒くさい まず __builtins__ と標準ライブラリに十分に揃っている…
def intelligentcompare(s1, s2, ignorecase = False): """\ This function automatically detects numerical string for intelligent comparison. >>> cmp('2. a title of 2nd chapter', '10. a title of 10th chapter') 1 >>> intelligentcompare('2. a ti…
途中にとんでもないコードがあるけど気にすることはない import locale, operator def currencyformat(currency, i18n = False, conv = {}): localeconv = locale.localeconv() localeconv.update(conv) conv = localeconv cs = ((not i18n) and (conv['curr…
zope.interface はアダプタくらいまでしかなくて、factory class とか multi adapter とかは別の場所にある。なんだよこの構造は。 ファクトリの列挙は from zope.app import component factories = list(component.getFactoriesFor(Interface))ファクトリの…
一つだけ設定できる。 設定場所はレジストリの次に示す箇所である。 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f6-21d7-11d4-bdaf-00c04f60b9f0}「窓の手」を用いるのが最も簡便な手段だろう。 {2559a1f?-21d7-11d4-bdaf-00c04f60b9f0} の ? の部分…
Windows XP でスタートメニューの「右側」、マイコンピュータやファイル名を指定して実行などと同列にリンクを追加できないかと調べてみた。 当初は自由にリンクを設定できると考えていたが、OEM メーカーのヘルプ機能へのリンクを設定するために用意されて…
NTFS5 のジャンクションはドライブ、パーティション、パスで構成されている、みたい。 inode でリンクしてる訳じゃないから、リンク元のパスが変わるとジャンクションは使用できなくなる。
Python のリスト関係関数 list tuple dict keys values iterkeys itervalues iteritems filter map reduce reversed sorted string join operator add etc ... reduce をいつも忘れる。fold に割り当てていいだろうか
Vine を入れてたサーバーが再起動しなくなったと思ったら fsck する毎にガシガシ inode が零れてく。HDD がクラッシュ寸前の模様なので無理せずにデータをコピーしつつ不貞寝。 しかしシステムに関するファイルが壊れないのは何の呪いなのか。みごとにログと…
Windows の再セットアップをしたら Python モジュールのインストールでコケました。setup.py とか install.py とかで $ setup.py install damn! $ python setup.py install解決しました。sys.argv に関連するコードですね、きっと。
RFC とかを一切無視して適当な URL エスケープ関数を書くと def quote(v): return reduce(lambda i, j: i+j, ['%%%2.2x' % (ord(i), ) for i in v], '')こうなる。これはどうでもいいとして、Zope の TAL から href とかに URL を出力したいときは python:mo…
class Foo: @classmethod def clsMethod(self): pass def insMethod(self): passというコード。Foo.clsMethod がクラスメソッドになる。 type で判別 >>> type(Foo.clsMethod) <type 'instancemethod'> >>> type(Foo.insMethod) <type 'instancemethod'>無理。 isinstance, types で判別 >>> import types ></type></type>…
Zope3 にはコンテンツの追加や移動などノード操作に関する特殊なイベントを通知する機能があります。 from zope.app.container.interfaces import IObjectAddedEvent, IObjectMovedEvent, IObjectRemovedEvent, IContainerModifiedEvent from zope.app.event…
いわゆる include みたいなのがなかったので。 context/request/view/template などは継承されるが、tal:define/tal:repeat で設定した変数は継承されない。 context/request ゃ tal:define で設定した変数は使用できる。 ファイル名には絶対パスも相対パス…
JavaScript のファイルなどを TAL で処理せずに挿入する際に使用する。 ファイル名には絶対パスも相対パスも使用可能。 implements.py from zope.tales.expressions import StringExpr from zope.app.exception.interfaces import UserError from os import …
Property Attribute Annotation どう違うの? Web2.0とかいちいち追う価値もないし。
prototypeはやりすぎると俺言語に変貌するので注意。
名前空間は連想配列でプロパティとして扱える。
{'name1':1, 'name2':2}
new Array() new Array(1,2,3) new Array(size) var list = new Array(1,2,3); alert(list); >1,2,3 list.push(4); alert(list); >1,2,3,4 list.push(5); alert(list); >1,2,3,4,5 alert(list.pop()); >5 alert(list); >1,2,3,4 for (var i in list){ // 動…
正直覚えてられん
persistent.list.PersistentList でスライスしようとするとうまくいかないからyield した for item in list するよりも for i in xrange(): yield[i] の方が速かった