2012年4月6日金曜日

MM2H Central New Address

Effective 26 July 2011, the MM2H Centre will be relocated at the 
Ministry of Tourism Malaysia's new office located (opposite Pullman Putrajaya Hotel) at:

Malaysia My Second Home (MM2H) Centre
Ministry of Tourism Malaysia
Level 10
No. 2, Menara 1, Jalan P5/6
Presint 5
62200 PUTRAJAYA
Tel : +603.8891.7000
Fax : +603.8891.7100
Map : click here

Therefore, we would like to inform that during the move, our office will be 
closed to the public on the following dates:

Immigration Unit: 22 – 26 July 2011 (Friday – Tuesday)
General Enquiries / Operation Unit:    22 – 25 July 2011 (Friday – Monday)

We apologise for any inconveniences and we thank you for your understanding in this matter.

MM2H Centre
14 July 2011

Browser Emulation of 1975 Computer Runs First 16-Bit Home Game

"Following up on the 2009 story about the first graphics game written for a 16-Bit Home PC, I thought Slashdot readers might be interested in seeing the game in question running in their browsers. The original hardware has been emulated and loaded with the original machine code transcribed from PDF scans. Some brief background here."

Yahoo、2000 人規模のレイオフを発表

Google や Facebook との競争に負けた結果、収益が落ち込んでいる Yahoo であるが、とうとう従業員 2000 人超のレイオフに踏み切ることにしたとのこと。今回で、4 年内 6 度めのレイオフとなる。予想されてはいたものの、これは総従業員数のおよそ 14 % にあたり、リーマンショックで 1500 人が解雇された 2008 年を上回る規模となる 。

CEO の Scott Thompson 氏は 4 日の声明で、今回のレイオフの目的は中核ビジネスの競争力を高めるためだと説明しており、サイズダウンすることでより機敏で、収益性の高い企業体質に変化させたいとしている。

PAC Functions Explained

isPlainHostName()

This function will return true if the hostname contains no dots, e.g. http://intranet
Useful when applying exceptions for internal websites, e.g. may not require resolution of a hostname to IP address to determine if local.

Example:

if (isPlainHostName(host)) return "DIRECT"; 


dnsDomainIs()

Evaluates hostnames and returns true if hostnames match. Used mainly to match and exception individual hostnames.

Example:

if (dnsDomainIs(host, ".google.com")) return "DIRECT"; 


localHostOrDomainIs()

Evaluates hostname and only returns true if exact hostname match is found.

Example:

if (localHostOrDomainIs(host, "www.google.com")) return "DIRECT"; 


isResolvable()

Attempts to resolve a hostname to an IP address and returns true if successful. WARNING - This may cause a browser to temporarily hang if a domain isn't resolvable.

Example:

if (isResolvable(host)) return "PROXY proxy1.example.com:8080"; 


isInNet()

This function evaluates the IP address of a hostname, and if within a specified subnet returns true. If a hostname is passed the function will resolve the hostname to an IP address.

Example:

if (isInNet(host, "172.16.0.0", "255.240.0.0")) return "DIRECT"; 


dnsResolve()

Resolves hostnames to an IP address. This function can be used to reduce the number of DNS lookups, e.g. below example.

Example:

var resolved_ip = dnsResolve(host);  if (isInNet(resolved_ip, "10.0.0.0", "255.0.0.0") || 	isInNet(resolved_ip, "172.16.0.0",  "255.240.0.0") || 	isInNet(resolved_ip, "192.168.0.0", "255.255.0.0") || 	isInNet(resolved_ip, "127.0.0.0", "255.255.255.0")) 	return "DIRECT"; 


myIpAddress()

Returns the IP address of the host machine.

Example:

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0")) return "DIRECT"; 


dnsDomainLevels()

This function returns the number of DNS domain levels (number of dots) in the hostname. Can be used to exception internal websites which use short DNS names, e.g. http://intranet

Example:

if (dnsDomainLevels(host) > 0) return "PROXY proxy1.example.com:8080"; 	else return "DIRECT"; 


shExpMatch()

Will attempt to match hostname or URL to a specified shell expression, and returns true if matched.

Example:

if (shExpMatch(url, "*vpn.domain.com*") || 	shExpMatch(url, "*abcdomain.com/folder/*")) return "DIRECT"; 


weekdayRange()

