トップ «前の日記(2008-06-19) 最新 次の日記(2008-06-21)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|

2008-06-20 :-)

_ 朝ったー

0530 起床。

_ [アンダーディフィート][細江慎治]通勤ったー

アンダーディフィート

ゲーム未プレイ。作曲は細江慎治さん。

軽いノリの曲はありません。硬派なゲームなのでしょうか。いくつかの曲(ステージ曲?)の最初に入る「ピピーガー」「もにょもにょもにょ もにょ」という音声があります。ステージ開始時の通信を思わせてくれてかっこいいです。

UNDER DEFEAT -SoundTracks- - SweepRecordSHOP

651236.jpg

_ 仕事

0830 出勤。

_ whoami と who am i

( via id:GARAPON )

「who am i」と「whoami」の違いが良くわかっていなかった。

私はよく分かってないというか考えもしなかったのでマニュアルを読んでみるます。

whoami - NetBSD Manual Pages

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 を読む。

id(1) - NetBSD Manual Pages

    -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 を読む。

who(1) - NetBSD Manual Pages

    am I  Returns the invoker's real user name.

起動した 実ユーザ を返す。

実ユーザID や実効ユーザID とは

7-3. setuid は慎重に

実ユーザ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 を使う。

<nunit2report> Task

先ほどの 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 のタスクが充実してて素敵です。

Task Reference

さらっと眺めたけどサポートしてるバージョン管理システムはこれくらい?

  • SCM
  • PCVS
  • Microsoft Visual SourceSafe
  • Subversion
  • PERFORCE

_ [][ゴーヤーちゃんぷるー]飯

ゴーヤーちゃんぷるー(卵なし)(ref. 食彩浪漫 2005-06 p.73)

img_5898.jpg