2003-08-06

ThinkPadのHDD換装でDisk to Diskリカバリ区画(F11で起動させて初期状態に復帰できる機能)も含めて移行するTipsなんて需要あるかしら。

更新情報

タイムスタンプの更新をアンドゥの対象にしないオプションを追加した、timestamp 1.06を公開しました。アンドゥのたびにカーソルがタイムスタンプの場所に飛んでいくのをうっとうしく思っていた人向け。

Xメンにようこそ(←違う)

2003/07/29(The) ThinkPad日記 – 更新履歴 – Final β Laboratory
http://www.finalbeta.jp/update_log/2003_07.html#log20030729

中村さん(Final β Laboratory)がThinkPad X31を買われたので反応、って遅すぎ。いや、きっと買ったときは周囲のThinkPad使い諸氏にいやというほど助言されまくったりしたろうなあ、とか思って……(いいわけ)。

キャップは、標準で付いていたソフト・ドームを使っています。ほかのものを試してみたのはしばらくこれを使い込んだ後の金曜日だったので単なる刷り込みかもしれませんが、これが一番使いやすいです。

僕も最近全種類買って(笑)試したんですが、やはり刷り込みが大きいのか、結局今まで使っていたクラシック・ドームがいちばん楽、という結論になってしまいました。とはいえこいつは硬いので長時間使っていると確実に指が痛くなるんですよね。そういう意味ではソフト・ドームに慣れたほうが幸せなのかもしれません。ソフト・リムは親指で動かすような位置にあるといいかも、とか思いました。なんかゲームみたいにぐりぐり動かすのにはこれが向いてそうです。

キーボードは打ちやすいといえば打ちやすいんですが、右側記号部分のキーピッチが狭くなっているのは「かな入力」人間としては使いにくいという。うーん、マイノリティかぁ。ってオチなし。

「バリアフリーの扉」でおなじみの(なの?)IBMのマシンが、蓋を開けるのに両手同時使用が必要というのはどうなん……と思いかけて、左右のスイッチを同時に押さなくても片方ずつロックをかけて蓋を開けることに気付きました。お見それ致しました。そういや以前PC系のニュースか何かで読んだな……。

そうなんですが、僕のX24は片方ずつ開けられないんですよ。前に使っていたX20は問題なくできてたし、店頭に置いてあるやつでもできるんで、たぶんラッチ部分の個体差ということなんでしょうが、できるはずなのにできないんですよ(泣)。いや、それだけなんですが。ってここもオチなし。

個人的にはiBookバイオノートZみたいなラッチレスになってほしいです。IBMの人もラッチレスにしたいと言っているのをどこかで読んだような気もするし。

電源ボタンがキーボード上(蓋の内側)にあるのはちょっと悲しい。これはさすがに外付けキーボードでは代用できないし。帰宅してウルトラベースX3にセットして、サスペンドから復帰……というところでいちいち蓋を開けなきゃいけないのは優雅じゃないなあ。

ThinkPad ミニ・ドックみたいなポートリプリケータ系のオプションには電源ボタンも付いてるので閉じたままオン・オフできますが……、って理由があってウルトラベースX3なんですよね。これが不満点になるのはちょっと意外でした。閉じた状態で気づかずにかばんの中でオンになってた、ということが起こらないという意味で個人的には好いほうにとらえていたので。

IN-ME6BKはAirH”カードを挿したままでもすっぽり入って、クッション性もよくて安心です。ただ、フラップが長いので、今までのようにインナーバッグは鞄に入れたまま、フラップを開けてノートだけを取り出す、というのがやりにくくなりました。LAOXにはB5用のフラップタイプはこの二つしかなかったので、暇があったら他の店もいろいろ見てみよう。

(順番が前後しちゃってすみません。)ThinkPad Xシリーズ用のケースとしては、国立商店の「In-Packed」というのがありますよ。黒赤でそれっぽいです。耐衝撃性もそこそこですので候補に加えてみては。

余談ですが、僕はノートPCを運べるよさげなバッグを見つけるとつい買ってしまうという「PCバッグジプシー」だったりします。「デザイン」「機能性」「かばんとしての持ちやすさ」を両立させたものっていうのは、なかなかないんですよね(おすすめのがありましたらみなさんぜひ教えてください)。いっそPCバッグのコーナーでも作ろうか……。

ノートPCしか使わない人の考えるバックアップ

前節の一部だったのですが、ThinkPadばなしというよりは、この機に乗じての一般的なノートパソコン使いこなしメモみたいになってしまったので独立させました。

