recursal/MDN huggingface dataset:
SMTP
====

**SMTP** (Simple Mail Transfer Protocol) は、新しいメールを送信するために使用されるプロトコルです。 POP3 や NNTP と同様に、ステートマシン (en-US) により駆動するプロトコルです。

このプロトコルは比較的単純です。最も複雑な部分は、様々な認証のメカニズム (GSSAPI、CRAM-MD5、NTLM、MSN、AUTH LOGIN、AUTH PLAIN、他) をサポートすること、エラーレスポンスを取り扱うこと、そして認証メカニズムが失敗した時 (例、サーバーがあるメカニズムのサポートを要求するが、実際にはサポートしていない) にフォールバックを行うことです。

1. 用語集
    1. NNTP
    2. POP3
    3. protocol
    4. state machine (en-US)
2. Wikipedia の記事
    1. SMTP
Java
====

Java は、コンパイラ言語で、オブジェクト指向の高度にポータブルなプログラミング言語です。

Java は静的型付けで、 C の構文に近い特性を持ちます。直ちに利用できる巨大なライブラリ、 Java Software Development Kit (SDK) と共に使用されます。

プログラムは Java 仮想マシン (JVM) の内部で実行される独自のバイトコードとパッケージ形式に一度だけコンパイルされます。 JVM は、多くのプラットフォームで使用できますので、 Java プログラムは、コンパイルまたはパッケージ化する必要なしに、ほぼすべての場所で実行できます。これにより様々な観点を持つ大企業で好まれる言語になっていますが、「重い」と感じられるかもしれません。

関連項目
----

### 一般知識

* Wikipedia 上の Java
Mixin (ミックスイン)
==============

ミックスインは、そのメソッドやプロパティの一部またはすべてが実装されていないクラスまたはインターフェイスであり、別のクラスまたはインターフェイスが欠落している実装を提供する必要があります。

新しいクラスまたはインターフェイスには、ミックスインのプロパティとメソッドと、それ自身で定義したプロパティとメソッドの両方が含まれます。ミックスインが実装しているか、ミックスインを実装しているインターフェイスまたはクラスが実装しているかにかかわらず、すべてのメソッドとプロパティは全く同じように使用できます。

ミックスインの利点は、複数のインターフェイスに同じメソッドとプロパティを含める必要がある API の設計を簡素化するために使用できることです。

たとえば、 `WindowOrWorkerGlobalScope` ミックスインは、 `Window` と `WorkerGlobalScope` の両方のインターフェイスで使用できるメソッドとプロパティを提供するために使用されます。 このミックスインは、これらの両方のインターフェイスによって実装されています。

関連情報
----

* Mixin （ウィキペディア）
HTML5
=====

HTML5 は、HTML の最新の安定バージョンであり、ドキュメントを構築するだけのマークアップであった HTML をアプリケーション開発基盤へと昇華させました。また、その他にも HTML5 は新しい Element (要素) と JavaScript API を含んでおり、ストレージやマルチメディア、ハードウェアアクセスが強化されています。

詳細
--

* HTML5 ガイド (en-US)
REST
====

**REST** (Representational State Transfer) は、効率的で信頼性が高く、スケーラブルな分散システムを実現するためのソフトウェアアーキテクチャ設計上の一連の制約条件のことです。

REST の基本的な考え方は、リソース、たとえば文書が、よく認識され、言語にとらわれず、確実に標準化されたクライアント/サーバーのやりとりで転送するというものです。サービスがこれらの制約に準拠している場合、 RESTful とみなされます。

一般的に HTTP API は、俗に RESTful API、RESTful サービス、REST サービスなどと呼ばれることがありますが、必ずしも REST のすべての制約に準拠しているわけではありません。初心者の方は、REST API とは、標準的なウェブライブラリやツールを使って呼び出すことができる HTTP サービスのことだと思ってください。

関連情報
----

* restapitutorial.com
* restcookbook.com
* ウィキペディア上の記事「REST」
* REST Architecture
Table Wrapper Box (表ラッパーボックス)
=============================

**表ラッパーボックス** (Table Wrapper Box) は表グリッドボックスの周りに生成されるボックスで、表に表示されるキャプションに必要なスペースを考慮します。絶対位置指定された項目群の包含ブロックが表の場合、このボックスがその項目群の包含ブロックになります。
TTL
===

TTL には以下の意味があります。

* ネットワーク内でパケットが破棄されるまで存在できる時間
* キャッシュの有効期限
ネットワーキング
--------

ネットワーキングでは、パケットに埋め込まれている TTL は通常、そのパケットが破棄されるまでの、ホップ数または有効期限のタイムスタンプとして定義されています。ネットワークを長過ぎる時間行き来したパケットを解放することで、ネットワークの輻輳を回避する手段を提供します。

キャッシング
------

 キャッシングでは、TTL(符号なし 32 ビット整数)は HTTP response header または DNS クエリの一部です。
 リクエスト元がリソースをキャッシュできる期間を秒単位で示します。

詳細情報
----

### 一般知識

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

* IETF の RFC 2181
* IETF の RFC1035
Internet (インターネット)
==================

インターネットは、インターネット・プロトコル群を使用するネットワークの世界的ネットワークです (最も重要な 2 つの プロトコル から、 TCP/IP とも呼ばれています)。

関連情報
----

### インターネットについて学ぶ

* インターネットはどのように動くのか (初心者向けの紹介)
Compile (コンパイル)
===============

