プログラミング
パーサコンビネータライブラリ loquat の v2 をとりあえず prerelease しました. フルスクラッチで式年遷宮したのでリポジトリも以前のものとは別になっています. github.com そもそも何をするライブラリなのかみたいな説明は上のリポジトリを見てください. …
こいつ LT ばっかりやってんな. Kyoto.js 11 というイベントで JavaScript のジェネレータについて LT をしました. JS 界隈の色々な話が聞けてよかった(小学生並みの感想). kyotojs.connpass.com 補足説明など スライド中では .next() メソッドをいかにも単…
例えば JavaScript で let x = (() => { let y = foo; return bar(y); })(); を let y = foo; let x = bar(y); と書き換えても良かったり *1, Perl で my $x = do { my $y = foo; bar($y); }; を my $y = foo; my $x = bar($y); と書き換えても良かったりす…
というタイトル詐欺で, 遅延評価でパーサコンビネータを高速化した話をしました. 健康になるのはプログラムです. パーサコンビネータを題材にしていますが, 要するに今回の話は, 遅延評価といえば無限リストなどが挙げられがちだが, 単に効率化のためにも使…
余談 どうでもいいようなことを投稿するための「小ネタ」カテゴリを作った. 誰もお前に聞いてないとか, そういう感想歓迎です. 本編 node foobar.js の代わりに, node --prof foobar.js みたいにすると isolate-0x***-v8.log みたいなファイルができる. これ…
一年継続したといった記事を見て, そういえば二年継続していたら何か書こうかなと思っていたのを思い出したので, 書きます. github.com 2014年の10月2日からなので二年とちょっとですね. 良かったこと 当然ですがアウトプットの量が増えているはずです. 面倒…
ES6 以降で書きなおしたい 読みやすさ モジュールごとに package 分けたい 各モジュール (ファイル) が肥大化しすぎて扱いにくい テストのファイル分割したい 関数ごとにファイルわけないとひどい (現状) エラーメッセージの localization 機能追加 正規表現…
方法1: SVG の foreignObject を使って HTML を埋め込む 参考: Drawing DOM objects into a canvas - Web APIs | MDN SVG の <foreignObject> という要素内に描画したい HTML 要素を埋め込み, それを ctx.drawImage() とかで canvas に描画するという流れ. 利点は, 描画する</foreignobject>…
こちらから遊べます → dotris 昔Flash で作ったもの (なんと最初のバージョンは 5 年も前らしい) を JS / HTML Canvas に移植しました. 最新の Firefox か Chrome ならとりあえず動くと思います. 2016年7月31日追記: たぶん flag 変更しなくても大丈夫になり…
未だに Flash 脳の私は canvas の操作をする時に「BitmapData のあのメソッドと同じことをしたい」と考えるのですが, canvas の API はパッと見では必要最低限以下なんじゃないかというくらいの機能しか提供していないので, どうしたら実現できるのかすぐに…
ラムダ計算から Grass へのコンパイラ作ったったwWWwwwwWWww - Object.create(null) の続きです. 経緯 ラムダ計算から Grass への変換ができたのは良かったものの, 生成コードはそのままでは無駄が多く, 例えば Brainfuck インタプリタの場合, 生成さ…
github.com いつものように JavaScript で書いたので, npm でインストールできます. npm i -g @susisu/grasspiler 例えば, (* fixed-point operator *) let fix = fun f -> (fun x -> f (fun y -> x x y)) (fun x -> f (fun y -> x x y)) (* infinite loop *…
connpass.com タイトルの通りの LT をしました. 先日の Grass インタプリタはその伏線だったというわけですね. 当初は真面目路線で作ってたのですが, LT の制限時間 (5分) で簡潔にまとめるのが難しくて, 結局こんな感じになってしまいました. まだまだ修行…
継続渡しスタイル (CPS: Continuation-assing style) 例えば以下は引数として与えられた数に 1 を加えるだけの関数と, それを呼び出すプログラム. function succ(x) { return x + 1; } console.log(succ(2)); // -> 3 CPS では関数がその継続 (callback) を…
いつものように JavaScript で書きました. github.com npm があればnpm install -g @susisu/grass-js でインストールできて, grass /path/to/progfile とかで遊べます. Grass とは Grass the grass-planting programming language の通り, 草を生やす言語で…
Bogosort ボゴソート - Wikipedia 配列の要素をランダムに並び替えて, 運良くソートできていればソート完了というソートアルゴリズム. 配列のサイズが で, 要素がすべて異なるとしたとき, 平均計算時間は . 要素の交換回数の期待値は となる *1. Bozosort Bo…
こういうのを作りました. Lazy Jiro - 神域プログラミング言語 毎年思ってるけどこれ別に嘘じゃないし馬鹿なの私だよね— すしす (@susisu2413) March 31, 2016 なんでこうなったのか 当初やろうと思っていたものが, 急がずに時間をかけてやればそこそこ面白…
LT をしました (定期). connpass.com 肝心の成果物は https://github.com/susisu/est にあって, npm install -g @susisu/est でインストールできますので, 使いたい方がいたらどうぞ.
ライブラリ側の実装は ES2015 の構文を使わずに ES5 互換のままできることに気がついたので, ちゃっちゃーとやりました. github.com 今までは, var lq = require("loquat"); // 愚直に >>= (bind) と >> (then) を使う // do 構文なんてなかった var parser …
私は ls -la のエイリアスとして la を使っているのですが, 万が一 al とミスタイプしても問題ないように, アリスが歌ってくれるだけのコマンドを作りました. github.com インストール Node.js (最新版なら確実) と npm のある環境で npm install -g @susisu…
github.com $ npm install -g https://github.com/susisu/kinmosa-gen.git $ kinmosa きんいろモザイク きんいろモザイクは 900 回に 1 回くらい出ます.
この記事は OUCC Advent Calendar 2015 の 13 日目の記事です. 昨日は @yuntan_t 氏による 量子力学 matplotlibで図を描く,保存する,アニメーションさせる でした. さて, 今年 (というか去年の後半から) は何かと言語実装に縁があり, まとめると大体以下の…
なんですぐ死んでしまうん. 以下の 2 つをご覧ください. 前者 (A) は毎回同じオブジェクトを親にして Object.create() でオブジェクトを作成, 後者 (B) は違うオブジェクトを親にしています. console.time("A"); var parent = {}; var dummy; for (var i = 0…
Object.create() 大好き人間の私としては, 京都銀行のように長〜〜〜い prototype chain を日常的に作りたくなるわけですが, そんなことをしていたらまた死んでしまいました. 以下は具体的な例で, 浅いケース (shallow) では, ひとつの同じオブジェクトを親…
していたら夜になっていた. Self とは プロトタイプベースのオブジェクト指向の元祖にして JavaScript の先祖のひとつ. Self - Wikipedia インストール 当方 OS X Mavericks (10.9.5) です. Self 言語のサイト http://www.selflanguage.org から OS X 用のデ…
タイトルで完結している. GNU Smalltalk Reference や GNU Smalltalk - Smalltalk によると, OS X に (Homebrew で? そうじゃなくても?) インストールする場合, 浮動小数演算周りがバグったりする (たぶんこれ osx - floating point raises divide by zero e…
github.com Emscriptenを使って変換したもの? は見つかったのですが, 生の JavaScript で書かれたものが見つからなかったので書きました. たぶん上手く動いてるんじゃないかしら. Lazy K ってなんですか 詳しくは Lazy K - Wikipedia とか The Lazy K Progra…
ゆゆ式一挙放送の裏番組みたいなノリでやっていたLT会でのスライドはこれ. 補足情報を少し call/cc の仕組みについては色々ぐぐったりしましたが, 個人的には Scheme:使いたい人のための継続入門 が分かりやすかったです. あと, スライドの内容は簡略化した…
前回の記事の続きです. 変更点 辞書を ipadic から mecab-ipadic-NEologd に変更した. github.com 叫び声のようなものなどノイズが多かったので, 適当に弾くようにした. ついでに重複したものが多すぎて結果が見辛かったので, まとめて出力するようにした. …
Wikipedia 日本語版の記事から見つかった偶然 5・7・5・7・7 になっている文章をツイートする, 偶然短歌botというものがあります. twitter.com inaniwa3.hatenablog.com これと同じように, Wikipedia 日本語版の記事から偶然できている回文を見つけてみたと…