【この訳に特有な表記規約】
◎表記記号1. 序論
`~ambient光~sensor^cite( `Ambient Light Sensor^en )は、 `汎用~sensor~API^cite( `Generic Sensor API^en ) `GENERIC-SENSOR$r を拡張して,[ ~deviceの~main光~検出器により検出された~ambient光~level ]についての情報を~lux単位で供する。 ◎ The Ambient Light Sensor extends the Generic Sensor API [GENERIC-SENSOR] to provide information about ambient light levels, as detected by the device’s main light detector, in terms of lux units.
1.1. 視野
この文書は、 次を要求する`利用事例@#usecases-requirements$用に設計された~APIを指定する ⇒ 低-待時間で — 場合によっては,高-~frequencyで標本化された — 木目細かな照度~data ◎ This document specifies an API designed for use cases which require fine grained illuminance data, with low latency, and possibly sampled at high frequencies.
次のような共通的な利用事例は、 この~APIの視野から外れる ⇒ ~web~pageを[ ~contrast~level/`選好される色~scheme$ ]に則って~styleすることは,少数の照度~値に依拠しており、[ ~deviceにて測定された~ambient光~level ]は,それらの値に波及し得るが、 それは,次により最良に~serveされる ⇒ ~CSS`媒体~特能$[ `prefers-contrast$d, `prefers-color-scheme$d ] `MEDIAQUERIES-5$r および, それに付随している `matchMedia()$m ~API `CSSOM-VIEW-1$r ◎ Common use cases relying on a small set of illuminance values, such as styling webpages according to contrast level or preferred color scheme that may be influenced by a device’s measured ambient light level are best served by the the prefers-contrast and prefers-color-scheme CSS media features [MEDIAQUERIES-5] as well as the accompanying matchMedia API [CSSOM-VIEW-1] and are out of scope of this API.
注記: `MEDIAQUERIES-5$r 仕様は,[ ~ambient光の読取りに もっと直に束ねられていた `light-level^d 媒体~特能 ]を包含していたが、 それは,より高~levelな[ `prefers-color-scheme^d, `prefers-contrast^d ]媒体~特能への支持を受けて,その仕様から`落とされた@https://github.com/w3c/csswg-drafts/commit/f5b663c27d5a2715239633f4916880563969d770$ 。 ◎ Note: The [MEDIAQUERIES-5] specification used to contain a light-level media feature that was more directly tied to ambient light readings. It has since been dropped from the specification in favor of the higher-level prefers-color-scheme and prefers-contrast media features.
2. 例
この単純な例では、 ~ambient光~sensorは,既定の環境設定で作成される。 新たな`~sensor読取り$が可用になり次第,~consoleに~printされる。 ◎ In this simple example, ambient light sensor is created with default configuration. Whenever a new reading is available, it is printed to the console.
const %sensor = new AmbientLightSensor(); %sensor.onreading = () => console.log(%sensor.illuminance); %sensor.onerror = %event => console.log(%event.error.name, %event.error.message); %sensor.start();
この例では、 ~ambient光`~sensor読取り$から,~ISOspeed 100 における露光~値(EV)を計算する。 まず、 ~ambient光`~sensor読取り$に~accessする許可は,~UAにあるかどうか検査する。 次に、 `illuminance$m 値を最も近い露光~値に変換する。 ◎ In this example, the exposure value (EV) at ISO 100 is calculated from the ambient light sensor readings. Initially, we check that the user agent has permissions to access ambient light sensor readings. Then, the illuminance value is converted to the closest exposure value.
navigator.permissions.query({ name: 'ambient-light-sensor' }).then(%result => { if (%result.state === 'denied') { console.log('~ambient光~sensorを利用する許可は否認されました。'); return; } const %als = new AmbientLightSensor({frequency: 20}); %als.addEventListener('activate', () => console.log('EV は今から測定できます。')); %als.addEventListener('error', %event => console.log(``^~error: ${%event.error.name}``^)); %als.addEventListener('reading', () => { // 既定の~ISOspeed値 const %ISO = 100; // 入射光較正定数 const %C = 250; let %EV = Math.round(Math.log2((%als.illuminance * %ISO) / %C)); console.log(``^~露光~値 (EV) : ${%EV}``^); }); %als.start(); });
この例は、 ~ambient光`~sensor読取り$を,作業場に推奨される光~levelにどう対応付けるかをデモる。 ◎ This example demonstrates how ambient light sensor readings can be mapped to recommended workplace light levels.
const %als = new AmbientLightSensor(); %als.onreading = () => { let %str = luxToWorkplaceLevel(%als.illuminance); if (%str) { console.log(``^${%str}用に相応しい光~levelです:``^); } }; %als.start(); function luxToWorkplaceLevel(%lux) { if (20 <= %lux && %lux < 100) { return '公共区域, 短い訪問'; } else if (100 <= %lux && %lux < 150) { return 'たまに遂行される視覚的な~task'; } else if (150 <= %lux && %lux < 250) { return '簡単な事務作業, 授業, 居宅, 劇場'; } else if (250 <= %lux && %lux < 500) { return '通常の事務作業, 日用品店, 実験室'; } else if (500 <= %lux && %lux < 1000) { return '製作所, 絵描き, 食料品店'; } else if (1000 <= %lux && %lux < 5000) { return '製図作業, 低~contrastな視覚的な~task'; } return; }
3. ~security/~privacyの考慮点
◎追跡路 ~ambient光~sensorは、 ~device環境~近くの照明~条件について情報を供する。 これは、 次に挙げる~privacy~riskを含み得る: ◎ Ambient Light Sensor provides information about lighting conditions near the device environment. Potential privacy risks include:
- ~profile法 ⇒ ~ambient光~sensorは、 利用者の利用~patternや周囲について情報を漏洩し得る。 この情報は、 利用者を~profileしたり挙動上の分析を増補するために利用され得る。 ◎ Profiling. Ambient Light Sensor can leak information about user’s use patterns and surrounding. This information can be used to enhance user profiling and behavioral analysis.
- ~device間にまたがる~link法 ⇒ 2 つの~deviceは、 同じ第三者-主体に属する~scriptを含む~web~siteに~accessし得る — ~scriptは,時間~越しに照明~levelを相関する。 ◎ Cross-device linking. Two devices can access web sites that include the same third-party script that correlates lighting levels over time.
- ~device間をまたがる通信 ⇒ 近くにある~deviceにおける~ambient光~sensorで[ ~device~screenや~camera~LED~flashから読出された~message ]を,単純な~broadcast通信~手法を利用して~broadcastし得る。 ◎ Cross-device communication. A simple broadcast communication method can use device screen or camera LED flashes to broadcast messages read out with an Ambient Light Sensor in a close by device.
- 非同一-生成元への漏洩 ⇒ ~screenから発された光は、 近くの反射面から,~sensorへ戻るように反映され得る。 悪意的な~siteは、 異なる生成元からの資源を埋込んで, 内容を画素ごとに判別できるよう内容を拡大して特定0の画素を表示し得る。 ◎ Cross-origin leaks. Light emitted from the screen can be reflected back to the sensor from nearby reflective surfaces. Malicious sites can embed resources from different origins and scale the content to display particular pixels to allow distinguishing the contents, pixel by pixel.
- 閲覧~履歴の強奪 ⇒ [ 訪問-済み/未訪問 ]な~linkに異なる光~levelを結付ける — すなわち、 ~screen内で[ 黒い/白い ]塊になるよう~styleする — ことにより,それらが判別できるようになる。 ◎ Hijacking browsing history. Styling visited links to allow distinguishing the light levels associated with visited and unvisited links i.e. visited links styled as a block of black screen; white for unvisited.
これらの課題を さらに掘下げる作業は、 次に挙げるものなどにある ⇒# `ALSPRIVACYANALYSIS$r, `PINSKIMMINGVIASENSOR$r, `STEALINGSENSITIVEDATA$r, `VIDEORECOGNITIONAMBIENTLIGHT$r, `IMAGINGPRIVACY$r ◎ Works such as [ALSPRIVACYANALYSIS], [PINSKIMMINGVIASENSOR], [STEALINGSENSITIVEDATA], [VIDEORECOGNITIONAMBIENTLIGHT], and [IMAGINGPRIVACY] delve further into these issues.
これらの,~ambient光~sensorに特有な脅威を軽減するため、 ~UAは ⇒# ~sensor読取りの`正確度を抑制する$モノトスル。 `最大~標本化~frequencyを制限しても@~SENSORS#limit-max-frequency$ヨイ。 ◎ To mitigate these threats specific to Ambient Light Sensor, user agents must reduce accuracy of sensor readings. User agents may also limit maximum sampling frequency.
これらの軽減~策は、 `汎用~sensor~API^cite `GENERIC-SENSOR$r に定義される`汎用な軽減~策@~SENSORS#mitigation-strategies$を補う。 ◎ These mitigation strategies complement the generic mitigations defined in the Generic Sensor API [GENERIC-SENSOR].
3.1. ~sensor読取りの正確度の抑制-法
~sensor読取りの`正確度を抑制する$ため、 この仕様は ⇒# `~threshold検査~algo$として`~ambient光の~threshold検査~algo$を定義する。 `読取り量子化~algo$として`~ambient光の読取り量子化~algo$を定義する。 ◎ In order to reduce accuracy of sensor readings, this specification defines a threshold check algorithm (the ambient light threshold check algorithm) and a reading quantization algorithm (the ambient light reading quantization algorithm).
これらの~algoは[ `照度~読取り量子$, `照度~threshold値$ ]を用立てる。 実装は、 これらの値に対し,次に挙げる要件を固守するモノトスル: ◎ These algorithms make use of the illuminance rounding multiple and the illuminance threshold value. Implementations must adhere to the following requirements for their values:
- `照度~読取り量子$は 50 ~lux以上にするモノトスル。 ◎ The illuminance rounding multiple must be at least 50 lux.
- `照度~threshold値$は、 `照度~読取り量子$の半分~以上にするベキである。 ◎ The illuminance threshold value should be at least half of the illuminance rounding multiple.
注記: `照度~読取り量子$を選ぶことは、[ 精確~過ぎる読出しを公開しない一方で, ~API利用者にも有用な読出しを供する ]よう~balanceすることを要求する。 `照度~読取り量子$用の最小として値 50 ~luxが, `課題 #13@https://github.com/w3c/ambient-light/issues/13#issuecomment-302393458$ にて決定された — 様々な照明~条件の下で様々な~ambient光~level測定が`集められ@https://docs.google.com/spreadsheets/d/1vUojkaaif6AmftQmtqra1w9Z7CH00Cn9pb0Ci6v5_Jk$, `STEALINGSENSITIVEDATA$r にて述べられた攻撃を~~阻止することが示された後に。 50 ~luxは,また、 ~ambient光~sensor読取りを利用する動画~認識( `VIDEORECOGNITIONAMBIENTLIGHT$r )を実現不能にするために要求される 5 ~luxよりも高い。 ◎ Note: Choosing an illuminance rounding multiple requires balancing not exposing readouts that are too precise while also providing readouts that are still useful for API users. The value of 50 lux as a minimum for the illuminance rounding multiple was determined in GitHub issue #13 after different ambient light level measurements under different lighting conditions were gathered and shown to thwart the attack described in [STEALINGSENSITIVEDATA]. 50 lux is also higher than the 5 lux required to make video recognition using ambient light sensor readings ([VIDEORECOGNITIONAMBIENTLIGHT]) infeasible.
注記: `照度~threshold値$は、[ 特定0の値の周りで揺らいでいる読取りが,異なる値に量子化される事実 ]が漏洩することを防止するために利用される。 例えば,[ `照度~読取り量子$ ~EQ 50 ]の場合、 これは,[ 生な読出しが 24 と 26 の間で切替わるとき, 照度~値が 0 と 50 の間で切替わる ]ことを防止する。 `~threshold検査~algo$は、[ 補助的な指紋収集~軽減~策としての その効能 ]は数学的に証明されてはいないが、 実装~経験に基づいて,この仕様に追加された。 `Chromium bug 1332536@https://crbug.com/1332536$, `Chromium review 3666917@https://crrev.com/c/3666917$ は、 このことについての情報をもっと包含する。 ◎ Note: The illuminance threshold value is used to prevent leaking the fact that readings are hovering around a particular value but getting quantized to different values. For example, if illuminance rounding multiple is 50, this prevents switching the illuminance value between 0 and 50 if the raw readouts switch between 24 and 26. The efficacy of the threshold check algorithm as an auxiliary fingerprinting mitigation strategy has not been mathematically proven, but it has been added to this specification based on implementation experience. Chromium bug 1332536 and Chromium review 3666917 contain more information about this.
4. ~model
`~sensor型$ `~ambient光~sensor@i ( `Ambient Light Sensor^en )は: ◎ ↓
- `Sensor$I 下位class【`拡張~sensor~interface$】として、 `AmbientLightSensor$I が結付けられる。 ◎ The Ambient Light Sensor sensor type’s associated Sensor subclass is the AmbientLightSensor class.
- その`既定の~sensor$は、 ~deviceの~main光~検出器である。 ◎ The Ambient Light Sensor has a default sensor, which is the device’s main light detector.
- `名前$ `ambient-light-sensor@l により識別される`強力な特能$である。 ◎ The Ambient Light Sensor is a powerful feature that is identified by the name "ambient-light-sensor",\
- その`~sensor許可~名~群$は、 `ambient-light-sensor^l のみからなる。 ◎ which is also its associated sensor permission name.\
- その`許可~revocation~algo$は、 次の結果を返す ⇒ `~sensor許可~revocation~algo$( `ambient-light-sensor^l ) ◎ Its permission revocation algorithm is the result of calling the generic sensor permission revocation algorithm with "ambient-light-sensor".
- `施策により制御される特能$であり、 文字列 `ambient-light-sensor^l により識別される。 その`既定の許容list$は `'self'^l とする。 ◎ The Ambient Light Sensor is a policy-controlled feature identified by the string "ambient-light-sensor". Its default allowlist is 'self'.
- それが`属する~virtual~sensor型$は、 `ambient-light@vsT とする。 ◎ The Ambient Light Sensor has a virtual sensor type, which is "ambient-light".
`現在の光~level@ ( `current light level^en ) — `現在の照度@ ( `current illuminance^en )とも称される — は、 ~hostしている~device周りの~ambient光~levelを表現する値であり, その単位は~lux( `lux^en )( lx ) `SI$r とする。 ◎ The current light level or illuminance is a value that represents the ambient light level around the hosting device. Its unit is the lux (lx) [SI].
注記: 報告される精確な~lux値は、 同じ光の下でも,~deviceごとに異なり得る — 検出~手法における相違点, ~sensorの構成, 等々に因り。 ◎ Note: The precise lux value reported by different devices in the same light can be different, due to differences in detection method, sensor construction, etc.
`~sensor型$ `~ambient光~sensor$i には: ◎ ↓
-
~luxで測定される `照度~読取り量子@ ( `illuminance rounding multiple^en †)がある — 各~照度~読取りは、 この~~量の整数倍に丸められることになる。
【† この `multiple^en は, “倍数(~~整数倍)” を意味するが、 そのように対訳すると意味が通らなくなるので, “量子化” に対応する対訳に改めている。 】
◎ The Ambient Light Sensor has an illuminance rounding multiple, measured in lux, which represents a number whose multiples the illuminance readings will be rounded up to. - ~luxで測定される `照度~threshold値@ ( `illuminance threshold value^en )がある — それは、 `~ambient光の~threshold検査~algo$内で利用される。 ◎ The Ambient Light Sensor has an illuminance threshold value, measured in lux, which is used in the ambient light threshold check algorithm.
注記: これらに課される最小な要件は、 `§ ~sensor読取りの正確度の抑制-法@#reduce-sensor-accuracy$を見よ。 ◎ Note: see § 3.1 Reducing sensor readings accuracy for minimum requirements for the values described above.
5. ~API
5.1. `Ambientlightsensor^I ~interface
[`SecureContext$, `Exposed$=Window] interface `AmbientLightSensor@I : `Sensor$I { `AmbientLightSensor$mc(optional `SensorOptions$I %sensorOptions = {}); readonly attribute `double$? `illuminance$m; };
6. 抽象-演算
6.1. ~ambient光~sensor~objを初期化する
所与の ( %~ambient光~sensor, %~option群 ) に対し:
- ~Assert: %~ambient光~sensor は `AmbientLightSensor$I ~interfaceを実装する
- ~Assert: %~option群 は `SensorOptions$I 辞書である
- ~IF[ `~sensor施策により制御される特能を検査する$( `~ambient光~sensor$i【!`AmbientLightSensor$I】 ) ~EQ ~F ] ⇒ ~THROW `SecurityError$E
- `~sensor~objを初期化する$( %~ambient光~sensor, %~option群 )
【 原文の この~algoは,新たな~instanceを作成して返しているが、 `WEBIDL$r の`構築子~手続き$の規約に則って,この訳では初期化のみ行うよう改めている。 】
◎ input • options, a SensorOptions object. output • An AmbientLightSensor object. ◎ Let allowed be the result of invoking check sensor policy-controlled features with AmbientLightSensor. ◎ If allowed is false, then: • Throw a SecurityError DOMException. ◎ Let ambient_light_sensor be the new AmbientLightSensor object. ◎ Invoke initialize a sensor object with ambient_light_sensor and options. ◎ Return ambient_light_sensor.6.2. ~ambient光~threshold検査~algo
`~sensor型$ `~ambient光~sensor$i は、 `~threshold検査~algo$として,次を定義する — それは、 所与の ( `~sensor読取り$ %新たな読取り, `~sensor読取り$ %最新な読取り ) に対し,[ 読取りにおける差は十分に有意かどうかを指示する`真偽値$ ]を返す: ◎ The Ambient Light Sensor sensor type defines the following threshold check algorithm: ◎ input • newReading, a sensor reading • latestReading, a sensor reading ◎ output • A boolean indicating whether the difference in readings is significant enough.
- %新たな照度 ~LET %新たな読取り[ `illuminance^l ] ◎ ↓If newReading["illuminance"] is null, return true. ◎ ↓If latestReading["illuminance"] is null, return true. ◎ Let newIlluminance be newReading["illuminance"].
- %最新な照度 ~LET %最新な読取り[ `illuminance^l ] ◎ Let latestIlluminance be latestReading["illuminance"].
- ~IF[ %新たな照度 ~EQ ~NULL ]~OR[ %最新な照度 ~EQ ~NULL ] ⇒ ~RET ~T ◎ ↑
- ~IF[ ( %最新な照度 ~MINUS %新たな照度 ) の絶対~値 ~LT `照度~threshold値$ ] ⇒ ~RET ~F ◎ If abs(latestIlluminance - newIlluminance) < illuminance threshold value, return false.
- %丸められた新たな読取り ~LET `~ambient光の読取り量子化~algo$( %新たな照度 ) ◎ Let roundedNewReading be the result of invoking the ambient light reading quantization algorithm algorithm with newIlluminance.
- %丸められた最新な読取り ~LET `~ambient光の読取り量子化~algo$( %最新な照度 ) ◎ Let roundedLatestReading be the result of invoking the ambient light reading quantization algorithm algorithm with latestIlluminance.
- ~IF[ %丸められた新たな読取り[ `illuminance^l ] ~EQ %丸められた最新な読取り【!roundedLatestIlluminance】[ `illuminance^l ] ] ⇒ ~RET ~F ◎ If roundedNewReading["illuminance"] and roundedLatestIlluminance["illuminance"] are equal, return false.
- ~RET ~T ◎ Otherwise, return true.
注記: この~algoは、[ 前回と同じ値に丸められる読取りは,`最新な読取りを更新する$ときに更新を誘発しない ]ことを確保するため, `~ambient光の読取り量子化~algo$を呼出す。 【!Not doing so would ...】 ◎ Note: This algorithm invokes the ambient light reading quantization algorithm to ensure that readings that round up to the same value do not trigger an update in the main update latest reading algorithm.\ Not doing so would indicate to users that the raw illuminance readings are within a range where they differ by at least the illuminance threshold value but do not round up to different illuminance rounding multiple.
6.3. ~ambient光~読取り量子化~algo
`~sensor型$ `~ambient光~sensor$i は、 `読取り量子化~algo$として,次を定義する — それは、 所与の ( `~sensor読取り$ %読取り ) に対し,`~sensor読取り$を返す: ◎ The Ambient Light Sensor sensor type defines the following reading quantization algorithm: ◎ input • reading, a sensor reading ◎ output • A sensor reading
- %量子化された読取り ~LET %読取り 【の複製?】 ◎ Let quantizedReading be reading.
- %量子化された読取り[ `illuminance^l ] ~SET `照度~読取り量子$の整数倍のうち, %読取り[ `illuminance^l ] に最も近い値 ◎ Set quantizedReading["illuminance"] to the multiple of the illuminance rounding multiple that reading["illuminance"] is closest to.
- ~RET %量子化された読取り ◎ Return quantizedReading.
7. 自動化
この節では、 `GENERIC-SENSOR$r に定義される`自動化@~SENSORS#automation$を拡張する — `~ambient光~sensor$i に特有な`~virtual~sensor~metadata$を供することにより。 ◎ This section extends Generic Sensor API § 9 Automation by providing Ambient Light Sensor-specific virtual sensor metadata.
`照度の読取りを構文解析する@ ときは、 所与の ( ~JSON `Object$jt %~parameter群 ) に対し ⇒ ~RET `一数の読取りを構文解析する$( %~parameter群, `illuminance^l ) ◎ The illuminance reading parsing algorithm, given a JSON Object parameters, must return the result of invoking parse single-value number reading with parameters and "illuminance".
`型ごとの~virtual~sensor~metadata$を与える`~map$は、 次に挙げる`~entry$mapを伴うモノトスル: ◎ The per-type virtual sensor metadata map must have the following entry:
- `~key$map `ambient-light^l ⇒ 対応する`値$mapを与える`~virtual~sensor~metadata$の ⇒# `~virtual~sensor型$vsMは `~ambient光~sensor$i / `読取り構文解析~algo$vsMは `照度の読取りを構文解析する$ ◎ key • "ambient-light" ◎ value • A virtual sensor metadata whose virtual sensor type is Ambient Light Sensor and reading parsing algorithm is illuminance reading parsing algorithm.
8. 利用事例と要件
次に挙げるものを行う~Web~app: ◎ ↓
- ~smart居宅~system用に照明を制御する入力を供する。 ◎ A Web application provides input for a smart home system to control lighting.
- 作業~空間において光~levelは足るかどうか検査する。 ◎ A Web application checks whether light level at work space is sufficient.
- 手動で制御する~camera用の設定群(~aperture-shutter-speed-ISO)を計算する。 ◎ A Web application calculates settings for a camera with manual controls (aperture, shutter speed, ISO).
- 現在の光~levelを検査して,~camera~streamが[ 目的(例:ヒトが居るかどうか検証yする)に十分に正確aな~data ]を包含するかどうか決定する。 ◎ A Web application checks the current light level to determine whether a camera stream will contain data that is accurate enough for its purposes (e.g. human presence verification).
一部の利用事例では、 精確な~ambient光の測定を得することから便益が得られよう。 一方で,~ambient光~levelの変動を利用者~入力~eventへ変換する利用事例では、 より高い`標本化~frequency$から便益が得られよう。 ◎ While some of the use cases may benefit from obtaining precise ambient light measurements, the use cases that convert ambient light level fluctuations to user input events would benefit from higher sampling frequencies.
9. 謝辞
`Doug Turner^en 氏は、 初期の原型を寄せられた。 `Marcos Caceres^en 氏は~test一式を寄せられた。 ◎ Doug Turner for the initial prototype and Marcos Caceres for the test suite.
`Paul Bakaus^en 氏は、 `LightLevelSensor^i 案を寄せられた。 ◎ Paul Bakaus for the LightLevelSensor idea.
`Mikhail Pozdnyakov^en, `Alexander Shalamov^en 両氏は、 利用事例と要件を寄せられた。 ◎ Mikhail Pozdnyakov and Alexander Shalamov for the use cases and requirements.
`Lukasz Olejnik^en 氏は、 ~privacy~risk査定を寄せられた。 ◎ Lukasz Olejnik for the privacy risk assessment.