コンパイルとは、特定のプログラミング言語を用いて記述されたコンピュータープログラムを他の言語 (普通はコンピューターが実行できるバイナリ言語) を用いて記述された同じプログラムに形を変えることである。コンパイラーはこのタスクを実行するソフトウェアです。時々、このタスクは "アセンブル" や "ビルド" とも呼ばれて、典型的には単なるコンパイルの完了以上のことを示します。例えば、あるバイナリーフォーマットにパッケージするなど。

通常、コンパイラーは C やJava のように人間が理解しやすい高級言語をアセンブリのような CPU が理解できる機械語に変換します。TypeScript を JavaScript にコンパイルするような、同レベル間の言語を翻訳するコンパイラーはトランスパイラやクロスコンパイラーと呼ばれます。これらはプロダクティビティツールと考えられています。

 ほとんどのコンパイラーは、ahead-of-time (AOT) か just-in-time (JIT) で動きます。プログラマーは、たいていコマンドラインか使用している IDE から AOT コンパイラーを起動します。最も有名なコンパイラーである "gcc" はその一例です。
 JIT コンパイラーはたいてい透過的であり、性能のために使用されます。例えばブラウザーの場合、Firefox の SpiderMonkey JavaScript エンジンは組み込み JIT コンパイラーを持っています。これは、ウェブサイトを閲覧中にウェブサイトの JavaScript がより速く実行できるように機械語のコードにコンパイルします。WebAssembly のようなプロジェクトはこれをより良く行えるようにします。

さらに学ぶ
-----

### 一般的な知識

* コンパイラ (Wikipedia)
* GNU Compiler Collection (GCC)
### 学習資料

* Base CS Introduction on Compilers
* A big list of learning material on StackOverflow
Asynchronous （非同期）
==================

**非同期**とは、 2 つ以上の事象が同時に発生したり、関連する複数の事象が互いの完了を待たずに発生したりする概念を指します（前のものが完了するのを待たずに複数の関連するものが発生することもあります）。コンピュータの世界では、「非同期」という言葉は主に 2 つの文脈で使われています。

ネットワークと通信

非同期通信とは、 2 人以上の通信者の間で、それぞれが都合の良いタイミングでメッセージを受信し処理する通信方式です。受信者は、受信直後に処理をする必要はありません。また、問題発生時には受信者が訂正をリクエストしたり問題を処理したりするという了解の下で、メッセージは受信者の確認を待たずに送信されるかもしれません。

人の場合、電子メールは非同期通信の 1 つです。送信者がメールを送信すると、受信者は受信直後ではなく都合の良いタイミングでメッセージを読んで返信します。両者ともに、好きなときに送信や受信を継続でき、お互いにスケジュールを調整する必要はありません。

ソフトウェアが非同期に通信する場合、プログラムは別のソフトウェア（サーバーなど）から情報を要求し、応答を待っている間、他のことをし続けることができます。例えば、 AJAX プログラミングテクニック - 現代のアプリケーションでは XML ではなく JSON が通常使用されていますが、現在では単に "Ajax" と呼ばれています - は、 HTTP を使用してサーバーに比較的少量のデータを要求し、その結果はすぐにではなく利用可能なときに返される仕組みです。

ソフトウェア設計

非同期ソフトウェアの設計は、プログラム中で元のタスクを止めることなく、別のタスクを同時に実行させることを可能にするものです。 2 つ目のタスクが完了した時、合意された仕組みを使い、その情報が元のタスクに通知されます。それにより、元のタスクは、処理が完了し結果が利用可能になったことを把握できるのです。

非同期ソフトウェアを実装するプログラミング・テクニックは数多くあります。学んでみたければ、非同期 JavaScript の記事をご覧下さい。

関連情報
----

* サーバーからのデータの取得 （学習領域）
* 同期
遅延読み込み
======

**遅延読み込み**は、ユーザーが必要とするまでデータ (例: 画像) の読み込みを遅延させる仕組みです。一般的には、ユーザーのスクロール操作によって対象が画面内に表示されるまで読み込みを遅延させます。開発者が正しく実装することにより、Time to interactive (対話時間) を含めページの動作開始に必要なデータを減らすことができます。これによりシームレスなユーザー体験を提供することができ、初期表示に関わるパフォーマンスの向上に役立ちます。

関連情報
----

* Lazy loading
Speed index (スピードインデックス)
========================

**スピードインデックス** (SI) は、ページのコンテンツがどれだけ早く目に見える形で表示されているかを示すページ読み込み性能の指標です。これは、ページの可視部分が表示されるまでの平均時間です。ミリ秒単位で表示され、ビューポートのサイズに依存し、スコアが小さいほど良いことを表します。

![SpeedIndex の計算](/ja/docs/Glossary/Speed_index/speedindex.png)

計算は、ページが視覚的に完全になるまでの 100ms 間隔ごとに、ページの何パーセントが視覚的に完全であるかを計算します。全体的なスコア、アバブ・ザ・フォールドの指標は、画面の視覚的に完了していないパーセント値を 1/10 秒間隔で計測した値の合計です。

関連情報
----

* ウェブの性能について学ぶ
IP Address (IPアドレス)
===================

IP アドレスはネットワークに接続された、インターネットプロトコル(IP) を使うすべての端末に割り当てられる番号です。

"IP アドレス" は IPv6 がもっと広がっていくまでは、典型的にはまだ 32-ビット IPv4 アドレスを参照します。

詳細情報
----

### 一般知識

* Wikipedia の IPアドレス
UUID
====

