2023年11月30日木曜日

[OS][code] seclanのほえほえ日記(1999/8-2000/6)









[OS][code] seclanのほえほえ日記(1999/8-2000/6)
このホームページは,seclanの日記またはプログラミングのためのメモのようなものを掲載しています。
▲2000/06
△未バックアップデータ満載の D: ドライブが消えた日 #11/11
2000/06/30 [金]
いつもと変わらぬ起動光景でした。なんとなにも問題はなくなっていたのです。scandisk をかけても何一つエラーは報告されませんでした。ということは結局 MBR がおかしかったのでしょうか?
そんなこんなで結局 Linux はインストールできなかったことになります。何といっても,MBR を戻してしまったので Linux パーティションを認識できません。やれやれ。非常に疲れた一日でした。
△未バックアップデータ満載の D: ドライブが消えた日 #10/11
2000/06/29 [木]
こんなシナリオが頭をよぎります。はて,そう言えば,MBR のバックアップを取ってたっけ。なんか拡張領域事件の時もそうだったけど,もしかしたらパーティション操作に弱いのかな? ということで,パーティションを操作できる mbm というツールを起動してみると,なんと! パーティションにエラーがある事が発覚 ! なんで~。そこで,FD にバックアップしておいた MBR をハードディスクに書き戻し,ThinkPad を再起動...。そして再び C: ドライブから起動して見たものは...。
2000/06/28 [水]
もう顔は真っ青です。何といっても D: ドライブはバックアップしていません。このホームページの html などのデータ,他重要なデータもすべてこのドライブにあります。うわ~,どうしよう !!! とは言っても,もうこの状態ではできることはほとんどありません。すでに Linux をインストールした後で,ハードディスクにはいろいろ書き込まれているでしょう。もう復旧は無理です。あるのは絶望感だけです。
結局のところ,どうしようもないので,新たに D: ドライブを format として,かなり昔にバックアップしたデータを書き戻しました...。いったいどうしてこんなことになったのでしょうか? あ~あ,インストールしなきゃよかった / バックアップをちゃんと取っておけばよかった。トホホ。
2000/06/27 [火]
そんなこんなで ThinkPad を再起動させます。ただいきなり Linux を立ち上げるのではなく,一応既存のパーティションが大丈夫なことを確認しておこうかなと思い,C: ドライブを起動することにしました。"Starting Windows ..." のメッセージが表示され,何だ C: ドライブは大丈夫じゃないかと思ったその矢先,"Retry Abort Fail" の選択を迫るプロンプトが表示されました。?。起動時には config.sys の中に書かれているドライバを読み込むようになっていますが,D: ドライブの中にあるドライバを読み込むときにそのメッセージが出てきているようなのです ! 慌てて,コマンドプロンプトから "D:","dir" しようと思うのですが,なんと "D:" した時点でエラーが出てしまうのです。というわけで,完全に D: ドライブの内容が読むことすらできなくなっていたのです !!!
△未バックアップデータ満載の D: ドライブが消えた日 #7/11
2000/06/26 [月]
キーボードやマウスを選択した後,パーティションの設定を行います。現在,三つの基本パーティションを使っているので,残りは一つしかありません。けれども,Linux の場合は拡張領域を勝手に作成してくれるのできっと大丈夫でしょう。横に出ているヘルプによるとスワップパーティション,/boot と / の三つを作る必要があるらしい。そういうことで,それぞれ,128M, 8M, 1G というようにパーティションを作成しました。次にインストールするパッケージタイプの選択があり,それに基づいて,実際のインストールが行われます。でいろいろ設定して,ハードディスクへの書き込みが開始されました。待つこと数十分,CDROM をぬいて再起動の指示が出ました。というわけで,再起動をといきたいところですが,ちょっと不安なことが...。インストール時には,一応 Linux が立ち上がっているわけですが,その Linux が正常に終了しなかった? ようなのです。具体的には画面が壊れていて,何ら正常な文字が表示されていなかったという症状なので,画面がおかしかっただけという可能性もありますが。
2000/06/25 [日]
UNIX のインストーラたるもの,こんなにユーザを甘やかしていいのか! なんと,Vine Linux のインストーラは,従来の Text モードに加え,Graphic モードがあるのです。選択すると,おもむろに X Window System が起動し GUI 画面になるのです。それにしてもいきなり X が起動したのには驚きました。ただし画面サイズは,VGA サイズというのが...。まぁしょうがないですね。起動すると,ナビゲーション用のダイアログが表示され,設定項目の内容の説明が左部分に表示されます。これは昔に比べると大きな進歩でしょう。
2000/06/24 [土]
「まぁ,最近はディストリビューションも整理されてるし,インストーラも改善されてきてるから,別に変なことは起こらないよな...」と,そう思うことにし作業をすることにしました。本当はインストールする前には各ドライブのバックアップをしておくもんですが,適当な保存装置を持っていないうえ,前使っていたのも今はトラブル状態で使うのが難しい状況だったのです。そんなわけで,インストールしようかと思ったのですが,思い直して,現在の MBR のバックアップを FD に取って置くことにしました。この作業は簡単ですぐに終わるから,一応の気安めにやったという話は...,...,話は...,...。
まままっ,というわけで,CD を入れて,マシンをリブート,インストールだ !
2000/06/23 [金]
では,さっそくインストール ! といきたいところですが,以前インストールしようとしたときの FreeBSD の 8G 境界事件や,Linux おまかせインストールコースでの二つの拡張領域事件が頭の中をちらつきます。前者は,インストールしようとパーティションを指定してもなぜかインストーラに跳ねられてしまう。いろいろパーティションの大きさを変えてもだめ。で結局,ディスクの先頭 8G にパーティションが納まっていないとだめであるという事件。後者は,すでにハードディスクに拡張領域があるにもかかわらず,おまかせインストールをすると,あろうことか Linux 用の拡張領域を新たに作成してくれたという事件。基本的には,拡張領域は MBR の中に一つだけということになっています。そんなわけで,「本当に信用していいんだろうか...?」という考えが頭の中をよぎります。
2000/06/22 [木]
雑誌から取り出した CD は二枚で,一枚はバイナリ用,もう一枚はソース用です。最近のこの手の CD は CD Boot が可能なものが多いのですが,この Vine Linux の CDROM も,案の定 CD Boot 対応でした。というわけで,CD Boot ができる機械では,CD を挿入して待っているだけでプログラムを起動させることができます。我が ThinkPad600 はもちろん CD Boot 対応なので,何の問題もなく起動できるはずです。ただそれをやるには BIOS を設定する必要があります。そんなわけで,まず CD から起動するように設定しました。
2000/06/21 [水]
さてその Linux ですが,最近 Vine Linux 2.0 がリリースされたという情報がありました。そこでさっそく手に入れようと,現在発売中の UNIX USER 7 月号を買ってきました。今月の UNIX USER には Vine Linux 2.0 のバイナリとソースが入っているのです。実は,同じく発売中の Linux Magazine にも入っているのですが,こちらは,バイナリしかありません。やはり Free UNIX はソース付きでないとね。ただそのかわり,そっちは複数のディストリビューション(四種類)が入っています。
で,手に入れるとやはりインストールしたくなるわけです。ふと手元を見ると,なぜか,10G のハードディスクのくせに 2.5G ほど空き領域がある ThinkPad600 があるわけです。Linux をインストールするには十分な空き容量です (^-^)。ちなみに,この ThinkPad には,現在のところ主に C: には Windows を,D: には Data をという使い分けをしています。
2000/06/20 [火]
最近のアメリカでの Linux ブームはすごいものがあります。それが証拠に,新しく出荷される PC に Linux のプリインストールされたものが出るくらいです。今までは,プリインストールされるのは Windows だけでしたからね。これに引きずられるように,日本でも Linux が注目されるようになりました。それが証拠に (^-^;),老舗の UNIX USER を始め,Linux Magazine など複数の UNIX 系の雑誌が出版されています。
△「ペイント」で特定の色だけを変更する方法
2000/06/19 [月]
たいした機能がないと思われている Windows 付属のお絵描きソフト「ペイント」ですが,生意気にも指定した特定の色を他の色に変更するなんていう機能を持っているようです。その方法は,変更したい色を前景色に(スポイトで前景色にしたい色のところで左クリック),変更後の色を背景色に(スポイトで背景色にしたい色のところで右クリック)に設定します。そして消しゴムを選択して,右クリックをしたままゴシゴシします。すると,指定した色のところだけが影響を受けます。なお左クリックしてままゴシゴシするとどの色も問答無用で背景色になってしまいます。
△explorer の「表示(V)」-「詳細(D)」で属性表示を可能にする方法
2000/06/18 [日]
explorer では,画面の右ペインを左クリックしたメニューから「表示(V)」-「詳細(D)」を選択することで,各ファイルの情報を詳細に表示するモードに変更することができます。最近の explorer では,その画面でファイルの属性を表示することができるようになっています。ただ,デフォルトでは表示するようになってはいないので,「表示(V)」-「フォルダ オプション(O)...」-「表示」-「詳細設定」の中の「詳細表示でファイルの属性を表示する」のオプションをチェックしてこの機能を有効にします。しかし,Windows によってはこの設定が explorer の「フォルダ オプション」から設定できないものもあるようです。そのようなときには,「HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced」の中に ShowAttribCol という DWORD 値を作り,値として 1 を設定します。
△IE の「インターネットオプション」/Explorerの「フォルダオプション」を非表示にする方法
2000/06/16 [金]
IE ではインターネットの設定をするために,「ツール(T)」メニューの下に,「インターネット オプション(O)...」の項目が存在します。これを選択するとダイアログが現れ,ホームページのアドレスや,セキュリティーの設定などをすることができます。しかし,設定を誰かにいじられたくないという理由から,これを非表示にしたいと思うことがあります。その時には,「HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Policies\Explorer」にバイナリ型で NoFolderOptions という項目を作り,値として「01 00 00 00」を設定します。なお,このフラグは Explorer とも連動しているので,同時に Explorer の「フォルダ オプション(O)...」も消えてしまいます。
△IA-64 Simulator 他 (on Linux) が公開!
2000/06/15 [木]
まだ chip 自体は発売されていない IA-64 アーキテクチャですが,そのシミュレータが公開されました。このシミュレータは IA-32 Linux 用なので,Linux をインストールしていない人はあらためてインストールする必要があります。あと,これら一式(他の IA-64 用ファイルシステムなど)をダウンロードすると 100MBytes 近くになるため,CD の配布サービスも行われています。
△FreeBSD: shutdown -p now で電源を切れるようにする方法
2000/06/12 [月]
FreeBSD 3.4 や 4 では,OS を終了するときには shutdown コマンドを使って,システム全体を終了させます。例えば,shutdown -h now というコマンドを使うと,終了処理をした後,システムが停止します。そこでその時電源を切ります。また shutdown -r now とすると終了処理をした後,リブートします。そして shutdown -p now とすると終了処理をした後自動的に電源を切ります。しかし APM を有効にしたカーネルでかつ対応した機械でもそれができないことがあります。そのようなときには,/etc/rc.conf に apm_enable="YES" があることを確認してください。これを設定すると電源が切れるようになります。
△クロスポストとマルチポスト
2000/06/11 [日]
ネットニュースでは複数のニュースグループに同時に同じ記事をポストすることができます。その方式としてクロスポストとマルチポストという方式があります。それには,次のような違いがあります。
クロスポスト
複数のニュースグループに投稿した一つの記事が,ただ一つの記事として扱われる。つまりあるニュースグループでその記事を読み規読状態にすると他のニュースグループに投稿された同じ記事も規読状態になる。
マルチポスト
複数のニュースグループに投稿した一つの記事は,それぞれ何の関係もない独立した記事として投稿される。したがって,あるニュースグループでその記事を読んで,他のグループで同じ記事を見た場合でもその記事は規読状態にならない。Spam によく使われる。
△CCS (Coded Character Set) と CES (Character Encoding Scheme)
2000/06/09 [金]
RFC などを読んでいると文字コードに関する部分に CCS (Coded Character Set) や CES (Character Encoding Scheme) といった言葉が出てきます。CCS はコード化された文字集合ということで,文字集合そのもののことを指します。それに対して,CES はその文字集合の(電子計算機上での)符号化方式を言います。ちなみに,JIS 規格で言うところの CCS (符号化文字集合) は RFC2130 で言うところの CCS+CES の事を言っているようです。
△インデックスページ模様替え
2000/06/07 [水]
本ホームページの日記の,各項目へのインデックスを提供している,資料室,面白い話題,ニュースの各ページを模様替えしました (とはいっても突然変えたわけではなく少しずつ変えてたんだけど...)。ちょっと派手になった...かな (CSS が有効の場合)。それと,項目を少し整理した部分があるので,少し見やすくなった...と思う。
△BNC ケーブルの色とモニタの端子の対応
2000/06/05 [月]
通常の PC に備わっているアナログ RGB 出力に加え,BNC 入力を受け付けることのできるディスプレイが存在します。BNC 入力はアナログ入力のように一つのコネクタからなっているわけではなく,複数のケーブルを端子に接続することで入力を行います。そのケーブルは 5 本でそれぞれ赤緑青白黒色からなっています。そしてモニタにある端子には R, G, B, HD, VD と書いてあります。さて,ここで問題です。どの色のケーブルをどの端子につなげばよいのでしょうか?
BNC ケーブルとモニタ端子の対応
ケーブル 端子
R
G
B
HD
VD
△twotop が民事再生手続き !
2000/06/03 [土]
もう皆さんご存知のことかと思いますが,PC やそのパーツの販売を行っている twotop の運営会社である株式会社フリーウェイが 6/1 に東京地方裁判所へ民事再生手続きを行いました。負債額は 50億円のようです。それにしても twotop といえば,PC やパーツの販売を行っているところとしては日本では大手に入る部類の会社なのに,こんなことになるとは驚きです。昔,今で言う iodata や メルコ の同業の会社としてその名前を知られていた ICM が突然(のように)つぶれてしまったことを思い出します。ただ ICM のときと違うことは,今回のは民事再生手続きという点です。では民事再生手続きとは何でしょう?
民事再生手続きとは,今年の 4/1 から施行になった民事再生法という法律に基づくもので,ようするに破産しそうになった場合,この申請を裁判所にして認められることで,一時的に返済期限を伸ばしたり,債権を変更したりすることができるというものです。もちろん,これには債権者の同意(投票)が必要です。このようにして,一時的にお金の支払い額を減らし,その分を運転資金に回すことで再生を目指すことができるというわけです。この時の経営は,今まで経営していた経営者がそのまま経営することができます。また申請対象者は特に決められていないので,この法律の想定している中小企業だけではなく,大企業や個人も申請することはできます。 もっと正確かつ詳細な話は中小企業庁のこのページを参照してください。
△Win2K: IE5 で shell プロトコルを指定すると落ちる現象
2000/06/02 [金]
どうやら,Win2K で IE5 を使って,特定のプロトコルを指定すると,IE と explorer も落ちてしまうようです。この現象は Win2K を使っていてかつ IE5 の場合だけで,WinNT4 や Win9x などで IE5 を使っている場合では起こらないようです。問題の URL は shell:// のように 'shell プロトコル' を指定すると起こるようで,例えば,こんな URLです。該当の環境の人で,このリンクをクリックしてみようと思う人は,何が起こるか考え,それなりに覚悟をしてからクリックしてくださいね。
△REG: NotePad での印刷時に使われるヘッダ/フッタの設定個所
2000/06/01 [木]
NotePad では「ファイル(F)」-「ページ設定(T)...」の中で印刷時のヘッダとフッタを指定することができます。しかし,そこの設定を変更しても,その変更が保存されず,次回起動したときには元に戻されてしまうようです。そのようなときには,HKEY_CURRENT_USER \Software\Microsoft\Notepad の中に文字列値 szHeader (ヘッダ) または szTrailer (フッタ)を作成すると,その値がデフォルトの値になります。
▲2000/05
△Win2K: インストーラのバージョンチェックを回避する方法
2000/05/31 [水]
Win2K にアプリケーションをインストールしようとして,セットアップを起動したら,この機械 (OS) にはインストールできないという意味のメッセージが出てインストールに失敗することができます。この原因の一つがインストーラがバージョンチェックをしている場合が考えられます。そこで何とかバージョンチェックをごまかせばインストールできるのではないかと考えるわけです。DOS ではそのような用途に使用することができる setver.exe が存在していましたが,Win2K にはそのようなものは存在しないのでしょうか? 実は,ちゃんと存在しているのです。Win2K の CD の中の \Support\Tools の中にある setup.exe を起動してサポートツールをインストールします。その中にある Application Compatibility Tool を使用するとアプリケーションに任意のバージョンを指定することかできるようになります。
△NT4: Auto Power Off を有効にする方法
2000/05/29 [月]
NT4 で,マシンによってはハードウエアがソフトウエアからの Power Off に対応しているにもかかわらず,NT を終了しても「電源を切る準備ができました」と表示されて電源が切断されないものが存在します (電源が切れる機械はそのマシン固有の HAL.DLL が用意されているので電源を切断できる)。この電源切断機能を強引に使うためには,SP4 付属の HAL.DLL.SOFTEX というファイルを HAL.DLL という名前にして,\WinNT\System32 にある HAL.DLL と置き換えます。そして,HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon の中にある値 PowerdownAfterShutdown を 1 にします。これで電源が切れるようになるかもしれません。
△CD の自動起動を一時的に停止させる方法
2000/05/28 [日]
Windows の通常の設定では,CD を挿入するとその中にあるプログラムを自動的に起動するようになっています。もちろん,設定すればこの自動起動をしないようにできます。しかし,一時的にこの機能を停止させたいときに,わざわざ設定し直すのは面倒です。そのようなときには,シフトキーを押しながら CD を挿入すると,一時的に自動起動を停止することができます。
△REG: 全コンテキストメニューに出現するメニュー項目を個別に非表示にする方法
2000/05/26 [金]
HKEY_CLASSES_ROOT\*\shell の下に作成されたキーの各項目は,基本的にはすべてのコンテキストメニューに出現します。しかし,特定の拡張子を持つメニューにはこれを非表示にすることができます。例えば,.url や .lnk ファイルには始めからこの設定がされています。ここで .url を例に取ると,HKEY_CLASSES_ROOT\.URL には InternetShortcut が設定されています。そこで,HKEY_CLASSES_ROOT\InternetShortcut を見ます。そこに REG_SZ「IsShortcut」(値はどうでもいい) が存在すると,コンテキストメニューに HKEY_CLASSES_ROOT\*\shell の下にあるメニューは表示されません。存在しないと表示されます。
△Win98: Win95 より起動が遅くなる一原因
2000/05/24 [水]
Win95 に比べると Win98(SE?) ではデスクトップ画面が出るまでの時間が長くなる時があります。その長くなる条件の一つがネットワークの DHCP の設定がしてあるときです。Win95 では起動時に DHCP からアドレスが確保できないと,すぐにその旨を表示しスタートアップを継続するのに対し,Win98(SE?) では,DHCP が見つからないと,次にプライベートに使える IP アドレスを自動的に検索してそれを割り当ててから起動するようになっています。そのため,起動が遅くなるのです。というわけで,起動時にはいつもケーブルをちゃんとつないで DHCP サーバとすぐにアクセスできるようにしておくと起動が早くなります(Win95 並みの速度ですが)。
△ISO10646/UNICODE プライベートエリア
2000/05/22 [月]
ISO10646 は全世界の文字を単一の文字コードであらわそうとしているコード体系で,UNICODE を内部に含んでいます。コードは基本的には,4 オクテットからなっており,上位オクテットからそれぞれ 郡/面/区/点 (group/plane/row/cell) と呼ばれる部分に別れています。この群 = 00h で面 = 00-10h の部分に UNICODE が割り当てられています。他の部分に関しては決まっていません。コードの中にはユーザが自由に使えるプライベートエリア (private area) が存在しています。ISO10646 と UNICODE のそれを示します。
- 説明
00 00 00 00 - 7F FF FF FF : ISO10646 全文字コード範囲
00 E0 00 00 - 00 FF FF FF : ISO10646 プライベートエリア
60 00 00 00 - 7F FF FF FF : ISO10646 プライベートエリア
00 00 00 00 - 00 10 FF FF : UNICODE 全文字コード範囲
00 00 E0 00 - 00 00 F8 FF : UNICODE プライベートエリア
00 0F 00 00 - 00 10 FF FF : UNICODE プライベートエリア
△Netscape Messenger で新しいフォルダを作成するとそのフォルダが見えなくなる現象
2000/05/21 [日]
Netscape Messenger を利用するとメールを扱うことができます。メールは,普通の text/plain の他にも,text/html にも対応しています。そんな Netscape Messenger ですが,メールを分類するための機能も当然持っています。そのために,Netscape Messenger の「ファイル(F)」-「新しいフォルダ(W)...」で,メールを格納するための新しいフォルダを作成することができます。しかし,ここでフォルダを作成した後,再び Netscape Messenger を起動するとそのフォルダが見えなくなるという現象が起こることがあります。
実は,この現象はフォルダ名の最後の文字が ~ (文字コード 0x7e) だと起こる現象なのです。例えば「おいしい梅」という名前の場合,最後の「梅」の文字の文字コード が 0x947e のように 0x7e が含まれているのでこの状態になります。他にも,非表示になってしまうフォルダ名として,. や # で始まる名前があります。UNIX な人はここらへんでぴぴ~んと来たかもしれません。UNIX では,ファイル名の最後に ~ がついていたり,# で始まっているとバックアップファイルであることが多く,また . で始まるファイルは設定ファイルであることが多いのです。Netscape Communicator は UNIX 版もあるのでその影響かもしれません。でも Windows で使うぶんにはまったく関係ないので迷惑といえば迷惑といえるかもしれませんが。とりあえず,「おいしい梅」というように,名前の最後に全角の空白()を入れると見た目をそれらしくしたまま,この仕様(バグ?)を回避できます。
Win2K: セットアッププログラムが起動しない現象
2000/05/19 [金]
Windows 2000 で,何かをインストールしようと思ってセットアッププログラムを起動したら,アプリケーションエラーが出てインストールできないことが起こることがあります。しかも,一つではなく他のセットアッププログラムまで動作しないのです。実はこの現象は,WindowsUpdate で「固定ピッチ フォント問題の修正プログラム」をインストールすると起こります。したがって,セットアッププログラムを動かすためには,この修正プログラムをアンインストールする必要があります。
△「ぁゃιぃ」話
2000/05/18 [木]
インターネット上では,E-Mail,Web BBS,メーリングリストなどを通して他者とコミュニケーションをとることができます。しかし,現在のところそれは文字を通してだけで,絵などは使えません。そこで,文字だけで何とか通常と違った効果をだそうとする方法が昔からいろいろ考えられてきました。その中に,「あやしい」という言葉があります。「それ,ホント? あやしい」なんて使いますが,疑いを強調するために,「あやしい」をすべて小文字にして「それ,ホント? ぁゃιぃ」というようにする記述を見かけます。これのどこがすごいのかというと,試しに「ぁゃιぃ」と入力してみてください。できないでしょ? 「し」の小文字なんてものは日本語にはないので,当然文字コードの中にもないのです。で実はこれ,ギリシア語のイオタの小文字 (U+03B9) なんです。それにしても,よくも見つけてきたものですね。
△Win98: ダイアルアップ ネットワークの設定の保存方法
2000/05/17 [水]
ダイアルアップをしてインターネットに接続するときには,explorer のマイコンピュータの下のダイアルアップネットワークというフォルダの中の各接続アイコンをクリックして行います。この接続アイコンの設定はちょっとした量があるのであまり何度も設定はしたくはないものです。けれども,再インストールをするときなどにこの設定をバックアップすることはかなり困難でした。しかし,この設定を簡単に保存する方法があります。実は,Win98 では接続アイコンをドラッグできるのです。任意のフォルダに接続アイコンをドラッグ&ドロップすると接続アイコン名+.DUN というテキストファイルが作成されます。この中に各種設定が保存されているのです。また設定を戻したいときには,その .DUN ファイルをダブルクリックするか,アイコンをダイアルアップネットワークにドラッグすればできます。
△アドホック-その場しのぎに
2000/05/16 [火]
なになに,これが前任者の引継ぎ資料か?え~と,ん? なんでこの部分はこうなっているんだ? さては,アドホックに作ったな。というような文脈で,アドホックという言葉を使います。さてこの単語のスペリングですが adhock です。というのは,お約束よろしく間違っています。本当は,ad hoc というように,ad と hoc として書きます。この単語は名詞ではなく,副詞または形容詞なので単独では使えません。
△IA-64 マニュアル公開 !
2000/05/15 [月]
Intel の 64 bit プロセッサ,IA-64 のマニュアルが完全公開されました。今までにもいくつかのマニュアルが公開されていましたが,それらの情報は,例えば OS の作成に必要となりそうなシステム系の情報が公開されていないといったように,限定されていました。しかし,今回はそれらの情報も含めて公開されました。intel のここのサイトからダウンロードできます。
△ミレニアム-千年期
2000/05/12 [金]
英単語シリーズとなってしまってますが,今日はミレニアムです。ミレニアムは日本語の意味では千年期ということで,今年はちょうど西暦 2000 年,つまり 1000 年の区切りというわけです。去年,来年はミレニアムだとか言って大騒ぎだったのは記憶に新しいところです。そんなわけで,街の中や雑誌,テレビなどにミレニアムという言葉が踊りました。でミレニアムをカタカナで書けば問題はなかったのですが,よせばいいのに (^_^; かっこつけて英語で書いてある看板などがあるわけですね。「milenium anniversary」のように。あ~はずかしい~。正しいスペリングは「millennium」 (l と n をそれぞれ二つ重ねる) なのに。 というわけで間違ったスペリングの看板 (結局最後まで訂正されなかった) が街にあふれていたのでした。
△デファクトスタンダード-事実上の標準
2000/05/11 [木]
コンピュータ業界でよく使われる言葉に,デファクトスタンダードという言葉があります。これは「事実上の標準」という意味でようするに普及したものが勝ちということです。英語表記では defact standard と書きます。これは疑いようのないことです...ってホントですか? よく間違いに気づきましたね。えっ? わからない? 正しくは,de facto standard と書きます。defact なんて言葉ありません。気をつけましょう。
△disk と disc の違い
2000/05/10 [水]
円盤のことを言うのに,disk と disc という表現があります。例えば,Floppy Disk とか Compact Disc とかいうように使いますね。ではいったいこの k と c は何が違うのでしょうか? 実は,これには諸説あってこれとは決められないのですが,一つの考えとしては英語本来の用語としては disk が正しいというのがあります。これはギリシア語 diskos「円盤」から来ているからというものです。この場合,英語の意味的には disk は平らな円盤の様なものの総称として用いられます。ただしイギリス英語では disk よりも disc の方が好まれており,disk はアメリカナイズされた用語であると思われているという情報もあります。また現在のメディアでは disc は光学ディスクの総称として,disk はそれ以外のディスクの総称として用いられることが多いようです。
△REG: ユーザ登録済みフラグ
2000/05/08 [月]
Windows Update は,「オンラインユーザー登録」をしないと使えないようになっています。仕方なく,そこで登録すると,勝手にハードウエア固有の情報を Microsoft に送信します (Win98)。これは登録するときの「送信しない」の選択の有無に関係ありません。この情報が送出されて構わないと思っている人はそれでいいですが,嫌な人は,「\\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion」の中の値 RegDone を 1 に設定すると,登録済みとして扱われるので,情報を送出しなくてすみます。
△C99 フレーム化
2000/05/07 [日]
このホームページで一年近くかけて解説した ISO/IEC 9899:1999 プログラミング言語 C,通称 C99 の日記の各要素をまとめたファイルをフレーム化した。今までそのファイルは,単独のファイルでサイズが 200K バイト近くあったけど,今回フレーム化したのでいきなり巨大なファイルをダウンロードし始めるということはなくなるはず。それにしても,疲れた... (v_v)。後は,最近管理不能になりつつあるような気がする日記をなんとかシステム化しないとだめかも。もう限界に近づきつつある。
△タスクバーの色を変える
2000/05/05 [金]
Windows でシェルに explorer を使っていると画面にタスクバーが表示されます。通常このタスクバーの色は灰色ですが,この色は変更することができます。コントロールパネルの「画面」から「画面のプロパティ」-「デザイン」-「指定する部分(I):」-「3D オブジェクト」-「色(L)」で設定できます。設定するとウィンドウの枠(ボーダ領域)の色も同時に変更されます。
△Win95: スクリーンセーバでのフリーズ
2000/05/04 [木]
Win95 OSR2 でスクリーンセーバを立ち上げ,その後しばらくして帰ってきたら,フリーズしていたということが起こることがあります。これは,電源管理によってハードディスクが止まっているときに,他のプログラムがそのハードディスクにあるファイルにアクセスしようとするときに起こるようです。したがって,この現象を回避するには,コントロールパネルの「パワーマネージメント」-「電源のプロパティ」-「ディスクドライブ」-「電源が AC 電源の場合」のチェックをはずすことで行えます。あるいは,ハードディスクを長い間止まらないよう設定することでも行えます。
△REG: MIME 関連の設定場所
2000/05/03 [水]
Internet Explorer などでファイルを表示したり,ダウンロードしたりするのを判別するために,そのファイルのファイルタイプを知る必要があります。それを GUI から設定するときには,「フォルダ オプション」の「ファイル タイプ」から設定するわけですが,これらの設定の一覧はレジストリの中では,「HKEY_CLASSES_ROOT\MIME\Database」に格納されています。
△Win2K: chkdsk をすると /f で修復するように言われる問題
2000/05/02 [火]
Windows 2000 でコマンドラインから NTFS のドライブに対して,chkdsk を実行すると,「ファイルシステムに問題が見つかりました。CHKDSK を /F オプションを使って実行したください。」と言われることがあります。そこで chkdsk /f を実行して修復した後,再び Win2K を起動して chkdsk を実行すると同じメッセージが表示されてしまうことがあります。これは,ファイルシステム内に未使用のセキュリティ記述子が存在するときに起こるようです。この状態はファイルシステム上は一応正常なので,特に,chkdsk /f を実行する必要はないようです。
△Win9x: echo コマンドで < > 記号を出力する方法
2000/05/01 [月]
Win9x のバッチファイルなどでは echo コマンドを使うと文字列を表示することができます。例えば,
C:\>echo hello
hello
C:\>
と画面に表示することができます。ではここで <a href="http://seclan.i.am/"> と表示してみましょう。単純にこのままやろうとすると,次のようになってしまいます。
C:\>echo <a href="http://seclan.i.am/">
ファイルが見つかりません.
C:\>
実は,< や > の記号はコマンドラインではそれぞれリダイレクトを表す記号なのでそのまま使用することはできないのです。例えば,記号 < は,その記号の右側にファイル名を書いて,そのファイルの内容を左側のプログラムに渡す,そして記号 > は表示内容をファイルに書き出すために用いられます。前述の例では a href="http://seclan.i.am/" をファイル名と解釈したのでファイルが見つかりませんと言ってきているわけです。ちなみに記号 > は例えば次のように使うことができます。
C:\>echo hello > hello.txt
C:\>type hello.txt
hello
C:\>
さて,これを回避するためには,表示する文字列を "" で囲めばよいのですが,それをやると次のように余計な "" も表示されてしまいます。
C:\>echo "<a href="http://seclan.i.am/">"
"<a href="http://seclan.i.am/">"
C:\>
この余分な "" を表示させないために裏技を駆使します。
C:\>echo"<a href="http://seclan.i.am/">^@"
<a href="http://seclan.i.am/">
C:\>
まず,echo の直後の一文字は表示されないのでそれを利用して,echo の直後に " をおきます。また制御コード 0,つまり文字コード 0 の ^@ を利用します。これが文字列中に存在するとそれ以降の文字列が表示されないようです(なんかバグっぽいですが...)。したがって " が表示されなくなります。なお ^@ はコマンドラインから直接入力できるかどうかは微妙です(^ と @ ではありません。^@ で一文字です。)。文字コード 0(^@) を直接挿入できるエディタを使ってバッチファイルを作成するといいでしょう。
▲2000/04
△echo コマンドで改行だけを行う方法
2000/04/30 [日]
リダイレクトを使うとファイルに文字列を追加していくことができます。
C:\>echo こんにちは > hello.txt
C:\>echo いかがお過ごしですか? >> hello.txt
C:\>type hello.txt
こんにちは
いかがお過ごしですか?
C:\>
一番始めの echo コマンドで hello.txt というファイルが作成され,中に「こんにちは」という文字列が入ります。そして二番目の echo コマンドでそのファイルの末尾に「いかがお過ごしですか?」という文字列が追加されます。ではここで,「こんにちは」と「いかがお過ごしですか?」の間に改行を入れたい場合にはどうすればいいでしょうか? echo コマンドに引数を何もつけなければよいでしょうか?
C:\>echo こんにちは > hello.txt
C:\>echo >> hello.txt
C:\>echo いかがお過ごしですか? >> hello.txt
C:\>type hello.txt
こんにちは
echo は ON
いかがお過ごしですか?
C:\>
おやおや,なんか余計な文字列が入ってしまいました。これではいけません。実は,echo コマンドの直後の一文字は表示されません。この性質を利用して,例えば,次のように行うと目的を達成できます。
C:\>echo こんにちは > hello.txt
C:\>echo. >> hello.txt
C:\>echo いかがお過ごしですか? >> hello.txt
C:\>type hello.txt
こんにちは
いかがお過ごしですか?
C:\>
この場合,二番目の echo コマンドの直後に「.」が入っています。
△C++ 作成秘話?
2000/04/28 [金]
C++ は,Bjarne Stroustrup 氏が作成し始めたプログラミング言語であることは,皆さんご存知でしょう。しかし,彼が本当はどういう気持ちでこの言語を作成し始めたかご存知ですか? そのあまりに恐ろしい事実のため雑誌のインタビューで没にされてしまった原稿のリーク記事(笑)がここにあります。(^_-)URL をよく見てみ
△UNICODE: BOM (Byte Order Mark)
2000/04/27 [木]
UNICODE は ASCII 文字のように 8bit = 1 Byte 固定長の文字コードではないため,ファイルに保存しようとするときには,その符号化の方法がいくつか考えられます。特に 16bit = 1 Byte と考えるとエンディアンも考慮する必要があります。そんな時,UNICODE ポイント U+FEFF にある Zero Width Non-breaking Space が役に立ちます。この文字は幅ゼロの文字のためこの記号をファイルの先頭に記述することで文字の符号化方式を判定しようというのです。そのようなことから,この記号は Byte Order Mark,略して BOM と呼ばれることもあります。具体的にはファイルの先頭が次のようになっている場合,右のようなエンコーディング方式とエンディアンとして考えます。△
BOM (Byte Order Mark) によるファイル形式判別
B0 B1 B2 B3 Encoding Name Endian
00 00 FE FF UTF-32 Big Endian
FF FE 00 00 UTF-32 Little Endian
FE FF UTF-16 Big Endian
FF FE UTF-16 Little Endian
EF BB BF UTF-8
△Windows 2000 のインストールで hardware config. で止まる現象を回避する方法
2000/04/26 [水]
Windows 2000 をインストールしようとすると,黒字の画面に「Setup is inspecting your computer's hardware configuration...」とメッセージが出た後,止まってしまう PC があります。このように停止してしまう原因の一つとして,BIOS で FDD を「None」に設定している場合があげられます。したがって,FDD を「A: 3.5inch FDD」に設定するとなおります。
△TP600X でメモリカードがハードディスクとして扱われないのを改善する方法
2000/04/25 [火]
PCMCIA にメモリカード,例えばデジタルカメラでよく使われるような SmartMedia+PC カードアダプタを差すと,通常は Windows が自動認識して,ハードディスクとして見えるように処理をします。しかし,TP600X ではメモリカードを認識はするのですが,ハードディスクとして見ることはできないようです。この状態を改善するには,「ThinkPad 機能設定」のプログラムを立ち上げて,「デバイスベイ」のダイアログを表示させてください。そして,「デバイスベイのウォームスワップ」が「使用する」になっていたら,それを「使用しない」にしてください。これで解決できるようです。
△工学社の雑誌 I/O が小さくなって登場 !
2000/04/24 [月]
工学社の雑誌 I/O といえば,昔は A4 版の電話帳のような厚さに,ダンプリスト(と広告)がたくさん載っているというような雑誌でした。しかしいつのころからかダンプリストも載らなくなり,また広告も少なくなってスリムな雑誌になりました。そして最近気づいたのですがいつのまにか A5 版の大きさの雑誌にリニューアルされていました。なんか隔世の感があります (-.-)。
△1 になっている最下位ビットの高速検出方法
2000/04/23 [日]
フラグ変数の特定のビットが 1 になっているかどうかを検出するのは容易ですが,その変数で 1 になっているビットを探していくのは大変です。たいていループを使って探していく記述にすることが多いかと思います。しかし,1 になっている最下位ビットのより効率的な検出方法があります(ただし以下で示すのは 2 の補数用)。それは,フラグ変数を x とすると x & -x を計算するという方法です。具体的には次のようになります。
x -x x & -x 最下位
ビット
000 000 000 ×
001 111 001 b1
010 110 010 b2
011 101 001 b1
100 100 100 b4
101 011 001 b1
110 010 010 b2
111 001 001 b1
このように,1 になっている最下位ビットが正しく検出されていることがわかります。また x & -x の計算結果 y を利用して x ^= y という計算を行うと次々 1 が立っているビットを探していくことができます。
△ThinkPad 600 用 System ROM v1.15 にアップデート
2000/04/22 [土]
久々に,TP600 用の System BIOS 用 ROM がアップデートされました。今回のバージョンで 1.15 になります。変更点は,Linux 導入時のトラブルへの対応と USB 対応 Windows の再起動時の問題への対応のようです。 ダウンロードはいつものように IBM のサイトから行えます。ちなみにファイル名は ibuj160.exe です。あと,他の ThinkPad 用の System ROM もアップデートされていたので,ThinkPad ユーザは一度見に行くといいかもしれません。
△UNIX: プロンプトを「マシン名:パス名>」にする方法
2000/04/21 [金]
コマンドプロンプトで何がしの操作をしているときは,よく現在のディレクトリ位置を知りたいことがあります。通常これを取得するためには,そのためのコマンドを実行すればよいわけですが,いちいち実行するのは面倒です。なんとか常時表示しておく方法はないでしょうか。例えば,いつも表示されるコマンドプロンプトの部分ではどうでしょうか。実は,DOS では prompt $p$g とコマンド入力することで,プロンプトの表示を,例えば C:\WINDOWS\TEMP> のように現在のディレクトリ位置を常時示すような表示にできます。しかし,UNIX の shell ではこのように標準設定されていることはほとんどありません。そこで,shell が立ち上がったとき,常に次のような設定をすると,MyMachine:/home/guest> のように常に現在のディレクトリ位置を示すことができるようになります。(ただし cshell 系)
set prompt = "$host"":""$cwd>"
alias cd 'cd \!*;set prompt="$host"":""$cwd>"'
alias pushd 'pushd \!*;set prompt="$host"":""$cwd>"'
alias popd 'popd \!*;set prompt="$host"":""$cwd>"'
△DirectX 7.0a の日本語マニュアルが公開
2000/04/20 [木]
Microsoft から DirectX 7.0a SDK はすでに公開されていましたが,そこに含まれている文章はすべて英語のものでした。今回公開されたものは SDK の日本語化されたマニュアルです。だから,これを Get すれば,英語をちまちま読まずに日本語で読むことができます。ダウンロードはここからできます。また DirectX 7.0a + 日本語マニュアルを含んだ CD を税抜き ¥1,000- で販売しているようです。ちなみにマニュアルだけのアーカイブされたファイルサイズは約 7 MBytes です。なんとか落とせるサイズでしょう。
△Unix:ロケールの設定
2000/04/19 [水]
Unix は元々日本で開発されたものではないため,表示されるメッセージや解釈される文字列などがアメリカを仮定しています。しかし後に国際化と称してメッセージなどを現地の標準にに対応させる機構が組み込まれました。これを設定すると各地域にあわせたメッセージを表示したりすることが可能になります。多くの Free UNIX の場合での一つの設定方法は,環境変数に名前 LANG を指定し,その値として ja_JP.EUC と指定する方法があります。設定方法はシェルによって違いますが,cshell 系ならば,setenv LANG ja_JP.EUC でできると思います。
△ThinkPad の壁紙
2000/04/18 [火]
ある種の企業の PC を購入すると,その会社の PC シリーズを題材にした壁紙があらかじめセットされていることがあります。我らが ThinkPad にはそのような壁紙がはじめからセットされている,....,かどうかは忘れてしまいましたが,入手する手段があります。加えて他のバージョンも取得できます。実は,IBM のここやここのサイトに行けば download できるのです。
△電話のリダイアル規制
2000/04/16 [日]
インターネットを使おうと思って,プロバイダに PPP 接続しようとしたら,話中(busy) で繋がらない。しかたがないので何度もリダイアルをした,という人も多いかと思います。従来このリダイアルには,リダイアル規制という規制があって,ある条件を守らないとリダイアルをしてはいけないということになっていました。その条件とは 3 分間に 2 回のリダイアルだけというものでした。そのため,この規制をまともに守って接続しようとすると,時間もかかりかなりいらいらしたものでした。しかし,実は現在の規制は少し変更されています。現在のリダイアルの条件は,前述の 3 分間に 2 回,あるいは時間に関係なく連続して 15 回以内のどちらかということになっています。これは,1998/04/01 から施行された端末設備等規則及び事業用電気通信設備規則の一部改正によるもので,もう少し詳しい話は郵政省のこのページから見ることができます。この事実を知っていれば安心してリダイアルをすることができますね。
△UNIX USER 5 月号に FreeBSD 4.0-Release が収録 !
2000/04/14 [金]
今月 8 日に発売した Softbank の月刊雑誌 UNIX USER 5 月号に FreeBSD 4.0-Release 版が収録されています。その収録のためになんと 4 枚もの CD-ROM が使われるという豪華ぶり。FreeBSD 本体のほかパッケージ一式もすべて収録されているようです(でも PC98 版は入ってないみたい)。これだけの量を ftp しようと思ったらどれだけ時間がかかることか。そんなわけで FreeBSD 4.0 を落としたかった人はこれを買った方がお特かも。それにしても,相変わらず安くはない \1,490-。もう少し安けりゃいいのに...。CD-ROM 自体は CD Boot 対応なので,CD Boot 可能な機種ならばそのまま CD を入れて,CD から起動をするという設定をすれば,起動できるはずです。しかし,TP600 ではできなかった ! なぜ ? Vine Linux は OK だったのに... (T_T)。
△C 言語と C++ 言語での const キーワードによるリンケージの違い
2000/04/13 [木]
C 言語と C++ 言語では const キーワードを使うことで定数を宣言することができます。例えば const int cardmax=13; のように使用できます。これが単一のモジュールだけで使われるのならば問題がないのですが,複数のモジュールにわたって使われる場合,C 言語と C++ 言語では const のリンケージが違うので,注意が必要です。具体的には C 言語では外部リンケージをもち,C++ 言語では内部リンケージを持ちます。つまり C 言語では他のモジュールから使用する場合,そのモジュール内で extern const int cardmax; と宣言すればこの定数は使用可能ですが,C++ 言語では同じようにしても参照することはできません。C++ 言語で外部から const オブジェクトを参照したい場合には,定数を定義するときに,extern const int cardmax=13; のように定義する必要があります。
△車でドライブした後の静電気ショックを回避する方法
2000/04/12 [水]
今回は,計算機関係の話題ではなく,ちょっと時期外れですが,静電気の話です。車を運転していたり,同乗したりして,いざ降りようと車に触った瞬間「ばちっ」といって,指先に痛い思いをした人もいるかと思います。というか,痛い思いをしました (T_T)。特に,不意打ちに近い形で「ばちっ」と来るので精神的ダメージも大です。で,どうしてそんなに静電気が溜まってしまうのかというと,車のシートと洋服の摩擦で起こっているということです。というわけで,そのたまった静電気を開放しつつ,降りることができれば,「ばちっ」は回避できます。つまり,降りるとき車のボディーに手を触れながら服をシートから離して降りれば回避できます。
△REG:タスクバーのプロパティダイアログを使用禁止にする方法
2000/04/10 [月]
タスクバーの上にマウスカーソルを持っていき,右クリックでメニューを出すと,タスクバーのプロパティの項目があり,それをクリックするとタスクバーのプロパティの設定ダイアログを出すことができます。しかし,設定を勝手にいじられたくないなどの理由により,このダイアログを出さないようにしたいと思うときがあります。実はこれは可能です。この設定をすると,設定ダイアログのかわりに,「制限-このコンピュータの制限により,処理は取り消されました。システム管理者に連絡してください。」とのメッセージが出るようになります。やり方は,「HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Policies\Explorer」の中に DWORD 値 で「NoSetTaskBar」 を作成し,値として 「01 00 00 00」を設定します。これで OK です。解除するには値を消すか,「00 00 00 00」に設定します。ただし,その場合には explorer の再起動が必要なようです。
△explorer での高速なファイル名指定
2000/04/09 [日]
explorer の右側のペインではファイルの一覧が表示され,マウスやキーボードでファイルを選択することができます。特にキーボードで選択をするときには矢印キーを使っていることでしょう。しかし,ファイル名がわかっているときには矢印キーでいちいちそのファイルを探して選択するのは面倒です。もっと早く選択する方法はないのでしょうか? もしそのファイル名がアルファベットなら,一つの方法としてアルファベットの頭文字を押すという方法があります。押すと,そのアルファベットがファイルの名前の先頭になっているファイルにカーソルが飛びます。続けて同じアルファベットを押すと,次のそのアルファベットを持つファイルにカーソルが飛びます。
このような方法も結構便利ですが,アルファベットの名前を持つファイルなら一発で指定する方法もあります。すばやくそのファイル名をタイプするのです。するとそのファイル名に一発でカーソルが飛びます。もしうまく行かないときには,一度カーソルを他のところに動かしてから,再挑戦してください。それからゆっくり入れてはいけません。すばやく入力する必要があります。タッチタイプができる程度の人でないとうまくいかないかもしれません。
△Netscape 6 Preview Release 1 が公開 !
2000/04/08 [土]
もうあちこちで話題になっているので,今更書くのはなんなのですが (^_^;,Netscape からブラウザの新バージョン Netscape6 のβバージョンである Netscape 6 Preview Release 1 が公開されました。インストールするためには,まず 200K 位のインストールプログラムをダウンロードして,それを実行します。そしてオプションを選択すると,必要なモジュールをネットワークから取ってきてくれるという仕掛けになっています。しかし,私の環境ではインストールプログラムが例外で落ちてしまったので,そのままではダウンロードできませんでした。しかたがないので,16M バイトの全部込みインストールファイルを ftp サイトから落としてきました。さっそく,インストールして使ったところではユーザインタフェースが UNIX みたいになっていました。これは,例えばダイアログの項目の選択にキーボードが使えないといったことを含んでいます。あと back ボタンが効かない,といった不具合があるようです。まぁ,β版ですから仕方のないところでしょう。
△「この空白は正常です」の謎
2000/04/07 [金]
このホームページの一番最後には,長い空白があって最後に「この空白は正常です」とのメッセージがあります。なんで,こんなに長い空白があるのでしょうか? 「きっと,ページ内容がたくさんあるように見せかけるためじゃん ?」-ハズレ。「Geocities では昔は index.html の内容に応じてアイコンが変わっていたので,わざわざ空白を入れて大きくしたのでは ?」-ハズレ。実は,この空白はこのようなリンクをしたときに見やすくするためなのです。もし下に空白がないと,ページの下がつかえてリンク対象先がブラウザの一番頭に来ることができなり,リンク先がわかりづらくなることがあるからなのです。ということで,「なに姑息なことやってるんだ?」とか思わないでくださいね (^ー^)。
△UNICODE のサロゲート
2000/04/06 [木]
UNICODE は,単一の 16bit に全世界のすべての文字をコード化して入れるという方針で作成された文字コード体系です。しかし,全世界のすべての文字を 16bit の中に入れることは不可能です。例えば,漢字だけで数万文字あります。その結果として UNICODE の当初の試みはあっさり破錠しました。そこでなんとか収録できる文字数を増やそうとして追加したのがこのサロゲートという考えです。
ここで用語を定義します。8bit をオクテット,16bit をバイトとします。すると,当初の UNICODE は,2オクテット,1バイトのコード体系を目指していたということになります。さてサロゲートというのは要するに,1 バイトの UNICODE 文字 2 つのペアで一つの文字をあらわすということです。つまり,2 バイトで一文字をあらわすということです。これは ASCII 文字に対するマルチバイト文字と同じ考え方です。
さて,ではどのようにして 1 バイトの文字と 2 バイトの文字を判別するのでしょうか? 実は,特定のコード領域がそのために割り当てられています。
UNICODE 名前
D800-DB7F 上位サロゲート (High Surrogate)
DB80-DBFF 上位私的利用サロゲート (Private Use High Surrogate)
DC00-DFFF 下位サロゲート (Low Surrogate)
この上位サロゲートと下位サロゲートをペアにして一文字を指定します。上位サロゲートと下位サロゲートのコード領域が分離しているため,後方から文字列をスキャンしても,そこがサロゲートペアであることが認識できるようになっています。具体的な組み合わせ方法は次の通りです。
上位バイト 下位バイト 名前
D800-DB7F DC00-DFFF サロゲート (Surrogate)
DB80-DBFF DC00-DFFF 私的利用サロゲート (Private Surrogate)
このサロゲートをペアにして表現する文字を ISO10646 にマップするときには,0x00010000-0x0010FFFF の領域にマップすることになっています。計算式は,おそらく ((上位バイト-0xD7C0)<<10)+(下位バイト-0xDC00) ではないかと思います。
△「MS-DOS プロンプト」の初期作業ディレクトリ
2000/04/05 [水]
Win9x で「MS-DOS プロンプト」を起動させると,通常初期設定されるカレントディレクトリ位置は C:\WINDOWS になっています。しかし,このディレクトリは Windows を起動・実行させる上で重要なファイルがたくさん格納されています。したがって,すべてのファイルを削除するコマンド「del *.*」をうかつに実行してしまうと大変なことになります。えっ,そんな間抜けなことやらないって? いかにも。しかし例えば,temp の中身を全部消そうとして "dir temp", "del *.*" とか思わずやってしまったら...。そんなことがあっても何とかなるように,「MS-DOS プロンプト」のプロパティの「プログラム」-「作業ディレクトリ(W):」の初期作業ディレクトリを変更しておきましょう。とりあえず,C:\WINDOWS\TEMP あたりがいいかも。
△Win2K のアプリケーションの追加と削除で電卓などの項目を表示/非表示にさせる方法
2000/04/04 [火]
Win2K では,ゲームといった使いもしないアプリケーションがいくつか始めから登録されている割には,アプリケーションの追加と削除にそれが表示されていないことがあります。あるいは,逆に登録や削除をできなくさせたいこともあります。そんな事ができるのでしょうか? 実はそれができるのです。まず表示させる場合には,WinNT\inf ディレクトリにある sysoc.inf ファイルをエディタなどで開きます。そしてその中にある [Components] セクションの中の「; old base components」の下にある行の中から HIDE という文字列を消すのです。例えば,AccessUtil=ocgen.dll,OcEntry,accessor.inf,HIDE,7 という行があれば,AccessUtil=ocgen.dll,OcEntry,accessor.inf,,7 のようにします。そしてコントロールパネルのアプリケーションの追加と削除を選び,Windows コンポーネントの追加と削除のボタンを押すと,アクセサリとユーティリティという項目が出現します。また,ここまでの記述でわかると思いますが,非表示にする場合には,該当個所に HIDE を記述すれば OK です。
△PCI のファンクション番号の列挙
2000/04/03 [月]
PCI バスに繋がっているデバイスの一覧を作成するときには,バス番号,デバイス番号,ファンクション番号を指定して,そのデバイスが存在しているかを検出します。したがって,取りうるすべてのバス番号,デバイス番号,ファンクション番号の値を指定して,それがエラーになるかどうかを調べればいいことになります。しかし,この方法には問題があります。それは,実際にはファンクションが一つしか存在していないのに,ファンクション番号すべてに応答してしまうデバイスがあるのです。
実は,これはファンクションの列挙の仕方が間違っているのでこのようなことが発生するのです。まずすべてのデバイスにはファンクション番号 0 は存在するというお約束になっているので,そこでそのファンクション番号を使って,デバイスがマルチファンクションデバイスかどうかを調べます。もしそうであればファンクション番号 0 以外にも存在しているので,他のファンクション番号を指定して存在を調べます。もしそうでないのならば,そのデバイスはその一つのファンクションしかありません。
結局のところ,前述した一つしかファンクションが存在していないのに,すべてのファンクション番号に応答するデバイスは,PCI の仕様には一応準拠していることになります。
△API: 特殊フォルダへの実際のパス
2000/04/02 [日]
いわゆる「スタートアップ」のフォルダ,あるいは「デスクトップ」のフォルダといった特殊なフォルダの実際の位置が記述してあるレジストリの位置はここで記したところにあります。しかし,実際に位置を取得するだけなら API を使用する方法があります。そのために利用する API は SHGetSpecialFolderPath という API で,完全なプロトタイプは HRESULT WINAPI SHGetSpecialFolderPath (HWND hwnd, LPTSTR path, int idx, BOOL fCreate) です。idx に特殊な定数,たとえば,「スタートアップ」なら CSIDL_STARTUP,「デスクトップ」なら CSIDL_DESKTOP を指定します。fCreate は指定されたフォルダが存在しなかったとき,そのフォルダを作成するかどうかを指定します。実際のパス名は,path に入ります。
△Microsoft も VC++ + MFC を無料開放 !
2000/04/01 [土]
Inprise がコマンドライン版の bcc5.5 を無料公開した影響か,あるいは司法省との戦いの影響からかはわかりませんが,何と Microsoft が VC++ のコマンドライン版と MFC を無料開放しました。ダウンロードは,通常の Web からはできず,Windows Update の機能を使わないとできないところが難点です。また,例によって一式ダウンロードしようとすると数十MByte のサイズがあるので,ダイアルアップしている人にはつらいかもしれません。ダウンロードはここを読んで行ってください。それにしても,Microsoft がこんなことを行うとは思いませんでした。ところで,今日は何月何日でしたっけ? はてはて?
▲2000/03
△BeOS が Free で公開 (2000/03/31)[金]
下であんな事を書いておきながら,なんか更新してしまふ。
もう,あちこちで話題になっているのですでにご存知の方も多いと思いますが,BeOS が Free で公開されました。これはかねてから Be 社によって宣言されていたもので,個人的な使用に対しては無料で BeOS を使用できるというものです。このサイトからダウンロードできますが,そのサイズは 40MByte 以上ということで,ちょっとダウンロードをためらってしまうところが残念なところです。(^_^;
△最終回 (2000/03/29)[水]
今まで,日記という形でいろいろな情報を書いてきたこのホームページですが,今回で一旦この日記は止めようと思います。というのも,毎日毎日ネタを見つけてきて書くのは結構大変で時間も取られます。この時間を少し別のことに使いたいのです。また毎日書くのは結構プレッシャーで,もう少し気楽にやりたいという思いもあります。とはいってもホームページ自体を閉鎖するというわけではなく,あくまでこの形態の日記を毎日更新するのを止めるということです。ホームページをここで開設してからほぼ一年がたち,最近アクセス数も増えてきたところですが,これも一つの区切りでしょう。今日始めてきてくれた人も,たまに来てくれた人も,そしてなにより,ほぼ欠かさず見てくれた人も,今までどうもありがとうございました。m(_ _)mそしてまた会う日までさようなら (T_T)/~~~
△geocities のサブディレクトリ階層制限 (2000/03/28)[火]
Geocities では以前書いたように,去年の 7 月くらいから ftp でサブディレクトリを作成,そこにデータを転送できるようになっていました。これはこれで喜ばしいのですが(とはいっても本ホームページは昔のなごりでぜんぜんサブディレクトリは使っていませんが...),どうやらその階層に制限があるようです。実験したところ,自分のルート ~/ から ~/1/2/ までのディレクトリが作成できました。ということで,二段階までのサブディレクトリが作成できるようです。それ以上作成しようとするとエラーになってしまいます。なぜに,このような制限ができているのかは謎です。何か特殊な事情でもあるのでしょうか? (^-^;
△2001 年問題 (2000/03/27)[月]
ちょっと前まで世間では 2000 年問題といって騒いでいましたが,実は来年からの問題も存在しているのです。それが 2001 年問題。
A> それにしても,去年 1999 年,つまり year nineteen ninety-nine は 2000 年問題だとか言って大騒ぎだったね。
B> 本当,年末は泊り込みとかして大変だったよ。それにしてもまさか今年や,来年 year twenty one もこんなことは起こらないよな。
A> え! 来年 21 年だって? 何言ってんだよ 2001 年だろ。
B> だから year twenty one だろ。
A> ? twenty one は 21 だろうが。まったく。
さて,このように 2001 年は英語で何というのかが問題です。例えば 1999 年は,1999 の上半分 19 (十九) と下半分 99 (九十九)に分けて year nineteen ninety-nine というよう発音しました。これと同じことを 2001 年に適用するとどうなるでしょうか。20 と 01 だから year twenty one となりますが,twenty one はまぎれもなく 21 のことですから,言っていることがぜんぜん違ってきてしまいます。さてこれはどうしたらいいのでしょうか。
解答: 2001 年は  と発音する
みなさん,わかりましたか? ちなみに,今年 2000 年の 2000 は,上半分と下半分に分割して発音するのではなく,ただ単に two thousand というらしいですよ。さて,答えですが,実は 2001 年は year twenty o-one と言うように,20+o(アルファベットのオゥ)+1 とわけて発音するようです。確かにこれなら,21 年と混同することはなくなりますね。これにて,2001 年問題解決 !
△Kill IE4/IE5 Logo / BeatTime が「突撃インターネット PC Vol.16」に収録 (2000/03/26)[日]
Kill IE4/IE5 Logo ver2.09 と BeatTime ver1.03 が 3/24 発売の softbank の A5 版の大きさのムック「突撃インターネット PC Vol.16」に収録されました。紙面に載っているのは BeatTime だけで後は CDROM の中のようです。BeatTime は画面写真と簡単な解説文が載っています。それにしても,この本はちょっと本屋で立ち読みとかするには恥ずかしいですね。
△Win2K 用 Tweak UI (2000/03/25)[土]
Windows で標準では設定できない設定項目を,設定可能にする Microsoft 謹製 Freesoft に Tweak UI というものがあります。このソフトはコントロールパネルの中にインストールされ,起動すると,設定ダイアログボックスが表示され,その中でサブメニューが出てくるまでの速度を設定したり,コンボボックスのアニメーションやリストボックスのアニメーション効果を個別に有効化無効化したりすることができます。この Tweak UI は Win9x 用のはよく知られていましたが,Win2K 用のは知られていませんでした。しかし,実は Win2K 用の Tweak UI は存在しているのです。どこにあるのかというと,ここです。これを入れると今までの Win9x 用の Tweak UI の機能に加え,cmd.exe 用の設定といった Win2K 固有の設定をいくつかすることができます。ただこれはまだ正式版ではないようです。
△DOS/Win9x で起動時に NumLock を On/Off する方法 (2000/03/24)[金]
以前ここで NT 起動時に NumLock を On にする方法を書きましたが,今回は DOS(-Mode),Win9x の場合です。この場合には,起動ドライブの \config.sys に NUMLOCK=ON または NUMLOCK=OFF という行を挿入します。config.sys に [common] と書かれた行がある場合には,その直後にでもこれを記述しておくとよいでしょう。
△Win2K と MBR の関係 (2000/03/23)[木]
ハードディスクから OS を起動するときには,ハードディスクの先頭にある MBR を読み込んでプログラム実行します。MBR にはブートマネージャがあります。ブートマネージャはハードディスクのパーティションのどの OS を起動させるかを選択し,その OS を起動させる役割を持っています。このブートマネージャを変更することで,起動したい OS をメニューで選択して起動するといったことも可能になります。しかし,Win2K を導入すると問題が起こることがあるようです。具体的には,ブートマネージャを新しい別のものに変更しても,なぜか Win2K を起動するとはじめのブートマネージャに戻されてしまうのです。ただし,必ずしも元に戻されるわけではなく大丈夫なブートマネージャ/設定?もあるようです。その具体的に条件はわかっていません。
△自プロセスの HINSTANCE を得る方法 (2000/03/22)[水]
Win32 GUI アプリケーションを作るとき,HINSTANCE の引数が必要な API を呼び出すことがあります。通常この HINSTANCE の値は,int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 関数の一番始めの引数で渡される値を指定します。しかし,これをいちいち保存しておくのも面倒です。何か簡単な方法はないでしょうか。実は GetModuleHandle を使うと取得できるのです。例えば,
#define GetHInstance( ) ((HINSTANCE)GetModuleHandle(0))
のように,引数として 0 を指定することで,自プロセスの HINSTANCE を得ることができます。
△最近の explorer のロゴ (2000/03/21)[火]
最近の explorer (例えば,Win98SE 付属のやつ) のロゴはクリックしても Microsoft のホームページに行かなくなったらしい。ロゴはいつも消していたので,さっぱり気づかなかった。いったいいつ頃からこうなったのかな? そこで Win98無印で試してみると,おぉ! これも行かなくなっている! ということで IE5 以降でこうなったと考えていいか。ただし,やはり目障り+画面を狭くするには変わりないので,やはり消すに限るというところでしょう。
△Kill IE4/IE5 Logo が「ウィンドウズパワー vol8」に収録 (2000/03/20)[月]
Kill IE4/IE5 Logo ver2.09 が 3/18 発売の ASCII の雑誌ウィンドウズパワー vol8 に掲載されました。ページは前回と同じ p.70 です。前回同様,画面写真(タスクトレイアイコン+ポップアップメニュー)と解説文があります。今回は VerUp のマークが付いてました (^^)。
△“プログラミング言語 C の新機能”完結 (2000/03/19)[日]
1999/03/13 から 2000/03/17 という,非常に長い期間にわたって続けてきた“プログラミング言語 C の新機能”は,一応 2000/03/17 の “Part LVI: fenv.h: 浮動小数点環境: 関数” で完結にしようと思います。そこで,それを祝して“プログラミング言語 C の新機能”の各項目をすべて一つのファイルにしたページを作成しました。なんとそのサイズ約 200K !,Web ブウラザから印刷しようとすると 50 ページ以上になるという分量です。書き始めたときにはこんな量になるとは思っていませんでした。我ながらずいぶん書いたものだと思います。
さて,実際の内容については,皆様の役に立ったかどうかはわかりませんが(間違いもたくさんあるかもしれないし...),それでも新しい機能の概略を知るのには役立ったと自分では思っているので,ここはひとつ,祝! 完結!!! \(^o^)/。
△Inprise bcc5 コマンドライン版のダウンロード (2000/03/18)[土]
ようやく,Inprise bcc5 のコマンドライン版のダウンロードができた。はじめはブラウザや GUI の ftp ソフトを使って落とそうとしたのだけど,なぜかうまくいかない。そこでコマンドライン版の懐かしい ftp コマンドを使用することでようやく落とすことができた。それにしても,ftp サーバがいつのまにか三つに増えて,前よりダウンロードしやすくなっている。またサイズは 8.2M と結構大きい。
ダウンロードしたモジュールを解凍すると,bin/, examples/, help/, include/, lib/ のディレクトリができ,それぞれの内容が解凍される。解答内容はいたってシンプルで,また,使い方もろくに書いていなかったりする (^_^;)。まぁ大体知っているからいいけど...。
ちなみに,4/18発売の C マガジン 5 月号の付録 CD に収録されるようなので急がない人は慌ててダウンロードする必要はないかも。
△プログラミング言語 C の新機能 Part LVI: fenv.h: 浮動小数点環境: 関数(2000/03/17)[金]
今回は fenv.h で新たに定義された関数について説明します。
例外(exceptions)制御関数
名前 プロトタイプ 解説
fegetexceptflag
void fegetexceptflag(fexcept_t *f, int e);
e で指定された例外フラグを実装定義依存の値として f に格納する。
fesetexceptflag
void fesetexceptflag(const fexcept_t *f, int e);
f で指定されたオブジェクトでの表現に従い,e で指定された例外フラグに対する完全な状態をセットする。この関数ではフラグの状態をセットするだけで例外は発生しない。
feclearexcept
void feclearexcept(int e);
e で指定された例外フラグをクリアする。
fetestexcept
int fetestexcept(int e);
e で指定された例外フラグが現在セットされているか検査し,セットされている例外フラグ値を返す。
feraiseexcept
void feraiseexcept(int e);
e で指定された例外を発生させる。overflow または underflow 例外を発生させた後常に inexact 例外を発生させるかどうかは実装依存である。
丸め(rounding)制御関数
名前 プロトタイプ 解説
fegetround
int fegetround(void);
現在の丸モードを丸めフラグの値で返す。
fesetround
int fesetround(int r);
r で指定された丸めモードにセットする。引数が丸めフラグの値でないときは状態は変更されない。引数が丸めフラグのときに限り 0 を返す。
環境(environment)操作関数
名前 プロトタイプ 解説
fegetenv
void fegetenv(fenv_t *e);
現在の浮動小数点環境を e に格納する。
fesetenv
void fesetenv(const fenv_t *e);
現在の浮動小数点環境に指定された浮動小数点環境 e を設定する。
feholdexcept
int feholdexcept(fenv_t *e);
現在の浮動小数点環境を e に格納し,例外フラグをクリアし,可能であれば全例外に対し(例外でも継続する)非停止モードに設定する。もし非停止モードに設定できたときは 0 を返す。
feupdateenv
void feupdateenv(const fenv_t *e);
現在発生した例外を一時領域に格納し,e で指定された浮動小数点環境を設定した後,一時領域に格納した例外を発生させる。
△Oh! X 2000 年春号いつのまにか発売 (2000/03/16)[木]
今や謎のコンピュータ雑誌として知られている Softbank の Oh! X 2000 年春号がいつの間にか発売されています。今回の特集は Game Creation! ということで,例によっていろいろごちゃぢこゃ書いてあります。いや~,まだぜんぜん読んでません。それにしても,前回は 1999 年夏号でしたからちょっと間隔が開きましたね。
△プログラミング言語 C の新機能 Part LV: fenv.h: 浮動小数点環境: プラグマ/型/マクロ(2000/03/15)[水]
C99 では新たに fenv.h を提供しています。このヘッダは,今まで各環境で扱いがバラバラであった浮動小数点演算における例外と丸め制御を抽象化し扱うためのものです。そのため新たなプラグマ,型,マクロ,関数が定義されています。
まず fenv.h の include で利用可能になるプラグマとしては以前紹介した
#pragma STDC FENV_ACCESS on-off-switch
があります。
今回は,型とマクロ,そして次回は関数について示します。
fenv.h 型
型名 解説
fenv_t 浮動小数点環境全体を表す型
fexcept_t 浮動小数点例外フラグ群を表す型。fenv.h で定義される例外フラグの値が入るとは限らない。
fenv.h マクロ
マクロ名 解説
例外フラグ
FE_DEVBYZERO
FE_INEXACT
FE_INVALID
FE_OVERFLOW
FE_UNDERFLOW
fenv.h の中の関数で使用される例外の種類をあらわすマクロ。その例外が実装されているときだけ対応するマクロが定義される。各マクロの値は整数定数(式)に展開される値であり,各値それぞれを bit or できる値。また,FE_UPPERCASESTRING のように,FE_ の後に大文字の文字列が続くマクロは,実装依存の例外をあらわしている。UPPERCASESTRING の部分は,実際は実装依存の例外名に入れ替わる。
FE_ALL_EXCEPT 前記の実装依存の例外フラグを含めた全例外フラグの値をすべて or した値。
丸めフラグ
FE_UPWARD
FE_DOWNWARD
FE_TOWARDZERO
FE_TONEAREST
fegetroun/fesetround 関数で使用される値で,それぞれの丸めモードがその環境で実装されているときだけ対応するマクロが定義される。各マクロは正数定数(式)に展開される。FLT_ROUNDS で利用される値と兼用できる。また,FE_UPPERCASESTRING のように,FE_ の後に大文字の文字列が続くマクロは,実装依存の丸めをあらわしている。UPPERCASESTRING の部分は,実際は実装依存の丸め名に入れ替わる。
環境
FE_DFL_ENV 型 const fenv_t * を持つ,デフォルト浮動小数点環境。cont fenv_t * の型を持つ名前 FE_xxxx は実装依存の環境名をあらわす。xxxx は対応する環境をあらわす名前である。
△REG: システムのプロパティで CPU のモデル番号を表示する方法 (2000/03/14)[火]
Win9x の「システムのプロパティ」-「全般」のタブでは,通常 CPU の種類しか表示されません。しかし,ここに Family/Model/Stepping 番号を表示させることができます。その方法は,「HKEY_LOCAL_MACHINE\Hardware\Description\System\CentralProcessor\0」の中の「VendorIdentifier」の文字列値「GenuineIntel」を「Genuine Intel」のように,空白を一つ入れた文字列に変更するのです。すると,「x86 Family 6 Model 5 Stepping 0」のように表示がされます。△プログラミング言語 C の新機能 Part LIV: tgmath.h: 型汎用数学関数(2000/03/13)[月]
今まで見てきたように,今回の C 言語では complex 型がサポートされ,また数学関係の関数が大量に追加,強化されています。しかし,実際の使用では面倒なことが起こることがあります。例えば,sin 関数を使うことを考えると,float 型の引数に対しては sinf を,double 型の変数に対しては sin を使用する必要があります。しかし後から精度が足りなくなってそれらの型を long double 型に変更した場合には,すべての関数名を sinl に変更しなくてはなりません。これは面倒です。またいちいち実数型,複素数型の関数名を覚えるのは面倒です。sin って書いたら適当に判別してくれたらいいのに! tgmath.h はまさにその機能を提供します。
tgmath.h を include すると,引数型に応じ自動的に適切な名前に関数名が展開されます。例えば,sin 関数の引数に double 型または int 型を書くと sin 関数に,long double 型を書くと sinl 関数に,float 型を書くと sinf に,float complex 型を書くと csinf に,long double complex 型を書くと csinl にといった具合です。
実際の展開方法は次のように行います。まず,引数が complex 型である場合,対応する complex.h の中にある複素数関数に展開されます。もし引数に long double 型があるなら math.h の中の対応する実数関数 xxxxl に展開されます。もし引数に double 型または int 型のような整数型があるなら実数関数 xxxx に展開されます。さもなくば,float 型の指定とみなし xxxxf に展開します。また展開の結果対応する関数が存在していないような場合,その動作は未定義となります。
なお,tgmath.h は自動的に math.h と complex.h を include します。
最後に,tgmath.h で定義される関数名とその展開後の名前の一覧を示します。
tgmath.h で定義されるマクロとその展開先関数名一覧
tgmath.h math.h complex.h
generic double float long double double complex float complex long double complex
sin sin sinf sinl csin csinf csinl
cos cos cosf cosl ccos ccosf ccosl
tan tan tanf tanl ctan ctanf ctanl
asin asin asinf asinl casin casinf casinl
acos acos acosf acosl cacos cacosf cacosl
atan atan atanf atanl catan catanf catanl
sinh sinh sinhf sinhl csinh csinhf csinhl
cosh cosh coshf coshl ccosh ccoshf ccoshl
tanh tanh tanhf tanhl ctanh ctanhf ctanhl
asinh asinh asinhf asinhl casinh casinhf casinhl
acosh acosh acoshf acoshl cacosh cacoshf cacoshl
atanh atanh atanhf atanhl catanh catanhf catanhl
exp exp expf expl cexp cexpf cexpl
log log logf logl clog clogf clogl
pow pow powf powl cpow cpowf cpowl
sqrt sqrt sqrtf sqrtl csqrt csqrtf csqrtl
fabs fabs fabsf fabsl cabs cabsf cabsl
atan2 atan2 atan2f atan2l N/A
cbrt cbrt cbrtf cbrtl N/A
ceil ceil ceilf ceill N/A
copysign copysign copysignf copysignl N/A
erf erf erff erfl N/A
erfc erfc erfcf erfcl N/A
exp2 exp2 exp2f exp2l N/A
expm1 expm1 expm1f expm1l N/A
fdim fdim fdimf fdiml N/A
floor floor floorf floorl N/A
fma fma fmaf fmal N/A
fmax fmax fmaxf fmaxl N/A
fmin fmin fminf fminl N/A
fmod fmod fmodf fmodl N/A
frexp frexp frexpf frexpl N/A
hypot hypot hypotf hypotl N/A
ilogb ilogb ilogbf ilogbl N/A
ldexp ldexp ldexpf ldexpl N/A
lgamma lgamma lgammaf lgammal N/A
llrint llrint llrintf llrintl N/A
llround llround llroundf llroundl N/A
log10 log10 log10f log10l N/A
log1p log1p log1pf log1pl N/A
log2 log2 log2f log2l N/A
logb logb logbf logbl N/A
lrint lrint lrintf lrintl N/A
lround lround lroundf lroundl N/A
nearbyint nearbyint nearbyintf nearbyintl N/A
nextafter nextafter nextafterf nextafterl N/A
nexttoward nexttoward nexttowardf nexttowardl N/A
remainder remainder remainderf remainderl N/A
remquo remquo remquof remquol N/A
rint rint rintf rintl N/A
round round roundf roundl N/A
scalbn scalbn scalbnf scalbnl N/A
scalbln scalbln scalblnf scalblnl N/A
tgamma tgamma tgammaf tgammal N/A
trunc trunc truncf truncl N/A
creal N/A creal crealf creall
cimag N/A cimag cimagf cimagl
carg N/A carg cargf cargl
conj N/A conj conjf conjl
cproj N/A cproj cprojf cprojl
注意:
N/A には対応する関数が存在しない。指定すると未定義の動作を意味する。
色以外のすべての関数は,今回の C の規格で追加された関数。
△プログラミング言語 C の新機能 Part LIII: math.h: 関数: 操作/最大/最小/正の差/乗算して加算関数(2000/03/12)[日]
長かったけれども,math.h に追加された関数は今回第三回目で最終回です。
操作関数(manipulation functions)
名前 プロトタイプ 解説
copysign
double copysign(double x, double y);
float copysignf(float x, float y);
long double copysignl(long double x, long double y);
x の値と y の符号を持った新しい値を返します。
nan
double nan(const char *p);
float nanf(const char *p);
long double nanl(const char *p);
(sprintf(buf, "NAN(%s)", p), strtod(buf, NULL)) と同じ,もしくは,もし p の指す先が NAN(...) に対し有効な文字を指していないとき,または空文字列を指していないときは strtod("NAN", NULL) と同じ,非例外発生(quiet) NaN を返す。もし 非例外発生(quiet) NaN をサポートしていなければ 0 を返す。
nextafter
double nextafter(double x, double y);
float nextafterf(float x, float y);
long double nextafterl(long double x, long double y);
y 方向での x の次に表現可能な値を返す。x と y が等しいときは y を返す。range error の可能性あり。
nexttoward
double nexttoward(double x, long double y);
float nexttowardf(float x, long double y);
long double nexttowardl(long double x, long double y);
nextafter の第二パラメータ long double 版。
最大/最小/正の差関数(maximum, minimum and positive difference functions)
名前 プロトタイプ 解説
fmax
double fmax(double x, double y);
float fmaxf(float x, float y);
long double fmaxl(long double x, long double y);
x と y のうち,大きい方の値を返す。
fmin
double fmin(double x, double y);
float fminf(float x, float y);
long double fminl(long double x, long double y);
x と y のうち,小さい方の値を返す。
fdim
double fdim(double x, double y);
float fdimf(float x, float y);
long double fdiml(long double x, long double y);
x > y なら x-y を,それ以外なら +0 を返す。range error の可能性あり。
乗算して加算する関数
名前 プロトタイプ 解説
fma
double fma(double x, double y, double z);
float fmaf(float x, float y, float z);
long double fmal(long double x, long double y, long double z);
x * y + z を返す。丸めは FLT_ROUNDS に従って最後に一度だけ行われる。また,FP_FAST_FMA, FP_FAST_FMAF, FP_FAST_FMAL が定義されていると,それぞれ対応する関数で x * y + z と個別に計算するより高速に計算できる(例えばハードウエアでの一命令による直接計算)。
△Free C/C++ Compiler Inprise Bcc5.5 日本語版も登場 (2000/03/11)[土]
皆様,もう既にご存知の方も多いと思いますが,一応ここにも書いておきましょう。少し前に Inprise が Bcc5.5 コマンドライン版を Free Download できるようにしたと書きましたが,なんと,日本の Inprise でも日本語版の Bcc5.5 を Free Download できるようにしてしまいました。\(^O^)/。さっそく,ダウンロードしようとしたのですが...混んでて ftp サーバに繋がりません (T_T)。みんな考えることはいっしょということですね。△プログラミング言語 C の新機能 Part LII: math.h: 関数: エラー/ガンマ/丸め/余り関数(2000/03/10)[金]
今回は math.h に追加された関数の二回目で,エラー/ガンマ/丸め/余り関数です。
エラー/ガンマ関数(error/gamma functions)
名前 プロトタイプ 解説
erf
double erf(double x);
float erff(float x);
long double erfl(long double x);
エラー関数 (error function)
2 x
e-t2 dt
√π 0
を計算します。(IE だと正しく表示されません。-t2 → -t2)
erfc
double erfc(double x);
float erfcf(float x);
long double erfcl(long double x);
補足(?)エラー関数(complementary error function)
2
e-t2 dt
√π x
を計算します。x が大きすぎると range error の可能性あり。(IE だと正しく表示されません。-t2 → -t2)
tgamma
double tgamma(double x);
float tgammaf(float x);
long double tgammal(long double x);
ガンマ関数 Γ(x) を計算します。x が 0 以下の場合 domain error。 x が大きすぎ/小さすぎる場合 range error の可能性あり。
lgamma
double lgamma(double x);
float lgammaf(float x);
long double lgammal(long double x);
loge|Γ(x)| を計算します。x が大きすぎる場合,または 0 以下の場合は range error。
丸め関数(nearest integer functions)
名前 プロトタイプ 解説
nearbyint
double nearbyint(double x);
float nearbyintf(float x);
long double nearbyintl(long double x);
x を現在の丸め方向にしたがって,浮動小数点形式の整数値に丸めます。inexact(不正確) 例外は発生しません。
rint
double rint(double x);
float rintf(float x);
long double rintl(long double x);
x を現在の丸め方向にしたがって,浮動小数点形式の整数値に丸めます。inexact 例外の発生の可能性あり。
lrint
llrint
long lrint(double x);
long lrintf(float x);
long lrintl(long double x);
long long llrint(double x);
long long llrintf(float x);
long long llrintl(long double x);
x を現在の丸め方向にしたがって,最も近い整数値に丸めます。結果が範囲外の場合は結果は未定義です。x が大きすぎると range error の可能性あり。
lrint は戻り値が long,llrint はその long long 版。
round
double round(double x);
float roundf(float x);
long double roundl(long double x);
x を現在の丸め方向にかかわらず,中間値(0.5)を基準に 0 から遠い方向へ,浮動小数点形式の整数値に丸めます。
lround
llround
long lround(double x);
long lroundf(float x);
long lroundl(long double x);
long long llround(double x);
long long llroundf(float x);
long long llroundl(long double x);
x を現在の丸め方向にかかわらず,中間値(0.5)を基準に 0 から遠い方向へ,浮動小数点形式の整数値に丸めます。結果が範囲外の場合は結果は未定義です。x が大きすぎると range error の可能性あり。
lround は戻り値が long,llround はその long long 版。
trunc
double trunc(double x);
float truncf(float x);
long double truncl(long double x);
現在の丸め方向にかかわらず,x をその値より大きくならない方向に,浮動小数点形式の整数値に丸めます。
余り関数(remainder functions)
名前 プロトタイプ 解説
remainder
double remainder(double x, double y);
float remainderf(float x, float y);
long double remainderl(long double x, long double y);
y が 0 以外のとき定義され,x REM y の結果の値 r を返します。r は r = x - n × y から導かれます。n は x/y を正確に表現するのに最も近い整数値で |n - x/y|=1/2 がいつでも成り立つ偶数です。r が 0 なら符号は x の符号と等しくなります。
remquo
double remquo(double x, double y, int *quo);
float remquof(float x, float y, int *quo);
long double remquol(long double x, long double y, int *quo);
remainder と同じ。quo には,x/y の符号と,2n(n は 3 以上の実装定義値)を法とする x/y の整数の商を持つ値が入ります。
△Kill IE4/IE5 Logo が 「Windows 2000 Utilites」に収録 (2000/03/09)[木]
Kill IE4/IE5 Logo ver2.09 が先月 2/18 から発売中のパッケージ「Windows 2000 Utilities」 に収録されました。で,その「取り扱い説明書」の 64 ページにオプション設定画面の写真と共に説明があります。それにしても,パッケージに収録されたのは始めて。一応,扱いから見る目玉は,「Impression Gallery」(ファイル管理+画像他ファイルビューワ),「HUNTER 2000」(jpeg,gif,lzh,zip,mp3 auto downloader),「画像編集局 2000」で,これにフリーソフト 100本以上となっています。ちなみに,定価 \8,800- ,特別初回定価 \5,800- です。△プログラミング言語 C の新機能 Part LI: math.h: 関数: 逆双曲線/指数/対数/べき乗関数(2000/03/08)[水]
math.h で定義されているほとんどの関数には double 型,float 型,long double 型を引数として受け取り,結果をその型として返す関数が追加されています。例えば,従来の sin 関数は double sin(double x); しか存在しなかったのが,今回からは,これに加え float sinf(float x);, long double sinl(long double x); のように float 型の関数 xxxxf,long double 型の関数 xxxxl が存在します。これに当てはまる math.h に従来から存在している関数は sin/cos/tan / asin/acos/atan/atan2 / sinh/cosh/tanh / exp/log/log10/pow/sqrt / fabs / ceil/floor / fmod/frexp/ldexp があります。今回は,これらの関数の説明は行いません。
さて,これから新たに math.h に追加された関数を三回に分けてお送りします。今回は,逆双曲線関数/指数関数/対数関数/べき乗関数です。
逆双曲線関数(arc hyperbolic functions): asinh/acosh/atanh
名前 asinh
double asinh(double x);
float asinhf(float x);
long double asinhl(long double x);
acosh
double acosh(double x);
float acoshf(float x);
long double acoshl(long double x);
atanh
double atanh(double x);
float atanhf(float x);
long double atanhl(long double x);
ヘッダ math.h
引数 x: asinh/acosh/atanh の演算に対する引数
acosh:x が 1 未満の値で domain error
atanh:[-1,+1]以外だと domain error。x が -1 か +1 の時は range error がおこるかも。
戻値 演算結果
acosh: [0, +∞]の範囲
解説 x で示される値を関数の引数として,それぞれ arc hyperbolic sine/arc hyperbolic cosine/arc hyperbolic tangent の演算を行います。
指数/対数関数(exponential/logarithmic functions)
名前 プロトタイプ 解説
exp2
double exp2(double x);
float exp2f(float x);
long double exp2l(long double x);
2x を計算します。x があまりに大きいと range error の可能性あり。
expm1
double expm1(double x);
float expm1f(float x);
long double expm1l(long double x);
ex-1 を計算します。x があまりに大きいと range error の可能性あり。
log2
double log2(double x);
float log2f(float x);
long double log2l(long double x);
log2 x を計算します。x が 0 未満の場合 domain error。x が 0 だと range error の可能性あり。
log1p
double log1p(double x);
float log1pf(float x);
long double log1pl(long double x);
loge (x+1) を計算します。x が -1 未満の場合 domain error。x が -1 だと range error の可能性あり。
logb
double logb(double x);
float logbf(float x);
long double logbl(long double x);
x のべき指数を,浮動小数点形式の符号付き整数として取り出します。x が 0 の場合 domain error の可能性あり。
ilogb
int ilogb(double x);
int ilogbf(float x);
int ilogbl(long double x);
x のべき指数を符号付き int として取り出します。x が 0 だと range error の可能性あり。
x 戻り値
0 FP_ILOGB0
INT_MAX
NaN FP_ILOGBNAN
(int)logb(x)
scalbn
scalbln
double scalbn(double x, int n);
float scalbnf(float x, int n);
long double scalbnl(long double x, int n);
double scalbln(double x, long n);
float scalblnf(float x, long n);
long double scalblnl(long double x, long n);
x × FLT_RADIXn を計算します。range error の可能性があります。
scalbn は int 型の引数を,scalbln は long int 型の引数を取る点が違います。
べき乗関数(power functions)
名前 プロトタイプ 解説
cbrt
double cbrt(double x);
float cbrtf(float x);
long double cbrtl(long double x);
3√x を計算します。
hypot
double hypot(double x, double y);
float hypotf(float x, float y);
long double hypotl(long double x, long double y);
過度のアンダーフローやオーバーフローなしに,原点からの距離 √(x2+y2) を計算します。range error の可能性あり。
△Win2K における APM/ACPI インストールの判別方法 (2000/03/07)[火]
Windows 2000 では,従来から用いられている電源管理方式 APM に加え,ACPI も使用できます。というか ACPI を標準的に用いるよう作成されています。しかしすべての PC で ACPI でインストール可能になるわけではありません。BIOS が ACPI 対応しているのに加え,BIOS が 1999/01/01 以降に作成されたものであることが条件の一つになっています。したがって,ACPI に対応しているはずなのに,APM でインストールされてしまう人は BIOS を update してみるのも一つの解になるでしょう。△プログラミング言語 C の新機能 Part L: math.h: 関数型マクロ(2000/03/06)[月]
math.h の新たな関数型マクロについて紹介します。
math.h 追加関数型マクロ
マクロ名 解説
fpclassify(x) 引数 x が NaN, 無限大, normal, subnormal, 0 かどうかを判定し,結果を,FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO として返す。
isfinite(x) x が無限大または NaN でなければ整数非ゼロを返す。
isinf(x) x が正または負の無限大ならば整数非ゼロを返す。
isnan(x) x が NaN ならば整数非ゼロを返す。
isnormal(x) x が normal (fplassify(x) が FP_NORMAL を返す場合) ならば整数非ゼロを返す。
signbit(x) x が 負のとき整数非ゼロを返す。ゼロや無限大,NaN の時も正負の判定を行って値を返す。
math.h 比較関数型マクロ
マクロ名 解説
isgreater(x, y) (x) > (y) を返す。ただし x と y が順序付けできないときでも例外を発生しない。
isgreaterequal(x, y) (x) >= (y) を返す。ただし x と y が順序付けできないときでも例外を発生しない。
isless(x, y) (x) < (y) を返す。ただし x と y が順序付けできないときでも例外を発生しない。
islessequal(x, y) (x) <= (y) を返す。ただし x と y が順序付けできないときでも例外を発生しない。
islessgreater(x, y) (x) > (y) || (x) < (y) を返す。ただし x と y が順序付けできないときでも例外を発生しない。
isunordered(x, y) (x) と (y) が順序付けできないとき整数 1,さもなくば整数 0 を返す。
注:
順序付けできないとは,引数に NaN がある時。具体的には (NaN, 値),(値, NaN),(NaN, NaN) の時。
通常の比較演算子を使った比較では NaN があると不正例外が発生する。これらのマクロを使用時にはいかなる時もそのような例外は発生しない。
△プログラミング言語 C の新機能 Part XLIX: math.h: 通常マクロ/プラグマ(2000/03/05)[日]
math.h に新たなマクロが定義されています。また math.h の include で利用可能になるプラグマとしては以前紹介した
#pragma STDC FP_CONTRACT on-off-switch
があります。マクロには関数型マクロも定義されています。これは次回説明します。
math.h 追加マクロ
マクロ名 解説
HUGE_VAL
HUGE_VALF
HUGE_VALL 範囲エラーが起こったときに返される正の double/float/long double 定数(式)。値を正の無限大としてもよい。HUGE_VALF, HUGE_VALL が今回の追加。HUGE_VAL は以前から存在。
INFINITY 正または符号無しの無限大をあらわす float 型の定数(式)に展開される。もしそれができない環境では translation 時にオーバーフローする float 型の正の定数に展開される。
NAN 浮動小数点型が非例外発生 (quiet) NaN を実装しているときだけ定義される。非例外発生 (quiet) NaN を表現する float 型の定数(式)に展開される。
FP_INFINITE
FP_NAN
FP_NORMAL
FP_SUBNORMAL
FP_ZERO 浮動小数点の値を分類する,それぞれ一意な整数定数(式)。fpclassify( ) マクロの戻り値に使用される。
FP_FAST_FMA
FP_FAST_FMAF
FP_FAST_FMAL fma/fmaf/fmal(a,b,c) 関数が普通に a*b+c と計算するより早く(例えばハードウエアで直接に)計算できるとき定義される。
FP_ILOGB0
FP_ILOGBNAN ilogb(x)関数の戻り値として使用される整数定数(式)。x が 0 の時は FP_ILOGB0 (INT_MIN か -INT_MAX を値として推奨),x が NaN の時は FP_ILOGBNAN (INT_MAX か INT_MIN を値として推奨) が返される。
△REG:特定フォルダの実際のパス (2000/03/04)[土]
Windows ver4 (Win95) 以降から shell が explorer に変わり,それに伴っていくつか特定のフォルダが使われるようになりました。例えば,いわゆる「スタートアップ」のフォルダ,あるいは「デスクトップ」のフォルダです。しかしこれらのフォルダの実際の位置は各国版の Windows や,また同じ Windows でもログイン名によって異なったりします。したがって,パスを決め打ちすることはできません(たまに,アプリケーションをインストールするとパスの決め打ちがあって,変なところに勝手にフォルダを作る物がある...)。だから,実際のパスを調べるときには,「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」の中の値を調べるようにしましょう。例えば,「Startup」の値を取り出せば,そこへの実際パスが,「Desktop」の値を取り出せばデスクトップフォルダへの実際のパスが取り出せます。△プログラミング言語 C の新機能 Part XLVIII: math.h: 型: float_t, double_t(2000/03/03)[金]
今回,math.h の内容がかなり power up されています。すごいボリュームで書くのが嫌です。新しくマクロ,typedef,関数が追加されたのに加え,ほとんどの関数には double 型,float 型,long double 型を引数として受け取り,結果をその型として返す関数が追加されています。例えば,従来の sin 関数は double sin(double x); しか存在しなかったのが,今回からは,これに加え float sinf(float x);, long double sinl(long double x); のように float 型の関数 xxxxf,long double 型の関数 xxxxl が存在します。とりあえず,今回は追加された二つの typedef について説明します。
追加された二つの typedef とは float_t と double_t です。これらの実際の型は float.h で定義されている前回説明した FLT_EVAL_METHOD の値により変化します。具体的には次の通りです。ただし float.h が自動的に include されるわけではないので,以下はそのまま使えるわけではありません。
#if   FLT_EVAL_METHOD==0
typedef float float_t;
typedef double double_t;
#elif FLT_EVAL_METHOD==1
typedef double float_t;
typedef double double_t;
#elif FLT_EVAL_METHOD==2
typedef long double float_t;
typedef long double double_t;
#else
float_t, double_t は実装依存の型
#endif
△閏年未対応製品産出企業 - It's a Sony. (2000/03/02)[木]
最近の家庭ではどこにでもあるとおもいますが,うちにもビデオデッキ(Sony 製) があります。このビデオは結構昔に買ったものですが,それほど大昔というわけではなく,いちおう BS も録画できるしろ物です。当然,今日日のビデオとして例外なく,本体とリモコンのセットになっています。このシステムがまた「いかしている」のが,リモコンで設定できる項目(例えば録画の予約)が本体側では設定できないという点です。つまりリモコンの電池がなくなったら録画予約などの操作が一切できなくなってしまうということです。
まぁ,これはいいとして,今回の話題はこのリモコンを使った録画予約についてです。実は先月の 2/29 に TV の録画をしようと思って,録画予約をしました。ただ皆さんご存知の通り今年の 2/29 は閏年でした。もちろん,まともな頭を持った人間が作っているはずですから,よもや閏年ごときにビデオが惑わされることなどないと思っていました。しかしやってくれました! この Sony のビデオは! なんとリモコン側の日付だけ閏年に対応していなかったのです! もしも本体もリモコンも閏年に対応していなければ何も問題なく録画できました(当日予約したので)。またもしも本体とリモコン両方とも閏年に対応していれば(というかこれが普通)こんなことにはなりませんでした。しかしよりによって,あろうことか本体は対応していて,リモコンは対応していなかったのです! したがって,録画すべき日付が一日ずれてしまいました。
誰だ,このリモコン作ったやつ! 閏年の判定アルゴリズムなんて,その辺の本にすら転がっているというのになんでそんなものがまともに実装できないのだ? いったいどこの製品だ? It's a Sony.△プログラミング言語 C の新機能 Part XLVII: float.h: FLT_EVAL_METHOD, DECIMAL_DIG(2000/03/01)[水]
float.h に新たに,DECIMAL_DIG と FLT_EVAL_METHOD の二つのマクロが追加されました。
float.h 追加マクロ
マクロ名 解説
DECIMAL_DIG 浮動小数点型で表現できる最大の10進桁数 (ようするに FLT_DIG, DBL_DIG, LDBL_DIG の最大値)
FLT_EVAL_METHOD 実際に浮動小数点演算を行うときの範囲と精度を示す値
float型 double型 long double型
0 FLOAT DOUBLE LONG_DOUBLE
1 DOUBLE DOUBLE LONG_DOUBLE
2 LONG_DOUBLE LONG_DOUBLE LONG_DOUBLE
-1 確定できない
<-1 実装定義
実際の計算は,FLOAT=float 型,DOUBLE=double 型,LONG_DOUBLE=long double 型のもつ範囲と精度で行われる
例えば,FLT_EVAL_METHOD が 1 の時は,float型 ← float型 + float型 の計算でも,float型 ← (float型)((double型)float型 + (double型)float型) として計算が行われる。計算途中でも浮動小数点型の表現範囲とその精度が異なると,同じ値で同じ計算を行っても結果が異なることがある。
▲2000/02
△Win2K での電源ボタンオフによるシャットダウン (2000/02/29)[火]
Windows2000 で ACPI を使用しているときには,コントロールパネルの中の「電源オプション」-「詳細」-「電源ボタン」-「コンピュータの電源ボタンを押したとき(E):」が「電源オフ」になっていると,電源ボタンをオフにしたとき自動的に Windows2000 をシャットダウンして,電源をオフにすることができます。ご存知でした? ただしこの方法によるシャットダウンは最低限必要なシャットダウン処理を行ってすぐ終了してしまうらしく,メモ帳などで編集しかけていても「変更を保存しますか?」のダイアログすらでません。したがって,この機能の使用には注意が必要です。
△プログラミング言語 C の新機能 Part XLVI: COMPLEX#4: complex.h: 関数(2000/02/28)[月]
complex.h では,複素数を扱った計算が簡単にできるように,多くの関数を用意しています。これらの関数のうち,引数として角度を要求しているものについてはその単位は度ではなくラジアンです。また実装によってはエラーが発生したときに errno に値をセットするものがあります。
#以下間違ってたらごめんね~
三角関数(trigonometric functions): csin/ccos/ctan
名前 csin
double complex csin(double complex z);
float complex csinf(float complex z);
long double complex csinl(long double complex z);
ccos
double complex ccos(double complex z);
float complex ccosf(float complex z);
long double complex ccosl(long double complex z);
ctan
double complex ctan(double complex z);
float complex ctanf(float complex z);
long double complex ctanl(long double complex z);
ヘッダ complex.h
引数 z: csin/ccos/ctan の演算に対する引数
戻値 演算結果
解説 z で示される値を関数の引数として,それぞれ sin/cos/tan の演算を行います。
逆三角関数(arc trigonometric functions): casin/cacos/catan
名前 casin
double complex casin(double complex z);
float complex casinf(float complex z);
long double complex casinl(long double complex z);
cacos
double complex cacos(double complex z);
float complex cacosf(float complex z);
long double complex cacosl(long double complex z);
catan
double complex catan(double complex z);
float complex catanf(float complex z);
long double complex catanl(long double complex z);
ヘッダ complex.h
引数 z: casin/cacos/catan の演算に対する引数
casin/cacos:実数部[-1,1]の外側を枝切り
catan:虚数部[-1,1]の外側を枝切り
戻値 演算結果
casin/catan:実数部は[-π/2,π/2]の範囲
cacos:実数部は[0,π]の範囲
解説 z で示される値を関数の引数として,それぞれ arc sine/arc cosine/arc tangent の演算を行います。
双曲線関数(hyperbolic functions): csinh/ccosh/ctanh
名前 csinh
double complex csinh(double complex z);
float complex csinhf(float complex z);
long double complex csinhl(long double complex z);
ccosh
double complex ccosh(double complex z);
float complex ccoshf(float complex z);
long double complex ccoshl(long double complex z);
ctanh
double complex ctanh(double complex z);
float complex ctanhf(float complex z);
long double complex ctanhl(long double complex z);
ヘッダ complex.h
引数 z: csinh/ccosh/ctanh の演算に対する引数
戻値 演算結果
解説 z で示される値を関数の引数として,それぞれ hyperbolic sine/hyperbolic cosine/hyperbolic tangent の演算を行います。
逆双曲線関数(arc hyperbolic functions): casinh/cacosh/catanh
名前 casinh
double complex casinh(double complex z);
float complex casinhf(float complex z);
long double complex casinhl(long double complex z);
cacosh
double complex cacosh(double complex z);
float complex cacoshf(float complex z);
long double complex cacoshl(long double complex z);
catanh
double complex catanh(double complex z);
float complex catanhf(float complex z);
long double complex catanhl(long double complex z);
ヘッダ complex.h
引数 z: casinh/cacosh/catanh の演算に対する引数
casinh:虚数部[-1,1]の外側を枝切り
cacosh:実数部 1 未満の値で枝切り
catanh:実数部[-1,1]の外側を枝切り
戻値 演算結果
casinh/catanh:虚数部は[-π/2,π/2]の範囲
cacosh:実数部は非負で,虚数部は[-π,π]の範囲
解説 z で示される値を関数の引数として,それぞれ arc hyperbolic sine/arc hyperbolic cosine/arc hyperbolic tangent の演算を行います。
指数関数(exponential functions): cexp
名前
double complex cexp(double complex z);
float complex cexpf(float complex z);
long double complex cexpl(long double complex z);
ヘッダ complex.h
引数 z: cexp の演算に対する引数
戻値 演算結果
解説 z で示される値を関数の引数として,複素数の基数 e の指数を計算します。
自然対数関数(logarithmic functions): clog
名前
double complex clog(double complex z);
float complex clogf(float complex z);
long double complex clogl(long double complex z);
ヘッダ complex.h
引数 z: clog の演算に対する引数(負の実数軸に沿って枝切り)
戻値 e を基数とした log の結果(虚数部は[-π,π]の範囲)
解説 z で示される値を関数の引数として,複素数の自然対数(基数 e) の計算を行います。
絶対値関数(absolute-value functions): cabs
名前
double cabs(double complex z);
float cabsf(float complex z);
long double cabsl(long double complex z);
ヘッダ complex.h
引数 z: cabs の演算に対する引数
戻値 演算結果
解説 z で示される値を関数の引数として,その絶対値を得ます。
平方根関数(square root functions): csqrt
名前
double complex csqrt(double complex z);
float complex csqrtf(float complex z);
long double complex csqrtl(long double complex z);
ヘッダ complex.h
引数 z: csqrt の演算に対する引数(負の実数軸に沿って枝切り)
戻値 演算結果(実数部/虚数部は非負)
解説 z で示される値を関数の引数として,その平方根を得ます。
べき乗関数(power functions): cpow
名前
double complex cpow(double complex x, double complex y);
float complex cpowf(float complex x, float complex y);
long double complex cpowl(long double complex x, long double complex y);
ヘッダ complex.h
引数 x: 被べき乗数(負の実数軸に沿って枝切り)
y: べき乗数
戻値 演算結果
解説 xy を計算します。
creal/cimag
名前 creal
double complex creal(double complex z);
float complex crealf(float complex z);
long double complex creall(long double complex z);
cimag
double complex cimag(double complex z);
float complex cimagf(float complex z);
long double complex cimagl(long double complex z);
ヘッダ complex.h
引数 z: 実数部(creal)/虚数部(cimag)を取り出したい値
戻値 演算結果
解説 z で示される値を関数の引数として,それぞれその実数部/虚数部の値を取り出します。creal に関しては (double)z/(float)z/(long double)z と同等と思われます。
carg
名前
double carg(double complex z);
float cargf(float complex z);
long double cargl(long double complex z);
ヘッダ complex.h
引数 z: 位相角度を取得したい値(負の実数軸に沿って枝切り)
戻値 演算結果([-π,π]の範囲)
解説 z で示される値を関数の引数として,その複素平面上の位相角度(phase angle)を取得します。
conj
名前
double complex conj(double complex z);
float complex conjf(float complex z);
long double complex conjl(long double complex z);
ヘッダ complex.h
引数 z: 共役複素数を取得したい値
戻値 演算結果
解説 z で示される値を関数の引数として,その共役複素数(conjugation)(虚数部の符号が逆)を取得します。
cproj
名前
double complex cproj(double complex z);
float complex cprojf(float complex z);
long double complex cprojl(long double complex z);
ヘッダ complex.h
引数 z: 演算結果を得たい値
戻値 演算結果
解説 z で示される値を関数の引数として,リーマン球上での projection を計算します。
△ThinkPad 600 用 System ROM v1.14 にアップデート (2000/02/27)[日]
ひさびさに ThinkPad 600 用の System ROM がアップデートされました(というか,いつのまにかアップデートされてる...)。今回のバージョンで 1.14 になりました。バージョンアップの目玉は Windows 2000 への対応ということで,他にもドッキングステーションを使ったときのドッキング側の IDE mode の扱いの変更や ATI の XPert98 というビデオカードへの対応だそうです。download は例によって IBM のサイトからどうぞ。ちなみにファイル名は,ibuj150.exe という,相変わらず謎なファイル名です。
△ログオンとログインの意味の違い (2000/02/26)[土]
Microsoft ではログオンとログインという用語を使い分けて用いているとのことです。
ログイン
だから,ログオンパスワードとログインパスワードは違うことをあらわしていることになります。
△REG:メニューの出現速度の調整 (2000/02/25)[金]
Windows でメニューを出して,その中にさらにメニューがあるとき,そのメニューを出現させる速度を変化させることができます。それには「HKEY_CURRENT_USER\Control Panel\desktop」の中の,REG_SZ「MenuShowDelay」の数字を変更することで行えます。
△C マガジンに ISO/IEC 9899:1999 の話がちょこっと! (2000/02/24)[木]
今月発売中の C マガジンに ISO/IEC 9899:1999 (C99) の話題が! pp.114-118 の Standard C/C++ で P.J.Plauger 氏の訳のところに,改定された(る)との記事が出ています。しかし,具体的な内容はありません。ただ来月号で特集を組むようです。これで多くの人が新しいC言語を知ることができるようになるのでしょうか?
さて,我らがプログラミング言語Cの新機能も残り後わずか。残すは,すべて浮動小数点がらみ。ほんともうやになる。complex.h の関数(リーマン球とか共役複素数とか... わかるかい/まだ覚えてるかい? なに,非常に興味がある?うぇ~勘弁して~),float.h (いろいろマクロが追加されとるよ),math.h(もうやめて~,なんでそんなに関数を大量追加するかな~),fenv.h(新規 header) 位はやらんといかん様な気がするが,う~む,どうしよう (--;)。
△コントロールパネルの各項目へのショートカットを作成する方法 (2000/02/23)[水]
コントロールパネルの各項目へは,エクスプローラからはショートカットを作成できません。そのようなときには,ショートカットのコマンドとして,「c:\windows\control.exe c:\windows\system\desk.cpl ,1」のように指定することで直接各項目を起動することができます。ただし,.cpl と , の間に空白を入れるのを忘れないでください。
△REG:Win2K の Telnet サービスで非暗号化パスワードを受付させる方法 (2000/02/22)[火]
Win2K に付属の TelnetServer はデフォルトの設定ではパスワードを暗号化しているようで,他の OS,例えば WinNT4 などからは接続できないようです。このような場合,暗号化していないパスワードを受け付けるようにすれば問題は解決します。その方法は,「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0」にある値「NTLM」を 0 か 1 に変更すると暗号化してないパスワードを受け付けることができるらしいです。他にも,tlntadmn.exe を起動し,「レジストリの設定を表示/変更します ...」→「NTLM」を選んで 0 を入力すると,同様のことができ,非暗号化パスワードを受理するようになるとのことです。
△プログラミング言語 C の新機能 Part XLV: COMPLEX#3: complex.h: マクロ/プラグマ(2000/02/21)[月]
_Complex 型や_Imaginary 型を使いやすくするため,および複素数をサポートする関数のために complex.h が作成されました。今回は,このヘッダで定義されるマクロとプラグマについて説明します。
まずプラグマにはついては,以前紹介した
#pragma STDC CX_LIMITED_RANGE
が complex.h を include することで利用可能になります。
そしてマクロについてです。 complex.h では,complex, imaginary, I というマクロが定義されています。これは _Complex 型や _Imaginary 型を使いやすくするためのものです。具体的に定義例を示すと次のようなものです。
complex.h: マクロ定義例
//complex 型サポート
#define complex _Complex
#define _Complex_I((const float _Complex)(_Imaginary)1.0)
//↑正確には 0.0+1.0i の値を持つ const float _Complex 型の複素数定数
//この場合は __STD_IEC_559_COMPLEX__ の定義時のみの例
//imaginary 型サポート
//以下二つは,__STD_IEC_559_COMPLEX__ が定義されているときのみ
#ifdef __STD_IEC_559_COMPLEX__
#define imaginary _Imaginary
#define _Imaginary_I((const float _Imaginary)1.0)
#endif
//定数 I サポート
#ifdef _Imaginary_I
#define I _Imaginary_I
#else
#define I _Complex_I
#endif
まずはじめに言っておく必要があるのは,__STD_IEC_559_COMPLEX__ が定義されている場合のみ,_Imaginary 型が使用できるので,定義されていない場合 _Imaginary 型とそれに関係するものは使用できないということです。
さて complex.h を include すると _Complex や _Imaginary という表記ではなく,complex,imaginary という表記ができるようマクロ定義されます。したがって,double complex val1 のような便利な表記が使用可能になります。
さらに,I (i の大文字)という記号が定義されます。これは何かというと,複素数で用いられる 1.3+4.5i の i をあらわしています。しかし,i という記号は別の用途で広く利用されているので委員会は,I を当てたようです。では実際どのように用いるのか,どうしてこれを用いると複素数型になるのかを見てみましょう。まず,_Imaginary 型が有効な場合について考えます。例として,1.3+4.5i を考えましょう。これは,C 言語の複素数式で書くと 1.3 + 4.5 * I と書けます。
_Imaginary 型がサポートされている場合
1.3 + 4.5 * I
1.3 + 4.5 * _Imaginary_I
1.3 + 4.5 * ((const float _Imaginary)1.0)
1.3 + (const double _Imaginary)4.5
(const double _Complex)(1.3 + 4.5*I)
次に _Imaginary 型がサポートされていない場合を考えてみましょう。委員会は,_Imaginary 型がサポートされていない場合でもそれなりにできるよう,複素数型を設計しました。
_Imaginary 型がサポートされていない場合
1.3 + 4.5 * I
1.3 + 4.5 * _Complex_I
1.3 + 4.5 * const float _Complex 型の 0.0+1.0i の定数値
1.3 + const double _Complex 型の定数値 0.0+4.5i
(const double _Complex)(1.3 + 4.5*I)
このように,C 言語では complex.h を include することでかなり自然な表記で複素数を記述することができるようになっています。またこの定義が気に食わない,支障があるような場合,complex,imaginary,I を再定義したり,未定義にしたりすることが許されています。
#2000/03/04: update
△Inprise bcc5 コマンドライン版がダウンロード可能に (2000/02/20)
ここで,Inprise がコマンドライン版の Borland C++ Builder をフリーで公開すると書きましたが,それが公開されました。http://community.borland.com/ から download することができます。なお,download するには登録が必要です。またもしかしたら,今後の C マガで付録に付くかもしれません。
△ぎょぅざ~ぁ~ぎょうざ! (2000/02/19)
皆さんも一度は「たけや~ぁ~さおだけ~」とスピーカーから流して走っている車を見たことがあると思います。昔から変わらず,今なお独特のメロディーと変わらぬスタイルで続けているようです。そんな「たけや~ぁ」ですが,先日,久しぶりにあの独特のメロディーを聞いたのでした。しかし,どうも何かが違う。それでよく聞いてみると...,「ぎょぅざ~ぁ~ぎょうざ!」!。なんと竹屋竿竹ではなく,餃子らしい。これにはびっくり。あまり言っていることは聞き取れなかったのですが,年に一度くらいしか来ないとかとかいうことも言っていました。あっ,こんなことですから当然買ってません,そのぎょうざ。買っていれば,レポートできたんだすけどね。だって,もっとよく聞こうと窓を開けたら移動してしまったので,その車。それにしても,なぜに「ぎょうざ」なのだろうか。う~ん,気になる。
△Win98: デスクバーオプション (2000/02/18)
Win98 でタスクバーの何も無いところで,右クリックをしてメニューをだし,その中の「プロパティ(R)」を CTRL キーを押しながら,ダブルクリックすると「タスクバーのプロパティ」に「デスクバーオプション」というタブが出てきます。しかし,このタブをクリックしても何も起こらず,さらにこのダイアログを閉じることができなくなってしまいます (T_T)。どうやら,これはバグということらしいのですが...,どうもここでリスト表示された各デスクバー項目の追加や削除などが行えるようにする予定だったみたいです。でも途中で止めてしまったのでしょうか。
△IE5 のお気に入りのリンクフォルダの消し方 (2000/02/17)
IE5 の「お気に入り(A)」の中の「リンク」のフォルダは削除しても,再起動するたびに復活し,非常に鬱陶しいフォルダです。これを消すには,まず「リンク」の上で右クリックして「削除」を選び,リンクフォルダを削除します。次に,「HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar」の中にある値「LinksFolderName」を削除します。そして,「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites」の下にある「リンク」キーを丸ごと消します。これでリンクを消すことができます。そのあと念のため再起動しておくといいかもしれません。
△Windows ME (2000/02/16)
現在の Windows の最新版は Windows98SE で,Windows3.1,Windows95,Windows98,Windows98 Second Edition のように名前が変わってきました。ほんとは,Microsoft はこの系列の Windows はこれで打ち止めにしたかったようですが,次のバージョンを出すことになりそうです。それでその名前が Windows ME。これって Millennium Edition ってこと? 本当は,Windows2000 という名前が順当なところだけど,WindowsNT系が,WindowsNT3.5,WindowsNT4,Windows2000 という名前になってきているので,こんな名前をつけたのでしょうか。それにしてもまさに錯覚商法って感じだな。
△Windows2000 正式版発売近し (2000/02/15)
皆さんご存知の方も多いでしょうが,Windows2000 の正式版が 2/18 日から発売されます。発売日には,Windows95 の時と同じように,また深夜販売をやるそうで。でもただ深夜販売をするだけではなく,くじ引きみたいなものをやるところもあるようです。しかし,それ以上に気になるのは,なんと正式出荷バージョンでも,Windows2000 は数万のバグを内包したままという点だったりします。そんなの出荷しちゃって本当に大丈夫なのでしょうか?
△REG:NT で起動時に NumLock を On にする方法 (2000/02/13)
WindowsNT(Windows2000)では,キーボードの初期状態によらず,デフォルトでは必ず NumLock を Off にして起動します。しかし,10key を頻繁に使う人にとっては,起動するたびに NumLock を On にする必要があり,大変面倒です。そのようなときには,「HKEY_CURRENT_USER\Control Panel\Keyboad」の中のキー REG_SZ:"InitialKeyBoardIndicators"の値を "2" にすると,自動的に NumLock を On にして起動してくれます。
△DOS から graphics ! (2000/02/12)
DOS から SVGA BIOS を使って Graphics をいじってみるが,やっぱり遅いな~。昔に比べれば CPU は早くなっているはずなのにぃ。解像度や色数が増えたせいなのか? それとも bank 切り替えの時間,それの判定に時間がかかっているのかな。まぁアクセラレーションの機能を使えば早くなるんだろうが...。でもそれだと汎用的に使えないんだよねぇ。やれやれ。
△IME2000 のツールバーが表示されない現象 (2000/02/11)
Win98SE や office などをインストールすると勝手にインストールされてしまう,IME2000 ですが,状況によってはどうやってもツールバーが表示されなくなってしまうようです。このような状態になるときは,古い IME がツールバーを表示しない設定になっている時にインストールするとなるようです。なんでもこれは仕様?らしいです。「HKEY_CURRENT_USER\Control Panel\input method」の 「show status」 を "1" にするとなおるかもしれません。
△IE5.01 で「アドレス(D)」欄に http://... と書くとエラーになる現象をなおす方法 (2000/02/10)
えーと,IE を ver5.0 から ver5.01 にしたとたんに,ブラウザの「アドレス(D)」部分に http://seclan.i.am/ のように http:// から始まる URL を入力して,リターンを押すとエラーになることがあるようです。なんとこれが起こる原因は,「窓の手」などを使って,スタートメニューの「ファイル名を指定して実行(R)...」を消している場合に発生するそうです。したがって,消さないようにするとなおります。それにしても MS ってやつは...。
△ショートカット作成ダイアログを出す方法 (2000/02/09)
explorer の右ペインで何も無いところで右クリックのメニューを出すと,「新規作成」の項目が現れます。その中には「ショートカットの作成」の項目があり,選択するとショートカット作成のダイアログが現れます。このダイアログをコマンドプロンプトから出す指示をすることができます。その方法は,「rundll32 appwiz.cpl,NewLinkHere ..path..」のように rundll32.exe を実行する方法です。..path.. の部分にはショートカットファイルの作成場所を指定します。
△Microsoft の Net News Server (2000/02/08)
なんと Microsoft は自分用の Net News を作っているようです。Net News 用のサーバは msnews.microsoft.com で,Microsoft の製品や,プログラミングに関する話題,ベータ版についての報告などが話されているようです。普通の Net News 閲覧アプリケーションではサーバを前述のサーバに設定するだけで,このサーバにアクセスできます。
△プログラミング言語 C の新機能 Part XLIII: COMPLEX#1: _Imaginary 型(2000/02/07)
_Imaginary 型は,複素数における虚数部の値を示すための型で,マクロ __STD_IEC_559_COMPLEX__ が定義されている環境だけで使用することができます。このマクロは _Imaginary 型の仕様が informative な仕様 (Annex G) であることを認識する必要から存在しています。
_Imaginary 型も _Complex 型と同様に次に示す型の総称です。
float _Imaginary, double _Imaginary, long double _Imaginary
意味も _Complex 型と同様に,_Imaginary の前のそれぞれが複素数の虚数部の実際の数値の型を示しており,その型の表現はその浮動小数点型と同一です。例えば,double _Imaginary なら,その実際の型の構造は double 型と同一です。
次にキャストについて説明します。まず,浮動小数点数を _Imaginary にキャストすると,それは (_Imaginary)+0.0 という値になります。また,_Imaginary 型の値を浮動小数点型にキャストすると,その値は +0.0 になります。_Imaginary 型の値を _Complex 型にキャストする場合には,変換後の _Complex の実数部は +0.0,虚数部はその _Imaginary 型の値になります。そして,_Complex 型の値を _Imaginary 型にキャストする場合,_Complex 型の実数部は捨てられ,虚数部がその結果として残ります。
次は,複素数に関する四則演算について説明します。
△PDS DOS Extender 'CauseWay' が公開 (2000/02/06)
CauseWay という Watcom C/C++ とアセンブリ言語用の DOS Extender が Public Domain Software (PDS) として公開されました。この DOS Extender は始め商売用の DOS Extender として売られていましたが,2000/01/09 日から PDS として公開されたものです。公開された内容は,バイナリだけではなく,主にアセンブリ言語で書かれたソースファイルも含まれています。
△Netscape Communicator で現在の設定の一覧を見る方法 (2000/02/05)
Netscape Navigator では,昔から URL のところに about:... と書くことで Netscape 固有の情報を表示する機能を持っていました。例えば,URL のところに about:cache と入力してリターンを押すと,現在キャッシュされているファイルに関する情報が表示されます。この他にも,どうやら現在の設定を見ることのできる about:config というものもあるようです。これを実行するとブウラザに xxx=yyy というように xxx の設定は yyy であるというリストが表示されます。この情報は prefs.js で設定できるようです。
△Netscape Messenger で html ファイルを添付したパートに inline 属性をつけない方法 (2000/02/04)
Netscape Messenger を使って,html ファイルを添付すると,添付されたメールの当該部分のパートに inline という属性がつきます。AL-MAIL ではこのようなメールはうまく読むことができません。そこで,この inline 属性をつけずにファイルを添付したいというわけです。それには,prefs.js に「user_pref("mail.content_disposition_type", 1);」を追加すると,inline が attachment という属性になり,うまく AL-MAIL でも添付された html ファイルが受け取れるようです。prefs.js ファイルの場所についてはここを参考にしてください。
△えっ! Inprise が Windows 用コンパイラも無料開放 !? (2000/02/03)
最近の Inprise はまったくやってくれる。なんと Borland C++ Builder ver5 (次期バージョン) に含まれているコマンドラインツール達と特定のライブラリを無料開放する予定らしい。ここの記事によると,コマンドラインコンパイラ(ver5.5) bcc32,インクリメンタルリンカ tlink32,リソースコンパイラ brc32, brcc32,プリプロセッサ cpp32,インポートライブラリユーティリティ implib,ライブラリアン tlib,ダンプツール tdump,他のツール,C/C++ ランタイムライブラリと STL(Standard Template Library) が含まれるようです。またそれ以外にも,InterBase6 というデータベースソフトをオープンソースで公開するということです。くぅ~。やってくれるねぇ。(ちなみに,ここで公開しているプログラムはすべて Inprise のツールを使ってコンパイルされていたりする ^^)
△REG:フォルダを開くたびに新しいウィンドウを開く/開かない (2000/02/02)
explorer でフォルダを開くときに,新しくウィンドウを開いて表示するか,現在のウィンドウにそのまま新しいフォルダを表示するかを指定することができます。レジストリでは,その位置は,「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState」の中のバイナリ値「Settings」の +4 バイト目の b5 にフラグがあります。1 でフォルダを開くたびに新しいウィンドウを開く,0 の場合現在のウィンドウに表示するです。
△黒客が電脳病毒を使って電脳恐怖活動 (2000/02/01)
昨日の毎日新聞の夕刊の憂楽帳というコラムに,中国語でのハッカーに関する言葉が出ています。例えば,向こうではハッカーは黒客と書いてヘイクー読むようです。また,コンピュータウィルスは電脳病毒,サイバーテロは電脳恐怖活動というらしい。それにしてもなかなか的を得た面白い漢字を当てますねぇ。
▲2000/03
△プログラミング言語 C の新機能 Part XLII: COMPLEX#0: _Complex 型(2000/01/31)
今回の C 言語から複素数演算のための便利な表記法が導入されました。それに利用されるのが _Complex 型と _Imaginary 型です。まずは _Complex 型から説明しましょう。
_Complex 型は規格を満たしている C 言語処理系であるならいつでも使える型で(ただし freestanding 用の実装は除く),実際は次の型の総称です。
float _Complex / double _Complex / long double _Complex
さて,複素数は実数部(real part)と虚数部(imaginary part)の二つの部分からなっています。したがって,これを計算機で扱うためには,実数部と虚数部にそれぞれ浮動小数点型を割り当てて,実数部と虚数部をまとめて管理するのが最も簡潔な方法です。各型の _Complex の前についている浮動小数点型がその各部の実際の型を表しています。例えば,double _Complex 型なら,実数部は double 型,虚数部も double 型です。
実数部と虚数部の管理の方法も決まっています。二つの要素を持った実数型の align された配列として管理します。始めの要素が実数部,残りが虚数部を示しています。例えば,double _Complex 型なら,typedef double double_Complex[2]; で,double_Complex dc; の時,dc[0] が実数部,dc[1] が虚数部ということです(実際は dc[1] の様にはアクセスできません)。
次にキャストについて説明します。浮動小数点数を _Complex 型にキャストする場合には,_Complex 型の実数部がその浮動小数点数に,虚数部が 0 になります。また _Complex 型の変数を浮動小数点型にキャストする場合には,_Complex 型の変数の虚数部が捨てられて,実数部が取り出されます。
次回は,_Imaginary 型について説明します。
△Netscape Navigator でアニメーション gif を停止させる方法 (2000/01/30)
Netscape Navigator を使用している人で,マシンパワーがないなどの理由から,アニメーション gif を停止させたく思う場合があります。その場合には,アニメーション gif が表示された状態で停止ボタンを押すと,アニメーションが停止します。
△Word2000 で日本語を入力後しばらく文字入力ができなくなる現象 (2000/01/29)
Word2000 で日本語を入力して,それを確定して改行をすると,数十秒から数分間 Word に文字入力ができなくなってしまう場合があります。この現象は,MS-IME2000 のユーザ登録単語が多く,かつ Word2000 の文章校正が有効になっていると発生するようです。したがって,現象を改善するには,ユーザ登録単語を使用しないようにするか,文章校正を使用しないようにすればよいです。
△画面外に出てしまったウィンドウを画面に戻す方法 (2000/01/28)
Windows を使っていると何かの拍子にウィンドウが画面の外に出てしまい,元の画面位置に戻せなくなるときがあります。そのようなときには,まず,外に出てしまったウィンドウに相当するタスクバーにあるウィンドウの部分を右クリックして,「最大化(X)」を押してウィンドウを最大化させます。すると,画面に表示されると思うので,タスクバーの何もないところで右クリックを押します。それで出現するメニューの中の「重ねて表示(S)」などの項目を選択すれば,画面の中にウィンドウが戻ります。
△Win9x から Windows2000RC2 にアップグレードできない原因 (2000/01/26)
Win9x から Windows2000RC2 にアップグレードしようとしても「現在の Windows のバージョンが検出されません」というエラーが出て,アップグレードができないことがあります。そのようなときは,「システムのプロパティ」の「全般」のところにある「使用者」のところにプロダクト ID がきちんと表示されているかどうか確認してください。このプロダクト ID がないか,レジストリからの読み出しに失敗した場合にそのエラーが出るようです。
△不安定になった Netscape Communicator の状態を改善する方法 (2000/01/25)
Windows が途中でクラッシュしたなどの理由から,次に Netscape Communicator を起動しても,web での動作状態が不安定になってしまうことがあります。そのようなときには,キャッシュファイルを丸ごと消してみると状態が回復することがあります。ただし,これをやるときは,Netscape Communicator の中の設定の部分からやるのではなく,直接ファイルを消します。例えば,デフォルトのユーザの場合 C:\Program Files\Netscape\Users\default\Cache の中のファイルをすべて消します。このとき,当然 Netscape Communicator は終了させておく必要があります。
△プログラミング言語 C の新機能 Part XL: stdlib.h: long long int 型対応関数 atoll, llabs, lldiv (2000/01/24)
atoi,abs,div 関数の機能を long long int 型で処理できるよう新しい関数 atoll,llabs,lldiv 関数が追加されました。
△Proxy でキャッシュされた古いデータではなく更新された新しいデータを取ってくる方法 (2000/01/23)
Netscape や IE では proxy を経由して web ページを見ることができます。この利点の一つが,proxy で web ページをキャッシュしておくことで,複数人がそのページをアクセスしたときでも,わざわざそのサイトにデータを取りに行くことなく,そのページを得ることができるという点です。しかし,その代償としてサイトのデータが更新されても,古いデータしか見ることができないという問題が起こることがあります。そのようなときには,shift キーを押しながら,リロードボタンを押すと新しいデータを取ってくることができます。
ちなみに,HTTP で直接やり取りをする場合には,「Pragma: no-cache」を使用します。
△省エネモード時でも背後で勝手に動作する「重要な更新」を削除する方法 (2000/01/22)
サスペンドなどの省エネモードを使うと電気を節約することができます。しかしせっかくこのモードに入っても,何かのプログラムがハードディスクなどにアクセスすると勝手に状態が復帰してしまいます。このように,背後で勝手にプログラムが動作すると困るという問題があります。そのようなプログラムの一つが「重要な更新」です。 これを消すには,アプリケーションの追加と削除の中にある「Microsoft Windows Critical Update Notification」を削除すればよいです。あるいは,削除せずに msconfig.exe を使って,一時的に使用しない状態にすることもできます。
△Win2000RC2 での SendTo の設定場所 (2000/01/21)
Win9x や NT4 では %windir% にある SendTo ディレクトリの中にショートカットを作成すると,エクスプローラを右クリックしたときに出るメニューの中にある「送る(T)」の先にそのショートカットを表示させることができます。Win2000RC2 では,この位置が X:\Documents and Settings\ユーザ名\SendTo に変更されたので,このディレクトリに同様に設定すればよいことになります。ちなみに,デフォルトのユーザ名は,X:\Documents and Settings\Default User\SendTo のようです。またこのディレクトリは隠しディレクトリになっているので注意しましょう。
△レジストリをいじらずに APM から ACPI に切り替える方法 (2000/01/20)
以前紹介した ACPI を有効にする方法は,レジストリを明示的に変更して ACPI を有効にする方法でした。しかし,もっと簡単な方法があるようです。その方法とは,「コントロールパネル」-「システム」-「デバイスマネージャ」の中の「システム デバイス」の中の「プラグ アンド プレイ BIOS」のプロパティを開きます。そして「ドライバ」-「ドライバの更新(U)...」でウィザードをだし,途中一覧で選択するを選んで先に進めます。そして「すべてのハードウェアを表示(A)」で「モデル(D)」の中の「Advanced Configuration and Power Interface (ACPI) BIOS」を選択すると,切り替えられるようです。
△緊急時のためのディスク作成方法 (2000/01/19)
Windows が何らかの原因により立ち上がらなくなった,おかしくなったという緊急時のために,それ用のディスクを作っておくと,万が一の時助けになります。Win9x では「コントロールパネル」の「アプリケーションの追加と削除」の中の「起動ディスク」タブから起動ディスクを作ることができます。NT の場合,NT4 では rdisk というコマンドで緊急時のためのディスクを作成できたようですが,なんと,Windows2000(NT5) では rdisk はなくなってしまったようです。そのかわり「バックアップ」の中にその項目が新たにできたようです。「スタート」メニューから「アクセサリ」-「システムツール」-「バックアップ」でたどれます。NT で作成できるのは Emergency Repair Disk というものです。
△「CD プレーヤー」のアーティスト/歌詞情報の保存場所 (2000/01/18)
Windows 付属の cdplayer.exe,つまり「CD プレーヤー」では,その CD に関するアーティスト/歌詞情報を入力すると,トラック#n というような表示の代わりに,入力した文字列を表示してくれます。この情報は,%windir% の cdplayer.ini に格納されています。したがって,再インストールするときなどは,このファイルを取っておいて,再インストールが終わったら復元するようにするとデータを失わずにすみます。
△プログラミング言語 C の新機能 Part XXXIX: stdlib.h: strtoX ファミリ / wchar.h: wcstoX ファミリ (2000/01/17)
stdlib.h ヘッダに strtod,strtold 関数が追加されました。また,相当する wchar_t 版の関数が,wchar.h に wcstof,wcstold として追加されました。これらは,double を対象とする strtod,wcstod を,float,long double にも対応させたものです。
名前:strtof,strtold
ヘッダ:long double strtold(const char *restrict p, char **restrict endp);
引数
endp: 解釈を中止したポインタ位置を格納するポインタ
戻値
+HUGE_VALF(strtof), +HUGE_VALL(strtold): +方向に表現できる範囲を超えた
-HUGE_VALF(strtof), +HUGE_VALL(strtold): -方向に表現できる範囲を超えた
それ以外: 変換した値
解説
解釈される文字列は,strtod で許されている文字列表現に加え,新しく導入された浮動小数点の16進数表記法も認識し,従来からある,INF,NAN に加え,INFINITY,NAN(DA003) のように NAN の後に( )を加えその中に数字やアルファベット,_ をつなげたものを付加情報として追加したものも認識します(これは NAN として認識します)。またこれらの前に符号をつけることができ,大文字と小文字の区別はなされません。
#2000/03/04:NAN(...)の部分を修正
名前:wcstof,wcstold
ヘッダ:long double wcstold(const wchar_t *restrict p, wchar_t **restrict endp);
引数
endp: 解釈を中止したポインタ位置を格納するポインタ
戻値
+HUGE_VALF(wcstof), +HUGE_VALL(wcstold): +方向に表現できる範囲を超えた
-HUGE_VALF(wcstof), +HUGE_VALL(wcstold): -方向に表現できる範囲を超えた
それ以外: 変換した値
解説
解釈される文字列は,wstrtod で許されている文字列表現に加え,新しく導入された浮動小数点の16進数表記法も認識し,従来からある,INF,NAN に加え,INFINITY,NAN(DA003) のように NAN の後に( )を加えその中に数字やアルファベット,_ をつなげたものを付加情報として追加したものも認識します(これは NAN として認識します)。またこれらの前に符号をつけることができ,大文字と小文字の区別はなされません。
#2000/03/04:NAN(...)の部分を修正
また,strtol,wcstol,strtoul,wcstoul 関数の機能を long long int 型で処理できるよう新しい関数 strtoll,wcstoll,strtoull,wcstoull 関数が追加されました。
名前:strtoll,strtoull
ヘッダ:unsigned long long int strtoull(const char *restrict p, char **restrict endp, int base);
引数
endp: 解釈を中止したポインタ位置を格納するポインタ
base: 変換時の基数
戻値
strtoll の場合
LLONG_MAX: +方向に表現できる範囲を超えた
LLONG_MIN: -方向に表現できる範囲を超えた
strtoull の場合
ULLONG_MAX: 表現できる範囲を超えた
それ以外: 変換した値
wcstoll の場合
LLONG_MAX: +方向に表現できる範囲を超えた
LLONG_MIN: -方向に表現できる範囲を超えた
wcstoull の場合
ULLONG_MAX: 表現できる範囲を超えた
それ以外: 変換した値
解説
△起動しないタスクスケジューラを起動させる方法 [更新] (2000/01/16)
Win95+IE4,Win98 にはタスクスケジューラというプログラムが入っています。これは,指定した日時に,指定したプログラムを実行させるというプログラムです。この機能を実現するためには,タスクスケジューラを常駐させる必要があります。しかし,環境によってはなぜかこのタスクスケジューラが起動△常駐せずに異常終了してしまうことがあります。これは,Windows をインストールしたドライブ(たいてい C:)のボリュームラベルが Windows のシステムディレクトリと同じ名前になっていると発生するようです(例えば,Win9x を Windows というディレクトリにインストールしたのなら,WINDOWS というボリュームラベル名)。したがって,ボリュームラベル名を他の名前に変更すると,無事起動するようになるようです。(前回のはこちら)
△Win9x 起動時の画像の変更 (2000/01/15)
標準では Windows 起動時に画像が表示されますが,その画像は変更することができます。そのためには,320×400×8bpp の BMP ファイルを logo.sys という名前で作成し,それをルートディレクトリにおきます。これで画像を変更することができます。また,BMP ファイルのどこかの 1 バイトに値を書き込むと,その値以降の色に対し,カラーアニメーション表示がされるようです。これはパレットの内容を変化させることで実現されています。
△IE5 でセキュリティの設定をしようとすると落ちる現象を回避する方法 (2000/01/14)
IE5 で,「ツール(T)」-「インターネット オプション(O)」-「セキュリティ」とすると,プログラムが落ちてしまう環境があるようです。そのような場合には,画面の色数をハイカラー以下にすると現象がおさまるようです。
△ダイアルアップ時の状態窓の表示/非表示の方法 (2000/01/13)
ダイアルアップをして,ISP に接続すると,現在の接続状態が表示されるウィンドウが開かれ,タスクトレイにアイコンが表示されることがあります。このウィンドウやアイコンを非表示にさせたり,あるいは表示にさせたりすることができます。そのためには,エクスプローラを起動して,「マイ コンピュータ」を展開して,「ダイアルアップ ネットワーク」を選択します。そして,それぞれの ISP の接続アイコンを右クリックして,プロパティを出すとその中にあります,と思っていると,実はそこにはありません。ちょっと,盲点かもしれませんが,エクスプローラのメニューバーの「接続(C)」の「設定(S)...」を選び,「ダイアルアップの接続オプション」で設定できます。「新しい接続」のプロパティのところでもよさそうなものですがね...。
△Windows 起動時に「ピロッ」という音が鳴るのを回避する方法 (2000/01/12)
機種やシステム構成によっては Windows の起動時に「ピロッ」という音が出ることがあります。そこで,これは何かのエラーが起こっているに違いない,と思う人がいるようです。しかし実は,これはエラーが起こったことを示しているのではありません。PCMCIA のカードを認識したという音なのです。この音が邪魔であるならば,コントロールパネルから PC カードの設定画面を出し,「設定」にある「PC カード サウンドを使わない(D)」にチェックを入れれば音は出なくなります。
△CPU の発熱を押さえる (2000/01/11)
計算機を対話的に使用するとき,CPU はその多くをユーザからの入力の待ち時間に費やしています。もちろんこの間も CPU は動作し続けているので,発熱し続けています。これは,ノートパソコンを使っている人にとってはひざの上が暑いという現象になって実感できます。これをなるべく発熱しないようにするには,CPU が消費する電力を少なくするというのが一つの方法です。省電力にすれば電気が節約できるので,バッテリの使用時間が伸びます。これを行うには HLT 命令を発行すればよいのです。この命令を発行すると CPU は割り込みがおこるまで停止するので,余分な電気を消費しないのです。
しかし,残念なことに Win9x や WinNT4 は,CPU が暇なときにこの命令を自動的に発行してはくれません。そのため,普通に使っていると無駄に電気を使っているということになってしまいます。いくつかある CPU COOLER 系のフリーソフトを導入するとこの状態から脱出できます。また Windows 2000 にはこの機能が標準で含まれているようです。
△プログラミング言語 C の新機能 Part XXXVIII: ctype.h: isblank / wctype.h: iswblank (2000/01/10)
ctype.h ヘッダに新たな関数 isblank が追加されました。
ただ,isblank / iswblank 関数の情報は Draft の仕様書には記述が無いため,たぶんに推測が含まれています。
△MS-IME のツールバーを縦にする方法 (2000/01/09)
MS-IME97 以降の MS-IME では,横形ツールバーだけではなく,縦形のツールバーを使用することができます。その方法とは,ツールバーの角にマウスカーソルを持っていき,ドラッグするだけ...。簡単ですね (^_-)。
△ディスククリーンアップの自動起動を止めさせる方法 (2000/01/08)
標準状態では,ドライブの残りディスク容量が少なくなってくると,不必要と思われるファイルを簡単に消すことができるディスククリーンアップが起動します。しかし,ディスクの残り容量が少ないことを承知で使用している人にとっては,このプログラムは鬱陶しく感じることがあります。そのようなときには,対象となるドライブのプロパティを出して,「ディスクのクリーンアップ(D)...」-「設定」のところで,自動起動しないように設定することができます。
△危険な Win2000RC2 での defrag (2000/01/07)
Windows 2000 RC2 が雑誌や PC shop で配布されているので,インストールしてみた人も多いでしょう。Win98 などと比べるとはじめから入っているソフトは少ないですが,それでも scandisk や defrag といったツールは入っています。しかし,実はこの Win2000RC2 の defrag はかなり危険です。何が危険かというと defrag している最中にこのプログラムが落ちてしまうことがあるのです ^^;。これが何を意味しているのわかりますよね。そうです。ファイルシステムが破壊されるのです。こうなってはプログラムや OS の起動はおろか,データの取り出しもできなくなります。FAT ファイルシステムに対してやるとまずいのでしょうか。まあ,いずれにせよ Win2000RC2 の defrag はさわらない方がよいようです。
△Windows 起動時/終了時の FD アクセスを停止させる方法 (2000/01/06)
Windows 起動時/終了時に,なぜか FD がアクセスされる場合があります。これは,「最近使ったファイル」に FD を指しているショートカットが存在すると発生することがあります。そのようなときには,「タスクバーのプロパティ」の「[スタート]メニューの設定」にある「[最近使ったファイル]の一覧」から,それらを消去するとよいでしょう。
またノートン先生を導入するとそうなることもあります。例えば,Norton SystemWorks 2000 では,その中に含まれている Norton AntiVirus (NAV) が Windows 終了時に FD にスキャンしに行きます。これを止めるには,Norton SystemWorks の中の「オプション」-「Auto-Protect」-「拡張」-「フロッピーディスクのスキャン」の「Windowsのシャットダウン...スキャンする」のチェックをはずすことにより行えます。
△REG:NetBEUI の暗号化パスワードを平文パスワードにする方法 (2000/01/05)
Windows から UNIX 上の NetBEUI プロトコルで共有されているファイルを見るためのソフトで samba というのがあります。しかし,Win98 になってからパスワードが認識されないようになってしまいました。これは,Win98 以前の OS ではパスワードは平文で渡されていたのが,Win98 になってからパスワードが暗号化されるようになったからです。この問題を解決するには,暗号化パスワードを止める必要があります。そのためには,「HKEY_LOCAL_MACHNE\System\CurrentControlSet\Services\VxD\Vnetsup」の中の DWORD 値 EnablePlainTextPassword を 1 にします。
△今月のアイコン (2000/01/04)
ようやく,今月のアイコンを書いた。どんなもんでしょう。先月は,雪だるまということで白主体だったので,今月は白を避けようと,鈴でも書いてみようかと思っていた。しかし,実物または写真が見つからなかったので,どうにも描けない。しかたがないので,正月ということで,今月も白主体の鏡餅。あ~あ,絵心が欲しい。
△プログラミング言語 C の新機能 Part XXXVII: stdlib.h: _Exit (2000/01/03)
stdlib.h ヘッダに新たな関数 _Exit が追加されました。
ただ,_Exit 関数の情報は Draft の仕様書には記述が無いため,たぶんに推測が含まれています。
△元旦のチラシ (2000/01/02)
元旦に新聞と共に大量の広告が入ってきましたが,それを見てると今日二日からいろいろ特売があるようですね。新年特価 ?? 日限りとか。そういうのを見てると,いかにも安いな~と思ってしまうが,ほんとに安いのか? とつい思ってしまう。
△祝!新年 (2000/01/01)
新年あけましておめでとうございます。本年もどうぞよろしくお願いします。それにしても,2000 年問題はやはりというか何も問題はなかったようですね。まぁ,そんなもんだろうとは思ってはいたけど,よかったよかった。さて,今年も seclan のほえほえルームを今しばらくは続けていく所存でありますので皆様よろしくお願いします。(今月のアイコンはまだ書けてません (_ _)。しばし待て!)
▲1999/12
△今年の私的三大ニュース (1999/12/31)
いよいよ,今年も残すところ今日一日となりました。もう年賀状は出しましたか? 大掃除はしましたか? 思い起こせば,われらが seclan のほえほえルームも今年の3/10日に始めて以来 9ヶ月ちょっとも続いています。こんなに続くとは我ながら思っていなかったのでこれはすごいことです。こんな seclan のほえほえルームを振り返りながら,私的な三大ニュースを発表することにしましょう。
第三位geocities の謎をちょっと解明
geocities の謎の挙動をいくつか解明しました。一つは,ジオボードに書き込みしようとしても常にエラーとなってしまう件を解決する方法,そして更新一覧のページのアイコンの選択条件を明らかにしました。
第二位Inprise が Turbo PASCAL/Turbo C を無料開放
Inprise (旧 Borland) が DOS 用のコンパイラソフトを無料開放しました。これにはほんとびっくりしました。
第一位自作ソフトが他のメディアで紹介
自作ソフトがなんと他のメディアで紹介されました。 窓の杜のメール版の紹介記事で,5/19に BeatTime が,5/27 に Kill IE Logo が紹介され,また Kill IE Logo が複数の書籍で紹介されました。また,個人のホームページでも紹介してくれているところもあるようです。
というわけで,こんなところでしょうか。それでは皆さん,よいお年を!
△謎の IE5 バージョン番号 (1999/12/30)
Internet Explorer 5.01 というのが現在配布中ですが,バージョン番号を出すと, 5.01 というバージョンではないようです。5.00.2919.6307 というのがバージョン番号として表示されます。この 5.00.2919 という部分で IE5.01 というのをあらわしているようです。ちなみにこれを書いているマシーンに入っているバージョンは 5.00.2314.1003 となっていました。IE5.00 でしょうか。
△NT4 での自動ログオンを一時的に停止する方法 (1999/12/29)
ここで書いたように設定すると,NT4 で自動ログオンすることができるようになります。しかし,この設定をすると一度ログオフしてもまた自動的にログオンしてしまい,他のユーザでログオンすることができなくなってしまいます。このような場合,自動ログオンの機能を一時的に停止すればよいことがわかります。一時的に停止するためには,shift キーを押しておきます。つまりログオフするときに shift キーを押しっぱなしにしておく,あるいは起動するときに shift キーを押しっぱなしにしておくと他のユーザでログオンできるようになります。
△NT4 での自動ログオン (1999/12/28)
Win9x ではあるユーザ名で自動的にシステムにログオンすることができます。しかし,NT4 では標準ではそのようなことはできません。したがって,NT4 でそれをすることはあきらめる必要があるように思えますが,実はできます。レジストリの中の "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" キーの中の値をいくつか設定するだけです。値はすべて文字列としてください。AutoAdminLogon は 1 に,DefaultDomainName にログオンするときのドメイン名を,DefaultUserName にログオンしたいユーザ名を,DefaultPassword にそのユーザのパスワードを指定します。パスワードを指定しないと,自動ログオンできません。またレジストリの中に生にパスワードを記述することになるので,他人からそのパスワードを覗かれる可能性があり,かなり危険であることは承知しておく必要があります。
△プログラミング言語 C の新機能 Part XXXVI: stdio.h: vscanf ファミリー / wchar.h: vwscanf ファミリー (1999/12/27)
stdio.h ヘッダに新たに vscanf ファミリー が追加されました。これは,今まで printf の方にはあって,どうして scanf の方には無かったんだろうと,多くの人が思っていたであろう,vscanf, vsscanf, vfscanf といった,va_list を引数に持つ scanf 関係の関数のことです。処理系によっては,始めからこれらの関数を独自のライブラリとして提供していたところも多かったかもしれません。
また前回の内容を一部アップデートしました。
△Microsoft Synthesizer でのパス名に関するバグ修正 (1999/12/26)
以前,Direct6 に含まれる Microsoft Synthesizer のバグについて報告しました。これは,演奏したい midi ファイルのパスに日本語が含まれているとそのファイルを演奏することができないというものでした。最近発表された DirectX7 では,この Microsoft Synthesizer のバグは訂正されているようで,日本語を含んだパス名の midi ファイルでも正しく処理できるようになっています。
△ハッピーマンデー (1999/12/25)
突然ですが,来年から二つの祝日の日付が変わります。これは,いわゆるハッピーマンデー法に基づくもので,従来の祝日である 1/15 日(成人の日)と 10/10 日(体育の日) を,来年からはその日を含む週の月曜日にするというものです。これで,土曜,日曜,月曜の三連休になるから,消費も増える(休み→どこかへ出かける→金かかる)し,ゆとりある生活ができるようになるということを言っています。この法案のおかげで,計算機上にあるすべての万年カレンダーをバージョンアップさせなくてはなりません。やれやれ。
△ウィンドウメニューなどの記号化けをなおす方法 (1999/12/24)
Win98 がハングしたので再起動したといったときなど,何かの拍子に,ウィンドウメニューなどの _□× といった部分が変な記号になってしまうことがあります。実は,その部分の記号は文字として描画されているのです! だから実際は文字化けを起こしているのです。したがって,なおすには ttfCache ファイルを消すか,一度 safe モードで起動すると元の状態に戻せます。ちなみにその描画に使っているフォント名は Marlett で,文字コード表を使うとそのフォントの内容を見ることができます。
△Kill IE4/IE5 Logo が ver2.09 にバージョンアップ! (1999/12/23)
自作ソフト Kill IE4/IE5 Logo が久しぶりにバージョンアップしました。新しいバージョンは ver2.09 です。前のバージョンからの変更点は次の通りです。
タスクトレイにアイコンを表示しないコマンドラインオプション -s を追加
ダウンロードは例のページからしてください。
△祝! ISO/IEC プログラミング言語 C 規格が改定! (1999/12/22)
今までこの seclanのほえほえルームでもいろいろお伝えしてきましたが,プログラミング言語 C の規格が,ようやく ISO/IEC 9899:1999 - Programming Language C として改定されました。規格書は 1999/12/01 に出版されたようです。これで,「C 言語って,定数の座標を渡すときとかも,いちいち変数に代入しなくちゃいけないので面倒だよね~」とか言っている人がいたら,「えっ,何言ってんの? できるよ。そんな事も知らないの~」といって,いじめてあげましょう ^^。それにしても,時間がかかりましたねぇ。ぎりぎり年内です (^^;)。
△レジストリの中にあるすごく怪しいキー (1999/12/21)
レジストリの中にすごく怪しいキーがあるマシーンがあるようです。具体的には,"HKEY_LOCAL_MACHINE\Software\pZjC!wf3ex8_erMyfJ922-WW" といったキーで,いかにもウイルスか何かが作ったキーのように見えます。実際これは,uhack2000 というウイルスがいる証拠なのですぐにウイルスチェックをして,2000年になる前までにウイルスを除去した方がいいでしょう...というのは真っ赤なうそで,実は,AISOFT の DiskX Zip (フリー版) をインストールすると組み込まれるシェル拡張モジュールがこのキーを作成しているようです。まったく何を考えてこんなキーにしているやら...。まさかバグということではないでしょうから,設定のプロテクトなのでしょうか。いずれにせよいい迷惑ですね (^^;) 。
△プログラミング言語 C の新機能 Part XXXV: stdio.h: snprintf (1999/12/20)
stdio.h ヘッダに新たな関数 snprintf が追加されました。
今までの sprintf では出力文字数を指定する方法が無かったので,はみ出さないかどうかどきどきして使う,または直前でオーバーフローしないように気を配ったりする必要がありました。しかし,今回の snprintf を使えばそのような心配もなくなり,安心して書式化文字列を使用できます。
[追記:12/27]
stdio.h ヘッダに新たな関数 vsnprintf が追加されました。
参考:wchar_t を受け付ける関数 vswprintf があり,これはバッファ文字数を指定できる仕様になっている。
△静電気 (1999/12/19)
PC を自分で組み立てている人が恐れるのは静電気です。これ一発で電子部品は即死し,使用不可能になってしまいます。最近の高速の CMOS LSI は,だいたい 100~200V 位までの電圧には耐えてくれるらしいのですが,冬によく着るセータなんかだと簡単に 5,000~10,000V 位 (人によっては 25,000V とか) まで帯電するようです。もしこんな電気が電子部品にいったら...。電子部品を扱うときには静電気に気をつけましょう。
△REG:HTML エディタを登録する方法 (1999/12/18)
「コントロール パネル」-「インターネット オプション」-「プログラム」-「HTML エディタ(H)」には,編集を指定したとき自動的に起動する HTML エディタのリストが表示され,そのうちの一つを選択することができます。ここに他のエディタを追加することができます。やり方は,"HKEY_CLASSES_ROOT\.htm\OpenWithList" のキーの下に,追加したいエディタに関する情報を追加します。例えば,プログラム "C:\Program Files\myeditor\myeditor.exe" を "My Editor" として登録するためには,"My Editor\shell\edit\command" に値 「"C:\Program Files\myeditor\myeditor.exe" "%1"」を設定します。
△Windows 2000 Professionalβ配布中 (1999/12/17)
知っている人も多いかと思いますが,来年に発売が予定されている Windows 2000 のβバージョンが,雑誌や店で配られています。現在発売中の雑誌では,PC World や DOS/V Magazine に掲載されています。また明日発売の雑誌 ASCII にも掲載されるようです。その他,24 日発売の雑誌にもたくさん掲載される予定になっています。詳細はこちらを見るとよいでしょう。ただ,βバージョンなので試しにインストールする前でも多少問題点を事前調査をしておくことをお勧めします。
△UNIX:man の出力結果を PostScript 形式にする (1999/12/16)
man の出力をテキストファイル形式にする方法は以前示しましたが,今回は,印刷用に PostScript 形式で出力する方法を示します。その方法は,man -t man のように -t オプションを指定するのです。これで PostScript 形式で出力されるようになります。
△Win98:ダイアルアップのログ (1999/12/15)
実は,Windows ではダイアルアップ接続をした時のトラブルを解決しやすくするため,ダイアルアップのログを一回の接続毎に作成しています。内容は,モデムへのコマンドとその応答のリストです。そのログの内容を見たければ,「コントロール パネル」-「モデム」で見たいモデムを選択し,「プロパティ(R)」-「接続」-「詳細(V)...」-「ログの表示(V)」を選びます。なお,このログは接続一回毎に上書きされてしまいます。「ログの表示(V)」の上にある「ログに追加(A)」をチェックすると,接続毎の記録はファイルの後ろにどんどん追加されていきます。ちなみに,このログは,Windows ディレクトリにある モデムの名前+.log というファイル名がその実体です。
△UNIX:man の出力結果をテキストファイルにする (1999/12/14)
unix では,man コマンドを利用することで,コマンドのヘルプを見ることができます。例えば ls コマンド のヘルプを見たい時には,man ls のようにします(なお,余談ですが,最近はヘルプが日本語された jman というコマンドも使えることが多いようです)。
ここで,見たヘルプの内容を,例えばテキストファイルに落としたいと考えます。そこで,man ls > filename.txt のようなコマンドを使って,filename.txt にそのヘルプの内容をファイル化します。しかし,これには実は問題があります。エディタなどで filename.txt の中身を見ると,^H などのコードが大量に含まれ,かなり読みづらいのです。
実はこれは制御コードなのです。man でヘルプを見た時,文字が強調されていたり,下線が引かれたりしていませんでしたか? それを指示しているのがこれらなのです。しかし,テキストファイルで見るぶんには邪魔です。sed などを用いれば簡単に除去できそうに思いますが,そう簡単にはいきません。やってみればすぐにわかるでしょう。
テキストファイルに適した出力を得るためには,次のようなコマンドを用いると簡単にできます (ls を例にします)。各コマンドが何をしているかは man して見てください ^^。
man ls | colcrt | col > filename.txt
△プログラミング言語 C の新機能 Part XXXIV: stdarg.h: va_copy (1999/12/13)
stdarg.h ヘッダに新たなマクロが追加されました。それは va_copy です。
可変長引数を使用する時には,va_start で可変長引数への参照のためのオブジェクトを初期化し,va_arg で型を指定して可変長引数を取りだし,va_end を使用してオブジェクトを破棄していました。しかし,途中まで可変長引数を取り出したけど,実は今までの型が間違っていて,途中から取り出しを再開したいという要求がありました。そのような場合は,始めから va_start を使ってやり直す必要がありました。しかし,この va_copy を用いることで,任意の位置の取り出し位置を覚えておけるので,その位置から再び取り出すことができるようになります。
△PC/AT 用のフリーな XMS/EMS/VCPI ドライバがない! (1999/12/12)
現在の FreeDOS の最新バージョンは β3 です。なかなかβバージョンから抜け出せず,正式版が出てこないです。それにしても FreeDOS を使う上で問題となるのが,フリーな EMS ドライバがないということです。PC98x1 用には,いくつかフリーな XMS/EMS/VCPI のメモリドライバがあったのですが,PC/AT 用のはさっぱりです。特に日本語環境での使用を考えると,FEP が必要となりますが,それを動作させるためには,ほとんど必ず EMS が必要となります。しかし,EMS を使えるフリーなメモリドライバがないので致命的な問題となっています。
△WarpLink: PDS 16bit OMF Linker (1999/12/11)
またまた,無料で使える OMF 16bit Linker を発見しました。この Linker は元々商用として売られていたようですが,なんと Public Domain Software で公開するということです。しかもソースファイルも公開されています。Linker は 16bit の DOS の実行ファイルを作成できるほかに,オーバーレイや,ダイナミックリンクもどきにも対応しているようです。
△UNIX:su を使って root 権限を得るための設定方法 (1999/12/10)
最近,Free の UNIX を導入して,自宅などで UNIX を利用している人も多いと思います。UNIX では管理者とユーザが完全に分かれており,管理者は root という名前を使ってログインします。この名前でログインすると,一般ユーザが利用できないいくつかのコマンドを利用することが可能になり,そのマシンを管理することができます。
普通に UNIX を使用する時は,すべての操作を root で行うのは危険です。したがって通常一般ユーザでログインします。しかし,そこで root でしかできない操作をしたくなった時には,もう一度ログインし直す必要があります。これは面倒です。そこで su というコマンドを利用することで,ログアウトしてさらに root でログインするという手間を省くことができます。
しかし,誰もがこの su コマンドを使えるわけではありません。su を使えるのは,wheel に属しているユーザだけです。あるユーザを wheel に属させるには,/etc/group ファイルの中の wheel:*:0:root のように書かれている部分に,追加したいユーザ名を追加することにより行われます。例えば,ユーザ hoehoe を追加するには,wheel:*:0:root,hoehoe のようにします。
△REG:システムモニタの表示更新間隔を変更する方法 (1999/12/09)
システムモニタは,CPU の利用率などの種々の状態をモニタすることのできる Microsoft 謹製のツールです。このツールでは,現在の状態を更新する間隔を設定することができますが,ダイアログで設定できるよりもっと早い間隔で更新させたいという要求があります。そのためには,"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\System Monitor" の中の "View" のバイナリの中をいじります。オフセット +0x14:DWORD で棒グラフ,+18:DWORD で折れ線グラフ,+1C:DWORD で数値表の値が入っています。値の単位は msec のようです。
△Win98SE (IE5?) でシステムリソースが減っていく現象を回避する方法 (1999/12/08)
ひどい話ですが,Windows 98 Second Edition では (または IE5 でも?),何もアプリケーションをインストールしなくても,起動して数時間するとシステムリソースが不足してしまう現象が起こるようです。この現象を回避するには,「コントロールパネル」-「システム」-「デバイス マネージャ」-「システム デバイス」-「アドバンスト パワー マネジメント サポート」のプロパティの中にある「設定」の「電源状態のポーリングをしない」にチェックを入れるとよいようです。
△REG:インストールされているフォント名からファイル名を得る方法 (1999/12/07)
標準の Windows API では,インストールされているフォントからそのファイル名を得る方法は用意されていません。そのような時には,次のレジストリキーが参考になるのではないでしょうか。そのキーは,"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts" で,名前 = ファイル名 の形式でフォントが列挙されています。このキーの中の名前と一致する項目を選びだし,そのファイル名を得ればよいわけです。
△プログラミング言語 C の新機能 Part XXXIII: LEX#2:浮動小数点定数の 16 進数表記 (1999/12/06)
計算機で浮動小数点数を扱うと必ず誤差などの問題が付きまといます。例えば 10 進数の 0.1 という数値は,2進数では循環小数 0.0[0011] (0011 の部分を永遠に繰返す)となり,正確に 0.1 という値をあらわすことがきません。コンパイラなどの言語処理系は 10 進数で書かれた浮動小数点数を 2 進数に変換するので,このときの変換アルゴリズムにより,表現している値が微妙に変化してしまうことがあります。これは 10 進数から 2 進数への変換を処理系に任せることにより起こっている問題です。したがって,直接 2 進表現で浮動小数点定数を記述できれば,この問題はなくなります。
今度の C 言語では,16 進数で浮動小数点定数を記述できるようになります。書き方は,0xaaaa.ccccP+10 のように記述します。aaaa の部分には 16 進数で整数部分を,cccc の部分には 16 進数で小数部分を,P の後ろには指数(2 のべき乗)を 10 進数で書きます。P は小文字 p でも許されており,また p の後ろには符号 + か - の記述も許されています。16 進整数定数と間違えないようにするため,この指数部は省略することができないので必要がないときも必ず 0x1234P0 のように記述する必要があります。0x1234P0f や 0x1234P0FL のように明示的に浮動小数点定数であることを示すこともできます。
△500 円硬貨 (1999/12/05)
2000 円札を作るとかいっていたら,今度は 500 円玉を新しくするらしい。韓国の硬貨を使った偽造事件に対応するためで,500 円玉は今までの銀色から黄色っぽい色(黄金色?)になるようだ。それにしてもこれで本当に大丈夫なのだろうか?
△IE でリンクの色をいったんクリックした後の色から一度もクリックしていない色へ戻す方法 (1999/12/04)
html にはリンクを記述することができます。ほとんどのブラウザでこれを表示すると,リンクの部分は色が変わっており,一度クリックすると次からはその部分の色が変わって,一度そこを訪れたことがあることを示します。しかし,何からの理由により,一度訪れたところの色を一度も訪れていない時の色に戻したいことがあるでしょう。IE では,「インターネット オプション」にある「履歴のクリア」を実行すると元の色に戻せます。
△BIOS Setup 画面の出し方 (1999/12/03)
PC が起動する時,特定のキーを押し続けることで,BIOS の Setup 画面を出すことができる BIOS が多いと思います。しかし,それを出すためのキーは BIOS メーカそれぞれでバラバラになっているのが現状です。したがって,それを呼び出すキーを忘れてしまうと,まぐれでそのキーを当てようとしてもなかなか難しいということになります。そんな時には,次のキーを試してみるとよいでしょう。きっとどれかに当たるに違いありません。
F1
F2
F9
F10
Delete
Ctrl+Delete
Ctrl+A
Ctrl+Alt+S
Ctrl+Alt+Esc
△FAT32 ドライブでクラスタサイズを指定してフォーマットをする方法 (1999/12/02)
FAT32 ドライブをフォーマットすると通常は次のようなクラスタサイズになります。
FAT32 のデフォルトサイズ
パーティション
サイズ クラスタ
サイズ
8GB 未満 4KB
16GB 未満 8KB
32GB 未満 16KB
32GB 以上 32KB
しかし,実はクラスタサイズを指定してドライブをフォーマットすることができます。そのやり方は,"format drv: /Z:n" としてします。drv にフォーマットしたいドライブ名を,n に 1 クラスタあたりのセクタ数を指定します。例えば,1 セクタ 512 バイトの IDE/ATA ディスク上のドライブ C: をクラスタサイズ 4KB でフォーマットすることを考えます。すると,n は 8 (4096/512) になり,ドライブ名は C となります。したがって,"format c: /Z:8" としてフォーマットすればよいことがわかります。
△512MB 以下のパーティションを FAT32 でフォーマットする方法 (1999/12/01)
Win95 OSR2 や Win98 では FAT32 がサポートされています。しかし,FAT32 でハードディスクをフォーマットするためには,パーティションサイズが 512MB 以上でなくてはならないという条件がありました。しかし,実はこの制限ははずすことができます。制限をはずすには,パーティションを作成する時に,"fdisk /FPRMT" として fdisk を起動してパーティションを作成します。これで FAT32 を使うことができるようになります。
▲1999/11
△Kill IE4/IE5 Logo が「iP! 2000 年 1 月号」に収録 (1999/11/30)
Kill IE4/IE5 Logo ver2.08 が 29 日発売の iP! 2000年 1月号の p.62 に掲載されました。今回は他のソフトともども比較的スペースがあり、今まで掲載された中でも大きい方です。写真、アイコン、解説文があります。あなたは必要? 不必要? みたいな見出しがついてました。もちろん「必要」ですよねぇ~ ^-^。
△プログラミング言語 C の新機能 Part XXXII: CPP#7:文字列定数とワイド文字列定数の結合 (1999/11/29)
プリプロセッサは、並んだ二つの文字列定数を一つの文字列定数に併合する役割を持っています。例えば、文字列定数 "hoehoe " と文字列定数 "room" が並んでいれば、その二つを結合した文字列 "hoehoe room" に、ワイド文字列定数 L"hoehoe " とワイド文字列定数 L"room" が並んでいれば、結合されたワイド文字列定数 L"hoehoe room" に変換されます。しかし、文字列定数とワイド文字列定数に関する結合に関しては未定義の動作となっていました。
今回の C 言語では、文字列定数とワイド文字列定数は結果として、単一のワイド文字列定数になることになりました。これは、ワイド文字列を使用した関数で、新たに余計なマクロを定義しなくてもすむようにするためです。例えば、inttypes.h で定義されているマクロ PRIxFAST32 などを使うことを考えます。もし今回の決定が無ければ、ワイド版のマクロを別に定義する必要にせまられますが、今回の決定により、wprintf ( L"val=%"PRIxFAST32"\n", intfast32val ) のように何ら不自然ではなく記述することができます。
△Win98: ダイアルアップでの IP パケットサイズ (1999/11/28)
家庭からインターネットをする時には、ISP (Internet Service Provider) にダイアルアップしてからすると思います。このときの IP パケットの大きさ (MTU) は Win95 では 1500 バイトの大きさで固定でした。しかし、Win98 ではこのパケットの大きさを変更することができます。それは、「コントロールパネル」-「ネットワーク」-「ダイアルアップ アダプタ」のプロパティ-「詳細設定」-「IP パケット サイズ」から「自動」、「小」、「中」、「大」のどれかを選ぶことができます。しかし、「小」、「中」、「大」というのは少し漠然としています。具体的には、「小」は 576 バイト、「中」は 1000 バイト、「大」は Win95 と同じ 1500 バイトのようです。また「自動」は「小」と同じ大きさのようです。
△Windows 起動前にセーフモードでの起動を指示する方法 (1999/11/27)
Windows をセーフモードで起動する場合には、メニューを出してそこからセーフモードを選択する方法がありますが、この方法はメニューを出す手間が必要です。ところがもっと簡単に safe モードを指示する方法があります。その方法は Starting Windows ... の前から CTRL キーを押しっぱなしにしておくのです。この方法だとスマートに指示できますね。
△REG:explorer のプロパティ内の「エラー チェックの履歴」と「バックアップの履歴」を「不明」に戻す方法 (1999/11/26)
「最適化の履歴」に関しては、前回説明しましたが、その同じプロパティーページには「エラー チェックの履歴」と「バックアップの履歴」というのもあります。これらも場所が異なる以外は同じです。「エラー チェックの履歴」に関しては、"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\LastCheck" に、「バックアップの履歴」に関しては "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\LastBackup" に情報があります。
△REG:explorer のプロパティ内の「最適化の履歴」を「このドライブが最適化されたのは不明です」に戻す方法 (1999/11/25)
explorer からドライブを選択しプロパティで現れるダイアログのツールのタブの中で、「最適化の履歴」というのがあります。これは、そのドライブを何日前に defrag したかという情報を示しています。まだ一回も defrag してない時には、「このドライブが最適化されたのは不明です」というメッセージが表示されています。またもし一回でも defrag をすると「このドライブが最適化されたのは xx 日前です」というメッセージになります。
この表示を「不明です」の表示に戻すには、"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\LastOptimize" の中の名前の値を削除します。このキーの中の名前はドライブ番号をあらわしているので、その名前の値を削除すれば「不明です」の表示に戻すことができるわけです。
△アプリケーションから開く(E)...をメニューに出す方法 (1999/11/24)
explorer で関連付けされていないファイルをダブルクリックすると、「ファイルを開くアプリケーションを選択」というダイアログボックスが出て、そのファイルを開くアプリケーションを指定することができます。その時、「この種類のファイルを開く時は、いつもこのアプリケーションを使う(U)」にチェックを入れておくと、次回からは、そのアプリケーションを使ってそのファイルを開いてくれるようになります。
しかし、ついその気はないのにうっかり「この種類のファイルを開く時は、いつもこのアプリケーションを使う(U)」にチェックを入れたまま OK ボタンを押してしまうことがあります。こんな場合でも、次回から必ずそのアプリケーションで起動してしまい、他のアプリケーションで起動することができません。
この状態から回復するには、レジストリを直接変更する方法や、explorer のオプションを変更する方法のほかにもっと簡単な方法があります。それは、その対象としているファイルを shift キーを押しながら右クリックをして、メニューを出す方法です。この方法を用いると、関連付けされていないファイルにしかあらわれない「アプリケーションから開く(E)...」が、関連付けされている場合にもあらわれるようになります。そこで、メニューから「アプリケーションから開く(E)...」を今一度選択し、設定をし直せばよいというわけです。
△REG:Internet Explorer のタイトルバーのタイトルの後ろ部分につく文字列 (1999/11/23)
Internet Explorer を起動するとタイトル部分は、例えば、「ルートページ - Microsoft Internet Explorer」のように表示されます。実は、この "Microsoft Internet Explorer" の部分の文字列を変更することができます。それには、"HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main" の中に、文字列としてキー "Window Title" を作ります。その中に表示したい文字列を書き込みます。例えば、"Window Title" の値を "seclan のほえほえルーム" というにすると、タイトルバーには、「ルートページ - seclan のほえほえルーム」のように表示されます。
また "Microsoft Internet Explorer" がただ鬱陶しいという人は、文字列の中を空にしておくと何も表示されません (ただちょっと間抜けな "-" が表示されてしまいますが)。"Window Title" のキーを削除すると、"Microsoft Internet Explorer" が復活します。
△プログラミング言語 C の新機能 Part XXXI: 暗黙の関数宣言 (1999/11/22)
現在の C 言語の規格では、ある関数から他の関数を呼び出す時、とくにその関数のプロトタイプを宣言しなくても使用することができました。例えば stdio.h を読み込まずに、printf を使用するといったことです。しかし、今度の C 言語ではそのような場合、その関数の呼び出しは規格上未定義の動作となります。ただ実際には多くの処理系では警告を出してコンパイルするよう実装されることでしょう。この辺の機能は C++ に近くなっていますね。
△最近の geocities の FTP (1999/11/21)
最近テレホーダイタイム前後は、FTP がつながりにくくなった気がする。昔は、別にそんなこと無かったのに...。ホームページの容量を 4M から 12M に増量した影響なのかな? でもこれってやはり tripod ができたおかげだよな。競争相手が出てくると違うね。
△ThinkPad240 でサスペンド後に Level2 キャッシュが無効になる現象 (1999/11/20)
どうも現在出回っている ThinkPad240 には情けないファームウエアレベルでのバグが存在するようです。そのバグとは、いったんサスペンドさせると Level2 キャッシュ、いわゆる L2 キャッシュが無効になってしまうようなのです。いったん無効になった場合、電源を入れ直さないと有効に戻らないようです。さっさと IBM から新しい System ROM を出してもらうことを期待しましょう。
△REG:WindowsUpdate をメニューから消す (1999/11/19)
Win98 などでは、スタートメニューに WindowsUpdate の項目があります。しかし、人によってはそんなものは使わないので、邪魔なだけなこの項目をメニューから消したいと思っているでしょう。
まず、スタートメニューからすぐ見えるところの WindowsUpdate は、単なるショートカットなので "Windows Update.lnk" ファイルを消去するか、Hidden 属性にすることで消すことができます。
実は、さらにスタートメニューの「設定(S)」のところにも WindowsUpdate の項目があるのです。この項目を消すには、 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" の中に、NoWindowsUpdate という項目をバイナリで作り、値として 01 00 00 00 を設定します。これで explorer を再起動することで設定のところにある WindowsUpdate も消すことができます。
△REG:Windows へのログオンダイアログ無し (ネットワークへのログオン無し) の自動ログオン (1999/11/18)
実は、Windows を使用する上で、ログオンダイアログをまったく出さずに Windows のデスクトップ画面まで行く方法があります。これは、TweakUI の自動的にログオンといった機能とはまったく別のものです。しかし、この機能には一つ問題があります。それは、ネットワークを使用している場合ネットワークにログオンしてくれないのです。もしネットワークにログオンしたければ、いったんログオフしてあらかじめログオンしなくてはなりません。
これをわかっていて機能を使うぶんには問題がないのですが、人によってはなぜかこのような現象になってしまったという人もいるようです。これは、Windows を 例えば C:\WINDOWS\OPTIONS\CABS から setup.exe を使用して再インストールした時、同じディレクトリに msbatch.inf なるファイルが存在していると上記のようになるようです。
さて、この機能を有効/無効にする方法は、レジストリのエントリをいじることで実現できます。"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\Real Mode Net" キーの中に "AutoLogon" というバイナリが存在するとこの機能が有効になります。無効にしたい場合には、"AutoLogon" 自体を削除するとこの機能を無効にすることができます。
△REG:Explorer の前回終了方法の設定場所 (1999/11/17)
Explorer を終了させるときのダイアログに現れる各項目の選択位置のデフォルトの設定場所は、"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer" の中の DWORD "Shutdown Setting" に保存されています。この中の値が 0 なら standby が、1 なら shutdown が、2 なら restart が、3 なら MS-DOS モードの起動が選択されます。したがって、前回の方法とは別に、あらかじめレジストリに希望の値を設定しておけば、希望の項目を選択させておくことができます。
△Explorer に前回の終了方法を記憶させない方法 (1999/11/16)
IE4 などをインストールすると新しい explorer がインストールされます。しかしこの explorer は従来の explorer とは違って、「スタート」-「Windows の終了(U)」でダイアログを出して、終了を選んで OK で Windows を終了させると、その選んだ項目を記憶して、次回起動時にその項目をあらかじめ選択しておいてくれます。しかし、いつもは電源を切るよう終了しているが、たまたま再起動を選んでしまって、その後いつものように終了しようとしたら再起動になっている状態で OK を押してしまったという状況を作り出すことがあります。これを迷惑と思う人もいます。
この状況を回避する手段があります。実は、前回選んだ項目が記憶されるのは OK ボタンを押した時なのです。したがって、OK ボタンを押さずに再起動をすればよいのです。ではどうやればよいのでしょうか。別に新しいソフトをインストールする必要はありません。そのやり方は、単に「再起動する」の項目の部分をダブルクリックするだけでよいのです。これで選んだ状態が記憶されずに実行されます。ちなみに、「再起動する」以外の項目でもこのやり方は使えます。
△プログラミング言語 C の新機能 Part XXX: printf: 書式文字列で %lf を許容 (1999/11/15)
浮動小数点数を printf ファミリで出力する時には、f,e,g,E,G のどれかを使うと、float 型か double 型の値を出力することができました。ただし、float 型は printf の引数に渡される時点で double 型に拡張されてしまうので、実質は double 型の値を出力する時に指定する変換文字となります。そして、もう一つの浮動小数点数の型 long double 型を指定する時には、Lf,Le,Lg,LE,LG のように大文字の L を前に付けて表現していました。
しかし規格をよく知らない人は、例えば、変換文字に f を使用することを考えると、float 型は f を、double 型はもっと大きいから lf を、long double 型は Lf を使っていることがよくありました。lf という書式文字列は規格では定義されていないので使うべきではないのですが、比較的多くの実装でこの表記が容認されてきました。
今度の C 言語は、このような状況をふまえ、lf の書式文字列を容認することになりました。これで、今まで規格外の書き方をしてきた人は救われましたね (^^)。
△Windows を終了させるショートカットを作る方法 (1999/11/14)
Windows を終了させるには、スタートメニューから「Windows の終了(U)」-「電源を切れる状態にする(S)」を選択しなくてはいけません。しかしこれが面倒であるという人もいます。そのような時には、デスクトップに Windows を終了させるショートカットを作りましょう。デスクトップを右クリックして現れるメニューから、「新規作成(N)」-「ショートカット(S)」を選択し、ショートカットを作成します。現れたダイアログの中のコマンドラインに rundll.exe user.exe,exitwindows という文字列を指定します。ショートカットを無事作成できたら、さっそくダブルクリックしてみましょう (^^)/~。
△エクスプローラでファイルの属性を表示する (1999/11/13)
いつのころからか(IE4のころか?)エクスプローラの、表示(V)-詳細(D)の画面でファイルの属性が表示できるようになりました。その設定は、表示(V)-フォルダ オプション(O)-表示の中にある「詳細表示でファイルの属性を表示する」のような項目にチェックすると表示できるようになります。
また上のヘッダ項目も実はドラッグできるようになっているので、邪魔なだけな「ファイルの種類」を一番後ろに追い出して、「属性」を前の方に持ってくるといいでしょう。
△Internat って何? (1999/11/12)
日本語 Windows で CTRL+ALT+DEL を押して出現する「プログラムの強制終了」ダイアログボックスの中に、いつもいる Internat というプログラムがあります。また、例外が発生した時、Internat 中でエラーが発生うんぬんというメッセージが出ることもあります。ではこの Internat っていったい何のプログラムなのでしょうか? Internet 関連のモジュールなのでしょうか?
実は、Internat はタスクトレイにある鉛筆アイコンを出しているプログラムなのです。正式には、「Keyboard Language Indicator Applet」ということで、言語毎のキーボードの操作に関するユーザインタフェース機構を提供しているようです。ちなみに、この Internat.exe を起動しないようにすると、タスクトレイの鉛筆アイコンは出現しなくなってしまいます。
△超漢字 (BTRON3) が明日発売 ! (1999/11/11)
BTRON3 の実装の一つ、「超漢字」が明日12日から、オープンプライス(参考:直販 \15,000-)でパーソナルメディアから発売されるようです。何でも、13万文字も使えるようになっているらしいですよ。これで、ユニコード表を印刷できるようになるかな (^^)。
△Kill IE4/IE5 Logo が「TechWin 12月号」に収録 (1999/11/10)
Kill IE4/IE5 Logo ver2.07 が 8日に発売の ASCII の雑誌 TechWin 12月号に掲載されました。ページは 173、番号は 179 です。他に掲載されているソフトともども説明は3行程度のものです。画面写真はありません。
△IME2000 の単語登録画面での全角文字入力不能現象を直す方法 (1999/11/09)
Office2000 などに IME2000 が入っているので、今ある IME からアップデートしている人も多いかと思います。しかし、単語登録しようとしたら画面で全角文字が入力できないという現象に遭遇する人がいるようです。このような現象が発生する場合には、Global IME という日本語版でない Windows で日本語を扱えるようにするモジュールが組み込まれていることがあります。これをアンインストールすることでこの現象が解消されることがあります。
△geocities の更新一覧ページの一軒家とビルの絵(たぶん最終回) (1999/11/07)
以前から [1] [2] [3] のように何度も geocities の更新一覧のページの謎を解明すべく努力をしてきました。しかし、ここ数ヶ月の努力によりようやくその条件が明らかになりました。結論から言えば、今度の更新一覧のページの一軒家とビルの絵は geocities にどうやってコンテンツを入力したのかをあらわしています。具体的に言うと、あのページが更新される直前の geocities へのログインが、ftp の場合一軒家に、ファイルマネージャの場合、ビルの絵になります。だから、毎回のコンテンツのアップデートを ftp で行っていると(ftp で geocities にログインして、ファイルを転送すると)一軒家に、ファイルマネージャのファイル転送機構を使ってファイルをアップロードしたり、ファイルマネージャで編集したりするとビルの絵になるのです !
ただここで重要なのはログオンをするだけでいいということです。だから、ftp でファイルを転送後、ファイルマネージャでログオンすると、その日の絵はビルになります。またせっかくファイルマネージャを使ってもそのあと ftp でログオンしてしまうと、おそらく一軒家になってしまいます。
このような結論をふまえ過去の行動と絵の関係を考えると確かにこの結論と一致しています。 [1]の場合、引っ越した直後なので、最終的に適切にファイルが引っ越されたかどうかを確認するために、ファイルマネージャを使っています。また[3]の場合には、あの日だけは geocities へのファイルの転送をファイルマネージャを使って行っていました。だから、ビルになっていたのです。しかし、次の日は ftp での転送しか使っていなかったので、また一軒家になってしまったのです。
これで謎は多分解明されたでしょう。それにしても何でこのように変更してしまったのでしょうかね???
△一軒家とビルの絵 (1999/11/06)
このページでその日更新したホームページを紹介してします。で、そのアイコンが一軒家かビルの絵のどちらかになるのですが、その条件がわからないと以前言っていました。しかし数ヶ月の努力からようやくその条件がわかりました。で、その条件は明日お知らせします。
△さまざまな OS のファンクションコール方法 (1999/11/05)
以前 Windows NT の場合のファンクションコール方法を示しましたが、UNIX についての情報も入ったのでまたまとめてみましょう。
さまざまな OS のファンクションコール方法
OS 呼び出し
形式 説明
DOS int 21h 典型的には ax, ah にファンクション番号。パラメータはレジスタ。
Windows VxD int 20h int 20h, dw ファンクション番号, dw VxDの識別番号
Windows 9x AP int 30h Ring3 から Ring0 (VxD レイヤー) に移行
Windows NT int 2eh eax にファンクション番号
FreeBSD int 80h eax にファンクション番号。パラメータはスタック。
Linux int 80h eax にファンクション番号。パラメータはレジスタ。
Windows 9x のアプリケーションは通常 ring3 で動作しています。しかし例えば、kernel32 などにある機能を呼んだ場合、自分で処理する代わりに VxD レイヤーにある機能を呼びます。その時に int 30h を使ってリングレベルを変更するのです。
VxD は CD20FFFFNNNN のような機械語形態でファンクションが形成されます。FFFF はファンクション番号、NNNN は呼び出す対象となる VxD の識別番号です。プログラムの実行がこの部分に差しかかると CD20、つまり int 20h の割り込みがかかります。すると、VxD レイヤーでこれを FFFFNNNN で示されるファンクションのエントリアドレスを見つけ出し、そこを呼び出す near call 命令でこの部分すべてを置き換えます。したがって、その時に呼び出すことの無かった部分は fixup の必要が無く、また使用する部分だけを fixup するので効率的に動作できます。
△TP600 ハードディスク交換記 #4 (1999/11/04)
(つづき)ここまでわかれば、もうしめたものである。ブートローダを何とかすればよい。そこでまず、fdisk /mbr を試してみる。これは、ハードディスクの MBR を修復するというオプションである、といわれている。ただ具体的に何をするのかは知らない。とりあえず、コマンドを実行し再起動してみる。しかし、まったく効果無し。ほぇ~。
ということで fdisk に付属のブートローダに見切りをつけ、MBM というブートローダを使うことにした。このブートローダでは起動する度に起動パーティションを指定できるのである。と、いかにも始めて使うかのように記述したが、実は、以前の内蔵ハードディスクのブートローダは MBM に変更してあったりする。だから、この新しい disk でもこれを使おうと思っていたので、ちょうどよかったのである。ただこのブートローダは、8G over の対応に不安があるのが問題ではある。
MBR のバックアップを取り MBM install でブートローダをインストールする。そしてマシンの再起動をかけると...。ようやく、いつもの見なれた画面を見ることができた。やはりブートローダに問題があったようである。
調子にのって、Vine Linux のインストールを試みる。TP600 は CDROM からのブートに対応しているのでインストールは簡単である。インストール後 MBM から起動しようとするが、できない...!。やれやれ。問題はまだまだ続きそうである。(終)
△TP600 ハードディスク交換記 #3 (1999/11/03)
(つづき)エラーメッセージの内容はエラー番号であって、即座に意味が分かる自然言語による表示ではなかった。したがって、それを見ただけでは何が起こったのがさっぱりわからないのである。確か、マニュアルにこの番号の説明があったような気がしたが、箱ごとしまわれてしまったマニュアルを取り出すのは非常に面倒であるように思えた。いや実際非常に面倒である。そこで、推測で原因を考えることにする。まず第一にハードウエアには異常はないはずである。なぜならば、内蔵ハードディスクは何の問題も無く動いていたし、ウルトラスリムベイに入れた 10G のハードディスクも動作には問題はなかった。ハードディスク交換の際に壊れたことも考えられるが、あの程度のことで壊れるとは到底思えない。あれで壊れるのであればハードディスクを輸送するだけで壊れてしまうだろう。次に、ハードディスクの先頭に書かれているパーティションテーブル情報がおかしいという問題が考えれられる。しかしコピーする時に正常にパーティションが認識されていたのでこれも原因とは考えられない。すると MBR にあるブートローダがタコなのだろうか?
とりあえず、フロッピーディスクから DOS を立ち上げて、それでハードディスク上にある各パーティションにアクセスすることができれば、ハードディスクも正しく動いていることが確認でき、かつパーティションテーブルの情報にも問題が無いことがわかる。そこで、フロッピーから DOS を立ち上げてみた。正常に起動したので、ハードディスクにアクセスしてみる。すると何の問題も無く、ハードディスク上の各パーティションの中にあるファイルにアクセスできる。どうやら、ブートローダがおかしいようである。
(つづく)
△TP600 ハードディスク交換記 #2 (1999/11/02)
(つづき)ネジを外したから、金具から外れてもいいはずなのに、どうしてもハードディスクが外れない。しょうがないので、爪を金具とハードディスクの間に挟み、少し隙間を空けどうして外れないのかを調べることにする。もしかしてどこかに爪があるのかもしれない。そうだとすると、不用意に力をかけると金具やハードディスクが壊れてしまうかもしれない。隙間から覗き込むと何やらシート状のものがある事がわかる。もしかして両面テープ? もしそうだとしたらこれは力づくでないと外れない。ということで金具を壊さないように慎重に、ハードディスクを引き離しにかかる。力をかけるとまず金具とハードディスクの手前部分が外れた。シート部分を触るとねちゃねちゃしている。やはり両面テープである。ネジで止まっているのにさらに両面テープで固定されているとは! そこまでしなくてもいいのに、と思いつつ、奥側にあるハズのテープ部分をはがす。こうしてなんとか、金具とハードディスクを分離することができた。やれやれ。
次に、10G のハードディスクを慎重に金具の上に乗せる。いかんせん、両面テープがあるので、一度乗っけてしまうと位置を変更できない ^^;。そしてネジで再びハードディスクを固定する。これで万事 OK である。ハードディスクを再び本体の中に入れる。さぁこれで 10G のハードディスクに生まれ変わった! さっそく電源を入れる。するといつものように Windows が起動した。とはならなかった! なんと何も起動せずに画面には無情にも TP600 が出していると思われるエラーメッセージが表示され、そこで停止していたのだった。 (つづく)
▲1999/10
△TP600 ハードディスク交換記 #1 (1999/10/31)
TP600 用に 2.5 インチの 10G の IBM 製のハードディスク DCXA-210000 を買ってきた。これで Disk Full とはおさらばだ! 初期不良とかあったら嫌なのでまずディスク全体を FAT32 でフォーマットして scandisk で完全な検査を行う。TP600 では始めから入っている内蔵ハードディスクの他にウルトラスマートベイにもう一つハードディスクを入れることができる(別売りのアダプタが必要だけど)ので、そこにハードディスクを入れて検査をする。検査には結構な時間がかかったが、ハードディスクには問題が無いことが分かった。しかし、ここで一つの問題に気が付いた。それはドライブ番号に関してである。PC DOS のドライブ番号は DISK#0 の基本パーティション、DISK#1 の基本パーティション、DISK#0 の他のドライブ、...、という順番にドライブ番号が振られるので、他のディスクに基本パーティションがあるとドライブ番号がずれてしまうのである。
しかし、それはどうしようもないのであきらめて作業を続ける。次は、今のハードディスクの内容を一式コピーして入れ替えだ! ということでまずパーティションを切り直して、フォーマットし直す。ここでパーティションを切ったら、フォーマットをする前に必ず一度再起動を行うことがポイントである。この手間をけちるとひどい目にあう。それでコピーをする。コピーが終わったら始めから入っている内蔵ハードディスクとウルトラスマートベイのハードディスクを入れ替える。TP600 ははじめから内蔵のハードディスクを簡単に交換できるよう設計されているので交換は容易なのだ。内蔵されているハードディスクを引きずり出し、ハードディスクを固定している金具からネジをはずして、金具からハードディスクを取り外す...。取り外す...。取り外す...。外れない (;_;)。どうして !!! (つづく)
△PC98x1 でドライブを PC/AT と同じような配置で Windows を使用する方法 (1999/10/30)
NEC の PC98x1 ではドライブ番号は起動したドライブから順番に振られます。したがって起動したドライブにより毎回ドライブ番号が変わります。PC/AT とその互換機ではフロッピーディスクは、A: または B:、ハードディスクは C: からというように決まっています。PC98x1 で PC/AT と同様のドライブ配置で Windows を使用することができます。Win95 の場合には、setup /AT のように、AT オプションをつけてインストールします。Win98 の場合には、いったん sys /AT でシステムファイルをハードディスクにインストールするとできます。WinNT の場合には、Winnt /OX/AT でセットアップ FD を作成することでできます。
△Windows Update が落ちてしまう現象を改善する方法 (1999/10/29)
Windows のコンポーネントを簡単にアップデートできるという触れ込みの「Windows Update」ですが、この機能を使用して Update をするとプログラムがエラーで落ちてしまうことが起こるようです。そのようなことが起こった場合には、Program Files にある WindowsUpdate のフォルダを削除することで正常な動作に戻ります。
△ThinkPad 600 用 System ROM v1.13 にアップデート (1999/10/28)
新機種を発売するから(?)かどうかはわかりませんが、ThinkPad 600 系列の System ROM のバージョンが新しくなりました。今回の ThinkPad 600 用のアップデートは Windows2000 RC2 への対応や、LCD でフリッカーが起こることへの対応がなされているようです。ダウンロードは IBM のサイトからすることができます。
△電源管理に ACPI を指定して Win98 をインストールする方法 (1999/10/27)
Win98 を何もしないでインストールすると、電源管理は APM を利用した管理方式になります。APM でインストールした後から、ACPI での方式に変更する方法もありますが、はじめから ACPI を指定してインストールすることもできます。そのやり方は、セットアップの時「setup.exe /p /j」のようにオプションをセットして setup を起動することで行えます。
△Win98: Windows 起動時の scandisk を回避する方法 (1999/10/26)
Windows を正常に終了できなかった時などは、毎回 scandisk が起動してファイルシステムの検査がなされます。しかし、きちんと「Windows の終了(U)」 したにもかかわらず、毎回正常に終了しなかった場合にも、起動のたびに scandisk が起動してしまいます。これを回避するには、Windows の system ディレクトリの中にある msconfig.exe を起動し「全般」のタブの中にある「詳細設定(E)」の中の、「不正なシャットダウンの後にスキャンディスクを実行しない(S)」をチェックすると scandisk 起動させなくすることができます。
それにしてもなんだかこのごろ windows の設定はこれでばっちり 100 みたいな感じになりつつあるような ...
△explorer で起動と同時にデスクトップを開く方法 (1999/10/24)
コマンドプロンプトから explorer と入力してエクスプローラを起動すると、例えば、Win98 では C: ドライブが選択された状態で起動してしまいます。これをデスクトップを選択した状態で起動するためには、「explorer /SELECT, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}」または「explorer /e,/SELECT, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}」として起動します。前者の形式はマック式の表示形式、後者はエクスプローラ形式の表示形式となります。
△一時的なフォルダ(テンポラリフォルダ)の指定方法 (1999/10/23)
Win9x でアプリケーションがテンポラリファイルを作成することがあります。それは通常は C:\WINDOWS\TEMP に作成されますが、このフォルダを別の位置に指定することができます。やり方は、例えば、今テンポラリのフォルダを D:\TEMP に指定したいとすると、 autoexec.bat に set TMP=D:\TEMP という行と set TEMP=%TMP% という行を追加することで環境変数 TMP と TEMP を設定します。本当は片方だけでいいのですが、アプリケーションによって参照する環境変数が違う可能性があるので両方指定しておいた方が無難です。
△インターネット接続を自動切断させない方法 (1999/10/22)
少し大きなファイルをダウンロードしていて、そのまま 20 分くらい放置しておいたりすると、「切断しますよ」というダイアログが出て勝手に接続が切られてしまうことがあります。このような場合は、「インターネット オプション」-「接続」-「ダイアルアップの設定(N)」で接続しいる ISP の設定を選び、「設定(S)...」-「詳細(V)」でダイアログを出すと、「アイドル時間が次の場合切断する(C)」という項目があります。このチェックをはずせば改善されます。あるいは時間を調整することもできます。
△Microsoft ファミリ ログオンとは? (1999/10/21)
Win9x には、「ネットワーク」-「追加(A)」-「クライアント」-「製造元(M): Microsoft」の「ネットワーク クライアント」から「Microsoft ファミリ ログオン」というよく分からないクライアントが用意されています。これは「Microsoft ネットワーク クライアント」とほとんど同じなのですが、一つだけ異なる点があります。それはログオン時の処理です。「ネットワーククライアント」ではダイアログが出てそこにユーザ名とパスワードを入力するとログオンすることができます。しかしこの方式では間違ったユーザ名を入力してしまって、そのままログオンしたりすると最終的に誤ったログオン名がたくさん作られてしまうという問題が起きます。ファミリ ログオンを導入するとユーザ名を選択する UI になるので前述のような問題が発生しないという寸法なのです。
△Explorer/Internet Explorer を起動後に全画面表示にする方法 (1999/10/20)
Internet Explorer をいきなり全画面表示にする方法は、以前に記しました。しかし実は、起動した後から、全画面表示にする方法があります。しかも Internet Explorer だけではなく、通常の Explorer も全画面表示にすることができます。やり方は、タイトルバーを ctrl キーを押しながらダブルクリックするだけです。これで全画面表示になります。元に戻す時は、キーボードから ALT+Space を押して、「元のサイズに戻す(R)」を選択すると戻ります。
△Kill IE4/IE5 Logo が「ウィンドウズパワー vol3」に収録 (1999/10/19)
Kill IE4/IE5 Logo ver2.07 が昨日発売の ASCII の雑誌ウィンドウズパワー vol3 に掲載されました。ページは p.70、番号は 639 です。例のごとく扱いは小さいです。あと画面写真が今までのものとは違っていて、なんとタスクトレイのアイコン+ポップアップメニューとなっていました。
△Microsoft の Y2K 対応状況 (1999/10/17)
世間をにぎわしている西暦 2000 年問題、通称 Y2K 問題。Microsoft でも当然今までそんな事を考えているわけはなく、最近になってようやく対応することになりました。ホームページにその情報が出ていて、Win9x や Office を Y2K 問題に対応させるためのパッチが出ています。もっともサイズがでかいので無料の CD-ROM を申し込んだ方がいいかもしれませんが。
△Win98: 「ペイント」で gif と jpeg ファイルを保存できるようにする方法 (1999/10/16)
Windows には標準で簡単なお絵描きソフト「ペイント」が入っています。このソフトは、Windows 95 では bmp ファイルしか保存できませんでしたが、Windows 98 になってからは、標準で gif と jpeg ファイルが保存できるようになったはずでした。しかし、ファイル(F)-名前をつけて保存(A)を選択して、ファイルの種類(T)で一覧を出してみても、gif や jpeg が種類の対象として出ていないことがあります。でこれを出す方法は非常に不思議な方法です。まず gif と jpeg の画像ファイルをそれぞれ用意します。そしてペイントを立ち上げてそこに Drag & Drop します。すると、あーら不思議、ファイルの種類から gif と jpeg が選べるようになります。どうして???
△IME を無効化する2 (1999/10/15)
以前に IME を有効化/無効化する方法を紹介しましたが、Windows NT での winnls32.dll はきちんとメンテナンスがされていないようで問題が起きることがありました。今回は、より新しい API を使用した無効化関数を以下に示します。前回と違い今回は無効化だけで有効化できませんが、たぶんほとんどの人はこの関数だけで用は足りるでしょう。なおこれは Windows NT ver 3.5 では動きません。
//IME 無効化関数
//VOID WINAPI ImeDisable(HWND hwnd)
//引数: hwnd: 対象となるウィンドウ
//戻値: なし
VOID WINAPI ImeDisable(HWND hwnd)
{
static HMODULE himm32;
static HIMC WINAPI (*IMM32ImmAssociateContext)(HWND,HIMC);
if(himm32 == NULL){
himm32 = (HMODULE)LoadLibrary(_T("IMM32.DLL"));
IMM32ImmAssociateContext = (HIMC WINAPI (*)(HWND,HIMC))
GetProcAddress(himm32, _T("ImmAssociateContext"));
}
if(IMM32ImmAssociateContext)IMM32ImmAssociateContext(hwnd, NULL);
}
△ブラウザでふと思ったこと (1999/10/14)
Microsoft は Internet Explorer 5 とか出してるけど、そう言えば Netscape のmozilla 君はどうなったんだろう? 前は夏頃にリリースするといっていたのに...。まだ、アルファテストの段階まで行っていない様子。がんばれ! それにしても、Netscape Communicator が着々とバージョンアップをして、ついに 4.7 になってしまってる。mozilla 君が遅れているせいなのだろうか?
△現在実行中の自分自身の exe ファイル名を得る方法 (1999/10/13)
現在実行している自分のファイル名を得る必要に迫られることがあります。それを知るまず一つ目の方法は、もし main 関数から実行していれば、argv[0] を見ることです。次の方法としては、GetCommandLine API を使ってコマンドラインを取得して、自分で先頭にあるファイル名を切り出すことです。argv[0] はこのコマンドラインから切り出した値がセットされています。さて、実は呼び出し元のプログラムのこのプログラムの起動のさせ方によってはここに挙げた方法ではうまく取得できないことがあります。そのようなことから、GetModuleFileName API を使った方がよいでしょう。サンプルを示します。
#define STRICT
#include <windows.h>
#include <stdio.h>
main()
{
CHAR path[MAX_PATH];
printf("%s\n", GetModuleFileName(NULL, path, sizeof(path)));
return 0;
}
△Win32s,Win9x,WinNT を判別する方法 (1999/10/12)
プログラムを組んでいると Win32s, Win9x, WinNT といったプラットフォームを判別したくなる時があります。そんな時は、次のようなコードが役に立つでしょう。
/*************************************************************
関数: INT WINAPI GetPlatformID(void);
説明: 現在実行中の OS のプラットフォームを示す ID を得る
引数: なし
戻値: 現在実行中の OS のプラットフォームを示す ID
VER_PLATFORM_WIN32sWin32s または Win3.1
VER_PLATFORM_WIN32_WINDOWS Win9x (Win95, Win98, など)
VER_PLATFORM_WIN32_NTWinNT
*************************************************************/
INT WINAPI GetPlatformID(void)
{
DWORD d = GetVersion();

if(HIWORD(d) & 0x8000u){
return LOBYTE(LOWORD(d)) < 4 ? 
VER_PLATFORM_WIN32s:  VER_PLATFORM_WIN32_WINDOWS;
} else {
return VER_PLATFORM_WIN32_NT;
}
}
△プログラミング言語 C の新機能 Part XXV: enum 宣言での余分なカンマ (1999/10/11)
配列を初期化する時は、int i[ ] = { 1, 2, 3, } のように最後の余分なカンマは許されていました。しかし、enum 宣言では enum { a, b, c,} のように最後に余分なカンマを入れるとエラーになっていました。今回の C 言語では、このような enum 宣言での余分なカンマが許されるようになりました。
△CPU が AMD 3DNow! のサポートしているかを調べる方法 (1999/10/10)
今日は 10 月 10 日だから、10 時 10 分 10 秒が待ち遠しい日です。とまぁ、そんなことは置いといて、今回の話は AMD の 3DNow! 機能がその CPU でサポートされているかどうかを調べる方法です。で、その方法は極めて簡単です。
mov eax, 80000001h
CPUID
testedx, 80000000h
jnz Exist3DNOW
とこのように、拡張ファンクション番号 80000001h を eax に入れ CPUID を実行します。そしてもし edx の最上位ビットが立っていればその CPU では 3DNow! の機能が使えることを示しています。
△エディタも Y2K 問題? (1999/10/09)
2000 年になると計算機がそれを 1900 年と勘違いして動作がおかしくなると言われている 2000 年問題 (Y2K) ですが、なんとエディタにも 2000 年問題があったようです? 実は、WZ Editor v3.00 に対してバージョンアップがありました。新しいバージョンは v3.00D で主な変更点は、2000 年対応とのこと。うーん。意外なところに 2000 年問題が隠れているもんだ。
*差分のダウンロードはビレッジセンターからどうぞ
△RxDOS: もう一つのフリーな DOS (1999/10/08)
Free な DOS といえば、前回述べた FreeDOS、それくらいこの DOS は有名です。しかし、まだフリーな DOS は存在しているのです。それは RxDOS です。この DOS は昔はフリーではなかった様ですが、今は GPL のフリーソフトとなっています。説明によると Long File Name も一応使えるようなことが書いてありました。ただ例のごとくアルファベットだけでしょうが。ダウンロードは、FreeDOS のサイトからできます。
△FreeDOS: Free な DOS (1999/10/07)
16bit 用のコンパイラやアセンブラを実行させるためには、DOS が必要です。DOS を入手するためには、例えば、Windows 9x の DOS モードを使う方法や、いまだに販売されている IBM の PC-DOS を購入する方法があります。しかし、それ以外の方法もあるのです。実は、Free な DOS が存在しています(実際のライセンスは GPL)。それが FreeDOS です。さまざまなコマンドも同梱されていて、アメリカ人ならすぐにも現在の DOS と置き換えることができるでしょう。しかし、例のごとくコマンドなど DBCS (漢字など) には対応していないので、われわれがすぐに置き換えて使うということは難しいかもしれません。
△2000 円札? (1999/10/06)
なんか 2000 年になるので、2000 円札を作るらしい。沖縄でサミットが開催される前に発行するそうだ。しかも発行するまでの期間が非常に短期である。何を考えてるんだ? まぁ、あれば便利だろうけど。
△Win98 でサスペンドできなくなったのを修復する方法2 (1999/10/05)
Win98 でサスペンドができなくなってしまう状況から修復する方法がここで述べた以外にもあります。regedit.exe を立ち上げて、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VPOWERD を選択します。その中にある、Flags の値を 200 から 0 に変更します。そして SuspendFlags を 2 から 0 に変更します。そして再起動します。これで修復されます。
△プログラミング言語 C の新機能 Part XXIV: 配列要素中の記憶/型修飾子 (1999/10/04)
配列を宣言する時には、今までは [ ] の中には整数定数を書くことしかできませんでしたが、今度の C 言語では、可変長配列を記述することができるようになったことは以前示しました。実は今度の C 言語ではさらに [ ] の中に static, restrict, const, volatile といった記憶修飾子、型修飾子を記述することができます。修飾子とその効果は次の通りです。
修飾子とその効果
修飾子 サンプル 説明
static f(int p1[static 10]); 少なくとも 10 個はアクセスでき、p1 は NULL ではないことを保証
restrict f(int p1[restrict], int p2[restrict ]); p1 と p2 は同じ配列でないことを保証
const f(int p1[const]); p1 は変更できない(p1の内容は変更できる)。f(int * const p1); と同じ。普通に配列を宣言するのと同じ。
volatile f(int p1[volatile]); p1 が予期せず変更される可能性がある。f(int * volatile p1); と同じ。
△Win98 でサスペンドできなくなったのを修復する方法1(1999/10/03)
ここで述べたように Win98 ではサスペンドができなくなってしまうことがあります。その場合の修復方法を示します。まず1つの方法としては、コントロールパネルの「システム」の中にあるデバイスマネージャのシステムデバイスから「アドバンスト パワー マネージメント サポート」を削除します。しかる後に、コントロールパネルの「ハードウエアの追加」から「アドバンスト パワー マネージメント」(APM) を追加することで元に戻すことができます。
△Win98 でサスペンドできなくなってしまう方法(1999/10/02)
Win98 でサスペンドをした後、うっかりそのまま電源を切ってしまうことがあります。しかしこれを二度続けて行うと、Windows 起動時に「アドバンストパワーマネージメントコンピュータは、何度か待機状態になり、応答を停止しました。今後、待機状態にならないようにしますか?はいいいえ」と聞いてくることがあります。これは Windows がサスペンド処理をしたけれども、サスペンド処理がうまく行かなくて仕方なく再起動した。きっと PC のアドバンストパワーマネージメントモジュールにバグがあるのだろう。よしアドバンストパワーマネージメントを使用しないようにしますか?ということを聞いてきているのです。そこでうっかり「はい」と答えると以後サスペンドができなくなってしまいます。
△Undocumented DOS option(1999/10/01)
config.sys の中では、DOS コマンドを使用することができます。例えば、Win9x にある DOS7 では、DOS=high を指定すると、HMA 領域が使用できれば、そこに DOS を移動させることができます。また DOS=UMB を指定すると、DOS が UMB を管理するようになります。また DOS=auto を指定すると、himem.sys, ifshlp.sys, dblbuff.sys, setver.exe が読み込まれていない場合には自動的に読み込むようにします。また、これらのオプションはカンマで区切ることで複数指定することができます。
さて実は、ここで公開されていないオプションが存在しています。それは、DOS=single です。これが指定されると自動的に Windows が起動されずに、DOS が起動します。いわゆる DOS モードです。 これは PIF ファイルで「新しい MS-DOS 設定を指定する」を指定すると、アプリケーション固有の config.sys に追加され、勝手に Windows が起動することを抑止します。この名前はおそらく unix 用語である single mode から来ているのでしょう。
▲1999/08
△非公開メッセージ WM_SETMESSAGESTRING(1999/08/18)
Win32 では公開メッセージのほかに、いくつかの非公開メッセージが飛び交っていることはご存知の方はご存知でしょう。そのような非公開メッセージのうちの一つに、WM_SETMESSAGESTRING というのがあるようです。これはいったい何をするメッセージなんでしょうかね? (謎)
△geocities の更新一覧ページの一軒家とビルの絵(続報)(1999/08/17)
以前、ディスク使用率と更新一覧の絵が関係しているのではないかと書きましたが、どうもそうではない/それだけではないようです。現にこのホームページもディスクの使用率が 50% を超えているはずなのに一軒家になっているし。うーん、以前とは違って、今回は条件がよくわかりません。
△Kill IE4/IE5 Logo が ver2.07 にバージョンアップ(1999/08/14)
自作ソフト Kill IE4/IE5 Logo がバージョンアップして ver2.07 となりました。前のバージョンからの変更点は次の通りです。
OE4/OE5 に現れるロゴも消すようにした
順調に行けば、今日の午後あたりからダウンロードができるようになります。ダウンロードはいつもの通りこのページからどうぞ。
△ジオボードの作り方(1999/08/13)
以前、ジオボードが作れないと書いたけど、その原因がようやく分かった。なんとクッキーを有効にしないと、ジオボードの作成や管理はおろか、ジオボードへの書き込みさえできないのである。なんでこうなっているのだか、まったく理解できない。
△コマンドラインからダイアルアップネットワーク接続の画面を出す方法(1999/08/12)
マイコンピュータの下にあるダイアルアップネットワークの中の各接続対するダイアログボックスは、通常 Explorer からしか起動することはできないように思われます。しかし、それをコマンドラインから起動する方法があります。その方法は、「 rundll32 rnaui.dll,RnaDial エントリ名」とする方法です。このようにして rundll32 を実行させると、コマンドラインから接続の画面を出すことができます。
△ジオボードがついに公開!(1999/08/11)
今まで geocities で使える掲示板としては、ゲストブックという CGI が用意されていました。これは、新規の発言内容を上から追加していくという非常に単純なものでした。今回新しく公開されたジオボードは、このようにツリーで発言が記録され、各発言をクリックするとその内容が見れるというものです。したがって、発言の関係が非常にわかりやすくなります。
でも、ジオボードを作成しようとすると、なぜかサーバーの方でエラーとなって作れないんだよな。どうして?
△Win9x で RSRC32.DLL を使ってシステム/GDI/USER リソース使用率を得る方法(1999/08/10)
Win9x ではベースが 16 bit なので、GDI や USER で大きなリソースをたくさん消費できません。したがって、このリソースの使用率に常に気を配る必要があります。現在の使用率は、GDI や USER というリソース名で表現されます。システムリソースは、この GDI と USER リソースのうちの小さい方の値と同じです。
それを取得する方法は、Win16 API ならば、GetFreeSystemResources という API を使えば簡単に取得することができますが、Win32 には本来必要がないのでそのような API は存在しません。しかし、Win9x のような OS の場合には、Win32 上から何とかして取得したくなります。
その取得の一つの方法として、RSRC32.DLL を使う方法があります。ただしこの DLL はすべての Windows に含まれているわけではないので注意が必要です。具体的な方法を以下に示します。ただしエラー処理を省略してあります。
△geocities の更新一覧ページの一軒家とビルの絵(1999/08/08)
geocities ではその日更新されたホームページの一覧を表示するページがあります。例えば、このページです。ここではその日更新されたホームページの番号と絵(アイコン)でそれを示しています。
で、実は、その家の絵は二通りあって、一つはいわゆる一軒家の絵、もう一つはビル(アパート?)のような家の絵です。いままではこの絵は、index.html の大きさによって決まっていました。index.html の大きさが小さいと一軒家、大きいとビルの絵となります。しかし、この方法は最初のページにメニューをおいて具体的な内容はその先のページに置くという方式を取っている人に対しては、不利な方法でした。
最近、どうやら、この方式が変更されたようです。というのも index.html の内容によって変化しなくなったからです。多少実験をしたところ、今度はディスクの使用率により決まるようです。具体的に何 % 使ったらビルの絵になるのかは知りませんが、使用率が数 % だと確実に一軒家の絵になるようです。
#1002 番地が空き家になっていることを発見したので、1020番地から1002番地に引っ越しました。でもまだ http://seclan.i.am/ がうまくこの番地をさせていないようです。早く修正しなくては。
△Win98 でウィンドウを Win95 と同じように最前列に表示させる方法(1999/08/07)
あるアプリケーションを実行すると Win95 ではそのアプリケーションのウィンドウが最前列に表示されたけど、Win98 ではタスクバーが点滅するだけでそのウィンドウが最前列に来なくなった、ということはありませんか?これは Win98 から SetForegroundWindow という API の仕様が変わったことにより発生する問題です。しかし、これは利用者にとっては甚だ迷惑な仕様の変更です。何とかして、元のように動作させたくなります。
一応 Win98 には、それを実現するための仕掛けが存在しています。Windows ディレクトリにある win.ini の [Compatilibity95] エントリに、モジュール名=0x00000002、という記述を追加すると昔の Win95 と同じ動作をさせることができます。ただし、普通の人には、そのアプリケーションのモジュール名を得ることは簡単でないという問題がありますが。
△Win95 右端まで延々ショートカットメニューをなおす方法(1999/08/06)
Win9x では PowerToy というユーティリティーを導入して、Windows をもっと便利にすることができました。PowerToy は Win95 用はマイクロソフトのこのサイトから、Win98 の場合には、たしかはじめから CD に入っていたと思います。
で、Win95 用の PowerToy を入れた時(入れなくても?)、エクスプローラからショートカットメニューを出すと、メニューが画面の右端までいっぱいに広がってしまう現象が起こることがありました。これが起こっても致命的な損害はないのですが、不快にさせるには十分な現象でした。どうもこの症状が発生するのは、フォルダ内にファイルが 16 個ある場合だけのようです(どうも境界バグのようですね)。
こんなバグですがなるべくなら修正したいですよね。しかしその修正手段はあまり知られていないようです。修正は、PowerToy の中にある shellfix.dll を導入することによりできます。導入の仕方は shellfix.inf を選択し、右クリックしてメニューを出して、そこからインストールすることによりできます。これでショートカットメニューを出した時に画面右まで広がることを防ぐことができます。
△起動しないタスクスケジューラを起動させる方法(1999/08/05)
Win95+IE4、Win98 にはタスクスケジューラというプログラムが入っています。これは、指定した日時に、指定したプログラムを実行させるというプログラムです。この機能を実現するためには、タスクスケジューラを常駐させる必要があります。しかし、環境によってはなぜかこのタスクスケジューラが起動△常駐せずに異常終了してしまうことがあります。その場合には、Windows をインストールしたドライブ(たいてい C:)のボリュームラベルを削除してください。そうすると、無事起動するようになります。
#なんでこんな実装になっているのでしょうかね?
#Windows って何日か立ち上げぱなしにしておくと不安定になるのに、この機能はどれだけ使えるのかな?
△タスクバーへのウィンドウ表示の動的切り替え(1999/08/04)
ウィンドウを使ったアプリケーションを起動するとタスクバーにそのウィンドウを示すタイトル部分が表示されます。しかし、タスクバーに表示したくないウィンドウを作成したい時もあります。そのような時には、拡張スタイルに WS_EX_TOOLWINDOW を指定してウィンドウを作成すると表示されません。
さらに、始めはタスクバーに表示されているけど、あるきっかけで非表示にしたい、あるいは、逆に始めは非表示だけど、あるきっかけで表示したいということが考えられます。そのような時には、動的に表示を切り替える必要があります。そのやり方の一つとして次の方法があります。hwnd はそのウィンドウのウィンドウハンドルを示します。
//非表示にする場合
ShowWindow(hwnd, SW_HIDE);
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
ShowWindow(hwnd, SW_SHOW);
//表示する場合
ShowWindow(hwnd, SW_HIDE);
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & ~WS_EX_TOOLWINDOW);
ShowWindow(hwnd, SW_SHOW);
ただしこのとき、タイトルバーの太さが変化するのでその点を注意する必要があります。
△Internet Explorer をいきなり全画面表示で立ち上げる方法(1999/08/03)
プレゼンテーションやスライドショウを html でやりたい人(いるのか?そんな人)は、Web ブラウザを全画面表示にしたいと思うでしょう。Internet Explorer を使っている場合には、k オプションでこれを実現することができます。すなわち、iexplore.exe -k を実行すればよいということです。ただし、path が通っていない場合には、例えば、「スタートメニュー」-「ファイル名を指定して実行(R)」で 「"C:\Program Files\Internet Explorer\IEXPLORE.EXE" -k」 のように直接ファイルを指定して実行する必要があります。なお、これを閉じたくなったら、ALT+F4 で閉じることができます。
△プログラミング言語 C の新機能 Part XXII: inline 関数定義(1999/08/02)
C++ にもある機能が C にも導入されました。その機能は inline 関数定義の機能です。今までの C 言語では、関数のように記述でき、しかも高速に呼び出せるようにしたい場合には、関数型マクロを使用する必要がありました。しかし、関数型マクロでは型検査ができない上、使い方にはよっては予測できない結果を導くこともありました。
今回導入される inline 機能を使うと、型検査もされ、さらに通常の関数と同じ評価がなされ、かつ高速に実行できる関数を定義することができます。使い方は、ただ単に関数を inline キーワードを使って修飾するだけです。例えば、inline void swap(int *a1, int *a2){...} です。ただし外部リンケージを持つ関数に対しては、inline 付きの関数宣言を行ったらその定義を同じ翻訳単位中でしなくてはならない、修正可能な静的記憶寿命を持つ定義をふくんではならない、内部リンケージを持つ識別名への参照をふくんではならない、という制約があります。また main 関数は inline 修飾をすることができません。
inline 定義はコンパイラに対するヒントであり、コンパイラは必ずしも高速呼び出しコードを生成するとは限りません。
△PASCAL 言語の関数呼び出し形式(1999/08/01)
以前に示した関数の呼び出し形式の中に PASCAL 言語形式の呼び出しというのがありました。これはまさに名前が示しているように、DOS の時代から PASCAL 言語で使われてきた呼び出し方です。C 言語の中でこの呼び出し方を使うには、_pascal 修飾子を関数につけます。 では具体的にはどのように呼び出されるのでしょうか。ただしここで挙げるのは C 言語の規格ではなく、一つの実装例であることに気をつけてください。
//(1)関数のプロトタイプ
void _pascal foo(int x, int y);
//(2)関数呼び出しの例
foo( 1, 2);
//(3)具体的な 80386 アセンブリ言語に
//よる呼び出しプログラム例
0000:push 1
0001:push 2
0002:call FOO
              
seclanのほえほえルーム
http://www02.geocities.co.jp/SiliconValley/1002/dt200006.htm
http://www02.geocities.co.jp/SiliconValley/1002/dt200005.htm

























Windows XPはもう危険!Windowsアップデート虎の巻 ? 第1回
そのPCは大丈夫?Windows XPを使い続けてはいけない10の理由
2013年11月26日 12時00分更新
文 柳谷智宣
Windows XPのサポートが2014年4月に終了するが,国内ではまだまだ多数の人がXP搭載のPCを使い続けている。マイクロソフトは大々的にサポート終了を告知しているが,聞き流している人も多いはず。今回は,そんな人のためにWindows XPを使い続けてはいけない10の理由を紹介しよう。
12年以上使われたXPもいよいよオワコン
Windows XPは2001年10月に登場した。はや,12年以上が経過しているのだ。以前は多くのアプリケーションがWindows XPをサポートし,フリーソフトも隆盛を極めた。マイクロソフトのサポートには,メインストリームサポート(新機能の追加などに対応)と延長サポート(不具合やセキュリティーの修正などだけが行なわれる)の2種類があり,前者は2009年4月に終了。延長サポートは本来ビジネス向けの上位エディション(Professional)のみに提供される予定だったが,Windows XPの普及状況を鑑みて,Home Editionも同様に2014年4月に延長されることになった。
今でも使っている人も多いであろうWindows XP。2014年4月でサポートが切れる
しかし,それも限界に来た。2007年にWindows Vista,2009年にWindows 7,2012年にはWindows 8が登場。Windows XPは2000年に出たWindows Meと比べると格段に完成度の高いOSだったが,今では色々と技術が古くなっている。マイクロソフトは3度にわたるサービスパックと数え切れないくらいのパッチを公開し,Windows XPの延命に努めてきたが,もう対応しきれなくなったのだ。
マイクロソフトによると,2013年9月末の段階で1050万台のWindows XP搭載PCが利用されている。これは,法人PCの稼働台数なので,個人ユーザーも入れればもっと多いはず。しかし,法人や自治体には予算の問題で移行できないというところが出ている。矢野経済研究所の調査結果によると,2015年3月末の時点でも25%の企業がWindows XPを使い続けると予測している。
個人ユーザーには,お金がなくて買い換えられないというほか,買い換える必要がない,という意見も多い。PCをたいして活用しておらず,機密情報も入っていないというのが理由だ。これは完全な勘違いで,被害に遭うだけではなく犯罪の踏み台にされるケースもありえる。具体的なシーンを想定して,使い続けたときのリスクを紹介しよう。
Windows XPは2001年に発売された。パッケージ版が発売された11月16日の夜中には,秋葉原や量販店には長蛇の列ができた
XPでも未だに毎月のようにWindowsの脆弱性が報告され,パッチで修正されているがこれもなくなる
理由1
アプリケーションがXPに対応しなくなる
Windows XPのサポートが終わったら,市販されているPCソフトやフリーソフトの対応OSから外されることになるだろう。サポートがなくなってどういう状況になるかわからないOSでの動作を検証したり,保証したりするのは無理だ。現在利用しているアプリケーションも,将来のアップデートでWindows XPが外れるはず。ビジネスユースでもプライベートユースでも,よく使うアプリケーションほど新機能を使いたくなることだろう。
「Office 2013」の対応OSはWindows 7/8/Server 2008 R2/Server 2012となっており,すでにWindows Vistaも対象外となっている
理由2
ウェブページが正常に閲覧できない
Windows XPの標準ブラウザーはInternet Explorer 6。日進月歩のインターネット業界にあって,12年前のブラウザーが動いているだけでもすごいものだ。とはいえ,タブ機能がないうえ,最新のウェブ技術をサポートしていないので,ウェブページを正確に表示することができない。例えば,Googleマップを開くと,エラーが出たり,画面が黒くなったりしてしまう。今時のスマホの方が,よほどウェブページを正常に閲覧できる。
さらに,セキュリティー面ではチーズのように穴だらけ。Windows XPではIE8まで提供されているが,それも2009年に公開されたものだ。
どうしても使うなら「Chrome」や「Firefox」という選択肢もある。たとえばGoogleは,Windows XPのサポート終了後1年間は「Chrome」ブラウザーの動作をサポートすると発表したのだ。ただし,これはウェブブラウザーを使ったマルウェアなどに対策するための対応で,Windows XPの動作をなんら保証するものではなく,移行期間の猶予が与えられただけと考えるべきだろう。 

ASCII.jp
http://ascii.jp/elem/000/000/844/844735/

0 件のコメント:

コメントを投稿