RSS

日々のメモ書き

Debian Developerが綴るメモ

りんかい線

大崎駅で乗り換えをいつもするんだが。

案内がわかりにくいと思う。次どこのホームから出るのよ。

GenericSetupを使う(2)

続き

少し思ったこととして、できればZopeの中に設定を入れるのはやめたいというのはあるのかもしれない。設定はXMLに入れる。ただ、互換性みたいな面からGSを使ってZopeの中に入れている。そんな気がするけど。できれば起動時に読み込んでしまってZopeの中には入れないようにしたいんじゃないのかな。必要ないもの。

GSに対応させる方法ですが、試行錯誤で今のところこんな感じかな。
__init__.py: profile_registr.registerProfile()を実行する。これでGSのprofileを使うことを実行。

profile_registry.registerProfile(
        name='default',
        title='ATAmazon',
        description='Profile for ATAmazon',
        path='profiles/default',
        product='ATAmazon',
        profile_type=EXTENSION,
        for_=IPloneSiteRoot)
で、実際にprofileを書いてく。
profiles/default/import_steps.xml: 必須ではないが…。GSの実行順序に依存関係があるときに必要らしい。
<?xml version="1.0"?>
<import-steps>
<import-step
id="ATAmazon_various"
version="0.3.20070303"
handler="Products.ATAmazon.setuphandlers.setupVarious"
title="ATAmazon: miscellaneous import steps">
Import steps that couldn't be mapped to other handlers.
</import-step>
</import-steps>
profiles/default/types.xml: まあ、こんなファイルをずらずら書いていくわけですよ
<?xml version="1.0"?>
<object name="portal_types" meta_type="Plone Types Tool">
<object name="AmazonItem" meta_type="Factory-based Type Information"/>
</object>
profiles/defaults/type/ATAmazon.xml: content typeへ与えるパラメータを書く
<?xml version="1.0"?>
<object name="AmazonItem" meta_type="Factory-based Type Information"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title">AmazonItem</property>
<property name="description">
</property>
<property name="content_icon">document_icon.gif</property>
<property name="content_meta_type">AmazonItem</property>
<property name="product">ATAmazon</property>
<property name="factory">addAmazonItem</property>
<property name="immediate_view">base_view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">False</property>
<property name="allowed_content_types"/>
<property name="allow_discussion">False</property>
<alias from="edit" to="base_edit"/>
<action title="view" action_id="view" category="object" condition_expr=""
url_expr="string:${object_url}/amazon_item_view" visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
url_expr="string:${object_url}/base_edit" visible="True">
<permission value="Modify portal content"/>
</action>
<action title="Properties" action_id="metadata" category="object"
condition_expr="" url_expr="string:${object_url}/base_metadata"
visible="True">
<permission value="Modify portal content"/>
</action>
</object>
つくりかけなのでこれが動かんとか言われても困る。いままではATAmazon.pyに書いていたコードをこっちに全部引っ越してくることになる。
setuphandler.py: 何か実行する必要があるときに書くらしい。
def setupVarious(context):
site = context.getSite()
logger = context.getLogger('atamazon')
logger.info("atamazon_various: Nothing done")
return

Extension/Install.py: QuickInstllerを使うのに必要

from Products.CMFCore.utils import getToolByName

def install(portal):
setup_tool = getToolByName(portal, 'portal_setup')
setup_tool.setImportContext('profile-ATAmazon:default')
setup_tool.runAllImportSteps()
setup_tool.setImportContext('profile-CMFPlone:plone')
return "Ran all import steps."
それからconfigure.zcml
  <genericsetup:registerProfile
name="default"
title="ATAmazon"
directory="profiles/default"
description="Extension profile for default ATAmazon setup."
provides="Products.GenericSetup.interfaces.EXTENSION"
/>

まあ、短かくなったものだ。

あくまで作りかけのコードなので、これをそのまま参考にしても駄目ですよと。

GenericSetupを使う

GenericSetupを使ったPloneのプロダクト作成をがんばる。

