2013年2月10日日曜日

GitHubで"Clone in Mac"でクローンすると、git pushでエラーになる(備忘録)


GitHubでコマンド経由でなくて、ブラウザの"Clone in Mac"でクローンしたときに、ファイルいじってgit pushしたらエラーになった。



まあ、解決方法は以下のStackoverflowの通り。
Pushing to Git returning Error Code 403 fatal: HTTP request failed

  1. ローカルリポジトリの.git/configureを開く
  2. 以下のように"https://**"を修正
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = ssh://git@github.com/k-ori/MyJSON-js.git
[branch "master"]
remote = origin
merge = refs/heads/master

いちおう備忘録として。

2013年1月19日土曜日

Ballmer Peak - 飲酒で超人的なプログラミング能力を発揮する


飲酒で超人的なプログラミング能力を発揮できるらしい。

プログラマーはなぜ夜遅くに仕事をするのか?という3つの理由 - Gigazine

元々、上の記事を飲んでいたのだけど、その中でとんでもない内容を発見してしまった。

疲れがプログラマをより優れたコーダーにするからです。これはバルマー・ピーク(血中アルコール濃度の0.129%から0.138%の範囲において、超人的なプログラミング能力が発揮される現象)と似た現象で、脳が疲れていると集中力は増すのです。

Σ(・ω・ノ)ノ

血中アルコール濃度が0.129%から0.138%の場合に、超人的なプログラミング能力が発揮される?

学生時代、飲み会の後に大学の演習の宿題を解き始めて以来、飲んでから書くことが多い自分にとっては人生が肯定されるかのような話。まわりのプログラマに普段から飲んだくれている人はあまりいないので、なおさら驚きである。

ちなみに、血中アルコール濃度が0.129%から0.138%というのは、缶ビール3本(日本酒三合)の酩酊初期くらいらしい。
血中アルコール濃度と酔いの症状 - KIRINビール

一応、学術的な内容を紹介している記事を見つけたので、翻訳してみた。

Bottoms Up: The Ballmer Peak Is Real, Study Says

酒はプログラマーにとっては、ポパイのほうれん草なのだろうか?Microsoftのスティーブバルマーにちなんだ「バルマーピーク」とは、アルコールをたしなむことによってYerkes-Dodsonの法則における変換点(急激に値が上昇する点)まで認識能力を向上させるという説である(Yerkes-Dodsonの法則とは覚醒とパフォーマンスとの相関関係に関する法則である)。事例証拠によると、二杯のビールにより最適なプログラミングが可能になるという。しかし、学問的にそれが実証されているのだろうか?

近年、イリノイ大学によって、Vodka Cranberryとスナックを与えることによりクリエイティブな問題の解決能力が測定された。その結果、血中アルコール濃度が0.075で飲んだくれているグループについては、そうでないグループに対して全く違った結果が得られた。

驚いたことに、飲酒していないグループが平均して6問しか正答出来なかったのに対し、飲酒したグループにおいては9問正答することが出来たのである。また、飲酒している被験者は11.5秒で回答することが出来たのに対し、飲酒していない被験者は15.2秒かかったのであった(それぞれのグループはアルコール無しの状態では同様の問題に対して同等の正答率であった)。

本研究は、バルマーピークの効果がクリエイティブな問題の解決に有効であることを示している(ただし、作業中の記憶についてはその限りではない)。ということで、コーダー諸君。飲み干しても良いのである。

San Franciscoでは去年、Ballmer Peak-a-thonというHackathonまで開催されたらしい。

ちなみに以下のページによると、スティーブバルマーが由来になった理由としては、しばしば自分をコントロール出来なくなり"animal"と化すからだそうである。
http://www.kirainet.com/english/ballmer-peak/

プログラマの人は、コーディング前のビール三本始めてみませんか?

2013年1月14日月曜日

第六部:就労ビザでのアメリカ入国とSSN取得後の手続き

全体の移住ストーリーについては、以下をご覧ください。
日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

これまでの経緯は以下をご覧ください。
第五部:住民票や税金など(日本国外への転出編)

アメリカ入国


初めての片道切符での渡米です。ビザ無しとの違いは、以下の3点かと。
  • ESTAが不要
  • I-94フォームを書いて入国時にImmigrationに提出する必要がある
  • I-797フォームを入国時に提示する必要がある(おそらくHビザのみ)

2点目は忘れてて入国審査官に書くように促されました。審査官の質問自体も何しにU.S.に来たかとどれくらい滞在予定かを聞く程度だったと思います。

ということで、晴れてビザで入国出来たため、ここから先はSSN取得とそれにより人間扱いしてもらった後の各種手続きです。
  • 入社手続き
  • SSN(ソーシャルセキュリティナンバー)取得
  • クレジットカード申込み
  • iPhone購入
  • 在留届提出
  • 運転免許取得(実はまだ仮免許)
  • 確定申告(まだしてない。備忘録)

入社手続き


まずは入社手続きです。
  • 雇用契約書等のサイン
  • 給料の振込先指定
  • 保険や年金

通常の雇用契約書や会社主催のレクリエーションで飲み過ぎて倒れても会社は責任を負いませんなどの書類にサインをします。給料の振込先は銀行口座を指定して、VOIDと書いた小切手を添付します。保険と年金の手続きと一部の契約書については、SSNが必要になるため、実際にはSSNを取得してから実施しました。

保険の手続きについては、以下のように詳しいサイトがいくつかあるのと、その人の健康状態にもよるので特に詳しくは書きません。ただ、こちらで働く日本人が行く病院はHMOには加入していないケースが多いため、PPOにする人が多いようです。

アメリカの健康保険事情

年金についても401kとかあるのですが、全く解説できるレベルでないため、省略。。。
401k - Wikipedia

SSN取得


入国後7-10日後でないと入国時の情報がソーシャルセキュリティオフィスに行かないらしく、入国してすぐにSSNが取得出来る訳ではありません。会社からは入国後1週間後にすぐに行くように言われたため、ちょうど1週間後にオフィスに行きました。オフィス自体は各シティごとくらいにあります。住んでるところの最寄りのオフィスに行くように会社からは指示されました。

こちらに来てから朝起きられない度がさらに重症になっており、がんばって起きて10時にソーシャルセキュリティオフィスへ行きます。まずはセキュリティチェックのための行列に並びます。30分くらい待った気がします。チェックを抜けると手続きの内容によって行く部屋が別れており、部屋ではそれほど待ってる人もおらず、番号を受け取って申請書を書くとすぐに呼ばれます(ていうか、書いてる間に呼ばれてて気付かなかったw)。ビザ取得に関する書類とパスポートを提出するとすぐに手続きは終了し、ソーシャルセキュリティカードが後日、郵送されてきます。これで人並みな生活が出来るようになります。もちろん、会社にもコピーを提出します。

クレジットカード申込み


クレジットカード大国アメリカでクレジットカードを作る準備がSSN取得で整います。けれども、そこにはクレジットヒストリーが無いとクレジットカードが作れず、クレジットカードが無いとクレジットヒストリーがたまらないという奇妙な鶏と卵の関係がある訳で、まあこの点についても下記のページ等をご覧ください。

クレジットヒストリーのつくりかた

自分もご多分にもれず、ANAカードを作成しました。

ANA Card USA

iPhone購入


SSN取得によりプリペイド携帯生活から脱却可能となり、仕事でも使うからiPhone買うか。。iPhone5買うなら最初からSIMロックフリーのVerizonのiPhone5にするか。。とAppleストアに出かけていきました。

と、ここでも戦いが。。。AT&TのプリペイドSIMからのナンバーポータビリティだった訳ですが、ナンバーポータビリティのためには、まずAT&Tのアカウントナンバーというものが必要らしくそれにはまる。サイトにログインしてもでてこないし、サポートに電話しても休日で取り次げませんみたいな声が返ってくるしで、同じモール内にあるAT&Tまで歩いて行ってアカウントナンバーを聞き出しました。ログインしたマイページにもでないし、店頭でもIDの提示を求められたからそれなりにセキュアな情報ぽい。

そして、SSN聞かれたのでキターと提示したら、どうもクレジットヒストリーが無いからキャリアであるVerizonにおうかがいを立てんといかんみたいなことになって、ソーシャルセキュリティカードをFAXしてもらったのだけど待てども待てども返事は来ない。。。結局、このあたりのエリアの親玉であるVerizonのショップに行った方が早いでと言われてアップルストアからは退散。

El Camino Real沿いにあるVerizonへ移動。ここでは無事ゲットできました。データプランは1GB以上じゃないとテザリング出来ないと言われて1GBを選択。ただ、やっぱ最初に$100のデポジットが必要でした。いろんなところでデポジットを払いすぎてもはやどこから取り戻せばいいのか忘れてしまいそうです。。。

しかし、ベイエリアの自分の行動範囲内はどこでもLTEが入って、Verizonはかなり快適です。

運転免許取得


運転免許についてはSSNをたとえ持っていても、ビザが無いと試験は受けられないようです。手順は、日本と同じく下記の2ステップです。ただし自動車学校に通わないとほとんど通らない日本ほど難しくはないようです。現在、筆者は1はクリアしたのですが2の実技は今月末に控えているため、結果が出たら追記します。

  1. 筆記試験のみでの仮免許取得(といっても国際免許保持者はLicenseでなくPermit)
  2. 実技試験による本免許

筆記試験


