recursal/MDN huggingface dataset:
WebVTT
======

WebVTT (Web Video Text Tracks) は HTML `<track>` 要素とともに文字データのマークアップを行うファイルフォーマットを策定する W3C 規格です。

WebVTT ファイルでは、動画の字幕やサブタイトル・動画の説明テキスト・コンテンツナビゲーション用チャプターなどが、音声や動画の再生時間に合わせたメタデータとして表現されています。

関連項目
----

### 一般知識

* ウィキペディアの「WebVTT」の記事(英語)
### 技術リファレンス

* MDN の「WebVTT」の記事
* W3C 規格文書
WHATWG
======

WHATWG (*Web Hypertext Application Technology Working Group*) はウェブ標準の保守や開発を行うためのコミュニティで、 DOM, Fetch, HTML などを扱っています。 Apple、Mozilla、Opera の従業員たちによって 2004 年に設立されました。

詳細情報
----

### 一般知識

* Wikipedia の記事 WHATWG
* WHATWG ウェブサイト
Parent object (親オブジェクト)
=======================

指定された プロパティ や メソッド が所属している オブジェクト。

関連項目
----

* JavaScript の継承とプロトタイプチェーン
firewall (ファイアウォール)
===================

**ファイアウォール**はネットワークトラフィックをフィルタするシステムです。 特定の規則に従ってトラフィックを通過させたりブロックしたりすることができます。たとえば、特定のポートを宛先とする着信接続や、特定の IP アドレスへの発信接続をブロックすることができます。

ファイアウォールは単一のソフトウェアのようなシンプルなものから、ファイアウォールとしてのみ機能する専用マシンのような複雑なものまで存在します。

詳細情報
----

### 基礎知識

* Wikipedia の ファイアウォール
Python
======

**Python**は、一般目的の高水準プログラミング言語です。複数のパラダイムを採用しており、手続型、オブジェクト指向、いくらか関数型プログラミングの構造に対応しています。

Python は、 ABC と呼ばれている別な言語の後継として、 Guido van Rossum によって 1985 年から 1990 年の間に開発され、現在ではウェブ開発、他のアプリケーションのスクリプト言語、実際のアプリケーション構築など、広い分野で使用されています。

Python は OSI に承認されたオープンソースライセンスのもとで開発され、商用を含めて無料で利用や配布をすることができます。 Phython のライセンスは Python Software Foundation が管理しています。

1. Learn more
    1. Wikipedia の Python
    2. Official Python docs tutorials
    3. Tutorialspoint Python tutorial
    4. AlphaCodingSkills Python Tutorial
    5. MDN の Django Web Framework (Python)
2. MDN Web Docs 用語集
    1. Java
    2. JavaScript
    3. PHP
    4. Python
    5. Ruby
Hypertext (ハイパーテキスト)
====================

ハイパーテキストは、ほかのテキストへのリンクを含むテキストであり、小説のように単一で線形の流れのものとは対照的なものです。

この用語は、テッド・ネルソンによって 1965 年に造られました。

詳細情報
----

### 一般知識

* ウィキペディアのハイパーテキストの記事
### 技術リファレンス

* Hypertext Information Base
OTA
===

*Over The Air* (**OTA**) とは、無線接続されたデバイス上のソフトウェアを中央サーバーから自動更新することを指します。特定の更新セットを受信する全てのデバイスの所有者は同じ "チャネル" 上にあり、各デバイスは多くの場合、複数のチャネルにアクセスできます (例えば、本番またはエンジニアリングビルド)。

関連項目
----

### 基礎知識

* Wikipedia 上の Over-the-air programming
* Creating and applying Firefox OS update packages
MathML
======

**MathML** (XML のアプリケーション) は、ウェブページにおいて数式を表現するためのオープンスタンダードです。 1998 年に、 W3C はブラウザーで数式を表現するための MathML の最初の勧告を行いました。 MathML には科学コンテンツや音声合成などの他のアプリケーションもあります。

関連情報
----

* Wikipedia 上の MathML
* MathML
* MathML の作成
* What is MathML
Percent-encoding (パーセントエンコーディング)
================================

パーセントエンコーディング（Percent-encoding）は、URL のコンテキストで特定の意味を持つ 8 ビット文字をエンコードするメカニズムです。URL エンコードとも呼ばれます。エンコードは置換で構成されます。`'%'` の後に、置換文字の ASCII 値の 16 進表現が続きます。

エンコードが必要な特殊文字は、`':'`, `'/'`, `'?'`, `'#'`, `'['`, `']'`, `'@'`, `'!'`, `'$'`, `'&'`, `"'"`, `'('`, `')'`, `'*'`, `'+'`, `','`, `';'`, `'='`、および `'%'` 自体です。他の文字もエンコードできますが、エンコードする必要はありません。

| `':'` | `'/'` | `'?'` | `'#'` | `'['` | `']'` | `'@'` | `'!'` | `'$'` | `'&'` | `"'"` | `'('` | `')'` | `'*'` | `'+'` | `','` | `';'` | `'='` | `'%'` | `' '` |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `%3A` | `%2F` | `%3F` | `%23` | `%5B` | `%5D` | `%40` | `%21` | `%24` | `%26` | `%27` | `%28` | `%29` | `%2A` | `%2B` | `%2C` | `%3B` | `%3D` | `%25` | `%20` または `+` |

