VMware on WinXP

かなり古いアプリがWindows98以前の16ビットOS用だったので98環境が急遽必要になりました。ノートPCのHDDを入れ替えてWindows98にすればいいのですけど、VMware Playerで環境を作ってみようと思っての実験です。
まず、本体は本家からダウンロードします。ユーザー登録が必要だったので登録して届いたメールのURLからダウンロードすれば問題ないです。次にHDDイメージはQEMUでと思ったのですが、vmxファイルを編集するエディタを探していたら、http://www.easyvmx.com/ でvmxを作成しつつHDDイメージも作れることが判明。そのサイトでいろいろと設定し、Createするとvmxとvmdkが圧縮されたファイルがダウンロードできるのでそれを解凍すれば準備OKです。
設定は各自自分の環境や利用形態にあわせて作ればいいと思います。うちは物理CD-ROMを利用し、サウンドは特に不要、ネットワークアダプタはvlanceってのを使ってブリッジ設定で行いました。
VMwareを起動し、CD-ROMドライブにWin98のCDを入れてセットアップ。シリアルが本に書いてあるのをすっかり忘れて本を探すのに一番時間がかかったよ。SPとかパッチ類はぐぐれば集めたサイトとか中国のサイトにはSEの最終パッチ集もあるので使い続けたりするなら当てればいいかと。うちはちょっと動かすだけなのでパッチは当てませんでした。
P4-1.7GHzだとセットアップに2時間くらいかったかな?HDDサイズは余裕をもって8GBにしましたけど、これのチェックとフォーマットは一瞬で終わりました。問題はWin自体のインストールにオリジナルでも40分くらいかかると思いますが、処理が重たいのでそれなりにかかるという。最新鋭の環境ならオリジナルに近い時間で済むんでしょうね。
あと、VMware-Toolsですが、先のサイトで作ったときに設定(tools.remindInstall = “FALSE”、tools.syncTime = “TRUE”)があったらしくてVMware本体起動時にダウンロードしてました。ただ、インストールされなかったのですが、ide1:1.autodetect = “TRUE”を追加してIDE/CD-ROMを自動認識させるようにしたらインストールを再度聞かれたときに問題なくセットアップできました。これが入るとSVGAドライバが入るので画面の見栄えがかなりよくなります。また、マウスをウインド外へ持っていくとホスト側のマウス移動になるのでかなり便利です。そうでないとCTRL-ALTを押して抜けないと駄目ですので。まあ、慣れの問題ですけどね。
一昔前は別のOSを入れるには入れなおすかデュアルブートなどが必要でしたが、仮想PCのお陰でメイン環境に手を入れることなく新環境が作れるので便利でいいですよね。問題はCPUパワーとかメモリーサイズくらいですし。便利になるとどんどんいい環境が欲しくなる罠が待ってるけどね。

Analogの設定ツール

調べてみたら本家のページからリンクがあった。
Win、Macからできるシェアウェアが有名らしく、フリーウェアでのツールはいまいちよさそうなのが無かった。ドイツ語と英語で書かれたページでWeb上で設定してanalog.cfgを生成するページがあったけどローカルで欲しいと思った。
そういえば、リクエストレポートの各種ファイルへのリンクを張らせる方法がわかった。htmlやディレクトリは勝手にリンクされてますけど、jpgとかリンクされないので何とかリンクさせたいと思ってたら、「REQLINKINCLUDE」で指定ができた。まあ、INCLUDE、EXCLUDE関係の設定の1つだったわけだ。INCLUDE、EXCLUDE関係も突き詰めると難しくなるし面倒だけどきめ細かく設定すれば使い勝手もよくなるって事らしい。まあ、統計情報は自分で見るだけなので特に整形も詳しくなくていいけど、運営会社などはこれをうまく設定して上役を説得できる資料も設定次第で作れるって事だね。この辺りの設定ツールを作るとかなり使われそうな予感もする。

続analog6

