32bit・64bit混在マシンの完成秘話

x86での用事も結構すすんでいますよ。
せっかくだからいろいろ試してみていますよ。
まぁただ普通すぎてなんにも変わらないといわれりゃそこまで。
一応フォントをIPA系にして、ClearTypeを有効にして、美しいDesktopだったりして。
Fx程度は導入しておいた。メーラーはないけどCheckerは入れて、Webメーラーで代替。
さて、昨日あった不気味な話。
HDDは結局フォーマットしました。理由はファイルシステムの故障でブートできないのかもと考えたから。
ビンゴみたいで、事実それで無事Bootできるように。
それでファイルをもどしていたのですけれど…
計76GBだったかな?結構あるんだけどね。
ところが使用領域が133GBもあるという信じがたい事態に。
これはいくらなんでもひどい。
というわけでチェックディスクを実施…
結果…適正な使用領域になりました。なんでだろね。
まぁデュアルブート環境も作りましたしね。
調べるとx64のNTLoaderはx86も呼び出せるけど、逆は無理みたい。
融通利かないなぁとか思っちゃうけどね。
結果起動ディスクもいらないわけでめでたしめでたし。
まぁこれで必要なときだけ立ち上げればOKだね。
このx86のマシンはHidemaro4とした。3が抜けているのは、余裕のため。
まぁHidemaroはNTKernelに移行するまえに使ってたんだけどね。
NTKernelに移行するときにマシンが入れ替わってよ。それでHidemaro2に、現在にいたる。
実はNTKernelには結構前から目をつけてたんですよ。まぁ2000になって導入したけど。
9x系の16bit、32bit混在Kernelはちょっとつらかったしね。
そして今は64bitOS、まぁ32bit混在だけどちょっと事情は違うし。
でもいつまでx86_64、すなわちはAMD64が続くのか…
そのうちx86を放棄するときがくるとは思うよ。
でも、そう簡単には捨てられないわけで、Itaniumの失敗はそこなんだよね。
ゆっくり整理して納得いく移行をしてくれればいいよ。
それまではx86_64でいいからさ。事実64bitの利点は十分得られるわけで。

x64とx86の共存の難しいNTLoader

Boot Loaderというといろいろあるものです。
Linux・BSDではGRUBがメインです。昔LinuxではLILOだったけど問題が目立つのでつかわれなく。
GRUBはなかなか優秀で、grub.confはいじりがいがありますよ。
これは通常Linuxでは/bootにマウントされるパーティションにいますよ。
通常は/bootと/とswapの3つ用意しておきますね。
で、Windowsでは今はNTLoaderが使われています。言うまでもなくNTのLoader。
まぁこれもboot.iniでいろいろできますからね。
実は結構自由度はあります…が…Windowsのインストール時に自動設定をあんまりしてくれないんですよ。
Linuxを使うためには、/bootのところをddで吸い出して、Windowsに置いてやらないとだめなんですよ。
どんなけめんどくさいねんということになります。
LinuxではDOSとかとインストール時に認識してGRUBからNTloaderを呼び出してくれたり。
だからめんどくさいんですよ。
それは実はWindows同士でも悲惨なもので、さすがに/bootを吸い出せとかはないけどめんどくさい。
さて、XPのx64が導入されているところにx86を導入する一般的な手順は
1.x64の起動ディスクを作成
2.x86をインストール(実はLoaderが破壊される)
3.x64を起動ディスクで起動してboot.iniを編集してデュアルブートできるようにする
だった気がするんだけど…事実部活のはこうやって直した覚えがある。
ところがミスで、x64のNTLoaderを壊してしまい、修復の過程でx86も壊れました。
予想以上にx64のNTLoaderをいじられたのが原因です。
こんな方法やめるべきですよ。
しょうがないのでこう修正
1.x64を修復インストール
(2.x64の起動ディスクを作成)
3.壊されされないようにx64のドライブを抜く
4.x86をインストール (←いまここ)
5.x86の起動ディスクを作成
6.さしなおして、BIOSでboot順序を入れ替えてx64を起動
7.x86が必要なときは起動ディスクで起動
(7.x64のboot.iniをx86のboot.iniを参考に編集してデュアルブートさせる)
まぁとにかく、x86をインストールするとき抜くなりしたほうがいいね。
もし同一HDDならx86完成後、x64を修復インストールして、x64のboot.iniをいじるべきだな。
これが唯一の手段。
別HDDならデュアルブートにこだわらず起動ディスクを使うことも前向きにどうぞ。
とにかくMicrosoftは上位バージョンのインストール時、下位バージョンをデュアルブートにはできるんだ。
ところが逆は無理なんだよね。
ついでに言うとこれに加えてVistaはNTLoaderから変なローダーに変わったんでね。
まったくめんどくさい。
だからLinuxとWindowsのデュアルブートでもいろいろあるけどGRUBを僕は使ってる。
確かにLinuxが存在しつづける前提なんだけどNTLoaderを使うより圧倒的に楽。
ところでこの原因はx64で動かない、代替がないという状態に陥ったため。
非常にめんどくさい。本当にやめてほしい。
VMWareも前向きに考えたけどちょっとつらい。
ちなみに修復インストールは一部を除いてそのまま残りますよ。
だからそれほど心配はいりませんね。
方法はWindowsのインストールを進めていくうちに修復できるよと言われるからそこで選ぶ。
Windowsフォルダとかを再度入れてくれるという仕掛けさ。
ふぅ…本当に落ち込んだけど、このシステムでなんとか救われた。

