[HTML5]マークアップの意味論

 藪下@二課のHTMLは不得手な方です。

 HTML5 Exparts.jpでマークアップの意味についての話題が出てました。

よくある3つのデザインから考える、マークアップの最適解
http://html5experts.jp/nakajmg/2502/

 水平線にhr要素を使わないって書かれてるのを見てお、おう。。。となる程度のHTML力を誇る藪下なので全編勉強になりました。
 マークアップの意味論はまじめに考えたことなかったんですが、言語を用いるのにセマンティクスに気を使わないのは伝えたいことを錯誤して伝えることがあるということですよね。反省です。

[UI][フラットデザイン]ズルいフラットデザインテクニック

 藪下@二課のUI設計できない人です。

 webデザインの面白いスライド見つけました。
 フラットデザインをなんちゃってだけどお手軽にそれらしくする方法です。

ズルいデザインテクニック2013 + セミフラット version
https://speakerdeck.com/ken_c_lo/zuruidezaintekunituku2013-plus-semihuratuto-version

 web界隈では有名な方なんですかね。ズルいデザインテクニックの連載もされているようです。
 パラメタライズされたモジュールを使いまわしていこうっていうのはプログラマ的ですよね。うちの新人たちも見習え。
 web方面は門外漢なんで新鮮でした。いろいろできるようになってるんですね。
 webアプリ作るときは一回フレームワークとかちゃんと調べてみようかと思います。

[Firefox OS][FxOS][Gecko]デバッグ情報付きのビルド

 藪下@2課のガジェオタです。

 ちょっとFirefox OSのGeckoのソースコード読んだりしていてスタックトレース取りたいなとか思うところがあったのでデバッグ情報付きのビルドを試してみました。
 今日の目次。

      デバッグビルド設定
      ビルド
      ディスアセンブル

デバッグビルド設定

 FxOSのビルド設定には.userconfigファイルを使います。
 以下MDNの解説ページです。

Customization with the .userconfig file
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Customization_with_the_.userconfig_file
#日本語がないので誰か訳して!

 最初のほうに書いてある通りビルド環境のルートに.userconfigを置いてその中に設定を書いてねということです。
 デバッグビルドは以下のフラグです。

export B2G_DEBUG=1

 最適化を抑えたい場合のフラグもあります。今回はつけません。

export B2G_NOOPT=1

ビルド

 ビルドはいつものgeckoビルド。

./build.sh gecko

 お目当てはlibxul.soあたりなので探してサイズ見てみましょうかね。

$ find -name libxul.so -ls
3957733  17456 -rw-r--r--  1 root       yabushita   17871052  8月  6 04:01 ./backup-keon/system/b2g/libxul.so
2640914  37960 -rwxr-xr-x  1 yabushita  yabushita   38869944  6月 11 04:42 ./gaia/xulrunner-sdk/bin/libxul.so
2637188  44820 -rwxr-xr-x  1 yabushita  yabushita   45894424  6月 11 04:41 ./gaia/xulrunner-sdk/sdk/lib/libxul.so
2640866  44820 -rwxr-xr-x  1 yabushita  yabushita   45894424  6月 11 04:42 ./gaia/xulrunner-sdk/lib/libxul.so
2492722      0 lrwxrwxrwx  1 yabushita  yabushita         31  9月 18 19:56 ./objdir-gecko/dist/bin/libxul.so -> ../../toolkit/library/libxul.so
2658747      0 lrwxrwxrwx  1 yabushita  yabushita         34  9月 18 19:56 ./objdir-gecko/dist/sdk/lib/libxul.so -> ../../../toolkit/library/libxul.so
2658991  17556 -rwxrwxr-x  1 yabushita  yabushita   17975724  9月 18 19:57 ./objdir-gecko/dist/b2g/libxul.so
2492723      0 lrwxrwxrwx  1 yabushita  yabushita         31  9月 18 19:56 ./objdir-gecko/dist/lib/libxul.so -> ../../toolkit/library/libxul.so
2495101 466732 -rwxrwxr-x  1 yabushita  yabushita  477927944  9月 18 19:56 ./objdir-gecko/toolkit/library/libxul.so
2115069  17556 -rwxr-xr-x  1 yabushita  yabushita   17975724  9月 18 19:57 ./out/target/product/keon/system/b2g/libxul.so

 おや?
 dist配下というかoutに入った奴はデバッグシンボルついてなさそうですね。
 なんでかすら? ビルドの後にstripしちゃったりなんかしちゃったり?

ディスアセンブル

 とりあえずtoolkit配下のはでっかくなってるのでobjdumpしてみましょう。-Sスイッチで混合モードですね。

$ prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-objdump -S objdir-gecko/toolkit/library/libxul.so > ~/Documents/FxOS/libxul-debug.asm

 ソースコード出てたところを一部抜粋。インライン展開うぜえ。。。

