RFC5689 - Extended MKCOL for Web Distributed Authoring and Versioning (WebDAV)

WebDAV関連の新しいRFCみたい。後で読むかも。

http://tools.ietf.org/html/rfc5689

最終更新時刻: 2009年10月05日

「tDiary-mode for xyzzy」を「tDiary 2.3」以降に対応させる。(UTF8対応) / ディレクトリ内のファイルを全部gzip圧縮するシェルスクリプト / Hyper-Estraierのインストール / 一般ユーザ権限にActiveDirectoryのグループポリシーを使ったソフトウェアの展開

「tDiary-mode for xyzzy」を「tDiary 2.3」以降に対応させる。(UTF8対応)

ハハハハさんが公開されている超便利な「tDiary-mode for xyzzy」。

http://www20.big.or.jp/~rin_ne/soft/tdiary-mode/

残念ながらtDiary 2.3以降には対応していない。

原因はtDiaryの文字コードが2.3以降、EUCからUTF8に変更されているため。

というわけで、適当に対応させる。

「多分eucって書いてある箇所をutf-8とかutf8に置換すればOK」でしょ。っていう方針。

結論から言うとそれで出来た。

置換方法は下記でOK。ハイフン有無を注意。

  • 「encoding-euc」を「encoding-utf8」に。(utf8の様にハイフン無し)
  • 「map-internal-to-euc」を「map-internal-to-utf-8」に。(utf-8の様にハイフン有り)
expansion.l:96:;;   (si:www-url-encode (map-internal-to-utf-8 str) nil " ")
expansion.l:100:   (si:www-url-encode (map-internal-to-utf-8 str)) "+" "%2B"))
http.l:78:     (change-fileio-encoding (or encoding *encoding-utf8n*))
http.l:82:     :incode (or encoding *encoding-utf8n*)
http.l:83:     :outcode (or encoding *encoding-utf8n*)))
http.l:152:    (change-fileio-encoding (or encoding *encoding-utf8n*))
http.l:157:    :incode (or encoding *encoding-utf8n*)
http.l:158:    :outcode (or encoding *encoding-utf8n*)))
tdiary.l:146:  (defvar *tdiary-encoding-system* *encoding-utf8n*
tdiary.l:750:  (change-fileio-encoding (or *tdiary-encoding-system* *encoding-utf8n*))
tdiary.l:850:  *encoding-utf8n*))

expansion.l:96はコメントなのでどっちでもいい。

注意点としては、「encoding-utf8」ではなく「encoding-utf8n」である点。違いはBOMの有無。

最初「encoding-utf8」としたら、BOM(Byte Order Mark)が入っているせいで「<U+feff>POST」のようになってしまい失敗した。

ディレクトリ内のファイルを全部gzip圧縮するシェルスクリプト

Apache等のログファイルが肥大化してる等の理由から、ファイル単位で全てgzip圧縮するためのシェルスクリプト。

#!/bin/sh

for i in `find . -name '*.log.*'`
do
    echo "gzip -f $i"
    /bin/gzip -f $i
done

「-name」の検索条件はログの名前により変更する。

ディレクトリ単位で圧縮するより、ファイル単位で圧縮するほうが、後でzcat等で中身見る際に便利。

一般ユーザ権限にActiveDirectoryのグループポリシーを使ったソフトウェアの展開

グループポリシーオブジェクトを使ったソフトウェアの自動配布について調査したのでメモ。

大きく2つ方法がある。

  • コンピュータに対して割り当てる。
  • ユーザに対して割り当てる

title0

この2つの違いは下記。

  • コンピュータ
    • ローカルのSYSTEM権限でインストーラが実行される
    • 展開方法は「割り当て」のみ。「公開」は選択不可。
    • インストールタイミングはOS起動時ログオン前。
  • ユーザ
    • ドメインのユーザ権限でインストーラが実行される。
    • 展開方法は「割り当て」と「公開」から選択できる。
    • インストールタイミングはログオン後。

特に重要なのは「コンピュータの場合ローカルのSYSTEM権限だが、ユーザの場合ドメインのユーザ権限で実行される」ということ。

よって、下記2点に特に注意が必要となる。

  • ユーザが一般権限しか持っていないような環境で、管理者権限が必要なソフトウェアをインストールする場合、コンピュータを選択することになる。
  • コンピュータの場合、インストールポイントとなるフォルダのアクセス権限は、ドメインユーザ以外のユーザもアクセス許可すること。

特に後者、気づきにくいので注意。

最終更新時刻: 2009年10月06日

月々の生活費

単位は万円で、100円単位は四捨五入。従量課金の物はおよその平均で算出。

