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

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

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

tailRecM とパーサコンビネータ

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

パーサコンビネータライブラリを式年遷宮した

パーサコンビネータライブラリ loquat の v2 をとりあえず prerelease しました. フルスクラッチで式年遷宮したのでリポジトリも以前のものとは別になっています. github.com そもそも何をするライブラリなのかみたいな説明は上のリポジトリを見てください. …

ジェネレータを有効活用し隊

こいつ LT ばっかりやってんな. Kyoto.js 11 というイベントで JavaScript のジェネレータについて LT をしました. JS 界隈の色々な話が聞けてよかった(小学生並みの感想). kyotojs.connpass.com 補足説明など スライド中では .next() メソッドをいかにも単…

入れ子になった do 記法の展開

例えば 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.js で V8 のプロファイラを使う

余談 どうでもいいようなことを投稿するための「小ネタ」カテゴリを作った. 誰もお前に聞いてないとか, そういう感想歓迎です. 本編 node foobar.js の代わりに, node --prof foobar.js みたいにすると isolate-0x***-v8.log みたいなファイルができる. これ…

GitHub の緑化を二年続けて思ったこと

一年継続したといった記事を見て, そういえば二年継続していたら何か書こうかなと思っていたのを思い出したので, 書きます. github.com 2014年の10月2日からなので二年とちょっとですね. 良かったこと 当然ですがアウトプットの量が増えているはずです. 面倒…

Markdown モードでの TeX 数式メモ

はてなブログの Markdown モードは便利だけれど, TeX で数式を書こうとすると一部の記号がうまく表示されなかったりするので, とりあえずの対処法をメモしておきます. TL; DR 文と数式の行を分ける時は <div> を使う インラインでは適宜 [](raw:...) やエスケープ</div>…

辛辛魚パエリア風レシピ

材料 (2 食分) 辛辛魚 (辛辛MAXバージョン) の残りスープ 1 食分 米 1.5合 お好みで適当な具材 作り方 フライパンにスープ + 水 120 ml と具材を入れて火にかける ひと煮立ちしたら米を入れて蓋をする 弱火で 12 分くらい炊き上げる さらに火をとめて 12 分…

はてなインターンに参加したのでアレをアレします

題のとおり, 参加していました. hatenacorp.jp この記事はアレなので, 是非アレしてください. 自己紹介 参加までの流れ インターン中の生活 前半 後半 その他雑多なこと 通勤 食事 水分 Perl 語彙 おわりに インターン参加者の記事が集まるコーナー

優勝しました

昼です. 夜です.

2016年第二次辛辛魚戦線

こんにちは. 好きな言葉は情熱です. 辛辛魚とは 激辛魚介豚骨ラーメンです. あまり詳細に書くのは面倒なので, こちらを見てください www.sugakiya.co.jp 毎年冬に 寿がきや からカップ麺が発売され, ファンの間では大いに盛り上がります. この辺りを見ると様…

式年遷宮メモ

ES6 以降で書きなおしたい 読みやすさ モジュールごとに package 分けたい 各モジュール (ファイル) が肥大化しすぎて扱いにくい テストのファイル分割したい 関数ごとにファイルわけないとひどい (現状) エラーメッセージの localization 機能追加 正規表現…

DOM オブジェクトを canvas に描画する方法について

方法1: SVG の foreignObject を使って HTML を埋め込む 参考: Drawing DOM objects into a canvas - Web APIs | MDN SVG の <foreignObject> という要素内に描画したい HTML 要素を埋め込み, それを ctx.drawImage() とかで canvas に描画するという流れ. 利点は, 描画する</foreignobject>…

2016年8月19日

諸々 適切. 食事 魚介類!!!!!!!!!1 魚介類に見えた人は手を挙げてください.

2016年8月18日

水分 過剰だった. カプサイシン 過剰だった. 食事 魚類から進化したものみな魚類という思想のもとで, 魚介類です.

2016年8月17日

水分 不足しなかった. 食事 また魚介類じゃなかった. 深夜に食べると翌朝厳しい.

2016年8月16日

起床 5時に起きる必要はない. 水分 不足しがち. 食事 完全に, 魚介類ではなかった.

2016年8月15日

視力 何度か倒れてくる松葉杖状のものを幻視して虚無を避けたりしていた. 食事 ほぼ魚介類です.

任意サイズテトリスを JS / HTML Canvas に移植した

こちらから遊べます → dotris 昔Flash で作ったもの (なんと最初のバージョンは 5 年も前らしい) を JS / HTML Canvas に移植しました. 最新の Firefox か Chrome ならとりあえず動くと思います. 2016年7月31日追記: たぶん flag 変更しなくても大丈夫になり…

HTML canvas のビットマップ操作のメモ

未だに Flash 脳の私は canvas の操作をする時に「BitmapData のあのメソッドと同じことをしたい」と考えるのですが, canvas の API はパッと見では必要最低限以下なんじゃないかというくらいの機能しか提供していないので, どうしたら実現できるのかすぐに…

Grass 生成コードの乱択アルゴリズムによる最適化を試みる回

ラムダ計算から Grass へのコンパイラ作ったったwWWwwwwWWww - Object.create(null) の続きです. 経緯 ラムダ計算から Grass への変換ができたのは良かったものの, 生成コードはそのままでは無駄が多く, 例えば Brainfuck インタプリタの場合, 生成さ…

ラムダ計算から Grass へのコンパイラ作ったったwWWwwwwWWww

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分) で簡潔にまとめるのが難しくて, 結局こんな感じになってしまいました. まだまだ修行…

コールバック地獄から async/await に至るまでと, 非同期処理以外への応用

継続渡しスタイル (CPS: Continuation-assing style) 例えば以下は引数として与えられた数に 1 を加えるだけの関数と, それを呼び出すプログラム. function succ(x) { return x + 1; } console.log(succ(2)); // -> 3 CPS では関数がその継続 (callback) を…

チキンティッカを作ったら最高だった

辛辛魚の在庫が去年より二ヶ月ほど早く無くなってしまい, 世界は悲しみに包まれております. www.amazon.co.jp というわけで, これからどう QOL を維持していこうかと考えていたところ, 深夜急にタンドリーチキン (チキンティッカ) を無限に食べたくなったの…

Grass インタプリタを書いた

いつものように 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…

2016年エイプリルフール反省会

こういうのを作りました. Lazy Jiro - 神域プログラミング言語 毎年思ってるけどこれ別に嘘じゃないし馬鹿なの私だよね— すしす (@susisu2413) March 31, 2016 なんでこうなったのか 当初やろうと思っていたものが, 急がずに時間をかけてやればそこそこ面白…