2013-06-16

レンタカーで運転免許試験を受ける予定

さて、国土が広いアメリカでは車が必須なわけでして、このたび運転免許の実技試験を受ける予定です。この実技試験、日本との一番の違いは自分の持ち込んだ車で試験の受けることです。慣れた車で試験を受けられるっていいですよね。日本と違い、身分証代わりにとりあえず取っておくなんてことはないので、家族の誰も車を持ってないのに免許を取るなんてシチュエーションはそうそうないんでしょう。

で、当初の予定では、実技試験を受ける頃には新車を既に購入しているはずだったのですが、なんだかんだでまだ自分の車がありません。そんなわけで渡米後から借りてるレンタカーを延長し、そのレンタカーで試験を受けることになります。

さて、ここで問題発覚。なんといわゆる車検証がありません。実技試験に車を持ち込むにあたっては車検証と自賠責が必要なんですが(追記を参照のこと)、そういえば自賠責の保険証もないよ!

というわけで期限延長の電話をしたついでに「車検証ないけどどうしたらいいのさ」って聞いてみたところ、「借りたとこに行ってね」という素晴らしいお返事が。うそーーーーーーーーーーーーーーーーん、車を借りたのはSFO空港なんですけど。

そんなこんなで今日はSFOまでドライブしてきました。ここでも色々あって2時間ぐらいかかったんですが、もう書く気力もありません。

とりあえず教訓としては借りるときにちゃんと確認しておくと。それと、レンタカーの窓口で車を実技試験に使うとちゃんと申告しておくことです。自賠責の保険証も今は手元にあるのですが、「借主はこの車の自賠責保険でちゃんとカバーされますよ」的な手紙を貰えました。この手紙はレンタカー会社の支店ならどこでも発行してくれるとは思いますが、最初に貰っておいて損はないでしょう。

ちなみに、まだ解決されてない問題がありまして、明日は朝からまた近所のレンタカー屋さんですorz

[追記]
その後、今度は車が故障して車体交換したのですが、やっぱり車検証(vehicle registration)がない。でそれじゃ困るって話をしたら Hertz の優しいお兄さんがどこかに電話して確認してくれました。曰く、保険に入ってる証明書さえあればレンタカーはOK(ただし、ライセンスプレートがちゃんとしてること)だよと。実際、大丈夫でした。

結論としては、何はなくとも「使用者は車の保険でカバーされます」というペーパーをちゃんと貰えばOKということです。

UnionBankで小切手帳取得までの長い道のり

うちの会社の場合、会社の近くにある銀行ならSSNなしでも簡単に口座が開設できますし、事前にそれは知っていました。

が、送金手続きなどの都合上、渡米前に口座番号を確定したかったので三菱東京UFJ系列のUnionBankに口座を開設しました。日本語で対応してくれるコールセンターがあるのもポイントです。

日本にいる間に口座の開設済ませ、渡米前にキャッシュカードも取得。これには少し時間がかかるので、もしUnionBankにしようとする人は早めに行動しておいたほうがいいと思います。

あとは、渡米後にどこかの支店に行ってキャッシュカードの有効化と小切手帳の発行をお願いすることになります。

仮住まいに到着後、何はなくともお金はいるよねってことで一番近いUnionBankでキャッシュカードの有効化、そして小切手帳をお願いしました。

ところがこれまたトラブル発生。「小切手帳は住所がアメリカじゃないと発行しないよ。とりあえず住所変更は受け付けるので、1営業日待ってまた来るかコールセンターに電話してね」と。そんな面倒なこと、最初の資料になかったのに。

というわけで何日か経ってコールセンターに電話してみました。前記のとおりせっかく日本語で対応してくれるので、そっちに電話。するとまだ住所変わってないのでとあと1週間ぐらい待ってみてください。ナニソレ。

で、また1週間待って電話してみました。やっぱり住所が変わってないので、結局電話で住所変更の申請。ナンダヨソレ。

また待ってと言われても面倒なので、そこから1週間我慢して、今度は最初に行った支店へ。で、住所を確認してもらったらまだ日本のまま。ドウナッテンダヨー。

支店の窓口で対応してくれた人は前回と同じ人だったのですが、「あなたの住所変更したのは覚えてるわ。おかしいわね、ちょっと待って。。。」とわざわざマニュアルを確認しながら再度入力。でもなんかうまくいってないみたい。

たまたまシニアっぽい人がいたのでその人にヘルプを求めます。すると「SSNの登録か、もしSSNがまだなら入国の証明とIDの確認がないと海外からの住所変更はできないのよ」と。ナンダッテー。

というわけでSSNの番号を教えたらやっとこさ住所変更はできました。小切手帳はそのうち送られてくるそうです。

とりあえず、窓口の人が触ってたシステムだと住所変更が失敗しても画面ではよくわからない様子だし、通常のマニュアルにも載ってない様子。UnionBankにおいては、日本で口座開設できるサービスしてるんだから、そこら辺はもうちょっとしっかりして欲しい。

