2019-01-01から1年間の記事一覧

vm2gol v2 製作メモ(40) 落ち穂拾い: ローカル変数宣言時に初期値をセット

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これは簡単なのでサラッとやります。 (18) ローカル変数の宣言と代入 / var, set文 のときにちょっと触れていた件です。 だいぶ枝葉な話ですね。 ["var", "x"] , ["set", "x", 12] このように2つ…

vm2gol v2 製作メモ(39) 落ち穂拾い: 入れ子の式を書けるようにする

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 第24回 入れ子の式 で泣く泣く見送ったアレをやっつけます! 枝葉の修正(1) ステップ実行の切り替え 先に枝葉っぽい部分を片付けます。 前回 ダンプ表示を間引きしてライフゲームの実行を高速化…

LibreOffice Drawのodgファイルから図形の情報を抜き出して使う

Qiita に引っ越しました。 qiita.com

JRubyでLibreOffice Calcのfodsファイルを読み書きするサンプル 2019

(2021-01-02) 2021年版書きました: JRubyでLibreOffice Calcのfodsファイルを読み書きするサンプル 2021 以前 JavaScript(Rhino/jrunscript)で書いたものを今さらながら Nashorn 向けに書きなおそうとして調べたところ、非推奨になっていました。 2018-06-…

JavaでLibreOffice Calcのfodsファイルを読み書きするサンプル 2019

(2021-01-01) 2021年版書きました: JavaでLibreOffice Calcのfodsファイルを読み書きするサンプル 2021 5年前に JavaScript で書いたもの を大体そのまま Java に書き直しただけです。 例外のハンドリングは適当です。 今では推奨されない古い書き方が残って…

OCaml ちょっとやってみるための準備(Docker + Ubuntu 18.04)

Docker + Ubuntu 18.04 での環境の用意 とりあえず cat コマンドを書いてみた たぶん3日坊主になると思うので、 ホスト側の環境を汚さないように Docker で環境を用意する。 ホストも Ubuntu です。 この記事を参考に。何も分からないので助かります。 WSL …

LibreOffice Calcの入ったDockerイメージを作ってヘッドレスで動かす

とりあえず自分が使いやすいようにポータブルにしておくとよいかも? くらいの思いつきでやってみましたが、たとえば開発チームのメンバーにちょっとしたツールを渡したいとき(そのためだけに LibreOffice をインストールしてもらわなくて済む)とか、サー…

Open JTalkのDockerイメージを作って手軽に喋らせる

Docker イメージとラッパースクリプトを作っておいて echo "ほげ" | ./talk.sh みたいな感じで手軽に喋らせたい。 改善の余地はありますがとりあえず動いた段階での最低限なメモです。 Dockerfile 書く: FROM ubuntu:18.04 RUN apt-get update \ && apt-get …

vm2gol v2 製作メモ(38) おまけの修正

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る ゴール設定が「ライフゲームが動けばOK」 だったので、前回で終わり、としてもよかったんですが、 せっかくなのでもうちょっとだけいじります。 すでにライフゲームが動いており目的は達成されてい…

vm2gol v2 製作メモ(37) 完成!

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る はい、前回でとうとう 1回のターンが動くように……なってないんですねこれが。 1回のターンに必要な処理がもう1つ残ってます。 VRAM のバッファ領域に書き込んだ次世代の状態をメイン領域に戻す処理…

vm2gol v2 製作メモ(36) すべてのセルで繰り返し

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回までで、1つのセルについて 生存セル数をカウントして、 次世代の生死を決定して、 バッファ用の配列に書き込むところまでできました。 今回は、盤面のすべてのセルに対してそれを行うようにし…

vm2gol v2 製作メモ(35) 次世代の生死をバッファ領域に書き込み

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 周囲の生存セル数から次世代の生死を決定できるようになりました。 今回は、これを VRAM のバッファ領域に書き込む部分を作ります。 VRAM のメイン領域とバッファ領域は、アドレスが 25 ずれている…

vm2gol v2 製作メモ(34) 次世代の生死を決定

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る もうだんだんライフゲームそのもののコーディングに移ってきたので、 cp 33_adjust_index_2.vgt.json gol.vgt.json として、以後はこの gol.vgt.json に対して修正を加えていきます。 座標補正がで…

vm2gol v2 製作メモ(33) 座標の補正 (2)

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回の座標補正の続き……の前に、 先に引っかかるところを潰しておきます。 codegen_return() でローカル変数を返そうとすると 参照の解決ができずにエラーになるので、修正。 --- a/vgcg.rb +++ b/…

vm2gol v2 製作メモ(32) 座標の補正

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これまでは、 その都度の目標に向けて適当に作り、バグや not yet impl で例外が出たら その都度潰していく、という進め方でやってきました。 そういう方針なので、それはそれでいいのですが、 同…

