2017年8月19日土曜日

なぜ白人至上主義者はデモ会場をCrissy Fieldに選んだのか?

サンフランシスコ地元紙のExaminer、8月14日記事に‘White supremacist’ patriot rally coming to San Francisco — counter-protest already plannedというのが出てました。白人至上主義者が26日土曜日にサンフランシスコ市のCrissy Fieldに集い、デモ行進を行うという内容です。

Crissy Fieldというのは
ゴールデンゲートブリッジにほど近い、上の地図にある赤丸あたりの公園です。緑の丸で示された中心街からはかなり外れた地域です。

デモ行進ならより多くの人達に見てもらえるように中心街に近い区域を選ぶのが常道ですが、なぜ彼らは人の少ない公園を選んだのでしょうか? 上記記事によればこういうことらしいです。

  • Crissy FieldはGolden Gate National Parks Conservancyの一部であり、サンフランシスコ市の管轄ではない。デモの許認可はサンフランシスコ市ではなく、National Park Serviceが管轄となる。
  • すなわち、連邦政府レベルの話。連邦政府レベルで「表現の自由」「集会の自由」を否定するようなことはまず無理なのでデモは当然許可されてしまった。
  • さらに... 2010年のFederal Firearms Law(PDF)の定めるところにより、「National Parkには銃を持ち込める」。拳銃はもちろん、ライフルなど狙撃銃も、です。
サンフランシスコ市街ではAntifaが抵抗を訴える看板を出してるのをちらほら目撃。

おそらく衝突必須で嫌な予感しかしないのですが、もしこの日(8月26日)にゴールデンゲートブリッジでも行ってみようか、なんて考えてる人が身近にいたら「やめておけ」と伝えるのが良いでしょう。

8月19日追記:
Crissy Field集会での戦いに備えた「トレーニング」を呼びかけるカウンター側と思われる看板。これはやはり平和裏には終わりそうにないね。


2017年8月17日木曜日

日食と太陽光発電

来る8月21日月曜は北米各地で日食が観測されます。ここカリフォルニア州は残念ながら皆既日食は見られませんが、最大75%ほど欠けた太陽は目にすることができるようです。霧がでなければ、ですが。

Wikipediaによれば前回北米で皆既日食が観測されたのは1979年。実に38年ぶりの出来事です。そして今回、米国各地は歴史上初めて「日食による太陽光発電への影響」という試練にさらされることになります。(欧州は2015年に経験しているので課題は明確になっています)

太陽が月の影に入り始めると、太陽光発電は急激に出力が低下し、皆既日食中は発電能力がほぼゼロに落ちます。皆既日食が終わると発電能力は休息に回復し、日食が終わればもとに戻ります。皆既日食に至らない場合でも、発電能力は通常時よりは下がります。

発電と送電が分離されている米国では、送電網の運用管理をISO(Independent System Operator)という電力会社とは独立した非営利会社が担当しています。カリフォルニア州ではCA ISOが担当しており、日々の電力需要や発電実績をかなりこまめに公開しています。
8月16日のカリフォルニア州再生可能エネルギー発電量
上のチャートはCA ISOが発表した2017年8月16日の再生可能エネルギー発電実績です。黄色の線が太陽光発電で、日の出とともに出力が上がりだし、昼のピークで10000MW近くまであがり、その後日没まで出力は急降下します。

今回の日食はカリフォルニア州では午前9時から11時半。ピークは10:20で、北カリフォルニアでは最大75%、南カリフォルニアでは55%ほど欠けます。だいたい9000MW発電している状態の時間帯が一時的とはいえ最大6000MW以上の発電能力を失い、そして急速に復帰するわけです。
8月17日のカリフォルニア州電力需要予想
二番目のチャートは8月17日のカリフォルニア州の予想電力需要です。平日だと午前10時前後は大体29000MWの電力需要があります。太陽光はこの需要のほぼ1/3を提供しており、日食のピークにおける影響はかなり大きくなります。おそらくはガス火力発電や水力発電の出力をこまめに調整して乗り切ることになるのでしょうけど、この「運用でカバー」が可能なのも、まだ太陽光発電がマイナーな存在だからであって、もしこれ以上太陽光発電が増えたらこういう「逃げ」が打てなくなり、日食の日は計画停電を行う必要がでてくることでしょう。

