mindtouch dekiwiki導入

Posted by ゆのじ on 6月 21st, 2008

moongiftで紹介されていたエンタープライズ向けwikiであるMindtouch Dekiwikiを自社内のサーバに導入した。moongiftでは手放しで絶賛していたがその実力はいかに。

導入

まず、導入先環境と導入したDekiwikiのバージョンだが、Fedora8にDekiwiki8.05.1(Jay Cooke)のソース版。こちらからダウンロードできる。

導入自体はチュートリアルやあちこちのサイトに書いてある通りで殆ど苦労せず。mono関係もFedora8であればmono1.2.xが入るので問題ない。ただ、どのコンポーネントが要るのか不明だったことと、他の問題(後述)の原因がmonoにあると思いこんでいたので、yum install mono-*.x86_64という結構乱暴なことをしているところが反省したいところだ。もっと手軽にやりたい場合、dekiwiki用のyum repositoryがあるのでそれを定義した設定ファイルを/etc/yum.repos.d/以下においてyumで入れる、という手があるとのこと。うちの場合は更新時面倒なことになるのがイヤなのと、VirtualHostをいくつも定義している都合でこの方法は使わなかった。

startup.xmlを直す

はまりどころは1カ所、/etc/dekiwiki/mindtouch.deki.startup.xmlに記述する内容で、XML Pathでいうところのscript/action/config/pathの規定値。これが正しい内容になっていなかったせいでAPIが正しくコールされず、下記のエラーが出てしまっていた。

Site settings could not be loaded
We were unable to locate the API to request site settings. Please see below for debugging information.
HTTP Response Status Code: 404

pathの値は、APIコールされる先(規定ではttp://localhost:8081/deki/@about)の下線部をいれておくのが正しい。うちでは規定通りにしたかったので、deki、と書き直して旨く動かすことが出来た。

いくつか問題が・・

これでひとまず動いたdekiwikiだが、階層構造が閉じている状態のとき、クリックしても何ら反応してくれないという問題に出くわした。早速ゴキブリ^H^H^H^HFirebugsを出してつついてみると、一つ上位のDOMがonClickイベント時にreturn falseしていることが原因の模様。ちょっとphp側のソースをさらってみたものの、それっぽいコードは見あたらない。c#ソースのほうに原因があるとすれば結構根っこが深い問題なのでどうしたものだろう。

(追記:フォルダをいくつか作っているうちに解決した。キャッシュか何かが影響していた可能性もあるので、同じ現象が起きたら再度追跡してみたい。)

さらに、添付したファイルが開けないという問題もあった。ブラウザではInternal Server Errorの表示だが、httpdのerror logに下記のようなエラーが出る。

[Sat Jun 21 04:47:25 2008] [warn] proxy: No protocol handler was valid for the URL /@api/deki/files/1/hogefuga.dat. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

これはdekiwikiの問題ではなく、apacheの設定が不足していた。調べてみると、mod_proxyだけでなく、mod_proxy_httpもLoadModuleしておく必要があったようだ。httpd.confを修正して再起動することでこの問題は解決した。

wikiとしての評価

インストールに手間がかかるといってもわかればさほど難しいものでもないし、社用で使うには他のwikiの追随を許さないくらい使いやすい。ユーザをグループとして管理する機能は社用では必須といっても過言ではないだろうし、独自wiki記法の類も覚える必要は一切ない。知識のあまりない人でも低い学習コストで使い始めてもらうことが出来ることは大変ありがたい。

レスポンスがちょっと悪い(CPU負荷を食ってるのかAPI通信で遅いのかは不明)のが難点ではあるが、これも昨今のCPU速度をもってすれば殆ど気にならない程度で済む(うちではPentiumD(DualCore)/3GHzのネイティブ環境に導入)。それに加え、ページの階層を強く意識させる構造があることも、wikiを普通の人に勧めるときに困る「とっかかりがつかみづらい」問題の回避に役立つと思う。

時間切れでさわれなかったネタ:Desktop Connector、Outlook Connector、Modules。いずれもSourceForgeのダウンロードページにあるので、時間のある方は試してみていただきたく。

また何かあったらネタとしたい。:-)

symfony(というかpropel)でのmysql関数処理バグ

Posted by ゆのじ on 5月 22nd, 2008

結構根が深くていやになったのだが、表題の問題。symfonyの(というかPropelの問題なので以降Propelの)Criteriaの記述で、集約関数を書きたくて調べていたのだが、addSelectColumnという関数で下記のように定義してやればいいっぽい。

