プログラミング

JavaScript のパーサコンビネータに TypeScript で型を付けた

こんにちは, 口の中パッサパサです. さてパッサパサといえばパーサコンビネータの話をしましょう. 以前作った JavaScript 用パーサコンビネータライブラリ の TypeScript 向けインターフェースをつくりました. github.com こんな感じで使えます. どーしてく…

キーワードの組をハイライトする Atom 拡張を作りました

こんにちは, 自分のことをピカチュウだと思いこんでいる一般人です. 作りました. 標準の bracket-matcher のキーワード版ですね. atom.io こんな感じにカーソル位置のキーワード (struct) と対応するキーワード (end) がハイライトされるです. ハイライト以…

気がつけば Scala を書いていたので読んだものを列挙するよ

私が読んだものを読んだ順に列挙しているだけです. たぶん何の役にも立ちません. Learn You a Haskell for Great Good! Learn You a Haskell for Great Good! Haskell の入門書. いや冗談ではなく. 代数的データ型とかモナドとか, Scala を書いていても役に…

Mackerel で Cookie Clicker を監視してみた

ステマ記事です. みなさん Cookie Clicker を覚えていますか これです. 昔一瞬流行ったなあ, という感想が出てくることを予想してますが (ついこの前言われた), まだまだ続けている人はいて, 私もその一人です. 過去の記事: Mackerel とは はてなが開発して…

ソースコードのコメント内でも Markdown のテーブルを編集したいという気持ちだけは誰にも負けません

こんにちは, シーフードです. Atom パッケージ markdown-table-editor の v1.1.0 をリリースしました. atom.io 今回の目玉はテーブルの左側のマージンの文字をカスタマイズできるようになったことです. これで何が嬉しいかというと, 例えばパッケージの設定…

Scala の for ... yield の話

みなさんメリークリスマしておめでとうございます. 2019年もよろしくお願いします. 以下は気まぐれに Scala を書いていたら for ... yield と Haskell の do の微妙な違いでつらみが出てきたときのメモです. Scala 素人もいいとこなのでもっと良い書き方があ…

どこでも Markdown Table Editor

まずは Atom 用のパッケージのアップデートのご報告です. atom.io ファイル内の全ての表をフォーマット, 保存時にフォーマットなどの機能が増えました. こちらの映像は Take 4 です. 閑話休題. 上のパッケージのせいで, Atom 以外のエディタや, たとえばブロ…

ISUCON7 予選通過反省会

ISUCON7 の予選に @amaya382, @spring_raining とチーム名「チーム名を考えるのが苦手すぎる」で参加しました. 私自身は初参加です. 最終スコア 89,047 で学生枠 2 (3) 位通過でした. 私がやったこと ほぼ完全にアプリケーション (Node.js) だけを担当しまし…

差分検出アルゴリズム三種盛り

こんばんは. 気がつけばもうずいぶんと涼しくなってきました. 勢い余って凍ってしまったりせぬよう, くれぐれも普段の言動にはお気をつけください. はじめに さて, 我々人類にはどうしても二つの文字列 (あるいは行ごとに区切られたテキスト) 間の差分を求め…

Atom パッケージ開発のすゝめ

Kyoto.js 13 で飛び入り LT チャンスがあったのでやりました. Atom で VJ をするパッケージの発表があったのでそれに乗っかった形です. kyoto.js.org kyotojs.connpass.com これは当日 Atom で Markdown を書いてそのまま発表したものをスライドとして体裁を…

近況

