Home > Archives > 2008-04

2008-04

PythonとSchemeとJavaScriptは仲間

Ruby vs. Python は Lisp vs. Scheme に似ている k-watchの日記より

Ruby vs. Python は Lisp vs. Scheme に似ていると思うんだ。

確かにそうだよなー。そう思った。
Python の好きなところに言及があるけど、JavaScriptもScheme、Python陣営の仲間だよなー。
名前空間が変数と関数で分かれていないのも同じ。
仕組みが単純なのも同じ。

USBメモリってこんなに安くなってたの?

会社で使用禁止令が出てから何年か使ってなかったんだけど、Macbookを持ち歩くようになってあまりにも不便なので買いに行った。
びっくりした。
こんなに安くなっているとは。

[Subversion][trac]チケットとコミットの連携設定

前回に引き続き、チケットとsvn commitを連携させる。

まずは、「trac-svn-commit-hook」を/path/to/trac/contribに配置。
インタアクトさんが配布している日本語バージョンを入れている場合は、ダウンロードファイルのcontrib配下にある。
実行権限をつけておくのを忘れずに。
trac-svn-commit-hookが見つからない場合は、以下のようにsvnからダウンロードすればいいはず。
svn export http://svn.edgewall.com/repos/trac/trunk/contrib/trac-post-commit-hook

次に、/path/to/svn/repos/hooksに「post-commit」を配置する。
tmplファイルがあるのでそれをいじればよいが、必要なのは以下の記述。


#!/bin/sh #これはtmplファイルの1行目にすでに記述してある
TRAC_ENV=”/path/to/trac”
SVNLOOK=”/usr/bin/svnlook”
PYTHON=”/usr/bin/python”
export LANG=ja_JP.UTF-8
REPOS=”$1″
REV=”$2″
LOG=`$SVNLOOK log -r $REV $REPOS`
AUTHOR=`$SVNLOOK author -r $REV $REPOS`
${PYTHON} ${TRAC_ENV}/contrib/trac-post-commit-hook \
-p “$TRAC_ENV” \
-r “$REV” \
-u “$AUTHOR” \
-m “$LOG”

これも実行権限を忘れないように。

あとは、コミットする際のコメントに入れる以下の二つのコマンドを覚えればOK。

fixes #1
refs #1

チケットをクローズしたいときは「fixes」、チケットにコメントを追加したいときは「refs」を使う。
#1はチケット番号。53番のチケットをクローズしたいなら「fixes #53」とやればよい。

コマンドの書き方は他にもあるけど、やってることは同じなのでとりあえず上記を覚えれば大丈夫だと思う。

[Subversion][trac]それぞれの設定と連携

Subversionとtracの設定を久しぶりに行ったので、メモ。

  • Subversionとtracの認証は同一で管理したい
  • それぞれhttpを利用して公開する(SSLは今回は除外して考える)
  • 更新は登録ユーザーしか行えないが、閲覧はどのユーザーでも行えるようにする
  • 認証にはdigest認証を利用する
  • digest認証のレルムはrealmとする

以下の前提。
リポジトリ:/path/to/svn/repos
リポジトリURL:http://example.com/svn/repos
tracディレクトリ:/path/to/trac
trac URL: http://example.com/trac/repos

まずはリポジトリの作成
$ svnadmin create /path/to/svn/repos

※リポジトリ内のプロジェクト構成についてはここでは触れません。

次にApacheの設定を行う。
svn用Apacheの設定はhttpd.confに以下の設定を追加する
※ディレクトリ単位で詳細に権限を設定する場合は、AuthzSVNAccessFileを利用するがここでは割愛する。
※参考URL:Subversionのインストールと設定

DAV svn
SVNPath /path/to/svn/repos
AuthType Digest
AuthName “realm”
AuthUserFile /path/to/svn/repos/.svndigest
#リポジトリの読み込みに必要なメソッド以外は、認証を必要とする

Require valid-user

#読み込みに対しても認証を必要とする場合は、LimitExceptは必要なし 以下は例
#Require valid-user

複数リポジトリの場合でも、上記設定をリポジトリごとに行うのが吉。
SVNParentPathは設定が楽そうに見えて、柔軟性が無くあとでどうせ変更することが多い。

svnを利用するにあたり以下のようにモジュールをロードする必要有り。
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

authz_svn_moduleはAuthzSVNAccessFileを利用しない場合は必要なし。

digest認証のユーザーは以下のコマンドを使って作成する
$ htdigest [-c] /path/to/svn/repos/.svndigest realm username
ファイルを初期作成する場合は、cオプションをつけるが、それ以外はcオプション必要なし。

次ぎにtracとの連携。
$ trac-admin /path/to/trac initenv
で、コマンドプロンプトでいろいろ聞かれるので普通に答える。

tracのApache設定は以下のとおり。ここではmod_pythonを利用しているものとする。

SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /path/to/trac
PythonOption TracUriRoot /trac/repos


AuthType Digest
AuthName “realm”
AuthUserFile /path/to/svn/repos/.svndigest
Require valid-user

複数レポジトリをtracで扱う場合は、上記設定(trac-admin path initenv 〜 Apache設定まで)を別のレポジトリに対しても行うのが吉。