それと、その過程で「あなたの当座預金のグレード、今はもう提供してない古いやつなんだけどどうする?」って言われました。なんてゆーか、全体的になんかもうちょっとちゃんとして欲しい感じでした。

敗因は、日本語喋れる担当者がいる支店にいかなかったことかもしれません。UnionBankにわざわざ日本から口座を作るような人は、きっと日本語が喋れる担当者が支店に行くんだと思います。そしたら最初から手続きがスムースだったんじゃないかと。

まーでも、多分アメリカだったらこんなん普通なんでしょと思うようにはしています。

I-94 が電子化されたけど

皆様こんにちは。

アメリカにビザ持ちで入国するときに記入が必要だったI-94が電子化されました。僕は電子化された直後にアメリカに来たのですが、DeltaのCAはまだ電子化のことを知らなかったみたいで、わざわざ紙のI-94を機内で書きました。せっかく書いた紙のI-94は入国審査時に目の前でビリビリに破かれました。

さて、I-94 が電子化されたのなら、従来言われていた「SSNの申請は入国してから10日ぐらい経ってからじゃないとデータがないって追い返される」というのはもうないんじゃないか、ということで入国4日後に SSA オフィスに行ってみました。

すると何やら画面を操作して手続きを進めてる様子。これはすんなり行くかと思ったらまさかのどんでん返し。「DHSに登録されてる誕生日とお前のパスポートの誕生日が違うからダメ」と。意味わかんねーよ。どうすりゃいいのよと聞いたところ「DHSに登録されている情報が修正されるのを待て。もしダメだったら手紙が行くからね」と。

最終的にはそれから10日後ぐらいに郵便で届きましたが、やっぱり10日ぐらい経ってから行ったほうがよかったのかもしれません。

2013-04-01

転勤のご挨拶

このたび5月13日付けでアメリカ Google Inc. の Mountain View 本社で働くことになりました。 Google 日本法人は退社という形になるので、世間一般で言う転籍にあたるかと存じます。

皆様には、今まで公私にわたり大変お世話になり感謝しております。インターネットに国境なんて無いし、毎年1回ぐらいは帰国する予定でいるので、これからも変わらずお付き合い出来るかと思います。というわけで、これからもよろしくお願いいたします。

取り急ぎご報告まで。

(追記) いわゆる栄転じゃありません。うちの部署の性質上、転勤できる場所が限られているのでたまたま本社になっただけです。

2013-02-28

やっぱり基礎って大事だよね


はじめに

元ネタ「プロセス間の期限付き排他ロック」が前の記事と一緒ですが、誰かを貶めたり中傷しようとしたりというのではなく、勝手に上から目線で「基礎知識が足りてないよね」とミサワ的な発言をすることを目的とした記事となっております。ご承知ください。

仕様のここがまずそう

「実装」のセクションに書いてある
  • シンボリックリンクを使って排他制御する 
  • 期限切れは、シンボリックリンクそのものの mtime で表現する
    • mtime <= now なら期限切れ
    • つまり、シンボリックリンクの mtime を期限が切れる時刻(未来)にする

ですが、「ロックとは何か」とか「アトミックな操作とは何か」あたりの基礎知識がある人にとっては、ちょっと考えればまずいのがすぐに分かります。シンボリックリンクの作成symlink(2)とmtimeの変更utimeutimensat(2)は別々のシステムコールであり、両者をアトミックに行えるシステムコールがありません。

すなわちsymlink(2)が成功したとして、その次にutimeutimensat(2)が実行されるまでの「間」というものが存在し、その間に他のプロセスが色々するチャンスがあるわけです。特に、作成されたシンボリックリンクはutimeutimensat(2)が実行されるまでは「期限切れ」状態にあるとみなせます。その結果、utimeutimensat(2)の実行時点で持っているシンボリックリンクは競合するプロセスから見れば期限切れなので、そのシンボリックリンクは削除されてしまう可能性があるわけです。

この一点に関しては、symlink(2)でのリンク先としてTTLをセットするということで、期限が未来であるロックをアトミックな操作で作成できます。しかし、期限切れのロックファイルをどう取り扱うかという点にも問題があるので、そう簡単にはいかないというのは元記事のコメント欄にあるとおりです。

ちなみに、その期限切れロックファイルの扱いの問題を同じようにシステムコールレベルで見れば、statlstat(2)とunlink(2)をアトミックに実行することはできない(ので、その為に別のロック機構が必要になっちゃう)よねってな話になるかと思います。

もったいない

さて超上から目線で偉そうですが、「知識が足りないのってもったい無いよね」というのが元記事に対する感想です。元ネタの著者の方がどのような方かは存じ上げませんが、
  • コードは読みやすい
  • コメント欄でのディスカッションで自分で駄目なパターンに気づいている