**Universally Unique Identifier** (**UUID**) とは、あるリソースを、同じ種類の他のすべてのリソースの中から一意に識別するために使用されるラベルです。

 コンピューターシステムは、とても大きい桁の乱数を使って UUID をローカルで生成します。
 論理的には、 ID はグローバルには一意ではないかもしれませんが、重複の確率はほとんどゼロに等しいです。
 もしシステムが、本当に完全な一意の ID を必要とするなら、中央機関によって割り当てるべきかもしれません。

 UUID は 128 ビットの値で、標準的には `123e4567-e89b-12d3-a456-426614174000` (ハイフンで 5 つに区切られた 16 進数の文字列) 形式の 36 文字の文字列として表されます。
 計算される方法がわずかに異なるバージョンも多数存在します (例えば、時間を表す情報を含めるなど) 。

正式な定義はこちら: RFC4122: A Universally Unique IDentifier (UUID) URN Namespace.

関連項目
----

* UUID - Wikipedia
* `Crypto.randomUUID()`
Public-key cryptography (公開鍵暗号)
===============================

公開鍵暗号 — または*非対称暗号* — は、対となる鍵による暗号システムです。一方の鍵によって行われた変換は、もう一方の鍵によってしか元に戻せません。一方の鍵 (*秘密鍵*) は秘匿しておき、もう一方の鍵は公開します。

デジタル署名で使用する場合、署名の生成に秘密鍵が使用され、検証に公開鍵が使用されます。つまり、誰でも署名を検証することができますが、対応する秘密鍵の所有者のみが署名を生成することができます。

暗号化に使用する場合、暗号化に公開鍵が使用され、復号に秘密鍵が使用されます。これによって、公開鍵暗号システムは暗号化の鍵を公開することができる点で共通鍵暗号より有利です。秘密鍵の所有者に向けたメッセージを誰でも暗号化することができますが、秘密鍵の所有者のみが復号することができます。ただし、ふつうは共通鍵暗号よりもずっと低速で、暗号化できるメッセージの大きさも鍵の大きさに比例するので、長いメッセージには向きません。

結果的に、暗号化システムはメッセージの暗号化には共通鍵暗号を使用し、共通鍵を暗号化するために公開鍵を使用します。この組み合わせは両方のシステムの利点を与えることができます。

よく使われる公開鍵暗号システムには、 RSA (署名と暗号化の両方)、 DSA (署名用)、 Diffie-Hellman (鍵の合意用) などがあります。

* MDN 用語集
    + 共通鍵暗号
* Web Crypto API
Latency(レイテンシー)
===============

**レイテンシー (遅延時間)** とは要求されたリソースが目的地に到達するまでにかかるネットワーク時間のことです。低レイテンシーとは良好な状態で、遅延時間がほとんどないか、またはまったくないことを意味します。高レイテンシーは悪い状態で、要求されたリソースが目的地に到達するまでに長い時間がかかることを意味します。

レイテンシーはあらゆるデータフローが要因となり得ますが、ネットワーク遅延 (データのパケットが送信元から送信先まで移動するのにかかる時間) とメディアコーデック遅延 (送信元のデータがエンコードまたはデコードされ、結果データが消費者に届くまでにかかる時間) が最も一般的な要因として説明されます。

理解を深める
------

* レイテンシーを理解する (en-US)
SQL Injection (SQLインジェクション)
===========================

SQL インジェクションはユーザーからの入力の検証が十分でない・行っていないウェブアプリケーションに対して利用されます。悪意のあるクラッカーは、SQL コマンドをウェブアプリケーションに渡し、バックエンドのデータベースにそれを実行させて攻撃します。

SQL インジェクションはデータベースへの不正アクセスを行ったり、データベースから直接情報を取得することが可能です。多くのデータ侵害は SQL インジェクションによるものです。

![](/ja/docs/Glossary/SQL_Injection/sql_inj_xss.gif)

攻撃動作
----

![](/ja/docs/Glossary/SQL_Injection/updates_loginscreen.png)

Username と Password を入力した後、GUI の裏では次の SQL クエリが実行されます。
```

"SELECT Count(*) FROM Users WHERE Username=' " + txt.User.Text+" ' AND Password=' "+ txt.Password.Text+" ' ";
```


例えばユーザーが Username に"admin"、Password に"passwd123"を入力し、Log in ボタンをクリックします。すると以下の SQL クエリが実行されます。
```

"SELECT Count(*) FROM Users WHERE Username=' admin ' AND Password=' passwd123 ' ";
```


入力した認証情報が正しければユーザーはログインが許可されます。このようにとてもシンプル(にして脆弱)な構造です。攻撃者はこの脆弱な構造を使って不正アクセスを行います。

攻撃者は下記のようなシンプルな魔法の文字列を入力します。

**Username: *admin***

**Password: *anything 'or'1'='1***

そして log in ボタンをクリックすると、以下の SQL クエリが実行されます。
```

"SELECT Count(*) FROM Users WHERE Username=' admin ' AND Password=' anything 'or'1'='1 ' ";
```


上記のクエリの Password 部分をよく見てみましょう。
```

Password=' anything 'or'1'='1 '
```


パスワードは"anything"ではないので、Password='anything'の結果は偽になります。ですが'1'='1'は真になります。そして OR 演算子によって、(偽 OR 真)は真になります。結果としてうまく認証を回避できてしまいました。このような単純な文字列(魔法の文字列)によって、データベース全体が危険にさらされます。

対策
--

ユーザーの入力から SQL クエリを実行する前に、ユーザーの入力に以下のような変更を加えてみましょう。
```

$id = $_GET['id']

(1) $id = stripslashes($id)

(2) $id = mysql_real_escape_string($id)
```


