「プログラミング」カテゴリーアーカイブ

OS自作入門1日目

***本記事にはプロモーションが含まれています。***

読んだ。
いきなりバイナリエディタ触るんですね。Meadowでやろうと思って、M-x hexl-find-fileでバイナリモードでファイルを開いたりM-x hexl-modeでモードを変えられることは調べたけど、アルファベットしか入力できない。M-x hexl-insert-hex-char(C-M-x)で入力できるけど、いちいち面倒でBz使うことにした。
.nasという拡張子でasm-modeにするにはこんなのを.emacsに書いておくといいです。
(setq auto-mode-alist
(append '(("\.nas$" . asm-mode))
auto-mode-alist))
(add-hook 'asm-mode-hook
'(lambda ()
(progn
(setq tab-width 4)
; (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40))
)))
tab-stop-listは、入力の最初の位置を決めるのに使えます。コメントにしてありますけど。
asm-modeでのコメントですが、セミコロン;を2つ打ち込まないと行頭に行かないです。2つ打ち込むと3つ入るというおまけまでついていて、なんともおせっかいなと思った。でも、カスタマイズする方法がわからなかった…。

30日でできる!OS自作入門

***本記事にはプロモーションが含まれています。***

OS自作入門買ってきました。
最初の印象は、デカいでした。OSの解説となるとこれぐらいの分量になるんですかね。
QEMUが使われているんですね。やっぱりOS作るには便利なのか。
これ読んだら、64ビットOSとか作れるようになるんだろうか。ただ、64ビットのプログラムを作ってみたいだけなんですけど。「はじめて読むAMD64/EM64T」みたいな本書いてくれないかな。なければ作るとか。
QEMU専用のOSだったら、作るのもありかなとも思います。VT/Pacificaも使えるようにして。いろいろやろうとすると、Xenと同じになる気がしますけど。
わかった気になるためには、プログラムを打ち込んでみることが大切のような気がします。
とりあえず、少しずつ読んでみることにします。

液晶の明るさ

***本記事にはプロモーションが含まれています。***

Intelは、ViivというブランドでPCに映像を取り込みたいそうですね。でも、自分がパソコンでテレビを見れない大きな理由が、液晶の明るさです。
最近は、300cd/m2みたいに液晶の輝度を上げた製品ばかり見かけますが、僕にとっては眩し過ぎます。店頭で、きれいに見えるからと購入したのですが、とても使えなくて売ってしまったことがあります。液晶パネルの輝度設定で最低にしても明るすぎ、コントラストをいじってもだめ。Windowsのデバイスドライバで輝度を抑えるとやっと見ていられる明るさになったのですが、プログラムをいじったりはできても、とてもテレビを見られる明るさではなくなってしまいました。それ以来、テレビとパソコンは別物だと強く思っています。
考えてみると、パソコンで液晶ディスプレイを見る距離は50cmくらいでしょうか。テレビは、3mくらい離れているでしょうから、単純計算でも1/5くらい明るさが変わらないと同じようには見えないはずなんですよね。1/5は極端かもしれないですけど。雑誌やWebで、明るくて見やすいなんてよく書かれているのをみると、それで長時間本当に作業したことがあるのかって突っ込みたくなります。僕としては、どれくらい暗く調節できるかと、そのときの見やすさがとても気になります。
ワンタッチで、テレビモードとパソコンモードを変えられるといううたい文句のパソコンもありますが、店頭で見た感じでは、パソコンモードが明るすぎてました。
昼と夜で液晶の明るさを変えられるのもいいですよね。夜はとても明るく感じます。
ディスプレイの近くに人がいるかどうかで自動的に液晶の明るさを変えてくれるようなインテリジェンスを持った液晶があったらいいなとも思います。
暗くて見やすい目に優しいディスプレイをどこか作ってくれないかな。

patchの編集

***本記事にはプロモーションが含まれています。***

.patchという拡張子のファイルをEmacs/Meadowで開くと編集できないです。なぜかなとずっと思っていたのですが、M-x toggle-read-onlyで編集できるようになったのでした。
これでpatchのごみを掃除できます。
Kqemu使っても-win2k-hackがいる場合があるんですね。やっぱりIDEの問題なのか?

UDPの双方向通信

***本記事にはプロモーションが含まれています。***

UDPで、データを待ち受けるときは、recvfromを使います。このとき、データがくるとパラメータに指定した送信先に、データを送ったアドレスが格納されています。そこに、sendtoを使ってデータを送り返すことで、はじめにデータを送ってきたプログラムと通信することができます。
あまり、UDPでの双方向通信についていいサンプルがないですし、参考にしたサイトがなくなってしまったのでこちらで説明すると、
rc = recvfrom(sd, bufptr, buflen, 0, (struct sockaddr *)&clientaddr, &clientaddrlen);
のclientaddrに送ってきたアドレスが入っているので、それを使ってsendtoすると応答を返せます。
rc = sendto(sd, bufptr, buflen, 0, (struct sockaddr *)&clientaddr, clientaddrlen);
http://publib.boulder.ibm.com/html/as400/v4r5/ic2962/info/RZAB6UDPSXMP.HTM
片方向通信の例はたくさんあるんですけどね。

コードのシンプルさ

***本記事にはプロモーションが含まれています。***

コードをシンプルに保つということは、余計な操作を削ぎ落とすことと同時に、1つの文章により多くの意味を持たせる、やらせるってことだと思う。要するにコピペはするなってことだけど。
また、大局的に見て必要な操作をまとめたり、戦略的な見方もある気がする。
それと、プログラマの力量によってもコードの見方が違ってくると思う。普通の文章と同じ側面がある。
細かなことまで書かないと、やってくれないとか、面倒なことでも文句も言わずやってくれるとか、コンピュータならではの側面もあるけれど。
人間にとってのわかりやすさってことかな。

KMDF

***本記事にはプロモーションが含まれています。***

カーネルモードドライバーフレームワーク早速ゲットしてきました。
これって、64bitのドライバー開発できるんですかね。できるんだったら、たとえばQvm86を64bitに移植して、Windows x64で動かしたら爆速とかになるんでしょうか。無理か。

Mersenne Twister

***本記事にはプロモーションが含まれています。***

メルセンヌ・ツイスタ
擬似乱数生成アルゴリズムだって。線形合同法よりも良質な乱数を生成する。
乱数生成といってもいろいろあるのね。
ちなみに、tongue twisterというと早口言葉のこと。tongue(タン)は、舌のことです。牛肉のタンと一緒だったりする。
牛肉のハツは、hearts(ハーツ)からきているそうですね。なんか話が違っているような…。

OOB

***本記事にはプロモーションが含まれています。***

OOB - Out of band
帯域外データ
telnetプロトコルでCtrl-Cのような割り込みで使っている。
send/recvにMSG_OOBを渡すことで送受信できる。
setsockoptにSO_OOBINLINEを設定することで、OOBデータを得ることもできる。<---設定しなければ、送ることができないの?不明。設定したときとしないときで、selectが反応するかどうかを調べればいいのだろうけど。 とりあえず使っていないからいいか。telnetも使えるようだし。

Ruby on Rails

***本記事にはプロモーションが含まれています。***

なんだか、Ruby on Railsが妙に気になる。言葉の響きがいいなとか感じたり。
プロトタイプに適した開発環境だそうですけど、どうなんでしょう。
プロトタイプという言葉にも反応してしまうのは、アニメの影響なんだろうけど。