miau's blog?

«Prev | 1 | 2 | 3 | ...| 50 | 51 | 52 | 53 | Next»

2004年 4月 15日 (木曜日)

ActivePerl + 日本語

- Perl on miau's blog?
先日は結局解決しなかったので、再度調べてみる。

要件としては
・Shift-JIS のファイルを 入力/出力したい
・Perl スクリプト自体は Shift-JIS が望ましいが、無理なら EUC でも UTF-8 でも構わない
という状態で。

とりあえずスクリプトに "ー" が含まれるような場合に正しく動作させたければスクリプトを EUC か UTF-8 にすれば良いらしい。
さて、この状態で Shift-JIS が扱えるかだ。

Shift-JISテキストを正しく扱う

ああ。Jcode.pm とかで変換かければいいのかな。ということで、

Jcode.pmをWindows 2000でコンパイルする

から Jcode.pm を DL してさくっと導入。


# shift-jis 対策
use jcode;

open IN, "<$filename" or die $!;
@lines = ;
close IN;

foreach $line (@lines){
Jcode::convert(\$line, "euc");
}

open OUT, ">$filename.euc" or die $!;
print OUT @lines;
close OUT;

# 本処理
use encoding "euc-jp";

とかやってみるけど、やっぱりうまくいかない。

Perl 5.8 Documentation - perljp - 日本語 Perl ガイド

見て、
open (IN, "<:encoding(shiftjis)", "$filename");

とかできそうな気がして実験。失敗。

・・・と思いきや、ただのコーディングミスと判明。
最後に書いた方法でよさげ。
22:03:04 - miau - No comments - No Trackbacks - Permalink

風邪

- Work on miau's blog?
先週末に風邪ひいて連泊記録は1ヶ月ほどで終了。
ちなみに風邪ひいた原因は・・・もちろん無茶な生活で抵抗力が落ちてたんだろうけど、それ以上に会社の空調に問題が。

夕方になるとむぁっと暑くなる→薄着になる→夜中になると次第に冷える(この時は疲れ果てて睡眠中)

というのを繰り返した結果ではないかと。
21:49:18 - miau - No comments - No Trackbacks - Permalink

2004年 4月 09日 (金曜日)

Becky! の通常検索

- Work on miau's blog?
スレッド表示にしている場合。

-hoge
Re: hoge
Re[2]: hoge

となっていた場合は Re: hoge や Re[2]: hoge の中も検索してくれるけど、

+hoge

みたいに折りたたまれてると Re: hoge や Re[2]: hoge は検索対象にならないらしい。

対応策としては
・一時的にスレッド表示を解除して検索
・クエリー検索
のどちらか?
オプション設定からは見つからなかったような。

これまで仕事で「そんなメール届いてないっすよ?」みたいな場面が何度かあったけど、実は検索の仕方が悪かったのかも・・・。
08:27:06 - miau - No comments - No Trackbacks - Permalink

2004年 4月 08日 (木曜日)

DECIMAL

- Work on miau's blog?
同僚が作ったプログラムで怪しげな処理を見かけたのでちょっと確認。

怪しげな処理っていうのは、DECIMAL のフィールドを比較処理。
(1) VB の ADODB.RecordSet で DECIMAL 型のフィールドを普通に取得
(2) CStr$() で文字列に変換
(3) 文字列の比較
とかやってて。それだと 11 < 2 とか評価されちゃうのでは?と思ったわけで。

とりあえず DB2 で試してみた。
db2 => CREATE TABLE TEST (ID DECIMAL(10))


db2 => select id, cast(id as char(12)) from test

ID 2
------------ ------------
0. 0000000000.
1. 0000000001.
2. 0000000002.
10. 0000000010.
-1. -0000000001.
-2. -0000000002.

6 レコードが選択されました。

あれ。CAST した場合は 0 でパディングされるのね。
ということは、場合によっては文字列に変換後でも問題ないんだろうな。
ま、一応確認。

db2 => select id, cast(id as char(12)) from test order by 1