システムが動いているのと同じディスクにバックアップを作るIBM Rapid Restore PC/Rapid Restore Ultraは、HDDの物理的破損などの事態に対しては何の役にも立たないので、僕も使っていません。Windowsも最近はシステムが不安定で起動しなくなるということは滅多にないので、むしろ本体の破損や盗難、HDDのクラッシュなど(によるデータの損失)のほうが心配になってきました。そうなると自分で作ったデータはどこか物理的に別のディスクに退避させておいたほうがいいだろうと。

今使っている機種(ThinkPad X24)に乗り換えた直後に、それを修理に出さなくてはならなくなって、また以前のマシン(ThinkPad X20)に環境を移行しなおす羽目になったことがありました。データやアプリケーションの数・容量が増えると、バックアップからの復帰や環境の移行にかかる時間も問題になってくるんですよね(というかくたびれます)。

ということで、僕は以前使っていたマシンを家でサーバ的に動かして、そこにデータ(「マイ ドキュメント」や「デスクトップ」上のファイル)を定期的にミラーリングするようにしました。このやり方は、使用しているマシンのシステム状態はバックアップできてないんですが、反面、たとえば出先でノートパソコンが真っ二つになっても(笑)、部屋に戻れば仕事は(ほぼ)即日復帰できます。実際には必要に応じてアプリケーションをインストールしないといけなかったりはしますけども。

ミラーリングには「御鏡」というソフトを使ってます。そういえば、以前某新履歴(2003/01/31(Fri))で公開が中止された「サービスとして動作するフリーのリアルタイムミラーリングツール」なんてのが話題にあがってましたね。(一時サイトがダウンしたことがあるそうなので)最初これかと思いましたが、「御鏡」はシェアウェアなので違いますね。

2003-08-03

プロパティシート上の複数行エディットコントロール(TX-C)

ダイアログでプロパティシートを作成して、そこに複数行表示のエディットコントロールを配置しようとするとうまくいきません。結局VCの掲示板に投げてしまいました。

プロパティシート上の複数行エディットコントロール – 作ろうTX-C
http://www.villagecenter.co.jp/cgi-bin/tx-c.cgi?L=3121&X=1

エディットコントロールにフォーカスがある状態でESCキー押すとプロパティページ全体が真っ白に破棄されるし、そもそもダイアログの初期化じたいもうまくいってないような感じ。以下のようなコードで確認できます。

#include <windows.h>

void main(TX *text)
{
    HDIALOG hdBase = dialog("Test");
    HDIALOG hd = dialog("Page");
    DTRECT r;
    dialogGetPos(hd, &r);
    r.cx = 40 * DTCX;
    r.cy = 8 * DTCY;
    __dialogAddItem(hd, "Edit", "Hello, world.", 100, &r,
        WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL);
    dialogAddPage(hdBase, hd);
    dialogOpen(hdBase);
}
ダイアログ出現時(この時点ですでに変)。
[ダイアログ出現時のスクリーンショット]
ESCキーを押すと真っ白けになる。
[ESCキーを押したときのスクリーンショット]

「ES_MULTILINE」と適当なキーワードを混ぜてググってみたところ、唯一関係あるとおぼしきことを書いてるのがCodeGuruというサイトでのリストビュー(笑)の使い方の解説記事。

ListView Control – Table of Contents
http://www.codeguru.com/listview/multiline_edit_subitems.shtml

(記事のタイトル付けが変なような気もしますがそれはおいとくとして、)掲載されているサンプルコードに “Strange but true:” という前振りで “If the edit control has ES_MULTILINE and ESC is pressed the parent is destroyed if the message is dispatched.” などというコメントが書かれています。もっともこれはリストビューのアイテムの編集についてのVC++によるコーディングを説明している記事なので、あんまり関係ないような気もしますが、ほかに近いことを言っているページが見つからなかったのでいちおうメモ。

さて、TX-CにはdialogEditWzというAPIがあるのになんでエディットコントロールなのかと訝しむ人もいるかもしれませんが、じつは(ES_READONLYと併用して)内容をコピーできる読み取り専用のテキストを付けようとしていたのでした。だめならあきらめてStaticコントロールにすると。

しかし、なんかこのままわかんないのも癪だなあ。

2003-08-01

日記っぽくなってくるというのはこういう感じなのですね。

更新情報

