メモの日々


2000年11月07日(火) 寺元さんへ返事書いた

  • 2日連続で寝付けなかった。
  • 早朝に大黒さんらでMTサーバを入れ替えた。
  • やっと寺元さんへの返事を書けた。ファイル形式定義とネイティブコンポーネントとモジュール統合化。謎な機能だらけだ。
  • モバイルはどうするべ。打合せを少しだけした。世の中の既存のサービスをもう少し調べておこうと思う。
  • あーっと、ライセンスを調べねばならぬのであったか。

2002年11月07日(木) 残業

[windows] RRASの設定(2)

RRASの設定をずっとやってた。苦労した割りに原因は単純で昨日と同じ徒労感が。Windows嫌い。

管理ツールの「ルーティングとリモートアクセス」を使おうとしてもローカルコンピュータに赤いバツ印がついてしまって使えなかったので使えるようにしようと色々やっていたのだ。でもどうしても駄目なのであきらめてnetshコマンドで何とかなるのかなと思って昨日メモったサイトを見ながらいじっていたのだ。が、netsh上でインターフェイス名を表示してみると{xxx-xxx-xxx-xxx}形式で表示されていてそれを引数に指定してもインタフェースが見つからないとエラーになってしまって何もできなかったのだ。それでなんでだなんでだと色々やってみたが駄目で途方にくれる。

色々なサイトを見てWindows.FAQを見たらnetsh でインターフェース名が {xxx-xxx-xxx-xxx} 形式になってしまいますというのが載ってた。うおー、これじゃねーか。で、ここに書いてあるように「Remote Registry Service」というのを起動したらインターフェイス名も出るようになり同時に「ルーティングとリモートアクセス」も使えるようになっただよ。またサービスが足りなかったという落ち。

[dev] PDF関連

PDF出力のツール。広告出るモードなら無料のようだ。

Cプロジェクト

  • 10:30〜11:45 吉田水野兒玉と打ち合わせ。自動生成機能について。とにかくデータ先行。うーむ。
  • 21:05 兒玉くんにのせられて、Amazonで「Microsoft Project Server 2002」という本を注文してしまった。Visaカードの番号を入れたけど平気なのだろうか。

Kプロジェクト

  • 13:10〜14:10 SSL証明書の処理再び。やり直して井坂さんにお願いした。これで小休止だ。

その他

  • 10:25 今日もお粥を食べた。これで痩せる。
  • 15:00 メイルを読んでおった。楽しそうな人もつまらなそうな人もいる。
  • 18:30 随分浅海さんを手伝った。ColdFusion組み込みのhttpsクライアント機能はプロキシを経由するとうまく動かないようだ。暗号化されていない。HTTP1.0だし。

2003年11月07日(金)

生活

  • 曇りだが洗濯。雨降りませんように。
  • 10:00 出社。
  • 10:05〜11:50 Mさんと打ち合わせ。
  • 14:00 いかん、眠くてウトウトしてしまう。いかんいかん。
  • 机の内線電話が鳴って取ったらBさん宛て。Bさんはずーっと外部で常駐のようだ。
  • やっぱりノード毎にプロセス分けるのがいい気がしてきた…。
  • 19:30 煮詰まってしまった。帰ろう。
  • ああ、おれは何も知らない。引き出しの中は空っぽ。もっと興味を持たないといけないのだなあ。
  • アーティチョーク。あとは忘れた。

2004年11月07日(日)

  • うちくるの終わりの方だけ見た。ゲスト吉川晃司。65歳で歌はやめるとのこと。
  • 新番組あっぱれさんま大教授を見た。登場した松本引越しセンターのCMの子役(が育った娘)がよかった。
  • おそく起きた昼はを見た。最近つまらない。
  • ザ・ノンフィクションをちょっと見た。ゴルファー横峯さくらの話。父親がすごく頑張っている。
  • ミズノクラシック女子ゴルフの中継をちょっと見た。プレーを終えた横峯さくらが放送席に招かれていた。各選手のパットのときに「入れっ」と応援していて優しい。大会はソレンスタムが独走。
  • 10月分の会計処理。11月の契約の請書に収入印紙を貼る。

[tdiary] Wikiスタイルでイコール2つを書けるの? (2)

書けた。→ ==

{{'=='}}

と書いた。

[perl] 「Perlで書く」 (MASのページ)

Perl表技集とPerlリファレンスが便利そうなのでメモ。オレンジニュースより。

