#いまタイムインターメディアに到着
#roger.
#おお早い > ikegamiさん
#いなばさんは、もうサンプルが動くところまでいってます... (あのひとはすごいなー)
#まだエントリーしてない
#すごいなぁ
#まだ読んでない > 仕様書
##ここに yhara さんが翻訳した物がありますが
#不完全な上に、仕様書随時変更されてますので
#まず最初に斜め読みするにはいいかも
#darcs の repositoryを作りました。公開鍵を下されば登録します > ikegamiさん、sakaiさん、toyofukuさん
#わーいありがとう
#おはようございます。
#ここでやりましょう
#1.5ってそんなに重要なところが変わってるんですか? ショック。
#nobsun@sampou.org に ssh の公開鍵送ります
#これからVMを書こうと思っていたところなので、影響はあんまりないけど。
#まだ空だけど、darcs get icfp@www.sampou.org:
#1.5 まで: CmpZ は 4 bit 使います(嘘)
#間違えた
#1.5 から : すみません、CmpZ は 3 bit でした
#darcs get icfp09@www.sampou.org:
#binary encoder/decoder 作ってる人には致命的
#うは
#いまならまにあうかもと思って言うけど、darcs-2 レポジトリだとうれしい
#darcs init するときに、darcs init --darcs-2 とします
#さいきんの darcs だと、このオプションつけなくてもデフォルトで darcs-2 だけど
#プロジェクト大きくなると、darcs-2 のほうがずっと速く動く
#darcs-2.1.0を使ってます
#ikegamiさん公開鍵とうろくしました
#アクセスしてみてください
#icfp09@www.sampou.org ですか?
#darcs failed: Not a repository ... brabra ... openBinaryFile:does not exist (No such file or directory))
#そうです。darcs get icfp09@www.sampou.org:
#orgのあとに:を忘れずに。
#それをわすれていました
#anonymous_repo とかいうのができたけど
#これかなあ
#なかみは空
#って defaultrepo みればいいのか
#びんごだ
#ああそうか。
#darcs get icfp09@www.sampou.org:/home/icfp09/
#とやればいいかも
#そのほうがうれしかった、ありがとう
#まず、仕様書(task-1.5.pdf) と、問題セット (bin{1,2,3}.obf) とってこれるように、レポジトリに置きました
#もしかしてーと思ったら task-1.6.pdf がでていたので、それも置きました...
#うほ
#1.6 は、おもにシミュレータができた人向けの変更点ですので、VM や binary loader/decoder を作ってる人にはあまり関係ないです
#ていうか、もうできてんのかっていう
#darcs get できました。
#仕様書と格闘中
#気分が乗ってきたところで、これから歯医者にいかなくてはならないのだった orz
#わたしも 11.00 a.m. あたりから長い昼食をとります
#VM は仕様が小さいので、だいたいできた。binary loader/decoder を作る前に物理学のところを、昼飯とりながら読む
#VM との対話的環境(ghci でもいいけど、めんど)、と Instruction や反例の可視化とかもやりたい
#わたしもVM大体書けました。対話的環境にghciそのものを使うには、VMは別スレッドで動かしてしまうのがいいのかなぁ。
#あと、チーム名決めないとサブミットできない(提出物のなかに埋め込む)ので
#適当なチーム名を考えておいてください
#icfpcontest.org に提出すると、4 byte の数字をもらえることになっているので、それを提出物にバイナリとして埋めます
#だから、まあ、提出するときに決めればいいことですが
#ちなみに、去年のチーム名は Team Sampou でした。
#じゃあそれで
#ではでかけます
#freenode の IRC にも lambdabot いますが
#IRC-net の #haskell:*.jp にも lambdabot 置きました
#> expr
#@pl expr
#なんかがべんりです (> は ghci にくわせる、@pl は ap と flip を使って強引に point-free style にする)
#歯医者から戻りました。ご飯食べてからタイムインターメディアに出発。
#問題の物理部読んだ。最初の問題:円軌道にのっている衛星を、半径の大きい円軌道に修正せよ
#スコア:0 or 成功したときの複雑な式 (7節)
#最初の問題といっているのは Hohmann のことですが
#0 or success というのは非情に厳しい
#3 am からコード書きはじめたので、昼寝
#起きた
#物理計算やるのに、Orbit VM の operand は貧弱すぎる
#1) マクロアセンブリをつくる
#2) 手慣れたプログラム言語を、Orbit VM の上で走らせるようにする
#3) 言語内 DSL で Orbit VM を実現
#どれも、トレードオフがあって、これが一番いいというのはない
#コードを書くプログラマの経験によるのだとおもう
#物理計算は自分の言語で書いて、それをポートIOでOrbitVMに渡してやればいいはず。
#3') 言語内 DSL で Orbit VM にわたす instructions をつくる
#ということかな
#1001の問題を設定して、初期位置とかを読めた。
#(別に DSL にこだわっているわけではありませんが、型検査できるとうれしいので
#おー
#decoder 書けたのか
#結局、Orbit VM はシミュレータを動かすためだけのものでしかないので、自分の言語の側からそっちに制御用のデータを渡すという流れになると思います。
#コードをコミットするために、darcsの使い方を思い出さなくては……
#前書いたチートシートがやくにたつかも
##ふるいなあ、2年前か
#ありがとうございますー
#基本は、0) 中央レポジトリから darcs get
#1) ソースいじる、足す、引く at my machine
#2) darcs add (足したファイル)
#3) darcs record -- ここでコミットログを書く
#4) darcs push -- これで中央サーバに自分のパッチが
#5) darcs pull -- 中央サーバの更新をとってくる
#pushしました。
#まだまだバグはありそうだけど。
#darcs changes でコミットログを最近のものから順番に
#darcs whatsnew -l で、自分のところにあるのに、まだ darcs add してないファイル一覧
#しまった、VM の作成にあたって I/O (Haskell の
#IO じゃなくて) がいるのをわすれていた
#State モナドで組んじゃったから外から見えないぞ、むーん
#副作用ありにしておかないといけなかったのか
#やっぱ RWST 使うべきだったか、そうしよう
#入出力サポートできるようになったので、VM 再開発
#やっぱりバグってるな。
#豊福さんこないなぁ
#豊福さんきた。
#明日の日曜日もやる予定なんですか?
#ひとまず休憩
#ソースを一通り眺めたら、書き直したくなってきた...
#Instruction の書き直しをして、decoder と encoder を書いた(未テスト)
#前より評価器が書きやすい形になったはず...
#nobsunのコード読んでる。
#なるほど!
#nobsun コードください。
#メールで。
#翻訳ページはまだできてないすね。
#今年用の ICFP のページがあればいいか。
#ページだけ作りました。
#ただいまー
##後はよろしく。
#おかえりなさい。
#帰りの電車のなかでデバッグして、ようやくVMが動くように。
#速度はそんなに必要なさそうだから、もう少し純粋な形に書き直したくなってきた。
#デコーダもちゃんとなっているはずなので、試してみてください > nobsun
#明日もオンラインではやる予定です > ikegami
#あと、チーム登録ってまだしてないですよね?
#あら
#nobsunのiOutputは間違ってるぞよ
#iOutput r1 r2 vm = incPC $ vm {vmDMem = update (vmOPort vm) (r1, vmDMem vm ! r2)}ってなってるけど
#iOutput r1 r2 vm = incPC $ vm {vmOPort = (vmOPort vm) // [(r1, vmDMem vm ! r2)]}
#って感じになるかな
#登録はまだ。お願いしていいかな > sakai
#定義しているudpateでも書けるのかもしれないけどちょっとDMem内じゃないのでupdate使うのも微妙
#もう帰りついたの?>nobsun
#いま着いた
#了解
#update :: Array i v -> (i,v) -> Array i v
#なので update を使う分には問題ない。セットする対象が間違ってるのはご指摘どおり > cut-sea
#Team Sampou で登録しました。パスワードはメールします。
#ありがとう > sakai
#OK>updateの利用
#ホーマン軌道の日本語のページや見つけた。
#まだ起きてます?
#私は起きてる
#最新のVMをメールでお願いします。> nobsun,sakai
##これかな?
#ホーマン軌道は ICFP2009 のページにも書いた。
#VMまだうごかん。
#動かなくてOK.
#くれくれ。
#pushした
#コントローラがどういう構造になるのかまだ全然見えないYO!!
#メールでくれくれ。
#ぐへーloadが....
#あーそうか、あのヘンテコなバイナリファイルフォーマットのせいなのね....
#loadは僕のコードでもだめ?
#loadはちゃんと動いているようにみえる
#mailした > [1..100]>>=pen
#メール届きました。サンキューです。
#問題は GHC6.4.2 で動くかだな。
#ふと確認したら、GHC 6.4 で IntMap はいってるね。
#これなら、私のもすこしいじれば動きそう。
#まず nobsun版、Control.Applicative がない。(;_;)
#sakai版はやっぱ * -> * のとこ。
#nobsunのはApplicative必要かな?
#VMの引数からmを消したらどう?
#Applicative 外したらコンパイルできた。
#もちろん使ってる側からも。
#ああいらない
#> Applicative
#そう変更したのを送ります。
#:75:2: parse error on input `=>' > sakai
#ぎゃふん
#-fglasgow-exts つきでも?
#つきだと :82:8: Parse error in pattern
#その ! は消して大丈夫です。
#bang pattern 使わないで seq にするか。
#てか正格評価させる必要性はないんですよね?
#seqとかも使わなくてOK?
#! 全部消したら通りました。サンキュー > sakai,nobsun
#GHC6.4.2の頃は bang pattern がまだなかったのか。
#ここでは意味的な違いはないんですが、正格になるようにすると、worker-wrapper transformation で、unboxed type で渡されるようになって、効率が良くなります。
#タイトなループ処理ではこれが結構効いてくることがある。今回の場合そこまでする必要があるかはわからないけど。
#毎秒毎にメモリを表現する配列を再生成する純粋版を作ったら、目に見えておそくなった。
#む
#むー
#お、ライブだ
#(なお、今起きて、VM の例外処理まわりをつくっています)(もう他の人の VM があるというのに
#ログの記録はまだ書いてないけど、とりあえずコントローラのルーチンを考えるか。
#sakai版を bin1.obf で動かしたら表示されたデータの中に 6.67428e-11 というのが出てきた変?
#Writer モナドでログを吐こうとしています now
#コントローラのルーチンは出来るだけ抽象的なEDSLで書くようにして、それをVM側で駆動するようにしたい。
#それはいいね
#確かに、データの途中に 6.67428e-11 があるね。
#あるよ
#しかし、その前に動きを可視化するものを作るべきという話も。
#nobsun版ベースの方にもある
#nobsun版もloaderのコードはほぼ同じなので、そりゃ同じか
#可視化のためのライブラリは何を使うのが良いのだろうか? wxhaskellなのか?
#SDL ラッパという手もある
#アスキーアート(笑)
#ncurses
#座標とかのデータをCSVとかでダンプしてグラフ描画ツールとかに食わせるとか
#SDLはいいかも。
#うへー Cmpz の imm 部に256がはいってる。
#一番手軽なのはグラフ描画ツールなのかな。アニメーションできるいいツールがあったら教えてー
#ああ 3bitってかいてあるなぁ
#ところで課題を理解していないのだけど bin1.obf とかロードした後は制御とかどうやって指示するの?
#あどれすが決まってるよー
#IOポートのどの番地にどういうデータを書くか
#私のやつだと今は oneStepM の引数の IntMap で指定する。
#あ、それが sakai版のtest2 か。
#bin1.obf をうごかすとどうなればいいんだっけ。
#何も制御しないと、衛星がひたすらどっかに飛んでくだけです。
#問題1のシミュレータが動けばよいのでは?
#まだVMをいじってたりする > わし
#そこでVMに対してIOしてコントロールしてあげる
#bin{1,2,3}.obf はそれぞれ機械の初期化です
#なんか出来てるんじゃないのコレで?
#それを食わせた後で、プログラマが Instruction を与える
#ああそうなんだ。 > 初期化
#instructionとは?
#DType とか SType みたいな
#Add r1 r2 とか
#:Instruction
#そのinstructionは、プログラマから与えることは出来ないです。
#ですよね?
#出来るのはIOポートを介しての制御だけ。
#噴射方向とかをIPortに対してあたえたりするのでは?
#そのシミュレート結果をOutputPortから得て、次なる制御をinput portに対してあたえる
#sakai版のtest2を
#contestants の意味を取り違えていたようだ、すみません
#なので、最初はインタラクティブにIOできる版とかあれば遊べるんじゃないかと思ったんだけど>nobsun
#動かすと出てくる4.2164e7って地球の静止軌道の半径か。
#InputPortにデータを書き込む + VMを0番地から起動 + OutputPortを読む
#というのが外側からのInteraction?
#そうそう > nobsun
#目標とする静止軌道の半径ですね > [1..100]>>=pen
#PCって最後まで行ったら0番地に戻る仕様だったと思うけど本来そこで停止すべき?
#bin?.obf はインストラクション列と初期の内部状態のデータということ であってる?
#そうだと思う。
#それは task-1.6.pdf の 4 ページに書いてあります
#実際にはConfigの設定で決まる
#The Orbit executable format stores the values for the instruction memory and the initial contents of the data memory
#それはVM本体とコントローラーの関係をどう実装するかによる > PCって最後まで行ったら
#1めぐり=1stepですよね?
#私はいまのところPCを最後まで実行するまでをひと関数にしてます。
#そのステップ数をログとして出すようになってたと思うんだけど
#あれ、簡単なことがわからなくなってきた
#だからどう実装するかに依存ってのはないかと
#submission file format の具体例 (6.page) 見ると
#常に1回PCを尻まで進めたら一応コントローラから制御が入るんじゃないかなと思ったんだが
#コントローラがVMを駆動するような形の実装になっているのか、VMがコントローラを駆動するような形に実装するかで、その辺りはどうするのがよいか違うと思う。
#6.67428e-11 は万有引力係数だった。
#メインループをどっちがまわすかというか。
#G ですね : 6.67428e-11
#あー、ごめん、そういうことね>sakai
#確認だけど「step=1回PCを尻まで進める」でいいんですよね?
#で、それが1secとみなされる
#そうだと思います。
#OKOK!
#submission file format の TimeStep ですね。
#そう!
#PC は何?
#まだついていけてにゃい
#あーすみません。プログラムカウンタです
#program counter
#bin{1,2,3}.obf のなかの instructions でしょうか
#(さっきの間違いを頭の中で修正した)
#PCの最後って2^14-1 それともインストラクションの数?
#インストラクションの数だ派
#んでもって、終わりが来たらあとは Noop しつづける
#数が足らないときは残りはNoopになるのでどっちでも同じ。
#というふうに、5 pages の 2 章の終わりを読んだのですが...
#おーたしかに足りなきゃおなじだ
#NoopはsType=0でsOp=0だからね
#結果はNOOPなので同じなんだけど、NOOPを実行するかどうかという
#そこはムダだけど実績としては関係ない
#燃料は減るんじゃなかろうか
#1回PCが巡るのが1secとなるからね
#なるへそ
#燃料かー。それは盲点かも。
#で、ぼくは Submission File Format のことをはげしく誤解していたのですが
#各 time frame の中に書くのはなんなのだろう?
#Noopは本当に何もしないので、Noopの実行で燃料が減ったりすることはないです。
#てっきり外から Instruction 与えるのかとばかり
#各time frameの中に書くのはログですよね簡単に言えば
#そのタイムステップでの、コントローラーからシミュレータにIOポート経由で与える入力。
#シミュレーション結果そのものになると思えばよいのかなと。
#出力もですね
#あれ入力だけ?もしかして
#スコアがあるってことはコレは出力も含んでると思ってたけど
#スコアは向こうで計算できるので、含む必要ないのでは。
#3 章の最初をきっちり読みました、ありがとう
#Output port でスコア吐き続けているので、出題者側でも、我々でも観察可能なのだと思う
#どの問題も output 0x0 port がスコアを教えてくれる
#話が戻るけど、入力だけのはず。
#なるほど確かに理屈だな。
#* The team's identification number, available from the contest website.
* The scenario identification number, also available from the contest website.
* The sequence of actuator inputs used to solve the task.
#と説明されているので。
#すると、プログラマは「出力ポートを観察した結果」を使って、入力ポートに与える何かを計算して、Input opcode であたえる
#入力ポートに与えてexecuteするだけ
#ちなみに、スコアを教えてくれるのは問題をクリアした最後のフレームだけです。
#それがクリアの判定になってる。
#data memory instruction memory共に触らない
#なるほろ
#どうでもよいことだけど bin1.obf の初期軌道は高度200km(低軌道衛星)だった。
#おお
#まず、高さ200km以上の待機軌道に投入し、次いで、トランスファー軌道(近地点約200km、遠地点3万5800km)の遠地点で、小型ロケット(アポジモーター)を点火し、円形軌道にして静止させる。
#ΔxとΔyとConfiguration の 3 つの Input port しか使えないのか...
#点火でどれくらい加速すればいいかって、わかります?
#ホーマン軌道の計算式に値を入れるだけでいいはず。
#考えてみたら、ΔxとΔyはdoubleなので、一瞬で幾らでも加速できそうだ。
#くっ
#それがわから……
#orz
#Configulation port は初期化のときにつかうだけだから、我々がいじれるのはΔxとΔyだけ?
#そうです。
#14 ページの図だけで、妄想すると、円軌道しているから、最初の点火はどこでもいい
#問題は二番目の点火で、これは最遠点でなければならない
#どれくらい点火するのかとか、どうやってタイミング測るのかとかいうのはわからず
##その辺りの計算はおまかせして、SDLをいじっていよう……
#目標の半径に達したら最遠点。
#これ読むと2回速度をいじれば一応軌道を載せ換えられる。
#[1..100]>>=pen は神
#デブリを回収したいとかなると位相もあわせる必要がでてくるということかな
#Output port 0x4 で衛星の軌道の半径とってこれる
#(Hohmann の場合)
#加速する座標はいいんだけど、どんだけ加速したらいいか。
#そこですね、問題は
#たぶん、どんぴしゃでないと、地球に再落下か、宇宙の果てに飛ばされる
#上記URLの問題1に答えがあるっぽいよ
#ホーマン軌道に乗るための速度から初期速度を引くだけ。
#半径r1 から半径r2 の円軌道に移行する際の速度増分が○○であることを示せ。
#cut-see さんのページ見た、これであたりぽい
#○○はイメージになってるかな
#おお
##これがその増分だそうな
#μがなんなのかが発見できないよー
#そうだμを調べてなかった。
##あ、全角スペースだとURLに入ってしまった。
##あった!
#Good Job!
##こっちが基礎だ
#SDLいじりを中断して、試してみるお
#やっちゃってー!
#μは換算質量とかいうらしい
#apollo13みたくなってきた。。。
#ちゅーわけで再生(w
#まず現在の速度を知る必要があるのかな。
#ちゃんと読むとなんか上の増分は違うなー
#うん。いるね。
#速度はセンサーデータには入ってないので、本当は観測する必要があるけど、
##これで現在の軌道から加速して離れて
#目標高度に到達したら
#この問題は円軌道のはずなので、地球に対する相対座標から速度を計算できるはず。
##この速度になるように加速(減速?)する
#これで2回の速度調整ってことだね
#一秒後の座標の違いを速度とするのかな。
#ってわけで自分の速度と高度を取得できればいいんだけどいけるかな?
#0x2と0x3はあくまで地球からの相対座標だから
#step毎に座標を記録して自分の速度を計算する必要がありますな
#それはどの問題にも言えそう:自分の座標や速度を各ステップごとに計算
#体調が段々戻ってきた。今ならアルコール飲める。
#上で観測する必要があると書いたのはまさにそういうこと
#オレも飲もうかな
#おまえらーw
#www
#ってか、この抽象度で書くのはちょっとつらくなってきた。
#先にEDSL作ったほうがいいのか。
#そうなの?
#とりあえず、なにも input しないと衛星がどんなふうに飛んでいっちゃうかを見るのは楽しそうだ
#こういうこともあろうと酒を買っておいた。
#ずっと同一軌道上をグリグリではないかなー最初は。
#今、単純なループでまわってるので、フレームを超えてデータを持ちまわしたり、タイミングをまって何かしたりというのが、やっぱり面倒くさい。
#Hohmann だと単に円軌道するだけなのかとか
#いや、各自の VM にバグがあったら、円軌道するかどうかはわかりませんお
#あーそっちか。>抽象度
#ループを意識しないで、コントローラの観点で書けるEDSLが欲しい。
#上の式に出てくる a_h ってなに?
#a_h?
#(r1+r2)/2
#わしのVMは全然だめらしい orz
#tnx
#a1=r1; a2=r2; ah=(r1+r2)/2 と書いてある。
#えー、そんなーnobsunのVMをパクッてたのにー!
#あきらめるな!> nobsun
#(0,0,1001) をInput にセットして1step動かしたつもりなんだけど。。。0x0 に -1.0が出ただけ。。。
#他のポートには何も出てこない?
#なんもでてこん。
#orz
#それは確かにどこかおかしいのかも。
#スコアが出ないのはよくあるらしいよ(twitter でもみかけた
#dump して Output port mem[reg] を探すしか
#(あるいは、Output 処理してるとこに Debug.Trace の trace をいれるなど
#3 時のおやつ
#Lightening Session はそろそろしめきったかな
#Hohmann書きかけたけど、ちょっと頭が働かなくなってきたので、今夜のところは一度あきらめます。
#健康に気をつけて
#ありがとう。おやすみ~
#1001 って何型にしてセットすればいいの? コマンド引数で帰られるようにしようとしたらうまく行かない。
#ちょいまち。
#寝るの
#ほい。
#IntMapなのでInt
#Int にしたらダメだったような気が
#あ、ごめん。Doubleだ。
#値は全部Double。
#Double だけもダメだったような
#やっぱり頭働いてないな。
#まじで。
#明日にしますか。
#いや、ちょっとまって。
#ああ
#0 をセットするからか
#ちがう値をセットすればいいんだ
#Doubleで大丈夫だったよ。
#お、問題解決? > nobsun
#解決したかどうかはわからんけど、
#ghciで動くのでためしてみてくらはい
#いや、1001と直接書いたときと結果が違う
#起動はmainを評価する
#入力待ちになるので
#1001
#また入力待ちになるので
#(1,1)
#そうすると0でないOutPut ぽーとの結果が出力されまた(dvx,dvy)の入力待ちになる
#おお!インタラクティブにしたんですね
#ポート4番が出てこないです。
#ああだめかやっぱり
#fs <- getArgs; let r::Double = read $ fs !! 1; ...
#(addConf,r), ...
#みたいにしてるんだけど。
#ああたぶん4番は0だと思う。
#fs!!0 は bin1.obf ね。
#rをprintすると、1001.0になります?
#やってみます。
#4番は目標半径なので、0にはならないです。
#let r::Double = 1001 というのもさっきやってみたけど
#こっちでは read "1001"::Double でも同じ結果に見えます。
#あれま。
#そうだった。
#"1001.0"と表示される。
#read "1001"::Double をやってみます。
#じゃあ、ちょっと今の頭ではお手上げです。
#4
#4番は地球の静止軌道の半径 42164キロメートル = 4.2164e7メートル
#うまくいかないです。明日にしましょう。> sakai
#Word16 関係ない?
#Word16はアドレスの表現に使ってるだけなので、そこでは関係ないとは思うけど……
#では、また明日
#お疲れさまでした。
#よく寝てください
#あ、bin2.obf なのに 1001 って書いてた (^_^;)
#ねーnobsun
#はい
#config書くアドレスまちがってない?
#3e23=>3e80
#うわ
#それでも0x4が出てこないのは変らないけど
#そうなんだよね。いまインストラクションをダンプするコードを書きちゅう
#Outputのインストラクションが1つもないことになっている。
#奇妙だ
#むむ。なぜmask10が0x1fに?
#これIMMを取得しているマスクだよね?
#あみすった。Output 4 52がある
#ああそれはね。
#IMMに256がはいっているところがあった
#ふむ
#なぜだろう?
#ああわかった。それだ
#おぺらんどは 23-21bitだ
#Compare Operator のことでしたら、そうです
#古いドキュメントだと、そこがまちがってました
#あーやはりそこか
#task-1.6.pdf ではなおっている
#でも、imm 8
#がはいっているなぁ
#おー4まで出たぞ!
#えほんと?
#どうやった
#mask10 = 0x7
#それと
#あそうか
#operandsの定義
#t == sType = (mask10 .&. (c `shiftR` 21), ....
#21ビットシフトして3ビット拾う
#1001、(1,1)で1すてっぷ動かすと
#(1,10000.0)
#そうそう
#(2,-655...)
#(3,7814.93...)
#(4,4.2164e7)
#で行けたのかな??
#fix して push した
#pullしてためしてちょ
#げ、もう4時半。楕円軌道を調べていた。
#もう寝ます。楕円の夢を見ながら。
#うむ
#インタラクティブに試せるのだけど、今度はある条件を満すまでステップ刻むってのが欲くなりますね
#ではおやすみなさい。また明日。
#ほい
#おやすみ
#わしもねる
#おやすみ
#おやすみなさい
#VM の再設計も最終段階
#やはり、Input と Output の処理に悩む
#JSON でやろうかな
#バイナリいくない(キリッ
#と思ったけど、このまま進めて、暇があったらにしよう...
#socket とか超なつかしい
#Input port は socket 通信にしてみた
#空いているポートがあってよかった
#最終問題の Output port が多すぎる... ので、Output には Socket をつかわない
#Output は JSON かなあ
#JSON で、port : value を吐くことにした
#これで port が多くても安心
#簡易 decoder 書いてみた、動くかな
#