Whole Foods Marketで生牡蠣Get

Wholefoods Marketの生鮮食品売り場カウンターで、生牡蠣が殻付きで1個1ドルで売られているのを発見した。

生牡蠣は好物なので生で食べれるか聞いてみたところ大丈夫らしい。

4個ほど買ってみた。殻は剥くか聞かれたので剥いてほしいと頼んだところ、お店で出てくるような氷満載のバットに並べて渡された。

f:id:tomo-ono:20181124184639j:plain

Wholefoods Market内にはバーコーナーも設けられているので「そこのバーで食べていってもいいよ」と至れり尽くせり。

家まで持ち帰って、ポン酢をかけて白ワインと頂く。身はしっかりしているし、以前近所のシーフード屋で食べたときのような消毒液の匂いもしない。非常に良いものを見つけた。

夏はバーベキューで焼いても良さそうだ。

なお、今の所食中毒の症状は出ていない。。。

D&Dやコピペでファイルアップロードできるtextareaをサクッと作る

GithubやQiitaなんかで使えるような、使い勝手の良い画像やファイル添付のTextareaをサクッと作った

使ったライブラリは Inline Attachement。 今回はレガシーWebAppに使ったので、JQueryで実装。

設定はドキュメントに掲載されているが、実はここに書かれている以上に拡張性があるので、コード自体を読むことをおすすめする。これによりやりたかったことは全て実現できた。

やりたかったこと

どんなファイルでも添付できるようにしたい

デフォルトだと画像ファイルに制限されているが、どんなファイルでも受け付けるようにしたかった。 コードを読んで、allowedTypes: ['*'] とすれば良いことがわかったのでそのようにした。

アップロードされたファイルの名前が、サーバサイドでわかるようにしたい

デフォルトだと、サーバサイドから見えるファイル名は、image-タイムスタンプ.拡張子となり、もとのファイル名がわからない。 ドキュメントに記載は無いが、remoteFilenameというプロパティに関数を入れてやると、引数にファイルオブジェクトを渡してくれるので、ファイルオブジェクトの内容を使ってファイル名を作成して返してやることで、サーバサイド側ではそのファイル名で見える。 例えば下記のようにすると、もともとのD&Dされたファイル名がサーバサイドに送付される。

    remoteFilename: (file)=>{return file.name}

ファイルの種類によって、埋め込まれるコードを変えたい

Markdown形式で入力するテキストエリアだったので、ファイルの種類によって埋め込まれるコードを修正したかった。

![image.png](url to image)   ←画像ならこっち
[document.docx](url to file)  ←ドキュメントならこっち

埋め込まれるコードは、urlTextプロパティで静的に設定できるが、このプロパティに関数を与えることで好きなデータに編集できる。 ファイルの種類はサーバサイドで判定したMIMEJSONに入れて返し、これを読んで画像ファイルか普通のファイルかどうかの判別がつくようにしてある。 また、リンク文字列ももともとのファイル名にしたかったので、同じくサーバサイドからオリジナルのファイル名を返して埋め込むようにしている。

    urlText: (filename,result)=>{
      if(result.mime.match(/image/)) {
        return `![${result.orig_file_name}](${filename})`
      } else {
        return `[${result.orig_file_name}](${filename})`
      }
    }

マウスオーバしたときにドロップできる感じを出す

ファイルをドラッグしてきたときに、textareaに点線で枠線を表示することで、ドロップできますよー感を出した。

textarea.dragover {
    border: dashed 6px #ccc;
    padding: 12px 6px 0px;
}
  $('textarea').on('dragenter dragover', function() {
    $(this).addClass('dragover')
  })
  $('textarea').on('drop dragleave dragend', function() {
    $(this).removeClass('dragover')
  })

最終型

JSはこんな感じ。

$(function(){
  // ファイル貼り付け
  $('textarea').inlineattachment({
    uploadUrl: 'upload_attachment.php',
    allowedTypes: ['*'],
    remoteFilename: (file)=>{return file.name},
    urlText: (filename,result)=>{
      if(result.mime.match(/image/)) {
        return `![${result.orig_file_name}](${filename})`
      } else {
        return `[${result.orig_file_name}](${filename})`
      }
    }
  });
  $('textarea').on('dragenter dragover', function() {
    $(this).addClass('dragover')
  })
  $('textarea').on('drop dragleave dragend', function() {
    $(this).removeClass('dragover')
  })
});

CSSはこんなん。

textarea.dragover {
    border: dashed 6px #ccc;
    padding: 12px 6px 0px;
}

PHPはこんなもんで。