やること

  • プリンタ処分
  • リンク元のスリム化
  • ナンバーアナウンス解約

2005年11月07日(月)

[unix] Linuxのflock(2)でNFS上にあるファイルをロックする

flock(2)を使う

flock(2)のマニュアルには

flock(2) は NFS 上のファイルのロックをしない。代わりに fcntl(2) を使用すること。これにより、十分に新しいバージョンの Linux と、ロック機能をサポートした NFS サーバを使用することにより、NFS 上でロックができる。

とある。が、

Linux NFS faqのD.10に、

The NFS client in 2.6.12 provides support for flock()/BSD locks on NFS files by emulating the BSD-style locks in terms of POSIX byte range locks. Other NFS clients that use the same emulation mechanism, or that use fcntl()/POSIX locks, will then see the same locks that the Linux NFS client sees.

とあり、よく分からんがLinuxのカーネル2.6.12からはflock(2)を使ってもNFS上のファイルをロックできるように読めたのでFedora Core 3のカーネル2.6.12-1.1381_FC3で試してみた。プログラムは次の通り。

#include <stdio.h>
#include <stdlib.h>
#include <sys/file.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>

void lock_flock(int fd)
{
	if (flock(fd, LOCK_EX)) {
		perror("flock");
		exit(1);
	}
}

void unlock_flock(fd)
{
	if (flock(fd, LOCK_UN)) {
		perror("flock");
		exit(1);
	}
}

void lock_fcntl(int fd)
{
	struct flock lock;

	lock.l_type = F_WRLCK;
	lock.l_whence = SEEK_SET;
	lock.l_start = 0;
	lock.l_len = 0;

	if (fcntl(fd, F_SETLKW, &lock)) {
		perror("fcntl");
		exit(1);
	}
}

void unlock_fcntl(int fd)
{
	struct flock lock;

	lock.l_type = F_WRLCK;
	lock.l_whence = SEEK_SET;
	lock.l_start = 0;
	lock.l_len = 0;

	if (fcntl(fd, F_UNLCK, &lock)) {
		perror("fcntl");
		exit(1);
	}
}

int main(int argc, char *argv[])
{
	FILE *fp;
	int fd;
	pid_t pid;
	time_t start;

	if (argc < 2) {
		exit(1);
	}

	/* ファイルをオープンして */
	fp = fopen(argv[1], "r+");
	if (fp == NULL) {
		perror("fopen");
		exit(1);
	}

	start = time(NULL);
	pid = getpid();
	fd = fileno(fp);

	/* ロックして */
	printf("[%d] %ld: before locking.\n", pid, time(NULL) - start);
	lock_flock(fd);
//	lock_fcntl(fd);
	printf("[%d] %ld: file was locked. sleeping...\n", pid, time(NULL) - start);

	/* 2秒スリープして */
	sleep(2);

	/* アンロックする */
	unlock_flock(fd);
//	unlock_fcntl(fd);
	printf("[%d] %ld: file was unlocked\n", pid, time(NULL) - start);

	fclose(fp);
	return 0;
}

これをコンパイルしてできたプログラム「locker」を、次のシェルスクリプト

#!/bin/sh
./locker $1 &
./locker $1 &
./locker $1 &

を使って2台のNFSクライアントで同時に実行する($1にNFS上のファイルを指定)と、次のように出力された。

PC1

[3886] 0: before locking.
[3888] 0: before locking.
[3887] 0: before locking.
[3886] 0: file was locked. sleeping...
[3886] 2: file was unlocked
[3887] 2: file was locked. sleeping...
[3887] 4: file was unlocked
[3888] 4: file was locked. sleeping...
[3888] 6: file was unlocked

PC2

[3892] 0: before locking.
[3894] 0: before locking.
[3893] 0: before locking.
[3892] 6: file was locked. sleeping...
[3892] 8: file was unlocked
[3893] 8: file was locked. sleeping...
[3893] 10: file was unlocked
[3894] 10: file was locked. sleeping...
[3894] 12: file was unlocked

うん、うまくロックできているようだ。

が、同じプログラムをNFSクライアントとNFSサーバの2台で同時に実行したら、それぞれ独立にロックを獲得してしまった。flock(2)を使った場合、NFSサーバ上のプロセスは特別扱いされてしまうようだ(もっと新しいカーネルなら改善されているのかもしれないけど)。

また、カーネルを2.6.11-1.35_FC3にして試すと、NFSクライアント間でも独立にロックを獲得してしまった(単一PC内のプロセス間では正しくロックできていた)。確かに2.6.12から挙動が変わっているようだ。

