3月の日記。
現在勉強中だがこれは画期的だ。XMLデータからHTML,XHTMLの両データを合成するという当初の目的だけでなく、JavaScriptを用いてクライアントサイドだけでHTML自体を動的に変更できる。現在このサイトにはCSSの動的変更を用いてデザインを自由に変更できるが、HTML自体を動的に変更できるとなればもはや別次元の世界だ。
リンク集に昔入れてたXML講座を追加しておいた。
現在このサイト(Ver.9.0)では主要ページをtext/html版とapplication/xhtml+xml版の2種類で提供しているが、両方を編集するので更新毎に手間がかかり過ぎる。そこでXMLデータを作りそれをXSLTで.htmlと.xhtmlの2種類に変換しようと考えている。
今日XSLTで未解決だった処理の解決方法が浮かび、このVer.10.0構想を実行できるようになった。ただし実行には数週間かかると思われる。
複雑系第2弾。実は昔一度挑戦して失敗したことがある。今回は完璧。
拡大倍率の変数名の間違いを修正。倍率を変更できない凄まじいバグを抱えていましたよ。
さらに設計ミスを修正。発散判定は|Zn|>2を用いるはずが絶対値の2乗になっていた。
グラフィックボードかマザーボードかは知らないが、ハードに付属していたレーシングゲームをやっていた。レーシングに関しては頭がプレイステーション1時代なので今時のゲームにはグラフィックは元より衝突判定など色々と驚くべきことがあったが、中でもドライバーが死ぬとセーブデータが消えるシステムには驚かされた(泣)。
教訓:高低差1000メートルの断崖絶壁のコーナーに100km/hの慣性ドリフトで突っ込まない
JavaScriptではこれ以上動的なプログラムが作れないとして、Javaの開発環境を整えた。入門書もかなり前に買ってあるが、Javaに"入門"する気は全くないので付属しているサンプルを利用して作りたいプログラムでも作るつもり。JavaScriptも最初はサンプルが大量に載った本を買って身につけた。
送信フォームでリンクエラーの指摘があったので久々にサイト全体のエラーチェックを行った。結果、.html、.xhtmlファイルにおいてリンクエラーが2件と外部.jsファイルのリンクエラーが15件見つかり、これを修正した。
まぁ2000ファイル規模のサイトでHTMLリンクエラーが2件しかヒットしなかったのは管理としては上出来。
ブロック崩しは現在Ver.0.6.0だが必要な機能は全て揃っている。微小なバグを考慮しないなら完成したといってよいだろう。ちなみに製作開始が22日で、このVer.0.6.0が24日の午前中。このレベルのJavaScriptとしては最速となる3日で完成した。
Reversiのようにバージョンアップするごとにちまちま更新せず、ローカルでまともに動くまでバージョンアップを続けている。現在Ver.0.1.0製作中。4代目にしてやっとブロックの実装に成功したところ。
ただしブロックに衝突したときにどの面に衝突したかを正確に計算する部分が未実装。これを実装したらほぼ完成と言ってよい。
購入。複雑系は最近コンピュータ上で遺伝子コードを進化させる人工生命に関する情報を漁ってたので目に留まった。
次のゲームは"ブロック崩し"に決定した。現時点でボールの発射、反射には至っていないが、マウスとバーの連動には成功している。このゲームにおける内部処理最大の問題は、ボールの運動を決定する方法である。1つはボールの運動をX軸,Y軸に分解し関数によって移動量を計算する方法。もう一つはボールの移動ベクトルの大きさ固定した上で角度を用いてX軸,Y軸に分解する方法。処理的には後者のほうが簡単だが、応用が利かない。前者は内部での処理が非常に煩雑になるが、あらゆる物理作用を組み込むことが出来る。そこまで応用する気はないので後者でいく予定。
XML パースエラー: 整形式になっていません。 URL: file:///E:/Web9/talk/06_03th.xhtml 行番号: 36, 列番号: 58:
ブラウザが自動修正しないので文法チェッカー要らず。文法を重視するなら利点でしょう、重視しないなら煩わしいだけでしょう。
今日買った物理Uの教科書を開くと原子番号111の名称が載っていた。最近決まった(というより新しいデータが使われた)のであろう。原子番号111、Rg,レントゲニウム。つっても原子番号104以降の超アクチニド元素は原子を衝突,融合させて作られている上に存在時間が果てしなく短い、ほぼ名前だけの世界だし...。
愚作の箱の読み物のうち、bigest.cssを読ませてあるページの一部の表示が破損していた。CSSの設定でブロック要素の高さを100%(1em)に指定されている状態で文字サイズの拡大がブロック要素ではなくインライン要素にかかったのが原因。bigest.cssによる拡大をブロック要素に対して設定することでこれを回避した。確か前にも同じ問題が生じた記事があり急遽修正したが、まだ残っていたとは思わなかった。
狸氏(誰だよ)から十分に強いとの感想を頂いた。全ての拡張機能も実装済み、Ver.1.0.0―正式版―にてReversiは完成である。ただしシミュレーターが出力したデータを100%処理できていない。シミュレーターはこのままで優先度分けの部分をもう少し厳密にすればさらに強くなると思われる。
これが終わったらもう少し動的な処理を行いたい。
動作不調の原因が判明。Simulatorオブジェクト本体が直接処理していた部分をプロトタイプに分割していたところ、プロトタイプの一つにreturnがなかった。戻り値なしでよく動いてたよなーと、一瞬関心。同時に2箇所の変数の入力ミスと換算ミスを発見した。
殆ど完成しているが公開はもう少し挙動を見てから。
DOM以外では制御できないXHTMLにして以来、JavaScriptにおけるDOMのスキルは格段に進歩した。Reversiの碁盤の合成もNetscape互換のDOMが用いられているだけあって、DOMに関してはもう文句はない。JavaScriptで手をつけていない部分といえば、正規表現と画像処理だけになった。
かなり放置していた。ソースコードを忘れないうちに新しい方式で組んだ対戦プログラムを完成させたい。200行近いSimulatorオブジェクトを一度のデバッグもなしに完成させたのはそれだけスキルが上がっているといえるが、逆にここまで来ると内部でどんな挙動が起きているのか分からない。
デザインには無頓着な私だがFirefoxのテーマを試しに変えてみたら気に入った。
画像はクリックで拡大が暗黙の掟だが、画像をHTMLのwidthとheightで縮小せずに画像自体を小さいものに差し替えるよーに。1024*768の画像を丸ごと貼り付けるととんでもなく重いから。
エヴァンゲリオンの単行本を購入。現在Web上からアニメを有料で視聴できるが、有料配信を認識する技術的手段が詳しく分かっていないため、マシン上にダウンロ−ドできない可能性がある。よってリスクのあるWeb配信よりも確実に保存できる単行本のほうを選択した。
ちなみに有料配信を認識する手段はIP又はCookieが考えられる。YahooBB会員向けサービスは殆どIP認証で実装されている。これに対しCookieの場合、HTTPヘッダを高度に偽装しない限り偽の手段でアクセスできない。少なくともWindowsMediaPlayerはYahooに対しCookieを送信していたことから、Cookie認証である可能性が高い。即ち保持している偽装ソフトによってASXをダウンロードできない公算が大きい。
こう毎日のように情報流出が起きてくると感覚が麻痺してくるんだが...。ド素人の分際でWinnyを使うバカも、キンタマウイルスも、劣悪な情報管理も、ある意味で凄い。さらに責任をソフトウェアとウイルスに押し付ける姿勢も凄いとしかいいようがない。
真面目な話、流出させた奴らはインターネットがどんな状況にあるか理解しているとは思えない。例えばうちのLANのファイアウォールは半日で60回以上の攻撃とポートスキャンを受けているし、専用の対策ソフトで固めた上に侵入可能な動的機能を全て切らないとネットサーフィンするだけでスパイウェアに感染する。また対策ソフトでウイルスを防げるといっても、対策ソフトが対応するにはウイルスが拡散しないといけないので必ず後発になる。はっきりいってインターネットに接続されている限り多大なリスクを抱える。パケットの監視、プロセスの監視、どんなに注意してもし過ぎることはない。
IT専門は論点が違いますな。
部屋を放置しすぎた。学校から持って帰ってきた教科書の収納スペースを確保できなかった。一方で隙間はあるが使えないスペースが存在する。捨てるものは捨てる。保持するものは保持する。使わないものは使わない場所へ。使うものは使う場所へ。
学校でどうでもいい大学調べの際、自分の使っているキーボードより一回り大きなものを使ったため、未だにCtrl+Vの距離を間違える。
関係ないが、Wordって便利なんですかね(資料まとめにWordを使わされた)。私のWin2kには利用価値がないという理由でインストールしてないし、あの下品なインターフェイスは何度使っても使い慣れない。
3月14日は数学の日だなぁと思っていること自体ある意味狂ってるんだが、ホワイトデーという単語が全く出てこなかったこともある意味狂っていた。
ちなみにあんまり信用できないkanataさんの話によると、2月14日はネクタイの日だったようです。
私のマシンはウイルス対策は皆無、ファイアウォールとスパイウェア対策ソフトは複数個導入しているが、スパイウェアの侵入経路を一通り熟知しているだけあって全く検出されない。ようは実行ファイルをマシン内部に侵入させなければいいわけだから、ブラウザやOSの回避不可能な脆弱性を除いて実行ファイルの侵入経路を全て塞いでおけばどんなサイトを閲覧しても感染することはありえない。例えウイルスでも実行ファイルという実体が必要である以上その実体をマシン内部で実行させない限り安全ということだ。
環境でも書いておく。
ブラウザ | Sleipnir1.66 | Mozilla Firefox1.5 |
---|---|---|
エンジン | MSHTML | Gecko |
画像 | 許可 | 許可 |
CSS | 許可 | 許可 |
JavaScript | 拒否 | 許可 |
VBScript | 拒否 | -- |
Java | 拒否 | 許可 |
Flash | 拒否 | 許可 |
ActiveX(実行) | 拒否 | -- |
ActiveX(DL) | 拒否 | -- |
サウンド | 拒否 | 拒否 |
動画 | 拒否 | 拒否 |
Cookie | 保存毎に確認 | 保存毎に確認 |
Referer | 許可 | 許可 |
MSHTMLの場合主要な機能は全てActiveXで実装されているので実行を拒否すると個別にブロックしなくともプラグインが全滅してくれる。
プラグイン中の音楽ファイルはブラウザより前の段階のローカルプロキシによってブロックされる仕様。また主要なアクセス解析サービスもローカルプロキシによって無効化される。多くのサイトでページの上か下に[忍者Tools killed!!!]とか[ax.xrea.com-killed]なんて文字があったりするw
最近になってこの単語を聞くようになり形状と名前から酒の銘柄かと思ってたらFF関係だったのかよ。PS2を持っていない以前にゲームを買わないのでそういうことはさっぱり。
デフォルトスタイルをnote.cssに変更。
先日スタイルが適用されないと報告してくださった方からスタイルが適用されたと連絡をもらいました。どうやら原因はsand.cssにあったようです(sand.cssは文法的に正当だからPSP固有の問題であることは確か)。
common.jsがIE5.0でも動くようArrayのプロトタイプを上書きした。これでIE5.0でもpopとpushが利用可能になる。
ところでこの例のpopとpushは最初から実装されていなくても直接コードを書ける。そこでこのような追加機能的な関数を除いたエンジンに直接記述するしかない必須プロパティだけを使ってコードを書く習慣をつけようと思う。最近ではHTMLの操作はdocument.write
等の古いものを使わずにHTMLを構造的に処理できるDOMを使っている。内部処理も同じように最小限のプロパティを使い、汎用的な高等処理はプロトタイプを追加することで実現させる。
LANケ−ブルを屋根に這わせて有線にした。マシンはオーバースペックのため1Mbpsの動画であっても高速に処理できる。唯一の難点は通信速度の遅さと切れやすさだった。今や毎秒1Mbitを軽々とダウンロードできる。そして切れないので放置したままでファイルをダウンロードできる。途中で転送が止まるなんてことは起きない。
残酷な天使のテーゼは毎日聴くほど好きな曲だが、元来アニメと縁のない私は肝心のエヴァンゲリオンを観た事がない。ちょうどYahoo!動画で1〜5話まで配信されているようなので視聴してみることにした。私は画質を求める人間なので当然1Mbpsにするが、今のところ確認した最高速は深夜0時で毎秒700K。それに加え接続が切れまくり普通のソフトでは閲覧できない(WindowsMediaPlayerなんて5秒再生できたら快挙)。そこでストリーミング動画のダウンロードソフトを落としてきて現在ダウンロード中。
この週末に有線に変えたい。速度の遅さは時間で解決できても短期間に切断しまくるのは死ねる。この動画にしても強力なリトライ機能のあるソフトじゃないと1分足らずで接続エラーが生じる。
で、結果的にアニメの視聴より回線速度との戦いが本題になっている始末。
5話まで視聴終了(2話分は有線経由)。ASXでは絶対に安定しないのでWMVでダウンロードした。データとして残るので一々170MB落とさなくても連続して観ることができる。つーかこの環境じゃ300Kbpsすら安定して出力できんのだよ。
このサイトのcommon.jsの仕様上InternetExplorer5.0以下でエラーが起きる。別にJavaScriptが動かなくても問題は生じないが、IE5.5から追加されたArrayオブジェクトのプロトタイプ、pop()
及びpush()
が定義されていないことになってしまう。まぁこのような便利機能的なオブジェクトはプロトタイプを上書きすることで簡単に回避できるので時間があるときに修正したい。
また中途半端に手続き型である今の記述法も完全な関数型に書き直したい。
学校で4時間勉強時間を稼ぎ、さらに帰宅後3.5時間を捻出する。おかげさまでPCをいじる時間は週末か早朝に限られる。脳体力の"浪費"を最小限に抑えつつ睡眠に入り、6時間後に目覚めPCをやる時間をつくる!
ちなみにPCを立ち上げるとRSS等のIT系ニュースと時事ニュースに目を通す。これには30分を要する。
現時点でAIの改良はないが、コンピュータVSコンピュータの対戦中画像を貼っておく。内部処理を改造してAIが一人二役できるようにした。
流石に脳みそは右脳と左脳を各1個ずつしか持ってないので時期ごとに更新が偏る。
Ver.0.8.0完成。端と角を狙うといいつつも相手に端を取られないことを優先してしまうため、端を狙わない場合が多い。。。
週末の別紙が米軍再編,中日新聞1面左上に人権擁護法案,同じく1面に中国軍事事情。中々興味深い記事ばかり。まぁそれよりも中日で1面にあった人権擁護法案を報道しない新聞社の数が非常に興味深いわけだが。
AIに"実験"を組み込んでいる途中。Ver.0.6.0のログにあるように内部に現在の状態を持つ独立した碁盤を作り、その碁盤で相手のターンの可能性を調べる。角や端が取られてしまうと分かればその置き方の優先度を下げるという方法で最適化する。現時点で優先度はLv1〜7までの7段階で判定している。
今の状態ではシミュレーター(厳密にはAI.Simulatorモジュール)から出力される結果にゴミが入って上手く判定できていない。もしシミュレーターが正確な値を返せば強さは激増するはずだ。現在デバグ中ー。
作る前に一応商標なのは調査済みであったため、意識してオセロゲームにしていた(今は忘れていたが)。さっき送信フォームで指摘されたのでリバーシ(オセロゲーム)にし、ページの下のほうにオセロはパルボックスの商標登録です.Copyright 1998-2003 Computer Reversi Group.と書いておけば問題ないだろうと思ったが、やたら表記が長くなったりゴミがついたりするのは色々面倒なのでいっそReversiに統一しておく。本当はIMEすらサポートしていないReversiよりもオセロのほうが一般的なんだろうけど...。
やっと醍醐味である戦術プログラムの実装に成功。今の時点では次のターンを"読んで"いないため常人でも十分に勝てる程度の強さしかない。しかし先のターンを"読む"機能を持たせればもはや常人では勝てないだろう。
戦術プログラムの突っ込んだ話になるが、今のアルゴリズムではまず置けるマスをリストアップ、それらをLv1(角),Lv2(端),Lv3(全て)の3段階のレベルに分け、各レベルごとにそのターンで最も多くの駒を奪取できるマスを選択している。
まずLv1の角を取る重要性はゲームの終盤を除いて絶対だ。仮に終盤でも不利になることは殆どないのでここでは考慮しない。問題はLv2の端で相手の隣に置いてしまうことだ。下手をすれば相手に角を取らせてしまう。即ちLv2の時は次のターンで相手に巻き返されないような工夫が必要だ。またLv1のときも角を取られるような位置に置いてはいけない。
この2点を解消するアルゴリズムとしてはそれぞれ次のような処理を追加することで解決できる(AIは白)。
端のライン上で[黒][白][角]という構図が出来上がってしまうような置き方をLv3以下のLv4に格下げする。
端のライン上で[黒][白][ ](角以外)という構図が出来上がってしまうような置き方をLv3に格下げする。
ナナメライン上で[角][白][黒][白][黒]という構図が出来上がってしまうような置き方をLv3以下のLv4に格下げする。
完璧ではないがこれが"先を読む"機能の具体的な判別式。これを実装するだけで大抵の人間とまともに対戦できる。
あとやりたいのがコンピュータ VS コンピュータ。同じアルゴリズムで両方の色に対してアルゴリズム上の最高の選択を続けると一体どっちが勝つか。今のところランダム要素が含まれているから勝敗は変動するだろうけどね。
inputを取り除いた_format.cssをsand.cssからimportさせた。ほとんどの要素はこれによってブラウザの定義したスタイルを全解除される。
エニグマ暗号は紀元前にあったシーザー暗号の欠点であった周期の短さを克服した暗号。シーザー暗号というのは単純にアルファベットの文字をずらしていくだけの暗号。シーザーの欠点は同じ鍵で2つ以上の文章を暗号化したとき逆算できるため大量の情報の暗号化には不向きなことであったが、エニグマでは複数のギアを組み合わせ暗号周期が100億以上の鍵を作ることによってこれを解消する。まぁ100億以上あっても根っこはシーザーと同じだから同じ鍵で2回以上の暗号を作ったりギアの設定が一部でも漏れると逆算される恐れがある(設定が分かると考えられるギアのパターンが一気に圧縮される)。
周期100億というのは当時無敵と言われたが、コンピュータが毎秒1億回の演算を行えるようになってしまった現代では総当りでさくっと解読できてしまう。
参考リンクに私の持ってる本を載せておく。シーザーからRSA,量子暗号まで載っている。RSAは結構踏み込んだ話となっているため数学が苦手だとちょっときついかも。
これを期に周期1015ぐらいのエニグマ暗号でも作って遊んでみようかしら。原理的にはギアを1枚増やすだけで10倍以上の強度を得られるため、まともに使えば解読不可能な暗号系には違いない。そういえば昔このサイトにシーザー暗号のページがあったなぁ(現在は削除)。
2月に御主人様と一緒に買ってきた本だが、(ネタとして)面白くないといって載せなかった。今日の朝刊を見てたところなんと3面に取り上げられていた。
ゆとり教育を現に受け、去年の夏ごろから学校を宗教団体と呼んでた私にとっては非常に興味深く同意できる内容。
Yahoo!ブックスのトップの売上ランキング1位が"マンガ嫌韓流 2"かよw
実はかなり前にJavaやるかーということで入門書を買っていた。最初はこれでいけると思ったが、よく考えたらJavaScriptは入門書なんか1冊も買っていない。入門書の構成自体が私には合わないらしい。(追試が残っているが)テストも終わったのでリファレンスでも買ってくる予定。
現在JavaScriptでオセロを作っているが、次の段階としてブロック崩しやテトリスといった動的ゲームを実装する。これが終わった後はJava言語でもやりたい。HTMLに埋め込めるしJavaScriptよりも速いのでさらに動的な処理を行える。
JS上で15万桁の整数計算もやっているが、即席で莫大な処理を行うにはJavaScriptはあまりに遅すぎる(高速化に半年ぐらいかかるw)。
_format.cssを作ってブラウザのデフォルトスタイルを完全に初期化してみたところ、このサイトのスタイルは一部ブラウザのデフォルトスタイルに依存していることが判明。_format.cssを適用した状態で同じデザインになるようにsand.cssを書き直した。他のスタイルも同様の問題を抱えているだろうが、とりあえずはsand.cssだけ。時間があれば他のCSSも書き換えたい。
ちなみに通常は_format.cssを外している。本来なら_format.cssでブラウザのスタイルを初期化してからCSSを適用させたほうがブラウザ間の表示差を小さくできるし余計なスタイルの混入がない。しかしフォームの部品を構成するにはCSSで属性値を取得したり動的効果をつけなければならない。残念ながらIEはこれに対応していないため、_format.cssを適用するとフォームの部品のデザインが消滅してしまう。その為フォームにデフォルトスタイルを適用させるために_format.cssを外している。
初期化は絶対に行いたいのでフォーム以外の部分を初期化するCSSを検討中。IE以外でフル表示とかやっていると昔みたく落とすファイル量がどんどん巨大化していってサイト自体が重くなりかねない。
ちなみに再設計したsand.cssは7.11KB。
2月の(学校を除く)総学習時間を累計していた。結果は90時間(3h/day)。3月の目標は120時間。現在より25%多くの作業をこなせるようにする。
3月の難関は定期テストの追試。いつか誰かに"出来杉"なんてイメージを持たれていたが、定期テストではぶっちぎりの最下位を走る人間だったり(模試は違うけど)。
そうそう、家庭学習時間はゼロだからね。
このサイトの構造があまりに複雑で更新の度に莫大なファイルの更新を必要とする。例えば1ページ追加/更新した場合に手を加える必要のあるファイルは最低でもindex.html,index.xhtml,new.html,new.xhtml,update.html,update.xhtml,common.js,rss.xmlの8ファイル。更新個所が構造上深い部分にあった場合、上階層のファイルを全て更新しなければならない。多すぎて更新作業だけで骨が折れるので。rss.xmlと重複するnew.html,new.xhtmlの情報を撤廃する予定。また現段階で合計100KBになる更新履歴をサイトのバージョンごとに小分けしてテキスト化し一度のアップロード量を軽減する。
htmlとxhtmlの2種類でコンテンツを提供するシステムは私の拘りなので止める気はない。
1日のうち半分の時間はネットにつながらない。つながっても切れまくる。周辺の電波が多いのか、この雨天が原因なのか、とにかく有線にしないとオンラインウイルススキャンすらできないのでやってられん。
ネトゲー?あんな重いもの落とせるわけがないじゃないか。