ご飯炊けるまでに最近やってることとか書きます. System Fω の実装 js-sandbox/system-f-omega at master · susisu/js-sandbox · GitHub 前回やった System F の続き. 簡単に説明すると System F に加えて型レベルの関数 (type operator とか type construct…

型無しラムダ計算での不動点オペレータの導出

公式は覚えるものではなく, 必要に応じて導出するものだよ (?) 不動点オペレータ 不動点オペレータ (大抵 fix という名前, コンビネータ計算の文脈では Y とも) は Haskell では以下のように定義される関数である. fix f = f (fix f) つまり, fix f は関数 f…

JavaScript 処理分岐どう書く問題

JavaScript で (バリアント的な) 複数の可能性がある値について処理を分岐するときに, どのように書くのが良いかという話. ここでは具体例として簡単な数式の計算プログラムを考えます. 数式を表すクラスは以下の通り. // literal class Lit { constructor(v…

5分で伝えたかった Curry–Howard 同型対応

伝えたかった LT をしました. connpass.com やたら枚数が多い割に密度が高くなってしまっている言い訳をさせてもらうと, なかなか話がまとまらなくて, 結局直前に急いで作った結果, 時間配分をまったく考えていない感じになってしまいました. 当日 System F …

npm script の実行順のメモ

2019-02-12 追記 この情報は古くなっている / 間違っている可能性があるので参照しないでください. 最新の情報は https://docs.npmjs.com/misc/scripts とかからどうぞ. npm@4.5 時点. 適当に書いていると (主に prepublish/prepare/prepublishOnly あたりで…

Unicode の East Asian Width 特性値を取得したりするライブラリを作った

また作った報告になってしまい恐縮ですが, 作りましたにゃん. github.com East Asian Width (EAW) とは 参考: UAX #11: East Asian Width 東アジアの文字幅 - Wikipedia 元は Unicode の文字を旧来の文字セット (Shift-JIS や EUC-JP など) にマップする際に…

Atom 1.17 beta の Dock のメモ

詳しくはこちらのブログ記事を参考にしてください (1.16 のリリース記事ですが, 下の方に 1.17 beta についても書いてあります). blog.atom.io 1.16 以前のイメージ Workspace Left Panel(Tree View) Pane 1 Text Editor 1 Text Editor 2 Pane 2 Settings Te…

Atom のカーソル上下移動を改良するパッケージを作った

相変わらず Atom の環境を整備し続けています. というわけでまたパッケージを作りました. atom.io カーソルを上下に動かしたとき, デフォルトではこんな感じに全角文字などが間に入るとカーソルの水平位置がぐちゃぐちゃと動いてしまいます (水平位置を文字…

パーサコンビネータを高速化した

例のアレです. 式年遷宮したときの話はこちら. github.com 最初は軽い気持ちで細々とした最適化をしていたんです. switch を if に変えるとかいう小手先のアレで 10 % も高速化してウケてる— ボノボ (@susisu2413) 2017年3月13日 インライン化も同時にしてた…

Markdown のテーブルをいい感じに編集する Atom パッケージを作った

相変わらず既存のものが……だったので作りました. 以前 SyaroNote で Ace 向けに作ったものをベースに色々改良しています. atom.io 動作はこんな感じです. 他にも行の挿入や, 左・右・中央揃えの切り替えなどが簡単にできます. Markdown のテーブルの編集にお…

Sublime Text から Atom へ乗り換えチャレンジ

なぜ JavaScript を書いているときにやたらと React のスニペットが表示されるようになって*1, これが大変迷惑だったためです. destroy を補完するために destroy と入力する必要があるのクソでしょ— susisu (@susisu2413) 2017年2月16日 pic.twitter.com/8…

ラムダ計算での代数的データのエンコード的な話

Grass で遊んでたらラムダ計算熱が復活してきたので. 以下は特に断りのない限り call-by-value の型無しラムダ計算です (謎の ML 風文法で書いてあるけど, まあわかると思うので適当に読んで下さい). Church encoding と Scott encoding 関数 (ラムダ抽象) …

Haskell 書いてる (た)

なぜ プログラミング言語は何が使えるのと聞かれたとき, 「JavaScript, ActionScript と, あと Haskell が少しわかります」みたいな答え方をしていたのですが, 最後に Haskell でまともに何かを書いたのが 2013 年頃で *1, 最近の開発フローとかをまったく理…

Haskell 開発環境構築 on macOS

stack が GHC やパッケージの管理をまとめて行ってくれるので, ふつうは stack だけインストールすれば良さそう. とはいえ本当にこれで良いのかよくわかっていないので, おすすめがあれば教えて下さい. stack https://docs.haskellstack.org/en/stable/insta…

Unicode と JavaScript の文字列について

パーサコンビネータ を作っていたとき, 最近流行りの (?) 絵文字が変数名として使えるような言語を作る場合に, 正しくコード中の扱うにはどうしたら良いかなどを考えていたら, Unicode と JavaScript の文字列に関する理解が得られたので, ここに共有します.…

2016年に作ったもの

一年は長いのか短いのか, その一年で作ったものは多いのか少ないのか, そんなことを考えながら (考えていない) 今年作ったものを振り返りドヤ顔するだけの記事. ( ゚д゚ )彡 est 統計計算用簡易スクリプト言語. github.com 実験データを集計するのに awk で計…

String.fromCodePoint が遅かった

発端 ある日, 私は文字列の先頭を切り出すために次のような関数を書いていました. https://github.com/susisu/loquat-core/blob/dcd37f885b5f5b1b0dfdc0e15680375a16239318/lib/utils.js#L97-L113 function unconsString(str, unicode) { if (unicode) { con…

Node.js でコンソールアプリを作る

この記事は OUCC Advent Calendar 2016 の 21 日目の記事です. www.adventar.org こんにちは, @susisu2413 です. みなさんは JavaScript でコンソールアプリを作りたくありませんか? 私は作りたいです. この記事では Node.js (+ NPM) を使って JavaScript で…

npm view をいい感じに整形してくれるやつを作った

ググってもいい感じのが無さそうだったので作りました (既にあったら教えてください). npm i -g npm-sum github.com なにこれ npm にはパッケージの情報を取得する npm view (あるいは show, info, v) というコマンドがありますが, これは全ての情報を含む巨…

tailRecM とパーサコンビネータ

TL; DR tailRecM は, Alternative あるいは MonadPlus でもあるパーサ (ParsecT) において, 再帰的なパーサの定義をする際にも有効. パーサコンビネータは便利 例として文字列リテラルのパーサを書いてみます. BNF で書くと (character はいい感じにやるとし…