2006年9月30日土曜日

Carbon EmacsでPython

Mac OS X上のPython開発環境を整えようと、Python Developers Campの前夜に思いついて四苦八苦。

まずは最新のPython 2.5(python-2.5-macosx.dmg)をPyJUGのサイト(http://www.python.jp/pub/ftp.python.org/python/2.5/)からダウンロードしてインストール。これで、/usr/local/binにPython 2.5が入る。

ただこのままだと/usr/binにあるPython 2.3が先に呼ばれてしまうため、PATHの検索順序を変更して/usr/binよりも/usr/local/binを先に検索するようにしないといけない。通常のUnixであればホームディレクトリの.cshrcなり.bashrcなりにPATHの設定を書けばいいのだが、Mac OS XでこれをやってもemacsからPythonを呼ぶと/usr/binのPython 2.3が呼ばれてしまう。

結局、ホームディレクトリに~/.MacOSX/environment.plistというファイルを作って、これにPATHを設定することで解決。

設定内容は下記の通り。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
    <key>PATH</key>
    <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin</string>
</dict>
</plist>
参考:http://developer.apple.com/qa/qa2001/qa1067.html

Mac OS X上で動作するCarbon Emacsは、emacs 22ベースなので最初からpython-modeが使える。

Carbon Emacs:http://homepage.mac.com/zenitani/emacs-j.html

さらに、/Applications/Emacs.app/Contents/Resources/site-lisp/python-modeにあるpycomplete.pyを/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sit
e-packages/にコピーする。これで、pycompleteが使えるはず。
以下、簡単な使い方。





M-TAB補完
C-c C-cバッファの内容を Python で実行
C-c C-rリージョンの内容を Python で実行
C-c C-s任意の式を Python で実行
C-c C-zPython の出力を表示

しかし、Python Developers Campの会場でこんなこと書いてていいのかね。
どんどん人も集まってきているというのに。(^^;



2006年9月25日月曜日

布田天神のお祭り

23日の土曜日は調布の布田天神のお祭りだった。

先日入隊したスカウトのリーダーから参加するように誘われたので、息子をつれていく。

息子は、友達と一緒にお祭りのはっぴを着て、豆絞りのはちまきを締めて、半日太鼓を引っ張って布田の町を練り歩いた。

最後にお菓子をたくさんもらって大満足かな。途中でスーパーボールすくいもやらせてもらったようだ。

私も妻も地方出身なので、ここでは完全なよそ者だ。しかし、スカウトに入隊したことで地元のコミュニティに息子を参加させることができるようになった。これは、うれしい副作用だ。

これからも機会があれば、どんどん参加させよう。


お祭りを見て歩いていた妻が、KENNY'sというアイリッシュパブを見つけた。

なにせ夫婦で、調布にはギネスの生を飲ませる店がないと嘆いていたところだったので、さっそく夕飯を食べにいく。(^^)

ギネスとキルケニーの生を1パイントずつと、ミックスナッツ、フィッシュアンドチップス、シェアードパイを食べる。満足、満足。

お店の人に聞いたところ、今年の6月に開店したばかりだとか。これからごひいきにするので、ぜひつぶれずにがんばってもらいたいものだ。

KENNY's http://chofu.shop-info.com/kennys/



2006年9月21日木曜日

ヘッドハンターが馬鹿すぎる

数年前にも同じようなことがあって、ずいぶん不愉快な思いをしたことがある。

しかし、ヘッドハンターというのは相手の職業も知らずにハントするのかね?

あまりといえば、あまりにも馬鹿すぎ。



鈴木嘉平です。



やはりわかっていないように思います。

私は出版社に勤めている編集者ですよ。ITエンジニアではありません。



XXXX wrote:

> 鈴木様

>

> ご連絡ありがとうございます。

> それでは早いお話ができるかと存じましたが、前回は良いお話ではなかったのですね。

> 職業までは把握しておりませんが、今はガリガリ現場的なことをなさっていなくとも、

上流工程、ビジネスコンサルができる知識をお持ちと伺っております。

>

> -----Original Message-----

>

> XXX 様

>

> 鈴木嘉平です。

>

> 以前、ヘッドハンティングを受けた経験はあります。ただ、先方が私の職業を完

> 全に勘違いしていてひどい目にあいました。

> あなたは私の職業がなんであるか、きちんと把握されているのでしょうか?

>

>

XXXX wrote:

> 鈴木様

>

> 突然のご連絡、大変失礼いたします。

> 私、XXXと申します。

> 当社は、東京は溜池山王に事務所を構えております外資系人材紹介会社です。

> (是非当社WebサイトXXXにもアクセスしてみて下さい)。

>

> この度、大手外資系金融企業からのご依頼でインフラスペシャリスト(プロジェクトリーダー、

マネージャー、及びビジネスコンサルタントクラス)を探しておりまして、当社のヘッドハンティングを

目的として活動しているリサーチチームより、貴殿が現在大変ご活躍されていると伺いまして、ご連絡

させていただきました。

> 今までにヘッドハンティングを受けたご経験はおありでしょうか?

>

> 詳細は近いうちに、直接お会いしてご説明したいと思っておりますので、よろしければご都合の宜しい

日時をお知らせ頂けませんか。

>

> もし今すぐのご転職をお考えでなくても、一度お会いさせて頂いて情報の一つとしてお話しさせて頂け

ましたら幸いです。

>

> ご連絡いただけますことを心よりお待ちしております。

> 宜しくお願い致します。



入隊式

9月17日は息子のカブスカウトの入隊式だった。

スカウトの制服に身を包み、団旗に左手を沿え、右手を高く上げて誓いの言葉を述べる息子を見ていると、自分の子供の頃を思い出す。私は小学校5年生から高校卒業までスカウトとして活動していた。キャンプやナイトハイクなど、楽しい思い出がいっぱいある。

息子もスカウトとしての活動を楽しんでほしいと思う。まず最初は赤い羽根の募金活動かな。




Open Source Summit 2006

9月16日に行われたOpen Source Summit 2006に行ってきた。

特に何も書かずにいたわけだが、きんねこさん

参加プロセスがオープンでないイベントなので、参加者はフィードバックはオープンにしないとね(^^)。

と言っているので、何か書いておこう。

Summitという名前はどうかと思うが、オープンソース関係の濃い人たちが集まったことはたしか。全部で40人くらいか。IT系の出版社からも各一名ずつ参加者がいたのが、ちょっと不思議。

以下、メモを取っていなかったので軽く感想なんぞを。


最初に行われたライトニングトークで印象に残ったのは、日本Sambaユーザ会太田さんの話。

  1. あるオープンソースソフトウェアが発表され、ユーザが盛り上がってコミュニティが発生
  2. 活発に活動し、ソフトウェアの日本語化・ドキュメントの翻訳などを行う
  3. 活動の結果、ユーザも増え、ソフトウェアも普及し、情報も増える
  4. コミュニティに求められるものが少なくなり、中心人物達のモチベーションが下がる
  5. ほぼ活動停止状態に

というコミュニティのライフサイクルを感じてしまった。

あと、NoBUG佐々木さんの地方とオープンソースの話。

企業に行って、「オープンソースを導入しましょう」と言うと、「そういうの決められるのは東京なんだよね」と言われちゃうと。これは結構つらいな。

あとの発表については、吉岡さんの日記を見てもらいたい。

ライトニングトークの後自由討論になったわけだけど、どんな本なら売れるのかね? といった、どちらかというと出版関係の話をしてしまった。そのテーマで原稿書ける著者が日本にいるの? とか、誰それさん原稿書かない? とか。我ながら編集者っていうのは、しょうもない人種だよな。どこでもいつでも著者探しだ。;-(

5時半からは飲み会。スタート早い!

飲み会では、きんねこさんに会えたのがうれしかった。でも、聞いたのはつらい話だった。
2次会では、みやはらさん達と今後のOpen Source Conferenceをどうすべきか話をする。私としては、企業色の強いカンファレンスにはせずに、今のゆるい感じのカンファレンスのままにしたほうがよいと主張しておいた。
Open Source Conferenceの今後については、これからも議論していくことになるんじゃないかな。
結局3次会のカラオケまで参加して、タクシーで帰宅。

第一回ということで、議論までいきつかず雑談で終わってしまった話も多い。でも、だからといって無益だったとは思わない。第二回、第三回と続けていくことで、それなりの議論を詰めていくことができると思う。今後に期待しよう。

みやはらさんが、オープンソースのSNSをOpenPNEで作ってくれた。興味のある人はメールくれれば招待するので、よろしく。(^^)



2006年9月20日水曜日

出っ歯は舌のせい

二年前の夏から行っている歯列矯正だが、ここにきてちょっと停滞気味。前歯がうまく動いてくれない。

医者曰く、

「舌の裏側の筋が短すぎて、舌の位置が正しくならないため、舌が歯を押してしまって矯正できない。矯正を進めるためには舌の筋を切って、舌の位置を正す必要がある。」

とか。実は、舌の筋が短いという話は歯列矯正を始めた当初から医者に指摘されていたのだが、意識的に無視してきた。
だって、生まれて45年、一度だって舌の筋が短くて困ったことなんてないし、舌の位置が悪いと言われてもおいそれとは納得できない。

しかし医者に言わせると、歯並びの悪い人の多くが舌の動かし方に問題があるそうで、出っ歯になる人のほとんどは舌で歯を押す癖があるんだとか。だから歯列矯正をする際には、機械で歯の位置を直すのと同時に舌の正しい動かし方の訓練をして、矯正した歯並びを再度悪くしないようにすると。

で、私の場合、舌と下顎をつないでいる筋が短いため、舌が正しい位置にない。舌の動かし方の訓練以前に、筋を切って舌の位置を正しくする必要がある、というわけ。いろいろ考えたが、医者を信じて手術を受けることにした。

今日がその手術の日。

まず舌の裏側に麻酔注射をして、麻酔が効くのを待つ。そのあと医者が舌を持ち上げて筋を切る(見えなかったけど、たぶんメスで)。

すると、ザクザクッと舌を切る感覚がはっきり伝わってきた、ひぇぇぇぇっ! 怖いよ!

手を固く握り締め、足をつっぱらせて、必死で耐える。

このあと、切った傷跡を糸で結んで手術は終了。だいたい30分くらいだったろうか。医者は気楽なもので、

「ちょっと切るのが浅かったかも。ま、必要なら2~3年後にもう一度切りましょう。」

とか言っている。

絶対にいや! もう二度とやらない。もう十分。

今日はあまりしゃべらないように言われているので、一日おとなしくしているつもり。いやぁ、歯列矯正はたいへんだ。




2006年9月15日金曜日

SEA &amp; FSIJ 合同フォーラム 〜オープンソースERP「ERP5」によるビジネスとテクノロジー〜

秋葉原ダイビルの産総研の会議室で行われたERP5のセミナーに行ってきた。
ERP5はフランスのNexedi(ネクセディ)という会社が開発しているオープンソースのERPソフトウェア。
以前、NexediのCEOであるジャン・ポールさんがPlone研究会で説明してくれたことがある。

以前のエントリ「ERP5」

今回はNexediのCTOをしているおくじさんによる解説。

おくじさんのブログ enbug diary

おくじさんとは数年前からメールのやりとりがあったのだが、お会いするのは今回が初めて。背広姿にちょっととまどったが、「ビジネス」のセミナーですからね。(^^)
会場には、Zope/Plone関係者の姿が多い。やっぱり皆気になっているんだ。
以下、セミナーのメモ。

・Nexediはパリから少し北のリール?という町にある。アフリカのセネガルにも支社がある。
 社員数は二十人くらい、できてから5年位。
・ERPで重要なのは、業務に必要なデータ(見積書、請求書など)を関連付けて管理できること。
 ERPは、インストール後にカスタマイズ/トレーニング/コンサルティングなどの仕事がはじまる。
 少なくとも3ヶ月くらい必要で、億単位でお金がかかる。
 企業内では、さまざまな部署間で多くのデータをやりとりしている。
 データのやりとりを手動でやっていると時間とコストがかかる。
 ERPがあれば、データの取得にほとんど時間がかからずにすむ。
 結果的にコストを下げることが可能になる。これがERPの魅力。
・ERPはアプリケーションというよりフレームワーク。この上にアプリケーションがのっかることになる。
 Webパブリッシング(CMS)やオンライン取り引きなどもERPに統合しようとしている。
 統合しないとデータの重複が起こって、問題になる。
・自分は普段はフリーソフトウェアといっているが、ビジネスではオープンソースというようにいわれている。
 最近のERPではオープンソースが流行。表面的なカスタマイズだけでは不十分。
 コアシステムまで手を入れられるオープンソースが重要。
・Nexediのはじまりは、水着の会社(Coramy)がプロプライエタリなERPを使っていたところ、そのベンダが倒産してしまい、にっちもさっちもいかなくなったこと。
 Coramyは、Nexediの最初の顧客。
・オープンソースだからといって、すべてを公開する必要はない。配らなければ公開しなくても問題なし。
 どこまで公開して、どこまで隠すかが重要。
・ERP5は、フレームワークと、その上で利用するBusiness Templatesからなる。
 Templatesは、ビジネスアプリケーションを作るための汎用のもの。これはXMLで書かれている。
・フランスの経営者向けのIT雑誌の2004年のERP部門で最優秀賞をもらった。
 ドイツのInfoterraという偵察衛星を使って写真を販売している会社でも採用されている。
 中央銀行や病院、フランスの水道局、セネガル共和国の公的機関、フランスの地方自治体、などでも利用されている。
・プロジェクトの推進は、Nexediとパートナーと顧客で行うことが多い。
・ERP5を利用する場合、
 * 顧客がすべて自分でやる
 * トレーニングを受けた顧客が自分でやる
 * Nexediあるいはパートナーに発注する
 という3種類がある。
・ERPの技術的なおもしろさ
 * ミッションクリティカル
 * データの種類が多い(50〜300が普通)
 * データ量が多い
 * 書込が頻繁(CMSでは全体のトランザクションの1%、ERPでは2割)
・ERP5の99%はPythonで書かれている。
 残りのほとんどはC。
 大きな声ではいえないが、Javaで書かれている部分もある。
・Pythonを採用した理由
 * オブジェクト指向。
 * classを自動生成するようなメタプログラミングができる。
 Rubyもメタプログラミングができるが、大規模開発に向かない点があるので、利用していない。
 この点については、まつもとさんに伝えてある。

・Zopeを採用している理由
 * ZODB。
 * Through The Web(TTW)、Web上で開発ができる。開発者にはあまり人気がないが、ユーザーには重要。
・ZSQLCatalog
 オブジェクトのインデックス化をする。
 ZCatalogと互換性がある。MySQLを利用している。
 MySQLとPostgreSQLを比較したところ、8倍MySQLのほうが速かった。
 O/R Mappingは一度作ったあとの変更に極めて弱い。
 O/R Mappingのその他の問題点
 * 列が多すぎ→性能低下
 * ロックの粒度が粗すぎ
 * 表が多すぎ→ロジックの分散
 オブジェクトデータベースはオブジェクトを復元しないと検索できない。
 ZSQLCatalogでは、オブジェクトの変更はオブジェクトデータベースでおこない、このオブジェクトデータベースをインデックス化してMySQLに入れて、検索する場合はこちらに検索をかける。インデックス化は遅延評価でOK。
 結果、変更に強く、検索が速くなる。低速なインデックス作成は後回しにできる。
 ZSQLCatalogは複数のデータベースに接続できるように作ってある。アダプタがあれば、どのようなデータベースにも接続できる。

・一応、日本でのローカライズもおこなったことがある。
 ERP5は日本の会計システムにも問題なく対応できる。

・通常、半年から一年かかる会計プロジェクトが3週間程度でできる。

 なぜこんなに早くできるかというと、ERP5が優れているから!
・ZODBにかわる高機能なオブジェクトデータベースを開発している。

 将来的にはこれをフリーにして公開する予定。
・Nexediのメンバーは技術を理解していないといけない。20人全員が開発経験あり。

・SAPはもともと巨大なシステムがあって、そこから不必要な部分を削って使いものになるシステムを作っていく。
 ERP5は逆で、赤ちゃんのような小さなところから作り上げていく。
 SAPもOracleも会計ベースのシステムになっている。これだと現実とシステムの間にずれが生じてしまう。

 ERP5では現実に生じたことを記録していくことで、ずれを生じさせないようになっている。
 ERP5はシミュレーション系のERP。業務をシミュレートして、将来の財務などの予測ができる。
・ERP5の情報は下記から得られる。
 http://erp5.org/
・Nexediは現在人材募集中
 * 日本でERP5のために働いてみたい方
 * 日本でNexediと一緒に働いてみたい企業
 * フランスに遊びにいきたい方

セミナー後の懇親会では、ずーずーしくもおくじさんのとなりに座り込みいろいろと話をさせてもらった。
迷惑だったかもしれませんが、とても楽しかったです。おくじさん、どうもありがとうございました。



2006年9月5日火曜日

RSS配信を開始

たかのりさんのサイトにならって、RSS配信を開始した。たかのりさんのサイトにはお世話になりっぱなしだ。

たかのりさん、ほんとうにどうもありがとう!

更新情報をRSSで提供


上記サイトの情報にしたがってindex.rdfとindex.xmlを追加し、headerにリンク情報を埋め込めばOK。

さて、うまく配信できるかな。




2006年9月4日月曜日

エントリidを連番にする

COREBlog2になる前のCOREBlogでは、エントリidが1, 2, 3, ……のように連番になっていた。COREBlog2では、エントリidがタイトルから自動生成されるように変更された。

これはこれで何も問題はないのだが、

  • COREBlogからエントリを引き継いだので、できればエントリidも連続したものにしたい
  • エントリidはURLの一部にもなるので、できるだけ短いシンプルなものにしたい

という2点から以前のCOREBlogのようにエントリidを連番にすることにした。ショートネームの変更から、エントリidを手動で連番にすることも可能だが、やっぱりめんどくさいし、忘れがちだ。

たかのりさんがエントリidを連番にするコードを公開してくれているので、これを導入した。

COREBlog 2 のエントリーの id に数値をセット

1. まずPloneのサイト設定からZMIに入り、portal_skins/COREBlog2/getEntryIdにアクセスする。ここで「Customize」ボタンをクリックし、表示されるコードから

return None

を削除する。次に、たかのりさんのサイトにある下記のコードを挿入する。

  coreblog = context.aq_parent
if coreblog.hasProperty('entryid'):
coreblog.manage_changeProperties(entryid=coreblog.entryid + 1)
else:
coreblog.manage_addProperty('entryid', 1, 'int')
return str(coreblog.entryid)

「Save Changes」をクリックしたところシンタックスエラーがあると言われてびっくりした。よく見ると、コピー&ペーストした際にインデントが狂っているではないですか!

ちょいちょいとインデントを修正して、再度「Save Changes」をクリックすればOK。

2. 次にZMIからCOREBlog2のインスタンスにアクセスし「Properties」タブを表示する。ここで、下記のような設定でentryidを追加する。

Name:entryid
Type:int
Value:一番新しいエントリのid番号(私の場合は145)

以上で、エントリidが連番で振られるようになる。




2006年9月2日土曜日

コメントスパム対策

コメントスパムがやたらにくる。いちいち消していたのではたまらないので、対策をすることにした。

なごすいさんのブログのエントリを参考にPloneCaptchaを導入する。

以下、導入方法のメモ。

1. http://captchas.net/ へアクセスして、アカウントを作る。しばらくするとメールで、user nameとsecret keyが送られてくる。

2. PloneCaptchaをhttp://plone.org/products/plonecaptcha/からダウンロードし、解凍してできたファイルをディレクトリごとzopeインスタンスのProductsディレクトリに移動する。

3. zopeインスタンス/Products/PloneCaptcha/config.pyのなかの

CAPTCHA_USER = 'demo'
CAPTCHA_PASS = 'secret'

 の部分のdemoとsecretを先ほどメールで送られてきたuser nameとsecret keyに置き換える。

4. zopeをリスタートし、Ploneの「サイト設定」→「プロダクツを追加・削除」でPloneCaptchaをインストールする。

5. Ploneの「サイト設定」→「Zope管理インターフェース」でZMIに入り、portal_skins/COREBlog2/cbcomment_formを表示して「Customize」ボタンを押す。

 cbcomment_formが編集できるようになるので、

          <div class="field"
                tal:define="error errors/captcha| nothing;"
                tal:attributes="class python:test(error, 'field error', 'field')">

                <label i18n:translate="label_captcha_help">Verification Code</label>
                <div class="formHelp" i18n:translate="help_plone_captcha">
                    This helps us prevent automated spamming.
                </div>

                <div tal:content="error">Validation error output</div>
                <div metal:use-macro="here/captcha/macros/edit" />
            </div>

 をremember_cookieの定義の前に挿入する。

6. 次にZMIからportal_skins/COREBlog2/cbentry_viewを表示し、Validationタブをクリックする。ここで、Add a New Form / Script Validator Overrideを下記のように設定して「Add」ボタンを押し、Validatorを追加する。

Context type: Any
Button : 空白のまま
Validators : validate_captcha

7. 上記と同様に、portal_skins/COREBlog2/cbcomment_previewにもValidatorを追加する。


以上で、コメント欄に文字を含む画像が表示され、コメントの認証が行えるようになる。

画像を見て文字を入力するというのは視覚障害者を排除することになるので、できればやりたくなかったのだが、コメントスパムの多さに辟易して導入することにした。

敗北だな。;-(