まずは第二部の車の個人売買で出てきた、日本でいう運転免許センターのようなところのDMVで予約をします。オンライン上で可能です。このDMVは別に最寄りである必要はなく、筆記と実技で場所が違っても問題無いようです。

DMV Appointment System

注意点としては、くるまの免許だからといきなりbehind-the-wheel driving testを選ばずにOffice visit appointmentsを選ぶことでしょうか。behind-the-wheel driving testは実技試験の方です。筆記試験は日本語で受けることが可能です。しかも、試験のパターンがいくつか決まっていて、問題と採点結果を持ち帰れるため、世の中にあふれている過去問を解いておけばたいてい通ります。

当日のステップと過去問は以下のサイトとかで閲覧できます。注意点はパスポートや日本の免許証/国際免許証をきちんと持っていくのと、お金が$28いることでしょうか(クレジットカード不可。デビットは可)。

DMV運転免許 日本語試験問題集(カリフォルニア・バージョン)

試験自体は選挙の投票をするみたいな仮設ぽいブースで立ったまま解きます。解いてる間にカンニングで捕まっているおばさんがいました。当たり前ですがこんな簡単な試験(て難易度の問題じゃないw)でカンニングはやめましょう。

その場で採点されて合格したら、仮免許証が発行されます。ここで問題発生。上記サイトやいくつかのサイトでも、国際免許証を持っていると、"License"とついた仮免許証がもらえる想定だったのですが、カリフォルニアでは国際免許証はLicenseでなくPermitだから"Permit"の仮免許証しかもらえないと言われました(なぜかこういう時にこっちの職員は「カリフォルニアでは」という枕詞をつける傾向がある気がする・・・)。最初、職員AがLicenseを発行しようとしたところ、職員BがPermitやでーて言い出して、職員Aが偉い人に確認しに行って結局、Permitしか発行されませんでした。食い下がってもマネージャーが出て来てくつがえらず。。。

Permitだと試験に受けにくる時に免許保持者に同乗してもらう必要がある(Licenseだとそれが不要)とのこと。ただ、普段はどうすんねんて聞いたら国際免許証を出せばポリスは分かるだろうからそれでいいとかいうよく分からないことを言われて、試験を受けにくる時は同乗者が要るとか全然意味分からんと思いつつ、結局くつがえりませんでした。会社の同僚も、後で確認したら発行されたのは"Permit"だったらしく、このあたりは謎です。行くDMVによって異なるかもしれません。とはいえ、この仮免許証に書かれた番号が実技試験の予約で必要になります。

実技試験


実技は下記のサイトで、今度こそbehind-the-wheel driving testを選択して予約します。試験を受ける場所を選択したら、予約出来る日時が出てきます。

DMV Appointment System

ここの続きは、実際に受けた後にでも更新します。

確定申告


アメリカでは会社は確定申告してくれないため、受け取ったW-2フォームといものを使って自分でやらないといけないです(先日、受け取ったのでやらねば)。下記のサービスなどを使用するとインターネット上でブラウザのみで手続きできるようです。

TurboTax

ICカードリーダライタを買わないといけない日本のetaxに比べて合理的。

在留届提出


インターネットによる在留届電子届出システム

これ、実は知らなくてさっき手続きしました。。。
この在留届は、海外で長期に滞在される方及びその家族の方すべてが対象となります
だそうです。ただ、ここで届け出ても選挙のためにはやはり総領事館(ベイエリアだとサンフランシスコ)まで行って手続きをしなければいけないようです。

とりあえず、以上です。運転免許の実技試験やその他何か気付いた手続きがあれば、さらに追記していきます。

当初の想像以上の量になりましたが、誰かのお役に立てれば幸いです。あと、以上すべて2012年から2013年の情報でこれから制度が変わったり、既に誤った情報が含まれているかもしれませんのでご注意ください。

第五部:住民票や税金など(日本国外への転出編)

ビザ付きパスポートは、面接の6日後くらいに実家に届きました。あとは、日本にいる間に国外転出の手続きをする必要があります。主にやったことは以下の点。
  • 日本の会社からアメリカの会社への転籍手続き
  • 住民票抜く(国外転出届)
  • 年金
  • 保険
  • 納税代理人の登録(市町村の税務署)
  • 地方税納税管理人の登録(1/1に住んでいた場所の役所)

全体の移住ストーリーについては、以下をご覧ください。
日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

これまでの経緯は以下をご覧ください。
第四部:2013 H-1B Capビザ面接

日本の会社からアメリカの会社への転籍手続き


これについてはH-1Bを取得してくれた会社のHR部門と入社日のすり合せをして、日本の会社を退職するだけ。これで日本では無職です。アメリカに戻った後に、アメリカの会社での正式な雇用契約書へのサインや保険等の手続きが始まります。

ちょっと調べてみたところ、ハローワークに「失業保険受け取り延期手続き」というものもあるらしいです。
海外移住者や育児出産などの理由で、帰国後失業保険を貰う権利を残しておくための手続きです。最大で3年の延長が可能です。
海外移住というキーワードに反応して他の役所の手続きをしたついでにハローワークにも行ってみたのですが、海外就労者の配偶者には適用可能だが海外就労者自身は不可、と門前払いされました。。。

住民票抜く(海外転出届)


自分の住民票がある役所に行って、海外転出届を提出します。この海外転出届を提出することにより、以下の義務が外れるようです。ただ、国民年金については任意での加入も可能のようです。
  • 国民健康保険の加入
  • 地方税の納税義務
  • 国民年金の支払い義務

国民年金の方は、日本の会社の厚生年金を抜けた時点で後日加入案内が来るが、海外転出した旨を届け出れば支払う必要が無いという説明でしたが、この後日案内については現時点で未確認。

納税代理人の提出


確定申告をしてから出国することも可能でしたが、自分の場合は親を納税代理人にして後で確定申告することを選択しました(確か源泉徴収が所属した2社分必要なのが1社分しか無かったからそうした気が)。最寄りの市町村の税務署で実施できます。

海外にいながら日本から個人で仕事を受けるケースについても職員に聞いてみたところ、発注する側が全体の2割を税金としておさめれば海外在住者は特に手続きをしなくていいとのことでした。あと、5年以内なら次の1月に手続きをしていなくても還付されるそうです。

住民税納税管理人の提出


住民税はその年の1/1に住民票を置いていた地方自治体に払う税金とのことで、転出した年分のみ支払う必要があります。そのための納税管理人を立てれば、後日納税管理人宛てに請求書が来るためあとはコンビニなりで支払ってもらうことができます。これも親にお願いしました。

役所的な手続き以外にも、携帯の解約やらいろいろとやはり手続きは多いです。

こうしてアメリカに戻り、次回は第六部:就労ビザでのアメリカ入国とSSN取得後の手続きです。

第四部:2013 H-1B Capビザ面接

アメリカ滞在中に面接予約までしたので、I-129とI-797Bを忘れずに携えて、2012/10/18に帰国。面接は2012/10/21でした。

全体の移住ストーリーについては、以下をご覧ください。
日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

これまでの経緯は以下をご覧ください。
第三部:2013 H-1B Capビザ面接予約

ビザ面接の準備


大使館のサイトに書かれている通り、以下を準備しました。Hビザ以外の場合は多少異なります。ちょっと前までパスポート送り返し用のレターパックも持参する必要があったみたいですが、自分の年には不要でした。また、自分は東京で面接を受けたのですが、札幌、福岡では多少手続きが異なるようです。
  • プリントアウトしたDS-160申請書の確認ページ
  • 5x5の顔写真
  • パスポート
  • プリントアウトした面接予約確認書
  • I-797請願書許可通知(コピーまたは原本)
  • I-129請願書(コピー)
  • 雇用のオファーレター
下記のように、DS-160に5x5の顔写真を貼り付ける必要があり、さらに書類の順番まで指定されています。

ビザ申請書類の並び順(PDF)

自分が面接を受けた時には、DS-160の確認ページに写真に加えて、申請料金領収書も貼付けろと書いてあった気がしますが、削除されたんかな?見当たらない。。。自分はクレジットで払ったので領収書は無かったのですが、何も貼付けてなくても、当日何も言われませんでした。2013/1/13現在、不要になったのかもしれませんね。

面接当日


面接当日は、予約した時間に総領事館の門に行けば良いです。当日の手順は、大使館のサイトに書かれている通りです。自分はAM10:00の予約時刻に赤坂の門に着きました。あと親は、「アメリカの大使館の面接なんてあんたスーツ着ていかんでええんかい」と心配していましたが、サンダルパーカーで問題ありません。

米国大使館(東京)での面接の手順

大使館の入口に近づくと行列があるのでそこに並んでおけば大丈夫です。入口にたどり着くと飲み物等の液体を捨てさせられて、簡単な書類のチェックがあります。面接予約確認書を忘れたという人も前後に並んでる人でいましたが、ここで「他の人に比べてすごく時間がかかります」と脅されてました。忘れたものによっては門前払いされそうな空気です。

その後に、最初のセキュリティチェックがあり、すべての電子機器を提出させられます。ノートPC、タブレット、携帯はもちろんのこと、鞄に入れていることを忘れていたUSBメモリやWiMAXのUSBスティック端末まで預けさせられました(後で預けた荷物を返してもらうためのタグをもらいます)。この後、2時間にもおよぶ面接待ちがあるので、本とか持って行くのが良いです。