vm2gol v2 製作メモ(31) 生存カウント (2) / _cmt

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 1つのセルの生死が取れるようになったので、 今度は周囲の8つのセルに対して同じように取得できるようにして、 生存カウントを完成させましょう。 前回のものを修正していくので、vgtコードをコピ…

vm2gol v2 製作メモ(30) 生存カウント / VRAM から値を取得 / ステップ数を表示

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る $stdin.gets を無効化 前回二重ループですべてのセルを生存に変えていくというのをやりましたが、 ループがぐるぐる回るため何度も同じ処理を繰り返すようになり、 Enter キーを押しっぱなしにしな…

vm2gol v2 製作メモ(29) 盤面のスキャン / 組み込みの neq

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 盤面の初期化ができたので続きをやります。 えーと続きというのは何かというと…… とりあえずループを回して盤面のセルを1個ずつスキャンする処理が必要なので、 それをやりましょう。 Ruby のコー…

vm2gol v2 製作メモ(28) リファクタリング / ダンプ表示の改良

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る リファクタリングします! 参照の解決処理をメソッド抽出 前回雑にコピペで追加しまくった fn_arg_pos = fn_arg_names.index(args[1]) + 2 "[bp+#{fn_arg_pos}]" この部分を抽出してメソッド化しよ…

vm2gol v2 製作メモ(27) ライフゲームの実装開始 / 組み込みの掛け算

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る なんだかライフゲーム詐欺みたいになってきましたが 今度こそほんとにライフゲームに突入できる……はず……。 というか突入しましょう! やるぞぉ……! はい、やります。 vgtコードです。 最終的にはグ…

vm2gol v2 製作メモ(26) 配列とVRAM その2 / ダンプ表示の改良

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る さて、前回やっつけで VRAM を用意しましたが、 今回は VRAM の仕様というか使い方みたいなものを簡単に書いておきます。 あわせて、前回お手軽に inspect で済ませていたダンプ表示を いい感じに…

vm2gol v2 製作メモ(25) 配列とVRAM / set_vram, get_vram

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 関数まわりと条件分岐とかが一応できて、入れ子の式も回避方法が決まり…… たぶんまだ足りないところがボロボロ出てくると思いますが、 ライフゲームを作りながら直していきましょう。 まずはライフ…

vm2gol v2 製作メモ(24) 入れ子の式

目次ページに戻る / 前 / 次 前回からの差分 … 今回は差分なし 関数まわりが整備でき、条件分岐ができ、反復処理もできるようになりました。 プログラムを作るのに必要な道具が揃ってきたのでもうそろそろ ライフゲームが書けてしまうのでは!? ……と言いた…

vm2gol v2 製作メモ(23) 組み込みの eq / while文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 準備が整ったので while やります! ["var", "a"] , ["set", "a", 0] , ["while", ["eq", 0, 0] , ["set", "a", ["+", "a", 1]] ] こんな感じでやりたいのですが!! ["eq", 0, 0] の部分の eq が…

vm2gol v2 製作メモ(22) 組み込みの足し算

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 分岐ができたので次はループをやりたいですね。 簡単なところで、数を1ずつ増やしていくカウンタとか。 ["var", "a"] , ["set", "a", 0] , ["while" , ["eq", 0, 0] // 条件: 必ず真になるようにし…

vm2gol v2 製作メモ(21) case文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 関数まわりが整備できたので、次は条件分岐(if文)やりましょうか。 えーと、こんな感じで…… ["if" , ["eq", 33, 31] , [ ["set_reg_a", 11] ] , [ ["set_reg_a", 22] ] ] こんな感じで作っていま…

vm2gol v2 製作メモ(20) 値を返却してローカル変数に代入 / return, call_set文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 関数呼び出しができて、 ローカル変数が使えるようになって、 引数も渡せるようになりました。 あと関数まわりは返り値をどうにかすれば一通り必要なものが揃います。 今回は次の2つのステップに分…

vm2gol v2 製作メモ(19) 関数に引数を渡す

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 今回は関数の引数をやります。こんな感じで進めましょう。 引数を1個渡す 渡した引数をローカル変数に代入 引数を2個渡してローカル変数に代入 引数を1個渡す これを動かします。 // 19_func_arg.v…

vm2gol v2 製作メモ(18) ローカル変数の宣言と代入 / var, set文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る どうすれば「本棚の左端から36番目の本を取って」と言う代わりに「広辞苑を取って」と言えるようになるでしょうか? コンピュータが名前とモノの対応表を持てばよいのです。 『コーディングを支え…

vm2gol v2 製作メモ(17) main から別の関数を呼ぶ / call文

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 空の main 関数の実行の次は、 main から 別の関数の呼び出しをやってみましょう。 簡単そうですが、これも一歩ずつということで 2段階に分けます。 関数定義を並べるだけ(main からの呼び出しは…