HTML5って、なぜ必要になってたのでしょうか?


マルチメディア関連の普及もあるでしょう。


しかして、その裏の真相は...

(いや、そんな大したことではないですがガーン



■HTMLの普及


 HTMLはWeb上での情報交換フォーマットとして、
 Tim Berners-Leeにより生み出されました。


 「シンプルなハイパーテキストを記述する」という
 目的があったため、定義されている要素は見出しや
 リスト、リンクなど、文書構造や文章の意味を
 記すものに限られていました。


 ところが、 Webが普及するにつれて視覚表現をコントロールする要素
 (いわゆる「タグ」)がブラウザーベンダーにより追加されていき、
 語彙が膨れ上がってしまいました。


 さらには、要素の意図とは異なった使われ方をされることが
 増えていきました。


  例)blockquote、tableなど


 上記の問題に対処するため、HTMLの標準化が幾度かにわたり
 行われました。


 文書の構造や文章の意味を表す要素を中心に、広く使われている
 要素を取り込むといった形で、現実との乖離を抑えるように
 設計されました。


 しかし、ブラウザーベンダー独自のものが残り、互換性を
 保つことはできませんでした。



■HTMLの普及の問題解決としてXHTML


 XHTMLは XMLベースであることで、XMLが求める厳しい
 エラー処理することで、HTML の互換性の混迷を、
 抜本的に解決しようとしました。


 そうすることにより、XHTMLは「ブログ」ブームや、
 「Web標準」な制作手法の広がりとともに普及しました。


 しかし、XHTML については、未だ広まっていないというのが現状です。


 その理由として、


 ・XHTML、SVG、MathMLなどのXML関連技術を
  ブラウザーが同じ水準でサポートしていない


 ・text/htmlはXMLが求める厳しいエラー処理を
  備えていないことによるXMLとして処理
  できない文書が蔓延している


 このため、XHMLを推進し続けることは、現実的ではなくなってきました。



■やってきましたHTML5


 XHTMLで互換性の混迷を止めようとしながらも、普及しない一方で、
 機能の追加に関する要望は増えていきました。


 こうした流れを受け、HTMLの拡張を行うのが「HTML5」になります。

 HTML5は、機能拡張も一つのテーマではあるのですが、HTML5が重きを
 置いているのは「互換性」です。


 ブラウザーの実装同士の互換性、現在のWebとの互換性など、
 さまざまな面から互換性の確保・向上を目指し、仕様を定義しています。


 HTML5 は WHATWG によって2004年に定められた Web Applications 1.0 に
 Web Forms 2.0 を取り入れたものが W3C の専門委員会に採用され、
 W3C より2008年1月22日にドラフト(草案)が発表されました。


 現在、2014年までの正式勧告を目指して策定が行われています。



■HTML5に関する資料

 ・http://www.slideshare.net/dynamis/web-technologies-7645368

 ・http://www.slideshare.net/myakura/html5-2480964






IE10からサポートされるECMAScript(エクマスクリプト)とは、
なんでしょうか?


■ECMAScript(エクマスクリプト)


 ECMAScript(エクマスクリプト)は、Ecma International によって
 策定されたスクリプト言語である。
 互換性の低い JavaScript と JScript を標準化すべく、両方の言語に
 共通する部分を取り入れて作られた。
 現在の最新バージョンは5 (5th edition)。
 2009年12月に標準化。関連規格の一つである

 ECMAScript for XML (E4X) では、ネイティブで XML が

 サポートされている。


■ECMAScript 5、


 ECMAScript 5では基本ライブラリの拡張、コーディングミスを

 特定するための仕組みが追加されている。



 ●基本ライブラリに拡張された機能


  ・DateがISO8601形式の日付を生成できるようになり、パースもできる


   例)20091209T12:34:56Z


  ・Stringにtrim()メソッドが組み込まれる。


  ・新しいJSONオブジェクトは、JSON形式のデータを
   効率的に生成するためにparseとstringifyをサポートする。
   evalと似ているが、セキュリティを考慮した実装がないので
   コードを少なくできる。
   また、JSONObjectやJSONArrayだけでなく、どのような

   JSONValueも使える。
   (JSON-Textを定義しているが、これはオブジェクトか配列に

   制限されている。)


  ・Prototypeのbind()と同じ構文でbindが追加。


  ・Arrayが標準的なファンクションをサポート。


   例)indexOf()やmap()、filter()そして reduce()など。


  ・オブジェクトはseal()
   (新しい属性の追加と既存の属性の削除ができなくなる)と
   freeze()
   (すべての属性が読み取り専用になり、属性の追加と削除も
   できなくなる)が利用できる。


  ・Object.keys()を使うとそのオブジェクトのすべての
   enumerableな属性を一覧できる。


  ・Object.getOwnPropertyNames()を使うとすべてのenumerableと
   非enumerable属性を一覧できる。


  ・Object.getPrototypeof()を使うとそのオブジェクトのprototypeを返す



 ●一般的でありがちなコーディングミスを特定し、
  除去するためにより厳格なランタイムモードが導入


  ・Strict mode

   strict modeを導入する目的は、ECMAScriptアプリケーションを
   開発するときに発生するコーディング上の一般的な問題を
   避けることです。
   ひとつのユニット(スクリプトまたはファンクション)の中に、
   次のような文字列リテラルを書くことでこの制約を有効にできる。


    "use strict;"


   このリテラルを宣言することにより、は従来のランタイム上では
   何の影響もないが、バージョン5がターゲットとする
   新しいランタイム上ではstrict modeに切り替わります。


