the coveを観て思った事

the coveという、日本の太地町で行われているイルカ漁に関するドキュメンタリーを観ました。非常に興味深かったのと、考える事も色々あったので、自分が興味深かった事を書きます。

まず私は、最近まで日本でイルカを獲って食べる地域があるのを知りませんでした。私がこれを知ったのは、UCLAの近くの良くデモをしている場所で、ある日"shame on japan! stop eating dolphines!"みたいな紙を見た時でした。その時は、日本でイルカなんか食べるか?、と思いましたが、どうやら食べるそうです。和歌山県の太地町というところは、世界に対してイルカの配給元として有名で、水族館なんかにいくイルカもここで捕まえたものを買うのだそうです。生きたイルカは、$150kくらいで取引されているそうです。

まずこのドキュメンタリーを作った人達が達成したい目的は、イルカをこれ以上殺さない事です。これを達成するために、太地町で毎年9月に行われる漁を止めようとしたり、色々な事をするのですが、最終的に彼らがとったのは、ドキュメンタリーを作ることでこのイルカ漁の事をもっと知ってもらい、より多くの人にこのイルカ漁に反対してもらおうという事でした。ソフトウェアエンジニアとして興味深いのは、以下の部分でしょう。

映画の製作にはシリコングラフィックス社やネットスケープ社を創設したジム・クラークが500万ドルの資金を提供しており[2]

ドキュメンタリーは非常に面興味深く、時間を忘れるくらい見入ってしまいました。主演のリックは、映画フリッパーで使われたイルカを調教していた人で、彼はイルカが大好きです。しかし、彼が関わった映画であるフリッパーが大成功したために、当時3つしかなかったイルカのいる水族館はどんどん増えました。彼は、フリッパーで使ったイルカが映画の後自分の目の前で自殺(彼曰く、イルカにとっての呼吸は人間にとっての呼吸のようなものではなく、自発的なものなので、呼吸をしない事を選択する事で自殺出来るそう。そして彼曰く、そのイルカはそれを選んだそうだ。)したのを受け、彼は彼自身がその発展に大きな貢献をしたイルカを扱った業界を、彼自身の手で壊すことを望んでいる。二度とイルカが同じように死なないように。しかし太地町の漁師は、彼らがその漁の写真を撮ることはおろか、街に居るだけで彼らの後をつけたりするそうです。

彼らはドキュメンタリーの中で、

  • 政府が彼らに、イルカが魚を食べ過ぎて困っているから"pest control(害虫処理)"して欲しいと依頼している
  • 日本に住む人でもイルカを食べる地域があるのを知らない人は多い。これはメディアがそれを公にしないため。イルカの肉は、イルカの肉としてではない形で市場に出まわっており、メディアがイルカの含む水銀の問題を公にしないようにしている(イルカに含まれているイルカは食物連鎖の頂点なので水銀を多く含んでいる、というのは良く聞く)
  • 太地町の漁師たちは、彼らを殺せるなら殺そうとしている。警察もぐるになって追跡してくる

の様な主張をします。まあ実際、日本の事を何もしらない人が、あれだけ見せられたらそれらは真実に見えるでしょう。私もいくつかは真実だと思いましたが、大げさに表現されている部分も多々あるように思いました。

彼らは、このドキュメンタリーを見せることによって、日本においてもより多くの人をこのイルカ漁に反対する事に賛成させる事が出来るでしょう。しかし、私は彼らの目的、イルカを殺したくない、という部分は理解出来るけれど、その目的を達成するための手段はさほど有効ではないと思っている。

まず太地町の漁師たちがなぜイルカを捕るのか。理由は簡単なはずで、単にそれによる収入がないとやっていけないからだと思う。ドキュメンタリーから見るに、漁師たちは彼らが漁の様子を公にしようとするのを非常に嫌がっている。中指を立てるし、英語で出て行けと書いた紙を見せつけたり、罵声を浴びせたりしている。漁師が英語を頑張っているのだ。それはもうそれなりの理由があろう。そしてそれは、お金であるはずだ。

