diff --git a/public/30-days-of-javaScript.md b/public/30-days-of-javaScript.md index 80057a8..87ff091 100644 --- a/public/30-days-of-javaScript.md +++ b/public/30-days-of-javaScript.md @@ -1,10 +1,10 @@ --- title: 30-days-of-javaScript tags: - - JavaScript -private: false -updated_at: '2024-03-09T22:51:00+09:00' -id: ed77d8a161adfce4fa44 + - 'javascript' +private: true +updated_at: '' +id: null organization_url_name: null slide: false ignorePublish: false diff --git "a/public/3\345\210\206\351\226\223\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\345\237\272\347\244\216\350\254\233\345\272\247.md" "b/public/3\345\210\206\351\226\223\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\345\237\272\347\244\216\350\254\233\345\272\247.md" index 01aae3b..f5a1133 100644 --- "a/public/3\345\210\206\351\226\223\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\345\237\272\347\244\216\350\254\233\345\272\247.md" +++ "b/public/3\345\210\206\351\226\223\343\203\215\343\203\203\343\203\210\343\203\257\343\203\274\343\202\257\345\237\272\347\244\216\350\254\233\345\272\247.md" @@ -1,11 +1,11 @@ --- title: 3分間ネットワーク基礎講座 tags: - - Network - - cs -private: false -updated_at: '2024-03-09T22:48:20+09:00' -id: 5296ab628bd8aea84e19 + - CS + - ネットワーク +private: true +updated_at: '' +id: null organization_url_name: null slide: false ignorePublish: false diff --git "a/public/Fuse.js\343\202\222\344\275\277\343\201\243\343\201\246\346\244\234\347\264\242\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\231\343\202\213.md" "b/public/Fuse.js\343\202\222\344\275\277\343\201\243\343\201\246\346\244\234\347\264\242\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\231\343\202\213.md" new file mode 100644 index 0000000..833f3e6 --- /dev/null +++ "b/public/Fuse.js\343\202\222\344\275\277\343\201\243\343\201\246\346\244\234\347\264\242\346\251\237\350\203\275\343\202\222\345\256\237\350\243\205\343\201\231\343\202\213.md" @@ -0,0 +1,200 @@ +--- +title: Fuse.jsを使って検索機能を実装する +tags: + - Fuse.js + - Vue.js + - JavaScript +private: true +updated_at: '' +id: null +organization_url_name: null +slide: false +ignorePublish: false +--- + + +# Fuse.jsとは + +Fuse.jsはJavaScriptで書かれた軽量でかつ柔軟な検索ライブラリです。Fuse.jsを使用することにより、Webアプリケーションやモバイルアプリケーションに短時間で高度な検索機能を盛り込むことが可能になります。 + +## 高速な検索性能 + +Fuse.jsは極めて高速な検索を実現します。適合スコアリングアルゴリズムを採用しているため、大規模なデータセットに対しても、検索は10ミリ秒未満で実行できます。 + +具体的には、Fuse.jsを使用したWebアプリケーションの事例では、25,000件の顧客データに対する入力補完検索が100ミリ秒以内で完了し、即時に結果が返されていると報告されています。 + +## 大規模なデータセットに対応 + +Fuse.jsは、100万件以上の大規模なデータセットでも検索性能を維持することができます。軽量な実装によりメモリ使用量を抑えるため、リソースの無駄遣いを防ぎながら優れたスケーラビリティを提供します。 + +## 近似値検索の柔軟性 + +Fuse.jsは、単なる文字列の完全一致検索だけでなく、スペルミスや入力ミスがあった際でも、関連するデータを見つける近似値検索を可能にします。文字の入れ替えや追加・削除があった場合でも、適切にマッチングできます。 + +加えて、以下のような高度な検索オプションも提供されています。 + +- 検索キーのウェイト付け +- 最小文字数の設定 +- 近接度の考慮 + +これらのオプションを組み合わせることで、様々な用途に適した検索ロジックを実装できます。 + +Fuse.jsを使用すれば、少ない開発リソースでユーザーフレンドリー且つ高いパフォーマンスを持つ検索機能を実現できます。 + +# Fuse.jsの使い方 + +実際にVue3アプリケーションにFuse.jsを導入し、検索機能を実装する例を見ていきましょう。 + +```vue + + + +``` + +## Fuse.jsのオプション設定 + +Fuse.jsのオプション設定は、検索対象のキーと検索オプションを指定することで行います。上記の例では、`fuseOptions`に`keys` +プロパティを指定しています。`keys`プロパティには、検索対象のキーを配列で指定します。 + +### その他のオプション + +- `threshold` : マッチングスコアの閾値を設定します。この値を小さくするとマッチングが緩くなり、大きくすると厳しくなります。 +- `distance` : 最大編集距離を設定します。編集距離が大きいほど、より多くの文字の置換、削除、追加が許容されます。 +- `ignoreLocation` : trueに設定すると、検索語の位置を無視してマッチングを行います。 +- `findAllMatches` : trueに設定すると、すべての部分マッチを検索結果に含めます。 +- `minMatchCharLength` : マッチングに必要な最小文字数を設定します。 +- `shouldSort` : 検索結果をスコア順にソートするかどうかを指定します。 + +# 検索結果の採点理論 + +Fuse.jsでは、検索結果のリストを取得した後、各結果アイテムに関連性スコアを付与し、そのスコアに基づいてランク付けを行います。この関連性スコアは、以下の3つの要素から算出されます。 + +> BitapはByte Approximating Patternの略で、文字列パターンと別の文字列を比較し、パターンが近似的にどの程度一致するかを計算します。完全一致の場合はスコアが最大になり、ミスマッチが多いほどスコアが下がっていきます。 + +https://tech.pjin.jp/blog/2020/11/13/stringsearch-3 + +## あいまいさスコア + +あいまいさスコアは、検索文字列とマッチした文字列がどの程度似ているかを数値化したものです。Fuse.js内部では、Bitapアルゴリズムの修正版を使ってこのスコアを計算しています。 + +検索語と完全に一致する場合はあいまいさスコアが最大になり、検索語から離れるほどスコアが下がっていきます。スコアがどの程度下がるかは、以下の2つのオプションで調整できます。 + +### distance + +最大編集距離。この値を大きくすると、より多くの文字の置換・削除・追加を許容します。 + +### threshold + +マッチングと見なすスコアの閾値。この値を小さくするとマッチングが緩くなります。 + +## キーの重み付け + +検索対象のキー(フィールド)ごとに重みを付けることができます。 + +重みが大きいキーにマッチするほど、関連性が高くなります。デフォルトでは全キーに重み1が設定されています。 + +## フィールド長ノルム + +同じ検索語でも、短いフィールド(タイトルなど)にマッチした方が、長いフィールド(本文など) +にマッチするよりも関連性が高くなります。フィールドが長いほど、関連性スコアは小さくなる傾向があります。 + +--- + +このように、Fuse.jsとVue3を組み合わせることで、シンプルかつ高速な検索機能を実装できます。Fuse.jsの検索オプションを調整することで、さらに検索ロジックをカスタマイズすることも可能です。 + +実際にこの検索機能を動作させてみて、Fuse.jsの曖昧検索の力を体感してみてください! diff --git "a/public/\344\270\226\347\225\214\344\270\200\346\265\201\343\202\250\343\203\263\343\202\270\343\203\213\343\202\242\343\201\256\346\200\235\350\200\203\346\263\225\343\202\222\350\252\255\343\202\200.md" "b/public/\344\270\226\347\225\214\344\270\200\346\265\201\343\202\250\343\203\263\343\202\270\343\203\213\343\202\242\343\201\256\346\200\235\350\200\203\346\263\225\343\202\222\350\252\255\343\202\200.md" new file mode 100644 index 0000000..52ce1f7 --- /dev/null +++ "b/public/\344\270\226\347\225\214\344\270\200\346\265\201\343\202\250\343\203\263\343\202\270\343\203\213\343\202\242\343\201\256\346\200\235\350\200\203\346\263\225\343\202\222\350\252\255\343\202\200.md" @@ -0,0 +1,39 @@ +--- +title: 世界一流エンジニアの思考法を読む.md +tags: + - '積読' +private: true +updated_at: '' +id: null +organization_url_name: null +slide: false +ignorePublish: false +--- + +# 概要 + +本書『世界一流エンジニアの思考法』は、生産性の高いエンジニアの思考プロセスと習慣を解説している。主な内容は以下の通りである。 + +## 第1章 世界一流エンジニアは何が違うのだろう? - 生産性の高さの秘密 + +- 事実を見つけ、仮説を立て、それを証明するための行動をとる +- 思いつきによる試行錯誤は避ける +- 徹底的に理解するために時間をかける +- コードを書く前に小さなドキュメントを書き、問題を整理する +- ドキュメントのテンプレート: Scope(範囲)、Background(背景)、Problem(問題)、Proposal(提案) + +## 第2章 アメリカで見つけたマインドセット - 日本にいるときにはきづかなかったこと + +- Be Lazy(怠惰であれ) +- 少ない時間で価値を最大化する +- 長時間労働を避ける +- 最もインパクトのある一つにフォーカスする + +## 第3章 脳に余裕を生む情報整理・記憶術 - ガチで才能のある同僚たちの極意 + +- コードリーディングの際は、インターフェースと構造を理解する +- 技術を徹底的に理解し、情報を整理して素早く取り出せるようにする +- 基礎的なことができないうちは試行錯誤しない +- WIP=1 (作業中の仕事は一つに限定する) +- マルチタスクを避ける +- 自分の理解を言語化することで構造を整理する \ No newline at end of file diff --git "a/public/\345\237\272\346\234\254\346\203\205\345\240\261\357\274\232\343\202\263\343\203\263\343\203\224\343\203\245\343\203\274\343\202\277\346\247\213\346\210\220\350\246\201\347\264\240.md" "b/public/\345\237\272\346\234\254\346\203\205\345\240\261\357\274\232\343\202\263\343\203\263\343\203\224\343\203\245\343\203\274\343\202\277\346\247\213\346\210\220\350\246\201\347\264\240.md" new file mode 100644 index 0000000..0ab8771 --- /dev/null +++ "b/public/\345\237\272\346\234\254\346\203\205\345\240\261\357\274\232\343\202\263\343\203\263\343\203\224\343\203\245\343\203\274\343\202\277\346\247\213\346\210\220\350\246\201\347\264\240.md" @@ -0,0 +1,212 @@ +--- +title: 基本情報:コンピュータ構成要素.md +tags: + - '基本情報' + - 'CS' +private: true +updated_at: '' +id: null +organization_url_name: null +slide: false +ignorePublish: false +--- + +# 情報の表現 + +## ビット + +- 「1」や「0」のように、コンピュータで扱う情報の最小単位 +- nビットの情報は、2^n通りの情報を表現できる + +## バイト + +- 8ビットの情報のまとまり +- 10001111のような8桁の情報を1つの単位として扱う(ビットパターン) + +## 大きな数値を表す接頭語 + +- K(キロ):10^3 +- M(メガ):10^6 +- G(ギガ):10^9 +- T(テラ):10^12 + +## 小さな数値を表す接頭語 + +- m(ミリ):10^-3 +- μ(マイクロ):10^-6 +- n(ナノ):10^-9 +- p(ピコ):10^-12 + +## 文字の表現 + +- ASCIIコード:英数字・記号・制御文字などを7ビットで表現 +- Unicode:世界中の文字を表現するための文字コード +- シフトJIS:ASCIIコードに日本語を追加した文字コード +- EUC:Unix・Linuxで使われる文字コード + +## 確認問題 + +### 1. 32ビットの情報で表現できる情報が24ビットで表現できる情報の何倍か? + +2^32 / 2^24 = 2^8 = 256倍 + +### 2. 期間=2.5*工数^1/3の場合、工数が4,096人月の場合の期間を求めよ。 + +4096 = 2^12 +2.5*(2^12)^1/3 = 2.5*2^4 = 40 + +--- + +# コンピュータの構成 + +## コンピュータの五つの装置 + +- 制御・演算・記憶・入力・出力装置 + +## プログラム記憶方式 + +- 主記憶に配置されたプログラムの命令を、CPUが順番に取り出して、解読・実行する方式 + +## 主記憶 + +- CPUが直接アクセスできる記憶装置 + +## 確認問題 + +### 1. 主記憶に配置されたプログラムの命令を、CPUが順番に取り出して、解読・実行する方式は何か? + +プログラム格納方式 + +--- + +# CPU + +## クロック周波数 + +- 各回路間で同期を取るための周期的信号(クロック信号)に合わせて各回路が動作している +- クロック信号が1秒間に繰り返される回数のこと(単位:Hz) +- クロック周波数3GHzの場合、1秒間に30億回のクロック信号が発生する +- CPUのクロック周波数を2倍にすれば、システム全体も2倍になるわけではない +- クロック周波数が高いほど、発熱量も増加して放熱処理が問題となる + +### 内部クロック + +- CPU内部で発生するクロック信号 + +### 外部クロック + +- CPUと各装置を結ぶ経路の周波数 + +## バス + +- コンピュータ内の装置間を結ぶ通信経路 + +## 確認問題 + +### 1. PCのクロック周波数について + +- CPU内部のクロック周波数(内部クロック)と、主記憶を接続するシステムバスのクロック周波数は同一でなくても良い + +# CPUの動作原理 + +## レジスタ + +- CPU内部にあるメモリ領域 +- 高速にアクセス可能なデータの保持や操作に使用される + +## 命令語 + +- コンピュータのプログラム内で、実行する特定の操作を指示するためのコード + +```shell +$ LOAD R1, 100 ; メモリアドレス100からデータをR1に読み込む +$ STORE R1, 200 ; R1の内容をメモリアドレス200に書き込む +xxx +``` + +## 命令実行サイクル + +1. 命令の取り出し +2. 命令の解読 +3. 実行アドレスの計算 +4. オペランド(命令が実行される際に使用されるデータやアドレス)の取り出し +5. 命令の実行 +6. 演算結果の格納 + +## アドレス指定方式 + +### 即値アドレス指定 + +- 命令のオペランドとして、その命令自体に直接値を含める方法 + +```shell +$ LOAD R1, #100 ; レジスタR1に即値100を読み込む +``` + +### 直接アドレス指定 + +- 命令のオペランドとして、メモリ内の特定のアドレスを直接指定する方法 + +```shell +$ LOAD R1, 100 ; メモリアドレス100からデータをR1に読み込む +``` + +### 間接アドレス指定 + +- 命令のオペランドとして、別のメモリアドレスに格納されたアドレスを使用する方法 + +```shell +$ LOAD R1, (200) ; メモリアドレス200に格納されたアドレスからデータをR1に読み込む +``` + +## 相対アドレス指定 + +- プログラム内で現在の位置や参照点からの相対的な位置を指定する方法 + +```shell +$ JUMP 100 ; プログラムの100番地にジャンプする +``` + +## 指標アドレス指定 + +- プログラミングやコンピュータアーキテクチャにおいて、配列や構造体の要素にアクセスする際に使用される方法 + +```shell +int array[5] = {1, 2, 3, 4, 5}; +int index = 2; +int value = array[index]; +``` + +## 基底アドレス指定 + +- 配列や構造体などのデータ構造の先頭アドレスを指定する方法 + +```shell +struct example { + int a; + int b; +}; + +struct example my_struct; +my_struct.a = 10; +my_struct.b = 20; +``` + +## 確認問題 + +### 1. 図のように参照するアドレスを格納しているアドレスを指定する方式は何か? + +間接アドレス指定 + +```shell +[ アドレス reg (AR 20) ] ---> [ 主記憶 (アドレス 20) ] ---> [ 25 ] +[主記憶(アドレス25)] ---> [レジスタ reg (DR 25)] +``` + +### 2. プロセッサによってフェッチされた命令の格納順序 + +```shell +# プロセッサによってフェッチされた命令の格納順序 +[ 主記憶 ] ---> [ 命令レジスタ(IR) ] ---> [ プロセッサ(CPU) ] +(命令の位置) +```