Landscape トップページ | < 前の月 2003-05 2003-06 次の月 2003-07 >

Landscape - エンジニアのメモ 2003-06

月ごとの記事一覧
2007年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2006年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2005年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2004年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2003年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2002年: 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
日ごとのページ
2003-06/ 1日 2日 3日 4日 5日 6日 7日 8日 9日 10日 11日 12日 13日 14日 15日 16日 17日 18日 19日 20日 21日 22日 23日 24日 25日 26日 27日 28日 29日 30日

2003-06-29 (Sun)

* ディスクのパーティショニングを考える

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

バックアップが必要なディレクトリと、
バックアップが必要ないディレクトリに分ける。

- バックアップが必要なディレクトリ

自分で作成したデータ。
メール、ドキュメント、プログラム、音楽。
CD からリップしたデータもバックアップしておきたい。
また、自分で作成したデータではなくても、
ずっと手元に置いておきたいと思うものはバックアップしたい。

- バックアップが必要ないもの。

とりあえずダウンロードした物。
テンポラリ、キャッシュデータ。
このなかからバックアップしたいと思う物は手で移動する。

- 現在のディスク容量と割り当て

メインマシンに 60GB + 120GB + 120GB。
Debian のファイルサーバに 8GB + 60GB。

2003-06-28 (Sat)

* PostgreSQL用コネクションプールサーバ pgpool

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Postgres]

ftp://ftp.sra.co.jp/pub/cmd/postgres/pgpool/

[pgsql-jp: 30256] PostgreSQL用コネクションプールサーバ pgpool
http://ml.postgresql.jp/pipermail/pgsql-jp/2003-June/005398. ...

pgpool page
http://www2b.biglobe.ne.jp/~caco/pgpool/

2003-06-27 (Fri)

* bcp での NULL の扱い

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

bcp で NULL をどう扱うかはオプションで指定可能。

http://www.microsoft.com/japan/msdn/library/ja/coprompt/cp_b ...
-k 一括コピー操作時、空の列には、挿入される列の既定値ではなく、NULL 値を保持すること指定します。

てにをはが抜けてるけど、気にするな。

2003-06-26 (Thu)

* 537Km, 42l

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [給油]

2003-06-25 (Wed)

* qmail で @ の前がドットのアドレスを扱う

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [qmail]

メールサーバ管理者から qmail の設定変更についてメールが来た。メールアドレスに引用符 " を付ける処理を変更するとのこと。

qmailでは、RFCにおいてクォート処理が必要とされているメールアドレスを
【確実に】クォートしていることが判明しました。
これが、アダとなって、2003/06/08以降、e-mailを受け取れないでいるユー
ザが多数います。
対象は、メールアドレスのユーザ部がドット(.)で終わるユーザです。

(引用者により中略)

また、ユーザにアドレス変更をお願いするのも、すぐには実現できません。
そこで、qmailにクォート処理をやめさせます。

qmail-1.03では、quote.cのquote_need()という関数で、クォート有無を決定
しています。
この関数の以下の行が、ユーザ部がドット終わりとなっている場合の評価です。
  if (s[n - 1] == '.') return 1;

今回は、この行の前後を#ifdef式で囲むこととしました。
  #ifdef LAST_DOT_QUOTE
    if (s[n - 1] == '.') return 1;
  #endif

オリジナルのソースであれば、LAST_DOT_QUOTEは未定義なので、コンパイル
されません。

この処理を復活させたいのであれば、コンパイルオプションに、
  -DLAST_DOT_QUOTE
を追加(Makefileの編集で実現)して再コンパイルします。

以上の内容となります。
今後、別サーバにqmailを導入する際の参考としてください。

2003-06-24 (Tue)

