脱サラ大学生のプログラム日記 -3ページ目

よく考えたら。。。tracでいいんじゃない?

昔に trac もしらべてみたんだけれどねー
ほぼ同じ構成を Mantis より簡単に構築できないか?

でも思い出した、Python でできたツールだから、手を入れるのが面倒なのよねー
やっぱり PHP のツールがいいなって思って、Mantis 使ったのでした(笑)

影舞とかも Ruby だから却下したんだったよ
まあ、他の言語でもいいんだけれどね~

あっ、SCMBug ってツールもあるんだ。。。
でも情報すくない。。。

MantisとSubversionとの連携

MantisとSubversionとの連携をさせてみました


基本的にMantisにはソース管理ソフトなどとの連動が考えられています


http://www.alles.or.jp/~sogabe/mantis/article/article1.html

基本的な流れは以下の通りです。

  1. コミットする際に、ログに「 issue #0000004 」という形式で改善要求のIDを登録します。
  2. Subvesionのフックであるpost-commitが起動します。
  3. post-commitは、svnlookコマンドを起動し、登録したい情報をmantisのcore/checkin.phpの標準入力に渡します。
  4. core/checkin.phpは、標準入力から取得した文字列に「 issue #0000004」が含まれていれば、 そのIDをもつ改善要求のコメントにその文字列を登録し、履歴に登録します。

core/checkin.phpは、登録ユーザや「 issue #0000004 」といったキーとなる文字列などの設定情報は、config_inc.phpから取得します。


ってことなんですがー

SubversionとMantisが別サーバーなんですが。。。


そしてSubversionにコミットイベント登録できないんですがって状態が多いと思います。

んで考えてみたところ


core/checkin.php にテキスト入れればなんでも登録できる仕様ってことは


svn log --incremental -v -r 27 http://192.168.0.1/svn/test/


みたいな感じで外部のsvnからリビジョンログをとれば大丈夫!

最新のはどうやってとるんだってことですが


リビジョン番号を1から順にカウントアップしていきます(笑)

カウンタみたいな感じで1から作業をしていって、取得できたらカウントアップ

取得できないときにはそのリビジョンないのでカウントそのまま!


ちなみにコマンドうって、標準出力の結果のサイズを見れば取得できているかわかります。

リビジョンない場合にはエラー出力になるんですよね~


んで出力結果を Mantis に投げる!


$exec = "svn log --incremental -v -r $no http://192.168.0.1/svn/test/ ";

$out = system( $exec );


if( 0 < strlen( $out ) ){

// 取得!

$no++;

$exec = "echo '$out' | php mantis/core/checkin.php";

$out = system( $exec );

}


みたいな処理かな?

そのままだと環境に依存するので


$exec = "export LANG=ja_JP.UTF-8;svn log --incremental -v -r $no http://192.168.0.1/svn/test/ ";


みたいなことをやりました

デフォルトは LANG=C だったのでUTF-8がデコードされてでてきます


こんなスクリプトを cron で毎分呼び出す

結構環境に依存しない感じで実装可能です


コードは思い出しながら書いているので、そのまま動かない可能性大(笑)


cron 使えない環境の場合、、、

sleep(30)とかで適度にまってから fsockopen を使って自分自身を呼び出して、自分は終了


暴走すると再帰的に呼び出すので注意!

とめる時にはファイル名を変えます(爆)

Mantisを使う

少し前に使っていたのですが、最近本格的に使ってみました。


http://www.mantisbt.org/


えーっと基本的に日本語も使えますし、普通に使うのは本当に問題ありません。

微妙に訳が間違えていますけれどね。。。


あっ、最新版のベータ版を使いましょう!

かなり機能が充実しています


設定としてはー

標準を日本語にしましょう!

ブラウザの設定をとってもいいけれど、基本的に日本語でいいでしょう

そのままだとユーザー作った直後英語になるので、利用者がびっくりします(笑)


そのまま使っても楽しくないのでwikiとの連動に挑戦!


http://bacons.ddo.jp/wiki/mantis/config/1.1.0

この辺を参考にして


$g_wiki_enable Wikiとの統合を行なう場合ONを設定。 OFF
$g_wiki_engine Wikiの実装。 'dokuwiki'
$g_wiki_root_namespace Wikiとの統合で使用するネームスペース。 'mantis'
$g_wiki_engine_url WikiのURL。 $t_protocol . '://' . $t_host . '/%wiki_engine%/'

ONにして、URLを変更すればOKです

URLは直値で書いちゃった方が楽かな?

んで、dokuwiki 以外も使えそうですが、少し変更が必要そうだったので、そのまま使いました(笑)


えーっと

便利そうなんですが、ちょっととっつきにくいです(涙)


URLを自動生成してくれるだけなので、使い慣れた wiki をがんばって使った方がよいのかも。。。

まあ、使い慣れた wiki ってのがないんだけれどね(笑)

TYPO3 で mod_rewrite

http://jweiland.net/298.html

にありますが、やってみました。

http://akira.info/typo3/

んー、いまいち。。。
pageid.type.html って形式なんですよね
かっこわるい(笑)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*).(.*).html?(.*)$ http://akira.info/typo3/index.php?id=$1&type=$2&$3

こんな感じの .htaccess を入れています。

あとは typo3/t3lib/config_default.php の

'simulateStaticDocuments' => 1,

この項目を1にして、キャッシュクリアでOKです
Googleキャッシュには mod_rewrite を使わなくてものっているので、使う必要もないかもしれません。。。

URL生成部分は手をいれて、少しかっこいい名前にしないとだめかも(笑)

PHP Ethna

最近はethnaを調べています