ならば、彼らがやれるより効率的な運動は、このドキュメンタリーを見て彼らに賛成する人から募金を募り、太地町の人達にそのお金をあげる事だ。漁師たちとて、漁をせずとも同等のお金が手に入るならしないと思う。ドキュメンタリーでは、"漁をせずに同等のお金が貰えるなら、漁はしないか?"、と質問し、"する。これは文化だから。"、と答えているシーンがあるが、そんなはずはない。漁師たちはもう、彼らになんらかの肯定を示す事で、鬼の首を取ったかのようにそれを利用されるのが嫌なだけに見える。そうなった状況で、話し合いなどなかなか難しい。

結論として、私は太地町の漁師に、イルカ漁で設けている分だけお金をあげれば、イルカを殺したくないという目的は達成出来ると思う。そして彼らのドキュメンタリーには、人々をその方向に持っていくだけの魅了はあると思う。

どうにしろ、日本に生まれて15歳まで育ったが、それでも日本においてイルカを食べる地域があるとは知らなかったし、ここで捕まったイルカが世界中の水族館で見るイルカなんだとは知らなかった。

修正: connect 1.8以降でファイルのアップロードを処理する

以前、connect 1.8以降でファイルのアップロードを処理するで紹介した、connect 1.8以降を使ってアップロードされたファイルを処理する方法ですが、間違っていました!

このようなフォームがあった場合に、

この様に、req.bodyを使ってファイルにアクセス出来ると書きましたが、req.bodyではなくreq.filesでした。

自分で試さずに書くものではないですね。

javascriptだけでwebcamからストリーミング

先日、衝撃的な記事を発見しました。javascriptだけで、webcamにアクセスし、ストリーミングしているというのです。しかもandroidのウェブブラウザから、androidのカメラにアクセスしているではありませんか。なんだこれは。幸い、彼はコードを公開してくれているので、それを見てみる事にしました。

どうやら、WebRTCのgetUserMediaというapiをOperaが実験的に実装しており、それを使うとそのapiを使うことで、webcamにアクセス出来るようです。しかも、webcamからキャプチャーした画像を、そのままcanvasにコピーする事が出来ます。勿論、勝手にコピー出来てしまうと嫌なので、about:configからその機能を有効にしないといけないのですが、canvasにコピー出来るということは、そのキャンバスに描写されているデータをtoDataURLで取得出来る事になります。そして、そのデータをwebsocketでサーバに送り、サーバ側からそのデータをクライアントに送信すると、webcamから取得した画像が転送出来る事になります。webcamからの画像の取得を頻繁に行い、それらを頻繁にサーバに転送し、サーバもそれらを頻繁にクライアントに送信出来れば、あたかも動画の様に見えます。 各々が簡単に試せるために、記事を参考にしながら書いたコードをgithubに載せてあります。是非自分で試して見てください。非常に感動します。

ひとつ残念なのが、toDataURLで取得したデータはbase64エンコーディングされています。つまり、バイナリの3/4のサイズになってしまいます。折角なので、前回の記事でコメントを頂いた@gtk2kさんのパッチを使って、画像のデータをバイナリで送信したかったのですが、canvasからバイナリのデータを取得するtoBlobが、少なくともOperaでは実装されていませんでした。もしこれが実装されれば、webcamからの画像をバイナリで取得し、バイナリのままwebsocketでサーバに送信し、バイナリのままクライアントがデータを受け取れる事になります。非常に楽しみです。 という事で、deviceタグの実装よりも先にそれらしいものが出てきそうなWebRTCの話でした。

websocketでバイナリデータの送受信

最近chromeで、バイナリデータの送受信をサポートしたwebsocket apiが実装されました。現時点 (2012/12/5) で、実際にバイナリデータを送受信出来るwebsocketのライブラリはあるのでしょうか。調べてみました。ここでは、ブラウザとサーバ間における、websocketを使ったバイナリデータの送受信に限り、ブラウザからはarraybufferを、サーバからはBufferを、バイナリデータの型として使用します。

 

