FC2ブログ

char

K&Rの最初の頃からもう語りつくされてはいるんだが、
Cにおける最小の単位はByteであり、charは1Byteである。
ただし、1Byteのbit数は処理系(機種)依存であり、実際に1Byte=7bitや、4bit、あるいは24bitなんてマシンも存在した。(する?)

そこでlimits.hの出番ですよ。
#define    CHAR_BIT    8

なんてのが、/usr/include/limits.hあたりにあるはずなので参照されたし。

というような単純な話なんだが、あれこれ尾ひれは付くもので。
sizeof(char)
なんて記述が探してみると結構出てくる。
1Byte=8bitとは限らないという話が、charは1Byteとは限らないようになっちゃったんだろうか。

黙って1と書け
スポンサーサイト



Serialize(Marshalling)

MFCのCObjectにはSerialize関数が存在することから、最近はもっぱらSerializeの方が通りが良くって使っているんだが、一昔前はMarshallingと言っていた。(某所で指摘があってやっと思い出した。)

データ構造やオブジェクトとして内部で保持している情報を、ファイルや通信ストリームに乗せるために直列化する作業のことを指す。

閉じた世界での業務系システムでは、ユーザ定義型などをそのままファイル出力してしまうケースが多いのだが、ここはレイアウトをきちっと決めてそれに合わせて出力するのが本来の姿。

一般には、数値も含め全てASCII(JIS)形式で出力し、
  • 予め決められた各項目の幅で出力
  • 項目間のデリミタを決め、name=value形式で羅列
  • XMLなどのテキスト形式でデータ構造を表現できる文字列
を利用することとなる。

数値についてはIEEEである程度取り決めがあるので、エンディアンの決めを作るか、UnicodeのようにBOMを付けるかすれば、ASCIIで書式化する事もないが、無駄な規約を増やすよりは、
ネットワーク上は常にBigEndianとするか、やはりASCIIでの書式化が確かだろう。

ファイル出力の場合は、[型][サイズ][データ]...のように属性を各データの前に持たせるスタイルをとるアプリケーションも多い。

また複雑なデータ構造をとる場合や、複数オブジェクトと関わるオブジェクトの場合は、シリアライズのコストも考慮した出力形式を考える必要がある。(当然シリアライズしたからには入力~デシリアライズ~も必要なわけなので、データ構造の再構築もしなければならない)

特に昨今の業務系システムでは、WebAPスタイルのシステムも必ず絡んでくるので、シリアライズにはもうちょっと気を使って欲しいもんだ。