PHPのフレームワークって使ったことなかったんですけれど、最近の主流ですからねー

とはいっても、結構フレームワークはきらいだったり。。。


URLがねー

GETで引き回すのがどうも(苦笑)


フレームワークからPHPを吐き出すタイプが最近の理想かなー

とはいえ、ちょっとさわってみまーす


Mojaviと比べるとシンプルなつくりですね

本家HPもかなりしっかりしている


そこだけで二重丸(笑)

やっぱり日本語のソフトは安心するからねー

Ludia続報

どうやらインデックス1個あたりデフォルトで130Mのキャッシュを
一時的に使うみたいです。。。
だから16個で打ち止めしているみたい

とはいえ遅くてもいいから、たくさんつかいたいんじゃーってことが
あると思うのでオプションで変更できるようにしてもらえるみたいです!
INITIAL_N_SEGMENTS を少なくすると利用メモリー量も減るらしい

テーブル分割時には減らした方がいいけれど、
基本的には分割しないでデフォルトか、
逆に増やした方がパフォーマンスはいいらしい。。。

キャッシュ減らして、テーブル分割はちょっと検証してみます
でかいテーブルよりは分割して、キャッシュサイズも細かくした方が
好みではあるんだよねー

まあ、この辺のチューニングはPostgreSQL特有なんで、
Senna本体はちょっと分割時の効率を考えていないかも。。。

Ludiaの検証

PostgreSQL版のSennaバインディングを試してみました
内部はSennaに飛ばしているのであまりMySQL版との差はないようですが、PostgreSQL特有の利点があります

・本体にパッチがいらない
MySQL版はパッチを当てる必要がありますが、PostgreSQLではパッチを当てる必要がありません
これは結構導入が楽でいいですね

・テーブル分割が可能
継承を利用したテーブル分割が可能です
PostgreSQLの機能ですね。MySQLでもマージテーブルがありますが、機能的にはPostgreSQLの方が優れているようです

[PostgreSQL]
○ 本体に対してパッチなしで導入可能
○ マージの親テーブルに挿入をすると該当テーブルに挿入
○ レプリケーションによるテーブル単位での分散化
× EXLAIN の結果がおかしい( Costのみ、インデックスを使っているかだけの結果 )
× INDEXとの統合がまだ甘い( パッチを当てていないので、、、VACUUM FULLとか使えない )
× INDEX数に制限が。。。( なんで標準は16個なの? )

[MySQL]
○ システムに統合( 本体改造するんで。。。 )
× テーブル分割やパラレルクエリなどのソリューションが少ない

基本的にデータが1Gぐらいまでだったら、どっちでもあまり変わりないですね
テーブル分割を行うのであればPostgreSQLの方が優れているのでいいのですが。。。

Ludiaはインデックス数が16個しかサポートしていません(涙)

pgsenna2: n of indices in use reached max(16)

ってエラーがでる場合には

#define PGS2_MAX_N_INDEX_CACHE 0x10

ここの数値をあげてコンパイルしましょう!
って標準が16って少なくない?
この辺は改善してもらおう。。。

てな感じで、まだ標準だとインデックスが16個しか使えませんので
テーブル分割のソリューションが使えません

この辺増やすか、自動拡張を内部でやってもらえるようになれば
そこそこ使えるようになるかな?

気がついたら一ヶ月(汗)

いろいろやっていたら、一ヶ月たっていました


・XENのインストール

カーネルからコンパイルしていて準備は整っているのですが再起動が面倒でしていません(汗)


・OpenPNE

まだまだ進化途中って感じのSNSですね

ただし拡張性はちょっと悪い

今後に期待ですね

ただし、結構簡単に拡張できるんじゃないかって研究中です


・Senna

MySQL用の全文検索エンジン

普通のMySQLとの共存ができないので、Windpws環境で構築

オフィシャルページのインストール方法がちょっと不親切かな?


MeCabを入れて後にSennaパッチ済みのMySQLをインストール

xamppとかを入れているとサービスの登録に失敗するので、一度Sennaをアンインストールして入れなおせば成功します


sc.exe delete mysql


でも大丈夫です


あとはWindows用のMeCabがsjisなのでsjisでMyISAMのテーブルを作れば大丈夫?

utf8とかだとそのままだとインデックスがでたらめなのができます(涙)


個人的にPostgreSQL大好きなので、MySQLはまだまだわからないことが多いですが全文検索の実績はこっちの方がありますからね~

PostgreSQL版の全文検索もちょっと試してみたいとは思います

Typo3はいろいろ大変。。。

いろいろ触ってみましたが、予想以上に面倒。。。

テンプレート部分がスクリプトになっているので、気軽に使うのには結構大変そう


一度スクリプトを覚えればかなり自由に使えそうだけれどね

個人的にはもっと簡単にできるといいな。。。


一度覚えて、定型的に作業できると楽なんだけれどね~

あと、モバイルとかデバイス別のテンプレート適用とかもがんばればできそうだけれど、かなり面倒な予感。。。


とりあえずヘルプ以外の部分の翻訳は終わったのですが、ヘルプの内容は古いので訳しても現在と機能が違うよ(笑)

ってな感じで止まっています


翻訳のコミットもMLから返事がないからできなそう?

一応


http://akira.info/ に途中まで翻訳したものをおいてまーす

TYPO3の翻訳

TYPO3は翻訳システムが結構便利!

モジュールをインストールすると、そのまま翻訳できます。


リアルタイムで反映するのは便利なのですが、それをコミットする

機能がないので、言語の翻訳者を探してマージしてもらわないと

いけないみたいですね。。。


しかにTYPO3の翻訳者ってアクティブな人いるんだろうか?