socket.io

まずは本命のsocket.ioです。0.8.7で試してみました。

かなり端折りましたが、ブラウザとサーバのコードはこんな感じです。そして結果はこんな感じです。

(download)

ブラウザから送信したデータもバイナリとして認識されず、サーバから送信したデータもバイナリとして認識されていません。

 

websocket.io

そこで次のwebsocket.ioです。0.1.1で試してみました。

こんな感じのコードです。そして結果はこんな感じです。

(download)

ブラウザから送信したtypedarrayが、ちゃんとサーバ側でBufferとして認識されています。これは素晴らしいですね。しかしサーバから送信したBufferは、バイナリのデータとして認識されていません。残念。

 

websocket-node

最後にwebsocket-nodeを試してみました。1.0.2です。

コードはこんな感じです。ほとんどサンプルのままなのですが、READMEにはバイナリデータの送受信が出来る事を謳っているので期待大です。結果はこうでした。

(download)

ブラウザで送信したtypedarrayが、サーバでBufferとして認識されています。そして、サーバから送信したBufferが、ブラウザでarraybufferとして認識されています。素晴らしい!

 

結論

  • socket.ioは、送受信ともに出来なかった。
  • websocket.ioは、送信は出来たが受信は出来なかった。
  • websocket-nodeは、送受信ともに出来た。

恐らくsocket.ioも近いうちにバイナリのデータの送受信をサポートすると思いますが (commit logにはサポートしたとあるが…) 、現時点でこれらの三つを比べた場合、websocket-nodeのみが、ブラウザとサーバ間でバイナリのデータの送受信が可能、という事のようです。

テストに使用したファイルのリンクを以下に貼っていますので、socket.ioやwebsocket.ioでも出来るぞ!、という方は是非教えて下さい。

後、鵜飼さんのポストも参考になります。

 

connect 1.8以降でファイルのアップロードを処理する

この記事には間違った情報が含まています。詳しくは、修正: connect 1.8以降でファイルのアップロードを処理する、を参照して下さい。

 

あんまり見ていない間に、connect-formがdeprecatedになり、いずれ削除されるような運命を背負っているのに気づきました。ここでは、ファイルのアップロードをconnect-formを使って処理していた場合に、どのように変更すると良いのかを簡単に書きます。

まず、connect-formはdeprecatedになりましたが、その理由は同様の機能がconnect 1.8以降でサポートされたからです。つまり、connect 1.8以降のbodyParserは、multipart/form-dataがパース出来ます。その例がconnectのexampleにあるので見てみましょう。

クライアントのフォームはこんな感じです。

かなりはっしょっていますが、サーバ側はこんな感じです。

connect-formを使っていた場合は、req.form.completeみたいなフックを利用していましたが、req.bodyにそのままパースされたmultipart/form-dataのname/valueが追加されます。

つまり、req.form.on('progress')で取得出来ていた、アップロードの途中経過は取得出来ません。それが必要な場合は、直接formidableを使うことになります。

size limitやupload directoryなどのformidableの設定は、bodyParserの設定として渡すことになります。

後は、TJのconnect 1.8に関するブログを参照して下さい。

人種差別と実力主義

これだったか忘れたけど、最近、多分Hacker Newsで、人種差別と実力主義についての話がありました。興味深いので書きます。

実力主義では、実力があれば認められます。例えばその社会で人種差別があったとして、自分が差別される人種であったとしても、その社会が実力主義を採用しているならば、実力があれば認められます。だから実力主義が好き。

こういうのは誰しも一度は聞いたことがあるでしょう。いっけん正しく聞こえますし、そうであるべき、と思う人も多いでしょう。何か見落としている部分はないのでしょうか。