コンテキストに応じて、文字 `' '` は `'+'`（`application/x-www-form-urlencoded` メッセージで使用するパーセントエンコーディングバージョンなど）または URL のような `'%20'` に変換されます。

より詳しく知る
-------

### 一般知識

* ウィキペディアでのパーセントエンコーディングの定義。
### 技術的知識

* RFC 3986 のセクション 2.1 に、このエンコーディングが定義されています。
Gamut (色域)
==========

**色域** (gamut)とは、色のサブセットのことで、通例ディスプレイや印刷用デバイスが表現できる色の範囲を指します。

いかなるディスプレイやプリンターでも、人間の目が知覚できるあらゆる範囲の色を表現することはできません。デバイスの*色域*とは、そのデバイスがサポートする色の集合のことを指します。

伝統的にウェブ開発では、 *sRGB* (Standard Red-Green-Blue)という色域だけが用いられていました。 sRGB では、それぞれの色が 3 バイトで記述され、各バイトはそれぞれの原色を表しています。しかしながら sRGB では、「ワイドカラー」なモニターやプロ向けのプリンターがサポートする、より広い範囲の色を表現することができません。

2021 年以降各ブラウザーは、映画産業で広く用いられる *P3* や *Rec. 2020* など、そのほかの色域についての機能も提供するようになりました。

`color-gamut` というメディア特性を使えば、より広範囲の色域をサポートするデバイスに向けて、様々な色域を定義することができます。そうしたデバイスでは RGB の色域外の色を、専用の CSS 関数で記述することができます。例えば、 `lch()` を使えば LCH 円筒座標系を用いることができますし、 `lab()` を使えば Lab 座標系を使うことができます。

関連項目
----

* *色域* (*Wikipedia*).
ASCII
=====

**ASCII** (*American Standard Code for Information Interchange*) とは、文字、数字、句読点、および制御コードをデジタル形式に変換するために、コンピュータによって使用される最も一般的な符号化方法の 1 つです。 2007 年から、ウェブ上では UTF-8 が用いられています。

詳細情報
----

### 基礎知識

* Wikipedia 上の記事 「ASCII」
FTU
===

FTU ( First Time Use、ファーストタイムユース) は、Firefox OS 端末上に新しくインストールした Gecko の起動時に読み込まれるアプリです。

FTU は、タイムゾーンや WiFi の詳細、デフォルト言語、連絡先のインポートといった、様々な重要オプションの設定や、端末の詳細確認に使う「Phone Tour」に使うことができます。
Enumerated (列挙型)
================

コンピューター科学では、**列挙**型は、名前の付いた値の限られた集合からなるデータ型です。

HTML 列挙型属性
----------

HTMLでは、列挙型属性は、限定された、あらかじめ設定されたテキスト値の集合を持つ属性です。例えば、グローバル HTML の `dir` 属性には、3 つの有効な値、`ltr`, `rtl`, `auto` があります。

それぞれの列挙型属性には、属性が値なしで存在する（値がない）場合の既定値、及び属性に無効な値が割り当てられている場合の既定値があります。HTML の論理属性が、値が存在するか、省略されるか、または無効であるかに関わらず、属性が存在する場合は常に真となるのに対して、HTML の列挙型属性では、値が省略された場合の既定値は、無効な値の場合の既定値と異なることがあります。例えば、グローバル HTML の `contenteditable` 属性には、2 つの有効なキーワード、`true` と `false` があります。この属性が表示されているが値が設定されていない場合、その値は `true` となります。値が設定されているが、 `contenteditable="contenteditable"` のような無効な値の場合、その値は 3 つ目の状態である `inherit` が割り当てられます。

ARIA 列挙型属性
----------

ARIA の状態とプロパティは、HTML であるため、列挙型の属性もあります。ARIA 属性が列挙されたリストの中に `true` と `false` の両方の値を含んでいる場合、一般的に省略された属性は `false` として、無効な値は `true` として扱われ、空文字列や省略された値の既定値は属性に依存することになります。

例えば `aria-current` 属性が受け入れることができるのは、 `page`, `step`, `location`, `date`, `time`, `true`, `false` という、限られた値のリストです。この場合、属性が存在しないか、空文字列であるか、値がない状態で存在するか、または `aria-current="false"` に設定されている場合、その属性は false となり、ユーザーには公開されません。列挙された値のリストにない空文字列以外の値は、`aria-current="true"` が設定されている場合と同様に扱われます。

JavaScript 列挙可能プロパティ
--------------------

JavaScript で、列挙可能なプロパティとは、内部の列挙可能フラグが true に設定されているプロパティのことで、これは単純な割り当てやプロパティ初期化子によって作成されたプロパティの既定値です。ほとんどの反復処理機構（例えば `for...in` ループや `Object.keys`）は、列挙可能なキーしか処理しません。

関連情報
----

* 論理型
* JavaScript のデータ型とデータ構造
* HTML 標準の enumerated attributes
Character encoding (文字エンコーディング)
===============================

エンコーディングはバイト列と文字を対応付けるものです。バイトの並びは文字としてさまざまに解釈できます。特定のエンコーディング（UTF-8 など）を設定することで、バイトの並びがどのように解釈されるかを定めることができます。