(1) によって、入力文字内のシングルクォート (') はダブルクォート (")に置換されて、(2) によって、すべての (') の前に (/)が追加されます。改訂された魔法の文字列は、認証回避に失敗して、データベースは安全なままに保たれています。

関連項目
----

### 一般知識

* Wikipedia の SQL インジェクション
* Explanation of SQL injection on OWASP (Open Web Application Security Project)
World Wide Web
==============

*World Wide Web* は、一般に **WWW**, **W3**, もしくは **ウェブ** と呼ばれ、インターネット を通じて公開されたウェブページが相互に接続されたシステムのことです。ウェブはインターネットと同義ではありません。ウェブは、インターネット上に構築された多くのアプリケーションの中の一つなのです。

ティム・バーナーズ=リー卿は、World Wide Web として知られることとなったアーキテクチャを提唱しました。彼は、1990 年に世界初のウェブ サーバー とウェブ ブラウザー、そしてウェブページを CERN 物理学研究所の自身のコンピューター上に構築しました。1991 年に、彼は alt.hypertext ニュースグループで自身の成果を公表しました。ウェブが世界で初めて公になった瞬間でした。

今日、「ウェブ」として知られているシステムは、いくつかの構成要素から成り立っています。

* **HTTP** プロトコルがサーバーとクライアント間のデータ転送を管理しています。
* ウェブの構成要素へアクセスするため、クライアントは **URL** (uniform resource location) もしくは (以前は Universal Document Identifier (UDI) と呼ばれていた) URI (uniform resource identifier) と呼ばれる固有の識別子を提供します。
* **HTML** (hypertext markup language) は、ドキュメントを公開する最も一般的な形式です。

リンクする、もしくは ハイパーリンク を介してリソースを結びつけることは、関連するドキュメントをひとまとめに識別できるようにする、ウェブの特徴的な概念です。

ウェブを発明した後すぐに、ティム・バーナーズ=リー卿は、ウェブを標準化し、さらに開発を進めるべく、W3C (World Wide Web Consortium) を設立しました。この協会は、ウェブブラウザーの開発者、政府団体、研究者および大学などの主要なウェブの利益団体で構成されています。その使命には、教育や地域社会への貢献も含まれています。

関連情報
----

### ウェブについて学ぶ

* Learn the Web
* Web literacy map (ウェブ開発に必要なスキル項目)
### 基礎知識

* Wikipedia 上の World Wide Web
* W3C のウェブサイト
Expando
=======

expando プロパティは、 JavaScript によって DOM ノードに追加されたプロパティであり、 DOM オブジェクトの仕様書に含まれていないものです。


```js
window.document.foo = 5; // foo は expando
```


この用語はオブジェクトの本来の目的以外に追加されたプロパティにも適用されます。例えば、配列に追加された非数値型の名前つきプロパティなどにも用います。
Submit button (送信ボタン)
=====================

**送信ボタン** (submit button) は HTML の要素で、 `<form>` を送信するために使用することができるものです。ネイティブの送信ボタン要素は次の通りです。

* `<button>`（既定の `type` は `"submit"`）
* `<input type="submit">`
* `<input type="image">`

フォームを送信するだけでなく、送信ボタンはフォームの動作や送信されるデータに影響を与えることができます。

フォームの動作の上書き
-----------

送信ボタンは、さまざまな属性によってフォームを送信する動作を上書きすることができます。

* `formaction`: フォームの `action` 属性を上書きします。
* `formenctype`: フォームの `enctype` 属性を上書きします。
* `formmethod`: フォームの `method` 属性を上書きします。
* `formnovalidate`: フォームの `novalidate` 属性を上書きします。
* `formtarget`: フォームの `target` 属性を上書きします。
フォームデータ項目
---------

送信ボタンが `<button>` または `<input type="submit">` であり `name` 属性がある場合、フォームデータにはその `name` と `value` の項目が含まれます。

送信ボタンが `<input type="image">` である場合、フォームデータはユーザーがクリックした X および Y 座標の項目が入ります（例えば `x=100&y=200` または `buttonName.x=123&buttonName.y=234`）。

関連情報
----

* 基本的なネイティブフォームコントロール
* フォームデータの送信
CardDAV
=======

**CardDAV**（vCard Extension to WebDAV）は、IETF によって標準化されたプロトコルであり、サーバー上で連絡先情報をリモートアクセスまたは共有するために使用されます。

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

### 一般知識

* Wikipedia 上の CardDAV
### 技術文書

* RFC 6352: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV)
Database
========

**データベース** は、データの整理や収集を行い保存をするシステムです。データベースを使うことで検索、構造化、拡張などの作業を簡単に行うことができます。

ウェブ開発で使用されるほとんどのデータベースはリレーショナルデータベース (RDBMS) を使用してデータを整理し、SQL と呼ばれるプログラミング言語を使用します。ただし、一部のデータベースは NoSQL と呼ばれる非リレーショナルベースを使用しています。このデータベースはデータを整理せず収集のみを行います。

有名な RDBMS には、*MySQL* (またはそのフォークである *MariaDB*)、*SQL Server* および*Oracle Database* があります。一方、有名な NoSQL の例としては、*MongoDB*、*Cassandra*、*Redis* などがあります。

ブラウザー上で動く IndexedDB と呼ばれる独自データベースシステムもあります。

1. データベース (Wikipedia)
    1. IndexedDB
    2. SQL
SIMD
====