米国では、良い大学の授業料は高いです。例えばスタンフォード大学の学部生だと、年に$40,050かかります(一年の内Autumn、Winter、Springのquarterで授業を受けるとすると、$13,350/quarter * 3 = $40,050)。4年で学士を取ったとして、$40,050 * 4 = $160,200です。スタンフォード大学は私学で、米国の大学の中でも授業料が高い方です。公立の良い大学(ここではUCLAを例にしています)に行くと、年に$12,686くらいになります。4年行くと、$12,686 * 4 = $50,744です。これらは単純に授業料なので、教科書代などは含まれません。

つまり、米国で良い教育を受けるのにはお金が必要です。お金を持っているのは誰でしょう?米国では、家庭の収入が一番多いのはアジア系、次いで白人、ヒスパニック、黒人です。これは何を意味するのでしょう?これは、良い教育を受ける事が出来る人の中に、人種による偏りがあるという事です。

お金がないから、良い教育を受けられない。良い教育を受けられなかったから、賢くない。こんなに単純ではありませんが、賢い人の中で、良い教育を受けてきた人の割合は多いでしょう。どちらにしても、与えられた教育が違うのに、その違うものをベースにした"実力主義"が、現在の米国のいう実力主義です。実力さえあればどんどん偉くなれる。それはその通りです。しかし、その実力を身につけるために有効であろう教育は、平等には与えられていません。その状況の上で、実力主義を謳っているのです。

"アメリカは実力主義の国だから、実力があるならアメリカに行けばいい"。その言葉で、自分が当たり前だと思っていた前提が、前提ではないのかもしれないと気づくでしょうか。差別がある中で実力主義を掲げるのは、差別を解決する方法のひとつだと思っていませんか?その差別によって得られるものが違う、その得られるものが違うが故に実力に差が出る。差別を解決する前に実力主義を持ち込むのは、差別によって勝ちを得ている者達が、その勝ちを差別のせいにするのではなく、実力のせいにするための手段なのです。

これを踏まえて、もう一度、自分の周りを見渡してみましょう。実力主義などは、ごく一部の才能を除いて、既に決まっている出来レースなのです。

mingleの人達との出会い

今日仕事の帰りに、mingleの人達をお話ししてきました。mingleは、人と人をどうやって繋げるか、というのを目標に頑張っているスタートアップなのですが、私とmingleの出会いは私の同僚から始まりました。

私の同僚は、仕事とは別に個人的なサイドプロジェクトに関わっていて、それがmingleだったのです。mingleは同僚を含めた三人で全てを回していて、少し前に三人ともがフルタイムでmingleに着手出来るくらいの投資を貰えたそうです。そして同僚はそれを機に、会社を辞めました。

mingleでは一部にnodeを使っています。同僚は、私がnodeを好きなのを知っていたので、nodeの事をよく話していたのですが、それもあって一度mingleのメンバーに会ってみないかという話になりました。そして今夜会って来ました。

最近私は、スタートアップを自分で初めてみたいが、実際にスタートアップを始めるとはどういう感じなのだろうか、どうやってお金を貰うのだろうか、どのくらいのお金ならどれくらいの株と引換にするのが妥当なのだろうか、お金を貰えたとしてどれくらいそれに時間を費やすのだろうか、チームメンバーはどうやって探すのだろうか、などなど色々な疑問があり、それらに対してなかなか答えが見つからない状況でした。しかし漠然として、こういう感じなんじゃないかな、というのはありました。それが今回mingleの人達と会って話して、大きく間違っていないんじゃないかというのに変わったと同時に、スタートアップを始める人も、実際にそれでお金が貰える人も、自分と同じような人なのだと実感しました。

個人的にはこの実感は非常に大きなものでした。というのも、スタートアップを初めてお金が貰える人というのは、全てにおいて非常に優れていて、いわゆるスーパースターなのだ、自分とは到底違う人なのだ、という気持ちがあったからです。

最近Steve Jobsのドキュメンタリーを見ていて、私に非常に大きな影響を与えた言葉がありました。