携帯電話(NTTドコモ)                          1.5(従量課金 約1.1~1.7)
モバイル通信(au PacketWin)                   0.7(定額+従量課金 0.3~0.7)
サーバ用プロバイダ(ASAHIネット)              0.1
実家用プロバイダ(BB.excite)                  0.1
自宅用プロバイダ(ASAHIネット)                0.1
自宅用インターネット回線(NTT光プレミアム)    0.4

合計2.9万円。結構多い…。

住宅費。

部屋代                                       5.5
水道代                                       0.2
電気代                                       0.7(従量課金 0.5~1.0)
ガス代                                       0.3

合計6.8万円。電気代はちょっと高い。

食事代は幅があるのでざっくり。

食事代                                       6.0(約2000円/日)

平日の昼食はお弁当を買うか、食べに行くか。お弁当なら500円。食べに行くと800円~900円。

夕飯は自分で作るから多分500円未満だろうか。

休日の昼食は食べなかったり、自分で作ったり、食べに行ったり。食べに行くとカフェとかなので1000円~2000円くらい。

夕飯は自分で作ったり、食べに行ったり。

交際費は最近減ってるので、飲み会が2~4件/月くらい。費用は5000円/回くらい。多分。

交際費                                       1.5(3回 5000円/回)

交通費。電車はほぼ使わず車のみ。月2~4回くらい給油で、4000円/回。

交通費                                       1.2(3回 4000円/回)

全体の合計は18.4万円。

後で年間で必要なもの(車の保険とか)を出しておこう。

他にも保険とかあったような。

最終更新時刻: 2009年10月08日

SQLで階層構造を扱う方法 / タスク管理したい

SQLで階層構造を扱う方法

階層構造、木構造、ツリー構造、言い方はともかくそれらをSQLで扱う方法。

その一つが「入れ子集合モデル」。

http://www.geocities.jp/mickindex/database/db_tree_ns.html

Oracleだと再帰SQL(CONNECT BY)という構文が使えるらしい。

再帰SQL自体はPostgreSQL8.4からWITH句として実装されている。要調査。

タスク管理したい

  • Who(誰が)
  • Whom(誰に)
  • What(何を)
  • When(いつ)
  • Why(なぜ)
  • Where(どこで)
  • How(どのように)
  • How long(どれだけの時間で)

やったのか。やろうとしているのかさえ管理できれば良い。

さらに突き詰めると、

  • Who(誰が)
  • Whom(誰に)
  • What(何を)
  • やら(せ)なければいけないのか。
  • 知りたい

と、

  • Who(誰が)
  • Whom(誰に)
  • What(何を)
  • How long(どれだけの時間で)
  • How(どのように)
  • やったのか
  • 記録したい

というのが要件。

前者の要件は予定(TODO)管理で、後者の要件は実績管理なので、別のものとも捉えられる。

もし使用者を自分だけに絞ってしまえば(共有を考えなければ)、Whoはいらなくなる。

上記を満たすためにはredmineとか大げさすぎるんだよね…。

暇があったら作る。

※ Whomを追記

最終更新時刻: 2009年10月13日

Chromeの固定幅フォントサイズが変更できない

UIから変更しようとしたが13から変更できない。バージョンは3.0.195.27。

しょうがないので設定ファイルを書き換え。

C:/Documents and Settings/<Username>/Local Settings/Application Data/Google/Chrome/User Data/Default/Preferences
最終更新時刻: 2009年10月15日

SimpleTask - シンプルなタスク管理 / SimpleTaskの使い方 / デモ

SimpleTask - シンプルなタスク管理

タスク一覧のスクリーンショット

タスク表示画面のスクリーンショット

前書いた「タスク管理したい」を叶えるツールがとりあえず形になったので公開する。

想定しているターゲットは社内のシステム担当部署。用途は問い合わせ対応、インシデント、TODO、案件管理等。

PHP5で作ったので設置して使って下さい。

http://www.mylab.jp/program/simpletask/

データ構造はこんな感じ。

  • タスク1
    • チケット1
    • チケット2
    • チケットn
    • ...
  • タスク2
    • チケット1
    • チケット2
    • チケットn
    • ...

どんどんタスク(問い合わせ)を登録して、その下にどんどんチケット(対応)を登録する。

チケットには担当者と予定時間と実績時間と完了日を入れて、予定と実績と完/未完を管理する。

予定時間だけ入れればToDoになる。

実績の表示とToDoの表示はもっと作り込みの余地ありなんだが、入力に関しては形になったので公開することにした。

ご意見、不具合報告とか歓迎します。パッチはさらに歓迎です。

SimpleTaskの使い方

問い合わせ管理を例にとる。

まず問い合わせが来たら。

  1. 「タスク管理」をクリック。
  2. 最低限、「受付者」と「申請者」と「内容」を入力して送信。
  3. 「タスク確認」をクリック。