Ajaxという流行の波にかるーく乗ってみる

カウンター表示をいまどきはやりのAjaxでやってみた。
非同期で読み込みをするという仕掛けで、いままでは同期してたからね。
今までは読み込みが終わるまでは固まってました。
だから何にもできない。
今は固まらないはず。場合によってはWait…と表示されるのが見えるかも。
だから快適…だと思う。
ところで、Ajaxの発端はInternet Explorerでページの移動なしにして通信できるものが作られたから。
それをMozillaがまねをして、広まったんだけど、そもそもIEじゃActive Xが発端だったわけで…
仕組みが違うんだな。結構めんどくさい。
そんなところまでさかのぼってAjaxはあるからねぇ…どうもめんどくさいそうですよ。
で、一応その差を吸収できるらしいprototype.jsを使ってみることに。

new Ajax.Request('/scount/count.php',{
method:'get',
parameters: 'id=fdiary&print=ajax&refer='+escape(refer),
onComplete: displayData });

こんな具合で、GETで送信してあげるだけ、実に簡単、なんのひねりもない。
受信完了したら作っておいたdisplayData関数が呼び出されて、表示と相成るわけですよ。
まぁprototype.jsを使わないとめんどくさいかもしれないけどね、これなら楽だ。
ただ、問題はASCIIかUTF-8か、まともに動くのはそれだけということ。
まぁ、とはいうけど、意外と読み込めるらしい。この辺は調査いるなぁ。
まぁというわけでそこまで徹底的にする気はないけどね。
でもまぁ、読み込むだけならAjax.RequestでHTTP Requestを送って、関数で受け取るだけだし。
XMLぜんぜん関係ないじゃんとか突っ込まれそうだけど、まぁこんなもんでいいでしょう。
まぁいろいろ試作してみることにするわ。
まぁカウンターのスクリプトもいろいろ整理してみることにするわ。
Ajaxにしたときにjavascript側に任せる仕事を増やしたんでね。
意外とカウンタースクリプトってめんどくさいんよね。
場合によってはファイル2つ開く必要があるしさぁ。
まぁ時間もかかるからこんな風に非同期にしたわけだけどね。
ところで、Ajaxをつかったら斬新な何か面白いことできるかな?
いいアイデアないかなぁ…
ページを移動しなくても、操作して、ほしいものが取り出せるということだ。
それは画期的にちがいないけどね。

ものすごい数学とものすごい実験