tracの権限設定は、以下のコマンドで利用可能
$ trac-admin /path/to/trac permission list #全権限のリスト
$ trac-admin /path/to/trac permission remove 権限 #TRAC_ADMIN、BROWSER_VIEWなど
$ trac-admin /path/to/trac permission add 権限 #TRAC_ADMIN、BROWSER_VIEWなど

※新規でtracを立ち上げた場合、デフォルトでanonymousに強大な権限が与えられているため注意。
※基本的に、anonynousは*_VIEW権限のみ残す。
※その他の権限は、trac-adminを利用して作成する。
※権限グループも設定が簡単 ⇒ グループ名称をユーザー名と同等に扱い、ユーザーへの権限付与はグループ名をそのまま利用できる。
ex)
$ trac-admin /path/to/trac permission add member TRAC_ADMIN ...
$ trac-admin /path/to/trac permission add nakamura member

コマンドラインでパーミッションを設定するのは面倒だが、WebAdminプラグインを入れておけばPermissionメニューから簡単にパーミッションを変更できる。

これでApacheとtracの連携ができ、認証情報も共用できている。

svnのチケットとtracの連携は次回

Firefoxのポップアップブロック解除について

前に一度設定していたんだけど、忘れてしまっていたのでメモ。

FirefoxでRSSリーダーなどから何度もポップアップを開いていると、ポップアップブロックを解除してもブロックされっぱなしになってしまう。

これは、一定数以上のポップアップは開けないように設定されているから。
about:configから、dom.popup_maximamdom.popup_maximumの値を変更する必要がある。

[SIer]強い個人を育てたい

設計する人がプログラミングできないなんて正気の沙汰ではない。
ひがさんのエントリーはすごくいい。
浜口さんに贈るSI業界を良くする方法
プログラミングできない元請けがプログラム設計書をレビューするという矛盾
業界として改善しなければいけない。

アプリケーション開発になると、お客様と要件を検討する人が、そのまま設計・プログラミングできれば最高。
難しいのは、両方をきっちりこなす人間をどう育てるかってこと。
難しいけど、こういう人材を育てるスキームができると、SI業界はかなり変わると思う。

昨日のエントリ「[SIer]開発チームを強くする方法」で書いた、「強い個人」はこの要件・プログラミングの両方が高い次元でできる人のイメージだった。

そういう人たちが集まったプロジェクトはすごく楽しいだろうなー。

[SIer]開発チームを強くする方法

SIer、特に一定規模以上の会社になると、自社にしかないノウハウとか、開発標準とか、マネジメント手法とか大好き。

逆に、「SIerは人が資本?」にも書いたけど、個人を強くするという発想が弱いのでは?
(こんなことを中の人〜自分もだけど〜に言うと、個人の成長を一番に考えてるって言うだろうけど、実際にはあまりそうなってないよね)

チーム運営のノウハウがあるからチームが強くなるというのも、まー分かる。
でも、やっぱり個人個人で勝負できるようにならないと、本当の意味で強いチームにはならないんじゃないか?

中の人にも実は優秀な人がたくさんいると思う。でもなぜか個人にスポットライトをあてて、強い個人をどんどん作っていこうという姿勢が少ない気がする。もったいない。

これからは、とんがった力を身につけた個人をどんどん育て、強い個人が有機的に結びついてチームが強くなっていくというアプローチも、もっと真剣に考えて取り組んでいかないといけない。

今までそんなことを思っていたけど、まさに同じように考えているお客様と新しいスキームを作ろうと考えて動き出している。ぜひ成功させて楽しいSIerを実現できるようにしたいな。

[SAStruts]参照URLの取得

  • 2008-04-14 (月)
  • Java

どうやらrequestScopeからとれるらしい。
試してみたら実際に取得できて、よかったよかった。
HttpServletRequestからはとれないけど、requestScopeからはとれるというのが理屈は分かるが客観的に見ると不思議な感じ。

[SAStruts] 参照しようとしたURLを保持する
ちなみに、リクエストされたURIを取得するのって認証系の処理で一番使うと思うが、やっぱりServletコンテナの認証機能よりも自分で作った方がいいと思う。
例えば、「ログイン失敗回数をカウントしてアカウントロックを行う」とか、「パスワードが一定期間以上だったらパスワード変更を行わせる」とか、「ログインした会員の状態に応じてログイン後の画面を出し分ける」とか認証に密接に関連したビジネスロジックってあるとおもう。

それらをServletコンテナの認証と、AOPやフィルタなどとに処理が分散させてしまうのは見通しが悪い気がする。

ついでに、tomcat6のJDBCRealmのソースを見たときに、コネクション周りの処理を直さなきゃって書いてあったよ。さすがにこれは一定以上の規模だったら怖くて使えないよなー。自分で直せって意見ももちろんあるだろうけどね。

[Java]privateなメソッドやフィールドの意義

  • 2008-04-08 (火)
  • Java

メソッドやフィールドをprivateにする名目上の意味、テキストに書いてあるような字面は分かる。
でも腹に落ちない。

privateにした上で、getterやsetterを用意するのは更に腹に落ちない。

PythonやってSAStruts触って・・・だからなのか。
自分でたくさんコンポーネントを開発していないからなのか。

うーん。

Home > Archives > 2008-04

Search
Feeds
Meta

Return to page top