GenericSetup(GS)はPloneのセットアップをPythonのコードで行うのではなく、xmlで設定を行うための仕組み。skinの設定、Toolのインストール、Typeの登録、その他もろもろを一切pythonのコードを書くことなく実行する。設定を設定専用ファイルに分離したということでいいのかな。

現在ProductのExtension/Install.pyにごちゃごちゃとpythonのコードが書かれていて見通しが悪くなっている。それをGenericSetupにしてしまえば目的別のxmlファイルとなって一気にきれになる。QuickInstllerでもインストールできるが、GenericSetupに投げるだけのコードになっている。しかしわずか数行でおしまい。人によっていろいろと違う書き方がしてあってやなもんでしたが、これである意味標準化される。

思想としてMVCの一環かなという気がしないでもない。Content Typeの扱いなんかそう。今はArchetypesを使ってかなりテンプレート化した書き方が可能となっているけど、modelとcontrollerが入り混った感もある。pythonのクラスはODBにつっこむだけのデータだけと思えば、actionなんてものは外から与えるべきではないのか、という考え方は正しいと思う。modelとしてのclass、actionはGSから与える。メタデータもContent Typeにもともとあるわけではない、Ploneの側で必要だからメタデータ、だからGSで与える。確かにそうだ。

Zope3の考え方に従えば自然かなと。当然Viewをなんとかしろって話になるんだが、Zope3ならZCMLにadapterを定義してviewを定めるという方向なのかな。そこまではやってない。

ATAmazonが2.5で動かないので、直すついでに導入しようとしている。ごちゃごちゃと少しだけコードは書いたが、努力の過程はまた後日書く。

sshで内部へのトンネル

sshを使って外から内側へのトンネルを作る

# ssh -R 10022:localhost:22 -f remote.pri ping -i 60 localhost > /dev/null

tcptrace

tcpdumpの出力を解析してレポートに出してくれる。

# tcpdump -w dumpfile
# tcptrace dumpfie

あと、tcpdump以外も読めますと書いてあったが試してないのでよくわからない。 

NuPloneテーマ

Plone-3.0用のテーマのNuPloneがsvnのbundleに入った。

NuPlone snapshot 2007-02-27随分と変わった感じになった。ここまでできますという話なのかな。

iptablesでログ取り

iptablesを使ってsyslogにログを取る

# iptables -A OUTPUT -j LOG --log-prefix 'IPTALBES LOG:'
と実行すれば、kern.wanrでsyslogに送られる。facilityの変更の仕方はman参照。

syslogに
kern.=warn /var/log/iptables.log
と追加すればいい。

FirebugでCSS編集

CSSの編集するのによいツールはないかと捜していたんだが、Firbugを発見。

Webのデザインをするツールは前から捜していたが、CSSに対応していて、WYSIWIGでCSSの編集結果が見れるというものを捜していた。で、Firebugというものを発見。FirebugはFirefoxの拡張として実現されている。
表示しているHTMLをツリー表示させて、指示したところのCSSを表示する。親から継承したものは、どこから継承されたかまで表示されている。その場でCSSを編集すればすぐに反映されて結果がわかる。非常に便利なツールだ。ファイルに書き出せないのかな?

portal_cssをdebug modeで動かすとCSSファイルが分割されるので、当たり前だが、debugしやすい。

あと、JavaScriptの編集とデバッグもできます。そこまで使ってないけど。

ploneと日本語検索

ながらく放置していた日本語検索がおかしい件。

わかってはいましたが治しました。sys.setdefaultencoding('utf-8') をsite.pyで実行するだけなんだけどね。Debianなら/etc/python2.4とかに入っている。最初に実行される(インタプリタが起動してからは設定できない!)ので、ファイルを編集しなくちゃ駄目なわけなんだが、ちょっと気持ちが悪い。できれば設定等でやれたほうがいいに決まっているんだが。

H-IIA F12

情報収集衛星4号機を載せたH-IIAの打ち上げに成功。

今回の打ち上げではさっぱり情報が出てこないのでいまいち盛り上がりが。延期に延期を重ねたせいもあるけど。延期するたびに数千万円ぶっとぶH-IIAはお金があっていいなあ…。

< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 >