さて、まず今日あったえらいこと。
代数・幾何、そんな科目があるわけですけど…
授業が悲惨なんだけど…あれは授業なのか…
10分ほど遅れて担当が来て、宿題をチェック、1問わからんと言ったもんだから説明してと。
さて、黒板を書き始める…黒板の7割ぐらい延々と書き続けてて…このときにおかしいと思った。
ほとんど何にもしゃべらず書くもんだから、どっかで止まって説明をすると思ってたんだ。
これって授業かいと。正直、どうかと思うんだよね。
と、そういうわけで普段なら理解しつつ、書いてたんだがそうもいかない。
一番こういう手がとりやすいのは、そうだなー、微分積分とかかな。
あれは、いくらか書いては説明してだからね。それに計算の部分は写す必要はないし。
自分でまねをすればいい。計算は面積食うけど、ノートをとるには困らない。
まぁ、それ以外の科目であれ、どんなことを言っているのか理解しながら書くから、
ノートの面積を適当につかえる。ただやみくもに埋めていっても読みにくいし、ノートは減るし。
まぁそういうわけで、物理とか書き溜めて説明してとするやつはちょっとゆっくり書き始めてます。
と、そんな調子でいくと思ってたんだけどなぁ…
それから必死で写してやってたけど、何箇所か欠けた…友人のを見て埋めたけど。
それでも証明の意味はわからない、説明が十分じゃなくてさ。
その分を電車で練ること30分、やっと理解できたわ。それから練習問題に取り掛かってとと。
そうそう、授業中に練習問題もしないからね。宿題だよ。まぁこれはいいけどさ。
というわけで次回以降覚悟しとこう…というかこれは大変なんてもんじゃないね。
それと、今日あった新しいこと、
そりゃ実験があったということなんだけどね。
一発目の実験は電圧計の内部抵抗を調べたり、分圧について調べたり。
いやー、可変抵抗でかいなぁ、とそういうわけですよ。
まぁそれでぼちぼちやってました。
で、実験には電圧計を2台使うんだけど、まぁ1台は調べられる電圧計、もう1台は調べるのに使う電圧計。
まぁ電圧計の内部抵抗を測るにも電圧計は使いますからね。
さて、測るかと回路を作って、電源をONにして、クルクルまわして…
あれ?電圧計があまりに振れない…これ測れないなぁと。
2台の電圧計を入れ替えてみてと、あっ、これで測れる。
さて、これで電圧計と可変抵抗をスイッチで摩り替えて、可変抵抗をクルクルと。
最大にしたんだけどなぁ…どうも大きすぎて…
300V・100V・30Vのレンジがあるんだけど、300Vがそんなわけで測れず、100Vと30Vだけ。
なんてこったい。グラフを描く必要があったはずだけど、2つじゃあんまりわからなんなぁ。
さて、実験1終わりと、実験2は抵抗と可変抵抗で分圧させていろいろする実験。
たいしたことないはずだよ。ところが…電圧がかからない。
SOSを出すと、どうも電流制限を全開にしないといけないのをしてなかったみたい。
実験装置も使い方を知らないとわからんもんだな。
というのがあって、実は電圧計、1つ立てておいてたら違うよと言われまして。
よく見るとマークがあって、水平に置けというマークなんですよ。なるほどねぇ。
まったくこういうのはやるに限るね。
まぁ数学にしても計算しないと話にならないわけだし。
まぁ今日の授業へのイヤミですよ。

文部科学省さまの新体力テスト

