メモログ

💡 Personal notes about somthing I'm interested in

Array.prototype.sort について

JavaScriptの配列にはsortメソッドがあり配列のソートを実行することができるけど、この配列のソートの中の実装はどうなっているのかという話。v8における配列ソートについての記事が大変参考になりました。

📖 続きを読む

JavaScriptでビットベクタルを使う

ビットベクトルは2進数の値(ビット)の配列を使って状態を保持する。ビット配列(bit array)とかbit set, bit stringとも言うらしい。詳しくはBit arrayを参照。

📖 続きを読む

npm run script に引数を渡す

この記事の上にあるFeatured Imageを生成するときに毎回primitive_bulkのコマンドを入力していたのだけど、
しかしさすがに面倒になってきたので、npm run script にショートカットを用意してショートカットに引数を渡すようにしてみた。

📖 続きを読む

JavaScriptでハッシュテーブルを作る

JavaScriptオブジェクトのプロパティアクセスにおけるビッグ・オーで書いたようにJavaScriptのオブジェクトは基本ハッシュテーブルであるし、Mapオブジェクトも中の実装はChromeではハッシュテーブルであると書かれてある(Optimizing hash tables: hiding the hash code)。だからJavaScriptで自前のハッシュテーブルを作るというのは必要のないことなのだけど試しに作ってみたかった。

📖 続きを読む

JavaScriptオブジェクトのプロパティアクセスにおけるビッグ・オー

配列に格納しているオブジェクトをそのIDで検索するとしたら処理量は(線形探索だろうから)ビッグ・オー記法としては O(n) になるだろう。

📖 続きを読む

PWAのチェックリストを満たす

たいして更新もしない個人のブログで Service Worker とか入れる必要まったくないと思いながらも、Lighthouse の結果を見るたびに「PWAのチェックリストだけ100点に至らない」というなんとも言えないモヤモヤ感があった。別にそんなに大変でもないんだから入れてしまえ、ということでPWAのチェックリストを満たすべく、Service Worker と App manifest に対応しました。

📖 続きを読む

TypeScriptとWebpackを使ってDynamic Importを行う

Webpackではバンドルするファイルを3つのアプローチで分けることができる。エントリーポイントを複数設けたり、webpack.config.jsにsplitChunksの設定を入れたりなどの他に、Dyanmic importを使うことでもファイルを分けることができる。詳しくはCode Splittingを参照。

📖 続きを読む

カスタムドメインを設定する

このサイトはHexoを使ってGithub Pagesに公開しているのだけど、最近Github PagesカスタムドメインでもHTTPSをサポートしてくれるようになったので、適当にリダイレクトかけていた元の memolog.org のドメインを設定することにした。

📖 続きを読む

「マインド・コントロール」と「影響力の正体」を読んだ

マインド・コントロールと影響力の正体という本を読んだ。マインドコントロールとは、Wikipediaには「他人の思想や情報をコントロールし、個人が意思決定する際に、特定の結論へと誘導する技術を指す概念」と書いてある。「マインド・コントロール」の方は題名そのまんまマインドコントロールに扱った本であるけど、「影響力の正体」の方も「相手をYESという結論に導く技術」という意味でマインドコントロールを扱った本と言える。どちらの本も内容も人間の根本的な性質を利用したものでかなりやっかいな技術だなと思った。

📖 続きを読む

JSONデータを読み込んで差し替える

Node.jsの中であれば単にconst config = require('config.json')すれば良いのだけれど、フロントエンド側のJavaScriptではそうはいかない。XMLHttpRequestとかFetch APIを使うか、requireで書いたものをwebpackでbundleするとかしないといけない。他にもいろいろ方法はあると思うけど、まあとにかく一手間が必要。

その読み出すJSONデータを環境ごとに変更したい場合はなおさら面倒で、Node.jsであればprocess.env.NODE_ENVなんかを使えばいいけど、フロントエンド側ではwebpackでバンドルするときの設定を変更するとか、uglifyでDEBUGみたいなglobal変数を入れておいて書き出すとかしつつ、異なるJSONデータをfetchするように実装しないといけない。いろいろ方法はあるから難しい問題ではないけど、面倒ではある。

📖 続きを読む