例えば、 HTML ではふつう以下のような行を使って UTF-8 の文字エンコーディングを宣言します。


```html
<meta charset="utf-8" />
```


これで HTML 文書であらゆる自然言語の文字を使用できるようになり、確実に表示されるようになります。

関連情報
----

### 一般知識

* W3C の文字エンコーディング
* ウィキペディアの文字エンコーディング
Signature (シグネチャ)
=================

**シグネチャ**は状況によって色々な意味を持ちます。
 こちらを参照してください。

Signature (functions) (シグネチャ (関数))
**関数シグネチャ** (もしくは型シグネチャ、メソッドシグネチャ) はFunctionやMethodの入力と出力を定義します。
Signature (署名 (セキュリティ) )
**署名** もしくは*デジタル署名*とは、メッセージが正当であることを示す protocol です。
詳細情報
----

* Wikipedia の シグネチャ
UTF-8
=====

UTF-8 (UCS Transformation Format 8) は World Wide Web において最も一般的な文字エンコーディングです。 1 文字あたり 1 ～ 4 バイトで表します。UTF-8 は ASCII に対して後方互換性を持っており、すべての標準 Unicode 文字を表現することができます。

UTF-8 の最初の 128 文字は、ASCII の 128 文字 (0 ～ 127) に正確に対応しており、つまり既存の ASCII 文字列はすでに UTF-8 として有効です。他の文字は 2 ～ 4 バイトを使用します。それぞれのバイトにはエンコードのためにいくつかのビットが予約されています。非 ASCII 文字は格納するために 2 バイト以上を必要とするため、バイト列が分割され再結合されない場合に破損する恐れがあります。

関連情報
----

### 一般知識

* ウィキペディアの UTF-8
* FAQ about UTF-8 on Unicode website
Parse (構文解析)
============

構文解析 (Parsing) とは、プログラムを解釈し、例えばブラウザー内の JavaScript エンジンなどの実行環境で、実際に実行できる内部形式に変換することを意味します。

ブラウザーは HTML を構文解析して DOM ツリーに変換します。 HTML の構文解析処理はトークン化とツリーの構築を含みます。 HTML トークンは、属性の名前や値と同じように、開始タグと終了タグを含みます。文書が適切に構造化されていれば、その構文解析処理は単純で速くなります。パーサーはトークン化された入力内容を構文解析して文書に変換し、文書ツリーを作り上げます。

HTML パーサーが画像のようなブロックされないリソースを見つけた場合、ブラウザーはそれらのリソースを要求し、構文解析を続けます。 CSS ファイルに遭遇した場合は構文解析処理を続けることができますが、 `<script>` タグ、特に `async` または `defer` 属性がないものの場合はレンダリングがブロックされ、 HTML の構文解析処理が停止します。

ブラウザーは CSS スタイルに遭遇した場合、その文字列を構文解析して CSS Object Model （または CSSOM）に変換し、そのデータ構造をレイアウトの整形と描画に使用します。それからブラウザーは、これら両方のデータ構造から、コンテンツを画面に描画するためのレンダリングツリーを生成します。 JavaScript も同様にダウンロードされ、構文解析され、そして実行されます。

JavaScript では、これはコンパイル時または、メソッドの呼び出し中など、パーサーが呼び出されるたびに行われます。

関連情報
----

* Wikipedia 上の 構文解析
Grid container
==============

要素に `grid` または `inline-grid` を使用すると、CSS グリッドレイアウトの**グリッドコンテナー**になります。そして直下の子要素はグリッドアイテムになります。

要素がグリッドコンテナーになると、**グリッド整形文脈**を形成します。グリッドコンテナー直下の子要素は、`grid-template-columns` や `grid-template-rows`を使って明示的に定義されたグリッドや、明示的に定義されたグリッドの外側に置かれた時には暗黙的に形成されるグリッドに沿って、配置されます。

関連項目
----

### プロパティリファレンス

* `grid-template-columns`
* `grid-template-rows`
* `grid-auto-columns`
* `grid-auto-rows`
* `grid`
* `grid-template`
### さらなる文書

* CSS グリッドレイアウトガイド: *グリッドレイアウトの基本概念*
Port (ポート)
==========

**ポート**とは、IP アドレスを持ち、ネットワークに接続されているコンピューターの通信上のエンドポイントです。ポートは数字で指定され、特に 1024 より小さい (1023 以下の) ポート番号は特定のプロトコルにデフォルトで関連付けられています。

例えば、HTTPプロトコルのデフォルトポートは 80 番、HTTPS プロトコルのデフォルトポートは 443 番であり、HTTP サーバはこれらのポートへのリクエストを待ち受けます。インターネットプロトコルは、SMTP (25 番)、POP3 (110 番)、IMAP (143 番)、IRC (194 番) など、それぞれデフォルトのポートが割り当てられています。

関連情報
----

### 一般知識

* Wikipedia 上のポート番号の記事
First paint
===========

 FirstPaint は Paint Timing API の一部です。ナビゲーションからブラウザーが読み込んだ最初のピクセルを画面にレンダリングします。
 ナビゲーション前の画面と視覚的に異なるものをレンダリングすることで「それが起きているのか？」という質問に答えます。

参照
--

* First meaningful paint
* First contentful paint
* Paint Timing API
Inheritance (継承)
================

