アジャイル,Trac,オープンソースなどの話。認定スクラムマスター。Twitterは@ryuzee
もういい加減Trac0.11に移行しなさい、と言われているような気もするのだけれど、そうは言っても移行できないものは仕方ないじゃないか。
ちゅうことで、yuroyoroさんのサイトで公開されているNewWikiButtonPluginをTrac0.10でも動作するようにしてみた。
newwikipagebutton/newwikipagebutton.pyを結構いじるよ。
post_process_requestはTrac0.10の場合は引数4つ。process_requestの戻り値は2つなので。
36c36
< return ‘newwikipagebutton.js’,'text/plain’
—
> return ‘newwikipagebutton.js’,{},’text/plain’
41c41
< def post_process_request(self, req, template, content_type):
—
> def post_process_request(self, req, template, data, content_type):
45c45
< if template == ‘wiki.cs’ :
—
> if template == ‘wiki_view.html’ :
50,52c50
< req.hdf['newwikipagebutton.href.htdocs'] = req.href.chrome(‘newwikipagebutton’)
< add_script(req, ‘newwikipagebutton/jquery.js’)
< add_script(req, ‘newwikipagebutton/newwikipagebutton.js’)
—
> add_script(req, ‘/NewWikiPageButton/newwikipagebutton.js’)
54c52
< return template, content_type
—
> return template, data, content_type
あと、このプラグインは動作させるのにjqueryが必要。Trac0.11ってjquery標準装備だっけ?ただTrac0.10はjqueryは自前で導入する必要があるので、add_scriptで追加している。
また、templatesディレクトリにjsファイルを置いても動作しなかったので、newwikipagebutton.jsとjquery.jsは、htdocsフォルダ以下に移動。
んでさらに、newwikipagebuttonも修正する。Trac0.10だとidが振られている箇所が少なくてform#attachfileってIDが無いんだよね。修正後はfooterの手前に出してみた。勿論XPathで指定してもいいし、そっちの方がきれいだ。
6c6
< $(“form#attachfile”).after(html);
—
> $(“#footer”).before(html);
完成したものがこちら。ちょっと変な位置にボタンついているけど・・・。

これは便利!
昨日当選メールが来たよ。応募者多数だろうから当選しないだろうと思っていたのだけど、なかなかヒキが強いな。
ということで、大量のPHP製オープンソースソフトウェアをWindows2008サーバにどんどんインストールしてドキュメントを残すという楽しげなことをこれから二週間やっていくことになる。
ちょっと思いついたこととかメモ。
Tracでコメントの中身を後から書き換えたいことってあるよね?例えば俺の場合は、Tracからお客さんに提出するレポートを自動で作っているんだけど、コメントの中で誤字脱字しちゃうと、毎回提出前にレポートを手で直さなきゃいけなくなってしまう。そんなん面倒なので、Trac側のデータを直す方法。
この用途ではTicketChangeプラグインを使う。
http://trac-hacks.org/wiki/TicketChangePlugin
インストール方法は
としたあと、trac.iniでプラグインを有効にし、httpdを再起動する。
これで、TICKET_ADMINの権限を持って入れば、以下のような画面が表示される。


なお、このプラグインはTrac0.10、Trac0.11の双方で動作するが、pythonは2.4以上を要求される。
python2.3でも動作させたい場合は、ソースに手を入れる必要がある。
web_ui.pyの93行目付近
の箇所で、rsplitがpython2.4以上しか利用できないので、以下のようにする。
これでpython2.3でも動作した。俺のところでは。
#4/23 19:16にちょっと更新。app_modelに定義しないで、いきなりモデル->commit()やモデル->rollback()は偶然動いているような気がしている点について追記。
MySQLのデータベースもしくは処理対象テーブルが、MyISAMではなく、InnoDBである必要がある。
MyISAMのままで、トランザクションのコマンドを発行しても、ロールバックできない。
今どのような形式になっているかは
を実行すれば分かる。ここでMyISAMと表示されている場合は
として形式を変更することができる。
もちろんテーブル作成時にInnoDBを指定することもできる。
モデルを拡張するか、behaviorを使うのが定石。今回は、app/model/以下にあるapp_model.phpに以下を追加する。これにより全モデルでトランザクションが利用可能だ。
なお、Model->query()を使って呼び出そうとするとPostgreSQLは動作するようだが、MySQLは動作しないらしい。(query関数の仕様)
※こんなことしなくても動作するよ!という話がCakePHPのユーザーフォーラムで出ているけど、調べたところ偶然に近いような気がする。というのも、
みたいな、未定義の関数の呼び出しを書いて実行すると、
ってエラーが出る。これが何指してるかというと、未定義関数は全部queryの中身として実行しているということだよね?
だから、beginやcommitやrollbackがモデルで未定義なら、そのままqueryの引数としてこの文字列を実行することになる。
ちゅうことは処理系によってだけど、もしトランザクションの開始が、beginではなくbegin transactionじゃなきゃ駄目な場合は、うまくいかなくなる。間にスペースあるしな(^^;
誰か詳しい人解説求む、って感じ。
トランザクション処理はちゃんと動いたのだが、Auto INCREMENTなフィールドの値って、ロールバックすると欠番になるのね。若干違和感あるなぁ。
いくつかどうでも良いメモ。
経緯はOpenVZを久々に触る必要があって、CentOS5のテンプレート持ってきたんだけど、yumコマンドが動かなくて、何でだろと思ったら名前解決できなくて・・・ってことだ(w
cp /usr/share/zoneinfo/Japan /etc/localtime
http://download.openvz.org/contrib/template/precreated/にアクセス
必要なものをダウンロードし、/vz/template/cache/に配置
当然ながらyumで利用するレポジトリは外部にあるので、名前解決できないといけない。従って、ホストOS側のiptablesの設定で、TCPおよびUDPの53番ポートが許可されていないといけない
-A RH-Firewall-1-INPUT -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 53 -j ACCEPT
ProxyRequests Off
<proxy *>
Order deny,allow
Allow from all
</proxy>ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
ここまで分かっている会社が日本にあるとは驚きだ。
ただ、今後こういう会社はどんどん増えることは間違いない。そしてお客さんが賢くなって、従来型のSIerは仕事のやり方を根本的に改めなければ生き延びていけなくなる。
ウォーターフローで開発すること自体に無理がある~良品計画がシステムを内製する理由
もう、とにかく内製したい。主導権を握るっていうと抽象的だけど、突き詰めていくと内製化をせざるを得ないんですよ。特に、マーチャンダイズのプロセスは、私たちのコアとも呼べる独自性の塊。上手くシステムで支援できれば、容易には真似できない優位性になる。だから、ここに注力しようと決めた。他は並でいい。人事も会計も根本的な競争力にはならない。うちは、マーチャンダイズなんだと。
ただ、独自性の強い業務って言うのは、どれほど優秀なベンダーでも作れない。そもそも実際に開発をするのはいろんな会社を経由して、業務を知らない人が設計書を見て、想像しながら作るわけですよね。どう考えてもロスがどこかに生じる。それはあり得ない。自分たちで何とかするしかないと考えていました。
→他人に急所を握られてはいけない。
私達のやり方の特徴は、7割主義で素早く作ってしまう点です。システム化の案件が出ると、現場の人間と開発者がすぐに集まって、画面イメージと業務プロセスについて話し合います。で、ここが重要なんですが、ある程度固まったところで見切り発車しちゃう。「完璧を求めて次の機会に」なんてやってると、お互いイヤになっちゃうからです。
→どうせ完璧なんて無い。とにかく重要な機能の早期リリース。
「要件定義が不十分なんじゃないか」「仕様書が無いのはまずいんじゃないか」といった質問を受けることはあります。しかし、そんなことは問題ではない。このやり方で実際に2年やってきました。結論から言えば、「速さが全てを駆逐する」んですよ。速いことが全ての諸問題を消し去った。
→動作するソフトウェアの重視。
よく忘れるのでメモ。あー、記憶力が劣化しているのか。
Tracにはwikiが付いているのだけれど、こいつをうまく活用するかどうかで、細かい能率は随分変わってくる。
例えば、チケットを見るときに、「トップページ(wiki)→レポート一覧→レポート→チケット」なんて回りくどいことはやりたくなくて、直接チケットにジャンプしたい。
ということで、wikiにチケット関連の情報を表示する方法。
TicketQueryは標準で用意されているwikiマクロ。なのでインストールは不要
[[TicketQuery(status!=closed)]]
→ステータスがclosedで無いものをリスト形式で表示する
[[TicketQuery(status!=closed,compact)]]
→ステータスがclosedで無いもののIDのみをカンマ区切りで表示する
[[TicketQuery(status!=closed,count)]]
→ステータスがclosedで無いものの件数のみを表示する
TicketBoxマクロは標準ではインストールされていないので、http://trac-hacks.org/wiki/TicketBoxMacroを参照してインストールする。
Trac0.10の場合は、wiki-macrosフォルダに配置。Trac0.11以降の場合はpluginsディレクトリに配置して、httpdを再起動すれば良い。
[[TicketBox({1})]]
→レポート{1}のチケットの一覧(IDのみ)をページの右端にボックス形式で表示
[[TicketBox({1},inline)]]
→レポートの{1}のチケットをインラインのボックス形式で表示する

[[TicketBox({1}, summary)]]
→概要のテキストを1行づつ表示する。ボックスの配置は右端
[[TicketBox(300px, {1}, summary)]]
→ボックスの幅を指定することが出来る。
[[TicketBox(300px,background=yellow, {1}, summary)]]
→上記に加えて背景色を色を設定することも出来る

[[TicketBox("未解決!",300px,background=yellow, {1}, summary)]]
→さらにボックスのタイトルも設定できる
うちのサーバ群のうち1つは、TracとSubversionを動作させているんだけど、OSがCentOS4.7なんで、いまだにpythonが2.3系なんだよね。
Tracでpython2.3はいい加減面倒なことが多いので、サーバのOSのバージョンを上げようかと考えて色々調べてみた。
よそでは、「yumを使ってCentOS 4.7から5.2にアップグレードしてみた」という記事もあり、うまくいっている事例もあるようなんだけど、
最初に断っておくと、このエントリーでは結構無茶なやり方してるんで、勇者な人以外は真似しない方がいいと思う。転んでも泣かないって人はやってみれば?って感じで頼む。
みたいなことも書かれていて、かつ手順面倒っぽくて二の足を踏んでいる。しかも今のそのサーバではOpenVZも動いていて、KernelはOpenVZ用のKernelで動作していたりもするので、普通の事例とも違うところがいっぱいありそう。
いつもだったらまぁいっか~、とアップデートを開始するところなんだけど、今日はおとなしくしてよっと。
#普通にSubversionのレポジトリとTracのDBをバックアップした上で、サーバ再インストールした方が早いや。
日記 PHP オープンソース インストールマニアックス IIS Trac MySQL Perl Linux Agile・生産性向上 wordpress フリーソフト 自宅サーバ 書評 ブックマーク phpMyFaq TraM Plugin 早起き Delphi apache CakePHP Firefox Ruby eclipse セキュリティ プラグイン アジャイル mojavi Subversion Ajax/Web2.0 SQLServer Zope サーバ フレームワーク phpBB 仮想化 PostgreSQL OpenVZ scuttle CMS 文字化け 自宅 翻訳・日本語化 ApacheDS LDAP Excel 生産性向上 CodeIgniter XAMPP hacks taskfreak 修正 言語ファイル Ajax SBM ダウンロード HTML::FillInForm mod_security 情報共有