Object.create(null)

TypeError: Cannot convert object to primitive value

プログラミング

スクリーンショット撮影のために Puppeteer を操る

先日開催された Kyoto.js 16 で, Puppeteer を使ってスクリーンショットを撮影するためのフレームワーク / ツールを作ったことについて発表しました. いつもありがとうございます. kyotojs.connpass.com スライドはこちら. speakerdeck.com 成果物はこれ. sc…

パターンマッチの構文が前置か後置か覚えられない人がやりがちなこと

突然思い出して随分前のネタを引っ張り出してきました. OCaml と Scala のパターンマッチ構文は共に match というキーワードを使いますが, 前置 / 後置が異なるため, 交互に書いていると混乱して結構な頻度で間違えます. let y = match x with | Some n -> n…

subtype 多相, never, union を有効活用していこうな

まずは MonadPlus ばんじゃーいとこういう感じに mzero と mplus を定義してみる. mzero が関数になっているのは TypeScript ではこうしないと (関数以外の値を) パラメータ多相にできないため. ちなみに Parser<A> の A は結果の値の型で, Parser はこれについ</a>…

パーサコンビネータライブラリを更新した (2 年ぶり 2 回目)

2 年に一回更新することでおなじみの (?) JS 製パーサコンビネータライブラリ loquat の v3 をリリースしました. github.com 変更点の詳細はここには書かないのでリポジトリを見てください. どうせ誰も使っていないでしょうし... 以下は雑な話題です. TypeSc…

Node.js のパッケージ情報をいい感じに表示するやつを作った

ppp という, Node.js のパッケージ情報を表示するコマンドラインツールを作ったのでそのご紹介です. github.com それ npm view で良いじゃん, とか, 前も似たようなの作っていなかった? などと思った方もおられると思いますが, 新しく作ったのにはちゃんと理…

コマンドの出力を HTML に変換して貼り付ける

みなさんも生きていればコマンドの出力をブログに貼り付けたいということがあるでしょう. というわけでコマンド出力をなんとか HTML にして貼り付ける方法のご紹介です. TL; DR: script -q /dev/null <command> | ansi2html -i | pbcopy まず HTML は基本的には以下の</command>…

【下書き】 ドラッグ&ドロップ UI をテストしたい時

気が向いたらそのうちサンプルコードとか付けてちゃんと書きます. 向かなければそのままです. ドラッグ&ドロップには色々な要素が絡んでくる バグが入り込みやすい どうテストしたら良いか? / どうバグを再現したら良いか? 「なんかある操作をしたらバグった…

「分割」できる疑似乱数生成器

この記事ははてなエンジニア Advent Calendar 2018 の 6 日目の記事です. こんにちは, id:susisu です. Mackerel のアプリケーションエンジニアをしています. 最近は新しいカスタムダッシュボード機能を開発したりしていました. mackerel.io この記事ではタ…

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 を書いていても役に…

JavaScript のオブジェクトのキーや要素の列挙順は保証されているんですか

注意 Object のメソッドの仕様に読み飛ばしがあって完全に間違った情報になっています. 書き直すのも面倒なのでこの記事は無視してこのあたりを見てください. qiita.com 以下ゴミ A. 場合によります オブジェクトのキーまたは要素の列挙といえば次の 2 つく…

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…