サンプルソース

"use strict";

(function () {
console.log(new Function('return this')()); // [object Window]
console.log(Function('return this')()); // [object Window]
})();


   では、strictモードにすることによってどうなるか?


   ・変数は利用する前に宣言しなくてはならない。
    言い換えれば、i=3という書き方はランタイムエラーになる。
    var i=3としなければならない。

    (iがこのスコープ内にはないという前提)


   ・Evalは予約語になる。また、eval内で新しい変数を導入できなくなる。
    したがって、eval("var i=3"); print(i);と書くと例外が発生する。


   ・8進数のリテラルは使えない。したがって010は10であり、8ではない。

   ・configurableフラグがfalseに設定されている引数や関数、変数や
    その他の属性に対して、delete演算子が使えない。


   ・エラーの原因になりやすいwithステートメントは使えない。
    構文エラーと見なされる。


   ・同じ名前で引数が重複しているファンクションは定義できない。

   ・オブジェクトは同じ名前の属性を持てない。


   ・argumentsとcaller変数は不変になる。


   ・グローバルオブジェクトへのアクセスはランタイムエラーになる。



日本では、4月26日にIE9が正式リリースされました。

次のIE10がrosoft、IE10を初披露 プレビュー版リリースされていますえっ


どんな機能が変ったのかを見てみましょう。



●HTML5およびCSS3のサポートをさらに強化


 【サポートされたCSS3】
 ・Column Layout
 ・Grid Layout
 ・Flexible Box
 ・Gradients
 ・Transisions
 ・3D Transforms
 ・radients
 ・Flexible Box Layout


●IE9同様にハードウェアアクセラレーションを採用しておりIE10ではより高速になる


●JavaScriptの標準規格をECMAScript 5 Strict Modeとする


 ECMAScript 5 Strict Modeは、従来のスクリプト言語のあいまいさを排し、
 より厳密な記述を要求するものである。
 今までのJavaScriptは、非常にあいまいなコードを許していたため、
 互換性に問題が出たり、JavaScriptの性能向上を妨げるような

 プログラミングが行われたりしていた。
 そこで標準規格として、より厳密なプログラミングが行える

 ECMAScript 5 Strict Modeが提案されていた。



新しい機能を試したいなら、既存IEと共存できますので、

試してみるのもよいですよグッド!


なんと!!


マイクロソフトから、会議中に居眠りしても問題ないソフトが開発中ですえっ


マイクロソフトが開発した「Accelerated Instant Replay (AIR) Conferencing
という技術を利用しています。


これはテレビ会議用のシステムで、会議中に何らかの理由で聞き漏らした会話を、
後追いで把握することを手助けしてくれます。


会議のビデオや、使用された補助資料、音声認識による会話内容の筆記録などが
1つの画面上に集められ、会議の流れを再確認できる仕組みになっています。



下記は、マイクロソフトからの発表内容を一部抜粋したものです。



会議の一部を聞き逃してしまい、他の参加者に迷惑をかけずに会話内容に
追いつかなければならないという時があります。


そこで私たちは、テレビ会議用のシステムとして
『Accelerated Instant Replay (AIR) Conferencing』という技術を

開発しました。


これは会議を続けたまま、聞き逃した部分をキャッチアップできる

という技術です。


AIRは“音声”“映像”“筆記録”“ワークスペース”という4つの手段で

会議内容を再生することが可能です。私たちはこのシステムを

評価するため、2つの研究を行いました。



最初の研究は、AIRによるキャッチアップの利益を調査するものです。


この結果、4つの手段を通じてテレビ会議を見返した場合、ユーザーは

生で会議内容を聞いていた場合と同じ情報を、正しく把握することが

可能であると明らかになりました。



ある程度検証は進んでいるようですね。


これで、仕事時間でも自由に眠れる日が来るのも近いかも?!にひひ