Can be used to specify different proxies for a specific day range. Note example would utilize 'proxy1.example.com' Monday through Friday.

Example:

if (weekdayRange("MON", "FRI")) return "PROXY proxy1.example.com:8080"; 	else return "DIRECT"; 


dateRange()

Can be used to specify different proxies for a specific date range. Note example would utilize 'proxy1.example.com' January through March.

Example:

if (dateRange("JAN", "MAR")) return "PROXY proxy1.example.com:8080"; 	else return "DIRECT"; 


timeRange()

Can be used to specify different proxies for a specific time range. Note example would utilize 'proxy1.example.com' 8am through to 6pm.

Example:

if (timeRange(8, 18)) return "PROXY proxy1.example.com:8080"; 	else return "DIRECT";
 

HTML5仕様に関する注目トピック

 HTML5とHTML 4の違いをまとめたドキュメントがアップデート(英語)(link

 以前のバージョンはだいぶ古くなっていたので、アップデートは嬉しい。 英語ですが、HTML5の新機能がコンパクトにまとまっているので、一読の価値あり。

■ CSS Values and Units Module Level 3がラストコールに(link

 この仕様における重要な機能を以下に挙げてみましょう。

  • rem・・・フォントサイズの単位ですが、従来のemが親要素に対する相対サイズだったのと異なり、ルート要素に対する相対サイズになります。よければ、ぼくが最近書いたブログエントリも参考になるかもしれません。
  • vw/vh/vmin・・・ビューポートの大きさに対する相対サイズです。vwはビューポートの幅の1%、vhは高さの1%、vminはvwとvhのうちの小さい方となります。ビューポートが変化すると、それに合わせて値が変化します。
  • calc()・・・CSSプロパティの値に、動的な計算結果を指定することができるようになります。例えば、画面中央に幅100pxのブロック要素を表示したい場合など、「画面の真ん中から50px左」という位置を指定したい場合があります。その際、「width: calc(50% - 50px)」などと指定できるわけです。
  • cycle()・・・継承されたCSSプロパティの値に応じて、実際のプロパティ値を切り替えられる機能です。inheritの動作を調整できる機能といってもいいでしょう。例えば、「em { font-style: cycle(italic, normal); }」とすると、emは基本的にイタリック表記となりますが、イタリックスタイルを継承している場合は通常のスタイルとなります。cycle()という名の通り、スタイルは繰り返し利用されます。例えば「ul { list-style-type: cycle(disk, circle, square); }」という指定が行われた場合、ulが入れ子で使用されると、リストの先頭が「黒丸→白丸→黒四角→黒丸...」という順序で変化していきます。
  • attr()・・・要素の属性値を参照して、CSSのプロパティ値として利用できます。

■ DOM⇔文字列のパースとシリアライズに関する仕様が登場(link

 文字列からDOMを生成するDOMParserや、その逆を行うXMLSerializerについての仕様です。innerHTMLなどについても触れられています。

■ DNT(Do Not Track)に関する仕様が公開(link

 最近Webのプライバシーに関する話題が非常にホットな中、DNTに対応したWebサイト作成についても、研究しておく必要がありそうです。

 DNTとは「Do Not Track」の略で、「DNT=1」というヘッダを含むHTTPリクエストを受け取ったサービスは、ユーザーの情報を追跡しないような挙動をすることが求められます。

 また、DNTについてよくまとめられた日本語記事として、以下の記事を紹介しておきます(via ZDNet)。

 DNTを意識したサイトが意識したサイトが今後増えれば、Webが今より安心・安全になることが期待されます。米国ではそのための法整備も検討されているとのこと「ネット上の行動追跡を拒否する「Do Not Track」システム、米当局が早期実現を要請」。

■ Navigation Timingが勧告候補に(link

 Webアプリのパフォーマンス測定に使用できる仕様が勧告候補に。 うまく使って、Webアプリのパフォーマンスを向上させる役に立てたいですね。

■ window.performance.now()が公開&ラストコール(link

 上記のNavigation Timingにも関連した仕様。performance.timing.navigationStartからの経過時間をミリ秒よりも高い精度で返します。公開とラストコールが同時なんて珍しいですが、メソッド1つだけの仕様ですしね。

■ RDFa関連の3仕様が勧告候補に(link

 RDFa Core 1.1, RDFa Lite 1.1, XHTML+RDFa 1.1の3つの仕様が勧告候補になりました。

 RDFaは、マイクロデータと同様に、属性を付与することで要素のデータ的な意味合いを指定することのできる、セマンティックWebに関連した仕様です。

■ CanvasにPathという新しいインターフェイスが追加(link

 Canvasのパス操作を容易にする新しいインターフェイス、Pathが提案されました。 現在よりもCanvasプログラミングが容易になることが期待できます。

■ Media Fragments URI 1.0(basic)が勧告案に(link

 Media Fragments URIというのは、URIクエリ(?以降、#以前の文字列)やURIフラグメント(#以降の文字列)を利用してメディアデータの再生条件などを細かく指定するための仕様です。

 例えば、「http://www.example.org/video.ogv?t=60,100#t=20」というURLは、サーバに対して60-100秒の動画を返すように要求し、ユーザーエージェントは先頭から20秒経ったところから再生を開始する、といった意味になります。

■ Web Audio APIのドラフトが公開(link

 Googleが提案した音声操作のAPIが、ドラフト公開にこぎつけました。

■ CSS3 Speechモジュールが勧告候補に。実装を呼びかけ(link

 Webページの音声読み上げに関するさまざまなプロパティを定義したCSS3モジュールが勧告候補になりました。 Webアクセシビリティの向上につながるものと思われます。

 jQuery Foundationが発足(link

 jQuery関連の開発を促進するための非営利団体が発足したそうです。今後も活発な開発が期待できますね。

■ 「Web先端技術味見部」という勉強会を始めます(link

 「渋谷発、世界一『速い』勉強会。」というスローガンのもと、「世界一キャッチアップが速い」勉強会を目指しています。少人数を旨とした勉強会ですので、すでに定員はいっぱい(ATNDでの告知ページ)ですが、ITmediaへのレポート掲載やUstreamなどでの情報共有に努めますので、乞うご期待! 良ければ上のFacebookページで「いいね!」を押してやってください。今後の情報発信は、基本的にhtml5j.orgのメーリングリストとFacebookページで行う予定です。

Html5注目トピック

 Sencha Touch 2.0リリース(link)

 スマートフォンやタブレット向けのUIをHTML/JavaScriptで簡単に開発できる、Sencha Touchの最新版が公開されました。

 今回のリリースにおける目玉はネイティブアプリの開発が可能になったということ。つまり前述の「ハイブリッドアプリケーション」をSencha Touchのみで開発できるようになったということです。

 さらに、パフォーマンスも大きく向上したとのこと。たしかに、Sencha Touchのデモをいくつか見てみても(例:Kitchensink)、かなりサクサク動きます。

■ モバイルWebアプリのテストを容易にするAdobe Shadowがリリース

 アドビがリリースした「Adobe Shadow」は、モバイルWebアプリのテストをかなり楽にしてくれそうで期待が持てるツールです。

 複数のモバイルデバイスを手元に置き、PCのChromeを「母艦」として、それらのモバイルデバイス上のブラウザと同期がとれます。Shadowに関する日本語情報としては、Publickeyの記事が詳しいのでお勧めです。(アドビの新ツール「Shadow」は、モバイル用Webアプリ開発者必須のツール

 また英語ですが、こちらの記事では、認証が必要なアプリケーションのテスト方法など、進んだトピックが紹介されています。

 jqMobi1.0リリース(link

 jQMobiは、zepto.jsjquipといった、jQueryとある程度互換性を保ちながら、モバイルデバイス向けにサイズを最適化したフレームワークの一つです。 ぼくの手元で、ミニファイされた非圧縮のバージョンで比較したところ、jQueryは94kbytes、zepto.jsは20kbytes、jQMobiは15.5kbytesといったところでした。zip圧縮してみると、jQueryは34kbytes、zepto.jsは8kbytes、jQMobiは5kbytes。だいぶ小さいですね。そのぶん機能は削られているはずですが、そのトレードオフをどこまでうまく調節しているかが見ものです。

 JavaScriptが、PythonとPerlを抜く - 3月プログラミング言語人気(link

 JavaScriptの勢いが止まりません。もはやWebに携わる誰にとっても必須のスキルか。

 AndroidやiPhoneのHTML、CSS、JavaScriptのバグまとめ(link

 これは、なんとうれしいまとめ。全部に目を通しておきたいくらいですね。

 Source Mapsで、ミニファイされたJavaScriptをデバッグ可能に!(link

 開発効率を大きく向上させることが期待できる、非常に有望な新技術がWebKitに搭載されました。

 このSource Mapsというテクノロジーを使うと、ミニファイされたJavaScriptコードを、元のソースコード上でデバッグできます。 Source Mapsはすでに最新版のWebKitには搭載されているので、WebKit Nightly BuildGoogle Chrome Canalyビルドで試せます。これらのブラウザでfont dragrのサイトを訪問し、Webインスペクタの設定(右下の歯車アイコンをクリックすると表示できます)から「Enable source maps」にチェックを入れてみてください。

 すると、本来はミニファイされ、1つに結合されてしまっているJavaScriptファイルが、Scriptsタブ上で個々のファイルとして分割表示され、そのソースコード上でデバッグ可能です。

 

 Source Mapsが動作する仕組みは、ミニファイ後のソースと元のソースの対応表をWebKitが参照する、というものです。 その対応表は「.map」という拡張子を持ち、現在は以下のツールが出力に対応しています。

  • Closure Compiler・・・Google謹製のJavaScriptミニファイツール
  • Traceur・・・ECMAScript6のコードを通常のJavaScriptコードに変換するコンパイラ
  • Google Web Toolkit・・・JavaコードをJavaScriptに変換するツール/フレームワーク

 この仕組を利用すれば、将来的にはCoffeeScriptやProcessing.jsなどJavaScriptを出力とする別言語や、LESS/SASS/StylusといったCSSプリプロセッサのデバッグにも対応できると考えられます。

2012年4月4日水曜日

1日に使える時間を有効に使おう

 皆さんは、このような例え話を聞いたことがあるだろうか?

 毎朝「8万6400円」のお金が自分の銀行口座に振り込まれていたとしたら、どうするか? という話。

 そのお金は、当日使い切らないと残高がすべて消去される。

 毎朝目が覚めたら「8万6400円」が振り込まれ、毎晩眠りに就くころには全額処分されている。貯蓄はできない。

 多くの人が、毎日、目いっぱい8万6400円を使い切ろうと思うだろう。できれば1円も無駄にせず使い切ってしまいたいという気持ちになる人も多いはずだ。

 それができるかどうかは別として、そうありたいと考えるのが普通の人間の感覚だと思う。

 前述の話をお金と時間を変えてみよう。

 すべての人たちの時間口座に【8万6400秒】という時間が、平等に振り込まれているということになる。これは、夢物語ではなく事実である。なぜなら、誰にでも1日に24時間=(24時間×60分×60秒)=8万6400秒という時間が与えられているのだから。

 そして、夜になると使い切れなかった時間は消去されてしまう。その時間は永遠に戻ってこない……。

 多くの人が、お金よりも時間の方が大切だという認識を持っている。

 だからこそ、その時間を無駄に使っていないだろうかと常に自問自答したい。時間を貯金することはできないが、自らが主体的にコントロールすることで、有効活用できる範囲は増すからだ。

2012年4月3日火曜日

IPSW File Format

IPSW File Format

IPSW (iPod¹ SoftWare) Files have the Magic Number 504B0304 (PK\003\004) and thus are ZIP Archives. They can be modified with typical zip/unzip tools (i.e. change extension to .zip and double click). An IPSW File is used to deliver the iPod touch/iPhone/iPad/Apple TV firmware to the end-user.

1The IPSW files are used starting from the iPod 1G, even though they have a different format than iOS-based devices.

IPSW Contents

  • Restore Ramdisk
  • Update Ramdisk (Some firmwares don't contain this because of various reasons- Error 3002 represents no update ramdisk when pressing Shift+Check for updates)
  • Filesystem Ramdisk (the largest .dmg file)
  • kernelcache.release.XXXXXXX file (application processor specific i.e S5L8900, S5L8920, S5L8720, S5L8922, S5L8930, S5L8940)
  • BuildManifest.plist (first appeared in firmware 3.0?)
  • Restore.plist file
  • Firmware\
    • all_flash\
      • all_flash.XXXXX.production\ (hardware specific i.e. M68ap, N82ap, etc.)
    • \dfu (Folder)
      • iBEC.XXXXX.DFU (hardware specific i.e. M68ap, N82ap, etc.)
      • iBSS.XXXXX.DFU (hardware specific i.e. M68ap, N82ap, etc.)
      • WTF.XXXXX.DFU (hardware specific i.e. M68ap, N82ap, N45ap, N72ap - currently not present in firmwares for the iPhone 3GS and later, because it is mostly used to patch issues with the DFU mode that was burned into the bootrom)
    • ICE3_XX.XX.XX_BOOT_02.06.Release.bbfw (Contains the baseband and the bootloader. X stands for a number. This is the baseband version. 02.06 is the bootloader. Only in the iPhone 4 firmware.)

Example

This is a ls -alR of an extracted iPhone 3GS 3.0 Firmware IPSW.

total 608400 drwx------@ 11 m  staff        374 17 Jun 07:11 . drwxrwxrwx   5 m  staff        170 18 Jul 07:34 .. -rw-r--r--@  1 m  admin  281214976 22 Mai 17:10 018-5302-002.dmg -rw-r--r--@  1 m  admin   12769604 22 Mai 16:59 018-5304-002.dmg -rw-r--r--@  1 m  admin   12777796 22 Mai 16:59 018-5306-002.dmg -rw-r--r--   1 m  admin      21097 22 Mai 17:29 BuildManifest.plist drwxr-xr-x@  5 m  staff        170 17 Jun 07:11 Firmware -rw-r--r--   1 m  admin       1763 22 Mai 17:10 Restore.plist -rw-r--r--@  1 m  staff    4695492 22 Mai 14:32 kernelcache.release.s5l8920x  ./Firmware: total 16 drwxr-xr-x@  5 m  staff   170 17 Jun 07:11 . drwx------@ 11 m  staff   374 17 Jun 07:11 .. drwxr-xr-x@  4 m  staff   136 18 Jun 02:10 all_flash drwxr-xr-x@  4 m  staff   136 22 Mai 13:39 dfu  ./Firmware/all_flash: total 16 drwxr-xr-x@  4 m  staff   136 18 Jun 02:10 . drwxr-xr-x@  5 m  staff   170 17 Jun 07:11 .. drwxr-xr-x@ 16 m  staff   544 22 Mai 13:43 all_flash.n88ap.production  ./Firmware/all_flash/all_flash.n88ap.production: total 1320 drwxr-xr-x@ 16 m  staff     544 22 Mai 13:43 . drwxr-xr-x@  4 m  staff     136 18 Jun 02:10 .. -rw-r--r--@  1 m  staff   44996 22 Mai 13:08 DeviceTree.n88ap.img3 -rw-r--r--@  1 m  staff   67908 22 Mai 13:12 LLB.n88ap.RELEASE.img3 -rw-r--r--@  1 m  staff    9604 22 Mai 13:15 applelogo.s5l8920x.img3 -rw-r--r--@  1 m  staff   19716 22 Mai 13:15 batterycharging0.s5l8920x.img3 -rw-r--r--@  1 m  staff   24900 22 Mai 13:16 batterycharging1.s5l8920x.img3 -rw-r--r--@  1 m  staff   76100 22 Mai 13:16 batteryfull.s5l8920x.img3 -rw-r--r--@  1 m  staff   56772 22 Mai 13:16 batterylow0.s5l8920x.img3 -rw-r--r--@  1 m  staff   65348 22 Mai 13:17 batterylow1.s5l8920x.img3 -rw-r--r--@  1 m  staff   20356 22 Mai 13:17 glyphcharging.s5l8920x.img3 -rw-r--r--@  1 m  staff   19332 22 Mai 13:18 glyphplugin.s5l8920x.img3 -rw-r--r--@  1 m  staff  178500 22 Mai 13:21 iBoot.n88ap.RELEASE.img3 -rw-r--r--@  1 m  staff     341 22 Mai 13:43 manifest -rw-r--r--@  1 m  staff   20484 22 Mai 13:24 needservice.s5l8920x.img3 -rw-r--r--@  1 m  staff   47876 22 Mai 13:24 recoverymode.s5l8920x.img3  ./Firmware/dfu: total 416 drwxr-xr-x@ 4 m  staff     136 22 Mai 13:39 . drwxr-xr-x@ 5 m  staff     170 17 Jun 07:11 .. -rw-r--r--@ 1 m  staff  104772 22 Mai 13:30 iBEC.n88ap.RELEASE.dfu -rw-r--r--@ 1 m  staff  104772 22 Mai 13:36 iBSS.n88ap.RELEASE.dfu