SIMD (「シムディー」と発音します) はコンピュータ・アーキテクチャの分類 (フリンの分類) の一つである **Single Instruction/Multiple Data** (単一命令/多重データ) を略したものです。SIMD によって多重データ列に対しデータレベルでの並列処理を一回の演算で行うことができ、これにより 3D グラフィック、動画処理、物理演算、暗号処理や様々な分野の計算パフォーマンスを改善できます。

処理やデータ集合に並列処理を使わない逐次的アーキテクチャの SISD についても参照ください。

1. 一般知識
    1. Wikipedia 上の記事「SIMD」
2. 用語集
    1. SIMD
    2. SISD
DNS
===

**DNS (Domain Name System)** は、インターネットに接続されたリソースのための階層化された分散型の名前付けシステムです。 DNS はドメイン名のリストを、それらに関連付けられた IP アドレスなどのリソースとともに管理しています。

DNS の最も顕著な機能は、人間に優しいドメイン名 (mozilla.org など) を数字のIP アドレス (151.106.5.172 など) に変換することで、ドメイン名を適切な IP アドレスに対応付けするこのプロセスは **DNS ルックアップ**として知られています。対照的に、**逆引き DNS ルックアップ** (rDNS) は、 IP アドレスに関連付けられたドメイン名を決定するために使用されます。

詳細情報
----

### 一般知識

* ドメイン名を理解する
* Wikipedia の Domain Name System
IDL (インターフェイス記述言語)
==================

**IDL** (*Interface Description Language*、インターフェイス記述言語) は、特定のプログラミング言語とは別にオブジェクトのインターフェイスを指定するために使用される汎用言語です。

コンテンツ属性と IDL 属性
---------------

HTML では、ほとんどの属性に二つの側面があります。**コンテンツ属性**と **IDL 属性**です。

コンテンツ属性は、コンテンツ (HTML コード) から設定したままの属性で、 `element.setAttribute()` で設定したり、 `element.getAttribute()` で取得したりすることができます。コンテンツ属性は、期待される値が整数でなければならない場合でも、常に文字列です。例えば、コンテンツ属性を使用して `<input>` 要素の `maxlength` を 42 に設定するには、その要素で `setAttribute("maxlength", "42")` を呼び出す必要があります。

IDL 属性は JavaScript のプロパティとしても知られています。これらは、 `element.foo` のような JavaScript プロパティを使って読み込んだり、設定したりすることができる属性です。 IDL 属性は、値を取得したときに値を返すために、その下にあるコンテンツ属性を常に使用しようとしています (しかし、変換するかもしれません) し、設定したときにコンテンツ属性に何かを保存しようとしています。言い換えれば、 IDL 属性は、本質的にはコンテンツ属性を反映します。

ほとんどの場合、 IDL 属性は実際に使われている通りの値を返します。例えば、 `<input>` 要素の既定の `type` は "text" なので、 `input.type="foobar"` と設定すると、 `<input>` 要素の型は (外観と動作において) text になりますが、コンテンツ属性の "type" の値は "foobar" になります。しかし、IDL 属性 `type` は文字列 "text" を返します。

IDL 属性は必ずしも文字列とは限らず、例えば `input.maxlength` は数値 (signed long) です。 IDL 属性を使用する際には、希望する型の値を読み込んだり設定したりしますので、 `input.maxlength` は常に数値を返すでしょうし、 `input.maxlength` を設定すると、数値を要求します。他の型を渡した場合、型変換のための標準的な JavaScript のルールで指定されているように、自動的に数値に変換されます。

IDL 属性は、 unsigned long、 URL、 論理型など、他の型を反映することができます。残念ながら、明確なルールはなく、 IDL 属性が対応するコンテンツ属性と連動してどのように振る舞うかは、属性に依存します。ほとんどの場合、仕様書で定められた規則に従いますが、そうでない場合もあります。 HTML の仕様は、これを可能な限り開発者に優しいものにしようとしていますが、様々な理由 (主に歴史的な理由) で、属性によっては (例えば `select.size` など) 奇妙な振る舞いをすることもありますので、それらが正確にどのように振る舞うかを理解するには仕様書を読んでください。

関連情報
----

* ウィキペディアのインタフェース記述言語
* HTML 属性リファレンス
* インターフェイス定義言語（英語）
ラスターイメージ (Raster Image)
=======================

***ラスター画像*** (raster Image) とは、ピクセルのグリッドとして定義されている画像です。ビットマップ (bitmaps) としても参照されます。JPEG、PNG、GIF、ICO は、ウェブでよく使われるラスター画像の形式です。

普通ではラスター画像のファイルは 1 つの解像度のみ含まれていますが favicon でよく使用される ICO、CUR フォーマットと CSS カーソル画像には複数のサイズが含まれている場合があります。

関連情報
----

* ベクター画像
Distributed Denial of Service
=============================

**Distributed Denial-of-Service**（**DDoS**、分散型サービス拒否）は、サーバー資源を襲って正当なユーザーをブロックするために、多数の侵害されたシステムが単一のターゲットを攻撃する攻撃です。

通常、多くの人が多くのボットを使用して、銀行やクレジットカード決済ゲートウェイなどの注目を浴びるウェブサーバーを攻撃します。DDoS は、コンピューターネットワークと CPU 資源管理に関係します。

典型的な DDoS 攻撃では、攻撃者は 1 つのコンピューターシステムの脆弱性を悪用して DDoS マスターにすることから始めます。ボットマスターとも呼ばれる攻撃マスターは、マルウェアで他の脆弱なシステムを識別し、感染させます。最終的に、攻撃者は、指定されたターゲットに対して攻撃を開始するよう被制御マシンに指示します。

