安全かつ堅牢なMFA構成

MFAは安全性のために堅牢性を犠牲にして推進されているため両方を考慮して認証方法を選定しなければならない。 リカバリーコードによる復旧可能性は期待しないものとする。 脅迫耐性は即時使用可能な認証方法はすべて低いため考慮しない。 比較 認証方法 役…

ハフマン符号の非効率性の理論的証明とハフマン符号を超える非肥大化保証ASCII文字圧縮エンコーディング

他の圧縮エンコーディングが圧縮率が低かったり肥大化リスクがあったり辞書の共有が厄介だったりしたので非辞書式非肥大化保証ASCII文字圧縮エンコーディング(辞書の意味が多義的で扱いづらいがとりあえず辞書式のデメリットがないという意味で非辞書式と書…

アーマードコア6はいかに前作から退化したか

購入者として知ることを明らかにする。至る所に技術の喪失が垣間見える。 機動力の喪失 壁蹴り(ブーストドライブ)がなくなったことによりACVIの機動性と戦闘速度はACVから比較するのもおこがましいほど低下した。まず壁蹴りによりEN消費なし(消費より回復の…

キャッシュアルゴリズムの評価項目

キャッシュアルゴリズムを選定する際の基本的な評価項目。これらを広く満たすほど汎用性が高くなる。 ヒット率(ワークロード) 用途を特定できないがLRUよりヒット率の高いキャッシュアルゴリズムを求める場合LRUより有意にヒット率の低い代表的ワークロード…

PjaxとSPAの違い

PjaxとSPAが全く同じ技術構成なのを知らずにPjaxを過去の技術だと思ってる知ったかぶりが多いので最も高度で完成度の高いPjaxライブラリであるpjax-apiの作者の自分が説明しておこう。 SPAとはPjaxをバンドルしたフレームワーク Pjaxとはその語源からしてpus…

ACVDはなぜ失敗したのか - マップとリスポンと没入感

ACVで毎日何度も一時間以上待ッチングしてた自分だがACVDは大幅に短い時間でマッチングできるようになったにもかかわらずわずか数ヶ月でやめた。何が悪かったのか? マップがミスマッチング ACVではほとんどのマップが比較的狭く遮蔽物の多い要所で至近距離…

キャッシュアルゴリズムの比較

アプリケーションなどOSより上に作られる高水準のプログラムではハードウェアの速度と容量を考慮しない数学的キャッシュアルゴリズムが使われ主にこれを本稿の対象とする。キー探索用マップと明示的キャッシュサイズ(対となる値が保持されているキーのサイズ…

地球火星人学の論理的誤謬 (脅威インテリジェンスの教科書/石川朝久)

脅威インテリジェンスの教科書(初版1刷)の中に論理的誤謬を発見したので記録しておく。本書コラムの地球火星人学において著者石川朝久はヘンペルのカラスの代わりに説明する論理的に同一の説明として地球火星人学(出典はおそらく村上陽一郎教授)を提示してい…

Reverseパターン

非純粋関数を合成可能な擬似純粋関数にするデザインパターン。非純粋関数の返り値を逆操作関数にすることで疑似純粋化し逆操作関数を無引数無返り値に統一することで合成可能化する。操作は逆操作により副作用を残さず中止および終了され複数の操作はArrow演…

ゼロトラストセキュリティの基本概念

境界防御からゼロトラストセキュリティへの変遷を通してゼロトラストセキュリティの基本概念を解説する。 境界防御 水際防御とも呼ばれる境界防御は概ね単一かつ唯一の防衛線を設置しこの最終防衛線を死守するセキュリティモデルである。 一度でも突破されれ…

Haskellの非実用性

IDEなどの開発支援機能を使用できない場合が少なくない .chsファイルへの非対応 実際的な広いユースケースで現代的なプログラミングを実現できておらずインタラクティビティの低い原始的なプログラミングを強いられる ビルドが長すぎる(1時間前後) 脆弱性修…

Haskellの差分リストはなんちゃって差分リストではないか?

Haskellの差分リストは一般に([1,2,3] ++) . ([4,5,6] ++)のようにセクションで示される。しかしこれは連結の際に左側のリストの要素をたどって末尾を見るので計算量がリストの長さに比例して増加しO(n)となる。一方CTMCP(コンピュータプログラミングの概念…

AsyncIteratorとPromiseによるObservablePromise抽象

ObservablePromiseはAsyncIterableインターフェイスを実装することで途中状態を取得可能にしたPromiseである。ObservablePromiseの最大の利点は非同期の途中状態と最終状態という意味的に異なる状態の分離をfor-awaitとasync/awaitという言語抽象レベルで行…

TypeScriptで型レベル関数とRequired/DeepRequired型を作って型レベルプログラミング

TypeScript 2.8で追加予定のConditional型とinfer prefixが開発版でリリースされたので型レベル関数と念願のRequired/DeepRequired型を作って型レベルプログラミングを可能にする。 型レベル関数 Conditional型はUnion型を展開するためEq<false, boolean>の結果はその非決定</false,>…

ポストjQueryの要件

jQueryからの脱却が叫ばれる所以はクエリによりカプセル化の境界を簡単に逸脱する局所性のなさ、また要素やコンポーネント間の連携を求めるにはクエリでは対象の存在も同一性も不確実すぎるなどの理由から大規模なコードベースを構築できないためです。これ…

TypeScriptでIDなどの特別な数値や文字列を型安全な専用の属性付きプリミティブ型にする

TypeScriptでIDやエンコーディングなど特別なセマンティクスを持つ値にプリミティブ型を維持したまま個別の属性を与えることで型安全な専用の値を作る。言語の型システムをどのように機能させているかについての説明は省略する。 IDは次のように作れる。 nam…

IndexedDBの安全な永続化リソース管理戦略 ~ 有効期限と容量制限

IndexedDBはキャッシュによる通信量削減などに有効だが、クライアント/ユーザー側にサーバー/サービス提供者側から管理・修正不能な状態を作るリスクがあり、最悪の場合クライアント/ユーザー側でキャッシュを削除しない限りサービスが利用不能となる可能性…

CSS in JSで作るStyled Componentsの最小デザイン

CSS in JSでStyled ComponentsをAngularやReactといったフレームワークなしで作る最小デザインを例示する。 次のようなHTMLで表されるDOM ComponentにCSSを適用したいとする。 <article id="id"> <h1>Title</h1> <ul> <li>item</li> <li>item</li> </ul> </article> 単純にidで絞り込んだCSSを記述したstyle要素があればCSSを…

Promiseの失敗文脈を使ってはならない理由と組み込み関数では使っていい理由

Promiseのthenメソッドの第二引数およびcatchメソッドのコールバックの呼び出しで表現される失敗文脈、これは原則として使ってはならない。 ネイティブの組み込み関数が使っているからといって真似してPromise値を返し失敗文脈を持つ関数を作ってはならない…

Gitクライアントに保存したsshパスワードを消す方法

git

git config --unset-all credential.helper git config --global --unset-all credential.helper git config --system --unset-all credential.helper stackoverflow.com

TypeScriptの型検査を無効化して型安全性を失わせる落とし穴5つとその避け方

TypeScriptにはanyを使わないよう注意しても型検査が無効化され型安全性が失われるパターンがいくつかあり、中には致命的なものも存在する。今回はこのパターンをいくつか紹介する。 コールバックのvoid戻り値型 コールバックのvoid戻り値型はすべての型を受…

TypeScript1.8以降で追加予定または協議中の注目の新機能12つ

TypeScript1.8以降で追加予定または協議中の注目の新機能を紹介します。 この記事はTypeScript アドベントカレンダー2015 25日目の記事です。 戻り値型の厳格な検査(--noImplicitReturns) [Merged] github.com github.com 戻り値が定義した型以外になること…

JavaScript(TypeScript)でEitherモナドとMaybeモナドを作る

JavaScriptでMaybeモナドのサンプルはよくありますがEitherモナドのサンプルはあまりないのでこれを作ってみます。 この記事はTypeScript アドベントカレンダー2015 24日目の記事です。 まずはMaybeモナドで肩慣らしです。 export class Maybe<T> { private MAY</t>…

TypeScriptのコンパイルだけでBrowserifyを使わずにモジュールファイルを結合したIsomorphicなNPMのパッケージを作る

TypeScript1.8ではモジュールを結合して1つのファイルに出力できるようになり、これによりBrowserifyを使わずにIsomorphicなJavaScriptライブラリを作れるようになります。NPMのパッケージもNodeでもブラウザでもそのまま使える素敵なライブラリが簡単に作れ…

ヘキサゴナルアーキテクチャとレイヤードアーキテクチャの違いとマイクロサービス

ヘキサゴナルアーキテクチャとレイヤードアーキテクチャのざっくりとした違いとヘキサゴナルアーキテクチャの利点を説明する。 ヘキサゴナルアーキテクチャは主に六角形で描かれる、多角形の全辺が外部とのインターフェイスであり、内部にさらにアプリケーシ…

TypeScriptで形式的証明・交差型編 ~ 状態付きの型による高信頼領域の構築

TypeScriptで交差型を使って静的型に状態的な型を動的に付与していきます。 これによりサニタイズ済/未サニタイズ、エンコード済/未エンコード、不変/可変、通常文脈/エラー文脈、Truthy/Falsyといった状態を複合的に扱えるようになります。 さっそく試して…

TypeScriptで形式的証明・直和型編 ~ じゃんけんゲーム最強トーナメント

TypeScriptで形式的証明を取り入れたプログラミングを実践します。 形式的証明とは、仕様またはモデルが数理論理学的に正しいものであり実装可能であることの形式手法による証明です。 本稿では形式手法のうち、型システムを利用した軽量形式手法による形式…

gitで流行のコミットメッセージとベーシックなコミットメッセージのフォーマットまとめ

最近気になってたchore(package): bump versionなGoogleフォーマットとBump versionなベーシックフォーマットのまとめ。 Googleフォーマット chore(package): bump version Angular.jsなど主にJavaScriptのメジャーリポジトリで人気のフォーマット。 github.…

空間ナビゲーション vs リンクマップ

自分が思い描くところの理想に近い空間ナビゲーションを実装してひと段落ついた。 Spatial Navigationchrome.google.com 開発に着手する前、自分はVimiumのような網羅的なリンクマップより空間ナビゲーションのほうが直感的で使いやすいと思っていた。しかし…

Vivaldiのキーボードコマンドによる操作の手引きと評価

Vivaldi TP3 キーボードコマンド操作手引き 操作 推奨コマンド ブラウザ共通 Vivaldi Vimium タブ開く t,Ctrl+T Ctrl+T - t タブ閉じる x,Ctrl+W Ctrl+W - x タブ復元 X,Ctrl+Z Ctrl+Shift+T Ctrl+Z X 次のタブ K,Ctrl+Tab Ctrl+Tab 1,4 K 前のタブ J,Ctrl+S…