人は大きくなるにつれて、世界とはこういうもので、あなたの人生というのはその世界の中で、はみ出さないように、家族なんかを作って、楽しい事をして、ちょっとお金を貯めてするように言われる

...

でもそれは凄く限られたものだ。ある一つの真実を見つけると、人生はもっと広くなれる。そのある一つの事というのは、あなたが人生と呼んでいるもの、それはあなたより賢い訳でもない人達によって創られたものであるという事。そして、あなたはそれを変えられる。あなたの創ったもので、他の人に影響を与えることもできる。それが分かったら、それは二度と同じ様には見えなくなる。

適当な訳ですが、こんな事を言っていました。これでそれに気づいた訳ではなく、最近色々な会社のCEOやCTO、有名な会社の人達や色々な人達に会って、同じような事を感じていました。別に彼らが賢くない訳ではなく、彼らにも分からない事もあるし、他の人と同じような悩みを持っていたりする。

それを、今回mingleという、自分の一番身近から出てきたスタートアップから実感しました。mingleで投資家と常に話しているのは、前の仕事でそれを役割としていた訳ではない、UIのデザイナーです。彼も勿論、分からないことや知らないこともあったでしょう。しかし彼らは見事に自分たちをサポート出来る程の投資を受けることが出来ました。

勿論、やるかやらないか、だけが重要なのではありません。やってもだめな場合もあるでしょう。しかし、当たり前ながら、やってみる事と、実際に上手く行った人達も自分とそんなに違わないんだ、というのを実感する事で、自分でもやってみたい、自分でも出来るんじゃないか、という自信に繋がるだろう、というのを感じました。

恐らく、このITバブルのなか、私と同じような事を感じている人達も沢山いると思います。是非、色々な人達と会ってみてください。スタートアップを実際に始めた人達と話して見てください。恐らく、自信を失うよりも、自信を得ることの方が多いのではないでしょうか。それは自分が特別だからというのではなく、他の人も自分とそんなに違わないからです。

3分27秒あたりで、Steve Jobsが上記の事について話しています。

"Don't use MongoDB"のメモ

Hacker Newsに投稿された、"Don't use MongoDB"のメモ。私もMongoDBを使おうと思っていたところなので、自分が興味のあったところを書いておきます。

話の流れとしては、データが全部消えたり、安全じゃない書き込みの方法がデフォルトだったり、トラフィックが多いとレプリケーションがうまくいかなかったりなので、百万単位でユーザがいるようなサイトではmongodbは使うな、という記事に対して、10genのCTOが、記事で挙げられていた問題とされていたものに一個ずつ答えている、という感じ。問題として挙げられていたものは、事実ではあったがより新しいバージョンでは解決されていたりするものも多いが、そうでないものもあるようだ。

まず記事は匿名で投稿されているが、投稿者は10genと"プレミアム"な契約を結んでいると書いてある。しかしそれが匿名であるが故に、10genのCTOは顧客を特定出来ない。それが故に、記事に記載されている問題がどのような状況下のものであったかが曖昧なままだが、そんな状況で10genのCTOがそれらの問題に対してコメントしている。