継承は、オブジェクト指向プログラミングの大きな特徴です。データ抽象化は、いくつかのレベルで実行できます。つまり、クラスにスーパークラスとサブクラスを持たせることができます。

アプリ開発者は、スーパークラスの属性とメソッドを選択して、独自に保持して追加することで、とても柔軟にクラスを定義できます。言語によっては、クラスを複数の親から継承することができます（多重継承）。

より詳しく知る
-------

### それについて学ぶ

* 継承とプロトタイプチェーン
WebKit
======

*WebKit* はマークアップを基に適切にフォーマットされたウェブページを表示するためのフレームワークの 1 つです。Apple Safari、そして多くのモバイル向けブラウザーも、Webkit によって動いています (Webkit は移植性もカスタマイズ性も高いからです)。

Webkit は KDE の KHTML と KJS ライブラリー群のフォークの 1 つとして始まりましたが、これまで多くの個人や企業が貢献してきました (その中には、KDE、Apple、Google、Nokia も含まれています)。

Webkit は Apple の商標であり、BSD ライセンスの下にあるフレームワークです。しかしながら、2 つの重要なコンポーネントが LGPL の配下になりました: **WebCore** レンダリングライブラリーと、**JavaScriptCore** エンジンです。

詳細情報
----

### 一般知識

* Wikipedia 上の WebKit
### 技術リファレンス

* WebKit CSS 拡張 (en-US)
Hoisting (巻き上げ、ホイスティング)
=======================

JavaScript の**巻き上げ** (Hoisting) は、インタープリターがコードの実行前に、関数、変数、クラス、インポートの宣言をそのスコープの先頭に移動するように見えるプロセスを指します。

「巻き上げ」は ECMAScript 仕様書で規範的に定義されている用語ではありません。仕様書では宣言のグループを *HoistableDeclaration* として定義していますが、これは `function`、`function*`、`async function`、`async function*` 宣言しか含んでいません。巻き上げは、異なる形でではありますが、 `var` 宣言の機能としても多く考えられています。俗な言い方をすれば、以下のような動作はすべて巻き上げと見なされます。

1. スコープ内の宣言行よりも前で変数の値を使用すること。（「値の巻き上げ」）
2. 変数がスコープ内の宣言行よりも前で参照しても `ReferenceError` が発生せず、値が常に `undefined` であること。（「宣言の巻き上げ」）
3. 変数の宣言により、スコープ内のそれが宣言された行よりも前の動作が変化すること。
4. 宣言の副作用として、宣言を含む残りのコードの評価が行われる前に、宣言の副作用が発生すること。

上記の 4 つの関数宣言はタイプ 1 の動作で巻き上げが行われます。 `var` 宣言はタイプ 2 の動作で巻き上げが行われます。 `let`, `const`, `class` 宣言（まとめて字句宣言とも呼ばれる）はタイプ 3 の動作で巻き上げが行われます。 `import` 宣言はタイプ 1 とタイプ 4 の動作で巻き上げが行われます。

人によっては `let`, `const`, `class` を巻き上げが行われないと見なしますが、それは一時的デッドゾーンで宣言前に変数を使用することを厳しく禁止しているからです。巻き上げは普遍的に同意された用語ではないので、この反論は問題ありません。しかし、一時的デッドゾーンはそのスコープで他にも観測可能な変化を発生させることがあり、これは何らかの形で巻き上げがあるといえます。


```js
const x = 1;
{
  console.log(x); // ReferenceError
  const x = 2;
}
```


もし `const x = 2` 宣言がすべて巻き上げられなければ（実行されたときだけ有効になるように）、`console.log(x)` 文は上のスコープから `x` 値を読み取ることができるはずです。しかし、 `const` 宣言が定義されているスコープ全体をまだ「汚染」しているため、 `console.log(x)` 文はまだ初期化されていない `const x = 2` 宣言から `x` を読み込み、 `ReferenceError` を発生します。それでも、字句の宣言をnon-hoistingとして特徴付ける方が有益かもしれません。なぜなら、実用的な視点から見ると、これらの宣言の巻き上げは何の意味ももたらさないからです。

なお、以下は巻き上げの形式ではありません。


```js
{
  var x = 1;
}
console.log(x); // 1
```


これは「宣言する前にアクセスする」のではなく、単に `var` 宣言がブロックにスコープされていないからです。

巻き上げについての詳細は、次の記事を参照してください。

* `var`/`let`/`const` の巻き上げ — 文法とデータ型ガイド
* `function` の巻き上げ — 関数ガイド
* `class` の巻き上げ — クラスガイド
* `import` の巻き上げ — JavaScript モジュール
関連情報
----

* `var` 文 — MDN
* `let` 文 — MDN
* `const` 文 — MDN
* `function` 文 — MDN
Falsy (偽値)
==========

**偽値** (**falsy** または **falsey**) な値とは、論理型コンテキストに現れたときに偽とみなされる値です。

JavaScript は条件文や繰り返しなどの場面で、任意の値を強制的に論理型に型変換します。

以下の表は、 JavaScript の偽値の完全なリストです。