んー、言いたいことが特に無いのに書き始めたので、とりとめが無くなってるんだが、とりあえず、マーシャリングという言葉を思い出した、ってことで備忘録。(^^;

可変長配列

C99からのように思うんだが、可変長配列が使える。
ただ、未だにK&Rが名残っている業務系のプログラムではなかなか使う勇気が出なく。

でも実は今回は目立たないようにこそっと入れた事は内緒にしておいてください。

ここで可変長配列と言っているのは、そもそもこんなやつの場合には、
void foo(int n) {    // (0 < n < 128)
    char buf[128];    // コンパイル時には決定していなければならなかった
    memset(buf, '*', n);
    buf[n] = '\0';
    puts(buf);
}

十分大きな幅をとるか、あるいは動的にallocateするか、ってのが常道だったんだが、チェックが不足して脆弱性に繋がったりもする。
void foo(int n) {    // (0 < n < そこそこまで)
    char buf[n + 1];
    memset(buf, '*', n);
    buf[n] = '\0';
    puts(buf);
}

これがこう書けるだけでもかなり楽。
ユーザ定義型ではもちろん使えないし、オート変数しか使えないという制限はあるにせよ、局所変数を多用する向きにはなんとも重宝なもの。

しかしこういう便利ものが、便利ものという意識を持たずに使われるとこれまたバグの温床になってしまうのも事実なんだなぁ...

FreeBSD 6.2 Release

FreeBSD 6.2 Releaseが 2007/01/15に公開された。

FreeBSD 6.2-RELEASE アナウンス(英語)
freebsd-logo-red.jpg


5.5を入れよう入れようと思っているうちに一気に6.2。
進みが遅いと非難されがちな FreeBSDプロジェクトだが、ここんところ頑張っているようで。(うちはまだ5.4...)

6.2になってさて何が、ってのはまだ英語が良く読めていないのだけれど、ドライバの充実はもちろん、数々のUpdateがきちんとなされているようだ。

スタンドアロンのデスクトップで使うならLinuxだろうけれど、個人的にせよサーバ用途なら文句なくFreeBSDですよ、皆の衆。

いや、ただ好きだっちうだけなんだけどね。

温故知新

古い自作ツールを見っけたので、XPのDOS窓で起動させたらちゃんと動いた。(・・;WAGPV03
ローカルなパソコン通信用のログビューアだったんだけど、作成が1995/11。Win95が出るちょっと前か...
NEC-PC98用のTurbo C/C++だったので、DOS/V用のコンソール用のファンクションを全部手作りしたんだなぁ。
標準出力のエスケープシーケンスだともたもたし過ぎってのもあったんだけど、Int21ファンクションでガシガシってのは若かったんだな。


ちうか、cmd.exeってなぁ偉いね、16bitアプリでもちゃんとcommand.com呼ぶんだね。(って当たり前なんだが、実際動くとおぉぉと思う(^^;)

2ch終焉?

OS/2に合わせたわけでは全く無いだろうが、あれやこれやで。
2ch 差し押さえ
事の真偽にも、差押さえ対象がドメインであることも、どうでもいいんだが、2ちゃんねるでの反応が過去の閉鎖騒ぎと異なっているのがちょっと面白い。

まぁ細かい事はあちこちで見てもらう事として。
今回はやけにもぉいいんじゃね?というニュアンスの書き込みが多いように思う。
ひろゆきの「疲れた」発言の真意はわからんけども、ユーザの中には確かに「飽きた」感が存在する。
なんせ巨大掲示板だから板毎に全く異なる性質を持つのだけれども、ブログやSNSにYouTube等新しいモノが次々と出る中で、スレッドタイプの匿名掲示板は今の状態ではそれほど魅力的ではなくなってきたんだろう。
まとめサイトも現状維持の援護射撃になるまでは行かず、この先失速するのかも。ユーザが離れるのは早いからねぇ。

そーいや2chの韓国出店の件はどうなったんだろな。

とかいいながら2ch巡りやってる場合じゃねぇよ!>俺

8VT880-L

どこかに書いて置かないと忘れそうなので。

今メインで使ってるのは、Gigabyte社製の8VT880-L
GA-8VT880-L


これにCeleron 2.6GHzを載せて使ってるわけなんだが、今の所何の不自由もなく。
まー、そろそろCore 2 Duoも欲しいんだが、カード類を没収されている身ではなんともならず...

OS/2 終焉

スラドを見て初めて知ったが、OS/2 Warpがとうとう終了らしい。

IBM OS/2 Warp - Japan
http://www-06.ibm.com/jp/pspjinfo/os2/

我が家でも一時OS/2を入れて使っていた頃があるが、あれはいつ頃だったかな...
確かWindowsが3.1になったあたりかな、OS/2 2.1が出て、ボコボコオチまくりだったWin16アプリがしっかり動くってことで、CADソフトなんかを入れて使ってたような気がする。

安定したマルチタスクで、その頃の486DXくらいでもサクサク動くのがとっても良かったのだけれども、実務の殆どはPC-DOS/V上での作業だったので、それほど使い込んだわけでもなく、Win95/NT4あたりの登場以降はその存在さへ忘れていた。

ただ今考えると、当時業務システムを構築するとしたら、OS/2が一番手だったかもしれない。
3.51以前のWinNTなんて使えるようなものではないし、ネットワーク主体のWindows for Workgroups(3.11)には日本語版が無かったし。
んー、なんか記憶があやふや過ぎて、前後関係がおかしな話になってきたか...

まぁ無くなると聞くととっても寂しい気持ちにはなるんだが、無くならなかったら使うか、と聞かれると使いはしないわけで。
プロフィール

f_yamaki

Author:f_yamaki

アクセスカウンタ
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク