vm2gol v2 (46) リファクタリング(主にコード生成器)

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る コード生成器で気になっていた部分を修正しました。 codegen_stmts() まわりの整理 修正前の状況を見てみましょう。 呼び出しの関係が次のようになっています。 呼び出す側 => 呼び出される側 code…

Pythonでシンプルな自作言語のコンパイラを書いた

移植一覧に戻る Python で書いてみました。やっつけなので汚いです。Python よく知らないけどライフゲームが動いたのでヨシ、という程度の雑なものです。 github.com 移植元 github.com <自作言語処理系(Ruby版)の説明用テンプレ> 自分がコンパイラ実装…

vm2gol v2 (45) リファクタリング(主にVM)

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 今回は(主に VM の)リファクタリングです。 テストが用意できたので、安心してサクサクと進められます。 Rubocop 関連 Rubocop の設定が古くなってると言われたので設定を修正して、新たに指摘さ…

vm2gol v2 (44) テストの追加

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 残りのテストをまとめて追加しました。 アセンブラ・コード生成器・パーサについては ひとまずライフゲームのコードを与えて出力が一致するか検証するようにしました。 これで、パース〜アセンブル…

きしださんのかわいいリレーショナルデータベースをRubyで写経した

nowokay.hatenablog.com きしださんのかわいいリレーショナルデータベースの最初のバージョンを写経してみました。 この記事、もう8年前なんですね。ついこないだ読んだような気がしていましたが……。 簡単なものだったら自作できないかなと以前から思ってい…

素朴な自作言語のコンパイラをTypeScript(Deno)に移植した

移植一覧に戻る TypeScript 入門というか、とりあえず何か書いて慣れようと思って書いてみました。やっつけなので汚いです。TypeScript まだよく分からないけどなんか動いたのでヨシ、というレベルのものです。 github.com 移植元 memo88.hatenablog.com <…

red-arrow: Arrow::Tableのデータを組み立てる

とりあえず最低限の流れが知りたかったので、int32 だけの簡単なデータでやってみました。 require "arrow" # -------------------------------- # 列1 のデータを用意 builder = Arrow::Int32ArrayBuilder.new builder.append(1) builder.append(2) array1 …

consごっこ (2)

前 consのデータをメモリに置くとどうなるのか、というのを軽く試してみるつもりだったのが、 もうちょっと育ってしまいました。 ※ C言語云々と言っているところはかなりうろ覚えで適当です。だいぶ忘れてます……。 ※ また、既存のよく知られた何かに準拠して…

consごっこ

次 表面だけ見ると Ruby の Array、 Hash っぽいけど中身は cons セル、というものを書いてみました。 試してみたくなって、なんとなく書いてみた、という感じのものです。 cons セルさえあれば基本的なデータ構造が作れてなんとかなるんだな、という感触が…

kairo-gokko (38-2) タイムチャートの改善 / FPSの表示

目次ページに戻る タイムチャートの表示によるパフォーマンス劣化をなんとかします。 FPSを表示 まずは定石通りに計測から始めようと思いますが、 ここはお手軽に FPS を見て確認するだけで済ませます。 今回はそれで十分そうなので。 FPS は Window.real_fp…

kairo-gokko (38-1) タイムチャートを表示

目次ページに戻る / 前 / 次 タイムチャート機能を追加しました。 おおざっぱなアイデアとしてはこうです。 各時点での監視対象箇所の状態を記録する 記録したデータを使ってチャートを描画 これだけといえばこれだけなので、そんなに難しくなさそうだと思っ…

kairo-gokko (37) リレーの効果音をノイズっぽい音に変更

目次ページに戻る / 前 / 次 リレーの状態が変わったときの効果音は (25) 状態変更の伝播の過程を見たい のときにやっつけで作ったものを使っていましたが、もうちょっとリレーっぽい音にしたいなーと思っていました。 メカニカルな感じというか、なんかこう…

正規表現エンジン(ロブ・パイクのバックトラック実装)をRubyで写経した

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

Deno: 標準入力を読んで行ごとに処理

簡易版 お手軽に済ませたいならこれでよいっぽい。 参考: std@0.61.0 | Deno // my_simple_cat.ts import { readLines } from "https://deno.land/std/io/mod.ts"; for await (let line of readLines(Deno.stdin)) { console.log(line); } $ cat my_simple_c…

Kotlin: 標準入力を読んで行ごとに処理

簡易版 お手軽に済ませたいならこれでよいっぽい。 readLine - Kotlin Programming Language // Cat1.kts while (true) { val line : String? = readLine() if (line == null) { break } println(line) } $ cat Cat1.kts | kotlin Cat1.kts | cat -A while (…