| 値 | 型 | 説明 |
| --- | --- | --- |
| null | null | キーワード `null` — 値が存在しないことを示します。 |
| undefined | undefined | undefined — プリミティブ値。 |
| `false` | 論理値型 | キーワード `false`。 |
| NaN | 数値型 | `NaN` — 数値ではない。 |
| `0` | 数値型 | 数値ゼロ （従って、 `0.0` や `0x0` なども含みます）。 |
| `-0` | 数値型 | 数値マイナスゼロ（従って、 `-0.0` や `-0x0` 等も含みます）。 |
| `0n` | 長整数型 | 長整数型のゼロ（従って、 `0x0n` も含みます）。なお、長整数型にはマイナスゼロはありません。 `0n` の負の数は `0n` です。 |
| `""` | 文字列型 | 空文字列値。`''` や ```` も含みます。 |
| `document.all` | オブジェクト | JavaScript で唯一の偽値のオブジェクトは、組み込みの `document.all` です。 |

`null` および `undefined` はヌル値でもあります。

例
-

JavaScript の *偽値* の例です（これは論理値のコンテキストでは偽に変換されるため、 `if` ブロックを実行しません）。


```js
if (false) {
  // 到達しない
}

if (null) {
  // 到達しない
}

if (undefined) {
  // 到達しない
}

if (0) {
  // 到達しない
}

if (-0) {
  // 到達しない
}

if (0n) {
  // 到達しない
}

if (NaN) {
  // 到達しない
}

if ("") {
  // 到達しない
}
```

### 論理 AND 演算子 &&

最初のオブジェクトが偽値の場合は、そのオブジェクトを返します。


```js
console.log(false && "dog");
// ↪ false

console.log(0 && "dog");
// ↪ 0
```

関連情報
----

* 真値
* 型変換
* 論理型
* 論理型への変換
Head
====

**Head** **は** HTML 文書の一部で、その文書の メタデータ 、例えば著者や、説明や、HTML に適用される CSS や JavaScript ファイルへのリンクといったものを含んでいます。

詳細情報
----

### HTML head

* MDN の `<head>` 要素のリファレンス
* MDN Learning Area の HTML <head> (en-US)
Constant (定数)
=============

定数とはプログラマーが変更できない値のことです。例えば、数値 (1, 2, 42) です。一方、変数の場合、プログラマーは既に使用されている変数名に新しい値を割り当てられます。

変数と同様に、定数を識別子に割り当てられることがあります。例えば、`pi` という識別子に 3.14... (円周率) を割り当てることがあります。

詳細情報
----

### 基礎知識

* Wikipedia 上の記事「定数 (プログラミング)」
Object (オブジェクト)
===============

オブジェクトはデータとそのデータをやり取りするための命令が入ったデータ構造です。オブジェクトはしばしば現実世界の事物を参照する事があります。例えば、レーシングゲームでは `car` や `map` オブジェクトと言った具合です。オブジェクト指向プログラミング言語の例としては、JavaScript、Java、C++、Python、そして Ruby などが挙げられます。

詳細情報
----

### 一般知識

* Wikipedia 上の記事 「オブジェクト指向プログラミング」
* JavaScript リファレンス内の `Object`
* JavaScript におけるオブジェクトのデータ構造
Stringifier (文字列化子)
===================

オブジェクトの文字列化子は、属性またはメソッドで、文字列が期待される場面においてオブジェクトのテキスト表現を提供するために定義されるものです。

関連情報
----

* WebIDL ファイルに含まれる情報の中の文字列化子
Ruby
====

**Ruby** はオープンソースのプログラミング言語です。Web コンテキストでは、Ruby はウェブサイト/アプリを生産するための *Ruby On Rails* (ROR) フレームワークと一緒にサーバー・サイドでよく使用されます。

ルビはまた、HTML で東アジアのテキストを強調して発音情報を与える方法でもあります; `<ruby>` 要素を見てください。

Learn More
----------

### 一般知識

* Wikipeia 上の Ruby
### 技術リファレンス

* Ruby の公式 Web サイト
* Ruby On Rails の公式 Web サイト
Fuzz testing (ファズテスティング)
========================

**ファジング**はプログラムがクラッシュしたり不適切に動作したりしていないかを確認する手法です。自動化されたツールで予期せぬデータや無効なデータを入力し、その結果を見ます。プログラムがクラッシュしたり不適切な動作をするようであればその内容を確認します。これは、ソフトウェアの安定性、信頼性、安全性を確かめる重要な方法であり、Mozilla ではファジングを多く利用しています。

* Jesse's blog posts about fuzzing
* Wikipedia: ファジング
* jsfuzz - coverage guided javascript fuzzer
Engine
======

JavaScript エンジンは、 JavaScript のプログラムを構文解析して実行するインタープリターです。

詳細情報
----

### 一般知識

* Wikipedia の JavaScript エンジンの記事
Computer Programming (コンピュータープログラミング)
=====================================

コンピュータープログラミングは、一連の命令を構成して体系化する処理です。これらがコンピューター/ソフトウェアのプログラムに何をするべきかを、コンピューターが理解できる言語で指示します。これらの命令は様々なプログラミング言語（C++, Java, JavaScript, HTML, Python, Ruby, Rust など）の形で与えられています。

適切な言語を使用して、すべての種類のソフトウェアをプログラム/作成できます。例えば、科学者の複雑な計算を手助けするプログラム、大量のデータを格納するデータベース、音楽をダウンロードできるウェブサイト、アニメーション動画を作成できるアニメーションソフトウェアなどです。