ID 2
------------ ------------
-2. -0000000002.
-1. -0000000001.
0. 0000000000.
1. 0000000001.
2. 0000000002.
10. 0000000010.

6 レコードが選択されました。

CHAR にキャストした後も↑みたいな大小関係があればいいんだけど・・・

db2 => select id, cast(id as char(12)) from test order by 2

ID 2
------------ ------------
-1. -0000000001.
-2. -0000000002.
0. 0000000000.
1. 0000000001.
2. 0000000002.
10. 0000000010.

6 レコードが選択されました。

やっぱりダメでした。
負数は代償関係が逆になってしまいますね。
この方法での比較は フィールド値 > 0 が保証されている場合のみ有効、と。


で・・・ふと自分の PC に SQLServer がインストールされているのを思い出し、この環境でも試してみた。

1> select id, cast(id as char(10)) from test
2> go
id
------------ ----------
0 0
1 1
2 2
10 10
-1 -1
-2 -2

(6 件処理されました)

おー、これこれ。当初は CAST したらこう(0 埋めされず、左寄せに)なると思ってたんだよね。
ということは・・・。

1> select id, cast(id as char(10)) from test order by 1
2> go
id
------------ ----------
-2 -2
-1 -1
0 0
1 1
2 2
10 10
(6 件処理されました)

これはまぁ当然の結果として・・・

1> select id, cast(id as char(10)) from test order by 2
2> go
id
------------ ----------
0 0
1 1
-1 -1
10 10
2 2
-2 -2

(6 件処理されました)

こうな・・・る・・・あれ?
負号の位置が予想と違う・・・。
・・・まぁ SQLServer の照合順序って結構特殊だし、こんなもんかも。


なんか環境によって色々違いそうなので、結局 VB も試してみることに。
同僚がやってたように、CAST は行わず、CStr$() による変換。
    Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset

cnn.Open "dsn=hoge;uid=hoge;pwd=hoge;"

Set rs = cnn.Execute("SELECT ID FROM TEST")
Do While rs.EOF = False
Debug.Print "[" & CStr$(rs.Fields(0)) & "]"
rs.MoveNext
Loop

cnn.Close

超手抜きコード。さて、結果は・・・

[0]
[1]
[2]
[10]
[-1]
[-2]

どうやら左寄せの文字列になってしまう模様。やっぱダメじゃん。


ということで、結論。
INTEGER とかに収まりきらない DECIMAL はできるだけ DB 上で比較しましょう、と。
22:09:14 - miau - 1 comment - No Trackbacks - Permalink

2004年 4月 07日 (水曜日)

ActivePerl + 日本語

- Perl on miau's blog?
ActivePerl の正規表現周りで日本語使うとうまく処理できないことがある。
"ー" のように2バイト目が "[" になっているものなんかがそうで。

Perl-5.8 MEMO - 日本語を含むスクリプトを書く

に対応策が載っていたけど。やってみるとアプリケーションが落ちたり。

jperlですな

こういうことやんないとだめですか?
16:13:20 - miau - No comments - No Trackbacks - Permalink

SELECT 文 で NULL

- Work on miau's blog?
SELECT 文で NULL をベタ書きすると、エラーになってしまう。
(とりあえず DB2 でのお話。今ほかの DBMS 環境ないので。)

db2 => SELECT ID, VALUE, NULL FROM TEST

SQL0206N 使用されているコンテキストで、"NULL" は無効です。 SQLSTATE=42703

ということで、とりあえず NULLIF で対応。

db2 => SELECT ID, VALUE, NULLIF(0, 0) FROM TEST

ID VALUE 3
------------ ---------- -----------
1. aaa -
2. あああ -

ほかにいい方法ありますかね?

ちなみに、なんで NULL を選択する必要があるのかというと、INSERT INTO 〜 SELECT 〜 を動的に生成していて、条件分岐で NULL を挿入したいから。

char strFormat[] = "INSERT INTO TEST SELECT ID, VALUE, %s FROM TEST WHERE ID=%d";