$response = array();
$upload_directory = "/data/";
if (isset($_FILES['file'])) {
    $file = $_FILES['file'];
 
    // MIMEタイプの取得
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime_type = $finfo->file($file['tmp_name']);
 
    // ファイルのID(=MD5ハッシュ)を計算
    $file_md5 = md5_file($file['tmp_name']);
 
    // ファイルの移動
    move_uploaded_file($file['tmp_name'], $upload_directory . "/" . $file_md5);
 
    $response['filename'] = "file_get.php?id=".$file_md5;
    $response["mime"] = $mime_type;
    $response["orig_file_name"] = $file["name"];
} else {
    $response['error'] = 'Error while uploading file';
}
echo json_encode($response);

BIABをAnovaでやってみた

個人でのビール自家醸造のやり方にBIAB(Brewing in A Bag)というのがある。これはビール醸造の最初の手順である麦芽の糖化(マッシング)にて、袋に麦芽を入れてそれをティーバックの要領で煮出すというやり方になる。使う鍋の量が少ないので、利便性が高く人気がある。

マッシング中は1時間以上に渡って温度を一定に保つ必要があるので、通常は定期的に温度を確認して、必要に応じて火にかけたりする必要がある。

要するにある程度の時間、水温を一定に保てばよいということなので、みんな大好き低温調理器Anovaが使えるんじゃないか?と思い、実際にやってみた。

Anovaは水を吸いこんでヒータで温度を上昇させ、水を吐くという仕組みになっている。Anovaに麦芽が吸い込まれるのはあまりよろしくなさそうなので、麦芽の入った袋の外側にAnovaを取り付ける。

今回は5galを仕込むので、その1.5倍の7.5galの水で煮出すことにした。

まずは鍋に水を張り、バッグとAnovaを取り付けてスイッチ・オン。マッシング温度は65℃とした。水の容量が大きいためAnovaだけの熱量だとパワー不足のため、最初は電熱コンロも併用する。

f:id:tomo-ono:20180908162707j:plain

65℃になった時点で麦芽を投入。最高水位線を超えてしまうことが懸念だったが、特に問題なかった。

f:id:tomo-ono:20180908163305j:plain

初めは非常に順調だったが、30分ほど経ったときに水量不足の警告音を出してAnovaが停止するようになってしまった。もちろん水量不足になるほど、鍋内の水は減っていない。誤検知かと思い、何度かスイッチをオンにしてもすぐに止まってしまう。

試行錯誤の上、Anovaの水を吸い込む口の部分にバッグと麦芽がへばりついて、水がうまく吸えなくなったので、水量不足という表示をしているのではないかと思いあたった。そこで、Anovaの水を吸い込む口のあたりにトングを突っ込んでバッグをブロックしてやったところ、うまく動作するようになってくれた。

次回は水を吸い込む口のところに、何らかのつっかえ棒などを取り付けて、バッグがへばりつくようなことが無いように工夫してみるつもり。

とにかくマッシングの工程は、多少エラーがでてまごついた部分はあったが、ほぼ全自動で完了させることが出来た。 比重も1052でほぼ狙い通りまで行けた。

ディズニーランド訪問雑感

自分が次回行くとき用のメモ。他の人にも役に立つかも。。。