ftpsite 1.01を公開。一度転送に失敗したファイルが次回以降転送対象にならなかったのを修正しました。これらのファイルが再び転送されるようにするにはftpsite-timestamp.txtの該当箇所を手動で削除する必要があります。

WZ5β版延期

Re: WZ EDITOR 5.0の予定 – #2388@βテスト会議室
http://www.villagecenter.co.jp/cgi-bin/wzdev.cgi?L=2388&X=1
昨日の公開を目指していたβ版ですが、ユーザインターフェースの改良をより
深くすすめたい意向により、β版の公開を8/18頃まで延期させていただきたい
と思います。

このまま発売まで寄り切られることも危惧していただけに、まずはいいニュースといえるのではないかと。

歯医者の置き土産

数年前に通っていた歯医者が、どうも歯の中に治療道具の針の先端部だかなんだかを置き土産として残していってくれたらしいです(針もろとも詰め物で埋めた)。いま通っている歯医者さんがレントゲンを見せながら説明してくれました。

冗談じゃないと思いました。文章をマークアップで強調しておもしろおかしくする気にもなれません。

2003-07-29

C413Sのバッテリーがくたびれてきた。うぅ、ソニエリさん、早くして……(何が)。

京セラさんでもいいですよ(だから何が)。

ハッシュテーブルが欲しい(TX-C)

前々からなんとなく必要性は感じてたんですが、文字列をキーに任意の値を高速に取り出せるようなオブジェクトが使いたいんですよね。ハッシュテーブルというのか、マップというのか、一般的になんと呼ぶのかよくわかりませんが。

文字列ブロックを使ってそれっぽいインターフェースを持ったのを作るのは簡単なんですが、たぶんそれはめちゃくちゃ効率悪いんでしょうね。ここは気合い入れて書くしかないだろうか……。

「〜でよろしかったですか」

いまさらながら、ファミレスなどで急増中の「〜でよろしかったですか」は本当にやめてほしい。あんなすわりの悪い文句をよく平気で使えるものです。もう気持ち悪くて気持ち悪くて。

「〜ですか」でもなく「〜でよろしいですか」でもなく「〜でしたか」でもなく「〜でよろしかったでしょうか」でもなく「〜でよろしかったですか」。どういう言語感覚をしているのやら。ウェイターという職種からすると、発端はアルバイトの留学生の言葉だったりするのかも。だいたい使うシチュエーションもなんか変だし。

えと、やめてほしいっていうのはもう言ったですか?

2003-07-27

追記: 下記の件を修正したcsvform, dtnchot, strhist, timestampを公開しました。strhist以外は基本的に下記の問題に該当する箇所の修正のみです。strhistは、2.12以降を公開するのを忘れてたみたいです(苦笑)。あと、おまけがちょっと豪華になったのがひとつあります(笑)。ダウンロードできないなどのトラブルがありましたらお知らせください。

追記その2: いたずらに不安をあおるような書き方をしている気がしたので、小見出しをあらためました。……その後、あらためたやつは不正確なような気がしたので、さらに普通の言葉にあらためました。

今日の範囲外アクセス(TX-C)

strcpymax(sz1,sz2,size)

strcpyと同じですが、sizeを超えない文字数だけをコピーします。例:
strcpymax(sz,"0123456789",5);
szの内容は“0123”になります。

strcpylen(sz1,sz2,lch)

sz1sz2を最大lchバイトコピーし、sz1[lch] = 0にします。例:
strcpylen(sz,"0123456789",5);
szの内容は“01234”になります。

うわー! strcpymaxを使うべきところでstrcpylenを使いまくってました。懺悔ものです。

strcpylen(szsearch, sz, CCHPATHNAME);なんてやってるのは完璧にアウトですね(dtnchot)。szsearchの範囲をひとつ超えたところに '¥0' が書き込まれる。

次のようなコードを実行すると、その実害を観察できます(WZ 4.00Fa β2.1で確認、ただし環境によって再現しない可能性もあり)。

void main(TX *text)
{
    mchar sz1[CCHWORD] = "あああ";
    mchar sz2[CCHWORD] = "";
    information("%s", sz1);     // 「あああ」と表示(正常)。
    strcpylen(sz2, sz1, CCHWORD);
    information("%s", sz1);     // 文字列が空になっている。
}

2度目のinformationではsz1が空になっています。メモリ上でsz1sz2が隣接していて、sz1[0]'¥0' が書き込まれているものと思われます。

マクロの方も近いうちに直します。おぅ、みんな、見捨てないで…。