sprintf(strSql, strFormat, (intSomeFlag) ? ("0") : ("NULLIF(0, 0)"), intId);

EXEC SQL EXECUTE IMMEDIATE :strSql;

あ。ちなみに CHAR やら VARCHAR の列の場合は NULLIF('', '') とかやって型合わせないとダメっぽい。
07:51:28 - miau - 2 comments - No Trackbacks - Permalink

2004年 4月 04日 (日曜日)

const 修飾子

- Work on miau's blog?
今日も出勤とかしてますが。
C の const 修飾子周りでてこずってました。

#include <stdio.h>
#include <string.h>

void move_next(const char **pp)
{
if (IsDBCS(**pp)) {
(*pp) += 2;
} else {
(*pp)++;
}
}

int main()
{
char str[] = "hogeほげ";
char *p = str;

while (*p != '\0') {
if (IsDBCS(**pp)) {
/* なんか処理 */
} else {
*p = toupper(*p);
}
move_next(&p);
}

return 0;
}


これをコンパイルするとエラー発生。
move_next() は const char ** を渡すべきであって char ** は渡しちゃダメなんだそうで。

const char * に char * を代入したりできるから、てっきり上記も OK だと思っていたんだけど。

	const char *q;

:
:

q = p;
move_next(&q);

(これなら文法的には OK。ただここでやりたいことは実現できてない。)

move_next() の宣言から const を外せばいいんですけど。見てのとおり move_next() の中で文字列を操作しているわけじゃないので、気持ち悪い。

んー・・・これって C の仕様がおかしいんじゃないの?
とか思ったけど、よく考えると C++ のオーバーロードとかそのへんに対応するためなのかも。つまり

void move_next(const char **pp);
void move_next(char **pp);


を別の関数として実装できるから、区別できないと困るわけだ。

結局

	move_next((const char**)&q);


とするしかないっぽい。キャストは極力避けたい気もするんだけど、仕方ないか。



(2004/08/29 追記)

すいません。
> よく考えると C++ のオーバーロードとかそのへんに対応するためなのかも。
ってとこ、思いっ切り嘘ついてます。
C FAQ 11.10 参照のこと。

確かにオーバーロード対応だったら
> const char * に char * を代入したりできる
ってのが理屈に合わないですね。
23:16:21 - miau - No comments - No Trackbacks - Permalink

W32.Netsky.Q@mm.enc

- General on miau's blog?
数日前からちらほら届いているのですが。
この環境では感染しないので、とりあえず Becky! で「虫籠」とかそういうフォルダを作ってそこに溜め込んでました。

すると今日いきなり「検疫しました」みたいなメッセージが。
Norton AntiVirus のリアルタイム保護機能らしいけど、いきなりなんで?

と思ったら、HDD の容量足りなくなって「ディスクのクリーンアップ」を実行してたので、その過程にリアルタイム保護が働いたっぽいです。
普通にスキャンしたときは反応しなかったのにリアルタイム保護だと反応するのね。ちょっと不思議。

にしてもログには「状態: 感染」とか書かれててかなり気持ち悪い。他に書きようなかったかなぁ。
03:50:39 - miau - No comments - No Trackbacks - Permalink

2004年 4月 01日 (木曜日)

なんか

- General on miau's blog?
ただの日記になってる記事(?)もありますね。
当初「よくある日記系 blog じゃなくて、技術的にも有用なものが書ければ〜」とか書いてたのに。

でも、これは結構意図的にやってたり。SE の生活っぷりってものが滲み出てそうなので。
08:12:45 - miau - No comments - No Trackbacks - Permalink

2004年 3月 31日 (水曜日)

そういえば

- Work on miau's blog?
昨日は客先(みたいなもの)から直帰して、シャワー浴びたとこで力尽きてしまいました。
家で睡眠とるのは10日ぶりですが、たまには布団で寝たほうがいいみたいです。

起きたら 23:30 とか。まぁ終電で出社して仕事進めてるわけですが。
03:39:26 - miau - No comments - No Trackbacks - Permalink

システム管理者の眠れない夜

- 読了@技術書 on miau's blog?
出版社
Amazon (初版)

SM 対策、2冊目。

評判通り、読み物として面白かったです。
システム管理者って大変なんだなぁ、としみじみしてしまいます。

SM 対策としてどうなのか、ということですが。
私はこの本を読んで「システム管理者像」というものが出来上がったのでかなり良かったと思います。問題を解いていて「あの人だったらどうするかな」と考えれば自ずと正解が見えるものもあったりして。
今後「理想のシステム管理者像」にするために微調整が入るかもしれませんが、やはりベースがあるとずいぶんやりやすいです。お勧め。

余談ですが、Word に画像を貼り付ける際の注意(貼り付け方によって文書サイズがかなり変わる)とか、この本の事例で出てきたり。
以前業務で困らされた問題なんだけど、あの時この本を読んでいれば・・・。
やはり読書(というか情報収集)は大切だなぁとか思いました。

余談その2
ML にも入ってみました。とりあえず。



(2004/06/14 追記)
3/23 のとこにも書きましたが、この「システム管理者像」は SM 試験で問われるものとはたぶん違ってます。
・・・あー、こっぱずかしぃ。
03:18:51 - miau - No comments - No Trackbacks - Permalink

2004年 3月 30日 (火曜日)

Graphviz

- VB6 on miau's blog?
3月19日あたり、VBReport を使って VB のプログラムを解析してたわけだけど。

ツリー形式だと処理の流れはわかりやすいけど、ノード数が膨大になるので処理の概観がわかりにくい。1関数1ノードで、親:子が多:1になれるような図が書ければずいぶんすっきりしそうなもんだけど・・・。

とか考えてたら、友人が教えてくれました。

Graphviz

テキストファイルでリンク状態を定義しておいて、それをビジュアル化してくれるソフト、らしい。
(詳しくは dot user's guide(PDF) あたりを参照のこと)

さてさて、実験開始。
[Read More!]
01:29:53 - miau - No comments - No Trackbacks - Permalink

2004年 3月 28日 (日曜日)

70-292

- Exams on miau's blog?
撃沈してきました。

結局最後の 35 時間も結局寝てばっかで勉強してなかったから仕方ない。
無料バウチャーで緊張感が足りなかったのもまぁ一因だろうけど。

次回受験するときのためにメモでも書いておきます。MCPふりーくの受験記をまとめなおしただけだけども。

Windows Server 2003 技術情報 インデックス
Active Directory や IIS やなんかの新機能はこちらから。


Software Update Services
SUS 自体や、ホワイトペーパー(「Software Update Services の展開」ってやつ)はここから DL。
15:38:27 - miau - No comments - No Trackbacks - Permalink

2004年 3月 27日 (土曜日)

あと35時間で

- General on miau's blog?
70-292 の試験が開始。
でも最近の多忙っぷりは尋常ではなく、まだ一切勉強をやってない状態。
どうやっても受からないとは思うけど、残り 35 時間とりあえずやるだけのことはやっておこう。何か役に立つかもしれないし。

とか思ってるのに仕事関係のメールが入ってくる・・・。
「至急確認お願いします!」ってあなた。
00:56:29 - miau - No comments - No Trackbacks - Permalink

2004年 3月 25日 (木曜日)

JPドメイン管理=JPNIC?

- General on miau's blog?
そういえば「システム管理って〜」を読んでいて気になったんですけど、JP ドメインの管理ってとっくに JPNIC から JPRS に移管してますよねぇ。

JPNICからJPRSへのJPドメイン名登録管理業務の移管について

この本の初版は 2001 年に出てるから仕方ないとしても、最近出た本でも結構平気で「JP ドメインの管理は JPNIC が〜」とか書いてるような。
いずれ情報処理試験で引っかけ問題でも出るかなぁ、とか思ってるんですが。
02:09:59 - miau - No comments - No Trackbacks - Permalink
«Prev | 1 | 2 | 3 | ...| 50 | 51 | 52 | 53 | Next»