ふー、いろいろありましたけど、おわりっと。
そんな新体力テストですけど、どの辺が"新"なのかというと、多すぎて…
まとめたところがないというのが本音ではあるんだけど、
簡単にいえばやりやすいということ。ソフトボール投げと50m走以外は屋内でもできるはず。
で、小中学校でも抜き出しでか、報告する必要があるから行われたりしますね。
そうじゃなくても比較するのはよいことだということでやってるところは多いね。
でもレポートはしてないんじゃないかな?中学のときやってたけどさ。
さて、そんなわけで、あったわけですが…
去年に比べて驚異的に伸びてるんだが。うーん、さすがに1日に4km歩くとちがうなぁ…
いやー、駅と学校の間で片道2km、歩いてますからね。うんうん。
まぁ種目によるけど、これは満足だという数字も結構あるよ。
いやー、去年までの悲惨なことと言えば…まぁまぁ。
ところで持久走、すなわちは1500m走、測っていたとき。
どうも1周(400m)回りすぎちゃったみたいで。
あ、それでも去年より速いし。まぁちゃんと補正してくれましたけど。
だからさらに速いよ。去年と比べちゃいけないよ。
それでも周回遅れだけどさ。
さて、まぁそんなわけですけど、まぁそのカードに奇怪な欄が。
住所地の都道府県
なるほどねぇ…これは報告する気満々だ。
さすが、以前文部省直営だっただけあるなぁ…

ポインタの迷路と、それを読むコンパイラ

ところでこんなのをCで書いた

puts("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"+'!');

なんか変。でもこんな風に文字列をつなげられるやつもあるよね。C#もいけると思う。
動かしてみるとXYZしか表示されない。これいかにと。
まぁCでは文字列はchar型の配列だということが重要だな。
普通putsにはchar型の配列、すなわち1文字目のポインタを渡してあげるはず。
だから結局このプログラムでは

char str[37]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
puts(str+'!');

と書いてみる。おかしいわな。
strはchar*型、char型のポインタなわけだ、’!’みたいにSingle Quotationで囲めば数値になる。
‘!’というのは0x21、すなわちは33と書いているのと同じ。
だからポインタと数字の足し算をしてたんだな。
だからstr[33]、すなわちXの字のポインタを渡してたみたい。
そこが1文字目として、最後まで、確かにXYZ。
まぁポインタ知らんと痛い目にあうぞということだ。
だから