agent_logみてたら結構いろいろなブラウザを使ってるのを見て統計を取ってみようと思ってBROWSERREPとOSREPをONにしてみた。ブラウザレポートは単にエージェントがそのまま出るのであまり面白みが無いのですけど、agent_logを眺めるより統計的にわかりやすいから満足しました。OSレポートを見たら最近増えてる携帯ゲームとかPS3などが不明に含まれてるので分けてみようと思いました。
analogのソースを展開してWindowsでgrepしてみるとtree.cで判定してるのがわかりました。Pnextname関数で判定してるらしく、wholeにagentが入ってくるので、strstr関数で拾えたらOS名とも言える文字列をnameへセットすればいいらしい。とりあえず、Atariの判定の後、Unknownの前に下記を追加。
else if (strstr(whole, “PSP”) != NULL)
*name = “PlayStationPortable”;
else if (strstr(whole, “PLAYSTATION 3”) != NULL)
*name = “PlayStation3”;
else if (strstr(whole, “Nintendo Wii”) != NULL)
*name = “Nintendo Wii”;
あとで気づいたのですが、WindowsとかUnix系はWindows:Windows2000とかで戻せば前の文字列でのサマリー、後者文字列でのサマリーが取れるっぽい。つーことは、”Sony:PSP”、”Sony:PlayStation3″、”Nintendo:Wii”とかにすればPSPとPS3をあわせたカウントを出せるって事ですね。任天堂は別に変更しなくてもいいけどね。
そういえば、コンパイルでちょっとハマった。Gentooは設定ファイルを/etc/analog/analog.cfg、言語ファイルは/usr/share/analog/langに格納してますが、ソースをそのままコンパイルすると/usr/binを参照してしまいました。emergeでパッチを適用したら停止させ、作業ディレクトリをコピーして手直しというのもいいですけど、設定を書き直しました。コンパイルはconfigureは無いので、付属のMakefileの調整とヘッダの手直しです。デフォルトのコンパイルオプションは-O2だったので特に変更なし。コンパイラもデフォルトがgccだった。src/anlghead.hのDEFAULTCONFIGFILEを/etc/analog/analog.cfgへ変更。それとLANGDIRを/usr/share/analog/lang/にしました。後ろのスラッシュが入ってないとlangを無視してしまうので要注意です。いろいろデフォルトを指定できるけど、いじったのはそれだけ。あとはanalog.cfgで上書きすればいいし。
現在調査中はリクエストレポートでアンカーが入るのと入らない差がどの設定かわからん。ソースを読むのは疲れるので設定でいけるなら何とかしたいです。どうもディレクトリへのアクセスとindex.htmlを含むアクセスはアンカーが入るみたいですけど。後日だね。

analog6.0