詳細情報
----

### 基礎知識

* Wikipedia の プログラミング
* Wikipedia プログラミング言語
Payload body
============

HTTP メッセージの*ペイロード本文*は、HTTP メッセージ本文があれば、その送信時に送られるデータの `Transfer-Encoding` が適用される前の*情報* ("ペイロード") 部分です。 Transfer-Encoding が使用されない限り、 *ペイロード本文* と *メッセージ本文* は同じものです。

例えば、このレスポンスではメッセージ本文は "Mozilla Developer Network" というペイロード本文を持っているだけです。
```

HTTP/1.1 200 OK
Content-Type: text/plain
Mozilla Developer Network
```


対して、下記レスポンスは *transfer encoding* を使ってペイロード本文をチャンクに変換しています。ペイロード本文（情報）は同じく "Mozilla Developer Network" を送信しますが、メッセージ本文には、チャンクを分離するための追加のデータが含まれています。
```

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
7\r\n
Network\r\n
0\r\n
\r\n
```


詳しくは、 RFC 7230, section 3.3: Message Body と RFC 7230, section 3.3.1: Transfer-Encoding を参照してください。
Code unit (コードユニット)
===================

**コードユニット** とは、文字エンコーディングシステムで用いられる UTF-8 や UTF-16 といった基本的構成要素です。文字エンコーディングシステムは Unicode コードポイント をエンコードするためにひとつもしくは複数のコードユニットを用います。

UTF-16 （ JavaScript 文字列で用いられるエンコーディングシステム）では、コードユニットは 16 ビットの値です。このことはつまり、文字列にインデックスを付けたり、文字列の長さを取得するためのオペレーションは、これらの 16 ビットユニット上で操作されることを意味します。これらのユニットは我々が文字列と考えるものと常に 1 対 1 で関連付けるわけではありません。

例えば、強調表示のような発音記号を含む文字列は時々、ふたつの Unicode コードポイントを用いて表されます：


```js
const myString = "\u006E\u0303";
console.log(myString); // ñ
console.log(myString.length); // 2
```


また、 Unicode で定義されている全てのコードポイントが 16 ビットに収まるわけではないため、多くの Unicode コードポイントは *サロゲートペア* と呼ばれる UTF-16 コードユニットのペアでエンコードされています：


```js
const face = "🥵";
console.log(face.length); // 2
```


JavaScript `String` オブジェクトの `codePointAt()` メソッドは、そのエンコードされたフォームから Unicode コードポイントを取得することを可能にさせます：


```js
const face = "🥵";
console.log(face.codePointAt(0)); // 129397
```

関連項目
----

* Unicode encoding FAQ
RTF
===

RTF (リッチテキストフォーマット) は書式設定 (例：太字、イタリック) をサポートしたプレーンテキストベースのファイルフォーマットです。

1980 年代に Microsoft Word チームの 3 人のプログラマーが RTF を作り、Microsoft が 2008 年まで開発していました。開発が終了した現在でも多くの文書処理プログラムが RTF を読み書きできます。

詳細情報
----

### 基礎知識

* Wikipedia の Rich Text Format
### 技術リファレンス

* Microsoft による最後の仕様
Mutable (ミュータブル)
================

ミュータブルは、変更可能な変数の型です。JavaScript では、プリミティブな値ではない、オブジェクトと配列だけがミュータブルです。

（変数名が新しい値を指し示すようにすることはできますが、以前の値はまだメモリーに保持されていますので、ガベージコレクションが必要です。）

**ミュータブルオブジェクト**は、オブジェクトを作成した後に状態を変更できるオブジェクトです。

イミュータブルは、オブジェクトが作成された後は状態を変更できないオブジェクトです。

**文字列**と**数値**は**イミュータブル**です。例をあげて理解しておきましょう。
```

var immutableString = "Hello";

// 上記のコードでは、文字列値を持つ新しいオブジェクトが作成されます。

immutableString = immutableString + "World";

// 今、既存の値に "World" を追加しています。
```


"immutableString" に文字列値を追加すると、次のイベントが発生します。

1. "immutableString" の既存の値が取得される。
2. "immutableString" の既存の値に "World" が追加される。
3. 結果の値は、新しいメモリーブロックに割り当てられる。
4. "immutableString" オブジェクトは新たに作成されたメモリー空間を指すようになる。
5. 以前に作成されたメモリー空間がガベージコレクション可能になる。
より詳しく知る
-------

### 一般知識

* Wikipedia 上の イミュータブル
Array (配列)
==========

*配列*は、データ（言語によってプリミティブまたはオブジェクトのどちらか）が順序付けされて集まったものです。配列は 1 つの変数に複数の値を格納するために使用されます。これは 1 つしか値を格納できない変数とは対照的です。

配列内のそれぞれの項目には添字と呼ばれる番号が割り当てられており、それによって各項目にアクセスすることができます。 JavaScript では、配列の添字は 0 から始まり、さまざまなメソッドで操作することができます。

JavaScript における配列の利用例は以下の通りです。
```

var myArray = [1, 2, 3, 4];
var catNamesArray = ["Jacqueline", "Sophia", "Autumn"];
// JavaScript の配列は、上記のように異なる種類のデータを保持することができます。
```

詳細情報
----