で、問い合わせに対して対応したら。

  1. タスク表示画面の下のフォームでチケットを入力する。
  2. 「担当」「内容」「実績時間」「完了日」を入力して送信。

以上。

「実績」画面に誰が何件のタスクとチケットを何時間でやったのか表示される。

デモ

デモを用意したかったんだけど、どこかPHP5が自由に使える無料のサーバはないものか。

心情としてデモ環境を実環境で動かしたくはない。

かといってデモ用にサーバを1台立てるのも大変。

アイデア募集中です。(他力本願)

最終更新時刻: 2009年10月24日

ntpdと仮想IP(IPエイリアス、サブインターフェース)の組み合わせ

  • 2009/11/10追記:この方法はあんまりよろしくない。対策含めた記事は後日書く予定。
  • 2009/11/11追記:書いた。20091111#p01

RHES4 update6な環境において、仮想IPとパッケージのntpdの組み合わせは正常に動作しない。

下記参照。

それぞれから引用する。

eth0 xxx.xxx.xxx.xxx

eth1:1 yyy.yyy.yyy.yyy

という設定で仮想アドレスのyyy.yyy.yyy.yyyに対してUDP通信を行うと戻りパケットのソースアドレスが、xxx.xxx.xxx.xxxになる

上記によって、特にntpdでは下記のような現象が起こる。

NTPサーバとなるマシンntp1がインターフェースeth0を持っている。このインターフェースにサブインターフェースeth0:1およびeth0:99を作成し、それぞれ192.168.1.1/24および192.168.1.99/24を割当てる。このとき、NTPクライアントとなる他の機器server1で、NTPサーバを192.168.1.99を指定すると、同期が取れない場合がある。特に、server1とntp1の間にファイアウォールがある場合などに問題になる。

この原因は判っていて、NTPサーバが192.168.1.99宛に届いた問合パケットに対して、応答パケットが192.168.1.1から出て行くからだ。つまり、こういうことだ。サーバserver1のアドレスを192.168.254.1としよう。さらに、ソースアドレスsとデスティネーションアドレスdを持つパケットを[s=>d]と表すとする。このケースでは、問合パケットは、[192.168.254.1=>192.168.1.99]になり、応答パケットには、ソースとデスティネーションを逆転させた[192.168.1.99=>192.168.254.1]が期待される。だが、これが何故か[192.168.1.1=>192.168.254.1]になってしまう。

NTPクライアント側は、自分が送信先に指定したサーバからの応答があると期待しているので、それとは違うソースアドレスからのパケットは無視する。もしserver1とntp1の間にステートフルなファイアウォールが存在すれば、応答パケットが問合せパケットに対応するものだとは理解できないので、おそらく応答パケットは破棄されてしまう。

これらを解決する方法は簡単で、最新版のntpdをソースからインストールし、新しく追加された「-I」オプションで仮想IPのインターフェースを指定して起動してあげればいい。

手っ取り早くntpdだけ差し替え。

# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p7.tar.gz
# tar xvfz ntp-4.2.4p7.tar.gz
# cd ntp-4.2.4p7
# ./configure
# make
# cp ntpd/ntpd /usr/sbin/ntpd

/etc/sysconfig/ntpdを編集し、OPTIONS行に「-I eth0:1」を追記

OPTIONS="-I eth0:1 -u ntp:ntp -p /var/run/ntpd.pid"

これで、ntpdはeth0:1側で通信するようになる。

ちなみに、up2dateで入れたntpdのバージョンとオプションは下記。

# ./ntpd --version
./ntpd: ntpd 4.2.0a@1.1190-r Thu May 14 09:36:23 EDT 2009 (1)
# ./ntpd --help
usage: ./ntpd [ -abdgmnqx ] [ -c config_file ] [ -e e_delay ]
                [ -f freq_file ] [ -k key_file ] [ -l log_file ]
                [ -p pid_file ] [ -r broad_delay ] [ -s statdir ]
                [ -t trust_key ] [ -v sys_var ] [ -V default_sysvar ]
                [ -P fixed_process_priority ]
                [ -u user[:group] ] [ -i chrootdir ]

ソースから入れたntpdのバージョンとオプション(関係箇所を抜粋)は下記。

# ntpd --version
ntpd - NTP daemon program - Ver. 4.2.4p7
# ntpd --help
ntpd - NTP daemon program - Ver. 4.2.4p7
USAGE:  ntpd [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
(...略...)
   -I Str interface      Listen on interface
                                - may appear multiple times
(...略...)
   -L no  novirtualips   Do not listen to virtual IPs
(...略...)

仮想IP(サブインターフェース、IPエイリアス、 IP alias)に対する対応が行われていることがわかる。

これ(複数のインターフェース持ってる環境での通信)って、OSじゃなくアプリ側で意識しないといけないもんなんだ。と改めて意識できた。

最終更新時刻: 2009年11月11日