【調査】Chromeのkioskモード

Chromeを起動時に全画面表示する方法です。通常必要となる機能ではありませんが、Webアプリケーション作成時に必要となったので調査しました。

kioskモードとは

Chromeには、起動時のオプションとしてkioskモードがあります。このオプションを使用する事で、起動時に全画面表示(フルスクリーン)することができます。

起動オプションの設定方法と種類は下記のサイトにて記述されています。

http://chrome.half-moon.org/43.html#u1525a8d

kioskモードによる制約

kioskモードを使用する事で、起動時全画面表示が可能となりますが、通常使用できる機能が使用できなくなる事があります。

その一つにF11キーの無効化があります。

F11キーには通常全画面表とその解除機能が割り当てられています。

F11キーの機能を残したい場合、もしくは別の機能を割り当てたい場合これは大きな制約となります。

解決方法

試しにJavaScriptでキーの割当てみます。


document.onkeydown = keyevent();

function keyevent()

{

if (event.keyCode == 122) {

console.log("F11キーが押されました!");

}

この方法では、イベントを受け取る事ができず、メッセージは表示されません。

散々足止めを食らいましたが、下記サイトにて解決方法が書いてありました。

Stack Overflow : http://stackoverflow.com/questions/17570846/f11-in-kiosk-mode-in-google-chrome

海外版の知恵袋的なサイトのようです。

このサイトによると、Chromeでは、Key Downによるイベントのみ無効化されるので、Key Upを使えばイベントを取得できるとの事でした。

Key Downはキーが押し下げられた時のイベントを取得し、Key Upでは、キーを押した後、離されたときにイベントを取得します。

ですので、先ほどのコードを以下のように書き直せば動くはずです。


document.onkeyup = keyevent();

function keyevent()

{

if (event.keyCode == 122) {

  console.log("F11キーが押されました!");

}

今回は単純にkeydownではなくkeyUpに処理を割り当てれることで解決できました。日本語のサイトだけだとどうしても情報量が少なく、解決できない事がありますが、海外のサイトまで広げると多くの情報を得る事ができそうです。

 

DMLを使用した表の管理

□NULLを設定する際謝ったinsert文を選ぶ。

<MEMBER表>

mID mName age

A.  insert into member (mID, age) values(10, 17);

B.  insert into member values(10, ,17);

C.  insert into member values(10, NULL, 17);

D.  insert into member values(10, DEFAULT 17);

 

【解答】;

構文:INSERT INTO 表名[列名,列名…] VALUES (値,値…)

INSERT文でNULLを設定する方法には3つある。

・列リスト内の列指定を省略する。

・VALUE句でNULLを指定する。

・列のデフォルトがNULLの場合、DEFAULTキーワードで列のデフォルト値を指定する。

 

□UPDATE文に関する説明として正しいものを選ぶ。

A. WHERE句を省略すると一件も更新されない。

B. SET句では1つの列しか指定できない。

C. SET句では別表を参照する副問い合わせを使用できない。

D. 1つのUPDATE文で複数行を更新できる。

 

【解答】;

構文:UPDATE 表名 SET 列名=値[,列名=値…] [where 条件];

・同時に複数行更新できる。

・WHERE句を省略するとすべての行が更新される。

・SET句を使用して、別表に基づく行の更新を行う事もできる。

・SET句を使用して、複数列を更新する事ができる。

 

□Member表から全データを削除するDELLETE文として正しいもの(2つ)

A. delete Member;

B. delete * from Member;

C. delete from Member where 1 <> 2;

D. delete from Member where 1 = 2;

 

【解答】;

構文:DELETE [FROM] 表名 [WHERE 条件];

・同時に複数行削除できる。

・WHERE句を省略するとすべての行を削除する。

・WHERE句を使用すると、条件に一致した行のみ削除する。

・条件に一致する行がない場合は、0行削除のメッセージが表示される(エラーではない)。

 

AはWHEREの省略形で正しい。Cも常に条件が正しくなるので全行削除される。

 

□行の削除を行う場合、DELETE文ではなくTRANCATE文を使う必要がある場合はどのような時か?

A. 削除した行をロールバックする。

B. 一部の行を削除する。

C. 削除トリガーを起動する。

D. 他のオブジェクトのために、ディスクスペースをあける。

 

【解答】;

構文:TRANCATE TABLE 表名 [CASCADE];

・表からすべての行を削除する

・DDL文なので削除できないが、ロールバック情報を生成しないので、DELETE文を使用するより処理が早い。

・表が使用していた領域は、解放され他のオブジェクトで最利用可能となる。

・削除トリガー(データベース内に格納され、イベント時に暗黙的に実行されるプロシージャ)を起動しない。

・FOREIGN KEY(参照整合性)制約の親表を切り捨てる事ができない。ただし、ON DELETE CASCADEオプションを指定したFOREIGN KEY制約の場合のみ、CASCADEキーワードを使用して、親表を切り捨てできる。

 

□トランザクションが終了しないイベントはどれか(2つ)

A. COMMIT文の実行

B. SAVAPOINT文の実行

C. 「ROLLBACK TO セーブポイント名;」の実行

D. DDL文の実行

E ユーザによるSQL Developerの終了

F. マシン障害またはシステムクラッシュ

G. DCL文の実行

 

【解答】
・トランザクションとは、関連する更新を行うDML文の集まり。

以下の場合にトランザクションは終了する。

・COMMIT文、ROLLBACK文が実行時。

・DDL文、DCL文の実行時暗黙的にCOMMITが実行される。

・SQL*PlusおよびSQL Developerなどのデータベースを更新しているアプリケーションの終了時

・システムクラッシュ時

 

セーブポイントとは、1つのトランザクションの中で部分的にロールバックするための機能。SAVEPOINT文でセーブポイントを設定し、「ROLL BACK TO セーブポイント名;」でセーブポイントまでロールバックする。

DDLを使用した表の作成

・スキーマオブジェクトでないものを次の中から選ぶ。

A. ビュー  B. 記憶域  C. 表  D. シノニム

 

【解答】

データベースの中で定義及び作成され、利用される物をオブジェクトと呼ぶ。

オブジェクトはスキーマオブジェクトと非スキーマオブジェクトに分類される。

 

スキーマオブジェクト

特定のユーザによって所有される。データの格納や検索のために直接使用される。

スキーマオブジェクト 説明
データを格納する
インデックス データへのアクセスを高速化
ビュー データの表示を制限するためなど
シノニム オブジェクトに対する別名。長い名前を簡略化したり、オブジェクトの所有者を隠したりする。
順序 一意の値を生成
データベースリンク リモートデータベースへアクセス
順序 一意の値を生成
データベースリンク リモートデータベースへアクセス

 

非スキーマオブジェクト

特定のユーザには所有されず、システム全体で共有される。スキーマオブジェクトと同様にデータベースに格納され、SQLで作成および操作されるが、非スキーマオブジェクトとして扱われる。

非スキーマオブジェクト 説明
記憶域 オブジェクトを格納するための領域
ロール アカウント管理のグループのようなもの
ユーザ データベースを操作、作成などを行う者

 

・表の名前としてエラーにならないものを次の中から選ぶ。

A. 英字で始まる名前  B. 同じスキーマの中の他表と同じ名前  C. 32文字の長い名前  D. 数字で始まる名前

 

【解答】

■オブジェクトのネーミング規則

*スキーマ(1ユーザが所有するオブジェクト)の中で一意でなければならない。

*30バイトまで出なければならない

*名前は必ず文字から始まらなくてはならない

*始めでなければ数字、「_」、「$」、「#」は使用可能

*Oracle予約語は使用不可

 

・NUMBER(p,s)型の説明として謝っているものを選ぶ。

A. pは精度であり、10進数桁の総数を示す。指定範囲は「1<=p<=38」である

B. sは小数点以下の桁数を表す。指定範囲は「-84<=s<=127」である

C. NUMBER(p)とすると、小数点データは格納できない

D. pは省略できない

 

【解答】

10進数桁総数を表す「p」は省略する事ができない。

Oracleで使われる主なデータ型を示す。

データ型 説明
VARCHAR2(n) 可変長文字列。1〜4000バイトまで使用可能。「n」を超えるデータはエラーになる。「n」未満の値を入力しても空白が加えられる事はない。
CHAR(n) 固定長文字列。1〜2000バイトまで使用可能。「n」を超えるデータはエラーとなり、超えないデータの場合は空白で埋められる。
LONG/CLOB 可変長文字列。2GB/4GBバイトまで指定可能。
*LONG型は1つの表で1列のみ使用可能。
「WHERE」「GROUP BY」「ORDER BY」句の中で使用不可。
BLOB 可変長バイナリデータ。4GBまで指定可能。
BFILE Oracle Database外のファイルシステムにバイナリデータを格納できる。
NUMBER(p,s) 数値。pは最大38桁までの精度を使用可能。sは位取りを指定。
DATE 世紀、年、月、日、時間、分、秒
日付データは表示、入力の日付書式を指定する必要がある。「DD-MON-YY」
YYは常に現在と同じ上2桁で戻される。
(例)「01-DES-99」→「01-DES-2099」
TIMESTAMP 世紀、年、月、日、時間、分、少数秒
時間を厳密に使用したい場合。
INTERVAL YEAR TO MONTH 年と月の期間
INTERVAL DAY TO SECOND 日、時、分、秒の期間

 

【調査】リアルタイムWeb実装技術

概要

・動的に表示内容を更新するWebサイト、Webアプリケーションを実装するために常に最新の情報を表示したい。

・そのために、任意のタイミング(リアルタイム)でクライアント−サーバ間でデータの送受信を行う必要がある。

Ajax(Asynchronous JavaScript and Xml)

ページの遷移やリロードをせずに、ページの一部を置き換える技術。名前の通りXMLとJavaScriptを使って非同期のリクエストをサーバに送って、レスポンスをページに反映させる。

・接続1回に対して、情報の取得は多くて1回。

・クライアントは定期的に、サーバに接続を行う必要がある。(ポーリング)

・クライアント側からのみ、リアルタイムに送信可能。

・サーバ側の情報はクライアントが取得しにいく必要がある。

Comet

サーバがリクエストを受け取ってもすぐにレスポンスを返さず、限界まで接続しておくことでサーバからの通知機能を実現開いている。接続中であれば、サーバで発生したイベントを即座に知ることができる。接続負荷が大きいという欠点がある。

・サーバは応答を返すのをできるだけ引き延ばす。(ロングポーリング)

・引き延ばす時間に限界があるため、最接続が必要。

・サーバ側からリアルタイムに送信が可能。

・クライアント側からの送信はAjaxで別に行う必要がある。

Webソケット

W3CとIETFがクライアント−サーバ間の通信を行う為に規定している双方向通信用の技術規格。AjaxやCometで利用されていたXMLHttpRequestの欠点を解決する技術として開発された。

・一度接続してしまえばつなぎっぱなしでOK!

・接続が切れない限り、最接続が不要。

・クライアント/サーバの双方からリアルタイム送信が可能。

・接続の確立はクライアントから行う必要がある。

総評

サーバ側でイベントが発生したときにリアルタイムに更新したい場合など、総合的にWebソケットを使ってリアルタイムWebを実現するのが良さそう。

AjaxとCometの欠点を補ってできた技術というだけあって、Webソケットにはほとんど欠点がない?対応してないブラウザがあるのとノウハウが少ないくらい?

双方向性 リアルタイム性 接続処理負荷 接続の継続性
Ajax × ×
Comet ×
Webソケット