四則演算と剰余のみのexprコマンドをKotlinで作ってみた

Kotlin に入門しています。 まずは何か適当なものを作りながら慣れようということで、四則演算と剰余のみのexprコマンドをRubyで作ってみた を移植してみました。手書きの再帰下降パーサです。 # (100 - 2 - 1) / (1 + 2) % 5 * 3 # => 97 / 3 % 5 * 3 # => …

四則演算と剰余のみのexprコマンドをRubyで作ってみた

Zenn に引っ越しました。 zenn.dev

hive.server2.enable.doAs がよく分からなかったので Apache Bigtop で調べてみた

hive.server2.enable.doAs の設定によって何がどう変わるかよく分からなかったので Apache Bigtop を使って調べてみました。 hive.server2.enable.doAs だと長くて煩雑なので以下では適宜 doAs と略しています。 まとめ バージョンなど 一応公式の説明 調査1…

vm2gol v2 (43) フォーマットなどいろいろ修正

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る 前回 test ディレクトリを作ったので test_vgparser.rb をそちらに移動 各ステップで使っていたソースファイルを steps ディレクトリに移動 最初から細かくディレクトリを分けるのはあまり好みでは…

vm2gol v2 (42) ライフゲームのテスト

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る これまでずっと、テスト書かなきゃなーとは思っていたのですが、書かないままズルズルとここまで来てしまいました。 いいかげん書かないと。 これまで(第38〜40回あたり)はライフゲームを実行し…

Emacs: (SQLなどの)予約語をすべて大文字にする

ひさしぶりに Emacs Lisp を書きました。ググりながら10分くらいで書いた適当なもの。 たとえば、全部小文字で書いたSQLを後から予約語だけ大文字にしたい、みたいなときに使う想定です。 フェイスが font-lock-keyword-face になっている箇所を大文字にして…

Ubuntu 18.04にJupyter NotebookとIRubyをインストール(pyenv, rbenv を使用)

(2022-05-07 追記) Ubuntu 22.04 版を書きました memo88.hatenablog.com バージョンなど Docker の用意 anyenv, rbenv, pyenv のインストール Ruby 2.7.1 のインストール Python 3.7.7 のインストール Jupyter Notebook のインストール IRuby のインストー…

失敗したタスクの情報をdigdagコマンドとシェルスクリプトで取得する

失敗した attempt の ID まで分かっていて、その attempt の失敗したタスクについて ID やタスク名を知りたい。 find_failed_task.sh #!/bin/bash buf="" found="false" count= # 標準入力から読む while IFS= read -r line; do if [ "$line" = "" ]; then i…

DockerでDigdagサーバを動かす(クライアントの簡単な動作確認用、PostgreSQL不使用)

digdag コマンドやクライアントライブラリなどの動作確認のため、 手軽にリセットしたり捨てられたりする Digdag サーバがあると便利かも? と思って雑に用意してみた。 Dockerfile FROM ubuntu:18.04 RUN apt update \ && apt install -y --no-install-reco…

Hive テスト 自動化 メモ

以下では具体的な実装は出てきません。概要だけの雑なメモです。 Hive のクエリのテスト とにかく時間がかかる 待ってる間に何をしてたか忘れる ミスると時間がどんどん溶ける 最初に不要データを削除するステップが抜けてやりなおし、とか めんどくさい 無…

二次元の表から構造化データに変換する

上の図のようにスプレッドシートで入力して、それを読んで 次のようにテキストファイルに出力したい。 *1 {"a":111,"b":{"d":121,"e":122},"c":{"f":{"h":131,"i":132},"g":141}} {"a":211,"b":{"d":221,"e":222},"c":{"f":{"h":231,"i":232},"g":241}} スプ…

Rubyで素朴な自作言語のコンパイラを作った

目次ページに戻る / 前 / 次 前回からの差分をまとめて見る Qiita に引っ越しました。 qiita.com

リレー式論理回路シミュレータを自作して1bit CPUまで動かした

Qiita に引っ越しました。 qiita.com kairo-gokko 製作メモ

リレー式論理回路シミュレータ kairo-gokko の製作過程

リレー式論理回路シミュレータを自作して1bit CPUまで動かした で書いた kairo-gokko の製作過程のメモ。 一度プロトタイプを作ってからリプレイしている感じなので、実際は2周目です。 数字は開発のステップ番号で、リポジトリの stepXX というタグの番号に…

kairo-gokko (36) 落ち穂拾いというか

目次ページに戻る / 前 / 次 1bit CPU まで作るという話に関していえば前回で一区切りなんですが、書いておかないといけないことがあるので、それを書いて今回でいったん最終回とします。 まず、回路を少し整理します。 通電 1 の回で「プラス極とマイナス極…