DDoS 攻撃には、ネットワーク中心の攻撃（帯域幅を使用してサービスに負荷をかける）とアプリケーション層の攻撃（アプリケーションの呼び出しでサービスやデータベースを過負荷にする）の 2 種類があります。ターゲットへのデータのオーバーフローにより、ターゲットマシンが飽和し、正当なトラフィックに応答しないか、または非常に遅く応答します（そのため、「サービス拒否」という名前）。感染したコンピューターの所有者は、通常、コンピューターが侵害されたことを知らず、サービスの喪失を被ります。

侵入者の制御下にあるコンピューターは、ゾンビまたはボットと呼ばれます。同時感染したコンピューターのネットワークは、ボットネットまたはゾンビ軍として知られています。カスペルスキー研究所とシマンテックのどちらも、スパム、ウイルス、ワームなどではなく、ボットネットをインターネットセキュリティにとって最大の脅威と認識しています。

US-CERT（米国コンピューター緊急時対応チーム、United States Computer Emergency Readiness Team の略）は、サービス拒否攻撃の症状を次のように定義しています。

* 異常に遅いネットワークパフォーマンス（ファイルを開く、またはウェブサイトにアクセスする）
* 特定のウェブサイトの利用不可能
* どのウェブサイトにもアクセスできない
* 受信した迷惑メールの数の劇的な増加 — （この種類の DoS 攻撃はメールボムと見なされます）
* 無線または有線のインターネット接続の切断
* ウェブやその他のインターネットサービスへの長期的なアクセスの拒否
より詳しく知る
-------

### 一般知識

* Wikipedia 上の DoS攻撃
Vendor Prefix (ベンダー接頭辞)
=======================

ブラウザーベンダー (提供元) は、時に試験的または非標準な CSS プロパティおよび JavaScript API に接頭辞を追加することがあります。これにより、開発者は標準化プロセスの中で、理論上は、ウェブ開発者のコードを壊すことなく新しいアイデアを試すことができます。開発者は、ブラウザーの振る舞いが標準化されるまで、接頭辞を外したプロパティを導入するのを待つべきです。

**メモ:** ブラウザーベンダーは、実験的な機能にベンダー接頭辞をつけることをやめるようになってきています。ウェブ開発者は、実験的な機能であるにもかかわらず、実運用のウェブサイトで使用し続けてきました。これはブラウザーベンダーが互換性を維持して、新しい機能を導入することを困難にしてしまいました。これはシェアの小さなブラウザーにとっても有害で、有名なウェブサイトを読み込むために他のブラウザーの接頭辞を追加せざるを得ない結果になりました。

最近は、実験的な機能をユーザーが制御するフラグや設定によって隠して追加するようにし、より早く安定状態になるようにより小さな仕様を作成する傾向があります。

CSS の接頭辞
--------

主要なブラウザーは、以下の接頭辞を使用しています。

* `-webkit-` (Chrome, Safari, 新しいバージョンの Opera, ほぼすべての iOS ブラウザー (Firefox for iOS を含む)。基本的に WebKit ベースのブラウザーすべて)
* `-moz-` (Firefox)
* `-o-` (WebKit 導入前の古い Opera)
* `-ms-` (Internet Explorer と Microsoft Edge)

使用例:
```

-webkit-transition: all 4s ease;
-moz-transition: all 4s ease;
-ms-transition: all 4s ease;
-o-transition: all 4s ease;
transition: all 4s ease;
```

API の接頭辞
--------

歴史的に、ベンダーは実験的な API にも接頭辞を使用してきています。インターフェイス全体が実験的な場合は、インターフェイス名に接頭辞が付きます (しかし、その中のプロパティやメソッドには付きません)。標準化されたインターフェイスに実験的なプロパティやメソッドが追加された場合は、それぞれのメソッドやプロパティに接頭辞が付きます。

### インターフェイスの接頭辞

インターフェイス名の接頭辞は大文字です。

* `WebKit` (Chrome、Safari、新しいバージョンの Opera、ほぼすべての iOS ブラウザー (Firefox for iOS を含む)。基本的に WebKit ベースのブラウザーすべて)
* `Moz` (Firefox)
* `O` (WebKit 導入前の古い Opera)
* `MS` (Internet Explorer と Microsoft Edge)
### プロパティとメソッドの接頭辞

プロパティやメソッドの接頭辞は小文字です。

* `webkit` (Chrome、Safari、新しいバージョンの Opera、ほぼすべての iOS ブラウザー (Firefox for iOS を含む)。基本的に WebKit ベースのブラウザーすべて)
* `moz` (Firefox)
* `o` (WebKit 導入前の古い Opera)
* `ms` (Internet Explorer と Microsoft Edge)

使用例:


```js
var requestAnimationFrame =
  window.requestAnimationFrame ||
  window.mozRequestAnimationFrame ||
  window.webkitRequestAnimationFrame ||
  window.oRequestAnimationFrame ||
  window.msRequestAnimationFrame;
```

理解を深める
------

### 一般知識

* Wikipedia の Vendor prefix の記事　【訳注：ウィキペディア日本語版には該当する節がありません】
CSS
===

**CSS** (Cascading StyleSheets) は ブラウザー でウェブページの見た目を調整する宣言型の言語です。ウェブブラウザーは、指定された要素を適切に表示するために CSS スタイル宣言を適用する働きを持ちます。スタイルの宣言には、ウェブページの見た目を決定するプロパティとプロパティの値が含まれています。

CSS は HTML と JavaScript と合わせて、核となる 3 つのウェブ技術のうちの 1 つです。CSS は普通、HTML 要素 のデザインをしますが、SVG や XML のような他のマークアップ言語でも使用できます。