ちなみに日食がなくても、増えすぎた太陽光発電に対処するために

  • 日没後の電力需要に備えて、昼間から火力発電をスタンバイさせておく(発電しないけどガスは燃やし続ける)
  • 昼間のピーク時に太陽光発電を止める
というオペレーションが日々行われているのが現実です。

これはいくらなんでももったいないので、ピーク時の電力を他州の送電網に売り込むというアイデアもあるらしいのですが、エコを追い求めているカリフォルニア州の電力は他州よりもかなり高めでそんなものをわざわざ買う変わり者が他州にいるのか、という問題も生まれてきます。

じゃあピーク電力を電池でためておけ、というアイデアも当然でてくることでしょうけど、それは拙ブログで過日書いたとおり、電気自動車用のリチウムイオン電池需要との巨大な食い合いが発生するので、やはり高価なソリューションとなる可能性が高いわけです。

今回の日食を機会に「果たして太陽光発電は本当にエコなのか」を社会全体で考え直すきっかけになればよいなぁ、と願っております。




2017年8月14日月曜日

IonicとAWS CognitoとFacebook認証連携(前編)

プログラミングの話です。興味ない人は読まないほうがいいです(笑)

Ionicを使って携帯アプリを色々と開発しておりますが、いつも認証周りは鬼門なのでここらで一発AWS Cognitoを活用してみようと思い数日間試行錯誤しておりました。実現したいのは

  • アプリケーションへのログインにFacebook認証を使う
  • 認証済ユーザにはAmazon Web Serviceのリソースへのアクセス権を一時的に与える
  • 携帯側はIonicで開発
この3点です。

ちょっと前(といっても一昨年くらいか)までは、このような場合にはCordovaのInApp Browserで認証させて、http://localhostにコールバックかましてトークンを取り出して、なんていうのが定番でしたが、もうそんな時代じゃないのですね。
じゃあどうするのよ、って調べるとどうやら@ionic-native/facebookというのを使えば良い模様。あとは@ionic-native/facebookとAWS Cognitoを連携させるだけですね。楽勝でしょこんなの。(注: 楽勝=StackoverflowやQiitaもしくはGithubの事例を参考にすれば出来上がり)

ところが...