NS_IMETHODIMP
nsCacheEntryDescriptor::SetCacheElement(nsISupports * cacheElement)
{
  2e113c:	b537      	push	{r0, r1, r2, r4, r5, lr}
  2e113e:	4604      	mov	r4, r0
  2e1140:	20b1      	movs	r0, #177	; 0xb1
  2e1142:	460d      	mov	r5, r1
  2e1144:	f000 ffd8 	bl	2e20f8 <_ZN14nsCacheService4LockEN7mozilla9Telemetry2IDE>
    nsCacheServiceAutoLock lock(LOCK_TELEM(NSCACHEENTRYDESCRIPTOR_SETCACHEELEMENT));
    if (!mCacheEntry)                 return NS_ERROR_NOT_AVAILABLE;
  2e1148:	6920      	ldr	r0, [r4, #16]
  2e114a:	4c08      	ldr	r4, [pc, #32]	; (2e116c <_ZN22nsCacheEntryDescriptor15SetCacheElementEP11nsISupports+0x30>)
  2e114c:	b140      	cbz	r0, 2e1160 <_ZN22nsCacheEntryDescriptor15SetCacheElementEP11nsISupports+0x24>

    bool IsDoomed()          { return (mFlags & eDoomedMask) != 0; }
    bool IsEntryDirty()      { return (mFlags & eEntryDirtyMask) != 0; }
    bool IsDataDirty()       { return (mFlags & eDataDirtyMask) != 0; }
    bool IsMetaDataDirty()   { return (mFlags & eMetaDataDirtyMask) != 0; }
    bool IsStreamData()      { return (mFlags & eStreamDataMask) != 0; }
  2e114e:	6a83      	ldr	r3, [r0, #40]	; 0x28
  2e1150:	04d9      	lsls	r1, r3, #19
    if (mCacheEntry->IsStreamData())  return NS_ERROR_CACHE_DATA_IS_STREAM;
  2e1152:	bf48      	it	mi
  2e1154:	4c06      	ldrmi	r4, [pc, #24]	; (2e1170 <_ZN22nsCacheEntryDescriptor15SetCacheElementEP11nsISupports+0x34>)
  2e1156:	d403      	bmi.n	2e1160 <_ZN22nsCacheEntryDescriptor15SetCacheElementEP11nsISupports+0x24>

    return nsCacheService::SetCacheElement(mCacheEntry, cacheElement);
  2e1158:	4629      	mov	r1, r5
  2e115a:	f000 ff59 	bl	2e2010 <_ZN14nsCacheService15SetCacheElementEP12nsCacheEntryP11nsISupports>
  2e115e:	4604      	mov	r4, r0
  2e1160:	a801      	add	r0, sp, #4
  2e1162:	f7ff f90b 	bl	2e037c <_ZN22nsCacheServiceAutoLockD1Ev>
}

 混合モードでディスアセンブルできましたー。
 あとはdistとかoutに入ってくれたらいいんですけどなんで入らぬの? 教えて偉い人!

#2013/11/19追記
 rm -rf objdir-geckoしてあげると多分うまく行きます。
 .mozconfigとかを調べてみたのでそのエントリはまた後日。

おまけの宣伝

 あ、藪下の個人的な活動ですがFxOSコードリーディングという会を始めてみました。
 Firefox OS勉強会で知り合った人たちとFxOSのソースコードを読んで意見交換してます。
 藪下の成果は本ブログに書いていくつもりです。

FxOSコードリーディング
https://www.facebook.com/groups/1408800662676489/

[iOS]iOSに入る近距離無線通信iBeaconどうなんだろう?

 藪下@2課のガジェオタです。

 どうやらiOSにも近距離無線通信が入るみたいですね。BTを使ってるみたいですが。

iOS7の隠れキラーコンテンツとなる近距離無線通信「iBeacon」とは?
http://gigazine.net/news/20130911-ibeacon/

 キラーコンテンツとなるかというと日本ではちょっと疑問がありますね。これで交通系ICが代替できるようになるならキラーコンテンツ足り得ると思いますが。
 なぜNFC積まなかったんでしょうね? 過去のiOSデバイスが置き去りになるから?
 Beaconも大きいしなんというかもにょもにょしますがBeaconにしろNFCにしろもっと頑張ってほしいですね。このままじゃFeLiCaが駆逐できなくてやっぱり日本はガラパゴスです。

[Tizen][Polaris App Generator] apkをtpkに変換するサービスができるそうです

 最近ブログさぼりすぎで怒られそうな藪下@2課のガジェオタです。

 Tizen大全さん見てたら面白そうなツールが紹介されてました。apkをtpkに変換するサービスだそうです。

[POLARIS App Generator]1..apkを.tpkに変換させる、PAGご紹介
http://tizentizen.net/?p=768

 後発サービスは先発サービスの資産をどれだけ取り込めるかが一つの見どころですが、これはAndroidからTizenにアプリが流れ込んでいくのを促進してくれておもしろそうです。
 何かとFxOSと比較されて端末リリースで遅れているTizenなのでこういう別の部分からバランスしていくのはウォッチしている立場としては面白いです。
 これ面白そうなのでそのうち暇なときにでも生成されたコードとか調べてみようかなと思います (ライセンスが許せば)。