printf("Hello,world!);

って実は結構複雑だということだよ。恐るべしHello,world!
一番簡単で目に見えることは1文字表示することだろうなぁ。これは至極簡単。
さて、有名なCコンパイラを3つそろえました。
・GNU C Compiler (Cygwin上) [gcc] (GNU)
・Borland C++Compiler [bcc32] (Borland)
・Visual C++ .NET Expressのコンパイラ [cl] (Microsoft)
とりあえず、この3つありますけどねぇ…
まぁ一番おすすめはBCCですね。Windowsではポピュラーだし高性能だし。
それに天下のBorlandのだし。
で、Cygwin上はLinuxとかに似た状態なんで、ソースをそのままUNIX系OSに持っていってもほとんどつかえる。
まぁ、確かにCのソースはそもそも互換性高いけど、システムコールとか違うらしい。
あんまりそんな機会に遭遇したことないけどそれが事実。
楽しいというのとgccという響きがいいのではじめに導入したのがgccだったんだがね。
Microsoft製のclはWindowsで極端な性能を出すそうだけど…本当か?
なんか遅いんだけど…
いや、実は、5+5をして、8進数・10進数・16進数で表示することを1000000回繰り返すテストをしたんですよ。
ちなみに、NULにリダイレクトしてますよ。
するとGCCでしたのが3秒、BCCでしたのが4秒、これは互角だね。
ところがMicrosoftのCLでしたのは19secもしたんだけど…なんで?
というわけで、WindowsネイティブならBCC、UNIXとの互換性のためにはCygwinでGCCってとこかな?
まぁMicrosoftのCLにしかできないのは.NET Frameworkでフォームとかを作れるということだけど。
でも、まぁ、あんまり使わんでしょうねぇ…
というわけでもう少しBCCを磨きたいなと。コンパイルオプションがわかりにくくて。
たとえばtest.cをtest-bcc.exeに仕立て上げるとき

> bcc32 -e"test-bcc.exe" test.c

とまぁ…なんでこんな変な書き方…ちなみにGCCは

# gcc -o test-gcc test.c

って具合。こっちは素直なんだけどね。

矢印を文字で表したときのしるし

ベクトルってなんよといわれたら、矢印と答えるか。
まぁ大きさと向きを持つ量、だから矢印だとか言ってるんだな。
反対はスカラー、大きさしかない量、質量とか。
ベクトルの代表は、速度じゃないかな?
まぁそんなわけだけど、どうも電磁気を学ぶに非常に重要だという。
1年のときに物理で力学の勉強をするときにちょっと出てきたけどね。
2年になるといたるところで出てくる
電磁気学・電磁気学演習に、代数・幾何。交流理論・交流理論演習でも出てくるとか。
まぁ数学で取り扱えば一発で解決するはずだけど、数学はのろいんでねぇ…
まぁそういうわけで電磁気学演習でいろいろ出てきたわけ。
ところでベクトル、文字で書いたときはなんかしるしをつけないといけないといけない。

上に矢印がついているのが、1年の物理で出てきたやつで、初歩的な書き方。
でもうっとうしいのでなんか人気がない。
ポピュラーなのが太字で書かれているの。教科書とかではこんな風に太字になってる。
でも、太字を手書きするのは大変だからどっかを線を二重にしてある字をつかう。
本当はこのフォントにはiはないんだけど無理やり作図した。
でも実際に書いたときもこんな具合で書いたのかわかりにくい。
交流理論とかでは出てくるらしいのは上に点が打ってあるの。
でもなんかiでは混乱するなぁというのはあるらしい。
まぁそんなわけですよ。
まぁ太字のが便利だけど、よく忘れちゃうからなぁ…
忘れるとえらいことだよ。
ベクトルですかー、難儀ですなぁ。

ポケコンに任せる基数変換

最近流行の基数変換、小数点まで入れてやらせるポケコンのBASICのプログラム

10  DIM ST$(0)*32
20 PO=-32768:NU=0
30 INPUT "IN BASE>";B
40 INPUT "IN >";ST$(0)
50 FOR I=1 TO LEN ST$(0)
60 T= ASC MID$ (ST$(0),I,1)
70 IF T=46 THEN PO=0:GOTO 130
80 NU=NU*B
90 PO=PO+1
100 IF T<=58 THEN NU=NU+T-48:GOTO 130
110 IF T<=90 THEN NU=NU+T-55:GOTO 130
120 IF T<=122 THEN NU=NU+T-87:GOTO 130
130 NEXT I
140 IF PO>0 THEN PO=B^PO ELSE PO=1
150 N1=NU\PO
160 N0=(NU-N1*PO)/PO
170 INPUT "OUT BASE>";B
180 ST$(0)=""
190 T=N1 MOD B
200 N1=N1\B
210 IF T<10 THEN ST$(0)= CHR$ (T+48)+ST$(0) ELSE ST$(0)= CHR$ (T+55)+ST$(0)
220 IF N1<>0 THEN 190
230 PRINT ST$(0);".";
240 IF N0=0 THEN END
250 N0=N0*B
260 T= FIX N0
270 N0=N0-T
280 IF T<10 THEN PRINT CHR$ (T+48); ELSE PRINT CHR$ (T+55);
290 GOTO 240

正直、小数点まで扱えるのはすごい強みだったりする。なかなかない。
小数点のあるやつの基数変換ってうっとうしいからね。
検算とかにつかえそうだからいいね。
まぁIN BASEで元の方の基数を入れて、OUT BASEにほしい基数を入れてと、
なかなかいい出来ですよ。
そもそもCで作ってたプログラムをBASICに移植して完成させたもの。
Cでは整数の範囲で任意の基数変換と、小数入れば任意のから10進までしかできなかったから。
これを完成させたのはBASICにしてから。
Cではどういうわけか型がねぇ…double型とlong型を行き来させるとなんかおかしくなるんでね。
まぁちょっとBASICのほうが優れているところがあるしね。
ポケコンのCはあんまり性能よくないんよね。
まぁというわけでガリガリBASICで書いて完成と。
問題点は有効数字がポケコンゆえにさほど高くないということ。
それでなんか端数が発生してしまうこともある。
まぁその辺はわかる人が適当に判断すればいいよと。
まぁそういう意味でも検算程度にはすごく有効に違いないな。だがそれ以上はどうだか。
精度の問題があるからこれ以上は努力でどうこうできることじゃない。
循環小数になるときはBREAKしてくれ。という風にしてあるのも事実だ。
まぁこれするのにCだとつらいな。故障の原因にならないかな?まぁ大丈夫だと思うけど。
インタプリンタのBASICだとその点は強いね。
しかし、基数変換の問題はうっとうしいよ。
今日の授業でもずいぶん格闘したからなぁ。

PHPの1行スクリプトという可能性

くー、9時間拘束はつらいよー。ちょっと今日の用事はつらい。
まぁそんなわけで寝るぞとは思ってるわけですけど…
ところでコマンド版PHP、これで1行スクリプト楽しみませんかと。

$ ls -la|php -r '$sum=0;while(!feof(STDIN)){$str=fgets(STDIN);$arr=preg_split("/ +/",$str);$sum+=$arr[4];}echo $sum;'

1行スクリプトをこうやって楽しめる。
しかしなんか変なことしてるなぁと思うだろうけど…

ls -l | gawk '{a+=$5;} END {print a;}'

と同じようなことをかきつくねただけです。
まぁPHPの方はかなり素直に書いたんでねぇ…
ちなみにこれは

-rwxrwxrwx  1 hidemaro なし   1159 Apr  7 17:04 bin2b64.c

のように、1つ以上連続するスペースで区切られた0から数えて4番目を足し算していると。
AWKはこの辺得意なんだけど、あえてPHPにやらせた。
まぁ本当にしようと思ってたことはやりかたわからなかったからPHPでやっただけだけど。
しかし、コマンド版PHPはなかなかおもしろいもんですね。
Perl使えと言われそうだけどね、慣れれば感触いいよ。
新しく覚えることはstdinのファイルポインタはSTDIN、stdoutはSTDOUT、stderrはSTDERRを使うということだけだな。
それさえ覚えれば楽なもんですよ。
まぁなかなか楽しい遊び方じゃないかな?

漠然と略すでなく簡体字のように略す

最近のノートはずいぶん字が崩れている。
まぁとる量が増えたのが大きいですね。
ある程度はいいとしても、これはひどいかなと最近思ってはいるんだよ。
まぁ気をつけてはいるんだけど、それにも時間のせいで限界がある。
時間のせいと決め付けているのは英語のノートはきれいだということから。
で、崩れるというのは複雑な字を書くから崩れる。
なら、簡単な字を使えばいいんじゃと。
へんやつくりを…
語→语 (ごんべんが簡単になってる)
広→广 (まだれだけであらわしている)
気→气
飛→飞
電→电 (あまがんむりが消えてる)
門→门 (もんがまえが簡単になっている)
とまぁ…、これ全部中国語の簡体字です。
まぁこんな具合に大陸で正しいとされている字です。
こればかりは略字が正式な字です。
まぁこの程度なら理解できてしまうなぁと思う節もある。
もうちょっとこういうタイプの略し方もあります。
まぁ画数も減るし、読めれば悪くはないかなと。
もっとも、本当に使う気はないけど。
ただ適当に略すよりも読める可能性は高くなるんじゃないかな?変な字だけどさ。
ただ、簡体字、簡単にするのにちょっと強引な手段もとっていて
華→华 (化の読みが同じなのを使って、声形文字に仕立て上げる)
とまでいくと、理解不能…
ちなみに、簡体字は中国大陸で使われています、台湾では伝統的な漢字がほとんどそのまま残ってますよ。
こいつは繁体字というけど、日本語の漢字より難しい字が多いね。日本語でも簡略化されてるし。
でも、もっと元の字が残ってるところがある、韓国。
ここは漢字に関しては使わないから改善もしてこなかったからね。
ただ、漢字いいじゃないですか。字が減って、意味がとりやすくなって、目だって。