2008-06-20 :-)
_ 朝ったー
0530 起床。
_ [アンダーディフィート][細江慎治]通勤ったー
アンダーディフィート
ゲーム未プレイ。作曲は細江慎治さん。
軽いノリの曲はありません。硬派なゲームなのでしょうか。いくつかの曲(ステージ曲?)の最初に入る「ピピーガー」「もにょもにょもにょ もにょ」という音声があります。ステージ開始時の通信を思わせてくれてかっこいいです。
_ 仕事
0830 出勤。
_ whoami と who am i
( via id:GARAPON )
「who am i」と「whoami」の違いが良くわかっていなかった。
私はよく分かってないというか考えもしなかったのでマニュアルを読んでみるます。
whoami -- display effective user id
実効ユーザID を印字する。
The whoami utility has been obsoleted by the id(1) utility, and is equiv- alent to ``id -un''. The command ``id -p'' is suggested for normal interactive use.
ということで id を読む。
-n Display the name of the user or group ID for the -G, -g and -u options instead of the number. If any of the ID numbers cannot be mapped into names, the number will be displayed as usual.
-u で 実効ユーザ ID を取得してその ID を -n に渡して実効ユーザID を実効ユーザ名へ変換する、ということか。
who を読む。
am I Returns the invoker's real user name.
起動した 実ユーザ を返す。
実ユーザID や実効ユーザID とは
実ユーザID/実グループID
setuid機能/setgid 機能が有効であると,プログラムは実行ファイルの所有ユーザ/所有グループを権限として動作する。プログラムを起動したユーザの権限とは無関係になる。
実効ユーザID/実効グループID
実効ユーザID/実効グループIDはプログラムが動作するときの実際の権限で,通常我々がプログラムの動作権限として認識しているものだ。オペレーティングシステムがアクセス権限判断の際に参照するクリデンシャルである。
_ [id][コードリーディング][NetBSD]id -un( whoami )を読む
/usr/src/usr.bin/id/id.c
whoami として呼び出したとする。-u と -n を指定したことにする。
} else if (strcmp(getprogname(), "whoami") == 0) { uflag = 1; nflag = 1; opts = "";
プログラムにユーザー名を指定しなかったのでここに到達するときは argv は NULL 。たぶん
pw = *argv ? who(*argv) : NULL;
-u を処理する。
if (uflag) { id = pw ? pw->pw_uid : rflag ? getuid() : geteuid();
- pw が NULL
- rflag は 0
- よって geteuid() を呼ぶ
-n を処理する。getpwuid() で実効ユーザID に対応するユーザー名を取得する。printf() で印字する。
if (nflag && (pw = getpwuid(id))) (void)printf("%s\n", pw->pw_name);
_ [NetBSD][who][コードリーディング]who am i を読む
/usr/src/usr.bin/who/who.c
case 2: /* who am i */ who_am_i(NULL, show_labels); break;
who_am_i() を呼ぶ。標準入力の ttyname を取得
if ((p = ttyname(STDIN_FILENO)) != NULL) {
実ユーザID を取得してその ID を getpwuid() へ渡して実ユーザ名を取得
pw = getpwuid(getuid());
印字。
print(pw ? pw->pw_name : "?", p, now, "", getpid(), 0, 0, 0, 0);
_ [NAnt][Nunit]NAnt で NUnit を使う
環境
- Microsoft Visual Studio2005
- NAnt 0.86 (Build 0.86.3075.0; nightly; 2008/06/02)
- NAntContrib-0.86-nightly-2007-12-01
- Microsoft .NET Framework 3.5
とりあえずここに書いてあるそのまま。
NAntを使ってデイリービルド環境を構築する:アーキテクト360
default.build はこう。
<?xml version="1.0" encoding="utf-8"?> <project name="ex1" default="all" basedir="." xmlns="http://nant.sourceforge.net/release/latest/nant.xsd"> <property name="basedir" value="G:\miwa\work\NAnt\ex1" /> <property name="build.dir" value="${basedir}\output"/> <property name="test.dir" value="${basedir}\test"/> <target name="all" depends="" > <call target="build" /> <call target="test" /> </target> <target name="build" description="Build of the solution"> <property name="msbuild.property" value="OutDir=${build.dir}\"/> <property name="msbuild.path" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\"/> <exec program="msbuild.exe" basedir="${msbuild.path}"> <arg value="/p:${msbuild.property}" /> </exec> </target> <target name="test" description="testing of the solution"> <nunit2> <formatter outputdir="${test.dir}\" type="Plain" /> <test> <assemblies basedir="${build.dir}"> <include name="*Test.dll"/> </assemblies> </test> </nunit2> </target> </project>
実行。
G:\miwa\work\NAnt\ex1>F:\nant\bin\NAnt.exe
ハマッたところ。
<property name="basedir" value="G:\miwa\work\NAnt\ex1" />
を以下のようにしていた。
<property name="basedir" value="." />
こう書いておくと target を処理する時点のカレントディレクトリになるようだ。
絶対 PATH を指定しないとダメかあ。うーん。
作業のディレクトリ構成。output にナントカ.dll 等が出力される。
G:\miwa\work\NAnt>tree ex1 フォルダ パスの一覧: ボリューム HOME ボリューム シリアル番号は 40EF-7091 です G:\MIWA\WORK\NANT\EX1 ├─ex1 │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties ├─ex1Test │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties └─output
_ NAnt で実行した NUnit のレポートを作成する
nunit2report を使う。
先ほどの default.build の test に nunit2report を追加。
<?xml version="1.0" encoding="utf-8"?> <project name="ex1" default="all" basedir="." xmlns="http://nant.sourceforge.net/release/latest/nant.xsd"> <property name="basedir" value="G:\miwa\work\NAnt\ex2" /> <property name="build.dir" value="${basedir}\output"/> <property name="test.dir" value="${basedir}\test"/> <target name="all" depends="" > <call target="build" /> <call target="test" /> </target> <target name="build" description="Build of the solution"> <property name="msbuild.property" value="OutDir=${build.dir}\"/> <property name="msbuild.path" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\"/> <exec program="msbuild.exe" basedir="${msbuild.path}"> <arg value="/p:${msbuild.property}" /> </exec> </target> <target name="test" description="testing of the solution"> <nunit2> <formatter outputdir="${test.dir}\" usefile="true" type="Xml" extension=".xml"/> <test> <assemblies basedir="${build.dir}"> <include name="*Test.dll"/> </assemblies> </test> </nunit2> <nunit2report todir="${test.dir}"> <fileset> <include name="${test.dir}\*results.xml" /> </fileset> </nunit2report> </target> </project>
実行
G:\miwa\work\NAnt\ex2>F:\nant\bin\NAnt.exe
作業のディレクトリ構成。test にレポートの ナントカ.html が出力される。
G:\miwa\work\NAnt>tree ex2 フォルダ パスの一覧: ボリューム HOME ボリューム シリアル番号は 40EF-7091 です G:\MIWA\WORK\NANT\EX2 ├─ex2 │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties ├─ex2Test │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties ├─output └─test
_ [NAnt][msbuild]NAnt で NAntContrib の msbuild タスクを使うように変更した
default.build のここを
<target name="build" description="Build of the solution"> <property name="msbuild.property" value="OutDir=${build.dir}\"/> <property name="msbuild.path" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\"/> <exec program="msbuild.exe" basedir="${msbuild.path}"> <arg value="/p:${msbuild.property}" /> </exec> </target>
こう書く。タスクのタグだけ書く。
<target name="build" description="Build of the solution"> <msbuild></msbuild> </target>
作業ディレクトリに default.build と .sln を置いてデフォルト動作させる。
_ [NAnt][make]NAnt は make みたいなものか
ターゲットとか依存関係とか馴染み深いですね。
あと NAntContrib のタスクが充実してて素敵です。
さらっと眺めたけどサポートしてるバージョン管理システムはこれくらい?
- SCM
- PCVS
- Microsoft Visual SourceSafe
- Subversion
- PERFORCE
_ [飯][ゴーヤーちゃんぷるー]飯
ゴーヤーちゃんぷるー(卵なし)(ref. 食彩浪漫 2005-06 p.73)