### 一般知識

* ウィキペディア上の「配列」の記事
### 技術リファレンス

* MDN における JavaScript の`配列`
Pseudo-element
==============

CSS では**擬似要素**セレクターを使うことで、選択すべき特定の HTML 要素がない状況でも、ドキュメントのコンテンツの一部に、スタイルを適用できます。例えば、各段落の最初の文字を、それぞれの要素の中に置いていくのではなく、`p``::first-letter` で、それらのすべてに、スタイルを指定することができます。

関連項目
----

### 技術リファレンス

* Pseudo-elements（疑似要素）
Blink
=====

Blink は、 Google によって Chromium の一部 (それゆえ Google Chrome の一部でもある) として開発されたオープンソースのブラウザー用レイアウトエンジンです。特に、 Blink はレイアウト、レンダリング、 DOM の処理を扱う WebKit 内の WebCore ライブラリのフォークとして始まりましたが、現在は独立したレンダリングエンジンとして成立しています。

1. 一般知識
    1. Blink プロジェクトホームページ
    2. Blink (Wikipedia)
    3. Blink に関する FAQ
2. 用語集
    1. Google Chrome
    2. Gecko
    3. Trident
    4. WebKit
    5. レンダリングエンジン
Promise
=======

**`Promise`** は、ある 関数 が返す、呼び出された時点でまだ完了していない処理の結果をあらわす オブジェクト です。その名のとおり、関数が `Promise` オブジェクトを経由して、最終的に何らかの結果を返すことを*約束*(Promise は約束の意味)するわけです。

非同期に 処理をおこなう関数が処理を完了したとき、`Promise` オブジェクトに設置された **resolution** ハンドラ(または **fulfillment** ハンドラ、**completion** ハンドラ) が呼ばれて、呼び出し元の関数は処理の完了を知ることができます。

関連情報
----

より詳しく学ぶには、以下のリンクをご覧ください。

### 一般知識

* Future パターン
### 技術的な参照情報

* JavaScript リファレンス内の記事: `Promise`
* Promise を使う
Pseudocode (擬似コード)
==================

擬似コードは人間に対し、コード構文がどのようにはたらいているかを示す、あるいはコード設計のある項目の意図を表現するために広く用いられる、コードのような構文を意味します。実際にコードとして実行しようとしても、**うまく動作しない**でしょう。

関連情報
----

### 基礎知識

* Wikipedia の 擬似コード。
SLD
===

SLD (Second Level Domain; セカンドレベルドメイン) は TLD 直下の階層のドメイン名です。

例えば `mozilla.org` では、 `mozilla` が TLD の `.org` に対するセカンドレベルドメインです。

ドメイン名は TLD および SLD だけではありません。サーバーの様々な機能についての追加情報を提供するため、またはサブドメイン以下の領域を区切るために、追加のサブドメインを生成することができます。例えば、 `www` はウェブサーバーのドメインポイントを示すサブドメインとしてよく使われます。

もう一つの例として、 `developer.mozilla.org` では、 `developer` サブドメインが、 Mozilla ウェブサイトの開発者向け (developer) の章を含むサブドメインを指定するのに使われています。

1. Wikipedia articles
    1. SLD
2. 用語集
    1. DNS
    2. ドメイン
    3. ドメイン名
    4. TLD
Class (クラス)
===========

オブジェクト指向プログラミングでは、*クラス*はオブジェクトの特徴を定義します。クラスはオブジェクトのプロパティやメソッドのひな形定義であり、オブジェクトのより具体的なインスタンスが描かれる「青写真」です。

詳細情報
----

### 一般知識

* クラスベース言語とプロトタイプベース言語（JavaScript など）
* JavaScript におけるクラスとしての関数の利用
* ウィキペディアのクラスベースの記事
* ウィキペディアの Object-oriented programming の記事
Hotlink (直リンク)
==============

**直リンク** (**ホットリンク**、**インラインリンク**とも呼ばれる) は、別のサイトから直接リンクされたオブジェクト (通常は画像) です。たとえば、 site1.com でホストされている画像が site2.com に直接表示されるものです。

この行為は、リンク先のオブジェクトをホストしているウェブサイトの帯域幅を勝手に利用することになるため、多くの場合はひんしゅくを買う行為であり、また著作権上の懸念 — 許可なく行われた場合は窃盗とみなされます — を引き起こす可能性もあるためです。

1. 一般知識
    1. Wikipedia 上の 直リンク
2. MDN Web Docs 用語集
    1. Hyperlink
Grid (グリッド)
===========

**CSS グリッド** は `display` プロパティの値に `grid` を指定して定義します。グリッドの列や行は `grid-template-rows` や `grid-template-columns` プロパティで定義します。

これらのプロパティを使って定義したグリッドのことを **明示的グリッド** *(explicit grid)* と呼びます。

明示的グリッドの外にコンテンツを配置する場合や、自動配置に任せる場合、グリッドアイテムが収まるように行や列のグリッドトラックがグリッドアルゴリズムに従って暗黙的に追加されます。**暗黙的グリッド** (*implicit grid*) は、定義済みのトラックの外部にコンテンツを配置するため自動的に作成されるグリッドです。

次の例では 3 列 2 行の**明示的グリッド**を作成しています。グリッドで 3 つ目の行は、明示的グリッドが定義している 6 つ以上のアイテムが含まれていることで作られた、**暗黙的グリッド**による行トラックです。

