月曜日, 6月 30, 2008
やっと、仕事が動き出す?
いやぁ~、長いこと待ったもんだ。。。
やっと、正式に動けるようになりました。
これで、ホントの社会復帰になるんだ!!と思っております。
しかし、あんまり息巻いていると
しんどくなっちゃうんであんまり頑張らない方向で。。。w
日曜日, 6月 29, 2008
OpenIDってどうやって使うんだ??
えーと、わからんです。。。
Bloggerでも使える(認証プロバイダっていうやつ?)ようなことは聞いたんですけど、
どうも見つけられずにいます。
まぁ、OpenIDがつかえないと・・・って場面が今のところはないので、困ってはいないんですが
認証機構としてのOpenIDの在り方は僕的には在りだと思っているので、
(変に色んなところでIDとかを作るくらいならその下位レイヤーとして色んなサイトを横断的に認証可能ってのは楽ちんだと思うしね)必要になったらもう少し真面目に使えるようにしてみようと思う。
Bloggerでも使える(認証プロバイダっていうやつ?)ようなことは聞いたんですけど、
どうも見つけられずにいます。
まぁ、OpenIDがつかえないと・・・って場面が今のところはないので、困ってはいないんですが
認証機構としてのOpenIDの在り方は僕的には在りだと思っているので、
(変に色んなところでIDとかを作るくらいならその下位レイヤーとして色んなサイトを横断的に認証可能ってのは楽ちんだと思うしね)必要になったらもう少し真面目に使えるようにしてみようと思う。
土曜日, 6月 28, 2008
Trac用メモ
Apache上でTracを動かすときのSELinuxのラベル設定
Tracのプラグインのキャッシュディレクトリのドメインは
http_tmp_t
普通のtemp_tとは違うんですね。。。
一つ勉強になりました。
金曜日, 6月 27, 2008
やっぱり、これって路駐になるんですよね。。。
最近、ふと思ったんですが、
現在、僕が通っている仕事場はオフィス街なんですけど、
駐輪所が皆無というような場所なんです。
まぁ、わかる人は大阪城ホールの周辺を想像してみてください。
で、仕方がないので、タクシーとかがよく客待ちしているエリアにこんな風に止めてるんですけど
困っていることが一つ
それは、この配置に対して90°で見事にママチャリ達が壁を作っていることがあるんです。
それも写真に撮ってやろうかと考えたんですが、
ちょうどこのときは大阪城ホールで誰かのコンサートがあったらしく、
ものすごい人だったのでやめときました。
だって、何か恥ずかしくないですか?
人でもなく自転車を取り続けているってのは。。。
木曜日, 6月 26, 2008
iPod touch
最近、ほしいなぁ~と思うアイテムなんですが、
いかんせん、高いのがネックなのと
音楽聴くだけならnanoの方がいいんじゃね?という話を耳にして
僕は一体どんな使い方を想定しているんだろうか?と考えてみた。
- 音楽を聴く(まぁ、これは普通だな)
- 無線Lanでメールのチェック(どこまで使いこなせるだろう?)
- 起動が早いらしい↑の要件をサクっと終われそうな気がする
- その他はまぁ、どうでもいいやw
水曜日, 6月 25, 2008
学習教材を考えてみる
できれば、使えるツールがいいなぁ~なんて漠然としたことを考えています。
とりあえず、意気込みを見せとくかということで、
Subversion1.5をインストール
何か、内部の管理方式が変わったとかどうとかで。。。
まぁ、何とかなるだろう。
とりあえず、マインドマップとかでも使って今あるアイデアを形にしてみたいもんだなぁ~
火曜日, 6月 24, 2008
NFSのディレクトリでsvn commitするとlock取得に関するエラーが出る
NFSで定義したディレクトリ上のリポジトリへコミットを実行すると
日本語訳はすぐに見つかり
で、いろいろ調べてるとNFS上のリポジトリにコミットしようとして同じよう症状に遭遇している方を発見!!
その方は結局ローカル上にリポジトリを再構成して対応されたようでした。。。
僕も一旦はそうしようかと考えたんですが、
以前、使えていたような記憶が頭の片隅に残っていたので、
食い下がって調べてみた。
とりあえず、NFSのロック機構はどうなってんだ??ってところから始まり、
サーバ側の設定は?
クライアント側の設定は?
iptablesか?
selinuxか?
とあれこれ調べていて、ひとつ気になったのは
クライアント側のnfslockのデーモンって起動しないとロックできねーんじゃないか??
結果としてそれが当たりでロックできないよぉ~っていうメッセージも出ることなく問題なしで動くようになった。
僕のなけなしの知識ではrpcでサーバ-クライアント間のやり取りをやっているんで、
ロックしたよ~って情報をクライアント側のnfslockからサーバに通知してあげないとダメなんですね。。。(ほんとにあってるのかな^^;)
てっきり、今まではそんなもんは必要ない?(というか意識したことがなかった。。。)と思っていたんですが、いろいろ出てくるもんです。
Can't get exclusive lock on file '%s'なんてことをおっしゃられるので、 ちょこっと調べてみることに。。。
日本語訳はすぐに見つかり
ファイル '%s' に対して排他的なロックを取得できませんうーん、日本語訳にしてもすぐには解決しそうにないなぁ~
で、いろいろ調べてるとNFS上のリポジトリにコミットしようとして同じよう症状に遭遇している方を発見!!
その方は結局ローカル上にリポジトリを再構成して対応されたようでした。。。
僕も一旦はそうしようかと考えたんですが、
以前、使えていたような記憶が頭の片隅に残っていたので、
食い下がって調べてみた。
とりあえず、NFSのロック機構はどうなってんだ??ってところから始まり、
サーバ側の設定は?
クライアント側の設定は?
iptablesか?
selinuxか?
とあれこれ調べていて、ひとつ気になったのは
クライアント側のnfslockのデーモンって起動しないとロックできねーんじゃないか??
結果としてそれが当たりでロックできないよぉ~っていうメッセージも出ることなく問題なしで動くようになった。
僕のなけなしの知識ではrpcでサーバ-クライアント間のやり取りをやっているんで、
ロックしたよ~って情報をクライアント側のnfslockからサーバに通知してあげないとダメなんですね。。。(ほんとにあってるのかな^^;)
てっきり、今まではそんなもんは必要ない?(というか意識したことがなかった。。。)と思っていたんですが、いろいろ出てくるもんです。
いつの間にかTrac0.11のRCが取れたのがリリースされてる
ちょっと、mod_wsgiってのがどんなものなのか?ってのが気になって
Tracをダウンロードしてこようと思ったら、
Trac 0.11RC2じゃなくなってる!!
RCってのは「Release Candidate」ってことね。もうチョイで正式に。。。ってニュアンスで受け取ってるけど問題ないのかな???
で、入れて少し動かしてみる。。。
当然だけど全部英語だ。。。
しかし、Genshiを使ったテンプレートってどんなもんなんだろ?
yumで入れようとするとClearSilverがくっついてくるので、
腹立たしくてeasy_install trac==0.11で入れてみたんですが、
まぁ、ぼちぼち触りながら感触を確かめてみるか。
月曜日, 6月 23, 2008
seboolをチェックするようにしよう
最近、SELinuxがらみでひっかかることが多かった。
(まぁ、多いのは今も変わらんのですが。。。)
「selinuxをoffにしたら動きました」ってのはよく情報として手に入るんだが、
せっかく、エライ人たちが用意してくれたもんだし使いこなせるようになろうと努力はしています。
何となくトラブルシュートの手順が見えてきた。
- とりあえず、setenforceでPermissiveモードにして動きを確認
- selinuxではない部分の設定apacheならhttp.confとか
- 2で問題がなければこれでsetenforceを実行すれば動くはず
- ここまで来てPermissionDenyとかって怒られるようなら、とうとうSELinuxが当たりっぽくなってくる
- とりあえず、ざっくりaudit2allow -d -lで何か足りないポリシーが無いかチェックする
- 関連のファイルのタイプをチェックする。おかしかったらchconで修正
- これでも動かないならaudit.logを確認する(SELinuxがらみならそれっぽいメッセージがあるはず)
- それっぽいメッセージに関連するsebool値を確認するgetsebool |grep hoge
- ずらずら出てくるパラメータからそれっぽいものをチェックしてonにしてみる
日曜日, 6月 22, 2008
たまには悩む
僕だって、たまには?悩むことだってあります。。。
最近、どうも技術的なことに対する興味が薄れてきていて、
何か新しいことでも学んでみたいなぁ~と思っているんですが、
いかんせん飽きっぽいところがあるんで、
キチンとしたお題が無いと何か燃えないんですよねぇ~
ちょっと前にはJavaFX+EclipseLink+Derbyで会計用ソフトでも作ってみようかとも考えてみたんですが、いまいち乗り気になれない状態になっています。。。
それで、Trac0.11RC2に走ってみたんですが、Linux環境になるといかんせんうまく動かすことができないという現状にイライラが。。。
未だに通っている医者には「何か不安なことありますか?」って聞かれるけど、
この向上心の消失とでもいうのかな?そういう曖昧な状態なんで、
それが漠然とした不安なのかもしれないが、どうも決め手に欠けるところがあって、
「う~ん、最近は不安になることはないですねぇ~」なんて調子の良いことを言っている。
これから先どうなっちゃうんだろ???
土曜日, 6月 21, 2008
食パン+グラタン
木曜日, 6月 19, 2008
水曜日, 6月 18, 2008
精神論
プレスブログさんのところから、「リアル夏こそキアイダー」っドリンクのタイアップページを紹介されました。
とりあえず、紹介の記事を読んでて一番びっくりしたのが、
北京オリンピック公式エネルギー飲料 「リアル夏こそキアイダー」
というフレーズ!!
マジっすか!?
また、合わせてアニマル浜口氏が気合巡業夏場所と言われるイベントをやられるそうな。
まぁ、「気合だー!!」ってな具合に一喝して回るんだろうなぁ~という想像だけは簡単に思い浮かぶ。
確かにアニマル浜口氏がでてくるなら、このロゴもありだなぁ~と
話を戻して、動画の中で自分が気に入ったのを選んでね。と言われるがまま見てみたんですが、「これって、アメバじゃないとみれないんじゃ。。。」と少し不安が。。。 まぁ、問題なくみれたんですけどねw まず、最初は何か言ってるぞってな具合だったんですが まず、言わせてください。「福井さんって誰やねん!!」 「え~と」って連呼します。 20秒くらいは「何かえーとが多いなぁ~」と思ってたんですが、 「徐々にお前の気合が足りてないんじゃー!!」と突っ込みたくなるんです。 最終的には「電話かい!」って具合でした。 どりあえず、コンビニで見つけたら買ってみるかw
話を戻して、動画の中で自分が気に入ったのを選んでね。と言われるがまま見てみたんですが、「これって、アメバじゃないとみれないんじゃ。。。」と少し不安が。。。 まぁ、問題なくみれたんですけどねw まず、最初は何か言ってるぞってな具合だったんですが まず、言わせてください。「福井さんって誰やねん!!」 「え~と」って連呼します。 20秒くらいは「何かえーとが多いなぁ~」と思ってたんですが、 「徐々にお前の気合が足りてないんじゃー!!」と突っ込みたくなるんです。 最終的には「電話かい!」って具合でした。 どりあえず、コンビニで見つけたら買ってみるかw
DB2のJDBC Type2にハマる
今日、仕事場でよくわからない現象が発生した。
それは、次のような事象でした。
各端末で次の操作をおこなう。
Javaでmarge文を発行(PrepareStatement#executeUpdate())
対象DBはWindows2000server DB2 v8.2で更新するのは同じDBインスタンスの同一レコード
他にそのレコードは更新しない状況下であることは当然
marge実行時の戻り値が変なんです。
JDBCのAPI仕様上、PrepareStatement#executeUpdate()はreturn intとなってます。
- 端末Aでは、mergeのreturn 1
- 端末Bでは、mergeのreturn 0
- 端末Cでは、mergeのreturn 1
- 端末Aは確かにbuildlevelっていう値がB,Cとは違っていたが、BとC同じだった。
- 端末Bで使用しているドライバをClassLoader#getResource()で導き出し、端末Aで使用してもreturn 0になるわけではない。(return 1)
- java.sql.Connection#getMetaData()#getDriverVersion()を見てみると、同じドライバクラスを利用しているのに表示されるバージョンが違うということに気づく
- とりあえず、DB2Driverクラスを逆コンパイルしてソースを追いかける。
- getDriverVersionをどんどん追跡していくと。。。
- nativeメソッドにたどり着き、そこでふと気づく「そういや、Type2で接続してたんだよね。。。」
- Type2ってのはType4のようにダイレクトに接続するのではなく、一端クライアントのネイティブライブラリを通して接続する種類であることを思い出し、DB2Driverクラスが読み込んでいるdllを探し始める
- 端末ごとにdllのversionをチェックしてみると驚きの結果が。。。
火曜日, 6月 17, 2008
飼殺し
何か物騒なタイトルになっちゃったけど、
現在の僕の職場での状況がまさにそれに該当してます。。。
契約した案件にストップがかかってしまって余剰人員その1となってしまっています。。。
上の人もそのあたりは重々承知のはずなんだけどねぇ~
簡単なお手伝いでも良いんで何か僕にお題を下さい。
まぁ、お金は出るんで問題ないと言えば問題ないんですけど。。。
やることが無くなってきて
どうしたもんかと色々考えてます。
この時間を利用してもっとも僕にとってプラスになることを考えてみるが、
イマイチ「これだー!!」っていうのは思いつけない。。。
今日はとりあえずEclipseLinkのWikiが結構まとまってきていたので、
それを元に実験でもしてみるかぁ~と思っていたんですが、
もう、集中力なんか保てるわけもなく、眠いこと眠いこと。。。
「ぼぉ~」としながらcvs2svnのスクリプトを流してみたりしてました。
cvs2svnのスクリプトは昔も使ったことがあったので、楽勝だと思っていたんですが、
困ったことにコンバートするのに時間がかかりすぎて使用しているPCのCPUが100%になったまま。。。
とりあえず、プロセスの優先度を通常以下にして他のこと(まぁ、Web見るくらいですけど。。。)をこなしてた。
今日中に終わりそうな気がしなかったので、ほったらかしにして帰ってきてやった。
なんで、Revのsort処理に何時間もかかるんだ??
まぁ、結果は明日行ったらわかるだろう。。。
月曜日, 6月 16, 2008
年金と保険のお知らせとチェーンリング交換の効果
とうとうやってきた。。。
払う金は当然のことながらないよ。。。
分割できんのかなぁ~??
住民税の方は4期に分かれているからいいんだけど、
国民健康保険については、
去年は減免してもらって、
そのうえそのまま窓口で払ってしまったから払い方がまったくもってわかんないです。。。
話は変わって、先週末に取り換えたチェーンリング 36t→46tへの変更によって、かなりクランクが重くなったような気がする。 しかし、一回一回の踏み込みによる加速感?とでも言っていいのか、 レスポンスがすごく良くなったような気がする。 少し、路面が凸凹なところを走るとチェーンカバーがカタカタ鳴るということがわかったんもんで、 とりあえず、今日家に帰ってきてから結束バンドを利用して固定してみました。 結束バンドの色が白しかないもんだからブラウンのフレームには浮いて目立つかとも思ったが、まぁ大丈夫だろうw
話は変わって、先週末に取り換えたチェーンリング 36t→46tへの変更によって、かなりクランクが重くなったような気がする。 しかし、一回一回の踏み込みによる加速感?とでも言っていいのか、 レスポンスがすごく良くなったような気がする。 少し、路面が凸凹なところを走るとチェーンカバーがカタカタ鳴るということがわかったんもんで、 とりあえず、今日家に帰ってきてから結束バンドを利用して固定してみました。 結束バンドの色が白しかないもんだからブラウンのフレームには浮いて目立つかとも思ったが、まぁ大丈夫だろうw
日曜日, 6月 15, 2008
なつかしいなぁ~
今日はTVでインディ・ジョーンズを見てた。
ほんと、なつかしいなぁ~
ちっちゃい頃、一番好きな映画だった。
(といっても映画館で見たわけではないけどね。。。)
その後、インディの幼少期をシリーズ化したやつがやってたけど、
確か「インディ・ジョーンズ 若き日の冒険」?とかってタイトルだったと思うんですけど。。。
あれって、DVDボックスで発売されてないかなぁ~?
ふと、Amazonを見てみたけど
DVDじゃなくてVHSって書いてある。。。
VHS!
さすがに時代を感じさせますなぁ~
今回の映画公開でDVDボックスが出てくれるとうれしいなw
NFS4に苦戦中 続き
とりあえず、NFSv4からは若干今までのNFSとは毛色が違うんだということがわかってきた。
それはfsidってパラメータだ!!
fsid=0ならroot扱いになっちゃうぜ!って説明を読んで、
最初はさっぱり何言ってんだ?って感じだったが、
クライアント側での呼び出し例を読んでてやっと理解した。
mount -t nfs4 host:/ /hoge/hoge -o オプション色々参照元がなぜにルートになってるんだ??って思っていたんだけど、 説明を読むとfsid=0の場合、あたかも/(rootディレクトリ)であるように見せることができるらしい。 とりあえず、理解はしたんだが fsid=1とかだと、マウントするときは今までと同じだと思っていたんだが、 見つからないと言われ続ける。。。 そして、小さく書かれている文面を確認してしまいました。。。 fsidの機能はまだ成熟してないよ~ ・・・ もう、面倒だからv3で接続しよう。
土曜日, 6月 14, 2008
NFS4に苦戦中
どーしても、NFS4でmountできません。。。
iptablesのポートも通してみた。
NFSの機構がresolveして名前解決していることも理解したので、
DNSの代わりにhostsで代用して突破した。
しかし、それでもinternal errorとなる。。。
メッセージはこんな感じです。
nfs: server ホスト名 not responding, timed outどうも、名前解決まではできてるみたいだけど、「レスポンスが返ってこねーよ」的にメッセージですね。。。 結局、ホストとクライアントのどっちが悪いんだろうか??? とりあえず、Sharing files with NFSv4 on Fedoraを参考にやってみたんだけどうまくいかないんだよね。。。
チェーンリングを交換
やりました。
こんな感じに
まずは、作業前の状態
なんか、周りが散らかってるようにも見えるが気にしてはいけません。。。
次にこのピスト君を選んだ理由の一つであった、チェーンガードを取り外します。
チェーンガードだけ見ると「何これ?」って感じです。
まぁ、こんなのはともかく!!
ここからが、本番です!!
とりあえず、チェーンカッターでチェーンを切るためにチェーンを緩めます。
そして、ドキドキのチェーンカッターでのチェーン切断です。
意外と簡単だった。
しかし、チェーンが無いとなんか随分まぬけだなぁ~
しかし、このあとあんなに苦労するとは。。。
まぁ、その話は後に回して続いて今使っているチェーンリングを取り外します。
取り外す際にクランクから外して取り付けようと思っていたんですが、
工具代をケチって10mmのレンチを買ってきたらサイズが合いませんでした。。。
(専用工具はキチンと買いましょうってことなんでしょうね。。。)
とりあえず、チェーンリングのみを分解し、クランクの間を通すようにして取り外します。
まるで知恵の輪ですよ。。。
そして、チェーンリングを取り替えたのがこの姿です。
(あんまりアップしたのを見られると傷だらけなのがわかっちゃいますね。。。)
ついでに言うと、チェーンが外れないようにするカバー(名前忘れた。。。)を
とりあえず、現在使っているものをそのままつけといたんですが、これじゃ意味ないよね。。。
そして!
ここからが、一番大変でした。。。
チェーンの張替です。
とりあえず、前回利用していたチェーンのコマ数を数えてみると94コマでした。
しかし、これってチェーンリング36tの場合の話であって、今回取り替えた46tの場合には確実にコマ数が足りないんです!!
そこで、とりあえず適当(今思うとエラい冒険したもんだと。。。)に長さを合して、まずは切断です。。。
そして、外した部分のコマを繋ぎ直します。
が、しかし!!
困ったことにIZUMIのVチェーンに接続用のピンが無かったんで、
切断した際に取り出したピンを再利用として四苦八苦です。
切って余った部分のチェーンをほどほどにピンを残した状態で外していき、
それで、接続し直すといった作業をやりました。
(正直、次は接続用の専用ピンを買おうと思います。)
そして、こうなりました!!
最後にチェーンカバーを取り付けようとすると、
サイズが合わない!?
とりあえず、干渉しないように取り付けるには取り付けてみたんですが、
大丈夫だろうか??
最終的にこうなりました。
作業時間はさっと2時間弱くらいかな?
チェーンカバーとチェーンが外れないようにするやつを外そうかな??
とりあえず、調子を見ながら考えようと思います。
まだ、試乗してないんですけど
メンテナンススタンド上で回してみても、ギア比の違いが感じ取れます。
こいつはいい走りをしてくれそうだ♪
最後に最近よくピスト乗りの方を見かけるんですが、
ある意味正統派?なのかもしれませんが、ブレーキつけてないんですよね。。。
あれはやっぱり危ないと思うんですよ。
(僕はチキンなんでブレーキを取り付けてます。緊急時以外はそうそう使わないですが。。。)
しかし、あの人たちのおかげでピスト排斥運動でも起こってしまったらどうしよう。。。
と、しょうもない不安がたまによぎります。。。
金曜日, 6月 13, 2008
お薬減りました
今日はあまりにも仕事が暇(ユーザ側の回答待ち)なんで、
思い切って(?)仕事を休んでみた。
そこで、土曜日は人が多くて待ち時間が長い病院へ
さすがは金曜ということもあって、人は少ない!!
で、今日話した内容は
まぁ、たわいもない話でしたが、
結果として
- 寝る薬 ⇒ なし
- 抗うつ薬 ⇒ 減少
木曜日, 6月 12, 2008
ついに来た!!
前回、注文しておいた
話は全く変わるが、CTUのFW設定を変えてからなのか、Kernelのversionを上げたのが原因なのか? nfsdが起動してくれないんです。 こんなメッセージが(一部抜粋です)
- チェーンリング
- チェーン
- チェーンカッター
店のおばちゃん「はい、○○です。」 僕「すいません。そちらで商品を購入したものなんですけど、確認したいことがあるんですがいいですか?」 店のおばちゃん「はい、どうぞ」 僕「納品書も確認したんですけど、IZUMIのチェーンなんやけどね。シルバーで注文してたのに届いたのはゴールドやってんけど。。。確認してもらえます?」 店のおばちゃん「あら、すいません。ちょっと確認してきます。 ねぇ~カ・・」 ~保留中~ 店のおばちゃん「お待たせしました。IZUMIのピスト用チェーンはVチェーンの一種類でその色しか無いですね~」 僕「えぇー、Webのカタログにはシルバーのチェーン載ってたで!!どうなってんのさ!!」 店のおばちゃん「でも、IZUMIのはそれしかないんですよ。すいません。。。」 ここで、責め続けても僕にメリットは無いなと判断して 僕「わかりました。お手数をおかけしました。」う~ん、ゴールドか。。。 何かめっちゃ目立ちそうな気がする。。。 あ、でもチェーンガード(黒の半透明)があるからそんなに目立たないかw
話は全く変わるが、CTUのFW設定を変えてからなのか、Kernelのversionを上げたのが原因なのか? nfsdが起動してくれないんです。 こんなメッセージが(一部抜粋です)
rpcbind: server localhost not responding, timed out RPC: failed to contact local rpcbind server (errno 5). nfsd: last server has exited nfsd: unexporting all filesystems RPC: failed to contact local rpcbind server (errno 512).とりあえず、Kernelについては関係ないような気がする。 そう考える理由は
- FC8でyum updateでkernelのversionを上げてから動かなくなった。
- 思い切ってFC9へyum upgradeをかけてみた。でも動かない。
- yum remove nfs* portmapで一回削除してから、再度インストールしてみる。でも動かない。
(2008/6/14追記) 単にSELinuxが原因だったみたいです。。。 何か非常に恥ずかしい。。。 てっきり、ホームサーバはSELinuxをdisabledにしてたつもりだったんだよね。。。 モジュールを作ってもよかったんですが、 「まぁ、そこまでしなくてもいいかw」ということで解決です。
水曜日, 6月 11, 2008
色々ある日だなぁ~
仕事の方はまったく進展が見えないですけどね。。。
「わくわく青色申告2」を購入してみた。
とりあえず、ずっと伝票を入力し続けた。。。
ところで、交通費ってどうやって清算しようかな?
ICOCA使ってたらチャージした時に領収書をもらうようにしないと。。。
後は伝票入力の裏でホームサーバのFedora8 x86_64を9に上げてみました。
何のことはなくすんなりアップグレードは完了です。
話は戻るが、伝票はマメに入力しようというお話でした。
火曜日, 6月 10, 2008
CTUのFW設定が。。。
VMServerの絡みでプライベートアドレスのBクラスレベルまでをあれこれ操作しないとうまくいかないってことがわかった。。。
めんどくせー
とりあえず、自由に使えるサーバとして考えてDDNSも取ったんだけど。。。
内部ネットワークがうまく機能してくれないと、
何も始められないよ。。。
せっかくTrac0.11でも入れてGenshiだっけ?
ClearSilverで散々な目にあってるだけにjQueryを使ってるテンプレートエンジンであるGenshiに期待してるんですけど。。。
あれで日本語用にちょこちょこっとテンプレートのインターフェースを操作しようと考えていたのに。。。
とりあえず、nfsが動いてくれないことにはどうしようもないよね。。。
あえて、nfsを使わずにrsyncで同期を取るというのも一つの手なのかもしれない。。。
もしもの場合にはそっち方向で考えてみるか。。。
月曜日, 6月 09, 2008
10mmの六角レンチを買ってきた
こんばんは、いやぁ~、仕事が・・・まったく進まないがらです。
(進まないのは僕のせいでは無いのであしからず)
そんなことはともかく!!
チェーンリングを取り換えるのに必要そうなものを
今日、買ってきた。
といっても10mmの六角レンチだけですけどね。。。
ホントは専用の工具があればいいんだけど、
どうしてだか専用ってつくと高いんだよねぇ~
日曜日, 6月 08, 2008
サイトのwidthを思い切って1000pxにしてみる
前々から思っていたことなんですが、3カラムのレイアウトを使っていると
どうしても使いにくいというか読みにくなぁ~と思うことがたびたびあった。
そこで!
思い切って横幅を1000pxにしてみました。
analyticsの解像度とかを見てる限り、
まぁ、世間一般的に問題ないだろうと思う。
たまには自転車の話でも
今日はのんびりと過ごしていたんですが、
ふと思い立って自転車屋へ行ってきました。
まあ、目当てのものはなかったんですが。。。
そういうこともあって、ネットで注文しちまった。。。
前々から変えようと思っていたチェーンリングを36tから46tに変えてみようと
注文してみました。
PDCって前に「何それ?」って思ってたんですが、
チェーンリングの固定位置の直径のことを言うんですね。
いやぁ~調べた調べたw
いきなり10丁も歯数を上げるとどうなんだろうか??
こればっかりは体で経験するしかないのかもしれない。。。
土曜日, 6月 07, 2008
TracAPIを使ったSubversionコミットメール
昨日のやつをもう少し精査してみました。
trac-post-commit-hook.pyを少しいじって(いじる場所はちょっと前に書いてます。)
とりあえず、作ったのは
- trac.svn.notification.py
- postcommit_notify_email.cs
# -*- coding: utf-8 -*- # Copyright (C) 2003-2006 Edgewall Software # Copyright (C) 2003-2005 Daniel Lundinそんでもってpostcommit_notify_email.cs# Copyright (C) 2005-2006 Emmanuel Blot # All rights reserved. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at http://trac.edgewall.org/wiki/TracLicense. # # This software consists of voluntary contributions made by many # individuals. For the exact contribution history, see the revision # history and logs, available at http://trac.edgewall.org/log/. # # Author:gara # from trac import __version__ from trac.config import * from trac.core import * from trac.notification import NotifyEmail from trac.util.datefmt import format_datetime from trac.util.text import CRLF, wrap from trac.versioncontrol.api import NoSuchChangeset from trac.versioncontrol.diff import unified_diff from trac.mimeview.api import is_binary import md5 _kindmap = {'dir':u"ディレクトリ", 'file':u"ファイル"} _actionmap = {'add': u"追加", 'copy': u"コピー", 'delete': u"削除", 'edit': u"更新", 'move': u"移動"} logfile = "postcommit_notification.log" LOG = True if LOG: f = open (logfile, "w") f.write("Begin Log\n") f.close() def log (s, *params): f = open (logfile, "a") f.write(s % params) f.write("\n") f.close() else: def log (s, *params): pass class PostCommitNotificationSystem(Component): always_notify_owner = BoolOption('notification', 'always_notify_owner', 'false', u"""チケットの担当者に常に通知メールを送信するかを設定します (''0.9 以降'') 。""") always_notify_reporter = BoolOption('notification', 'always_notify_reporter', 'false', u"""''報告者'' フィールドにあるアドレスに常に通知メールを 送信するかを設定します。""") always_notify_updater = BoolOption('notification', 'always_notify_updater', 'true', u"""チケットの属性の変更者に常に通知メールを 送信するかを設定します。""") class PostCommitNotifyEmail(NotifyEmail): """Subversionのコミット情報をメール送信""" template_name = "postcommit_notify_email.cs" from_email = 'trac+ticket@localhost' COLS = 75 def __init__(self, env): self.env = env self.repos = self.env.get_repository() self.repos.sync() NotifyEmail.__init__(self, env) self.prev_cc = [] def notify(self, rev): self.rev = rev try: chgset = self.repos.get_changeset(rev) except NoSuchChangeset: return # キャッシュされているチェンジセットの値からはみ出ている self.chgset = chgset self.message = wrap(self.chgset.message, self.COLS, initial_indent=' ', subsequent_indent=' ', linesep=CRLF) self.reporter = '' self.owner = '' subject = self.format_subj() link = self.env.abs_href.changeset(self.rev) self.link = link self.hdf.set_unescaped('email.subject', subject) self.hdf.set_unescaped('email.commit.author', self.chgset.author) self.hdf.set_unescaped('email.commit.date', format_datetime(self.chgset.date)) self.hdf.set_unescaped('email.commit.diff', self.unified_diff()) self.hdf.set_unescaped('email.commit.message', self.message) self.hdf.set_unescaped('email.commit.link', self.link) NotifyEmail.notify(self, self.rev, subject) def get_recipients(self, rev): notify_reporter = self.config.getbool('notification', 'always_notify_reporter') notify_owner = self.config.getbool('notification', 'always_notify_owner') notify_updater = self.config.getbool('notification', 'always_notify_updater') ccrecipients = self.prev_cc torecipients = [] return (torecipients, ccrecipients) def format_subj(self): prefix = self.config.get('notification', 'smtp_subject_prefix') if prefix == '__default__': prefix = '[%s]' % self.config.get('project', 'name') if prefix: return '%s rev:%s' % (prefix, self.rev) else: return 'rev:%s' % (self.rev) def get_message_id(self, rcpt, modtime=0): """Generate a predictable, but sufficiently unique message ID.""" s = '%s.%08d.%d.%s' % (self.config.get('project', 'url'), int(self.rev), self.chgset.date, rcpt.encode('ascii', 'ignore')) dig = md5.new(s).hexdigest() host = self.from_email[self.from_email.find('@') + 1:] msgid = '<%03d.%s@%s>' % (len(s), dig, host) return msgid def send(self, torcpts, ccrcpts): dest = self.reporter or 'anonymous' hdrs = {} hdrs['X-svn-changeset-ID'] = str(self.rev) msgid = self.get_message_id(dest) hdrs['In-Reply-To'] = msgid hdrs['References'] = msgid NotifyEmail.send(self, torcpts, ccrcpts, hdrs) def unified_diff(self): txt = CRLF try: chgset = self.repos.get_changeset(self.rev) except NoSuchChangeset: return # out of scope changesets are not cached for set in chgset.get_changes(): lst = list(set) path = list(set)[0] kind = list(set)[1] change = list(set)[2] base_path = list(set)[3] base_rev = list(set)[4] if kind != u"file": continue if change == u"add": continue elif change == u"delete": continue elif change == u"move": continue elif change == u"copy": continue new_node = self.repos.get_node(path, chgset.rev) old_node = self.repos.get_node(base_path, base_rev) txt += CRLF txt += u"diff: " + path + CRLF line = "%s %s %s" % (_actionmap.get(change), _kindmap.get(kind), path) txt += wrap(line, self.COLS, linesep=CRLF) + CRLF txt += wrap(u"Unified Diff--------------------------------------------------------------", self.COLS, linesep=CRLF) + CRLF new_content = new_node.get_content().read() old_content = old_node.get_content().read() if is_binary(new_content) or is_binary(old_content): txt += u"(バイナリファイルが異なっています)" + CRLF continue txt += wrap(u"--- %s (リビジョン %s)" % (base_path, base_rev), self.COLS, linesep=CRLF) + CRLF txt += wrap(u"+++ %s (リビジョン %s)" % (path, chgset.rev), self.COLS, linesep=CRLF) + CRLF context = 3 options = ['-U%d' % -1] options.append('-B') options.append('-i') options.append('-b') for option in options: if option.startswith('-U'): context = int(option[2:]) break for line in unified_diff(old_content.splitlines(), new_content.splitlines(), context, ignore_blank_lines='-B' in options, ignore_case='-i' in options, ignore_space_changes='-b' in options): txt += wrap(line, self.COLS, linesep=CRLF) + CRLF return txt
更新 (更新者: <?cs var:email.commit.author ?>): 更新日時: <?cs var:email.commit.date ?> コメント: <?cs var:email.commit.message ?> <?cs var:email.commit.diff ?> -- Commit URL: <<?cs var:email.commit.link ?>> <?cs var:project.name ?> <<?cs var:project.url ?>> <?cs var:project.descr ?>こんなんでも、誰かの参考になれば。。。 いいなw
ありゃ?日付が変わってる。。。
以前、TracでSubversion側からチケット更新を行った場合にメールを飛ばそうとしていたんですが、
細かく整理するとやりたいことは以下のようなことになります。
- Trac上でチケットの編集 ⇒こりゃ既存の機能っすね
- Subversion上でコミット ⇒これだけで考えれば、そんなに難しくないと思う
- Subversion上でコミットしてコミットメッセージ内にチケットを操作するコマンドを埋め込む
# -*- coding: utf-8 -*- # Copyright (C) 2003-2006 Edgewall Software # Copyright (C) 2003-2005 Daniel Lundinうーん、正直まだ未完成。。。 叩き台ができたってところかな? 基本的にTracの設定に準拠して動かそうと思っているのでこんな感じかな?と思っています。 しかし、Pythonってなかなかデバックしにくい。。。 そう思うのは僕だけかな?# Copyright (C) 2005-2006 Emmanuel Blot # All rights reserved. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at http://trac.edgewall.org/wiki/TracLicense. # # This software consists of voluntary contributions made by many # individuals. For the exact contribution history, see the revision # history and logs, available at http://trac.edgewall.org/log/. # # Author:がら # from trac import __version__ from trac.config import * from trac.core import * from trac.notification import NotifyEmail from trac.util.datefmt import format_date from trac.util.text import CRLF, wrap from trac.versioncontrol.api import NoSuchChangeset from trac.versioncontrol.diff import unified_diff import md5 _kindmap = {'dir':u"ディレクトリ", 'file':u"ファイル"} _actionmap = {'add': u"追加", 'copy': u"コピー", 'delete': u"削除", 'edit': u"更新", 'move': u"移動"} logfile = "postcommit_notification.log" LOG = True if LOG: f = open (logfile, "w") f.write("Begin Log\n") f.close() def log (s, *params): f = open (logfile, "a") f.write(s % params) f.write("\n") f.close() else: def log (s, *params): pass class PostCommitNotificationSystem(Component): always_notify_owner = BoolOption('notification', 'always_notify_owner', 'false', u"""チケットの担当者に常に通知メールを送信するかを設定します (''0.9 以降'') 。""") always_notify_reporter = BoolOption('notification', 'always_notify_reporter', 'false', u"""''報告者'' フィールドにあるアドレスに常に通知メールを 送信するかを設定します。""") always_notify_updater = BoolOption('notification', 'always_notify_updater', 'true', u"""チケットの属性の変更者に常に通知メールを 送信するかを設定します。""") class PostCommitNotifyEmail(NotifyEmail): """Subversionのコミット情報をメール送信""" template_name = "postcommit_notify_email.cs" from_email = 'trac+ticket@localhost' COLS = 75 def __init__(self, env): self.env = env self.repos = self.env.get_repository() self.repos.sync() NotifyEmail.__init__(self, env) self.prev_cc = [] def notify(self, rev): self.rev = rev try: chgset = self.repos.get_changeset(rev) except NoSuchChangeset: return # キャッシュされているチェンジセットの値からはみ出ている self.chgset = chgset self.message = wrap(self.chgset.message, self.COLS, initial_indent=' ', subsequent_indent=' ', linesep=CRLF) self.reporter = '' self.owner = '' self.hdf.set_unescaped('email.commit_body_hdr', self.format_hdr()) subject = self.format_subj() link = self.env.abs_href.changeset(self.rev) self.hdf.set_unescaped('email.subject', subject) self.hdf.set_unescaped('email.commit.author', self.chgset.author) self.hdf.set_unescaped('email.commit.date', format_date(self.chgset.date)) self.hdf.set_unescaped('email.commit.change_paths', self.change_paths()) self.hdf.set_unescaped('email.commit.diff', self.unified_diff()) self.hdf.set_unescaped('email.commit.message', self.message) self.link = link NotifyEmail.notify(self, self.rev, subject) def format_hdr(self): txt = "" for set in self.chgset.get_changes(): lst = list(set) path = list(set)[0] kind = list(set)[1] change = list(set)[2] base_path = list(set)[3] base_rev = list(set)[4] txt += "[%s]: %s" % (self.rev, wrap(path, self.COLS, linesep=CRLF)) return txt def get_recipients(self, rev): notify_reporter = self.config.getbool('notification', 'always_notify_reporter') notify_owner = self.config.getbool('notification', 'always_notify_owner') notify_updater = self.config.getbool('notification', 'always_notify_updater') ccrecipients = self.prev_cc torecipients = [] return (torecipients, ccrecipients) def format_subj(self): prefix = self.config.get('notification', 'smtp_subject_prefix') if prefix == '__default__': prefix = '[%s]' % self.config.get('project', 'name') if prefix: return '%s [%s]' % (prefix, self.rev) else: return '[%s]' % (self.rev) def get_message_id(self, rcpt, modtime=0): """Generate a predictable, but sufficiently unique message ID.""" s = '%s.%08d.%d.%s' % (self.config.get('project', 'url'), int(self.rev), self.chgset.date, rcpt.encode('ascii', 'ignore')) dig = md5.new(s).hexdigest() host = self.from_email[self.from_email.find('@') + 1:] msgid = '<%03d.%s@%s>' % (len(s), dig, host) return msgid def send(self, torcpts, ccrcpts): dest = self.reporter or 'anonymous' hdrs = {} hdrs['X-svn-changeset-ID'] = str(self.rev) hdrs['X-svn-changeset-URL'] = self.link msgid = self.get_message_id(dest) hdrs['In-Reply-To'] = msgid hdrs['References'] = msgid NotifyEmail.send(self, torcpts, ccrcpts, hdrs) def unified_diff(self): txt = "" try: chgset = self.repos.get_changeset(self.rev) except NoSuchChangeset: return # out of scope changesets are not cached for set in chgset.get_changes(): lst = list(set) path = list(set)[0] kind = list(set)[1] change = list(set)[2] base_path = list(set)[3] base_rev = list(set)[4] if kind != u"file": continue if change == u"add": continue elif change == u"delete": continue elif change == u"move": continue elif change == u"copy": continue new_node = self.repos.get_node(path, chgset.rev) old_node = self.repos.get_node(base_path, base_rev) new_content = new_node.get_content().read() old_content = old_node.get_content().read() txt = wrap("", self.COLS, linesep=CRLF) txt += u"diff: %s" % wrap(path, self.COLS, linesep=CRLF) txt += wrap(u"------------------------", self.COLS, linesep=CRLF) txt += wrap(u"--- %s (リビジョン %s)" % (base_path, base_rev), self.COLS, linesep=CRLF) txt += wrap(u"+++ %s (リビジョン %s)" % (path, chgset.rev), self.COLS, linesep=CRLF) context = 3 options = ['-U%d' % -1] options.append('-B') options.append('-i') options.append('-b') for option in options: if option.startswith('-U'): context = int(option[2:]) break for line in unified_diff(old_content.splitlines(), new_content.splitlines(), context, ignore_blank_lines='-B' in options, ignore_case='-i' in options, ignore_space_changes='-b' in options): txt += wrap(line, self.COLS, linesep=CRLF) return txt def change_paths(self): txt = "" try: chgset = self.repos.get_changeset(self.rev) except NoSuchChangeset: return # out of scope changesets are not cached for set in chgset.get_changes(): lst = list(set) path = list(set)[0] kind = list(set)[1] change = list(set)[2] base_path = list(set)[3] base_rev = list(set)[4] line = "%s %s %s" % (_actionmap.get(change), _kindmap.get(kind), path) txt += wrap(line, self.COLS, linesep=CRLF) return txt
木曜日, 6月 05, 2008
とりあえず、SELinuxをオフにしなくてもTracが動くようになりました
やっとできた。。。
初めから真面目に
$ man audit2allow
で調べとけばよかった。。。
manで見た中で例があげらっれており、以下のような文面だった。
EXAMPLE NOTE: These examples are for systems using the audit package. If you do not use the audit package, the AVC messages will be in /var/log/messages. Please substitute /var/log/messages for /var/log/audit/audit.log in the examples. Using audit2allow to generate monolithic (non-module) policy $ cd /etc/selinux/$SELINUXTYPE/src/policy $ cat /var/log/audit/audit.log | audit2allow >> domains/misc/local.te $ cat domains/misc/local.te allow cupsd_config_t unconfined_t:fifo_file { getattr ioctl };そこで、最終的にこんな具合にやってみた。$ make load Using audit2allow to generate module policy $ cat /var/log/audit/audit.log | audit2allow -m local > local.te $ cat local.te module local 1.0; require { role system_r; class fifo_file { getattr ioctl }; type cupsd_config_t; type unconfined_t; }; allow cupsd_config_t unconfined_t:fifo_file { getattr ioctl }; Building module policy manually # Compile the module $ checkmodule -M -m -o local.mod local.te # Create the package $ semodule_package -o local.pp -m local.mod # Load the module into the kernel $ semodule -i local.pp Using audit2allow to generate and build module policy $ cat /var/log/audit/audit.log | audit2allow -M local Generating type enforcment file: local.te Compiling policy: checkmodule -M -m -o local.mod local.te Building package: semodule_package -o local.pp -m local.mod ******************** IMPORTANT *********************** In order to load this newly created policy package into the kernel, you are required to execute semodule -i local.pp
$ mkdir /etc/selinux/targeted/src $ mkdir /etc/selinux/targeted/src/policy $ cd /etc/selinux/targeted/src/policy $ audit2allow -d -m local > local.te $ checkmodule -M -m -o local.mod local.te $ semodule_package -o local.pp -m local.mod $ semodule -i local.ppこんな感じでPermmision系のエラーが出る度に さっきのコマンドをくりかえし、 $ semodule -R で再読み込みをさせていく形で とりあえず、Tracが動くように。。。 こんなやり方でええのかなぁ~
水曜日, 6月 04, 2008
まだまだSELinux
引き続きお勉強中です。
そもそも、sourceパッケージがなくなって
そのためのコマンドが色々用意されていることにやっと気付きました。。。
もう少し、semoduleとかのコマンドをしっかり見直そうと思う。
火曜日, 6月 03, 2008
[FC9]SELinuって難しい
最近、SELinuxの設定方法をあれこれやっていたんですが、
まず、世間様がいうところのsourceパッケージがねぇ~!!
ってところからスタートしました。。。
まあ、ソースはyumdownloaderを使って拾ってきたSELinux自体のソースを展開という形で
何とかなることはなったんですが、
どうやら、Referenceパッケージなるtar.gzがあったんで、それを展開してみると
ネットで調べてたMakeファイルが見つかり、build.confをごにゃごにゃいじると
なんとかsrcディレクトリを作成することに成功しました。
さあ、これでSELinuxを使ったまま、Trac-Postgresの連携ができれば・・・
audit2allowで調べた内容をどのモジュールに反映すればいいのやら。。。
もう少し彷徨ってみます。。。
月曜日, 6月 02, 2008
過去の亡霊
いやはや、昔お世話になったところで、
働いているんですが、
もう、何年か経つのに未だに僕が何も分からずにただただ一生懸命に(あの時は何にあんなけ一生懸命になれたんだろ??)作ったantのスクリプトが使われていたり。。。
「ちょっと、フォローしてあげて」と言われ見てみたら、
関連するsourceの@authorには僕の名前が。。。
「あ!これ僕が作ったやつだ。。。」
「ホントに実在する人だったんですか!?」
って、あんた。。。
そりゃ、自分の作ったもんに覚悟でも見せなきゃダメでしょ!
そんなこともあって感慨深い思いをしていたら、
別のシステムで
「がらさ~ん、へるぷ~」
「なんやなんや??」
「ここの動きなんですけど。。。」
なんだか言いにくそうだなぁ~
「うーん、Assertでとまちゃってるね」
トレースログを読みながら内心(HogehogeTag・・・?何か見たような覚えが。。。)
と冷や汗をかきつつ、
「何か作ったような気もするし、僕も手伝うからちょっと調べてみようか?」
数分後
「これは!バグ!?」
「う~ん、バグにしてはそう動くようにしっかりロジックが書かれているように思えるんだが。。。
でも、確かに既存バグっぽいね」
しかし、(DBのデータが正しくないと動かないのは当然なんじゃ。。。)と思いつつ
いくつか対応方法を挙げておいた。
(冷たいようだがこのシステムの作業を請け負ってきてるんじゃないんで、後は自分たちで何とかしてください!)
「まあ、影響範囲を調べるのが先だね。たぶん明日はヒマだからわかんないことがあったら聞いておくれ」
なんて恩着せがましく言って逃げてきた。。。(といっても隣の席なんだよね。。。)
内心では「ごめんよ~ごめんよ~作っといて何でたしたのかCVSのコメントにも碌に書かなかった僕が悪かった~」としっかり思っています。
しかし、まさか1日で3システム分(実際作業しているシステム+フォロー2システム)を見るとさすがに
使っているパッケージの違いがあれこれありすぎて頭がパニックに。。。
日曜日, 6月 01, 2008
selinuxとTrac
Apacheで動かしているんですが、
selinuxのラベル設定が思いのほかうまくいかず。困っていたんです。。。
しかし、こんなに簡単に済むとは思ってもいませんでした。
chcon -R --reference=/var/www/html /var/trac/これで、いいんだろうか。。。?
登録:
投稿 (Atom)
failed to read qemu headerのときのメモ
かなり久々。。。 忘れないようにここに書きこんでおく。 ちょっとした手違いで libvirtでイメージを起動しようとすると failed to read qemu header なんておっしゃられて起動しない。。。 vmwareserverを使って...
-
かなり久々、別に放置していた訳じゃないです。 仕事の都合で、現在の開発環境に定義されているDDLスクリプトを抜き出す必要があったので、DBMS_METADATAパッケージを使用してみた。 前に(言っても2年くらい前)DB2で同じようなことをやった時にはdb2lookupっ...
-
unitテストを作ろうと思い、作って実行してみると途中で止まる。。。 「なんで?」 結局のところ、unitテストで実行しようとしたクラスにSystem.exit(int)があったのが原因だった。 それならば、System.exit(int)が効かなくなるおまじないはな...
-
今日は1年ぶりの仕事場でTracの設定をシコシコしてました。 さぁ、チケット発行・更新でメールを送ってやる!! と思ったら、まったく飛んでる気配なし。。。 とりあえず、ログをconsoleからfileへ変更 で、見てみたら notification on creatio...