意外にもこの組み合わせを試した事例が少ない。そもそもAmazonのドキュメントを漁ってもCognito User PoolにおけるFederation Identity Providerと、Cognito Identity PoolにおけるAuthentication Providerの役割を明確にしたものが見当たらず、色々と試行錯誤の連続でありました。最も参考になったのはaws-cognito-ionic2というプロジェクトでしたが、おそらくこの作者もFacebookやTwitterの認証連携は実装していないと思われます。(このCloseされたIssueでそう推察しました。だってIt's just a matter of adding additional buttons and some code では実装できないから)

今回頭を悩ませたのは以下の問題です。
  • Cognito User Poolは「User ID」「Password」が必須であり、オプションでEmail等も管理できる。
  • Federated Loginが返してくる情報には「User ID」に使えそうなものはあるが、Passwordはついてくるはずないし、Emailももらえないのが普通。(嘘だと思ったらTwitterやFacebookのOauth戻り値を見よ)
  • かような状況で、Federated Loginの結果からCognito Userを生成できるのか?
実際に悩んでいる人はいるようで、Facebook認証はうまくいくのにgetCurrentUser()がNullを返すという質問がStackoverflowに上がってました。これに対する回答は「お前は何を言ってるんだ?」的な内容で、思わず▼ボタンをクリックしましたが私にはカルマが足りないのでマイナス評価を付けることはできませんでした。

私が出した結論は(間違ってるかもしれませんが)「Federated Loginの結果、User Poolに新規ユーザレコードが生成されることはない」です。Cognitoの設定画面にはAttribute Mappingの設定もあり、いかにもFederated LoginからUser Poolにシームレス連携()ができるような雰囲気が醸し出されてますが、これは罠です。きっとそうです。違う!という人は是非ご指摘をお願いします。

あ~話が長くなりました。年取るとこれだからダメですよね。

ということで、今回は@ionic-native/facebookを使って認証する部分までの実験結果です。ソースは小生の作りかけばかりのGithubに入ってます。Tag=MVP2からダウンロードするなりForkするなりしてください。

以下、設定でのメモ。

Facebookアプリの設定
  • AndroidとiOSの両方を設定すること
  • その際、Ionicアプリのconfig.xmlにあるバンドルIDをFacebook側に登録しておくこと
  • 要は@ionic-native/facebookのインストール方法に従うこと
  • Android用設定でkeytoolコマンドを使う場面がありますが、これはJava SDKについてくるコマンドです。
  • OAuth Callbackは今の時点では適当に設定しておいて大丈夫です
AWS Cognitoの設定
  • 後編で設定します


IonicのsidemenuにFacebook認証ボタンを付けただけですが、まずはLogin/Logoutできるようになりました。後編ではAWS Cognito(のIdentity Pool)との連携について書きます。


2017年8月8日火曜日

Googleさんの例の件

まずお断りしておきますが、ソフトウェア開発を始めとする知的創造作業における能力が性別や性癖で決まることは決してない、と私は信じております。すご~くできる奴はすご~くできる。そうじゃない人達は自分も含めて正規分布っぽく存在している。そんだけ。

従いまして、今回Googleをクビになった例の社員の解雇理由が「女性のステレオタイプ化」というのは、まあしょうがないかな、と。女性だからソフトウェア開発できない、という命題は「偽」なわけですから。

一方で、議論の元となった「Diversity」の話は強いチーム育成を考える人達にとっては脅威となりうるのでここにメモを残しておきたいと思いました。

Googleのことですから、チーム強化の際にBest of the Bestを集めるということはそれほど珍しくはないでしょう。それは私たち多くのように平均値±1σに収まるような人たちではなく、+2σとか+3σとかのレアな能力の持ち主です。

極論すれば「ある分野で文句なしにトップの人材を一人」探している場合、そのポジションは男性一人か女性一人となります。トランスジェンダーかもしれないしそうじゃないかもしれない。人種的にも一種類。ストレートかもしれないしゲイかもしれないしバイかもしれない。チームが小規模になればなるほど、そのチーム構成は世間のDiversityから乖離する可能性は高くなります。

そしてそのような小規模採用をチーム単位で繰り返していく結果、会社全体のDiversityが世間一般とかけ離れることも当然あり得ます。

それはまずいと経営層が騒ぎ出し、チームでの採用に口を出すというのがDiversity重視経営の怖いところです。「3人の枠全員がインド人男性だと? それはまずい。 一人か二人は女性にしろ。できれば黒人かヒスパニックで。LGBTならなおうれしい。」みたいな干渉が発生し、結果トップクラスからはちょっと距離がある人たちが採用されるようなことになったら、チームの価値は揺らいできます。

繰り返し強調しておきますが私は別に黒人やヒスパニックがインド人より劣っているといってるわけではないです。男性が女性より優れてるとも思いません。でもトップ3人を探していたら、集まった全員がたまたまインド人男性だった、なんていう可能性は排除できない。それだけの話です。そこに民族性や性癖の話を持ち込むのはトップを目指す集団なら「やってはいけない」オペレーションだと私は考えます。



D3.jsで間欠時系列データを表示するには?

趣味と実益を兼ねて(意味不明)株価チャートをd3.js使って表示するという作業をしていた時期がありました。ちょっと検索するとわかりますがCandlestickやOHLCチャートをd3で表示する事例はたくさんあります。

が...

いろいろ試した限りではこれらのチャートはd3.time.scale()を使っておりまして、月足や週足なら全く問題ないことはわかりました。日足でも土日休日にちょっと隙間が生じる程度ですからまあいいでしょう。でもIntradayで1分足とかやろうとすると場がしまってる間がおもいっきり空白になってしまいます。

d3.time.scale()が使えないとなると選択肢は2つしか思い浮かびません。

一つは時系列データを配列として格納し、d3.linear.scale()で表示。横軸はd3.svg.axis().tickValues()で時刻を表示。

もう一つのやり方はやはり時系列データを配列として格納しますが、d3.ordinal.scale()で表示するやり方です。横軸には時刻を入れます。

どちらのやり方もローソク足はきっちりと隙間なく表示されますが、zoom/pan操作の実装でいろいろと面倒になります。

配列として格納する場合、zoomやpanで配列範囲外が描画領域に入ってきた場合、なんらかのガードをかける必要があります。これがおもったより面倒でした。

Ordinalで表示する場合はクリック先(タップ先)の値を逆引きする実装が面倒になってきます。tooltip表示とかですね。d3.eventから拡大率をもらって、それを元のScaleに掛けて、d3.bisectで逆引きする、みたいな感じですかね。

なんとかしてこのあたりをすっきりと実装したいのですが...やっぱScaleを自ら実装するしかないんですかね。

と、特にオチのない話でした。

参考:
Create D3 x-axis that excludes weekends and holidays
Time axis: Remove scale points with no data



2017年8月7日月曜日

オバマケアは崩壊しているか?

トランプ政権=オバマ前大統領が実現した国民皆保険制度(オバマケア)を奪い取る悪の政権、みたいな報道が目立つわけですが実際のところどうなのよ? という気持ちで調べてみました。
Source: https://lysistrata.commons.gc.cuny.edu/2017/04/19/obama-vs-trump-important-qualities-of-a-u-s-president/

まずオバマケアのおさらいです。

日本の保険が社会保険と国民健康保険に分かれているように、米国でも「企業が従業員に福利厚生の一環として医療保険を提供する」場合と、「個人や世帯が医療保険を申し込む」場合とに分けられます。

この後者の「個人や世帯が医療保険を申し込む」際に、掛け金や通院・処方薬の自己負担分を国や州が補助しますよ、というのがAffordable Care Act(ACA: 通称オバマケア)です。補助金を出すのだから各世帯必ず加入してくださいね加入しないとペナルティ(増税)がかかりますよ、という仕組みです。政府はhealthcare.govというサイトを用意して、加入を推進してきました。


では実際にオバマケアで各世帯はどれくらいの負担が発生するのでしょう?

この算出がなかなか難しい。というか、面倒くさい、わかりにくい。色々な条件から掛け金や、通院・処方薬の自己負担が算出されるのです。

まず医療保険を管轄するのは連邦政府ではなく州ですから、州ごとに条件は異なります。ここではカリフォルニア州を前提に話を進めます。その上で、以下のような条件を加味する必要があります。

  1. 保険でカバーされる範囲
  2. 州からの補填があるか否か
  3. カリフォルニア州のどこに住んでいるか
  4. 年齢
  5. 喫煙者か否か

1は通院や処方薬の自己負担を決める要素です。掛け金が安い保険は、総じて通院や処方薬の自己負担額が大きくなります。例えば「一回の通院あたり500ドルまでは自己負担。それを超える部分は4割自己負担。処方薬は年間500ドルまでは保険会社が負担し、それ以上は自己負担」みたいな感じになります。

これだと低所得世帯はとても苦しくなるので、掛け金や通院・処方薬の自己負担分を国や州が補填しますよ、というのが2です。低所得世帯に厚くなります。

3は詳細不明ですが、居住地により掛け金や補填の枠が決まっているようです。

4と5は自明で若い人や非喫煙者は総じて負担が軽く、年寄りや喫煙者はリスクが高い分掛け金も上がる、ということです。

これだけの要素を網羅的に調べるのは苦痛ですのである程度条件を絞ります。
  • モデルケースA: Fresno(郵便番号93740)に在住する世帯年収5万ドルの家族。2017年で夫45、嫁35、子供8歳と5歳。
  • モデルケースB: San Francisco(郵便番号94108)に在住する世帯年収95000ドルの家族。2017年で夫45、嫁35、子供なし。
いずれも喫煙せず、妊娠はしてないという前提にします。なお、世帯年収はその地域の中間値としました。ソースはこちら
Fresnoは赤い印のあたり。San Franciscoはその左上のほう
カリフォルニア州の場合、Covered Californiaという組織が保険商品を選ぶためのサービスを提供しています。こちらのリンクからアクセスできます。まず、両モデルケースが2017年にオバマケアで支払う掛け金を算出してみます。

モデルケースAは、世帯所得が低いのでオバマケアとは別のMedi-Calというカリフォルニア州が提供する医療保険制度に申し込むことが可能ですが、敢えてオバマケアを選ぶこともできます。その場合、掛け金は一番安いもので月額たったの$4。すばらしい! 一番高いもので月額$1250.20となります。いずれも国や州から毎月$776の補助金を受け取った後の金額です。

月額$4~$1250と幅が広いですが、$4ではどのようなベネフィットが得られるかというと...

  • 指定された病院でしか保険が適用されない
  • 一家族当たり年間6300ドルまでの医療費は自腹
  • 世帯当たり年間12600ドルまでの医療費は自腹
  • 一家族当たり年間500ドルまでの処方薬は自腹
  • 世帯当たり年間1000ドルまでの処方薬は自腹
ちょっとわかりにくいですが、年間$48の掛け金($4x12)を払うことで、世帯当たり年間$13600を超える医療費については保険会社が全額負担する、というわけです。年間$13600までは自腹となります。

ではモデルケースBはどうなるでしょうか。世帯所得があがるのでMedi-Calという選択肢はありませんし、政府や州からの補助もでません。結果、月額掛け金は$654.28~$1703.2という幅となります。モデルケースAと違ってこちらは子供なしでこの金額です。では、一番安い月額$654.28の掛け金でどのようなベネフィットが得られるかというと...

なんと! モデルケースAとまったく同じなのですね。すなわち

  • 指定された病院でしか保険が適用されない
  • 一家族当たり年間6300ドルまでの医療費は自腹
  • 世帯当たり年間12600ドルまでの医療費は自腹
  • 一家族当たり年間500ドルまでの処方薬は自腹
  • 世帯当たり年間1000ドルまでの処方薬は自腹
すなわち、年間$7851.36(654.28x12)の掛け金を払った上に、年間$13600までの医療費は自腹。病気もケガもしなければ年間出費は$7851で済みますが、重い病気やケガを負ったら年間$21000くらいまでの出費を覚悟する必要があります。その金額を超えて初めて保険会社が負担してくれるわけです。

自己負担額を減らしたければ毎月の掛け金を上げればよいのですが、これもやはり高くつきます。例えばBluecrossの月額$1603の保険に入れば、医療費の自己負担はゼロとなります。また病院や医師の限定もなくなります。ただし病気やケガがなくても年間$19236におよぶ掛け金が飛んでいきます。

カリフォルニア州の場合、世帯収入$95000だと以下のように課税されます。

  • 連邦所得税...17.78%
  • 州所得税...6.35%
  • 社会保障税...6.2%
  • Medicare Tax...1.45%
だいたいオバマケア以外で32%ほど持っていかれます。ここに年間で$7851(8.2%)~$19236(20%)の医療保険掛け金を乗せようというのですから、「そこそこ軌道に乗っている」自営業や個人事業主には実に重い負担となります。このあたりを整理すると、下の図のようになります。
年収5万ドル世帯が最も安い保険を選んだ場合
年収95000ドル世帯が最も安い保険を選んだ場合


年収95000ドル世帯が最も高い保険を選んだ場合
掛け金の安い保険は医療費の自己負担が大きいですが、自己負担を超える分は保険会社がカバーしてくれるので「医療破産」はなくなります。それをオバマケアの最大の利点と称賛することには私は異論を唱えません。

ただしそのためのコストは中高所得世帯に重くのしかかっていることに注意するべきです。所得移転の一環と捉える人もいるかもしれませんが、そもそもの医療費を抑える努力をせずにこのような政策をとれば、遅かれ早かれ制度そのものが崩壊します。

実際、カリフォルニア州のオバマケア掛け金は去年が13%値上げ今年は12.5%値上げです。年間12.5%の値上げペースが続くということは5年で掛け金は倍増するということになります。

トランプケア(敢えてこの呼び方にします)になると、医療保険に加入できない世帯が大量に発生する、という観測がありますが、実はオバマケアのままでも加入をあきらめる世帯は発生しますし、すでにそうなりつつあります。

2016年、まだオバマ政権だった時ですら160万人がオバマケア加入を断念していたわけです。この傾向は続いており、2017年7月の時点では200万人を超えたという推定もあります。無保険による増税ペナルティを受けてでも、オバマケアに加入しない世帯が増えているわけです。このしわ寄せは...オバマケアの掛け金増加で中高所得層にさらに跳ね返ってきます。悪循環。

トランプ政権はもちろん、共和党・民主党は党派を超えてこの問題に取り組むべきだと私は考えます。トランプ政権や共和党のプレゼンテーションが下手なのも問題ですが、オバマケア見直しを鬼畜の仕業のように非難するリベラルな皆さんは、上記数字をよく読んで「オバマケアは持続不能な政策」であることを認識してくださいな。