例
-
```

\* {
  box-sizing: border-box;
}

.wrapper {
  border: 2px solid #f76707;
  border-radius: 5px;
  background-color: #fff4e6;
}

.wrapper > div {
  border: 2px solid #ffa94d;
  border-radius: 5px;
  background-color: #ffd8a8;
  padding: 1em;
  color: #d9480f;
}
```



```css
.wrapper {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 100px 100px;
}
```



```html
<div class="wrapper">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
  <div>Four</div>
  <div>Five</div>
  <div>Six</div>
  <div>Seven</div>
  <div>Eight</div>
</div>
```

### 関連情報

* グリッドレイアウトの基本概念
* プロパティリファレンス
    + `grid-template-columns`
    + `grid-template-rows`
    + `grid`
    + `grid-template`
WAI
===

WAI または Web Accessibility Initiative は、標準外のブラウザやデバイスを必要とする可能性がある、さまざまな課題を抱える人々のためにアクセシビリティを向上させるための、World Wide Web Consortium（W3C）による取り組みです。

より詳しく知る
-------

### 一般知識

* WAI のウェブサイト（英語）
* ウィキペディアの Web Accessibility Initiative
Repaint (リペイント)
===============

リペイントはインタラクティブなサイトでの更新後など、UI 変更から発生する視覚的な更新を表現するために browser が Web ページを再描画する時に発生します。通常、リペイントはブラウザーがウェブページ内の特定部位の位置や形状について再計算するリフローに続いて発生します。

関連項目
----

* リフロー
* Understanding Reflow and Repaint in the browser on dev.to (2020)
Codec (コーデック)
=============

コーデック（"***co**\_der-***dec**\_oder" から派生したかばん語）は、データストリームを符号化または復号するプログラム、アルゴリズム、またはデバイスです。特定のコーデックは、特定の符号化または圧縮技術の取扱方法を知っています。

より詳しく知る
-------

### 一般知識

* Wikipedia 上の コーデック
### 技術文書

* ウェブ動画コーデックガイド
* HTML の audio および video で対応しているメディア形式
* メディアの種類と形式のガイド
IndexedDB
=========

IndexedDB は大きなデータ構造をブラウザーに保管して高パフォーマンスな検索用にインデックスする Web API です。SQL-ベースの RDBMS と同様に、IndexedDB はトランザクションできるデータベースシステムです。しかし、データを保管するのに固定長のカラムではなく JavaScript オブジェクトを使います。

詳細情報
----

* MDN の IndexedDB API
* IndexedDB の W3C 仕様
Random Number Generator (乱数発生器)
===============================

**PRNG** (擬似乱数発生器) は、複雑で、予測できないように見えるパターンの数字を出力するためのアルゴリズムです。真の乱数 (放射性線源など) はまったく予測できないのに対し、すべてのアルゴリズムは予測可能なので、 PRNG は、開始パラメーターや*シード*が同じときには同じ数値を返します。

疑似乱数はゲームなど、様々な応用分野で使用されています。

暗号学的に安全な擬似乱数とは、暗号での使用に合うよう追加のプロパティを伴う擬似乱数であり、次のようなものがあります。

* (シードを知らずに) 攻撃者が計算によって出力を予測することができないもの
* 攻撃者がその現在の状態を解くことができた場合、攻撃者が以前に発行された数を解明することができないもの。

多くの疑似乱数、は暗号学的に安全ではありません。

関連情報
----

### 一般知識

* Wikipedia の擬似乱数
* JavaScript の組み込み PRNG 関数である `Math.random()`。これは暗号学的に安全な PRNG ではありません。
* `Crypto.getRandomValues()`: 暗号学的に安全な数値を提供するためのものです。
* `RandomSource`
* `Math.random()`
* `Crypto.getRandomValues()`
Delta (デルタ)
===========

**デルタ**は、2 つの値または状態の差分を表す用語です。

名前の由来はギリシャ文字の Δ (delta) で、 ローマ字の *D* に相当します。*デルタ*は、省略形の文字 Δ を使用して*差分*を表します。

*デルタ*という語は、一般的に、物理的もしくは仮想的なオブジェクトの速度、位置、加速度の変化を表す時に使われます。また、音波の振幅または周波数の変化を表す時にも使われます。

例えば、画面上でオブジェクトが左から右へ移動した距離を述べる時には、*delta x* または *Δx* という表記が使用できます。

同様に、新しい値 *X* とその古い値が与えられた時、次のようにデルタを計算できます。


```js
let deltaX = newX - oldX;
```


より一般的には、デルタを受け取り、その値を使用して保存済みの以前の状態を更新します。


```js
let newX = oldX + deltaX;
```

詳細情報
----

### 技術リファレンス

* マウスホイールイベント (例として、`WheelEvent` の `deltaX`、`deltaY`、`deltaZ` プロパティは、最後のイベントからのホイールの移動量を提供します)
Closure (クロージャ)
===============

実行\*\*範囲**を定義するバインディングのこと。JavaScriptでは、**関数\*\*は閉じたコンテキストを作成します。

関連項目
----

### 一般知識

* Wikipedia の クロージャ
### 技術リファレンス

* MDN のクロージャ