$c->addSelectColumn('SUM('.TablePeer::TARGET_COLUMN.')');

このとき、これだけなら問題はあるもののひとまずエラーにはならない(後述)。だが、たとえば時刻の差分(秒)の合計をとりたい場合、SUM(UNIX_TIMESTAMP(col1) – UNIX_TIMESTAMP(col2))のようにしたくなる。それを書いてみたのが下記。

$c->addSelectColumn('SUM(UNIX_TIMESTAMP('.TablePeer::FINISHED_AT.')-'.
  
                        'UNIX_TIMESTAMP('.TablePeer::STARTED_AT.'))');

これが見事に刺さる。

調べてみると、見事にPropelのBUGで、#425 (Bug in BasePeer::createSelectSql) – Propel – TracによればPropel本体としては既にfixedというステータス。これがsymfony側には反映されていなくて刺さるということのようだ。回避策は今のところこのTracに記述されているworkaroundをそのまま実行するしかない。念のため書き写しておくとこうなる。

577 $selectClause[] = $columnName; // the full column name: e.g. MAX(books.price)
578
579 $parenPos = strrpos($columnName, '(');
580 $dotPos = strpos($columnName, '.', ($parenPos !== false) ? $parenPos : 0);

下線部が追加部分。strRposにするのと、その下の行を追加する。これでひとまずエラーはなくなる。

エラーは無くなるのだが、addSelectColumnを使ったクエリ、明示的にクリアしていないにもかかわらず選択カラムがリセットされてしまって、addSelectColumnで追加したカラムのみになってしまうという問題がある。これが仕様なのかはともかく、doSelectしたときにhydrateできなくて刺さったり、いろいろと問題がある。この辺の本当の意味での正しいクエリの投げ方、どうすればいいんだろう?

追記:とりあえずメソッドを眺めていたら、TablePeer::addSelectColumns(Criteria $c)というメソッドを見つけた。とりあえず、addSelectColumnの先頭でaddSelectColumns($c)とかやってやると一通り追加される模様。

logicool quickcam for notebooks proではまる

Posted by ゆのじ on 5月 17th, 2008

表題のウェブカメラがある。購入したのはずいぶん前だが、最近OSを入れ直したことと、AR関連で使いたくなったのでドライバを入れ直すことにした。早速サイトからドライバ+付属ソフト一式を落としてきてインストール、、、できない。具体的には、USBポートにデバイスを挿入してください、という画面から先に進まない(別ウインドウで新しいデバイスのインストール画面が出るが、連動して動かない感じ)。ググっても何も情報が出てこない。おいおい、どうしたことだこれは。

なんで私がこいつらのデバグをしてやらにゃいかんのだ、と愚痴りながらdrivers\x32\*のinfファイルをあさってみると、該当するVID(Vender ID)、PID(Product ID)の情報が一切書いていない。Quickcam for notebooks ProのVID/PIDは046D/08C3なのだが、ファイル中にはその行がない。これではドライバがはいるわけがない。

そしてもう一度この該当するVID/PIDでググってみると、やっとこさヒントにたどり着くことができた。それがここ「Can’t install v11.5 driver for ‘Quickcam for Notebooks Pro’ (XP)」。曰く、

I’m hoping that you will read my personal welcome thread as we progress. Thank you.

P/N: 861209
M/N: V-UAR38
USB\VID_046D&PID_08C3 ; Adams – Notebooks Pro (Silver)
QuickCam 9.x/10.x/11.0 (and unofficially QuickCam 11.1)

The latest drivers for your camera can be found in QuickCam 11.1.0.2030.

After installing this version of QuickCam, you can upgrade the application software to QuickCam 11.5.0.1169.

This issue has already been reported to Logitech.

Thanks.

おいおい。同じファイルに入っている製品群のなかでは割と新しめの製品なのにドライバを入れ忘れるってどういうことだ。

そしてここまで分かってから古い版のQuickCamをダウンロードするのがまた大変。普通に検索しても見あたらなかったし、公式サイトから落とすのはちょっと無理っぽい。ということでgoogleに聞くもののバージョン番号では何も出てこない。最新版がqc1150.exeというバージョン番号だからとqc1110.exeでググってやっとこさそれっぽいアーカイブを公式サイトではないところで発見。電子署名がLogitech Inc.であることを確認してやっと入手完了。

これ、通常のユーザにはどうやってトラブルシュートさせるつもりなんだろう。もっとちゃんとテストしてからリリースしてほしいぞ。マスプロダクトで個別対応がかなり厳しいものなんだから。