特に私が興味のあったところは以下の部分:

  • getLastError()を自分で意図的に呼ばないと、mongodbに対して送った命令に対する返事を待たない。これはベンチマークでいい値を出すためにやっている。
    • 10genのCTO
      • getLastError()を自分で意図的に呼ばないと、mongodbに対して送った命令に対する返事を待たないのは事実だが、ベンチマークでいい値を出すためにやっているのではない。命令に対する返事をどう処理するかをドライバやユーザがコントロール出来るようにするため。
  • masterとslaveの間に差がある事があった。チェックサムもないし、slaveのステータスはcurrentだった。
    • 10genのCTO
      • そのような状況のcase number (恐らく10genと顧客の間で使われている、問題などに対するレファレンスかな?) が見当たらない。もし本当ならクリティカルなバグなので教えてくれ。
  • レプリケーションが時々エラーもなくとまる。
    • 10genのCTO
      • クライアントにエラーの旨を伝えることなくそういう事が起こるかという事なのであれば、可能性はある (可能性の話)。もし書きこむ時にレプリケーションが上手く行っているか知りたいなら、w=2 getLastErrorを使え。
  • 書き込みの時に、global lockが必要。それが故に、書き込みのロードが凄いと問題になる。
    • 10genのCTO
      • 確かにこれは問題。2.0でパフォーマンスは良くなったし、2.2でももっと良くなる。
  • トラフィックが凄いとshardingはそんなに上手く動作しない
    • 10genのCTO
      • システムがそのキャパシティを超えると、そのシステムからデータを動かすのは難しくなる。私はいつもプレゼンをする時に、キャパシティを足すのに待ちすぎるな、といつも言っている。100%使われているシステムにキャパシティを足そうとしても、上手くいかない (mongodbが故という訳ではなく一般的な話)。
  • 時々間違ったノード (多くの場合空のノード) を一番新しいデータだと認識して、それをコピーしてしまうが故にデータが全部消えた。1.8で修正されたけど。
    • 10genのCTO
      • クライアントからの報告を見てもその様なケースが見当たらない。何か手掛かりを教えてくだないか?

ぱっと見た感じ、これらはmongodb特有の問題も含んでいるが、どちらかというと、レプリケーションやshardingを扱うデータベースなら当てはまると思われる問題も多い印象を受けた。そういう意味で、自分がmongodbを使う際に、何に気をつけたら良いのかを考える良いきっかけになった。

nodefest 2011に参加して

Nodefest-1

今飛行機から帰って来てシャワーを浴びて、忘れる前にnodefest 2011の最後のプログラムである、ブログに書く、に着手しています。このプログラムを終えて、nodefest 2011が終わります。

nodefest 2011に参加された方々、スタッフの方々、スポンサーの方々、その他私が気づいていないだけで協力をしてくれた方々、本当にありがとうございました!私にとって、カンファレンスをやる、というのは初めてでしたが、皆さんのおかげで成功させる事が出来たと思っています。

今回、一番自分にとって印象的だったのは、既に日本の企業でnodeを使った大規模なインフラを構築してサービスを提供している企業がある、という事でした。これは単に私が知らなかっただけなのかもしれませんが、恐らく発表されていた企業の規模でnodeを使っているサービスは、米国でもなかなか無いと思います。これにはRyanも驚いていたのを覚えています。

そして何よりも、アフターパーティーでの参加者の方々の楽しそうな雰囲気が気持よかった。私は途中で体調が悪くなって早退してしまったのですが、もっと色々な方々と色々なお話しをしたかった。これが唯一の後悔です。

日本におけるnodeのコミュニティーは凄く熱い!これからそれがどんどん発展していくのが楽しみです。

皆さん、nodefest 2012でまた会いましょう。

Nodefest-2

 

「米国の新卒エンジニアの給与は8万ドル!」について

この記事をtwitterで見かけて、興味深かったのでこれについて書こうと思います。

CNNによると、2011年の新卒の初任給はこんな感じ。

 

1. Chemical engineering -- Average annual salary offer to 2011 grads: $66,886

2. Computer science -- Average annual salary offer to 2011 grads: $63,017

3. Mechanical engineering -- Average annual salary offer to 2011 grads: $60,739

4. Electrical/electronics and communications engineering -- Average annual salary offer to 2011 grads: $60,646

5. Computer engineering -- Average annual salary offer to 2011 grads: $60,112

6. Industrial/manufacturing engineering -- Average annual salary offer to 2011 grads: $58,549

7. Systems engineering -- Average annual salary offer to 2011 grads: $57,497

8. Engineering technology -- Average annual salary offer to 2011 grads: $57,176

9. Information sciences & systems -- Average annual salary offer to 2011 grads: $56,868

10. Business systems networking/ telecommunications -- Average annual salary offer to 2011 grads: $56,808

