Ruby

Parsletでかんたんな自作言語のパーサを書いた

Qiita に書きました。 qiita.com

Raccでかんたんな自作言語のパーサを書いた

Qiita に書きました。 qiita.com

素朴な自作言語Pricのコンパイラをセルフホストした

Qiita の方に書きました。 qiita.com

Reline.readmultilineの練習: mysqlコマンドのラッパーを作ってちょっといい感じにしてみる

Zenn に書きました。 zenn.dev

Reline.readmultiline ちょっと調べたメモ

Reline を使うと複数行編集ができるようなので、自分が使いそうな基本的な部分について調べてみました。 このリッチなのが標準で使えるの嬉しいですよね。ありがたや……。 RUBY_VERSION #=> 3.0.0 Reline::VERSION #=> 0.2.5 最初の雛形 ブロックは必須。 req…

テストメソッドを1つだけ実行するのが面倒だったので minitest_runner.rb というスクリプトを書いてみた

Zenn に書きました。 zenn.dev

RuboCopの出力をルールでグループ化 + 違反件数の多い順にソート

Zenn に移動しました。 zenn.dev

Ruby/Racc: パース時のスタックの動きをFlameGraphっぽくビジュアライズする

Qiita の方に書きました。 qiita.com

Ruby+PyCall.rbでLibreOffice Calcのオートメーションをやってみた(Ubuntu 18.04)

Qiita の方に書きました。 qiita.com

Ruby/Racc: パースに失敗した位置(行、桁)を得る

Qiita の方に書きました。 qiita.com

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

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

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 セルさえあれば基本的なデータ構造が作れてなんとかなるんだな、という感触が…

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

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

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

パーサ入門の定番である四則演算の電卓です。 こういうのは、単体でも何かしら実用的に使えることが分かっているとモチベーション的にいいんですよね。 どうしようかなと考えていたところ、昔から世界中でめちゃくちゃ実用されているプログラムがあったこと…

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

バージョンなど Docker の用意 anyenv, rbenv, pyenv のインストール Ruby 2.7.1 のインストール Python 3.7.7 のインストール Jupyter Notebook のインストール IRuby のインストール ライブラリの追加 Python のライブラリを追加したい場合 Ruby のライブ…

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

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

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

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

kairo-gokko (10-1) Ruby/SDLを使ってDXOpalをエミュレートする(自分が必要な部分だけ適当に)

目次ページに戻る / 前 / 次 DXOpal はブラウザで実行できるため、SDL などのネイティブなライブラリが不要で、他の人に見てもらいやすいところが魅力的です。 しかし、実際開発してみるとブラウザで開いてから動き出すまでにそこそこ時間がかかったり、 デ…

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

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

RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話

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

Plumo: pure Ruby + WEBrick + Comet + Canvas で手軽にお絵描き

自分が使うのに必要なものを最低限雑に実装してパッと出した、という感じのものです。API 固まってないです。 sonota88/plumo https://github.com/sonota88/plumo コンセプト的なもの (動きのある)2Dグラフィックを手軽にやりたくなる時がある 何か思いつ…

もっとお手軽な機械可読テキストテーブルフォーマット

前回の Mrtable の紹介エントリ を書いてたときにもっとお手軽なものを思いつき、「あれっ、桁を揃えるだけならひょっとしてこんなので良かった?」と思ってしまったのでメモ。 こんなの: [ "c1" , "c2" , "c3" , "c4" ] [ 1 , "a" , "" , null ] [ " " , "n…

Mrtable: 機械可読なテキストテーブルフォーマット

概要 機械可読でプレーンテキストなテーブルのフォーマット mr = machine readable machine readable かつ human readable(というのが欲しくて考えました) 簡単な説明 ベースは GFM(github flavored markdown)のテーブル 各セルの内容は JSON の文字列と…

Sinatra + WEBrick + Comet で簡単なチャット

サンプルチャット 試しにということで最低限の骨組みだけのものを書いてみました。チャット初めて書きました。Thread::Queue も初めて使いました。 sonota88/sinatra-webrick-samplechat https://github.com/sonota88/sinatra-webrick-samplechat 現時点( …

(Ruby) PTY.spawn("bash -i")でコマンド実行してプロンプトをexpectしつつ途中の出力も随時表示する

expectで素朴にプロンプトを待つだけだとコマンドの実行が完了するまで途中の出力が表示できなくていまいちだったのであれこれ試して下記のようにしてみた。 プロンプトのパターンに改行が含まれる場合はもうちょい工夫(途中の出力をバッファリングしておく…

WEBrick::HTTPServer + 標準ライブラリのLogger + ローテーション

「WEBrick」「Logger」「標準ライブラリ」「ローテーション/ローテート」とかのワードでググってもそれっぽいのがサッと出てこなかったのでメモ。 第 2 引数に 'daily' などの文字列を指定すると、 期間を基準にしてログをローテーションしてくれます。 (略…

Rubyで素朴なSA-IS(suffix array induced sorting)を書いてみた

FM-indexと同様に、ほぼ最適化をしていない素朴な実装を作ってみました。元の論文の実装は空間効率まで考慮して書かれていてすごい! ……のですが、まずはそれ以外の部分の仕組みを理解したかったので、以下のコードではそこらへんも無視しています。 コード …

Rubyで素朴なFM-indexを書いてみた

BWT、検索処理の最適化・高速化は行なっていません(SA-IS、ウェーブレット行列などは使っていません)。 BWT から検索まで全体の流れが見渡せる最小限の実装にしました。 せっかくなので Ruby に馴染みのない方が見ても読みやすいと思われる書き方にしてい…