1 つの CSS のルールは、セレクタ と、関連した プロパティ (en-US) がセットになっています。以下の例は、黄色い文字と黒い背景を HTML の各段落要素に適用するものです:


```css
/\* "p" セレクタは、そのルールによってドキュメント内のすべての段落に作用することを表します。\*/
p {
  /\* "color" プロパティは文字の色を定義するもので、ここでは黄色に設定しています。\*/
  color: yellow;

  /\* "background-color" プロパティは背景の色を定義するもので、ここでは黒色に設定しています。\*/
  background-color: black;
}
```


"カスケーディング" 機能は、ルールを参照して、ページの見た目を変更するために、セレクタがどう優先的に取り扱われるか決定します。カスケーディングはとても重要な機能で、複雑なウェブサイトでは数千もの CSS ルールがあります。

詳細
--

### 一般知識

* CSS を学ぶ
* Wikipedia の CSS 記事
### 技術的な文書

* MDN 上の CSS ドキュメント
* The CSS Working Group current work
PDF
===

**PDF** (Portable Document Format) は、特定のソフトウェア実装、ハードウェアプラットフォーム、オペレーティングシステムに依存せずにドキュメントを共有するためのファイル形式です。PDF は、印刷文書のデジタル画像を提供し、印刷したとき同じ外観を保ちます。

詳細情報
----

### 一般知識

* Wikipedia の PDF
Dominator (ドミネーター)
==================

グラフ理論では、ルートノードからノード B へのすべてのパスがノード A を通過する場合、ノード A はノード B をドミネート (支配) すると言います。

この概念はガベージコレクションにとって重要です。 なぜなら、B は A を介してのみ到達可能であるということです。 ガベージコレクターが A に到達できず、再利用可能であると判断した場合、B も到達不能で、したがって、A が支配するオブジェクトは、A の保持するサイズに寄与します。 つまり、A 自身が解放された場合に解放される可能性のあるメモリの合計量です。

詳細情報
----

### 一般知識

* Dominator (Wikipedia、英語)
### 技術リファレンス

* ドミネーター
* ガベージコレクション
Abstraction (抽象化)
=================

コンピュータープログラミングにおける抽象化とは、複雑なソフトウェアシステムにおいて、複雑さを軽減し、また効率的な設計と実装を可能にする方法です。これはシステムの技術的な複雑さを、API の背後に隠します。

データ抽象化の利点
---------

* ユーザーが低レベルコードを書くのを避けるのに役立つ。
* コードの重複を避けて再利用性を上げる。
* クラスの内部実装をユーザーに影響することなく独立して変更できる。
* 重要な詳細情報だけがユーザーに提供されているため、アプリケーションやプログラムのセキュリティ向上に役立つ。
例
-


```js
class ImplementAbstraction {
  // method to set values of internal members
  set(x, y) {
    this.a = x;
    this.b = y;
  }

  display() {
    console.log("a = " + this.a);
    console.log("b = " + this.b);
  }
}

const obj = new ImplementAbstraction();
obj.set(10, 20);
obj.display();
// a = 10
// b = 20
```

詳細情報
----

### 基礎知識

* Wikipedia 上の記事 「抽象化\_(計算機科学)」
UX
==

**UX** とは、User eXperience (ユーザーエクスペリエンス、ユーザー体験) の頭文字語です。UX はユーザーとシステムとの関係を考える研究で、システムがユーザーから見て使いやすいものにすることを目的としています。

ここで言うシステムとは、どんな種類の製品やアプリケーションにも当てはまります。UX の研究が、たとえばウェブページ上に使われると、ユーザーがページを理解しやすくなったり、別のエリアに簡単に移動できるようになったり、よくあるタスクを実行しやすくなったり、そうした操作をする時の抵抗を少なくしたりすることができます。

さらに学ぶには
-------

### 一般的な知識

* ユーザーエクスペリエンス - Wikipedia
Tree shaking
============

**Tree shaking** とは実行されないコードを削除することで、JavaScript の文脈で利用される用語です。

Tree shaking は ES2015 の import 文と export 文を利用して、エクスポートされたコードが他の JavaScript ファイルで利用されているかどうかを判定します。

モダンな JavaScript アプリケーションの開発では、webpack や Rollup のようなモジュールバンドラーが複数の JavaScript ファイルを 1 つにまとめられます。この際に tree shaking が行われます。Tree shaking は、コードの構造を整理してファイルサイズを小さくできる、といった点で製品としてリリースする前の重要な処理となっています。

詳細情報
----

#### 一般的な知識

* "Benefits of dead code elimination during bundling" in Axel Rauschmayer's book: "Exploring JS: Modules"

#### 技術的なレファレンス

* Tree shaking implementation with webpack
Cache(キャッシュ)
============

**キャッシュ** (ウェブキャッシュまたは HTTP キャッシュ) は、特定の条件を満たす限り、後続の HTTP リクエストに使用できるように一時的に HTTP 応答を保存するコンポーネントです。

詳細情報
----

### 一般知識

* Wikipedia 上の記事: キャッシュ
WebSockets
==========

*WebSocket* は、サーバーとクライアント間の永続的な TCP 接続を可能にするプロトコルで、任意のタイミングでデータをやり取りできます。

どのクライアント、サーバーアプリケーションでも WebSocket を使用できますが、主にウェプブラウザーとウェブサーバーで使用できます。 WebSocket を通じて、サーバーはクライアントのリクエストなしにデータを渡せるため、動的なコンテンツ更新が可能です。