空港(ロサンゼルス国際空港)からの交通

  • Disneyland Resort Express を利用した。(http://visitanaheim.org/partners/16394/the-disneyland-resort-express)
  • 冷房は寒すぎる。
  • 何故か車内ではToyStory2が流れている。
  • ホテルをいくつも回ってからパークに降ろされるので、パークに最初に行きたい人はDisneyland Hotelあたりで停車しているときに降りてしまうのが正解。
  • 往復で$48。行きのバスでDisneyland Hotelにて精算があった。カードのみで現金不可。
  • 公式サイトもドメイン期限切れで閲覧不可なのでなんともきな臭い感じ。次は別な方法を利用してみる。

アトラクション

ディズニーランド

  • インディ・ジョーンズ・アドベンチャー
    • シングルライダーで乗った。シングルライダーの人は出口から逆走して入るパターン。途中にエレベーターとかあるのでちょっとわかりにくい。
    • 日本のものとほぼ同じ構成。差分は煙幕吹きつけられる下りが無い位。
    • 写真撮影は無し。
    • ちょっと古い印象は否めない。
  • スペース・マウンテン
    • 改修後の日本のものとほとんど同じデザイン、構成。
    • 座席にスピーカーが付いており、終始ノリノリの音楽が流れている。
    • 最後に写真撮影あり。
  • スターツアーズ
    • こちらも改修後の日本のものと全く同じ。
    • Qラインの構成、映像も全部同じだった。
    • 観客の反応はノリノリなので面白い。
  • ビッグサンダー・マウンテン
    • 日本の強化版という感じ。
    • Qラインが日向なのでひたすら暑かった。
  • スプラッシュ・マウンテン
    • シングルライダーで乗った。シングルライダーの人は出口から逆走して入るパターン。ノンストップで乗れたので最高。
    • シートベルト類なし。ただただ座るだけ。
    • 日本よりも全体的に薄暗い感じ。
    • 水しぶきは日本より控えめか?
    • リュックを置くスペースもない程に席が狭い。
  • マッターホルンボブスレー
    • 一列タイプのコースター
    • 速度はそれほどでも無いが、線路が細く、急カーブがあるため妙に迫力がある。
    • 花やしきのジェットコースターに近い。
  • ディズニーランド・モノレール
    • ランド→ダウンタウンディズニー間で乗車。
    • どこを走っているのかの音声解説が入るので、一通り回ってからだと復習できていい感じだった。
    • スピードが結構出るので快適。
  • カリブの海賊
    • こちらも日本よりも何シーンか追加があるが、改装後のものとほぼ同じ。
    • ジョニー・デップは残念ながら不在。
  • オートピア
    • 日本のグランドサーキットレールウェイは終わってしまったがこちらは健在。
    • 提供がHONDAで、道端にASIMOが立っていたりする。
    • 日本のグランドサーキットレールウェイには装備されていた衝突防止機能がないので、普通にぶつかる。

カリフォルニアアドベンチャー

  • ラジエーター・スプリングス・レーサー
    • はじめはカートゥーンスピンみたいな感じだが途中レースモードになってからの迫力が凄い。なるほど話題になるだけの事があるという満足感。
    • シングルライダーで乗ったが、カップルの隣で激しく気まずかった。
  • グリズリー・リバー・ラン
    • ボート的なやつに乗って川下りする奴。
    • 笑えるくらい水がかかる。冬はどうするんだこれ。
  • カリフォルニア・スクリーミン
    • 引っ張り上げて落ちるのではなく、センター・オブ・ジ・アース的に下から急加速してスタートするジェットコースター。
    • ループあり。
    • コースといい感じに合わさった音楽も流れていて楽しめる。
    • スピード感だと一番か?
    • 写真撮影有り。
  • ソアリン・アラウンド・ザ・ワールド
    • 圧倒的な画質で世界遺産を飛んで廻るアトラクション。
    • 噂に違わぬ素晴らしさだった。
    • 最後にディズニーランドに戻ってきたときに観客から拍手が起こったのが印象的だった。
    • 日本にできるのが楽しみ。冒険とイマジネーションの海にピッタリだな。
  • モンスターズ・インク - マイクとサリーのレスキュー
  • ガーディアンズ・オブ・ギャラクシー:ミッション・ブレイクアウト
    • ガーディアンズ・オブ・ギャラクシー未見で大丈夫かと思ったが大丈夫だった。誰でも楽しめるように作られている。
    • 近くにMarvelオタクがいたので、彼らの話からトリビアをいくつも聞けたのが良かった。本当ならMarvelオタクに自分がなるか、オタクを連れて行くのがさらに楽しむためのコツだろう。
    • アトラクションの動きは基本タワテラだが、動きの激しさは遥かに上だったと思う。
  • キャラグリ
    • Disneylandのアプリでキャラクターのグリーティング場所と時刻を確認できるようになっている。
    • 時間近くになって行くと列が作られているので、それに並んでいると時間の10分過ぎぐらいにキャラがやってくるので、順番に写真をとるなりする感じ。
    • アメリカ人はめっちゃ話してたけどなんの話をしていたかは謎。。。

その他

缶バッジ

  • "1st Visit"の缶バッジを付けていた人に、どこでもらえるのですか?と聞いたら、キャストに言えば普通にもらえるよ!と言われた。キャストに貰いに行ってみるかーと思っていたら、「これ余ってるからどうぞ!」と缶バッジを分けてくれた。結構いっぱいもらっている人が多そう。
  • "Celebrating xxx"(xxxさんのお祝い) とか "Happyly ever after"(結婚系?)とかバリエーション色々あったので、試してみると良さそう。
  • TDRだと剥がれやすいシールだから、それと比べるとすごくいい。

混雑

  • 驚くほどに空いている。夏休み中の土日だから混む方だと思っていたが、全然そんなことはなかった。一番長く並ぶものでも80minとかで、シングルライダーファストパスを駆使すればメジャーどころは2日で全部回れる。

ファストパス

  • ファストパスは入園チケットを読み込ませて発券する。
    • カードスロットに差し込む感じなので、スマホとかでは無理っぽい。
  • 券が発見されるがそれ自体はただの時刻のメモに過ぎず、実際にファストパスで入るには、アトラクション入り口の機械に入園チケットを読み込ませる必要がある。
    • こちらは差し込まずにかざすタイプなのでスマホ利用可能。
    • 多分過渡期なのだろう。。。

警備

  • 入り口の荷物検査は結構厳重。金属探知機もあり。
  • リュックの中身をすべて出して確認+リュックの中身のケースとかもあればそれ全部開けて確認という厳重さだった。
  • 前に並んでいた中国人は、自撮り棒と大きめの手鏡でNG食らっていて、ホテルに持ち帰るように言われていた。
  • ディズニーランド、カリフォルニアアドベンチャーランド、ディズニーダウンタウン全体がこの荷物検査の内側なので、安全性は高いと思う。

年パス

  • 年パスには日本と違って写真が入らない。バーコードと名前だけ。
  • 最初に入場するときにスマホでパスポートのバーコードを読み取り、そのままスマホで写真が撮られる。移行はパスポートのバーコードを読み取ってもらうたびに画面にその写真が表示されるので、それで本人確認出来ていた。なるほど合理的。
  • 顔写真で確認できるので、再入園スタンプも必要なし。
    • ということは、すべてのパスで写真取られるようになっているかもしれない。
  • 飲食とお土産の購入が10%オフになる嬉しい特典つき。
    • STARBUCKS COFFEEでは利用できた。
    • ダウンタウン・ディズニーのお土産屋でも利用できた。
    • ビールはNGだった。アルコールはNGなのかもしれない。

Today

  • 案外しょっぱい

ダウンタウンディズニー

  • ディズニーリゾート内の商業施設モール
  • 要はイクスピアリですな。
  • 土産物を買うならここのWorld of Disneyが最適と思われる。
    • 両パーク内のお土産屋を垂直統合した感じ。ほぼすべてここで揃えられる。と思う。
    • 年パス10%割引も有効。

アメリカ赴任時のお金周りの準備

f:id:tomo-ono:20180309054302j:plain

人事異動のシーズンである。

同じ会社で今度アメリカ赴任になる人からどういう用意が必要なのか?という問い合わせをちょくちょく受ける様になったので、自分が赴任したときに特に困ったお金周りのことについてメモしておく。

ドルの準備

アメリカでの生活立ち上げは、やはり何かとお金がかかる。それでいて給与は社会保障番号が出るまで会社から支給されないので、はじめの数週間は円をドルに変えて暮らすことになる。

一番手っ取り早いのはクレジットカードで、殆どの買い物ではこれを使えば問題ない。外貨取扱手数料の少ないカードを選んで作っておくのが良いだろう。

ただしクレジットカードが使えないケースも幾つかあり、経験した中だと

などはクレジットカードが利用できないので、現金もしくは小切手を利用する必要がある。

このためにはUS側で銀行にCheckingの口座を作る必要がある。口座は銀行の窓口に行けば簡単に作れるので心配はいらないが、問題はお金をどこからどうやって持ってくるかだ。

銀行での海外送金

一番素直なやり方。ただし手数料も高い上に、事前の外為口座立ち上げ等面倒が多い。私のときは日本で実施するべき手続きが漏れており、この方法が取れなかった。

TransferWiseでの送金(オススメ)

f:id:tomo-ono:20180309054106p:plain

TransferWiseはFintec系の企業で、外貨送金を専門にやっている会社である。 この会社が面白いのは、実際に送金するのではなく、送金したい国と国の間でマッチングを行って、利用者の口座に金を振り込む形で送金を実施しているというところ。 例えば日本で、日本円を売ってドルが欲しい人(日本→USの海外送金)とUSでドルを売って日本円が欲しい人(US→日本の海外送金)をマッチングして、いずれも国内でのお金の動きだけで完結させるというものになる。 何よりも手数料が安く、またいくら掛かるのかも明快にわかるので非常にオススメ。この紹介リンクからだと£500まで手数料不要で送金できるので試してみてほしい。

TransferWise

この方法での注意点としては、日本の口座→TransferWise の入金が銀行振り込みになるため、ネットバンキング経由だと一日辺りの振込金額が50万円等に制限されているので、大金の送金は一日ではできないという事に注意。

USに到着したらすぐに口座を開設して、TransferWiseで毎日送金するようにするのがいいだろう。

カードの準備

f:id:tomo-ono:20180309054822p:plain

よく言われる通りアメリカはカード社会で、クレジットカードを持つのは必須と言える。しかしながらドル建てのカードの契約にはクレジットカードヒストリが無い赴任者にはすぐには無理な話である。

そのため、JALANAが赴任者向けのカードを用意している。どちらもイシュアは同じでFirst National Bank of Omahaが提供している。

どちらを選ぶかは、よく使うエアラインで決めれば良いと思う。私は近所の空港から日本への直行便がJALしかないので、JALのカードにしている。

カードの申込みは日本からもできるが、実際に利用する前にアクティベーションが必要で、アクティベーションのためには社会保障番号が必要になる。なのでそれまでは日本で使っているカードをそのまま使うことになるだろう。

半年ぐらい使っていると、FICOスコアと呼ばれるクレジットカードのスコアが計算されるようになるので、こうなると好きなカードを選んで使い始めることができる。

空港間のマイル距離を調べるスクリプトを書いた

先週末、これまでに乗ったすべての飛行機の記録を記載しようと思い立った。

幸い飛行機に頻繁に乗るようになったのはここ2,3年の話でメールを掘り返せば予約情報もすべてわかるし、数十回程度だったので記憶からもすべて思い起こすことができた。

便名、エアライン、区間の最初と終わりを記載したのだが、せっかくだから飛行距離すなわちマイレージも記録したい。 エアライン限定であれば生涯マイレージを表示するサービスがあるが、ここは全エアラインのマイレージを合算したい。 エアラインの区間マイレージはIATAのテーブルで規定されていて、それにもとづいて計算されるらしいが、そのテーブルのデータ購入は有料で敷居が高い。 幸い MileCalc(http://www.milecalc.com) などマイレージを計算してくれるサイトはいくらでもあるので、こうしたところを利用してマイルの一覧を集めるスクリプトrubyで書いた。

require "net/http"
STDIN.read.split("\n").map{|str| str.split(/\s+/).sort.join("\t") }.uniq.each do |str|   
    from, to= str.split("\t")
    res = Net::HTTP.get(URI.parse("http://www.milecalc.com/mileage-calculator/#{from}/#{to}/"))
    begin
        mile = res.split("\n").select{|s|s.match(/distance\[0\]/)}.first.split('"')[1]
    rescue Exception => e
        mile = ""
    end
    puts "#{from}\t#{to}\t#{from}#{to}\t#{mile}"
    puts "#{to}\t#{from}\t#{to}#{from}\t#{mile}"
end   

標準入力で 3桁のIATA空港コードの組を空白で区切って入力すると、その組のマイル数をタブ区切りで返す。

  • Input
NRT LAX
  • output
LAX  NRT LAXNRT  5451
NRT LAX NRTLAX  5451

表計算VLOOKUPで探せるように、往路と復路の両方を出力するようにした。

また、Inputで空港のペアが重複していてもユニークになるようにしている。

AAのフルフラットシートでUS国内旅行

金曜日を休みにして、週末を使ってロサンゼルスに遊びに行ったときのこと。

飛行機はJALマイレージを貯めるためにいつも通りAmerican Airlineで、出発の一週間前に予約した。

行きは朝早い6:40出発のAA2401にして、+$100ぐらいでファーストクラスにできるということなので、マイル目的でファーストクラスにしてみた。

American Airlineの国内線エコノミークラスだと実距離マイルの50%か30%しかつかないのに対して、ファーストクラスにしておくと、実マイルの125%が加算される。

そして実際搭乗した機体のファーストクラスがこれ。

f:id:tomo-ono:20171208061156j:plain

まさかのフルフラット....!!!!

今回の機体は Boeing 777-200ER で、どうやらAmerican AirlineのBoeing機だと、国内線のファーストクラスがフルフラットシートになるケースが多いらしい。

Planes − Travel experience − American Airlines

さらに早朝フライトだったので朝食付き。

f:id:tomo-ono:20171208081218j:plain

結構美味しかった。到着後運転予定だったのでアルコールが飲めなかったのが残念。

どうすれば乗れるのか?

ここを見つつ、予約する飛行機の機材を確認しながら、ファーストクラスやビジネスクラスで、シートピッチが「レイフラット」になっている機体を使っている路線を選べばOK。

American Airlineの場合はBoeing機ならだいたい該当するようだ。

新幹線のグリーン車よりもちょっと高いがその価値が十分にあると感じられた。とにかくフルフラットシートに乗ってみたい人にもオススメ。