Twitter では告知しましたが、ちょうど 1 ヶ月前の 7 月 1 日に、YouTube チャンネル「ニコニコプログラミング」を開設しました。まさかの YouTuber デビューです。
Description のところにも書いているように
プログラミングの楽しさを伝えるために、プログラミングにまつわる様々なことをしています。短い時間でプログラミングの実況をしながらゲームを作り上げる実況プログラミングシリーズをメインに展開していきます。
というチャンネルです。
本日 TechFeed Conference 2022 で発表した「JavaScript による動的 WebAssembly 生成」についての詳解記事です。
JavaScript を動的に生成することで高速化を図るテクニックについては以前「JavaScript における VM の高速化手法」でご紹介しましたが、その記事の最後で少しだけ言及した「WebAssembly の動的生成」についてこの記事で解説します。
Java の Virtual Machine よりも Brainfuck の方が知名度が高いというアンケート結果が出ましたので、この記事では Brainfuck(以下 BF と略します)をターゲットとして解説します。
先日、このようなツイートを書いたところ、かなりの反響がありました。
JavaScript の正規表現の脆弱性の例でいうと、例えば /\s+$/ は脆弱性があると言える
— Takuo Kihira (@tkihira) February 17, 2022
console.time();
/\s+$/.test(" ".repeat(65536) + "a");
console.timeEnd();
結構時間がかかるのがわかる。でも /\s+$/ を見て「これは危険だな」と理解出来る人はそんなにいない。JavaScript に限らないけれど。
これは一般に ReDoS (Regular expression Denial of Service) と呼ばれる脆弱性です。正確に理解するのが難しい脆弱性なので、少し解説してみたいと思います。
先日、都会で撮る 星の軌跡の撮影術 〜はじめて撮る人から上級者まで比較明合成による撮影の完全ガイドという本を出版しました。
この本は、比較明合成という画像処理によって都会の星の軌跡の撮り方を紹介している本ですが、それを WebAssembly を用いてブラウザ内で実現する Web アプリ を作りました(そしてその使い方を本の中で解説しました)ので、この記事では WebAssembly による移植周りについて少し解説したいと思います。
先日、Twitter のタイムライン上で JavaScript における parseInt
関数の不可解な挙動に関するネタがバズっていました。
console.log(parseInt(0.000005)); // → 0
console.log(parseInt(0.0000005)); // → 5 !!!!!
この記事では、JavaScript における文字列から数値への変換について簡単に説明します。