* C# で ファイルの読み書き - C# File I/O

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [C#]

後輩がファイルの書き込みができなくて悩んでたので、サンプルコードを書いてみた。

StreamWriter strm = new StreamWriter(@"c:\test.txt");
strm.Write("OK!");
strm.Close();

Close() しないと書き込みされないので注意。後輩はそれで悩んでた模様。

ファイルの読み書きするんだから明示的に書くのが当たり前なんだけど、
C# だと「ガベージコレクタがうまくやってくれるでしょ」って意識がある。
Close() してなくて書き込めてなかったことは内緒にしておいてくれ。
perl だとちゃんと書いてたんだけど、C# だと何となく甘えてしまうなあ。

MS って結構かわいそうなのかも。
できて当たり前、用意されてて当たり前、自動でやってくれて当たり前という目で見られてしまう。
「そんなメソッドが C# に無い訳がない」とか、
「Java でできるんだから C#でもできるでしょ」とか、
「商用製品なんだからそんなライブラリは用意されてて当たり前」とか。

これだけオープンソースソフトウェアが台頭していると、
それと比較されてしまうのは仕方のないことだとは思うけど。

2003-06-23 (Mon)

* winny のオープンソース化を考える

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [winny]

Winnyのオープンソース化を考えるスレ
http://pc.2ch.net/test/read.cgi/linux/1056020225/l50

- スレの発端は47氏の発言

http://pc.2ch.net/test/read.cgi/linux/1053087824/882
882 :47 ◆KbtLZwerNc :03/06/19 08:50 ID:AhStOI42
Winny作者ですが

あれがクローズドシステムになっているのは、好きでそうしているわけではなく、
こちらの設計能力不足によるものですので、もしオープンソースでも問題ないメカニズムが
導入できるのなら、こちらでそれを取り入れてWinnyのソースを公開するのもありかと思ってます。

その際には現在のWinnyとの互換性はなくなると思いますが。

今やってるWinny2のその次を考えるとどうしても一人でやっているのは限界があるわけで、
オープンシステム化かもしくは別の方法による大規模化は避けて通れないでしょう。

とりあえず設計さえ煮詰まれば実装はこちらでやっても良いので、考えるのだけはよろしくお願いします。
だめならソース非公開なままでUNIX版を作るという手もありですが、こちらの時間的余裕の問題で
オープンにできないのであればUNIX版ができることは無いと思います。

2003-06-22 (Sun)

* スキスキスキ ハイハイ キュンキュンのアスキーアート

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [アスキーアート]

2ちゃんねるを見てたら貼られていたアスキーアート。なんなのこれ?
                         ハイ!ハイ!
  ≡ (゚∀゚ )スキスキスキ          ヾ(゚∀゚)ノ
 ≡ 〜( 〜) スーキスキス           (  )
  ≡  ノ ノ                  < <


    スキスキスキ  ( ゚∀゚) ≡       キュンキュン!
     スーキスキス (〜 )〜 ≡       (゚∀゚)
           ( (   ≡        ノ( ヘヘ
手がかりはこの AA しかないので、Google で スキスキスキ ハイハイ キュンキュン を検索。やはり 2ちゃんねる発の AA のようで、2ch.net ドメインのページが多数ヒットする。

- ゲームの主題歌だったのか

カラフルキッスというゲームの主題歌を AA 化したものらしい。オフィシャルサイトから試聴用 mp3 をダウンロードできた。

主題歌 『さくらんぼキッス 〜爆発だも〜ん〜』 (zip約3.0MB)
http://www.web-giga.com/colorful/dl/kiss.zip
http://www.web-giga.com/colorful/dl/c_dl.html

- この曲は、やばい

すごい曲だ。曲は軽快でメロディーも覚えやすいというか、耳に残る。ボーカルの声質が非常に個性的なため、免疫のない人には受け入れられないだろう。しかし、気にしない人には破壊力抜群だ。AA のキャラクターがアヒャった顔をしてるのもうなずける。麻薬的電波系ソングだな。

2003-06-21 (Sat)

* 8の字巻き シールド巻き

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

友達にはシールド巻きと教わったが、8の字巻きと呼ぶ方がgoogle のヒット数が多かった。

秘伝 これが8の字巻だ!
http://homepage3.nifty.com/sr8/starthp/subpage01.html

2003-06-20 (Fri)

* C# の逐語的文字列リテラル

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [C#]

C# には「逐語的文字列リテラル」というものがある。

逐語的文字列リテラルの中ではエスケープ文字 \ による記述が無効になる。perl の "" と '' の違いみたいなものか。

"" で囲まれた文字列では \n や \t などがパースされる。
@"" で囲まれた文字列では、\n や \t などはパースされず、そのまま解釈される。
@"" で囲まれた文字列を、逐語的文字列リテラルと呼ぶ。

@"" 中で " を表現するには、"" とする。
逐語的文字列リテラルでは、以下のような記述もできる。
string j = @"one
two
three";

C# 言語の仕様 2.4.4.5 文字列リテラル
http://www.microsoft.com/japan/msdn/library/ja/csspec/html/v ...

2003-06-19 (Thu)

* ASP.NET でのセッションの有効期限の初期値

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [.net]

ASP.NET のセッションの有効期限の初期値は20分。web.config で変更可能。
コード中で Session.Timeout プロパティに値をセットすることでも変更可能。単位は分。

<!--  セッション状態の設定
      既定では、ASP.NET は Cookie を使用して、要求がどのセッションに属するかを識別します。
      Cookie が使用できない場合は、URL にセッション識別子を入力することで、セッションを見つけることができます。
      Cookie を有効にするには、sessionState を cookieless="false" に設定してください。
-->
<sessionState
        mode="InProc"
        stateConnectionString="tcpip=127.0.0.1:42424"
        sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
        cookieless="false"
        timeout="20"
/>

Web.config の sessionState 要素の timeout 属性も単位は分。

2003-06-18 (Wed)

* GNU コーディング規約

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [プログラミング]

* Proxy 自動設定ファイル proxy.pac

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

http://www.netscape.com/ja/eng/server/proxy/2.5/prad_10.html

上記を参考に、2ちゃんねるターボ用の proxy.pac を書いてみた。
function FindProxyForURL(url, host) {
  if (dnsDomainIs(host, '.2ch.net') || dnsDomainIs(host, '.bbspink.com')) {
    return 'PROXY localhost:8095; DIRECT';
  } else {
    return 'DIRECT';
  }
}

2003-06-17 (Tue)

* 半熟煮卵の作り方

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [] [ラーメン]

ラーメン屋さんの半熟味付玉子
http://www.apple.cx/%7Erabao/ajitama.html

あの(゜Д゜)ウマー い料理を家でつくろう!
http://food3.2ch.net/test/read.cgi/cook/992447035/754
754 :ぱくぱく名無しさん :03/06/13 16:53
★ラーメン屋さんの半熟トロ〜リ煮卵★

材料:卵、煮汁(醤油:みりん:水=1:1:3)、削り節

1.殻が割れないように常温にした卵を、煮立った湯に入れ5分ゆでる(時間厳守)
2.茹で上がったら氷水に入れ急冷し、殻をむく。(その後も氷水に入れてキンキンに冷やす)
3.煮汁の材料を鍋で煮立たせ、削り節を一掴み入れ、再び煮立ったら灰汁を除く
4.仕上げにほんだし等で出汁を利かせ、キッチンペーパーで煮汁を濾す
5.タッパーに軽く水切りした卵を入れ、熱い煮汁を一気にかける
6.キッチンペーパーで浮いてこないように中蓋をし、タッパーを閉め、粗熱を取って冷蔵庫へ
7.8時間くらい経ったものがウマーです。

冷たい卵に熱い煮汁を一気にかけることによって、浸透圧の原理で出汁が中までしみ込みます。
お弁当にもOKだし、冷奴などに乗せてもウマーです。

767 :ぱくぱく名無しさん :03/06/16 12:01
>>754
昨日作って一晩置いて、今朝食べてみた。→コイツア(゚Д゚)ウメエ!!

そのままでもイイけどレンジであっためて熱々にしてもウマウマー。
何時間を過ぎたら煮汁から出して保存した方がいいとかあるのかな?
何はともあれ多謝〜

772 :ぱくぱく名無しさん [sage] :03/06/17 18:49
>>754 今仕込み中〜 楽しみだ〜
>>767 レンジで暖めると中はどうなるの?固まる?

773 :ぱくぱく名無しさん [sage] :03/06/17 19:00
>>767
「爆発たまご」にはなりませんか?(; ´Д`)

774 :ぱくぱく名無しさん :03/06/18 00:19
>>754の煮卵って、5分しか茹でないと皮剥いてる間に卵が崩れちゃうんだけど・・・
なんかコツあるの?

775 :ぱくぱく名無しさん :03/06/18 00:24
>>774
菜箸の後ろで細かいひびを入れた後水の中でむくと綺麗にむけるよ。
はなまるマーケットで言ってた。

776 :ぱくぱく名無しさん [sage] :03/06/18 00:31
>>774
754じゃないけど、卵は少なくとも常温にしておくこと。あるいは
水から入れて沸騰してから5分。このくらいが黄身とろーり半熟卵
の目安でつ。そんなにトロトロでなくっていいなら、もう1〜2分
ゆでても別に問題なくおいしいです。

777 :ぱくぱく名無しさん :03/06/18 00:45
>>774
重みで割れやすいから水の中でむくんだそう。

レンジで温めても大丈夫なんでしょうか? レスを追いかけても載ってなかった。ゆで時間は 5分から7分といった所か。オレンジ色の黄身が美味しい。

COOKPAD 超カンタン!半熟煮卵の作り方 by ちいたん♪
http://cookpad.com/recipe.cfm?RID=99453

ゆで時間についても議論している。
http://cookpad.com/oitiinonn/index.cfm?Page=forum&Mode=r ...

* 先輩教えて!プログラミングのabc(オブジェクト指向編)

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [プログラミング]

* SCO が主張する「Linux に流用された技術」

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

http://www.itmedia.co.jp/enterprise/0306/17/epn11.html
さらにソンタグ氏によると、流用されたコードには、
NUMA(Non Uniform Memory Access)技術を使うマルチプロセッササーバで
Linuxを動かすための拡張機能、Journaled File Systemが含まれる。
加えて、マルチプロセッササーバで一部メモリのボトルネックを軽減するための
RCU(Rea-Copy Update)も流用されたという。

* IIS安全対策ガイド

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Windows]

http://www.atmarkit.co.jp/fwin2k/operation/iissecurity/iisse ...
@IT の 特集記事。Windows 2000 Service Pack 3対応。

* 2ちゃんねるの ime.nu の役割と仕組み

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [2ch]

- リファラを隠蔽するためと、広告を見せるために存在している。


read.cgi 側で http://www.google.co.jp/ を、
<a href="http://ime.nu/www.google.co.jp/">http://www.google.c ... に変換する。

ime.nu CGI は、http://ime.nu/www.google.co.jp/ にアクセスされると、
PATH_INFO に指定された URI を http://www.google.co.jp/ へのリンクとして生成して表示する。
FragmentID が失われてしまうという欠点がある。

* ChangeLog 用関数

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

# 日付単位に分解
sub split_entry() {
    my $str = shift;
    return split(/(?=^\d{4}-\d{2}-\d{2})/m, $str);
}

# * で始まるアイテム単位に分解
sub split_item() {
    my $str = shift;
    $str =~ s/^\t//gm;
    my @item = split(/(?=^\*.*:)/m, $str);
    shift(@item); # 先頭は日付のところなので削除。
    return @item;
}

# アイテムを file_name と body に分解
sub split_body() {
    my $str = shift;
#    print $str; # DBG
    my ($file_name, $body) = ($str =~ /^\*\s+(.*?)\n(.*)/s);
    return ($file_name, $body);
}

2003-06-16 (Mon)

* 文字列中のシングルクオートのエスケープ

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

SQL Server で使う Transact-SQL における文字列のエスケープ。

Transact-SQL リファレンス Constants (定数)
http://www.microsoft.com/japan/msdn/library/ja/tsqlref/ts_ca ...
単一引用符で囲まれた文字列に単一引用符を埋め込む場合は、
単一引用符を 2 つ続けて並べることで 1 つの単一引用符を表します。
文字列が二重引用符で囲まれている場合は該当しません。

\' などには対応していない模様。
設定によっては、文字列をダブルクオートで括ることができるようだ。

* SQL Server のセキュリティとユーザアカウントの設定

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

- sa アカウント

SQL Server の管理者用アカウント。
初期設定ではパスワードが空のままになっているため、ワームに狙われることが多い。
必ず強固なパスワードを設定しておくこと。

- 権限

以下の三つがある。
SQL Server への接続権。
データベースへの接続権。
テーブルなどのオブジェクトへのアクセス権。

- ロール

権限をパッケージ化したもの。
「固定サーバロール」、「固定データベースロール」などがある。
db_backupoperator に所属させておくと、その DB をバックアップできる権限が与えられる。
他にいろいろ設定する必要が無くてお手軽なようだ。
もっとも、業務で使うなら「本当に余計な権限が付与されない」ことを確認する必要がある。
「DROP TABLE はできないと思ってたんだけど、試したらできちゃった」なんてことが無いように。

* 引用部分を blockquote する正規表現

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

$log =~ s!((^[>|].*\n)+)!<blockquote>$1</blockquote>!mg;
$log =~ s!((^\t(&gt;|\|).*\n)+)!<blockquote>$1</blockquote>!mg; # ChangeLog メモ用

2003-06-14 (Sat)

* 特殊な実体参照・ドクロとか

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [HTML]

* バブルバスガール

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [音楽]

フジテレビ系で放送されていたポンキッキーズの曲。コニーちゃんが歌う。作曲がカジヒデキで、とてもポップで楽しい曲。ポンキッキーズ・メロディ(2) というアルバムに収録されている。シングルは入手困難な模様。
ポンキッキーズ・メロディ(2)ポンキッキーズ・メロディ(2)

ディック・リー / 和田アキ子 / 森高千里 / 糸井重里 / 米米CLUB / コニーちゃん / カジヒデキ / Folder / 小林和子 / 小森田実
発売日: 1998/12/01


amazon で詳しく見る


- シングルの情報

S 1997.7.1 PONY CANYON
PCDA-00952 476円
1 バブルバスガール 作詞(カジ&obata)・作曲・編曲
販売元:ポニーキャニオン
発売日: 1997年 7月 1日 商品番号:PCDA 982 JAN:4988013789333
価格(税抜き):476円 TSUTAYA online販売価格(税抜き):476円

2003-06-13 (Fri)

* SQL Server のフルテキスト検索のセットアップと管理

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

- 事前準備

Microsoft Search サービスを起動しておく。
DB のフルテキストインデックスを有効にする。
テーブルのフルテキストインデックスを有効にする。
列のフルテキストインデックスを有効にする。
フルテキストカタログを有効にする。

追記。
ちなみに、サーバが MS SQL Server 2000 の場合、「テーブルのフルテキストインデックスを有効にする」などの作業は DB がインストールされているサーバ上でおこなう必要がある。リモートから Enterprise Manager を起動して接続している場合は該当項目がグレーアウトして GUI から選択できない。サーバが MS SQL Server2005 の場合は、リモートから設定可能。

検索対象とするテーブルには、UNIQ で NOT NULL なカラムが必要。

- クエリの例

SELECT syogo FROM company_search WHERE CONTAINS (*, '工業');

- ノイズ語 (インデックスされない単語) を納めたファイルは \mssql\ftdata\config にある。

- FREETEXT は OR 検索しかできない。CONTAINS は AND 検索が可能。

もっとも、FREETEXT でも複数の FREETEXT を AND で連結することで AND 検索はできる。

2003-06-12 (Thu)

* mod アーティスト elwood の曲

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [音楽]

Terminus and kiste present: Elwood's MP3-s
http://www.scene.ee/elwood/

mod は以下のページにある。SweetDreams とか DeadLock とか、超懐かしいな。hornet.org のアーカイブを漁って聴いてたなあ。

The Mod Archive - elwood
http://www.modarchive.com/artists/elwood/

2003-06-11 (Wed)

* pngcrush と jpegtran

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ソフトウェア]

* ロングファイルネームに対応していないプログラムは、命名に配慮しないとファイルの消失を招く

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Windows]

Windows を使っていても、samba を使っていても、一定の確率で「短いファイル名」が衝突してしまう。
ファイル名が衝突すると、ファイルが上書きされたりすることがある。

Samba 3.0.0β 登場
http://slashdot.jp/article.pl?sid=03/06/10/1818249

Windowsを安心して使えますか?
http://slashdot.jp/comments.pl?sid=100052&cid=334908

* SQL Server で SELECT をブロックするロックモード

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

- SELECT をブロックするには XLOCK じゃないとダメなの?

MS SQL Server2000 で SELECT をブロックするには UPDLOCK でいいと思ったが、XLOCK にしなければならないのだろうか? 私は UPDLOCK で 後発のトランザクションの SELECT がブロックされるのを確認済みなのだが・・・。もしかして、>>557 は XLOCK どころか UPDLOCK も試してなかったのだろうか?

SQL教えてっ!! lt;3gt;
http://pc2.2ch.net/test/read.cgi/tech/1042208762/557-560
557 :デフォルトの名無しさん :03/05/06 17:35
SQLServer2000です。
SELECTと同時にロックをかける・・・Oracleでいう、FOR UPDATEみたいな
動作をさせたい場合はどうすれば良いのでしょうか?
ヘルプには、SELECT文に使うヒント句でロック方法を指定するような記述が
あるのですが・・・

どのヒントを指定しても別の接続からSELECTできてしまいます。
(UPDATE等は出来ないので、ロックはされているようです)


558 :デフォルトの名無しさん :03/05/06 17:52
>>557
FROM table_name (UPDLOCK) かな?


559 :デフォルトの名無しさん :03/05/06 18:00
すまん。UPDLOCK中でもSELECTはできるから排他ロックが必要なのかな。
FROM table_name (XLOCK)

この辺見るといいかも
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/acdata/ac_8_con_7a_7xde.asp
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/acdata/ac_8_con_7a_8um1.asp



560 :557 :03/05/06 18:05
>559
XLOCKで逝けました!!

>557で「どのヒントを指定しても」って書いたのにXLOCKを試していませんでした。
何故なら、印刷したヘルプのXLOCK以下が切れていた為(鬱死
今度はもっとヘルプをよく読みます。
ありがとうございました。

- 判明

わかった。結論から言うと、UPDLOCK では SELECT をブロックできない。ただし、後発のトランザクションの SELECT に UPDLOCK が指定されている場合は、ブロックされる。ロックの流れは以下の通り。

先発のトランザクションは、UPDLOCK 付きの SELECT によって 更新ロック (U) を獲得する。後発のトランザクションが UPDLOCK 付きの SELECT で更新ロック (U) を獲得しようとするが、既に 先発のトランザクションが更新ロック (U) を獲得済みのため、ロック解除待ちになる。

私がやったテストは、どちらのトランザクションも UPDLOCK 付きの SELECT だったため、後発のトランザクションの SELECT がブロックされたというわけだ。

つまり、UPDLOCK 無しの SELECT が発行される可能性があり、その SELECT に UPDLOCK 中のレコードを読ませたくない、という場合は XLOCK を使わなければならない。

参考: ロックの互換性 MSDN Library Japan
http://www.microsoft.com/japan/msdn/library/default.asp?url= ...

* Windows からファイルを上書きすると Unix 上のパーミッションが変わってしまう

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [samba]

http://pc.2ch.net/test/read.cgi/unix/1028825681/487
そういえば、オレも以前からこの問題は気になってた。
ということで調べてみた。結論から言うと、「エディタが悪い」。
http://pc.2ch.net/test/read.cgi/unix/1028825681/519 に回答を書いておいたが、>>487 はもう読んでないんだろうなー。
>>487
> WindowsクライアントからSAMBAのファイルを更新すると、
> 強制的にcreate maskで指定したパーミッションになってしまいますが、
> これはどうにかならないのでしょうか?

[samba-jp:08599] シェルスクリプトの実行属性によると、どうにもならないようだ。

http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8599.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8602.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8603.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8607.html
http://www.samba.gr.jp/ml/samba-jp/htdocs/20010214/8608.html

Windows のエディタの多くは、上書き保存するときに
1) すでにあるファイルを rename して、
2) 新しくセーブするべきファイルを作成し、
3) 前のファイルを消す
ということをしているから、とのこと。

* well known port と ephemeral port

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ネットワーク]

1023 番までのポートを well known port と呼ぶ。
では、それ以降の1024番から65535番までのポートを何と呼ぶかというと、
ephemeral port と呼ぶそうな。ephemeral は「儚い」とか、「短命な」という意味だそうだ。
http://dictionary.goo.ne.jp/search.php?MT=%65%70%68%65%6D%65 ...
エフェメラルってなんか発音しにくいなあ。

2003-06-10 (Tue)

* MS SQL Server で全文検索

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

DB に格納されている文字列に対して、全文検索をかける。
いくつか方法があるようだ。
1. LIKE を 使って地道に SQL を組み立てる
2. CONTAINS を使う
3. FREETEXT を使う。
FREETEXT というのは知らなかった。検索語の分解もやってくれるようだ。結構便利かも。

FREETEXT
http://www.microsoft.com/japan/developer/library/tsqlref/ts_ ...

* RFC-2119及びそれに類する語の訳

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RFC]

http://www.aurora.dti.ne.jp/~zom/mng/mng_spec.html より。
〜が期待される EXPECTED
〜が推奨される RECOMMENDED
〜かもしれない MIGHT, MAY(稀)
〜してはならない MUST NOT, CANNOT
〜しても良い CAN, MAY(稀)
〜すべきである SHOULD
〜すべきでない SHOULD NOT
〜せねばならない MUST
〜できる CAN
付随的な・任意の・オプションの OPTIONAL
〜求められる・〜要求される REQUIRED
〜許されない NOT ALLOWED, NOT PERMITTED
〜許される ALLOWED, PERMITTED

* Visual source safe についてのローカルルール

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [.net]

1. *.aspx ファイルと「*.cs」ファイルは一緒にチェックアウトすること。
2. チェックインは必ずビルドできる状態のファイルで行うこと。
3. Visual studio .Net の起動時に開くファイルは、以下の基準で選択すること。
・チェックアウトしているファイルがない場合: VSS のファイルを開く
・チェックアウトしているファイルがある場合: チェックアウト先のファイルを開く
4. ファイルを削除する場合は「完全に破棄する」のチェックを外すこと。

* SQL Server は COMMIT されるまで読み取りもブロック

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

魅惑(困惑)のSQL Server
http://www.unisys.co.jp/club/net_view/20030129.html
このデッド・ロックの原因を理解するにあたって必要な知識は「SQL Serverは他のユーザがcommit/rollbackするまで当該行の読み取りをブロックする」ということだけでした(ORACLEの場合はトランザクション開始前のデータを読み取る).SQL Serverはロックをエスカレーションさせるとか,分離レベルを上げた場合の振る舞いとか,そういう難しい話は全く関係なし.

あとで試してみよう。

2003-06-09 (Mon)

* MS SQL Server が使用するポート

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [MS SQL Server]

TCP 1433 と UDP 1434。
このポート番号を検索してみたところ、ほとんどがワームについての対策サイトだった。
TCP 1434 と UDP 1433 も使用するという記述を見かけたが、netstat -an してもそのポートで listen している様子はなかった。ネットワーク管理者には使用するポートを届け出なければならないので、引き続き調査が必要。

以下のページに書かれていた。
[INF] ファイアウォール経由での SQL Server との通信に必要な TCP ポート
http://support.microsoft.com/default.aspx?scid=kb;JA;287932
SQL Server は、ソケット ネットワーク ライブラリを使用して TCP/IP 上で通信する Winsock アプリケーションです。SQL Server は特定のポートで接続要求を待ち受けます。SQL Server 用のデフォルトのポートは 1433 です。SQL Server 用のポートは 1433 である必要はありませんが、1433 は SQL Server の公式の IANA (Internet Assigned Number Authority) ソケット番号です。

UDP 1434 はサーバ名などの情報を送るために使っている模様。
さらに、SQL Server 2000 の名前付きインスタンスは、デフォルトでは、動的な送信先ポートを使用します。このポートは、ファイアウォールを構成する前に、固定ポートに変更する必要があります。送信先ポートを構成するには、SQL Server ネットワーク ユーティリティを使用します。SQL Server ネットワーク ユーティリティの使用方法の詳細については、SQL Server Books Online を参照してください。

さもなければ、クライアント コンピュータはランダムな UDP ポートを開く必要があります。そして、サーバーは UDP ポート 1434 を使用して、インスタンス名を送信します。インスタンスがクラスタ化されている場合、SQL インスタンスのバージョン、インスタンスが受信待ちしている TCP ポート番号、およびインスタンスが使用している名前付きパイプを送信します。ただし、ファイアウォールで開くポート番号を最小限にすることが目的の場合は、デフォルトのインスタンスおよびすべての名前付きインスタンスで使用する静的なポート番号を選択する必要があります。クライアント コンピュータは、特定の ServerName または ServerName インスタンスおよび固定のポート番号に接続するように構成する必要があります。

2003-06-08 (Sun)

* ロボット避け meta 要素 <meta name="robots" content="noindex,nofollow">

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [HTML]

ロボット避け。

- meta 要素でロボット避け

いわゆるメタタグロボット避け。

HTML Author's Guide to the Robots META tag.
http://www.robotstxt.org/wc/meta-user.html
Some examples:

<meta name="robots" content="index,follow">
<meta name="robots" content="noindex,follow">
<meta name="robots" content="index,nofollow">
<meta name="robots" content="noindex,nofollow">

Note the "robots" name of the tag and the content are case insensitive.

name と content の中身は case-insensitive。つまり、大文字小文字を区別しない。

- robots.txt でロボット避け

html に埋め込む meta 要素じゃなくて robtos.txt でサーバ全体を設定できる。

A Standard for Robot Exclusion
http://www.robotstxt.org/wc/norobots.html
robots.txt によるロボット除けの解説。

- ロボット避け? ロボット除け?

「避け」の表記には「ロボット避け」と「ロボット除け」の二種類あるけど、どっちが主流なんだろう? どっちも読み方は「ろぼっとよけ」で良いんだよね? 「ろぼっとさけ」って呼んでる例は聞いたことないし。

2003-06-07 (Sat)

* 2ちゃんねるの過去ログの html 化はもうやらない?

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [2ch]

2ちゃんにまつわる重要連絡ver4.6

104 :あなたのうしろに名無しさんが・・・ :03/06/05 20:09
過去ログのhtml化をもうすこしすすめて欲しいです。


105 :(・∀・∀・)ヌッヘッホー ◆5VPd6kqpDI :03/06/05 23:53
それについては、残念ですがこんなお話が・・・。

html化するのが遅すぎるぞ・・・・・
http://qb.2ch.net/test/read.cgi/accuse/1054699848/

3 名前: KC-130@マァヴ ◆jxAYUMI09s saitamasaitama@saita.ma 投稿日:03/06/04 13:12 ID:pZfVjUP8
>1
つかhtml化はおおむね終了しました(^_^;)

10 名前: KC-130@マァヴ ◆jxAYUMI09s saitamasaitama@saita.ma 投稿日:03/06/04 13:27 ID:pZfVjUP8
>8
正解(^_^;)
全板セミさんコースということになってるみたいです。
――――――――――――――――――――
セミさんコースというのは、過去ログ化を定期的にせず、七年の間にはなんとか・・・というコース。
つまり、ほとんど過去ログhtml化は行なわれないって事なんですねー。



106 :(・∀・∀・)ヌッヘッホー ◆5VPd6kqpDI :03/06/05 23:58
で、対策としては三つ程あります。

1、●を買う。

http://2ch.tora3.net/

2、isp.2ch.netの過去ログ閲覧機能を使う。

http://isp.2ch.net/

3、有志によるhtml化スレの利用

読めないdat落ちスレのミラー作ります [18](ガイドライン板)
http://that.2ch.net/test/read.cgi/gline/1054143437/
dat落ちしてスレが見れないときは(カレーマニアさんとこ)
http://jbbs.shitaraba.com/movie/bbs/read.cgi?BBS=1413&KEY=1029382314

まあ、どれを選ぶかは各人の判断ですが、●を買ってあげると夜勤さんが喜んで
鯖が強化されますから、お金に余裕のある人は●を買えばいいんじゃないかと。

2003-06-06 (Fri)

* ファイルの内容が変わっていなかったらスクリプトを実行しない

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [シェルスクリプト]

ChangeLog の md5 をチェックし、変わっていなかったら exit するようにした。
2003-05-26 に書いた、/home/hiroaki/backup/changelog が変化のない同じファイルで溢れるという事態もこれで解決するだろう。

# compare previous log with current log
LOG_HASH=`/usr/bin/md5sum $LOG_PATH |perl -na -e 'print @F[0]'`
PREVIOUS_LOG_HASH=`/usr/bin/md5sum $PREVIOUS_LOG_PATH |perl -na -e 'print @F[0]'`
if [ $LOG_HASH == $PREVIOUS_LOG_HASH ]; then
  exit 1
fi

* 実行時間が100000分を超えたプロセスは top でどう表示されるのか

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

- sonic で動かしている seti が、いつの間にか CPU 時間100000分を超えたようだ。

以前は分単位だった実行時間表示が、時間単位になっていた。
99999時間を超えると、日単位になるのだろうか?
99999日を超えると、月単位になるのだろうか?
99999月を超えると、(以下略)。
ソースを見ればどう表示されるのかなんて丸わかりだが、それじゃあ野暮だ。

$ date
Fri Jun  6 14:16:43 JST 2003

$ top
  2:16pm  up 83 days, 19:37,  1 user,  load average: 1.00, 1.00, 1.00
34 processes: 32 sleeping, 2 running, 0 zombie, 0 stopped
CPU states:  0.8% user,  6.0% system, 93.0% nice,  0.0% idle
Mem:    65128K av,  61080K used,    4048K free,      0K shrd,  10604K buff
Swap:  257032K av,    1644K used,  255388K free                  17960K cached

  PID USER    PRI  NI PAGEIN  SIZE SWAP  RSS SHARE LC STAT %CPU %MEM  TIME COMMAND
7747 hiroaki  20  19 115933 15816  40  15M  404  0 R N  86.0 24.2  1677h setiathome

$ ps -auxww |grep seti
hiroaki  7747 95.5 24.2 17388 15776 ?      RN  Mar25 100513:53 /home/hiroaki/dist/setiathome-3.03.i386-pc-linux-gnu-gnulibc2.1/setiathome -proxy 172.16.4.1:17241

* UPSERT / MERGE するトリガ MS SQL Server 2000版

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [SQL] [MS SQL Server]

2003-06-03 のトリガは、もっと簡潔に書けることに気づいた。環境は MS SQL Server 2000。

- 冗長版

GO
DROP TRIGGER log_transaction_ao;
GO
CREATE TRIGGER log_transaction_ao ON users FOR INSERT, UPDATE AS
BEGIN
  INSERT INTO users_log SELECT * FROM inserted
  IF (SELECT COUNT(*) FROM inserted WHERE commit_master = 1) > 0 BEGIN
    DECLARE @user_cd VARCHAR(5)
    SELECT @user_cd = user_cd FROM deleted
    IF (@user_cd IS NOT NULL)  BEGIN
      DELETE FROM user_master WHERE user_cd = @user_cd
    END
    INSERT INTO user_master SELECT * FROM inserted
  END
END

- 簡潔版

GO
DROP TRIGGER log_transaction_users;
GO
CREATE TRIGGER log_transaction_users ON ao FOR INSERT, UPDATE AS
BEGIN
  INSERT INTO user_log SELECT * FROM inserted
  IF (SELECT COUNT(*) FROM inserted WHERE commit_master = 1) > 0 BEGIN
    DELETE FROM user_master WHERE user_cd IN (SELECT user_cd FROM deleted)
    INSERT INTO user_master SELECT * FROM inserted
  END
END

2003-06-05 (Thu)

* マシン間のディレクトリの同期を取る

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

unix だったら rsync でも mirror でもよりどりみどり。
問題は MS Windows だ。
共有フォルダとかオフラインフォルダとかブリーフケースなどが用意されているようだが、基本的にクライアント用の機能で、サーバで使うのは信頼性に欠ける。
rsync は Windows 版がないようだ。mirror は perl で書かれているので、動きそうな予感。

今回は MS Windows 環境でディレクトリの同期をとらなければならないので、mirror を使うことにした。

- 参考

ミラーリングがしたい〜mirror編〜
http://www.itmedia.co.jp/help/tips/linux/l0518.html

mirrorをWeb pageの更新に使う
http://www.atikoro.org/~iyoda/mirror.html

- mirror をミラーしているサイト

http://sunsite.tus.ac.jp/pub/archives/packages/mirror/
ftp://sunsite.tus.ac.jp/pub/archives/packages/mirror/mirror. ...

- 環境

テストに使った ActivePerl の環境は以下の通り。
ActivePerl v5.6.1 built for MSWin32-x86-multi-thread build 633 Built 21:33:05 Jun 17 2002

- mirror_defaults のサンプル。

サーバが IIS 5.0 なので、remote_fs=dosish を指定する。
また、ActivePerl では getgrnam() が実装されていないので、group を指定すると動作しない。
group を指定しなくても、今のところ不具合は無い。
mail_to も windows 環境では動作しないとマニュアルに書いてあったので指定していない。

package=distserver
site=10.38.81.89
local_dir=/home/Administrator/mirror
remote_user=anonymous
remote_password=example@example.com
remote_dir=/mirror_test
get_file=true
dir_mode=0755
file_mode=0644
remote_fs=dosish

- 2004年10月28日追記

高機能 ftp クライアント lftp も同期に使える。2004-05-08 の「lftp を使った ftp ミラーリングと便利機能」を参照。

2003-06-04 (Wed)

* Perl one liner 集 perl 1行野郎

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

- one liner、日本語で言うと一行野郎

いわゆる一行スクリプトを解説したページ。
昔はよく参照してたが、google をいくら探しても見つからない。
仕方がないので、ここに転載しておく。

- Internet Archive で見つけた。

「perl でいいよ」 というページの一コーナーだったようだ。
http://web.archive.org/web/20020214191434/http://www13.cds.n ...

ところで、なんで -a でスプリットされた変数へは @F[n] でアクセスするんだろう?
たまに中身がリファレンスだったりすることがあるし、よくわからん。
-w を付けると、$F[n] にしなさい、と言われるし。

●標準perlだけで使える1行野郎

[置き換え]
すべてのcのファイル中のfooをbarに置き換える。
bakでバックアップ付き
\bは単語の区切り
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c

それぞれのファイルに含まれる数値を1増やしてセーブします
bakでバックアップ付
perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 ....

改行コードを0D0A から 0Aに変換します
perl  -pe  's/\015\012/\012/g' file

改行コードを0A から 0D0Aに変換します
perl  -pe  's/\012/\015\012/g' file



[部分的な取り出し]
スペースで区切られたフィールドの最初から4番目までと6番目を表示
perl -lane 'print "@F[0..4] $F[6]"' file

コロンで区切られたフィールドの最初から4番目までを表示
perl -F: -lane  'print "@F[0..4]\n"' /etc/passwd

STARTとENDに挟まれた部分を表示
perl -ne 'print if /^START$/ .. /^END$/' file

STARTとENDに挟まれた部分以外を表示
perl -ne 'print unless /^START$/ .. /^END$/' file

最初の50行を表示
perl -pe 'exit if $. > 50' file

最初の10行を表示しない
perl  -ne 'print unless 1 .. 10' file

15 から 17 行目だけを表示
perl -ne 'print if 15 .. 17' file

各行の80文字以降を捨てる
perl -lne 'print substr($_, 0, 80) = ""' file

各行の最初の10文字を捨てる
perl -lne 'print substr($_, 10) = ""' file



[よりよいgrep]
commentという文字列が含まれている行を表示
perl -ne 'print if /comment/' duptext
commentという文字列が含まれていない行を表示
perl -ne 'print if /comment/' duptext

commentまたはappleという文字列が含まれている行を表示
perl -ne 'print if /comment/ || /apple/' duptext

commentまたはappleという文字列が含まれている行を表示
perl -ne 'print if /comment/ || /apple/' duptext

commentとappleの両方の文字列が含まれている行を表示
perl -ne 'print if /comment/ || /apple/' duptext

commentという文字列が含まれている行とファイル名を表示
findと一緒に使うと便利
perl -ne 'print "$ARGV:$_" if /comment/' file1 file2 file3 ...

intにだけ一致する(printには一致しない)grep
perl -ne 'print if /\bint\b/' test.txt

port0からport9までの10個の単語に一致する
perl -ne 'print if /\bport\d\b/' test.txt

port0からport9999などといった数字が末尾につく単語に一致する
perl -ne 'print if /\bport\d+\b/' test.txt



[フィールド間の演算]
最初のフィールドと最後から2番目のフィールドを合計する
perl -lane 'print $F[0] + $F[-2]'



[ソート]
ファイルを行単位でソートします
perl  -e 'print sort <>' file

ファイルをパラグラフ単位でソートします
perl  -00 -e 'print sort <>' file

複数ファイルをファイル毎比較してソートしてから1本のファイルとして表示し
ます
perl  -0777 -e 'print sort <>' file1 file2



[反転]
あたえられたファイルを行単位でひっくり返します
perl -e 'print reverse <>' file1

ファイルを文字単位ですべてひっくり返します
perl -0777e 'print scalar reverse <>' f1 f2 f3 ...

ファイルをパラグラフ単位でひっくり返します
perl -00 -e 'print reverse <>' file1 file2 file3 ....

1行の中で文字単位でひっくり返します
perl -nle 'print scalar reverse $_' file1 file2 file3 ....

辞書から回文を探します。残念ながら日本語には対応していません
perl -lne 'print if $_ eq reverse' /usr/dict/words

ファイル中に2回以上連続して現れる単語があれば、そのうちの1個を表示しま

perl -0777 -ne 'print "$.: doubled $1\n" while /\b(\w+)\b\s+\b\1\b/gi'



[数値変換]
入力された10進数を16進数に変換して表示します。CTRL-Cで終了
perl  -ne  'printf "%x\n",$_'

入力された10進数を8進数に変換して表示します。CTRL-Cで終了
perl  -ne  'printf "%o\n",$_'

入力された16進数を10進数に変換して表示します。CTRL-Cで終了
perl -ne 'print  hex($_)."\n"'

入力された8進数を10進数に変換して表示します。CTRL-Cで終了
perl -ne 'print  oct($_)."\n"'

簡易電卓として計算できます。CTRL-Cで終了
perl -ne 'print  eval($_)."\n"'



●-Mは反則だろう。でも便利。モジュールな1行野郎

http://www.yahoo.co.jp/のページのソースを表示
perl -MLWP::UserAgent -e 'LWP::UserAgent->new->request(HTTP::Request->new('GET',$ARGV[0]),sub{print $_[0];});' http://www.yahoo.co.jp/

引数で指定したところからすべてのファイルを見つけて表示します
perl -MFile::Find -le 'find {wanted=>sub {print;}},$ARGV[0]'

カレントディレクトリからすべての拡張子plファイルを見つけて表示します
perl -MFile::Find -le 'find {wanted=>sub {print if /\.pl$/;}},$ARGV[0]'

ディレクトリを作ります。mkdirと違って深い階層を一度に作ることができま
す。
perl -MFile::Path -e 'mkpath([@ARGV],1,0777)' test/tmp1 test2/tmp2

Base64でエンコードします
perl -MMIME::Base64 -ne 'print &MIME::Base64::encode_base64( $_)' file

Base64でエンコードされたfileをデコードします
perl -MMIME::Base64 -ne 'print &MIME::Base64::decode_base64( $_)' file

Quoted-Printable でエンコードします(参照 RFC 2045 )
perl -MMIME::QuotedPrint -ne 'print &MIME::QuotedPrint::encode_qp( $_)' file

指定されたページを取ってきて表示します。
perl -MLWP::Simple -e 'getprint "http://www.foo.bar.com/";

ftpでファイルをダウンロードします。
perl -MLWP::Simple -e 'getstore "ftp://ftp.sunet.se/pub/lang/perl/CPAN/src/latest.tar.gz","perl.tar.gz"'

httpドキュメントのミラーリング
perl -MLWP::Simple -e 'mirror("http://www.perl.com/", "perl.html");'



●一行野郎のためのオプション解説

-0数字(8 進数)
レコードセパレータ ($/) を 8 進数で示します。デフォルトセパレーターは改
行です

-00
パラグラフモードにします。パラグラフとは連続した改行で区切られる
文の固まりです

-0777 セパレーターを無効にします。すなわちファイル全体が1パラグラフにな
ります

-a 自動splitモード
  配列 @F = split(' ');
  区切り文字は-Fで指定可能
  デフォルトは1文字スペース

-e
1行野郎のキーワード
コマンドラインにあたえられた文字列をperlのプログラムとして実行します
複数の-eを使うこともできますがセミコロンが必要

-i拡張子
.bakなどを指定することで、個々のファイルのバックアップを取って上書きし
ます。

-l数字(8 進数)
自動chomp
出力時に数字(8 進数)を改行コードに置き換える。


-n
自動ループ
  while (<>) {
          ... # ここでスクリプトが実行される
  }


-p
自動ループprint付
  while (<>) {
          ... # ここでスクリプトが実行される

  }

組み合わせ

-na -F正規表現
  while (<>) {
        @F=split(/正規表現/);
          ... # ここでスクリプトが実行される
  }

-pa -F正規表現
  while (<>) {
        @F=split(/正規表現/);
          ... # ここでスクリプトが実行される
        print ;
  }

- IBM developerWorks の Perl One liner 特集

洗練されたPerl: ワンライナー101 と ワンライナー102
http://www-6.ibm.com/jp/developerworks/linux/010706/j_l-p101 ...
http://www-6.ibm.com/jp/developerworks/linux/030523/j_l-p102 ...

- 速習 Perl: 1行スクリプト

http://infosys.gsid.nagoya-u.ac.jp/~ohna/perl_lesson/intro2p ...

2003-06-03 (Tue)

* 配色とデザインが秀逸な ximian のサイト

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [メモ]

背景は白、本文や見出しはブルーが基調。読みやすく、一覧性が高い。
http://www.ximian.com/

* トリガによるデータのハンドリング

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [SQL] [MS SQL Server]

- トリガを使うことで、INSERT/UPDATE 文を複数のテーブルにそのまま反映させることができる。


- 「ユーザが入力した内容の履歴を取りたい」というリクエストを受けた。本番のテーブルへ投げられたクエリと同じクエリを別途用意したログ用のテーブルに追記していく、というやり方で実現できるだろう。

また、マネージャからは、「プログラム側で複数のテーブルに SQL を投げるのはやらせたくない。欠落したりするおそれがある。何か仕組みを作れないか考えてみてくれ。」とも言われている。

- 解決策

ワーク用テーブルとマスターテーブルとログ用テーブルを用意する。
ログ用テーブルのテーブル定義は、マスターテーブルと基本的に同じだが、
ユニーク制約、参照整合性制約などは指定しないようにする。
本番用テーブルに以下のような INSERT/UPDATE トリガをセットする。
OLD 特殊テーブルを参照し、その内容をログ用テーブルに INSERT する。

MS SQL Server では、OLD テーブルは inserted と呼ばれている。
postgres などとは名前が違うだけで、機能は変わらないようだ。
ただ、Postgres はトリガの発動タイミングを指定できるが、
MS SQL Server 2000 では指定できない。トリガが発動するのは、制約チェックなどの後だけだ。
・・・と思ったら、MS SQL Server 2000 にも事前に発動するトリガがあるそうな。
INSTEAD OF トリガというもので、従来の事後発動トリガは AFTER トリガと呼ぶとのこと。

- サンプル

-- log テーブルへは無条件に INSERT する。
-- master テーブルへは、commit_master カラムが1の時のみ DELETE & INSERT する。
INSERT INTO user_master SELECT * FROM inserted では、inserted が複数レコードでもすべて INSERT してくれる。
DROP TRIGGER log_transaction_user;
CREATE TRIGGER log_transaction_user ON user FOR INSERT, UPDATE AS
BEGIN
  INSERT INTO user_log SELECT * FROM inserted
  IF (SELECT COUNT(*) FROM inserted WHERE commit_master = 1) > 0 BEGIN
    DECLARE @user_cd VARCHAR(5)
    SELECT @user_cd = user_cd FROM inserted
    DELETE FROM user_master WHERE user_cd = @user_cd
    INSERT INTO user_master SELECT * FROM inserted
  END
END

* /etc/cron.hourly にあるスクリプトが実行されたときに、

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Linux]

メールを送信させない
[analog-jp:01351] Re: root 宛てのメールの停止方法
http://jp.analog.cx/ml/archive/200209.month/1351.html
ここではなく、各cron.daily等のディレクトリ中に入っている
各実行ファイル内につけます。例えば、/etc/cron.daily/中に
あるslocate.cronは、以下のような使い方をしています。

2003-06-02 (Mon)

* デリミタで区切られたフィールドの任意の場所を表示

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Perl]

タブやカンマ区切りのテキストの、任意の場所を表示する Perl One liner。

- デリミタがカンマで n = 5のとき

$ perl -F, -lane  'print "$F[0..4]"' data.csv

- オプションの説明:

-F デリミタの指定。デフォルトはスペース。-F, でカンマをデリミタにする。
-a デリミタで split を実行し、配列 F に格納する。
-n 自動ループ。以下を参照。
while (<>) {
  ... # ここでスクリプトが実行される
}


すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。