(もしそうなれば幸せですねニコニコ



■参考サイト
 ・「If You Doze During A Meeting, Microsoft’s Got Your Back」
  (2011年05月05日『Fast Company』)

最新のPHP6が現在リリースに向けて開発されている。


リリース時期については、途中でPHP6の開発が止まっていたこともあり、

まだ決まっていない。


そんな中、PHP6から新たに追加されることと、廃止される機能について

まとめてみた。


やっぱり色々機能が変わりますね。

何より、文字コードは今までにない仕様です。



1、文字コード


 PHP 6においてPHP6 Unicodeの実装が失敗した。

 PHP6ではエンジン内部の処理がUTF-16に統一される計画になっていたが、
 関係者からはこの方針は間違っているのではないかという指摘もあった。

 そのため、今回実装が行き詰まったことで、PHPはUnicodeに対して
 新しいアプローチをとることにした。


 新しいアプローチの名は、「UTF-3」です。
 仕様は以下のとおりです。


  ・3bitで表現可能



2、名前空間


 ●名前空間の宣言

  名前空間の宣言はキーワード「namespace」を使って以下のように記述します。
  また、名前空間のデリミタには「::」(コロン2つ)を使います。
  デフォルトの名前空間は「""」(空文字)です。


    例)namespace test::ns1;


 ●名前空間に属する関数やクラスの呼び出し


  名前空間を関数名やクラス名の前に付け、「::」(コロン2つ)を使って繋げます。
  呼び出し元が同じ名前空間に属している場合、省略が可能です。


   $obj = new testroot::test::ClassTest();
   echo testroot::test::FunctionTest();


 ●現在の名前空間名の取得


  echo __NAMESPACE__;


 ●名前空間の別名を付ける


  import testroot::test as nmTest;
  $obj = new nmTest::ClassTest();


  ※別名を付けない場合は、「import testroot::test」



3、定数の強化


 ●constの配列


  PHP5でも配列以外のスカラー値を指定することができましたが、
  PHP6からは配列もサポートされるようになります。


   const A = array(1, 2, 'abc' => 'xyz');



4、register_globalsが廃止


 昔のPHPでは、クライアントからPOST/GET/COOKIEで渡されるデータを、
 そのまま名前の頭に「$」をつけた変数として扱えるのが普通でした。


  「<input type="text" name="email">」 => 「$email」


 PHP 4.2.0以降では、php.iniの「register_globals」パラメータが
 デフォルトOffに設定され、明示的にOnに変更しない限り、上記のように
 扱えなくなりました。


 PHP 6では、このregister_globalsパラメータ自体が廃止になります。
 $_GET、$_POST、$_REQUEST からとるようにしましょう。



5、magic_quotes_gpc


 magic_quotes_gpcも、register_globalsと同様に廃止されます。

 この機能はPOST/GET/COOKIEでPHPスクリプトに渡されるデータ中の、
 引用符等を自動的にエスケープし、SQLインジェクションを
 防ぐ効果的な機能でした。


 ただし、無駄にエスケープされるデータが多くなるため、
 パフォーマンスを犠牲にすることや、スクリプトの移植性が
 低下することなどから、開発者の間では敬遠され続けてきた機能でもあります。



6、safe_mode


 共有レンタルサーバ等でよく使われてきた「セーフモード」も廃止です。

 セーフモードという名称から「セキュリティを確保してくれる機能」と
 誤解されがちですが、実際はあくまでもスクリプトのバグに対する
 「フェイルセーフ」の機能に過ぎません。


 つまり、これを過信されると余計に危ない、ということでしょう。
 サーバ管理者の皆さんは、PHPスクリプトを安全に運用するための
 実装手段について、この機会にもう一度検討してみるとよいでしょう。
 意外と、安全と信じていた従来の構成に穴が見つかったりするかもしれません。



7、zend.ze1_compatibility_mode


 PHP 4からPHP 5へのバージョンアップ時に、オブジェクト型の変数の
 代入時のデフォルトの動作「値渡し」から「参照渡し」になる等の
 変更が行われました。

 このパラメータは、PHP 4からPHP 5への移行をスムーズにするために
 用意されたものなので、PHP 6では削除される方向です。


  ×:$a = & new object();
  ○:$a = new object();



8、Freetype 1とGD 1


 PHPは、描画ライブラリのGD、フォントエンジンのFreetypeを使って、
 グラフ等を動的に生成することができますが、PHP 6では、Freetype、
 GDそれぞれの旧バージョンがサポートから外れます。



9、register_long_arrays


 $HTTP_POST_VARS、$HTTP_GET_VARS等も廃止の方向です。
 これらの配列は昔の名残で残されていますが、中身は
 「$_POST」や「$_GET」と同じです。



10、GOTO文のサポート


 PHP 6ではGOTO文がサポートされます。
 GOTO文は、実行途中でいきなり指定された「ラベル」の場所に処理を
 ジャンプさせます。

 例えば、以下のコードのように。


<?php
for ($i = 0; $i < 9; $i++) {
if (true) {
goto tobe;
}
echo "飛んだので表示されない";
tobe:
echo "飛びました";
}
?>


 GOTOには下記制限があります。


  ・ラベルは行頭である必要はない
  ・ループ内のラベルにはジャンプできない
  ・ラベル名は同一ファイル内で一意でなければなりません。
   また、ラベル名のスコープはファイル内のみです。
   require/includeしたファイルに定義したラベルへはジャンプできません。



11、ASPスタイルのタグ (<% ? %>)


 ASPスタイルのタグ (<% ? %>)は廃止になります。
 そのため、<?php ? ?> を使うようにしましょう。



12、正規表現


 正規表現は、ereg 関数の代わりに preg 関数を使う。
 ereg はPHP6のコアモジュールに存在しない予定です。