fcntl(2)を使う

上のプログラムでコメントアウトしている所を生かし、fcntlだとどうなるかも試した。

結果、こちらだとNFSクライアント間、NFSクライアント〜NFSサーバ間共に、きちんとロックできているようだった。なので、NFSサーバ上でもプログラムが動く場合はfcntlを使う方がよさそう。

また、flockを使うプログラムとfcntlを使うプログラムを同時に起動してみると、NFSクライアント間であればきちんとロックできていた。

[unix] fcntl(2)がアンロックを検出しない

上のプログラムを最初に試したときは思惑通りに動かず、

[4154] 0: before locking.
[4155] 0: before locking.
[4156] 0: before locking.
[4154] 0: file was locked. sleeping...
[4154] 2: file was unlocked
[4155] 30: file was locked. sleeping...
[4155] 32: file was unlocked
[4156] 60: file was locked. sleeping...
[4156] 62: file was unlocked

のような出力になっていた。最初のプロセスがロックを解放しても次のプロセスがなかなかロックを獲得してくれなかった(獲得するのは30秒後)。

iptablesをまず疑い、確かにフィルタリングが掛かっていたのでiptablesを止めてみたが改善せず。その後何をどうしても原因がわからず、もうそういう仕様なのだと結論付けていたのだが、ふと気付き、NFSサーバのhostsファイルにNFSクライアントのエントリを追加したら治った。

tcpdumpの出力を眺めていてふと気付いたので、困ったらパケットキャプチャしろ、というのが教訓。

やること

  • 蛍光灯を捨てる
  • 請書
  • 宛名シール
  • 収入印紙

2008年11月07日(金)

  • やーーっと実装終わりそう。しかしまだ色々動かないなあ。

[howto][dev] svn mergeの代わりにsvn diffを使う

Subversionで、以前にコミットした内容(複数ファイルを変更)の一部を取り消そうとして svn merge コマンドを使ったら、

% svn merge -r 575:574 src/xxx/yyy/zzz/Nantoka.java
svn: REPORT リクエスト (相手: '/svn/aaa/bbb/!svn/vcc/default') が失敗しました
svn: Cannot replace a directory from within

のようなエラーになってしまった。エラーの意味が分からない。

svn diff は実行できたので、

% svn diff -r 575:574 src/xxx/yyy/zzz/Nantoka.java  | patch -p0

としてやりたいことは実行できた。

あと、以前のメモによれば

% svn cat -r 574 src/xxx/yyy/zzz/Nantoka.java > src/xxx/yyy/zzz/Nantoka.java

でもよかった。でもこれはmergeの代わりにはならないか。

(追記)

ふと思いついて、

% cd src/xxx/yyy/zzz
% svn merge -r 575:574 Nantoka.java

のようにしたら svn merge が実行できた。ふーむ。

[book] 償い (矢口敦子)

償い(矢口敦子/著) 読んだ。医師から落ちぶれたホームレスの男が殺人事件に首を突っ込む話。面白く読んだけど、今思うとたいしたことないかも。3点。

やること

  • 歯ブラシ
  • 防虫カバー
  • 毛布

2011年11月07日(月)

[life] 健康診断を受けた2011

今年も受診できた。去年より混んでいる印象。老人だらけで、そりゃ国保の保険料高くなるわ…。

まず身長体重。柱に寄り掛かっては駄目と言われた。機械が変わったのかもしれない。次血圧。そしてしばらく待つ。いつものパターン。

待っている間に、あるおばあさんの名前が呼ばれ、それに対し間違ったおばあさんが説明を聞いて次の検査へ行ってしまうというトラブルが発生した。レントゲンの方で名前が一致しないことに気付き解決した模様。

おれの番も来て、レントゲン。名前を呼ばれる前にレントゲン室の扉を開けてしまったのは失敗だった気がする。でも上着を脱いだら中へ入れと言われたんだよなあ。続けて尿検査、採血、心電図。しばらく待って医師による問診。胴回りは78cm。去年と同じなのか。

今年は1時間半掛かった。料金は500円。後日便を採取して提出しないといけないのだ。未経験なので怖い。


2013年11月07日(木)

[life] 健康診断を受けた2013

今年も受診。去年と変わりなかったかな。あ、採血する人が毎年同じおじさんだったのだけれど、女の人に代わってたや。

大腸がん検査は色々面倒なので断ってしまった。300円。