最初のチェックを抜けると、奥の建物の入口で書類の再チェックと番号の書かれた紙をもらった覚えがあるのですが、この番号の書かれた紙をもらったタイミングの記憶が曖昧です。再度のセキュリティチェックのあとにようやく面接会場に入れます。空港の待合室のようにいすがずらっと並んでいて、電光掲示板上で窓口への番号呼び出しが表示されています。30分程待った時に最初の呼び出しがあり、指紋を採取します。その後、さらに1時間半ほど待った後に面接。といっても個室ではなく、待合所に面したところで映画のチケットを買うようなアクリルの板ごしに話すだけです。

質問内容はごくごく簡潔。自分の場合は一応英語でした。

Q1.キミはどこへいくの?
A1.カリフォルニア。そこの会社に雇われたんで

Q2.何の会社?
A2.ゲームパブリッシャー

Q3.シリコンバレー?
A3.そうだYO

Q4.学生時代は日本?アメリカ?
A4.日本だYO

Q5.学位は何とったの?
A5.コンピュータサイエンスのマスターだYO

-> キミのビザはapproveされたYO。1週間後くらいにパスポートが返ってくるからNE。

不安になって逆に質問する。
Q.え、これで全部手続き終わり?
A.そうだYO

ものの数分で完了。キーボードで何かを打ち込むのに忙しそうでこっちの回答に興味なさそうだったし、USCISですでに審査してるしで、まあこんなもののようです。ただ、Hビザ以外の一部のビザはシビアという話も聞くのでビザによりけりのようです。また、I-797やI-129もパスポートと一緒に提出しますが、後日パスポートと一緒に郵送されてきます。

次は第五部:住民票や税金など(日本国外への転出編)です。

2013年1月13日日曜日

第三部:2013 H-1B Capビザ面接予約

全体の移住ストーリーについては、以下をご覧ください。
日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

これまでの経緯は以下をご覧ください。
第二部:渡米後の車やプリペイド携帯などの生活準備(ビザ無し生活編)

USCISへのビザ申請結果受領


生活準備も落ち着いて、生活に徐々に慣れ始めた後もビザ申請の結果は出ない。第一部でも書いたように、USCIS - My Case Statusで自分のステータスを確認出来るのですが、Initial Reviewのまま(Acceptは5/21だったようです)。まあ、自分はautomatic case status updatesに登録していたので、あんまりサイトはチェックしてませんでした。

そうこうしているうちに 9月になり、同じくH-1B申請中の人に審査炎上中という記事を教えてもらいつつ一途にUpdateがメールでくるのを待っていたところ、同じく申請中の人が通ったでーとおっしゃってて自分もサイトチェックしてみたら、10日前(9/17)に通ってたw。うーん、automatic updateとは何だったのか。。。迷惑メールに振り分けられてしまったのか。。。

結局、審査に約4ヶ月かかったことになります。ということで会社に弁護士経由で書類が届き、日本のアメリカ大使館で面接を受ける必要がある訳です。承認日から書類が届く間での間には当然のことながらタイムラグがあります。なお、USCISへの申請結果はあくまで移民局に承認されたというだけで、ビザを取得するためには総領事館での面接のパスが必須となります。しかし、USCISで承認されれば面接で落とされることはあまり無いようです。

面接予約


会社からは以下の書類を受領しました。
  • I-129(雇用主および弁護士が作成した請願書)
  • I-797B(USCISが作成した許可通知書)
どちらもビザ申請で必要になる(ていうかおそらくビザを取った後も大切に補完する必要のある)大事な書類です。ここから先のステップは以下になります。基本的に公式サイトに書かれている通りです。
  1. ビザ申請料金の支払い
  2. DS-160の作成
  3. 面接予約
  4. 面接

1.ビザ申請料金の支払い


下記の公式サイトから支払い可能です。

米国ビザ申請|ビザ申請料金

Hビザの場合は、$190となります(お、レートが変わってる)。Payeasy対応ATMからも払えるようですが、自分はアメリカにいたので、クレジットカードで支払いました。最初に何回か失敗しましたが、アメリカのサービスだと思って後日リトライしてみたら支払えました。この時に、ランダムに表示される受付番号が非常に重要なので忘れずにコピペしておきましょう(そういや、このお金会社に請求してないことをいま思い出した・・・)。

2.DS-160の作成


DS-160とはオンラインで提出できるビザ申請書で、面接のための必須書類となります。これ、何気に記入量相当多いです。ただ、一時保存して後で続きを書くことも出来ます。あと、顔写真をアップロードする必要があり、その条件が何気に結構厳しいです。ピクセル数やらファイルサイズやらが合ってないと弾かれます。条件については公式サイト(PDF)を参照。

主な入力事項
  • ビザの種別やUSCISへの申請時のReceipt#
  • 過去のU.S.への渡航歴
  • アメリカでのコンタクトパーソンの情報(自分の場合は上司にした)
  • 両親の名前と生年月日など
  • 雇用者情報、過去の職歴、学歴(中学校まで!)
  • 過去5年の海外渡航歴と軍事に携わっていたかに関する質問など
  • 健康状態や犯罪歴など(あなたはテロリストの代表またはメンバーでしたか?など)
  • 面接を受ける場所

そして、提出後に表示されるバーコード付きの確認書が重要。プリントアウトして面接時に持参する必要があります。

3. 面接予約


詳細については、公式サイト参照。これもオンライン上で出来ますが、またたくさん入力しないといけません。

主な入力事項
  • ビザの種類
  • 面接を受ける場所
  • パスポート情報
  • DS-160の確認番号
  • 申請者の名前や電話番号、住所
  • 家族情報や特定の年齢や国籍であるかの質問
  • 米国でのビザ発行履歴
  • ビザが発行された際の送付先
  • ビザ申請料金の領収書番号

「請願者」の「開始日」、「領収書番号」、「有効期限」という欄が何を入れたらいいのかよく分からなかった。ビザが有効になった際の開始日(2012/10/1)、ビザ申請料金を支払った際の番号、ビザが有効であるであろう期限(2015/9/30)をとりあえず入力しといたけど、特に問題無かったです。

これだけ入力してようやく予約が可能になります。時間は、午前中の8:00-10:00の間が選べる模様です。ただし、後で書きますが指定時間に到着した後に待ち時間だけで2時間ほどあります。また、予約の変更も可能のようです。

4. 面接


第四部:2013 H-1B Capビザ面接

第二部:渡米後の車やプリペイド携帯などの生活準備(ビザ無し生活)

ここでは、ビザ未取得の状態で渡米してからの生活準備のことを書いていきます。

全体の移住ストーリーについては、以下をご覧ください。
日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

これまでの経緯は以下をご覧ください。
第一部:2013 H-1B Capビザ申請書類作成とドル立て口座の開設(渡米準備編)

