2015-06-10

FCC 740 フォーム

スマートフォンをアメリカに送る必要があったのでFedexで送ったのだけど、税関でFCC 740フォームが必要と連絡があったのでその時のメモ。

日本で技適があるようにアメリカでもFCCで電波規制が存在してる。そのためスマートフォンなどを送るとこのフォームを書く必要があるそうだ。

  • Device Model: 日本での型番
  • Trade Name: 日本での商品名
  • FCC ID: FCCの認可番号。日本のスマートフォンはFCCの認可を通している場合がほとんどなので、その番号を調べて記入
  • Description of Equipment: smartphoneとか書く
  • Manufacturer’s Name and Address: 製造した会社。および住所。ソニーだったらソニーの住所
  • Consignee’s Name and Address: 受け取り人
  • Importer’s Name and Address: 輸入したのが受け取り人であれば、Same as consigneeって書く。だいたいそれでOK
  • Printed or Typed Name of Importer or Consignee: 発送者または受け取り人。ようは自分の名前を書いとく
あとPart 2のところは該当するものにチェック。今回は売り物じゃないので7.にチェック

こんな感じでフォームを埋めたら税関通った。

2015-05-05

Adobeが行っている各ブラウザへのコントリビューション

Microsoft EdgeでAdobeがコードの貢献をしたという話があったのだけど、これを見て、EdgeはAdobe、Microsoft連合だ思っている人が多いみたいなので、Adobeが各ベンダに対してやってることを書こうかと。

まず、彼らはSVGとかCSSとかの仕様への貢献をずっと行っていて、SVGの場合ではSVGWGのFace to Faceミーティングの場所を毎年貸し出したりしてる(シアトルのオフィスがそれ)。

そもそもAdobe自体はいろいろとWebに対しても行っているのだけど、彼らにとって、仕様の貢献を行っていても実際ブラウザベンダが実装しない限り絵に書いた餅でしかないので、彼らが必要と思っている(関わっている)仕様に関しては実装まで手を出しているってのがここ数年の状況だ。

Geckoサイドでいうと、CSS Filtersは彼らの貢献なしでは実装が進まなかったというか、その部分に関しては彼らがコード書いている。

WebKitだとCSS ExclusionsとかCSS FiltersとかCSS Regionsらへんが絡んでる。(Feature FlagをAppleがOnにしないとSafariとかで使えないけどね)

BlinkだとBlendingとかCSS Sharpesとか

このようにAdobeという会社は各ベンダーのエンジンに対してコードを書いてたりする。自分たちが必要だから仕様を策定しているのだから、そりゃ当然実装にも手を出すよねってこと。Microsoftの件はそれがOSSでなかったとしても手を出し始めたということだね。

基本的にAdobeのブログとかで触れられるCSSとかの仕様・技術の話は彼らが仕様策定に絡んでいたり、実装を行っていたりするものなので、そういう視点でブログを読むとより楽しく感じる思う。

ちなみにAdobeのMozillaへの貢献としてTamarinというJITエンジンの話を出す人がいるけど、あれパフォーマンス出なくてGeckoへ統合されなかったものなんだよね。しかもその後、現Mozilla CTOのGalがほぼ一人で書いたTracing JITのほうが遥かに速かったというオチまでついた。(JavaVMへのTracing JITの実装を大学でやってた時にBrendanに引きぬかれたのがMozillaに来たきっかけだった記憶がある)

2015-04-09

ARMv8 におけるAESアクセラレータ

CPUが自分自身で暗合用命令を持つのは、x86だとVIAのC7くらいが最初だったと思うけど、ARMもARMv8はCPU自体に持つことになった (TIのOMAPとかはDSPにアクセラレータが入ってた記憶があるけど)。aarh64でもコンパイル時にオプションが必要なので標準命令に入ってないっぽいからIP的にはオプションなのかも。

IntelでもNehalemで同様にAES用の命令が追加されていて、既にOpenSSLとかNSSとかLinuxカーネルとかで既に使われてる。

ARMv8ではAES用、SHA1用、SHA2用の命令が追加されているのだけど、今日はAESの話。

まず最初にAESの暗号化のアルゴリズムを簡単に説明すると、

AddRoundKey
for i = 1 to 10
  ShiftRows
  SubBytes
  MixColumns
  AddRoundKey
ShiftRows
SubBytes
AddRoundKey

と表せる。ARMv8の場合は、このアルゴリズムをいくつかの専用命令で実装できるようになった。

aeseは、AESのアルゴリズムの内以下の命令を実行する。

AddRoundKey
ShiftRows
SubBytes

aesmcは、AESのアルゴリズムの内以下の命令を実行する。

MixColumns

同様に復元化はaesdとaesimcで可能。

このようにこの2つの命令を使うことで、AESの暗号化の実装が可能になってる。すなわち暗号化の際にはaeseとaesmcでRound処理をして最後のラウンドだけaeseとveor使って実装することができる。AES 128bitの暗号化をARMv8で実装すると (AddRoundKeyはXORなので)

for i = 1 to 10
  aese
  aesmc
aese
veor

ということになる。なおこれらは最近のチップ(Apple A7やNVIDIA Denver、Cortex-A57/53ベースのもの)であれば32ビットモード(aarch32)であっても利用可能。

サポートされているかどうかについてはLinuxであれば、/proc/cpuinfoを見れば、Featuresにaesがあるかどうかで確認できる。

Processor       : NVIDIA Denver 1.0 rev 0 (aarch64)
processor       : 0
processor       : 1
Features        : fp asimd aes pmull sha1 sha2 crc32
CPU implementer : 0x4e
CPU architecture: AArch64
CPU variant     : 0x0
CPU part        : 0x000
CPU revision    : 0

Hardware        : Flounder
Revision        : 0000
Serial          : 0000000000000000
MTS version     : 33410787



また参考としてx86のAES専用命令の場合は、aesencとaesenclastを使って暗号化、aesdecとaesdeclastを使って復元化する。すなわち、x86でのAES 128bitの暗号化は、

AddRoundKey
for i = 1 to 10
  aesenc
aesenclast

ということ。ARMとIntelで実装アイデアが違うのは興味深い。

2015-04-07

Vertical Layout on IME Sample

Microsoft Word on Windows 8.1 and Microsoft IME


Microsoft Word on Windows 8.1 and Microsoft Pinyin


Firefox 40 on Windows 8.1 and Microsoft IME


Firefox 40 on OSX 10.10 Yosemite and Apple Input Method

2015-04-06

Python本体のしょうもないバグを直したのでその時のメモ

Servoというプロダクトでmachというビルドツールを使ってるのだが、こいつがPythonで書いてある。machをMSYS2で実行するとなんかPython本体がクラッシュするので軽く調べてみると、Python内部でエラー時の処理が間違ってて、ctypes経由でPythonがクラッシュするという現象らしいということがわかった。

そういうしょっぱいバグをレポート (http://bugs.python.org/issue23338) したんだけど、その際の手順。


バグをレポート
Issue Tracker (http://bugs.python.org/)にバグを登録する。

"Create New" を選択して、タイトルなどいろいろ書きこむ。

なお、パッチを書く場合は、https://docs.python.org/devguide/triaging.html#mercurial-repository に書かれているように、各ブランチ毎書くことも可能

最近のプロダクトだとレビュープロセス用の操作があったりするのだけど、どうもPythonの場合は存在しないみたい。そのため、バグを登録するだけらしい。

こういうしょぼいバグでもだいたい2か月くらいでハンドルされるので、バグを登録してもすぐ直してくれるってことではない感じだね。それは仕方ないけど。