人気ブログランキング | 話題のタグを見る
Trac0.12系にニコニコカレンダーを移植した
■概要と目的
ニコニコカレンダーとはチームのモチベーションやムードを可視化したものです。

今回はニコニコカレンダーをTrac上で動作させることを目的とします。
もともとはBrett Smith氏がTrac0.10系で作成したプラグインが存在するので、それを0.12系で動作するように修正しました。

Trac0.12系にニコニコカレンダーを移植した_b0232065_12251021.png

2014/7/4 以下に引っ越しました。
http://qiita.com/mima_ita/items/6000ae2682204d49e148

ダウンロード
http://needtec.sakura.ne.jp/tracplugin/nikonikoplugin.zip



■前提
Trac-Lightningの3.2.0により、Trac0.12がインストールされているものとします。

■インストール手順
1. ダウンロードを行い解凍します。

2. 解凍したフォルダには「0.10」と「0.12」が存在します。
Trac0.12系にニコニコカレンダーを移植した_b0232065_12311588.png

今回はTrac0.12が対象なので「0.12」フォルダのsetup.pyを使用します。

3. TracLightningをインストールしたときに作成されたスタートメニューからコマンドプロンプトを起動してください。
Trac0.12系にニコニコカレンダーを移植した_b0232065_12341098.png


このメニューから起動された場合、Tracで使用している環境へのパスが通っています。
Pythonを複数いれている方は必ず、ここから実行しましょう。

4. Apachを念のため、停止した後に、2で解凍したフォルダにカレントディレクトリを移動させて、下記のコマンドを実行して、インストールを行います。


python setup.py install



5. Apachを再起動して、Tracの管理者権限でログインします。
「一般設定」の「プラグイン」を選択して「nikoniko」を探してください。

Trac0.12系にニコニコカレンダーを移植した_b0232065_1240533.png


6. nikonikoプラグインをみつけたらNikoNikoComponentにチェックをつけて変更を適用してください。
Trac0.12系にニコニコカレンダーを移植した_b0232065_12422987.png


適用後、ニコニコカレンダーのページに移動するとエラーがでる可能性があります。
これはニコニコカレンダーで使用しているテーブルが作成されていないために発生します。

7.テーブルを作成するために、一旦、Apachを停止してください。
その後、3で使用したコマンドプロンプトを起動してTrac-Adminを用いてデータベースのアップグレードをおこないます。
下記のコマンドを入力してください。

Trac-Admin "プロジェクトのFullPath" upgrade

TracLightningを既定の値でインストールした場合、Sampleプロジェクトのフルパスは「C:\TracLight\projects\trac\SampleProject」になっていると思います。

8.Apachを再起動して管理者権限でログインします。
 管理メニューの権限で「NIKONIKO_CHANGE」と「NIKONIKO_VIEW」を任意のユーザーに付与してください。
Trac0.12系にニコニコカレンダーを移植した_b0232065_12505856.png


9. するとメニューの右はじに「二コカレ」というメニューが作成されます。
Trac0.12系にニコニコカレンダーを移植した_b0232065_12251021.png


あとは今日のきもちにあわせて「やる夫」を選んで必要なら、なんかコメントをのこしてください。


■オリジナルとなにが違うか?
・Trac0.10からTrac0.11に移行するさいにテンプレートエンジンがGenshiに変わりました。そのため、テンプレートの周りを修正しました。

・本来ニコニコカレンダーは3つから選択しますが、つい5つにしてしまいました。

・コメントを残せるようにしました。これはマウスでオーバーすることで表示されます。愚痴をかくもよし、笑いをとるもよし。

■導入実績
0.12系はないです。
0.10系は1年以上まわしたことがありますが、それなりに有効です。
ゆるいコミュニケーションが取れたり、他のメンバーの修羅場具合がわかるので、連帯感とかはでるでしょう。
まじめに管理する気があるなら、メンバーの疲弊度ややる気の変化を見れるので何もしないよりはフォローのしようがあります。これ導入して1年は離職率が0にできたので、そういう意味では有効です。
それ以上の効果については会社辞めたから知らないや、てへぺろ☆(・ω<)。


■TracPluginをつくる場合のメモ
・致命的なエラーはTracがログとして出力する。これは、プロジェクトのlogフォルダにtrac.logという名前で作成される。
ログの出力レベルはtrac.iniで指定できる。

・NikoNikoComponentなどのプラグイン中でログを任意のタイミングで出力できる。

from trac.log import logger_factory

# class NikoNikoComponent(Component)中で・・・
self.log.info("days %s %s", locale.getlocale(),days[0])


・プラグインのページのURLをテンプレートから利用するのには癖がある。
まず、web_ui.pyで次のようなメソッドを用意しておく

def get_htdocs_dirs(self):
"""
Return a list of directories with static resources (such as style
sheets, images, etc.)

Each item in the list must be a `(prefix, abspath)` tuple. The
`prefix` part defines the path in the URL that requests to these
resources are prefixed with.

The `abspath` is the absolute path to the directory containing the
resources on the local file system.
"""
from pkg_resources import resource_filename
return [('nn', resource_filename(__name__, 'htdocs'))]


このreturn時にしていしている'nn'という記号を使うことになる。
たとえば、テンプレートファイル上で現在のプロジェクトのニコニコプラグインがインストールした画像を使用したい場合、以下のような記述になる。

<img src="${href.chrome('nn/images/worstMood.png')}" alt="Worst" title="最悪・・・"/></a>


「nn」という記号をもとに実際のパスをつくっている。

・genshiでテンプレートを書く場合、きちんと書かないとだめだ。たとえば「&lt;」と書くところを「&lt」と記述しても、多くのブラウザで正常にうごくが、genshiのテンプレートではエラーになる。

・ディレクトリを値とするディレクトリをテンプレートで使用する場合、注意が必要だ。
たとえば次のような判定が必要な場合があるとする

<img py:if = "mood_data[user][day] == 'worstMood'" src="${href.chrome('nn/images/worstMood.png')}" alt="最悪・・・"/>


userまたは、dayのキーがない場合、エラーとなり落ちる。

<py:if test="mood_data[user]">
<py:if test="mood_data[user][day]">
<img py:if = "mood_data[user][day] == 'worstMood'" src="${href.chrome('nn/images/worstMood.png')}" alt="最悪・・・"/>
</py:if>
</py:if>

ディレクトリを値とするディレクトリの場合、おおちゃくしないでそれぞれで存在チェックをしないとだめだ。

・Windows固有の問題だとおもうが、strftimeを使ってロケールにあった日付を使用すると正常に動作しないことがある。これは、帰ってくる文字がCP932であり、UTF8が前提としているTracと相性がわるい。
今回はgetlocaleでロケールを確認して必要ならばUTF8に戻す処理をいれている

def getWeekStr(self, d):
ret = d.strftime("%A")
l,c = locale.getlocale()
if(c=="932"):
return ret.decode('cp932').encode('utf-8')
else:
return ret

by mima_ita | 2013-11-08 13:03 | 管理
<< Subversionで単純なロ... enchant.js + bo... >>



実験ですお

by mima_ita
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