ことからして聡明な方だとお見受けします。にもかかわらず、上記の通りの仕様を作成してしまうというのは、アトミックな操作とかクリティカルセクションに対する排他制御とかいうのを経験的には知っていても体系的な知識としては獲得していないのではないかと想像します。

一般的にこの手の「車輪の再発明」をする場合、最初の車輪はどうやって発明されたのかをちゃんと学んでおかないと、見た目は派手だけど動かない車輪を発明したり、紆余曲折を経たら全く同じものができてしまったなんてことが起きてしまいます。そういうのも経験として重要な場合もあるとは思いますが、できればそうした無駄は省けたほうがいいんじゃないかとオジサンは思うわけです。

追記

symlinkのmtimeっていじれない?あれ?と思って調べたらutime(2)じゃなくてutimensat(2)とかいうのを使うらしい。そんなmanページ見たことないなーと思ったらhttp://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/futimesat.2.html
はあれどutimensatはなし。

って、書いてて気づいたけど、システムコールでのsymlinkのハンドリングって気をつけなきゃいけなかった、ってことはstat(2)もlstat(2)にしなきゃだめですね。

てなわけで、偉そうなこと言いたいのなら知識の吸収は継続しないといけないよねという反省と、ちゃんとJMにコミットしないといけないよねという反省でしめさせていただきます。

2013-02-27

関数名は大事だよね

プロセス間の期限付き排他ロックについて。

既にコメントが付いてるので、設計レベルでどうだとか、というのはおいておきます。

とにかく実装をパッと見て、これはダメそうだなというのは
52 sub lock {
中略
62             $self->unlock;
63         }
64     }
65     if (symlink $target, $self->file) {
あたりで気づけるのではないでしょうか。lock関数の中で、実際にlockを獲得しているのが65行目のsymlinkなのに、その手前でunlockを呼んでます。一般的に言って、獲得してないロックを解放するのはかなりまずいでしょう(実際、このunlockの呼び出しの直前で他のプロセスがlockに成功すると、そこで生成されたロックファイルを勝手に削除しちゃうことになり、結局2重にlockが獲得できちゃいます)。

さて、標題の「関数名は大事だよね」ですが、unlockの実装は
73 sub unlock {
74     unlink $_[0]->file;
75 }
だけなので、下手するとunlinkってな名前を付けちゃいそうです。が、実装がたまたまそうなってるだけで、呼び出し側から見ればやりたいことはunlockなのですから、この名前で大正解。これがunlockと命名されていたからこそ、lock関数の実装がダメそうなのがすぐに分かったわけです。

というわけで、関数名を横着しないできちんと付けてると、コードの間違にも気づきやすいよねというお話でした。

2012-11-20

Unity 使い辛いよー

最近、やっとPreciseに移行し始めてますが、Unityがすげー使い辛くて困ってます。

Alt+Grave (`) のキーアサインが変更できない問題

英語キーボードで漢字変換をする場合は、Alt+GraveをIMEのon/offに割り当てるのが一般的かと思いますが、これができない。というか、デフォルトでAlt+Graveにアサインされている機能が、普通の設定ツールでは見えない。ハードコーディング?変更できなくはないっぽいけど、面倒そうなのであきらめた。

Gnome Terminal のフォントサイズを変更すると、ターミナルの行数・列数が変わってしまう。そして、仕方ないのでターミナルのサイズを変更しようとすると、ターミナルの行数・列数がCompizを表示してくれない問題

タイトル長いですね。Gnome-Terminal使ってて、文字が読みづらいからフォントを大きくしようとするとしましょう。するとCompiz君、律儀にウィンドウサイズを一定に保とうと努力してくれます。結果、ターミナル上での列数が変わってしまいます。80列に固定して欲しいのにorz

まー、それは許すとしても(もとい、依然として解決策不明なので)、じゃー手でウィンドウをリサイズしようとすると、リサイズ中はカラム数が分からない。何という無理ゲー。これは既にBugが上がってて、解決策も乗ってます。
sudo apt-get install compizconfig-settings-manager compiz-plugins-extra
ccsm
で設定マネージャが起動するので、左のカテゴリから「ユーティリティ」を選択、「Resize Info」というのがあるので、それを有効にすれば解決です。

デフォルトでオンにしておいて欲しい。

MyUnityがデフォルトでインストールされない

徹底的に設定ツールはデフォルトでインストールしない方針なのでしょうか。大して設定する項目があるわけじゃないけど、とりあえずインストールされててもいいんじゃないかと。

prometheusのrate()関数の罠

 久しぶりのAdventカレンダー挑戦、うまくいく気がしません。 閑話休題。実のところ、rate()関数というよりは、サーバー側のmetric初期化問題です。 さて、何らかのサーバーAがあったとして、それが更に他のサーバーBにRPCを送っているとします。サーバーBの方でホワイトボ...