冬ですよー。
べふんげ〜。
ということでBefungeインタープリタ追加。正しい読み方は知らない。ビファンジ?
昨日書いたUI絡みの話だが、結局放棄。ユーザーの入力受けるまで制御を返さない関数というのが書けなかった。仕方なくprompt()を使うことに・・・。
sleep関数みたいなものがあれば、
while(!ユーザー入力){ sleep(5);//wait for 5msec }
みたいな感じでユーザー入力を待つこともできるんだろうが、sleepなしでwhileループぐるぐる回して待とうとするとブラウザにスクリプト停止を要求されるorブラウザが「応答なし」になる、いずれにせよ処理が重くなってユーザー入力を受け付けてくれないので使い物にならない。
そうか、今のJavaScriptに足りないものってsleepだったのか・・・。将来追加されるとか言うことはないだろうね。普通の使い方だったらsetTimeoutとか使えばいいからね
昨日言ってたBefungeインタープリタですが、まだ不具合があるようなんで公開は延期ということで。あとUIをもう少し考えたいというのもある。
普通のプログラミング言語ってCUIが基本にあるものが多いわけで、それは難解言語自身、そして処理系(特に本家の処理系)を実装する言語の両方に当てはまる。一方でJavaScriptは(HTMLによる)GUIが基本だ。これがある種JavaScriptの長所なんじゃないかと私は思うが、前述のような処理系実装ではかえって操作性が下がってしまう感がある。というわけでJavaScriptでCUIな環境を組もうかと考えているところ。
GUIならいいってもんじゃないんよ、と言いたかっただけです。はい。
バイオ創造設計のミーティングに出たら集まり悪かったりgdgdだったり・・・。だったらコミケ行けばよかった・・・。
JavaScriptで弾幕ゲー製作中。
FPS一桁という悲しい状況。IEではときどき1未満になる。Google Chromeではとりあえず2桁維持。
たぶん描画の処理で時間を食っているんじゃないかなぁ。当たり判定処理導入前と後ではそれほど変わんなかったし。ううむ。スタイルシートがちゃがちゃ弄って動かす場合も試してみるかね。
描画関連の難とは別に弾とか敵の管理についても頭を悩ますところ。敵オブジェクトのコンストラクタに敵の行動を記述した関数オブジェクトを渡すようにして、弾オブジェクトのコンストラクタに弾の挙動を記述した関数オブジェクトを渡すようにして、敵の行動を記述した関数オブジェクトの中で弾オブジェクトを生成して・・・とかやったらfunctionブロックの3重ネストが出来上がったとさ。阿呆だ・・・。
自由度削ればもう少し楽に書けるんだろうが、なるたけ自由に敵とか制御したいのが人の心というもので・・・。すでにエターナル臭がしますが。
やはりCとかで書くべきものなのか・・・。
js弾幕ゲーが泥沼状態なんで息抜きにBefungeインタプリタ実装。
インタプリタ自体はできたけどドキュメント書く気力が尽きたので明日あたり上げます。
JavaScript(だけじゃないけど)統合開発環境のAptanaを使ってみた。入力補完が欲しくなったので。
今まではJmEditorでゴリゴリ書いてきたのだが、関数リテラルの宣言(オブジェクトのコンストラクタ内の奴とか)をアウトラインが拾ってくれないのが不満だった。Aptanaのアウトラインはこういうのも拾ってくれるあたりありがたい。
ただし、起動が重い。軽くて入力補完とかのケアがちゃんとしているエディタとかないかな・・・。
昨日に引き続きPC部に出向く。昨日のニックの発言だが、本当は「Brainf**kで」だったことが判明。とりあえず返答すると、それ無理。まずキー入力の取得ができないし。・・・それ以上に色々問題ありそうだし。
とりあえずせっかく作り始めたものは無駄にしたくないんでJavaScriptの方は続行の方針で。
PC部に出向く。PC部のサイトを弄った件でいろいろあって・・・うん、今は反省していない。
ニックにJavaScriptで東方的なもの作れ的なことを言われたので作ってみることに。canvas要素使うつもりなんでIEユーザーおいてきぼりになる可能性大。・・・だったらActionScript使えって話だが。
バイオ創造設計のミーティングがコミケの2日目とかぶったorz うう・・・。
そういや最近日記書いてないな、ということで日記更新。
レポートとかが一段落した・・・のはいいがバイオ創造設計やら文系選択やらで創作物のタスクが・・・。まぁ年明けるまで猶予のある問題ではあるが。
話は変わるが、canvas要素でライフゲームを実装してみた。
Firefoxとかでは割とサクサク動く。IEでは死ぬ。一応動くけどものすごく重い。ActionScriptっぽいコードを意識していつもより若干OOP増し増しな感じにしてみた。
サークルの研究報告会、そして打ち上げ。
Google社員なOB来訪。すげぇとしか言いようがない。
大学のWebシステムのテスターのバイトをやった。履修申告とか成績開示とかWeb上でできるようにしようという(他大では既に一般的な)システムを導入するとのことで、そのシステムを使ってみて使い勝手とかエラーとかの報告をするのが今回やったやつ。
なんかヤバいセキュリティーホールとか見つかんねーかなぁ、といった軽い気持ちで臨んでいたのだが、実際のところセキュリティー云々どころじゃなくてシステムとして結構危うい感じだった。テスター集めてテストに持ち込もうとしたら開発が間に合ってなかったといった感じ。いろいろと突貫工事な感が・・・。システムの本格始動は来年からのようだが・・・かなり不安。来年も紙で申請することになりそう。
音関連を弄りたい、でもJavaScriptじゃ無理、波形生成とかできない。というわけでActionScriptに手を伸ばすことに。
ActionScript開発のための環境自体は一ヶ月くらい前から用意していたが、必要に迫られないと言語の勉強に取り組めない人間なので・・・。
ActionScriptの環境はFlex3 SDKとFlashDevelop。別にFlashのソフトを買わなくてもActionScriptでの開発はできるんよ。
ActionScriptはECMAscriptからの拡張ということでJavaScriptに近いものかと思っていたが、クラスがあったり静的型付けだったり・・・むしろJavaじゃね?という印象。コンパイルもするし。
Brainf**kインタープリタの出力絡みのバグを修正。これでnicovideo/sm4996423のコードがまともに動くようになった。・・・無限ループから抜け出せなくてブラウザが死にますが・・・。
そんなわけでプログラムの実行を中断できるようにしようとしたのだが、うまくいかない。whileループでぐるぐる実行処理している間にボタンのonclickイベント処理で変数弄って実行を止めようとしてもイベント自体が発動しないようす。困ったなぁ・・・。
そんなわけで無限ループが混ざっているようなプログラムを実行する際はステップ実行を連打(「ステップ実行」ボタンにフォーカス移してEnterキー押し続けてもおk)するのが安全策かと。・・・なにこれ。
Brainf**kの次は何をやろうか・・・。
BrainFuckインタープリタをいろいろ弄る。まとめると
まず一番上から。BrainFuckやるなら必要だな、ということで追加。ぶっちゃけ進化したのはこの部分だけな気がする。
二つ目。BrainFuckの仕様を見返したらメモリはbyte配列として定義されていることに気づいた。自作インタープリタの仕様ではJavaScriptの整数値の表現範囲と同じ(少なくとも1byte=255以上の値を取れる)だったので修正。詰めが甘かった・・・。
最後。今までは5ケタぐらいの数値でもメモリに入れることができたのでそこにUnicodeの値を放りこんで出力の際は単純にString.fromCharCode()で済ませていたが、メモリをbyte配列にした以上そのようなことはできない。なのでマルチバイト文字を出力するときは1バイト目を出力→2バイト目を出力というコードで表示させるようにし、内部的にはバッファ配列に放り込む→出力という形をとった。円コーディング変換はEscape Codec Library: ecl.jsからライブラリを拝借し、とりあえずShift_JISとEUC-JPに対応させた。UTF-8はよく分かんないので保留(放置)。ついでにバックスペース(0x08)が機能するようにした。
上記の仕様変更(特にマルチバイト文字絡み)の結果、前回の日記でさらしたコードは動かなくなったとさ。
日記書くか、と言ったところでさしたるネタもなく、ただ刻々と線形代数の試験が迫って来ているだけだしなぁ・・・。ということでbrainfuckのコードでも置いてごまかすことにした。
>>>>++++++++++[<++++++++++<+++++++++<+++++++++<++++>>>>-] <<++++++<++++++<+>>>> <[>+++++[>++++++++++[>+++++++++++++>+++++++++++++<<-]<-]>>+++>++++<<<<-] >>>------------>------------------- <<<<<[>++++++++++>++<<-]>+++++++++>------------ >>.<<.>>>.<<<<.>>>>.<<<<<<.<.
(´・ω・`)が表示される。それ以上でもそれ以下でもないプログラム。
コード書いている本人としてはコードが汚いなとか冗長だなとかメモリ食い過ぎだなとか思ったりするわけだが、第三者から見たらどう書いても汚く見えるんだろうな・・・。まぁそれがこの手のネタ言語の特徴ともいえるが。