一応動いてるのですけど、前から日本語表示のうち、JISらしきコードが混じって正常に表示できてない問題を思い出したので対処しました。
問題は、ステータスコードレポート等で文字化け状態になるもので、JISコードの場合、シフトコードにESC$B、ESC(Bを使用しますがESCが?に置き換わっていて表示できないように見えます。また、シフトコードに囲まれた漢字コード部分のうち、大小記号やクォート、アンパーサンド等がHTML表示させようと&xx;に置き換えられてるのもわかりました。
Analog自体の設定で何かあるのか?と思ったのですが、どうやらソースにEUCやSJISなどで吐き出す機能はなく、JISっぽく出てしまうのが仕様らしいです。ソースも覗いてみたけど、処理する関数を構造体配列へセットしてC++みたいなオブジェクト指向風なコーディングなのでいまいち追いかけるのが辛い状態です。関数へのポインタとか使われると最初からどんなデータをどういう風にう処理するのか追わないとわからないので挫折です。業務じゃないので別方向でアプローチを。
で、考えたのが、吐き出されるHTMLを読み込ませて?[Bと?(B、&xx;を置き換えてしまえばという事でCでプログラムを作りました。処理自体は単純で、STDINからfgetsでテキストを取得し、シフトコードを検索して見つかったらその中身のアンパーを処理、シフトコードをまた見つけてたら処理という感じ。アンパーも調べると大量に処理すべき置き換えがあるけど、気づいたものだけ処理という限定仕様。変換漏れとか落ちたら別途対応すればいいやという投げやり仕様ですけど。
一応今の段階でレポートされる範囲では問題なく変換できてます。あとは、検索語レポートがいつの間にか落ちてるのでレポートしたいけど、ApacheのログをCommonで取ってたのでcombinedに設定しなおした後だからまだでない状態。昔AIXで設定したときは取ってたのですけど、Linuxへ移行した時に設定が漏れてたと思う。analogurldecodeを使ってる意味がぜんぜんなかった罠。

Excelのマクロをいじる

ファイルを整理するのに久々にExcelのマクロをいじってみた。見よう見まねで他人が作ったマクロをいじったりしてたけどフルスクラッチは久々です。それでも昔作った別のマクロのソースを見ながら試行錯誤ですけど何とか目的は果たせました。
大量のファイルがXMLで管理されてるのですけど、最新のExcelだとXMLパーサーがあるみたいだけどうちのはExcel2000なので当然無い状態。C言語のパーサーライブラリを持ってきてCで書こうかなとか思いましたけど、Borland Cでは駄目っぽくてMinGWを使わないとコンパイルできないのでCは諦めてExcelかなと。
XMLといっても目的のタグは限られてるのでテキストで読み取って目的のタグを拾い集めて処理するだけなので解析は自前だったり。ハマったのが文字列処理でMid関数はよかったのですけど、LeftとRight関数が使い方のイメージが違っていて予期せぬ結果になった。うちは指定した位置の左側の文字列を取るのがLeftだと思ってたら1桁目から指定文字数という使い方だった。指定文字位置から後ろを取るのにRightと。XMLファイルの先頭がTAB文字が入っていてそれでずれるのか?とか思ってマクロを何度直しても動作がおかしくて少し悩みました。まあ、よく考えれば元の仕様もうなづけるけど、StratusのPL/Iを結構長くやってたのでsubstr、before、afterのイメージで書いたのが敗因でした。Trim系関数もTABを取り除くスイッチとかあればいいのに見当たらなかったので前TAB、スペースでタグが続く場合の処理を考えるのにも時間がかかったよ。結局Forで先頭から文字を調べていく基礎的なやり方ですけど対処できました。
あとチェックするフォルダが13種類もあったので一覧をとってForで処理すれば簡素になったのでしょうけど、考えるのが面倒だったので13多重のIFが続いたとさ。ELSE IFって無いのが問題だよな。なのでTHENとかELSEの中にまたIFがって漢字になる多重だった。Forの多重よりはマシですけどね。(昔、BASICでプログラミングしてたときはForとか多重させる場合制限があったような。VBAはあるのか知らん。業務で使うなら調べるだろうけど趣味だからいいや)
それにしてもファイル処理とか親和性が高くて慣れてくるとExcelから離れられなくなる理由がよくわかった気がした。テキストを吐くような外部コマンドを実行して結果をシートに挿入してしまえれば、外部コマンドを多用して処理するのも可能だね。文字列処理がもっと関数が豊富になってForとかでロジックを組まなくても処理できるようになればもっと便利になりそうな気がする。
そういえば、以前の会社でFTP.EXEを起動させてサーバ上にあるファイルを持ってきて統計を出すようなマクロを書いてた協力会者の人が居たけどDLLとかで拡張せずにWindows標準コマンドでよく作り上げるなぁと関心したものです。そこまで使いこなせると楽しくて仕方ないよね。

Win-Winで特定ユーザーでファイル共有

ファイル共有で大抵問題になるのがユーザーとかアクセス権。うちも家族と同一ネットワークにあるのでGuestの開放はやや危険(勝手にコピーされたり、エロ関係wとか)なのでGuestを排除してます。Windowsは使ってるユーザー名で別コンピュータの共有を参照する場合に同じユーザー名がデフォルトとなユーザー指定が面倒だったりする。正しいのでしょうけど、便利さにかけるのが難点か。
LinuxではURLを書くとき「プロトコル://ユーザー名:パスワード@サーバ名/パス」という書き方でユーザー指定をしますけど、ネットワークコンピュータ経由の参照はどうもユーザー指定が難しいっぽい。ちょっと調べてみると、ネットワークドライブとしてマウントするならユーザー指定ができるのがわかりました。
マイネットワークを右クリックして「ネットワークドライブの割り当て」を選ぶと「異なるユーザー名で接続」ってのがあった。これでドライブレターを与えてマウントすれば問題なく参照できるようになりました。そういえばLinuxでもmountで行うというやり方もあったし基本は同じだね。
受け側は簡易だと駄目かと。セキュリティでGuestを消すか読み込みなどの権限を消せばOK。一覧だけ見せるなら詳細から設定すればいける。一覧だけだと共有できてそうにみえてファイルを参照するとはじかれます。こういう使い方だと知らないとハマるかもね。
あとは、別のやり方としてnet useコマンド接続するやり方でもいける。こちらはドライブを割り当てなくてもいけるけど毎回コマンドをたたくのかリブートしてもいけるのかは知りません。興味ある方は調べてみては?

Winとの漢字コード

元々Windowsで持ってたデータを一時Linuxへ持って行きましたが、そのときはSamba経由で単純コピーで行ってました。smb.confの設定(dos charsetをcp932、unix charsetをUTF8)でファイル名に漢字が使われてても問題ありませんでした。
それをtarで固めてWinへコピーして展開すると当然ファイル名が文字化けします。書庫で移行したい場合は?と思っていろいろ調べてみると、lhaで圧縮するときにsjisへ変換して圧縮という手もあるとわかりました。
あ、でも結局Linuxマシンで展開してSamba経由で単純コピーしてしまいましたけどね。元々圧縮しようと思ったのは2chの過去ログとか持っててその中にLoveletterのウィルスに見せかけた書き込みが多数あるのでそれを放置してたからコピーの度に警告が出て面倒だったのが原因ですけどね。コピーするときオンラインスキャンを停止すればいいのでコピーしておしまいでした。

ちと統合を

日記というか雑記ページがぜんぜん更新できないのでGentoo関係のページと統合しました。最初から分ける必要もなかったのですけどカテゴリというかテーマを根本で分けようと思ったけど手が回らないので根底を覆すことにしました。

A31pを寝る前にちょっとインターネットを覗いたり音楽を聞きながら寝たりするのに使ってましたけど、Linuxでなくてもいいかなと思ってWindowsをリカバリしました。どうもファイル共有でLinuxは融通が利かない所があってちょっと不便だったもので。また不満があったら戻しそうですけど入れなおしです。
XPの再インストールはあまりしてなかったのですが、SP1のCDなのでSP3を適用したCDというかDVDイメージを作りそこから入れなおしました。1GBを超えてしまうのでCDRでは無理だったのでDVDRWに書き込んでの起動です。枯れたハードですので特に問題ないと思ったのですが、ビデオ、ACPI、無線LAN、Bluetoothが自動認識せず。ドライバを本家から拾ってくるハメに。普通にリカバリCDを使えばSP1の状態でドライバも入りますけどこんなものでしょう。通信カードがThinkPadの場合はいろいろ複雑だし。こいつもドーターカードを使う仕様なのでそういうものなのでしょう。メインのEthernetは自動認識してたし。
ドライバを入れて画面がUXGAになると広くなって快適です。文字は確かに小さいですけどこいつのは見やすくていいです。GNOMEのデスクトップから戻したので余計小さく感じる。今ハード的な不満はCPUがP4-1.7GHzってところくらいかな?こいつではゲームをしないので十分ですけどね。当時50万クラスのマシンということもあって未だに現役OKって感じ。あと3年くらいは…って無理かな?
今回のハマりポイントはトラックポイントドライバ。トラックポイントの真ん中を押しながら上下左右にポインタを動かすとスクロールさせることができるのですが、FireFoxを入れたらスクロールしなくて。何が悪いのかわからず苦労しました。調べてみるとtp4table.datというファイルにスクロールさせるアプリが登録されてるらしく、チェックしてみるとFireFoxが入ってなかったという。A31pのドライバはこの定義が古いみたいです。そもそもサポートもしてないのでしょうね。中身はテキストファイルなのでエディタとかメモ帳で編集すればいい。
ファイルはいくつかのフィールドがあってカンマで区切られており、OS名、OSバージョン、アプリ名、トップクラス名、ペアレントクラス名、ウインドクラス名、スクロールタイプ、パス、フラグという感じ。まあ、ファイルの先頭に説明があるのでそれを見ればいいかと。うちは下記のように設定しました。
*,*,firefox.exe,*,*,MozillaWindowClass,WheelStd,0,9
スクロールタイプはWheelVkeyにすれば左右スクロールも可能です。うちは上下だけでいいので上記のとおり。パスはよくわからんので真似て0、フラグも真似ての設定だけど、3ボタンということで問題ないかと思われます。
ファイルを書き換えたらタスクマネージャからtp4servを停止させ、新しいタスクとして起動すれば動くはず。ファイルはブラウザ関係辺りに追加すればいい。一番最後だと少し前にAutoScrollTableというセクションがあってそっちの設定になってしまうので要注意。AutoScrollTableセクション前までなら問題ないと思われます。つか、このセクションって罠すぎ。これに気づくのに時間かかったよ。
ブラウザはChromeも入れたけど適当に使い分けたいと思ってます。IEは恐らくIEしか使えないサイト以外出番ないだろうね。FTPクライアントはFireZillaを愛用。もうFFFTPは時代遅れって思う。(実は2GBを超える転送のリジューム処理が微妙だったりして最近使ってない。ソースを見る限り平気なんだけど微妙すぎ)マルチセッションでがんがんアップ・ダウンロードできたりファイル名の変換も自在なのでお気に入り。端末はTeraTermがベストかな?点滅と表示属性とかコードページの切り替え部分の仕様がもう少し一般的なら最強なんだけどね。(改行して反転が続くと次の行の最後まで反転が続いたりする。Stratusとかで漢字とカナが混在すると化けたりするんだよね。もうStratusは使わないからどうでもいいけど前述の反転はどうにかならんかな?)
あとは使うアプリを適度に入れつつ使っていく予定。コンパイラも入れたいなぁ。

やはり64ビット環境へ

どうも動作が遅く感じるので32ビット環境で作った内容をtarで固めてバックアップを作り64ビット環境へ戻しました。このままだと動かないソフトも多いので32ビット環境を内部に作る公式のやり方で環境を作り実行するようにしてます。
ハマリポイントは32ビット環境に入るのにlinux32コマンドがsetarchコマンドに変わってるという点。ググると結構前にportageツリーから消されており、代わりに当該コマンドになってるという。恐らく通常のsystemで入ってると思います。setarch i686 chroot …で環境へ入れるようになります。
あと、/etc/init.d/gentoo32のスクリプトサンプルがありますが、/etc/gshadowのコピーでファイルが無くてエラーメッセージが出てたくらいかな?うちはコメントアウトして対処しました。これは使う環境次第かな?
64ビット環境のX上で32ビット環境のコマンドを動かすにはxhostコマンドで設定するだけみたい。これもかかれてますけどね。設定して32ビット環境からコマンドを実行するとウインドが出て動いてました。これでgensが動かせそうです。あと、chikensも64ビット環境だと動作が怪しかったので32ビット環境に入れれば使えそう。もうしばらく使ってみる予定。

32ビット環境にしてみた

Athlon64だと64ビット環境を構築できて速度的にも早くなっていいのですが、amd64だとどうもマスクされてて動かないパッケージが多くて困り者です。そもそも32ビットでの動作をターゲットとして作成されたものがあるので作者がサポートしない限り利用はまず無理です。もともとAthlon64も32ビットでも動くので遊び目的ならいいかな?なんて思いまして入れなおしをしました。
インストールCDはminimalのx86のを持ってきてCDRWに焼いて起動です。本来ならamd64のを持ってくれば64ビットになりますけど。書き換えたのはmake.confのコンパイルオプションで、-marchは同じくathlon64に。このままだと32ビットと64ビットが混在するので-m32を追加。これで生成されるバイナリはすべて32ビットになります。(-m64を明示的に与えれば64ビットという)
Cコンパイラが4.1系から4.3系になってるのでCコンパイラをコンパイルし、gcc-configでコンパイラを最新に。まあ、最初の番号が変わらない限り気にしなくてもいいのですけどね。さすがにgcc3とgcc4の混在は嫌な感じがするので全コンパイルしたいころですけど、マイナーバージョンの違いなら気にしないことにしてます。Cライブラリのコンパイルが結構かかるのでこの完了待ちで一息つけます。終わったらUSEフラグを戻してemerge -uDN systemを。cupsが入ると恐らく巡回依存で失敗するので最初は-cupsを指定しておきます。make.confにLINGUASとINPUT_DEVICESを指定。今回はjoystickも指定しておきました。VIDEO_CARDSをnvidiaにしておき、xorgとgnomeをコンパイルする。
これで400近いパッケージが入るので取りこぼされるパッケージをインストールです。HAL経由で使うのでevdevが入らないので手動で追加。fdiを設定してHALを再起動。これでGNOMEが立ち上がるはず。mesa-progsを入れて3Dアクセラが有効か問題ないことを確認。glxgearsでパフォーマンス測定してみると、速度は10分の1くらいに落ちてた。
サーバ用途で速度もほしいなら64ビット、いろいろと遊ぶなら32ビットかな?なんて思いました。まあ、64ビットでインストールして、32ビット環境を作るというのが一番いいみたいですけど、別にいいかな?なんて思いまして。混在は何かと不具合も出そうだし、もう少し落ち着いてから64ビットへ移行してもいいと思う。