詳細情報
----

### 一般知識

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

* MDN の WebSocket リファレンス
### 関連記事

* WebSocket クライアントアプリケーションの記述
* WebSocket サーバーの記述 (en-US)
Polymorphism (多態性)
==================

Polymorphism (多態性)とは複数のデータ型を 1 つのインターフェイスにまとめた表現です。

例えば、整数型、浮動小数点型、倍精度浮動小数点型は暗黙的な多態性を持ちます：データ型の違いにもかからず、その３つは足し算、引き算、掛け算、などができます。

OOPの場合は、クラス にデータとコードの責務を負わせて、各クラスがいかなるオブジェクトでも(いったん呼び出されると)適切に動作するそれぞれの関数を持っていることで、多態性を達成することができます。

関連項目
----

### 一般知識

* Wikipedia によるポリモーフィズム
Proxy server (プロキシサーバー)
=======================

**プロキシサーバー**は、インターネットのさまざまなネットワークを介してナビゲートするときに使用される中間プログラムまたはコンピュータです。それらは World Wide Web 上のコンテンツへのアクセスを容易にします。プロキシはリクエストに介入し、レスポンスを返します。(例えば、キャッシュの場合) リクエストを転送することができ、それを変更することができます (例えば、2 つのネットワーク間の境界でヘッダを変更する)。

プロキシは、ユーザーのローカルコンピューター上、またはユーザーのコンピューターとインターネット上の宛先サーバーの間のどこにでも置くことができます。 一般に、プロキシサーバーには 2 つの主要な種類があります。

* インターネット上の任意の場所間のリクエストを処理する**転送プロキシ**。
* インターネットからの要求を内部ネットワークのサーバーに転送する**リバースプロキシ**。
詳細を知る
-----

* Proxy servers and tunneling
* Proxy server on Wikipedia
Loop (ループ)
==========

ループは、コンピュータプログラミングにおいて、一定の条件に遭遇するまで継続的に繰り返される一連の命令です。例えば、データ項目を取得して加工しながら、カウンターが所定の値に達するなどいくつかの条件をチェックするというような処理です。

例
-

### for ループ

#### 構文
```

for (文1; 文2; 文3){
 実行コードブロック
}
```


* 文 1 は、コードブロックが実行される前に一度実行されます。
* 文 2 は、コードブロックを実行するのに必要な条件を定義します。
* 文 3 は、コードブロックが実行されるたびに実行されます。

#### 例


```js
for (var i = 0; i < 10; i++) {
  console.log(i);
}
//このループは数字の 0-9 の数字を表示し、条件に合う (i = 10) と停止します
```


上記の例では、構文は以下のようになっています。

* 文 1 (var i = 0) はループの変数を設定しています。
* 文 2 (i < 10) はループの条件を設定しています。
* 文 3 (i++) はコードブロックが実行されるたびに i の値を増加させます。
### while ループ

#### 構文
```

while (条件){
 実行コードブロック
}
```


* このコードブロックは条件が真である限り、継続します。

#### 例


```js
var i = 0;
while (i < 5) {
  console.log(i);
  i++;
}
//このループは 0-4 の数字を表示し、条件 (i >=5) が偽になると停止します
```


上記の例では、構文は以下のようになっています。

* コードブロックは変数 (i) が 5 未満である限り、実行が継続します。

1. General Knowledge
    1. Wikipedia の 制御構造
2. MDN Web Docs 用語集
    1. ループ
MVC
===

**MVC**（Model-View-Controller、モデル-ビュー-コントローラ）は、ソフトウェア設計のパターンです。 これは、ソフトウェアのビジネスロジックとディスプレイの間の分離を強調します。 この「関心の分離」は、より良い労働の分業と改善されたメンテナンスを提供します。 MVVM（Model-View-Viewmodel、モデル-ビュー-ビューモデル）、MVP（Model-View-Presenter、モデル-ビュー-プレゼンター）、MVW（Model-View-Whatever、モデル-ビュー-何でも）などの他のデザインパターンも MVC に基づいています。

MVC のソフトウェア設計パターンの 3 つの部分は、次のように記述できます。

1. モデル: データとビジネスロジックを管理します。
2. ビュー: レイアウトとディスプレイを扱います。
3. コントローラ: コマンドをモデルとビューの部分にルーティングします。
より詳しく知る
-------

### 一般知識

* Wikipedia 上の MVC
* Wikipedia 上の 関心の分離
### MVC アーキテクチャ

* MVC アーキテクチャ
Attribute (属性)
==============

**属性** (attribute) 属性は要素を拡張し、動作を変更したりメタデータを提供したりします。

属性は常に `name="value"` の形式を取ります (属性の識別子に関連付けられた値が続きます)。

等号や値のない属性を見かけることもあります。これは HTML では空文字列を、 XML では属性名を提供する略記法です。


```html
<input required />
<!-- is the same as… -->
<input required="" />
<!-- or -->
<input required="required" />
```

詳細情報
----

### 技術リファレンス

* HTML 属性リファレンス
* グローバル属性
ECMA
====

**Ecma International**（正式名：欧州電子計算機工業会; European Computer Manufacturers Association）は、コンピュータ・ハードウェアや通信、プログラム言語の標準規格を策定する非営利組織です。

ウェブの世界では、 JavaScript 言語の中核的規格である ECMA-262 規格（別名： ECMAScript ）を維持・管理する組織として有名です。

詳細情報
----

* Wikipedia 上の記事「Ecmaインターナショナル」
* Ecma International ウェブサイト