これは、4年生大学の新卒(new gradとあるので学部の新卒)の、学位を貰った分野ごとの初任給の平均です。これだけ見ると、ソフトウェアエンジニアになれそうなcomputer science卒の初任給の平均は、8万ドルではなく、6万3000ドルです。ここで注意する事は、これはあくまで米国における平均であるという事です。米国は凄く広い。一軒家が$500k(kはキロで、1000という事です)する地域もあれば、$150kくらいのところもある。つまり、もうちょっと地域を絞らないと、その平均がどういう分布によるものなのか分かりません。なので、カリフォルニアに絞りましょう。

カリフォルニアにおけるソフトウェアエンジニアの年収の平均を調べる方法はいくつかありますが、私が参考にするのはglassdoorです。glassdoorに掲載されている情報は、匿名で投稿されているものなので、それらの情報の信頼性に問題がある可能性はありますが、私が見ている限りでは、大きく外れていないと思います。早速glassdoorで、googleのsan joseエリア(本社を含む)に勤務のソフトウェアエンジニアの年収を見てみました。
Screen_shot_2011-10-23_at_11
一番上の"Software Engineer"を例にとってみると、平均は約100kです。しかしこれは、そのsan joseエリアにおけるgoogleのソフトウェアエンジニアの平均で、新卒もそうでない人も混じっています。

他に私が参考にするのは、ackwireに掲載されているスタートアップにおける年収とequityの例です(こちらもglassdoor同様、匿名です)。スタートアップなので、一般的な企業とは勿論、スタートアップの中でも大きな差がありますが、大体100kより少ない給料+equityという感じでしょう。

これらと、私が友人から聞いたり、リクルーターから聞いたり、というのを総合すると、「米国の新卒エンジニアの給与は8万ドル!」は少し高いと思います。私を含め、私の周りを見ていると、60kくらいが相場だと思います。しかし、80kを少し高いと感じるのは、私がLAに住んでいるからかもしれません。カリフォルニアは広いです。日本の総面積よりも広いです。カリフォルニアの中でも、地域によって物価の差があります。では、LAとサンフランシスコを比べてみましょう。

wolfram alphaは優秀で、この場所でこれだけの年収をもらっている場合、それがあの場所だといくら相応なのか、というのを答えてくれます。早速それを使って、LAで60k貰っている場合、それがサンフランシスコだといくら相応なのか見てみます。
Screen_shot_2011-10-24_at_12
 wolfram alphaによると、LAで60k貰っている場合、それはサンフランシスコでは73k貰っているのと相応になります。これで80kに近くなりました。今度は例えば、LAで65k貰っているとすると、サンフランシスコで79kを貰っているのと相応します。かなり80kに近づきました。

「米国の新卒エンジニアの給与は8万ドル!」における8万ドルが、もしサンフランシスコにおけるものであるという前提があったのであれば、それはLAで65k程度で、私が感じている平均に近くなりました。

なので、結論としては、「米国の新卒エンジニアの給与は8万ドル!」がサンフランシスコにおけるものを前提にしているのであれば、私の感覚では大きく外れていないと思います。勿論、新卒と言っても、例えばスタンフォード大学のcomputer science卒とcalifornia state universityのcomputer science卒では、マーケットにおける需要も違いますし、その違いによって提示される額も変わるでしょう。特にここでは新卒の話しをしていますが、ソフトウェアエンジニアとして働く人の中では、修士号を持っている人も多いですし、博士号を持っている人も珍しくありません。例えば、スタンフォード大学でcomputer scienceの修士号を持っていれば、恐らく80k以上の初任給は貰えると思います。

とりあえず、ぱっと思いついた側から書き始めましたが、こんな感じです。 後、公の機関、公立の大学などでは、職員の給料が公に公開されていますので、平均ではなく、実際の値を見ることも出来ます。ただ、政府機関は、一般の企業に比べて年収が安い傾向があります。