ビザ無し渡米後に実施したのは以下の6点。
  • Checking Account作成。デビットカードもゲット
  • プリペイド携帯購入
  • 車購入
  • インターネット開設
  • 家具とかの生活準備
  • 弁護士から会社経由で書類を受け取ってビザ面接予約(ここだけ第三部

ちなみに日本人の場合は、ビザ無しで90日まで滞在可能です。ただ、目一杯滞在して再入国となるとイミグレーションの審査が厳しくなるため、注意が必要です。出来れば、Invitation Letter等を作成してもらうのが良いでしょう。では、それぞれについて説明していきます。

Checking Account作成


第一部で書いた通り、日本にいる間にユニオンバンクのSaving Accountしか開設していなかったため、アメリカ着の翌日の土曜日にChecking Accountを開設しに行きました。カリフォルニアのSan JoseのJapan Townにあるユニオンバンクの支店は、土曜も13時まで空いている上に日本語を話せる人もいたのですぐに開設できました。ただ、小切手とATMカード(デビット付き)は手続き後の郵送になります。ただ、カリフォルニア以外に住む方はこういった手はなかなか使えないかもしれないため、日本にいる間にChecking Accountを開設しておきましょう。

プリペイド携帯購入


アメリカではSSN無しでは人間扱いしてもらえないため、ポストペイドの携帯を持てません。なので、SSNを取得するまではプリペイド携帯でしのぐことになります。自分は、AT&TのGoPhoneで生活していました。ちなみに、こちらの電話番号は携帯電話も契約した場所の市外局番がつくため、日本と違って番号だけ見ても携帯かどうかの区別がつきません。また、後日ナンバーポータビリティも可能です(たとえプリペイドからであっても)。こちらについては第四部を参照。GoPhoneでのSIMの運用については以下のページが詳しいです。

AT&T GoPhone/プリペイドSIMをSIMフリー携帯等で使う場合のアクティベーションの方法

最初に(通話とSMSのみしかほとんどできない)一番安い電話機とプリペイドSIMを購入し、会社の同僚にAndroid携帯を借りてからはそちらにSIMを挿して使ってました。ただ、最初SIMをAndroid携帯に挿しても使えない。。。最初に購入した時に、他のAndroid携帯でもSIMを使い回せることをちゃんと店員に確認したのに。。。上記サイトの「Airtime Creditが付いたGoPhone携帯本体を使ってSIMをアクティベートしないでください」に引っかかっているようでした。まあしかしここはサービスの悪いアメリカ。めげずに後日、AT&Tにごねに行ったら、番号情報やプリペイド情報を新しいSIMにtransferして再発行してくれました。こうして、プリペイドSIMでFourSquareチェックインやTwitterが見れる環境を確保(そのあとそのお借りしていたAndroid携帯をなんと壊してしまってまたしょぼい携帯に戻ってしまったのですが、それは余談)。

車購入


サンフランシスコ等の都会と違い、シリコンバレーでは車が無いと生活できません。最初は1週間前にアメリカに着いていた同僚に同乗させてもらっていたのですが、すぐに探し始めました。使ったのは以下です。最後の2つのフリーペーパー系は紙媒体とサイトの情報が同期されてるかどうかは不明ですが、自分は結局紙媒体で見つけた中古車売ります情報で日本人の方から購入しました。アメリカでは中古車の個人売買がさかんで、中古車でも意外と値が落ちなかったりします(特に日本車。特にトヨタとホンダ)。
日本人同士でも車の売買はトラブルになりやすいようなので、注意が必要です。細かい注意点等はこういったサイトとか色々書いてあります。よく言うのが、Kelly Blue Bookで相場をチェックした方がいいというのと、Carfax.comで修理歴を調べた方がいいという点です。VINナンバーという車を一意に定めるIDを車を見に行った時や見に行く前に聞いておけばサイトで(どうやって情報を集めているのか・・・)修理歴や過去に何人の持ち主がいたかまで分かります。このサイトは有料ですが、一度調べておいて損は無いかと思います。

合意して引き渡し日等を決めれば保険の加入が必要になります。自分の場合は前のオーナーにState Farmというこちらでは大手の保険会社のエージェントをしている日本人を紹介してもらいましたが、時間が無い場合はProgressiveという会社だとサイト経由ですぐに保険に入ることも出来るようです。自分の場合は、エージェントの方から日本での無事故無違反証明書が取得出来ればさらに保険料が安くなると言われて、親に警察署で取得してもらいスキャンしてメールで送ってもらいました。あと、日本でいうところのJAFにあたるAAA(全米自動車協会)に入っていると色々お得なようです。このページとか見るとやっぱ入っといた方が良さそうだな(まだ入ってないからこれから入らないと・・・)。

受け渡しの事務手続きは、DMVという日本でいう運転免許センターみたいなところで行います。ここで所有者譲渡の手続きをします。必要な書類等はこういうとことかいろんなとこに書いてあります。譲渡時の値段を書くところがあるのですが、その値段によって税金も変わるようです。ただし、あからさまに$0で提出すると職員さんに問いつめられるようです。

インターネット開設


国土の広いアメリカでは、日本のように光ファイバーがどこでも契約出来る訳ではなく、一般家庭ではADSLやケーブルテレビがいまだ主流です。今住んでいる家は古い家なので、Comcastというケーブルテレビしかインターネットが来ておらず、Comcastで契約しました。しかし、これが開通するまでの間に半月もかかる長い戦いになりました。

最初は大家さんにWifiをお借りしていたのですが、自分で契約せんといかんということでWeb上で良い条件を探しました。こちらのインターネットの契約は不思議なことにどのキャンペーンを経由するかで月々の値段がまったく異なるのです。
  1. インターネット経由で本家から契約するのが20Mbpsでモデムレンタル込みで、最初の6ヶ月が$37/Monthが最も安そうだったのでインターネット上で手続きしようとしたところSSNが無いとかで途中で先に進めず
  2. Comcastに直接電話→公式Webでのキャンペーン料金よりも高い。ごねてもWebのPriceは電話では無理とか言われる
  3. 別のキャンペーンサイトから同じ条件を見つけて電話→おまえの地域は10ドル高いとか言われるしなんか電話いらんのに電話ついてくるし。おれらよりも安いとこないよとか言ってくるしで電話切る
  4. 結局、公式Webサイトのオペレータのチャット経由申し込みで目標の金額達成。SSNが無いので$50のdeposit取られました。(自分の英語力の関係上)チャットの方がコミュニケーションが取りやすかったのとやりとりが形に残るので、チャットはおすすめです

そして、工事。。。4回の訪問で開通。
  1. 工事の人が来てくれるものの、家のリフォーム時に屋外から来ている線を塞いでしまったらしく、大家さんの署名が無いと工事出来ないと言われる
  2. 大家さんに署名をもらいトライするも、明確に「壁にドリルで穴を開けても可」という文言が無いとカリフォルニアでは工事出来へんねん、と言われる
  3. そもそも来ねえヽ(`Д´)ノ。でも、来なかったお詫びで$20返って来た。
  4. 壁に穴開けて開通
こういう経験を繰り返して、米国在住者は「今日もアメリカは通常営業ですね ( ゚∀゚)アハハ八八ノヽノヽノヽノ \ 」と言える広い心を学んでいくようです。

家具とかの生活準備


IKEA一択。あと、Bestbuyで念願のルンバ購入。日本より安い$400ほどで購入。ベッドは会社の人にSleep Trainを教えてもらう。結構値が張ったけど、一日の4分の1を過ごす場所だしええかな、と。一人暮らしなのに無駄にクイーンサイズ(ちょっと上乗せするとサイズがあがったので)。まあ日本ではなかなか出来ないことだしいいですよね。

さて、次は第三部:ビザ面接予約編です。

第一部:2013 H-1B Capビザ申請書類作成とドル立て口座の開設

ここでは、ビザ未取得の状態で渡米して、生活をスタートさせるにあたって日本で事前に行っていたことを書いていきます。全体の移住ストーリーについては、以下をご参照ください。
日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

ビザ取得前に実施したのは以下の4点。
  • ビザ申請書類作成
  • 国際免許証の取得
  • ドル建て口座の準備
  • 家探し

それぞれについて説明していきます。

ビザ申請書類作成


まあ、これが一番大変です。自分は会社に紹介された弁護士からサイトを指定されて、そのサイトに必要事項を記入ししたり必要な書類をスキャンしてアップロードすることによって書類を作成してもらいました。H-1Bの詳細については、公式サイト弁護士のサイト等を参照してもらうとして、ポイントとしては以下の3点。
  • 毎年枠に限りがあるビザ
  • 専門職のビザ
  • アメリカの雇用主がいないと申請出来ないビザ
特に枠がポイントで、大統領とかが枠を増やすぜとか言わないと、近年だと(アメリカで修士号以上を取得していない人向けには)65000/年の枠しかないビザで、4/1に募集がスタートして枠が埋まり次第閉め切られて来年まで待たなければならないものです。自分の申請した2013年度向けは、2012/6/10に枠が締まりました。2008年度向けはたった3日で枠に達したというので早めの準備が必要です。また、アメリカの雇用主がいないと申請出来ないという点もかなりハードルが高いです。で、専門職用のビザということで大学での専攻が非常に重視されます。

ということで、最も大変なのは大学から成績証明書、学位証明書(両方とも英語版)を用意することなのでした。自分は東京在住、大学関西だったため、返信用の封筒を入れて交付願を送って返ってくるのを待つという時間が必要でした。しかも、大学と大学院で事務局が違うので3つくらいの宛先に別々に送らないといけないといういかにもお役所的なサービスの悪さ。ちなみに、英文の方が時間がかかります。サイトには受付後10日間+郵送日数と書かれており、実際郵送含めてやはり少なくとも1週間はかかった気がします。ということなので、大学の証明書の準備だけはくれぐれもお早めに!

自分の場合は4/10に弁護士からメールでコンタクトがあって、すべてがそろったのが4/27だったのですが、その前に締め切られていたらと思うと恐ろしい。。。フォームに入力した情報、アップロードした書類は大体以下です。ただし、提出書類はそれぞれの人のバックグラウンドによって多少異なるようです。自分は学生時代もコンピュータサイエンスを専攻していたため、卒業後の業績に関する書類は求められませんでした。

なお、H-1Bの枠の埋まり具合は、USCISの公式サイトで公表されています。あと、弁護士による申請が完了したら、自分のステータスを下記のサイトで確認できます。必ず、弁護士にReceipt#を確認するようにしましょう。

USCIS - My Case Status

主な質問項目と提出書類は以下です。

質問項目
  • 名前やメールアドレス、現住所、SSN(あれば)、U.S.での住所(あれば)
  • 最後にU.S.に入国した日と場所
  • グリーンカード・ナンバー(もしあれば)
  • 最寄りの総領事館の場所
  • パスポート番号、出生地などのパスポート情報
  • Labor Certification (PERM/RIR)を過去に提出したことがあるか?(ある場合はそのコピーを提出)
  • 本人もしくは家族がUSCISへの申請中に海外へ行く予定があるか?(ある場合は暫定の予定を記入)
  • グリーンカード申請書(I-485)を過去に提出したことがあるか?(ある場合はそのReceiptのコピー等を提出)
  • 犯罪歴について
  • 過去のHビザ、Lビザの経歴について

提出書類
  • 学部の成績証明書と卒業証明書
  • 修士の成績証明書、学位授与証明書と修了証明書
  • パスポートのスタンプ押された全ページのコピーと顔写真のページのコピー
  • Resume(英文の履歴書)
  • サイン入りオファーレター

国際免許証の取得


これについてはそれほど珍しいものでもないので、いくらでも情報があるかと思います。最寄りの警察署か免許センターに行って申請するだけです。

ドル建て口座の準備


これについては、自分は三菱東京UFJ銀行傘下のUNION BANKのカリフォルニアアカウントに申し込みました。

海外口座ご紹介サービス《カリフォルニアアカウント》

自分の場合は、7月に日本の法人に所属した時から給料をドル仕立てでもらっていたので6月に申し込みましたが、行き先がカリフォルニア州でしたら、渡米後に開設しても特に問題無いかもしれません。自分はサンノゼのJapan Townにある支店によく行くのですが、そこには日本語が話せる人も常駐しています。ただ、日本にいる間に三菱東京UFJ銀行経由で口座を開設すると三菱東京UFJ銀行の口座も必要になり自分は持っていなかったため、こちらも開設する必要がありました。手続き自体は上記サイトにも書いてありますが、身分証明書や申込書を同封して郵送する形になります。

あと、上記には以下の2つの口座が申し込めると書いてあります。
  • SAVINGS ACCOUNT(日本国内の普通預金・貯蓄預金に近い口座です)
  • CHECKING ACCOUNT(日本国内の当座預金に近い口座です)
自分は何も考えずに「普通預金」の方やろ、小切手なんかいらんわいとSAVING ACCOUNTだけ開設したのですが、アメリカの小切手社会を知らなかった若さ故の過ちでありました。公共料金その他、小切手を切る機会は非常に多いです。かつ、CHECKING ACCOUNTのATMカードはデビット機能がついており、これがクレジットカードが使えるところでは大体使えます。アメリカでも日本のクレジットカードは使えるところが多いのですが、ガソリンスタンド等では使えなかったりするので、ドル仕立てのデビットカードはこちらのクレジットカードを持っていない間の強い味方になります。なので、CHECKING ACCOUNTは必ず開設しておきましょう(自分は渡米後すぐユニオンバンクの支店に行って開設しました)。シティバンクで口座開設する方法もあるようですが、国際郵便とかが間に入って面倒そうです。筆者は詳しくありません。

家探し


自分はもう閉鎖してしまった世界のご近所さんを探せというサイトで住む人募集のクラシファイドを見て、自分を雇ってくれた日本人の方に家を見に行っていただいて決めました(大家さんも日本人の方です)。おそらくこれはすごく幸運なケースだと思います。やはり最初はホテル暮らしで現地に行ってから探す人が多いかと思います。

craigslistで入居者を募集しているところを探して、現地で実際に見て決めるケースが多いようです。クレジットヒストリーがないとデポジット等が必要だったりもしますが、シリコンバレーだとソフトウェアエンジニアという職業の大家さんの印象はやはり非常にいいようです。

さて、次は第二部:アメリカビザ無し生活スタート編です。

日本のいちエンジニアが2013 H-1B Capを取得してアメリカ移住するまで(概要)

移住の事情


  • 2012年6月末で日本の大手SIerを退職
  • 2012年7月からアメリカのゲームパブリッシャーでソフトウェアエンジニアとして働くことに
  • といっても、ビザ無しでは雇用契約を結べないのでビザ取得までは日本の関連会社所属
  • ビザ取得次第、アメリカの会社に転籍
  • 現在、カリフォルニア州サンノゼに在住

移住の時系列


以下、すべて2012年
  1. 8月中旬 日本→アメリカ
  2. 米国滞在中の9月の中頃にUSCISからビザ請願をApproveされる
  3. 10月中旬 アメリカ→日本
  4. アメリカ大使館で面接
  5. 11月頭 日本→アメリカ
  6. 現在に至る
ちなみに、それぞれの期間にしたことを箇条書きで並べると以下になります。
つってもなんか漏れてる気もするので、気付いたら適宜追加していきます。

1の最初の渡米前にしたこと

  • ビザ申請書類作成
  • 国際免許証の取得
  • ドル建て口座の準備
  • 家探し

1から2の間の最初の渡米後にしたこと

  • Saving Accountしか持ってなかったので、Checking Account作成。Debitカードもゲット
  • 車購入
  • プリペイド携帯購入
  • インターネット開設
  • 家具とかの生活準備
  • 弁護士から会社経由で書類を受け取ってビザ面接予約

2から3の間のビザ取得帰国時にしたこと

  • ビザ面接
  • 転籍手続き
  • 住民票抜く
  • 納税代理人の登録
  • 地方税納税代理人

3のビザ取得して渡米してから今に至るまでの間にしたこと

  • SSN(ソーシャルセキュリティナンバー)取得
  • クレジットカード申込み
  • iPhone購入
  • 運転免許取得(実はまだ仮免許)
  • 確定申告(まだしてない。備忘録)
  • 在留届提出

Index


一気に書くと長くなるので、別記事にまとめていきます。ちなみに、弊社ではH-1Bビザを取得してカリフォルニアで働いてみたいエンジニアを募集しておりますので、興味のある方がいらっしゃればご連絡いただけましたら幸いです。

第一部:2013 H-1B Capビザ申請書類作成とドル立て口座の開設(最初の渡米前にしたこと)
第二部:渡米後の車やプリペイド携帯などの生活準備(ビザ無し生活始まる)
第三部:2013 H-1B Capビザ面接予約
第四部:2013 H-1B Capビザ面接
第五部:住民票や税金など(日本国外への転出編)
第六部:就労ビザでのアメリカ入国とSSN取得後の手続き

2012年12月30日日曜日

「すごいHaskellたのしく学ぼう」9章 todo.hsのバグ修正など


「すごいHaskellたのしく学ぼう」でHaskellを勉強し始めてみた。通称すごいHな本と言われる本ですが、Hは変態言語の頭文字のHなのかなあと思うほどに自分にとっては新鮮な概念が多く、久しぶりに言語を勉強して脳がリフレッシュされていく感じがします。Hello Worldが3分の1くらい読み進まないと出てこない本です。説明が丁寧で初めてHaskellに触れる自分でも理解しやすいです。訳者が自分の大学学部時代の同じ学科の同級生らしく、感心している場合ではないなあと思う今日このごろ。

そして、原著はオンラインで読めたのだな。。。。
Learn You a Haskell for Great Good!

今日は、第9章のtodoリストのコードにバグらしきものをいくつか発見したので、誰かの役に立てばと書き記しておきます。

ちなみに、Haskellのシンタックスハイライトは下記をBlogのテンプレートに貼付けて使用しています。Bloggerで使用する場合は、CDATAセクションで囲まないとXMLエラーになります。
http://code.google.com/p/syntax-highlighter-brushes/source/browse/scripts/shBrushHaskell.js

本のコードで修正したのは以下の2点。ちなみに2点目はオンラインの原著ではすでに修正されていた。
  • removeで重複要素が存在する時に後の番号を指定すると、先の番号の方が削除されてしまう
  • 引数でファイル名を指定しているのに、"todo.txt"がハードコードされている

以下が修正コード。コメントアウト部分が元々の部分。

以下のコードだと最初に見つかった要素を削除してしまうため、todoTasksが[1,2,3,1,4,5]という状態の時に4番目にある"1"を削除した時に、1番目の1を削除してしまいます。
delete (todoTasks !! number) todoTasks

./todo remove todo.txt 4
-> Expected: [1,2,3,4,5]
-> Actual : [2,3,1,4,5]

読者への宿題になっているbumpも実装してファイル書き込み部分の重複をupdateTodoにまとめたのが以下。

2012年11月6日火曜日

(Amazon.comで)Kindle PaperWhite購入した

5ヶ月Blog書いてなかったんかいな。。。


日本に帰国している間に、Kindle PaperWhiteが会社に届いていた。9月の半ばに予約して10月下旬の配達。それを取りに行くためだけに土曜に会社に行ったのだけど、自席に置かれてなくてがっかりして帰ってきたのだけど、ようやく入手。配達追跡記録をWebで見てみると、サインした人の名前が表示されていたので(これ地味にすごい)その人をたずねたら受け取れた。寝る前に読むのに眼が疲れなさそうなのと、最初から日本語対応しているのでPaperWhiteを選択。U.S.で発売されてるKindle Fireは日本語入力するためにはちょっといじってroot権限取ったりしないといけないらしい。

買ったのは3Gモデル。3G無しが$119、3G付き$179(広告付き版。あとで$30払えば広告は除けて、最初に$20払っとけば最初から広告無し版になる)。3Gモデルを選択したのだけれど3GはAmazonのサービス全般とWikipedia(なぜWikipedia?)だけしかつながらない模様。これは、日本で発売された時も変わらない気がする。抜け道あったよ的な情報もあるけど、自分の環境ではもう使えなかった。
※ぐぬぬ。$1=80円とすると、11/19発売の日本版の方が安いではないか。。
  Wifi:(US:9520円、JP:8480円)、3G+Wifi:(US:14320円、JP:12980円)
  →Amazon「Kindle」を日本でも11月発売、「Kindleストア」は10月25日オープン


長年バックライト液晶の画面しか見ていなかったため、この画面はすごく新鮮。電源ボタンを押してロックすると、上記の広告が出てくるのだけどそれが時間がたっても消えない。液晶とちがって、静止画スクリーンセーバーは電力を消費しないかららしい。画面がマルチタッチ対応で、ホームボタンもなくて電源ボタンしかない点も男前。Amazonアカウントにひもづいているため、ワンタッチでぽんぽん本が買えてしまうのは危険。

しかし、漫画のカテゴリーで少女コミックや少年コミックに並んでボーズラブコミックス(なぜかこれだけ複数形)が堂々リストアップされているのはいかがなものかw。

とりあえず、この漫画が異常に評価高かったので買ってみた。
夕凪の街 桜の国 (Action comics) [Kindle版]
(でもこの記事書いててまだ読んでない)

参考にしたページいろいろ:
Kindle PaperWhite Official Site
海外からKindle日本の本を購入して、読む方法
アマゾンの電子書籍リーダーKindle Paperwhiteを速攻レビュー
日本版 Kindle Paperwhite・Fire/HD FAQ 【まとめ】

2012年6月3日日曜日

javascriptクイズ(解説編)

下記の記事の解説を試みてみる。

JavaScriptクイズ「x + 0 == x - 0」

筆者は7個まちがえて65/100点でございました。とはいえ、実際の動きを調べてみたら偶然結果が当たっていただけのこともあり、点数ほどは理解出来ていません。ちなみに、動作確認した処理系は、"node.js v0.7.5-pre"。

まずは、1問目の解説から。

まずは、左辺がどのように展開されるかの解説。
{}+0
  • ToPrimitive({}, PreferredType=Number)+0
    // No hint for PreferredType then default "Number".
    // See 8.6.2.6 [[DefaultValue]](hint).
  •     When the [[DefaultValue]] method of O is called with no hint, then it behaves as if the hint were Number
  • {}.toString()+0
    // See 8.6.2.6 [[DefaultValue]](hint)
        5. Call the [[Get]] method of object O with argument "toString".
    // ここ自信無い
  • '[object Object]'+0
  • '[object Object]'+0.toString()
    // Because Type(ToPrimitive({},PreferredType=Number)) is String.
    // See 11.6.1 The Addition operator (+ )
        7.If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12
        12. Call ToString(Result(5)).
        13. Call ToString(Result(6)).
  • '[object Object]0'

うーん、しんどい。お次は、右辺。
{}-0

最後に、左辺と右辺の比較の解説
See 11.9.3 The Abstract Equality Comparison Algorithm.
'[object Object]0'==NaN
  • ToNumber('[object Object]0')==NaN
    // 1. If Type(x) is different from Type(y), go to step 14.
    // 17.If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x)== y.
  • NaN==NaN
  • false
    // 5.If x is NaN, return false.

うーん、これでもいくつかはしょってるけど、まじめに解説するとめっちゃ大変(どっか間違ってたら、ご指摘願います)。こっからはがしがしはしょっていきます。



[]+0==[]-0
  • [].toString()+0==ToNumber([])-0
  • ''+0==0-0
  • '0'==0
  • ToNumber('0')==0
  • 0==0
  • true
ポイントは、以下の2点かな。
  [].toString() returns ''
  ToNumber([]) returns 0



(function(){})+0==(function(){})-0
  • (function(){}).toString()+0==ToNumber((function(){}))-0
  • 'function (){}'+0==NaN-0
  • 'function (){}0'==NaN
  • ToNumber('function (){}0')==NaN
  • NaN==NaN
  • false
関数もオブジェクトのひとつ。あとは、1問目と同じ。



null+0==null-0
  • ToNumber(null)+0==ToNumber(null)-0
  • 0+0==0-0
  • 0==0
  • true
ToNumber(null) returns 0.
See 9.3 ToNumber.



undefined+0==undefined-0
  • ToNumber(undefined)+0==ToNumber(undefined)-0
  • NaN+0==NaN-0
  • NaN==NaN
  • false
ToNumber(undefined) returns NaN.
See 9.3 ToNumber.



Infinity+0==Infinity-0
  • Infinity==Infinity
  • true



Array+0==Array-0
  • Array.toString()+0==ToNumber(Array)-0
  • 'function Array() { [native code] }'+0==NaN-0
  • 'function Array() { [native code] }0'==NaN
  • ToNumber('function Array() { [native code] }0')==NaN
  • NaN==NaN
  • false
コンストラクタも関数オブジェクト。



0+0==0-0
  • true
何も言うまい。



false+0==false-0
  • ToNumber(false)+0==ToNumber(false)-0
  • 0+0==0-0
  • true
ToNumber(false) returns 0. (ToNumber(true) returns 1).
See 9.3 ToNumber.



NaN+0==NaN-0
  • NaN==NaN
  • false
See 11.6.3 Applying the Additive Operators ( +,- ) to Numbers
If either operand is NaN, the result is NaN.



""+0==""-0
  • ToString("")+ToString(0)==ToNumber("")-0
    // 7.If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12.
    // 12. Call ToString(Result(5)).
    // 9.Call ToNumber(Result(6)).
  • ''+'0'==0-0
  • '0'==0
  • ToNumber('0')==0
  • 0==0
  • true
ToNumber("") returns 0.
See 9.3.1 ToNumber Applied to the String Type.
A StringNumericLiteral that is empty or contains only white space is converted to +0.



"a"+0=="a"-0
  • ToString("a")+ToString(0)==ToNumber("a")-0
  • 'a'+'0'==NaN-0
  • 'a'==NaN
  • ToNumber('a')==NaN
  • NaN==NaN
  • false



"0"+0=="0"-0
  • ToString("0")+ToString(0)==ToNumber("0")-0
  • '0'+'0'==0-0
  • '00'==0
  • ToNumber('00')==0
  • 0==0
  • true



"1"+0=="1"-0
  • ToString("1")+ToString(0)==ToNumber("1")-0
  • '1'+'0'==1-0
  • '10'==1
  • ToNumber('10')==1
  • 10==1
  • false



"0.1"+0=="0.1"-0
  • ToString("0.1")+ToString(0)==ToNumber("0.1")-0
  • '0.1'+'0'==0.1-0
  • '0.10'==0.1
  • ToNumber('0.10')==0.1
  • 0.1==0.1
  • true



"0x"+0=="0x"-0
  • ToString("0x")+ToString(0)==ToNumber("0x")-0
  • '0x'+'0'==NaN-0
  • '0x0'==NaN
  • ToNumber('0x0')==NaN
  • 0==NaN
  • false
'0x0' is HexIntegerLiteral.
See 9.3.1 ToNumber Applied to the String Type.



"."+0=="."-0
  • ToString(".")+ToString(0)==ToNumber(".")-0
  • '.'+'0'==NaN-0
  • '.0'==NaN
  • ToNumber('.0')==NaN
  • 0==NaN
  • false
ToNumber(".") returns NaN while ToNumber(".0") returns 0.
See 9.3.1 ToNumber Applied to the String Type.



" "+0==" "-0
  • ToString(" ")+ToString(0)==ToNumber(" ")-0
  • ' '+'0'==0-0
  • ' 0'==0
  • ToNumber(' 0')==0
  • 0==0
  • true
See 9.3.1 ToNumber Applied to the String Type.
StringNumericLiteral:::StrWhiteSpace(opt) StrNumericLiteral StrWhiteSpace(opt)
A StringNumericLiteral that is empty or contains only white space is converted to +0.



Array()+0==Array()-0
  • []+0==[]-0
  • あとは、2問目と同様。
  • [].toString()+0==ToNumber([])-0
  • ''+0==0-0
  • '0'==0
  • ToNumber('0')==0
  • 0==0
  • true
15.4.1 The Array Constructor Called as a Function
it creates and initialises a new Array object.
うーん、これは知らなかった。
See JavaScript: new無しで基本型のコンストラクタを呼んだ時の挙動.



(function(){}())+0==(function(){}())-0
  • undefined+0==undefined-0
  • あとは、5問目と同様。
  • ToNumber(undefined)+0==ToNumber(undefined)-0
  • NaN+0==NaN-0
  • NaN==NaN
  • false
12.9 The return Statement
ReturnStatement : return [no LineTerminator here] Expression(opt);
If Expression is omitted, the return value is undefined.


ここまで読んでくださったみなさま、ありがとうございました。
どっか間違ってるとこがあったら、ご指摘ください。
それにしても、20問の中にいろんなパターンが含まれていて、よくできてるなあ。

参考:
Standard ECMA-262 3rd Edition -December 1999
JavaScript: new無しで基本型のコンストラクタを呼んだ時の挙動
What is {} + {} in JavaScript?
[ ] == ![ ] の謎を自分でも解いてみた

2012年4月7日土曜日

Flexリストコントロールでのデザインパターン(とiOSのUITableViewとの比較)

最近、Flexのリストコントロール(データグリッド)をいじってて分かったことのメモ。

Flexのリストコントロール


Flexのリストコントロールとやらは、以下みたいなのがあります。
左から順番に「リストレイアウト」、「ドロップダウンリスト」、「データグリッド」。


んで、このリスト系コントロールというのが「データ駆動型コントロール」と呼ばれるもので使い方に癖があったりします。もうちょっと言うと、ひとつのコントロールの世界の中でMVCデザインパターンが適用されている。ざっくりとした関係は以下。


Viewコントロールの中に「レンダラー」と呼ばれる描画用オブジェクトが存在し、そこにControllerとしてのFlex君がModelオブジェクトを差し込んで描画する。ポイントとしては、レンダラーオブジェクトはユーザの可視領域分といくつかのバッファ分の数しか存在しない。

「レンダラーA」〜「レンダラーC」で「データ1」〜「データ3」が描画されているとして、例えばデータグリッドを下スクロールすると、それまで「データ1」を描画していた「レンダラーA」が使い回されて「データ4」を描画するようになったりする。ようするに、描画オブジェクトのリサイクルについてFlexが面倒を見てくれる。

それによって、100万のデータを画面で扱う時に見えてない99万9990ほど分のModelオブジェクト用の描画オブジェクトが節約される。

Flexのリストコントロールを独自拡張する時は、上記が分かってないとうまく描画されないことに悩んで、ことあるごとにFlexにとって天敵の全行再描画を実施して画面が重くなってしまう。

気をつけないといけないのは、Modelオブジェクトの中で描画用データも保持しておく必要があること。ユーザ操作で文字を赤くした場合に、その「文字が赤い」情報をModelオブジェクトで保持しておかないとそのデータを再描画した際に、文字色がデフォルト色に戻ってしまったりする。ModelというのはビジネスロジックのModelではなくあくまで描画アーキテクチャ上でのModelということ。

IListItemRendererインタフェースの"set data"メソッドをオーバーライドすることにより
ModelオブジェクトをViewコントロールに独自のロジックで設定することが可能になる。

このアーキテクチャのいま思いつくメリット/デメリットは以下。

メリット:
  • 描画オブジェクトのリサイクルをFlexに任せることができる
デメリット:
  • 設計思想を理解するのに時間がかかる
  • 同じリストコントロール上で複数種類のコントロールの使い分けがしづらい(1行目はラベルで2行目はチェックボックスとか)

Flexのレンダラーについては以下がよくまとまっていて勉強になりました。
itemRendererパート1:inline itemRenderer
itemRendererパート2:external itemRenderer
itemRendererパート3:Communication(データのやりとり)
itemRendererパート4:ステート&トランジション

あと、Adobeのヘルプ。
Flex3開発ガイド/Listコントロール

Adobeのヘルプは、量もAppleのほど多くなくてかつ分かりやすくてよく書かれていると思う。まあ、Appleはフレームワークのソースコードを公開してないからあんだけのドキュメントが要るのかもしれないけど。

iOSのUITableViewとの違い


一方で、iOSのUITableViewはちょっと違う。
UITableViewは以下みたいなiOS版リストコントロール。


こいつへのデータの割当ては以下のようにUITableViewDelegateプロトコルのtableView:cellForRowAtIndexPath:メソッドを実装したりする。


Flexのリストコントロールとの違いは、開発者がコードの中でヘルパーメソッドdequeueReusableCellWithIdentifierやらinitWithStyle:reuseIdentifier:やらを呼び出し自力で描画オブジェクトのリサイクルをすること。

意識する必要のあることはこちらの方が多いが、リサイクルするしないをオブジェクトの識別子文字列(上記の例だと@"MyIdentifier")によって開発者が決められるため、Flexリストコントロールのデメリットであげた「同じリストコントロール上で複数種類のコントロールの使い分け」が比較的しやすい(識別子文字列でそこを意識すれば良い)。

ようするに、少し手間がかかるけどこっちの方が好き勝手しやすそうだ。まあ自由には責任が伴うのが常なので、粗悪な設計の影響を受けやすいけど。

その他Flexについて


Flexは他にもプロパティ無効化(invalidateProperties)や描画無効化(invalidateDisplayList)などの非同期な描画アーキテクチャを採用していて、世の中的にはFlashオワコンな風潮だけどフレームワークの設計は非常におもしろい。iOSと違って、ソースが公開されているのも良いね。

あとは、以下を読んだりして勉強しました。
asでカスタムコンポーネント(1)
asでカスタムコンポーネント(2)
asでカスタムコンポーネント(3)

コアなのは、UIComponentクラスLayoutManagerクラス

2012年3月4日日曜日

ActionScript3のSetterがGetterを呼び出す?


「詳説 ActionScript 3.0」には下記の内容が書かれています。
setメソッドは、呼び出されると、それに対応するgetメソッドを常に呼び出し、getメソッドの戻り値を返します。
これによりプログラムでは、新しい値の設定後すぐにその値を使うことができます。
…<中略>…
値を返すsetメソッドの機能は便利に使える一方で、getメソッドに制限を加えています。
特にgetメソッドでは、内部的な変数の値の取得に必要な程度を超える作業は絶対に行うべきではありません。
…<中略>…
setメソッドによるgetメソッドの自動的な呼び出しによって、カウンタの記録の追跡が損なわれることになります。
引用:ActionScript3のsetメソッドの返り値

けれども、上記の引用元でも書かれているように、必ず呼ばれる訳ではなさそう。
自分の環境でも、SetterからGetterは呼ばれていなかった。
それは、OreillyのP79の例のようにSetterの戻り値を何かの値に代入したりして結果を評価しても同じだった。

この辺、FlexSDKのレイヤーとFlashPlayerのレイヤーとどちらに依存しているかはよく分からない。
ちなみに自分の環境は以下(Windows版でも今回書いているすべての結果は同じだった)。
Flex4.1A
Macintosh Flash Player 10.3 Plugin content debugger (Intel-based Macs)
FlashBuilder4.6(体験版)

ここでは、ブレイクポイント設定時にFlashBuilderがおかしな動きをして
あたかもSetterがGetterを呼んでいるかのような挙動に見えてはまったので
そこも含めて確認した結果をメモとして残しておく。

まずは、下記のコードを用意。
ポイントは、以下の2点。
・プロパティpropを用意し、そのGetterでpropCountをインクリメントしてコンソール出力
・execute()でGetterとSetterをそれぞれ呼び出し


まず、ブレイクポイントを設定しない時のexecute()実行時のコンソールは、以下となる。
start
GetterCalled:1
callGetter:0
callSetter
SetterCalled
end
やはり、Setterが呼ばれた時もGetterは呼ばれていない。
(自分の環境では、Oreillyの記述は嘘だったということになる)

ただし、ブレイクポイントを23行目に設定して
1行ずつ28行目まで下記のように変数値を確認しながら動かしてみる。

コンソール出力結果は、下記。Getter呼び出しが増えている(赤字が増えた分)。
GetterCalled:1
start
GetterCalled:2
GetterCalled:3
callGetter:0
GetterCalled:4
callSetter
GetterCalled:5
SetterCalled
GetterCalled:6
end
GetterCalled:7

これ、ちょうどブレイクポイントを設定して変数値を確認した回数だけGetterが呼ばれている。
プロパティpropの値をデバッガ上で見せたくて、FlashBuilderが値を表示するたびにGetterを呼び出しているようだ。
しかも、変数参照ビューをスクロールして画面に表示された瞬間にGetterを呼び出すという手の込みよう。

この時点ではまだGetterは呼び出されていない。
表示領域を少しずつ大きくして・・・propが表示された下記の瞬間に初めてGetterが呼び出される(いないいないばぁ的な)
(ここではいないいないばぁするためにダミーの変数を追加しています)

結論としては、このような変な動きをするケースがあるため、Oreillyにも書いてあるように
Getterの中ではオブジェクト内部で保持する値を更新するような副作用を伴う処理は厳禁ということで。

2012年2月26日日曜日

javascriptの配列sliceコピー

使い捨てコード用メモ。
javascriptで以下の方法で、配列を別インスタンスにして(いくつか注意点があるけど)sliceメソッドを使ってコピーできる。

単なる代入との違いは、以下で確認できる。
sliceコピーした配列には要素の削除が反映されていない。
別インスタンスとしてコピーされている。

ただし、あくまで配列が別インスタンスになっているだけであって
deep copyではないので、object型の要素は同じインスタンスを指している。
以下の3つ目のobject型の要素はvar bでも"hoge"から"fuga"へと変更されてしまっている。
他のプリミティブ型はimmutableなのでたまたま変更が跳ねていないだけ。

sliceメソッドを本来の目的でない使い方をしているのと制約があるのとで
使い捨てコードを書くとき以外は使わない方が良さそうだけど、便利そうなので備忘録としてメモっておく。

■参考:
http://www.gucch.net/programming/javascript/jqueryやprototype-jsでオブジェクトをディープコピーする/

2012年2月17日金曜日

node.jsをgithub経由でローカルにインストール


consoleでjavascriptを手軽に扱えるようにしようとnode.jsをインストール。
せっかくなので、githubからforkしてローカルにcloneしてみた。
環境:Mac OS X Lion, Xcodeインストール済み

上記のnodeのページで右上の「fork」ボタンをクリック。
画像は既にfork済み状態でキャプチャしたので、「Your Fork」ボタンになってしまっている。

ちょいと待ったら、自分のGithub上にリポジトリが出来るので
あとはそれをローカルにcloneしてインストール。コマンドは以下。


インストールは、結構時間かかった。
最後にsudoでmake installしないと、自分の場合はPermission Deniedになった。

nodeコマンドが使えるようになった!

2012年2月15日水曜日

Googleの入社問題(数字当てクイズ)


昨日、会社のリスクマネジメント研修とやらを受けさせられたのだが
その中で講師の人が講義の時間の間を埋めるのに以下の問題をGoogleの入社試験だと出題したのだった。
1
11
21
1211
111221
?
【?に入る数字をこたえよ】

自分は結局答えが分からなかったのだけど。
回答が分かれば、コードで出力する問題としては暇つぶしに手頃なサイズだったので以下のアプリで書いてみた。
Javascript-1

以下、ねたばれ注意



HTMLの中に埋め込む形式で書いたのだけど、HTMLの部分は本質ではないので省いている。
HTML付きでブラウザで表示するだけで回答が見れるコードは以下。
https://gist.github.com/1828081

iPhoneのソフトウェアキーボードでコード打ち込みながらdocument.write()するデバッグは辛かった・・・。
最初、自分でnumber型をresにpushしていながら
6行目で癖で===で比較していたため値は一致しても型不一致で期待通りに動いていなかったという\(^o^)/

以下、回答。一応、文字を白にしとくんで、見たい人は文字選択してください。
1
1 1
2 1
1 2 1 1
1 1 1 2 2 1
3 1 2 2 1 1
1 3 1 1 2 2 2 1
1 1 1 3 2 1 3 2 1 1
3 1 1 3 1 2 1 1 1 3 1 2 2 1
1 3 2 1 1 3 1 1 1 2 3 1 1 3 1 1 2 2 1 1

以下が回答を紹介しているページ。
http://ntakei.cocolog-nifty.com/pam/2006/04/post_231f.html

一言で言うと、文字と文字数を並べていくだけなんだけど、これってどこかで見たことある・・・と思って検索したら、正体は「ランレングス圧縮」だったのであった。
# 大学の情報理論の授業で習ったはず
# 久しぶりにハフマン符号化とか調べてしまった

連長圧縮(ランレングス圧縮、RLE:Run Length Encoding)
連長圧縮では、ある連続したデータを、そのデータ一つ分と連続した長さで表現することで圧縮している。
例えば、「A A A A A B B B B B B B B B A A A」は「A 5 B 9 A 3」と表せる。これは、Aが5回続き、そのあとにBが9回、そしてAが3回続いていることを表している(連続回数を、元のデータを表す符号の前に記録することもある。その場合、符号化した後は「5 A 9 B 3 A」と表される)。

講師の人は、Googleはこういう柔軟な発想が出来る人がごろごろいるのでしょうかねーと言っていた。
そういう発想の柔軟さもそうなのかもしれないけれど裏に隠れているコンピュータサイエンスの基礎理論を見抜いて解ける人もまたターゲットにしているのかも。

まあ、最近のシリコンバレーのジョブインタビューは(一時期流行った)こういうクイズめいた問題は実際の業務では役に立たん!とあまり出題されないらしいけど。

# 2012/2/19 Array.join()を使用するよう変更

2012年2月6日月曜日

GithubをXcodeのリモートリポジトリにする方法(コマンド使わずに)

Xcode4から標準インストールされているGit。
Githubをコマンドを使わずにリモートリポジトリとして指定する手順を説明している
良いページが見つからなかったので書いてみる。

前提

Xcodeプロジェクトが既にローカルGitリポジトリで管理されていること。
Githubにコマンドラインから接続可能なこと。
Version:4.2.1

主に以下の手順となる。
  • 1.Github上でリポジトリ作成
  • 2.Xcode上でリモートリポジトリ指定
  • 3.Xcode上でpush

1.Github上でリポジトリ作成

通常の手順でGithub上でリポジトリを作成する。

2.Xcode上でリポジトリ指定

ここからローカル作業。
Xcode上で下記の要領で"Repositories Organizer"を開く。

そして、自分のプロジェクトの"Remotes"を選択して、"Add Remote"を押下。
下記の要領で入力する。
  • Remote Name:Organizer上の表示名程度だと思ってる。詳しい方、教えてください。
  • Location: GithubのURI。git@github.com:ユーザ名/リポジトリ名.git
Locationは"https://..."でも行けるとどこかのサイトに書いてあったけど、試していない。


"Create"ボタンを押すと、以下の画面になる。何もせずに静かにOrganizerを閉じる。
最初、画面の下のパスワード等の入力フォームを入力しないといけないと思ってしまい
いろいろと入力してみるも何の反応も無く、Locationをいじったりして勝手にはまった。
しかし、パスワード等を入れなくても、以下の手順でpushまで出来た。

3.Xcode上でpush

下記のように"push..."を押す。

すると、下記のダイアログ登場。
そして、意外とこの画面で待つ。自分の場合、10秒くらい待った。
ここで待たされたせいで、設定が間違っていると勘違いして手戻った。

待ってると、下記の画面登場。さくっと"push"して完了。

全体的に、独りで勘違いして時間かかった。
Repositories Organizerはまだ安定しなくて、結構しょっちゅうCrashする。
今後の改善に期待。

NSNumberクラスとプリミティブ型との変換


元々はこの記事を書こうと思ってたんだった。
脱線してObjective-Cの整数と32bit64bitの記事が一個forkした。
まあ、この記事も元々はCoredataのNSManagedObjectのプロパティの型ではまったことによるforkです。

Objective-Cのコレクションクラス(NSArrayやNSDictionary)ではid型(オブジェクト型)しか扱えないため
NSIneger等のプリミティブ型を扱う際にはNSNumber型に変換する必要がある。
そこで、下記の相互変換についてメモとしてまとめておくことにした。
  • NSInteger
  • int
  • NSNumber

以下、基本的にMac-OS-X 64bit向け。
iOS環境では、NSIntegerの取る型が異なるため、NSLogのString Format Specifiersが異なる。
値が代入されていないと、%@でNSIntegerはエラーにならないが
値が代入されていると、"EXC_BAD_ACCESS"となって実行時エラーとなる。


初期値について


初期化していない状態での初期値は、NSNumberはオブジェクト型なので「nil」、intは「0」となる。
NSIntegerはオブジェクト型として評価すると「nil」、整数として評価すると「0」となる。


int <-> NSInteger


NSInteger -> int はキャストすれば良い。
キャストしないと警告が出るのは"Objective-Cの整数と32bit64bit"で書いた通り。

一方で、int -> NSIntegerはキャストは不要。
理由はざっくりな説明だと、NSIntegerがintをくるんでいるため
下位概念のものを上位概念のものに入れることになるから、かと。


NSInteger <-> NSNumber


NSInteger -> NSNumberについては、NSNumberクラスのメソッドを使用する。
クラスメソッドを使用するパターンとalloc initするパターンがある。

NSNumber -> NSIntegerについてもintegerValueメソッドでOK。


int <-> NSNumber


このパターンについては、NSInteger <-> NSNumberとメソッドが微妙に変わるだけ。



整数以外のfloatやdoubleも基本的には同じなので割愛。

サンプルプロジェクトを以下のGithubで公開。
https://github.com/k-ori/objc-nsnumber-primitive-convert-samples

xcodeからのGithub連携でいいサイトが無かったので、それも後で書く。

■参照ページ
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html

http://peterszwach.blogspot.com/2011/03/github-xcode-4.html

Objective-Cの整数と32bit64bit


NSIneger等のスカラ型とNSNumber型の変換についてまとめようとしたんだけど
調べてるうちにObjective-Cのint型とNSInteger型、32bitと64bitの関係について
気づいたら調べていたのでまずはそこからまとめておく。

以下、特に注意書きしていない限りは、Mac-OS-X 64bit向けにビルドした結果。

まずは、NSInteger型をint型にキャストせずに代入すると以下の警告が出る。
Implicit conversion loses integer precision: 'NSInteger'(aka 'long') to 'int'

警告の理由は、NSIntegerの持ちうる値が32bitか64bitかは処理系依存だから。
int型変数に値を代入する時はプログラマが明示的にint(32bit)と宣言する必要がある。
そして、NSIntegerはlong型 "または" int型をtypedefしたもの。
(この"または"が処理系に依存する部分)

Foundation Data Types Reference

NSInteger

Used to describe an integer.

Discussion

When building 32-bit applications, NSInteger is a 32-bit integer. A 64-bit application treats NSInteger as a 64-bit integer.

Availability

Available in Mac OS X v10.5 and later.

Declared In

QTKitDefines.h

long型、int型といったプリミティブな型をNSIntegerにラップしてくれている。
NSInteger型を使用することで、32bit環境のコードを64bit環境に移植する時にコードを変更する必要がなくなる。

ちなみに、現時点のiOSデバイスのARM processorは(現時点で)32bit onlyだそうなのでNSIntegerでは64bit整数は扱えないそうです(@see iOS: 32bit or 64 bit? - DesignersTalk)。
OSX Lionだと64bit整数を扱える。

OSX 64bit用にビルドして下記のコードを動かすと、int型以外は正しく表示される。

NSLogに渡す際のformatter文字列を%ldにしないと正しく表示されないので注意。
int型は現在4バイト32ビットで、-2147483648〜2147483647 (約マイナス20億からプラス20億) の整数値を表すことができる。

2147483647を超えると、-2147483648に戻る。
よって、以下の通り2147483647を超えて1周半くらいして1410065408になる。
1410065408=10000000000-(2147483648*4)

ちなみに、上記と同じコードをiOS向けにビルドすると、結果が変わる。

32bit整数しか扱えないので、OSXでは正しく扱えていた値がオーバーフローしてしまっている。
ただ、コンパイラの優しいところは、ちゃんと明示的に大きな値を入れているときは警告を出してくれる。
warning: implicit conversion from 'long long' to 'NSInteger' (aka 'int') changes value from 10000000000 to 1410065408 [-Wconstant-conversion,3]
まあバグが発生する時は、だいたい巨大な値が外部リソースから実行時に入ってくる時なんだけど。



コンパイラ様の言う通りに「long long」型にしたら、iOSシミュレータ用でもちゃんと動いた。
NSLogのformatter文字列を%lldにしないとやっぱり正しく表示されないけど。
long修飾子をつけるとより多くのメモリ領域を確保する模様。

しかし、結局のところint型の取りうる範囲もコンパイラ依存な訳で
Apple様以外の環境なりコンパイラなりでいろいろと結果が変わるのだろうなあ。

■主な参照ページ
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html
http://stackoverflow.com/questions/8813799/warning-implicit-conversion-loses-integer-precision
http://www16.ocn.ne.jp/~maccocoa/objective_c/keyword/keyword1.html
http://www.designerstalk.com/forums/mobile/59128-ios-32bit-64-bit.html