Object.create(null)

TypeError: Cannot convert object to primitive value

ISUCON7 予選通過反省会

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

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

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

こんな等幅フォントが欲しい

プログラミング用 0 と O の区別がつきやすいとか 他言語対応 ASCII だけとかだと厳しい ギリシャ文字と種々の記号類は欲しい 日本語があるととても良い wide:narrow が 2:1 Source Han Code JP みたいに 3:2 とかじゃないということ EAW Ambiguous な文字が…

Cookie Clicker 4周年の記録

ちょうど始めてから 4 年だったので Cookie Clicker の話をしようとしたら 今週のお題「私のおじいちゃん、おばあちゃん」 というのが出てきて笑いました. 強いて言えばおばあちゃんの話をします. Cookie Clicker とは 知らない人がいるかもしれないので一応…

最近の markdown-table-editor アップデート情報

最近はベジエ曲線の交点を求めるなどの活動をしていたのですが, それは (画像の用意とかそのあたりで) まとめるのに時間がかかるのでまたの機会にするとして. 最近 Atom パッケージの markdown-table-editor をちょいちょい更新して機能を追加したので, その…

ソースコードをダブルクリックで全選択するやつ

コピペしやすくて便利. 右上に言語名を表示するやつ とくっつけてもいいけど, 多分別々に書いても動くことには動くはず. <script type="text/javascript"> window.addEventListener("load", function onLoad() { window.removeEventListener("load", onLoad); var codes = document.querySel…

ソースコードの右上に言語名を表示するやつ

こういう感じのスタイルシートを当てておいて, pre.code { position: relative; } pre.code[data-lang-label]::before { content: attr(data-lang-label); font-family: 'Helvetica Neue', 'Helvetica', 'Arial', 'Hiragino Kaku Gothic Pro', 'Meiryo', 'MS…

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 …

Atom 1.17 でもタブを消す

開いているファイルの管理は tree-view-panes で行っていて, そのためのタブは必要ない とはいえ Dock のタブまで消えてしまうと移動ができなくて困る というわけで以下のようにしている. .tab-bar { display: none; } atom-dock .tab-bar { display: flex; }

npm script の実行順のメモ

npm@4.5 時点. 適当に書いていると (主に prepublish/prepare/prepublishOnly あたりで) 落とし穴に嵌ることがありそうなので. npm install (引数なし) preinstall install postinstall prepublish prepare prepublish は npm@5 以降では 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…

4月

これは日記です. エイプリルフール 入社はさておき, 今年も一発ネタを作りました. gh-plankton 経緯はこういう感じです. GitHub のデフォルトのユーザーアイコン, 微生物かなにかに見えることがたまにある— 乳等を主原料とする食品 (@susisu2413) 2017年3月3…

株式会社はてなに入社しました

株式会社はてなに入社しました 株式会社はてなに入社しました - hitode909の日記

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

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

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

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

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

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

Wonderfl の思い出

Wonderfl のサービスが 3 月末で終了してしまうらしい. 知らない人のために説明すると Wonderfl は Flash のコードをその場で編集・コンパイルしてコードと一緒に公開できる Web サービス*1で, 私は Wonderfl にあるコードを見てプログラミングを学んだと言…

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 で…