re:Inventに行ったので来年参加する人に役立つ話をする

人生の中で夢のひとつだった「海外カンファレンスに参加する」がついに叶いました。
時間と金のサポートを頂いた会社様様には足向けて寝られません。

というわけで、後に参加する人にも何らかの情報を残せればなぁというわけで記録を残します。
発表内容については網羅率でクラメソ神に勝てるわけないのでそっちをごかくにんください。
僕のブログでは、re:Invent参加とラスベガス滞在について役立つことを全般的に書いていこうと思います。

はじめに

  • re:Invent初参加
  • 最終日まで参加
  • Japan Tourは使ってないよ
  • New York New York(NYNY)に滞在
  • 基本ひとり行動、ときどき知人と行動

もくじ

  • 移動の話
  • セッション予約の話
  • ナイトパーティーetcの話
  • ご飯の話
  • 遊びの話
  • 日用品の話
  • お土産の話
  • カジノの話
  • 治安の話

移動の話

シャトルバスなどの話

シャトルバス行列

会場間はめちゃくちゃ広いです。
会場間を歩くのなら基本30分前後〜それ以上を見ておく必要があります。
(ちなみに、歩くのなら絶対にストリップ(大通り)を通ってください。大通りの治安はまあまあ良いですが、細道やホテル裏手エリアはかなりヤバイです)
バスだとしてもそのくらいを見ておいたほうが良いので、
基本的に歩いてもバスに乗っても移動時間はほぼ変わらないとお考えください。 (ここ大事!)
というのも、バスは基本的にストリップ(大通り)を通らずに、他の通りを迂回して各ホテルに向かいます。
なので、直線距離の倍の距離を移動する場合すらあります。
朝や夕方、つまり通勤時間帯は渋滞も発生するので、かなり余裕を持って朝出発しても、基調講演間に合うかギリギリになりました。苦労して取った予約が飛びそうだったので本当に焦りました。
目安としては朝6時~8時、夕方3時半~6時くらいによく渋滞が発生します。

僕はNYNYに滞在していたので、お隣のMGMグランドからバスに乗って毎日ベネチアンに向かっていました。
MGMグランドベネチアンは徒歩だと50分とのことで、まぁバスのほうが早いっちゃ早い。おそらく。バスの所要時間は20分程度。
しかし問題がひとつあり、NYNYからMGMグランドのバス乗り場がまた遠い遠い…
MGMグランドはMGMグループでも特にどでかいホテルのひとつですが、そのホテルの裏手側にバスのりばがあります。
MGMグランド内を抜けるのに約20分歩く必要があるので結構つらかったです。
とはいえ、ホテル内はショップや華やかなカジノエリアがたくさんあるので、退屈はしなかったですが。

re:Playの話

re:Playの会場はホテル街からかなり離れた場所で行われます。
AWS側からはシャトルバスもしくはラスベガスモノレールが交通手段として提供されます。
僕はラスベガスモノレールを選択。ラスベガスモノレールの改札に行くとre:Inventスタッフから往復券が支給されました。
MGMグランドから乗って行けたので快適でした。

ついでにラスベガスモノレールの話も。
ラスベガスモノレールは日本の電車ほど広くなく・車両編成も短いため、日本の満員電車並みの密度になってました。
ラスベガスまで来て満員電車は勘弁してくれって人はバスに乗るかUber呼ぶかしたほうがいいかもしれないです。

タクシー(Lyft)の話

観光もちょっとだけしましたが、そのときはLyftで移動していました。現地バスについても調べたけどよくわからない・めんどくさいで結局乗らなかった。
Lyftは新規登録+Googleマップからプロモーションコードを拾うことで、10回の乗車まで毎回$5OFFで乗れます。
ラスベガス6日間では10回も乗らなかったです。一回の移動につきだいたい$3ぐらいに抑えられました。

セッション予約の話

スタートダッシュ出遅れ組だったので、行きたかったけど行けなかったセッションが結構ありました…。
セッション予約開始はアメリカ現地時間の朝方(つまり日本の夜中)にスタートで、僕が予約をしたのはその日の日本時間朝(つまり、現地時間でいうと開始日の昼過ぎ)でした。

傾向的には、僕が見たときにはKubernetesやマイクロサービス関連のセッションはことごとく埋まっていました。
それからTatonka、ビンゴナイト、ボードゲームナイト、ゲームデイなども空き無し。
ボードゲームナイトにうまく潜り込んだ人に聞いたところ、やっぱり予約開始直後に登録していたとのこと。
結論から言うと、予約開始日は寝ちゃだめです。

セッションは予約がいっぱいでも、予約をキャンセルした人がいたら入れる補欠ウェイトリストに登録できます。
が、re:Inventが近くなると一度、セッションの完全締め切りが行われ、ウェイトリストへの登録が強制解除されます。
それ以降はまだ空いているセッションに入ることと、すでに登録しているセッションを解除することはできます。その日までに登録できなかったらもうあとは当日並ぶしかありません。

当日に会場の前に並ぶことで予約が取れていないセッションにも入れる可能性がありますが、大変に狭き門です。
たとえば、2019年の目玉だったDeepComposerのセッション(参加すると実機がもらえるとあり大人気)は、
セッション開始3時間前から並んだ人がギリギリ入れるか入れないかくらいだったとのこと。並んでも確実に入れるわけではないです。
僕は欲しかったけど諦めました。

会期中にも、キーノートなどで新情報が解禁されると同時にそれに関するセッションがぽこぽこ増えていきます。
新しく追加されたセッションは人気なのでがんばって追いかける必要があります。
とはいえAWSの公式アプリは使いにくいので、僕はTwitterでたまたま見つけたセッション追加おしらせbotに頼りまくってました。

https://twitter.com/reinvent_bot

ツイート通知設定をオンにしておいて逐一拾うようにすると良いと思います。

ナイトパーティーetcの話

AWS認定保持者限定パーティーの会場
自分は完全ぼっち参加(同じ会社から他の社員が派遣されるとかもなく)だったので色々不安合ったのですが、
ナイトパーティーでちゃんと友達を作って帰ってこれたのでまぁよしよしというところです。

連日連夜どこかで企業主催のナイトパーティーが行われます。基本的にメシはここでゲットしていく必要があります。
(ラスベガスの飯代は高い(夜だとだいたい安くて$20~、並みのごはんは$50~+チップ、)。しかしパーティーは無料。行くしかあるまい)
一応ラスベガスのリゾートホテルなので、ごはんは大変美味しいです(詳細はごはんの項で)。

一人でプラプラしていると必ず誰かが話しかけてきます。アメリカとはそういうものらしい。
英語力がないのでコミュニケーションが疎通してない瞬間も多々あったものの、グーグル翻訳でこの辺はどうにかなりました。Googleすごい。

ナイトパーティーの中でも一番大きいものが、木曜日の夜に行われるre:Playです。
re:Invent終了後に行われるデカイ音楽フェス、 intersect の会場をそのまま使ってやる感じだったので、完全にフェスのそれでした。Ultraみたいだった。
どこもかしこも人があふれてた。現地で仲良くなった人たちとプラプラしてたらはぐれた。あと出された酒がre:Invent期間中一番強かった。フード屋台村があったりして楽しかったです。
グラミー賞アーティストがヘッドライナーだったりして音楽は最高でした。

ご飯の話

ヘルシーでおいしかった朝ごはん
メチャクチャ悪評ばっかり聞いてましたが概ね普通においしかったです。
ランチボックスは取りませんでした。ランチボックスは評判悪かったので。(見たところ、サンドウィッチとりんごとポテチとコーラ、みたいな感じだった)
朝昼夜、できるだけお金を使わないように会場で食べてました。

朝食は特にだけどやたらパサパサしてるものが多かった…サンドイッチとか胸肉とかサーモンとか。
そんで飲み物取ろうとしたらコカ・コーラ、スプライトばっかりなので喉が死ぬコンボ。

ごはん会場は死ぬほどでかい

Ariaの飯はうまい」との評がありましたが、確かにおいしかったです。2日間そこで食べました。
アジア料理が中心なので(インディカ米ですが)コメも食べれて幸せになれます(re:Invent期間中はほぼパンしかない)。

ハンバーガーでもいいからうまいものがたべたい!であれば、認定者パーティーで神戸和牛ハンバーガーが出されてたりしました。あれはおいしかった。

日曜日夜のミッドナイトマッドネスはメシが出るかと思って飯抜きで行ったら酒とポップコーンしかなかったのはマジで悲しかった。死ぬほどポップコーン食べた。
そんな辛い思いをしながら、翌日月曜日のレセプションパーティー(エキスポゾーンで食い歩きしながら企業ブース回れる時間)に出されたご飯は一番おいしかった。特にスイーツが絶品でアイスクリームもめちゃめちゃおいしかった。
奥のほうにいくとステーキ串もあったので欲しいものはすべて食べた…って感じだった。
レセプションパーティーのご飯が一番美味しかったのは疑いようがないので、絶対に参加したほうが良い!!!!

re:Playは屋台村の飯は普通にうまかった。酒がアホほど強いのでたくさんたべたほうがハッピーになれるよ。

遊びの話

やったこと

オーのシアター。上演前。

  • 核実験博物館
    • 不謹慎なものを見て喜べる人には最高のスポット、超楽しかった。リアルFallout
  • シルクドソレイユ KA
  • シルクドソレイユ O
    • サンホラ厨に刺さる世界観。最前列で見たので超感動した
  • ビッグアップルコースター(NYNY)
    • ドドンパ作った会社と同じ日本の会社が作りました。横揺れ激しすぎ。超酔うよ。

日用品の話

薬局の飲み物売り場(特に意味はない

ホテルのアメニティに期待していきましたが、アメリカのホテルって全然アメニティがないんですね。すっっっごい困りました。

ホテルのお部屋にあったもの一覧

  • コップ
  • シャンプー・コンディショナー
  • 石鹸
  • ボディローション

あってほしかったもの

  • 歯ブラシ歯磨き粉
  • 湯沸かしポット

歯磨き粉はあるやろ・・・って思って歯ブラシだけ持っていったので普通に悲しい思いしました。
あと水も。洗面所の蛇口をひねると出てくる水がめちゃくちゃ臭かったので、「これ本当に飲めるのか・・・?」って思いながら我慢してうがいしました。
(水質についてはアメリカ人に聞いたら、「まあ飲用水にはしないよね」って回答だったので日本人はあんまり口に含まないほうがよさそう。お腹弱いから)

このことに気づくまで日用品に不便したんですが、ラスベガスのメインストリートには薬局という名のスーパーが点在しています。その名をCVSと言います。
だいたいホテルからも10分歩くとCVSにあたるくらいの感覚。
そこで水やら日用品やらは購入ができます。困ったらそこに行きましょう。

ストリップに面したCSVロケーション一覧(2022/10更新)

  1. パークMGM前
  2. バリーズ前(ベラージオ噴水向かい)
  3. トレジャーアイランドホテル内

あとは、水はre:Inventの会場でゲットすることもできるので、
僕の場合は会場で水を汲んできて、それを部屋でコップにうつしてうがいとかに使ってました。

お土産の話

日用品の話のセクションにも書いたCVSで買いましょう。
空港で20ドルするお土産がCVSで8ドルで売ってました。CVSは強いぞ。全部買え。

パット見チョコレートしかおいてないので、会社から複数人派遣されている場合、絶対にチョコレートかぶりが発生します。
他の選択肢はあまりなさそうだったので諦めてチョコレートを買いましょう。

あとはLas Vegas!!!!!!!!って書きまくった写真立てとかマグカップとか色んなものがあります。それもCVSで買える。
とりあえず、必要なものCVSで全部買うのめっちゃおすすめ。

カジノの話

カジノは基本的に少額投資で勝つのは無理なんだなぁって思いました。
自分は$50入れて$60回収とかそんな感じ。
やるなら$100くらい突っ込みましょう。チマチマ突っ込むと確実に負けが越します。

治安の話

大型ホテルが立ち並ぶ大通り、Las Vegas Boulevardは比較的治安良好で、朝7時くらい~夜12時くらいまでは比較的安全だと思います。
ただ、元来ラスベガスは治安のいい場所ではないので、十分注意する必要があります。

ストリップ

大通りは比較的治安良好と書きましたが、 本当にメインストリート「だけ」の話です
以下のエリアは、徒歩で行くことをお勧めしません。行くならUber等を呼んで車移動してください。

  • エクスカリバーホテルとトロピカーナホテルより先
  • アンコールアットウィンホテルより先
  • ストリップから出ている脇道すべて(ホテルの搬入口的な通路も含む)

エクスカリバーの先・アンコールの先にもホテルなどはありますが、基本的に観光地ではなく現地民エリアです。それらホテルはストリップの終端だと考えてください。
Lyft乗り合いでそのあたりも少し訪れましたが、治安が悪いエリア特有の雰囲気がありました。
ホテルに近いとはいえ、気を付けてください。
また、脇道はもう言わずもがなですが、そういうちょっと細くて薄暗い道にはホームレスやドラッグに遭遇する危険性があります。あまり近づくべきではないです。

また、「朝7時くらい~夜12時くらいまでは比較的安全」とも書きました。
深夜早朝はストリップと言えども人通りが減り、ホームレスがゴミ箱漁りをしていたりします。
その時間帯に移動が必要な場合は車を使った方が安全です。それができない場合、最低でも恰幅の良い男性数人を含むグループで行動することをおすすめします。一人行動は本当におすすめしません。
反対に、ホテルやショッピングモール内であれば24時間安全性は高いと思います。スリや置き引きにだけ気を付けてください。

アウトレットモール

ストリップをずっと北と南に行った先に、「ラスベガス・ノース・プレミアムアウトレット」「ラスベガス・サウス・プレミアムアウトレット」という2つがあります。
これら2つのアウトレットモールの周辺(とくに北)は治安が悪いエリアとして有名で、観光ガイドブックでも「絶対に徒歩では訪れるな」と念押しで書いてあるようなエリアです。
これに従って、もしアウトレットモールを訪れる場合は絶対に車かバスを使うようにしてください。
re:Invent後に家族のおみやげを買うために、と訪問する日本人の方も大変多くお見掛けしましたし、雰囲気も穏やかでした。
それでも、絶対に気を抜かないようにはしてください。ラスベガスでは時々、商業施設内でのマスシューティング(無差別射撃殺傷)も起こっています。


2022用に追記セクション

知人日本人でre:Inventに初参加するぞーという方が数人いたので、今年の会場の様子とかも加味して追加アドバイス書きました

予約セッションスケジュールは地理を考慮する

最北会場のWynnから最南会場のMandalay Bayまでは5キロあります。バスを使ったとしてもかなり移動が大変(とくに渋滞に巻き込まれる時間帯は30分以上かかっても不思議ではない)なので、南北に無理な移動はしないほうがいいと思います。
ラスベガスの交通はとても不安定ですし会場内もかなりの徒歩移動が必要になるので、移動が大きいとセッションに遅刻する可能性もあります。ちなみにセッションに遅刻入場は人気セッションではできないです…当日待機の人を入れちゃうので。

なんとなく頭に入れておきたい会場間の距離リスト

バスは裏道を通るので実際は+0.5キロくらい走行します。

  • Wynn-Mandalay Bay 約5キロ
  • Wynn/The Venetian-MGM Grand 約4キロ
  • MGM Grand-Caesars forum 約2.5キロ

Swagは初日に受け取る

受取が遅くなるほどサイズがなくなります。

Swagもらえるところ

  • The Venetian 参加者用Swagカウンター
  • The Venetian AWS認定者ラウンジ

re:Play

バスはディズニーランドみたいな長蛇の列ができますし死ぬほど混みます。モノレールもまぁ混みますが死ぬほどではないのでモノレールがお勧めです。
re:Playの会場周辺は治安が悪い地域なので、人の流れから外れることをしないでください。会期中は路上にも案内の人がいっぱいいるので安全ですが、絶対に道に迷って変なところに言ったりはせぬよう。警戒感は忘れずに…(お酒も入るでしょうしなおさら)

あとバッグサイズ制限あるのでホームページを確認して必要な物だけ持って行ってください。(最低限、参加者バッジとパスポート(酒の年齢確認のためなので酒飲まないならこれもいらないかも))しかしポッケに入れるだけは気を付けて。スられる可能性あります。

円安を乗り切るお土産の買い方

皆さん円レートを心配してらっしゃるので…できるだけ節約するおススメプランは、空港でお土産は一切買わないつもりで行動することです。ベガスにいるうちにディスカウントストアを訪れて買っておく。ストリップにあるおススメのお店はこちら。

  • CVS : なんでもある薬局、ラスベガスって書いたものや現地のお菓子など。場所は上を参照。
  • MGMグランド北エリア
    • アメリカ民おなじみの庶民派ショップがそろってるエリアがあります。MGMグランドから徒歩10分ほど。
      • Target : 雑貨・食料品店。CVSと同じ
      • Ross Dress for Less : ディスカウントストア。化粧品、雑貨、おもちゃ、服、ファッション小物などなんでもディスカウントで売ってる。ただ品質は注意。新品の店だけど時々ボロすぎて着れないようなものとか穴あいてるのとかある。
      • おみやげ店 : 現地ローカルおみやげストア。ラスベガス!って書いたTシャツ4枚で$10程度で売っている。ものによってはCVSよりも安い。

M&Mショップやハーシーズショップはかわいいですが、普通にお値段がかわいくないのであんまりお土産としてはおすすめしません。
というかその辺のお店で売ってるようなものはAmazonでも取り扱ってると思うので、どうしても欲しいものがあればAmazonで注文してロッカーで受け取ればいいと思います。


めっちゃ長くなった!!!
思い出したら追記するかも。
一人でも多くの方のお役に立てば幸いです。

2019年まとめ

これからNeoncityのカウントダウン行くんじゃ!
時間はないから急ぎ足で書くぞ!!まにあえ2019!!

Tech系

  • 一応毎月アウトプットしたのでえらい
  • 2018年からの草の根活動の甲斐あって自社に勉強会文化がじわじわ根付いてきたのよかった
  • 色々勉強会行けた。AWS Summit TokyoみたいなデカいやつからRegex Nightみたいなコアなやつまで。楽しかった
  • AWS認定なんとか取れた。クラウドラクティショナーな?
  • GCP認定と応用情報は落ちました。ザコです。2020年はリベンジしような
  • ご家庭IoTは監視カメラを作ったくらい
  • PyConスタッフデビューもしました
  • re:Inventへの参加!海外カンファレンスに行くという夢が叶った

お出かけ

Music!

  • re:Playたのしかった
  • Future Funkネオ昭和元年なのでそればっか聴いてた
  • 人間としての成長があり?、食指を伸ばすジャンルは広がった気がする
  • 昔好きだった音楽とか引っ張り出して聞くようになったので年取ったなと思う

体調

  • 信じられる医者を見つけることの重要性。近所の適当な医者にかかったらほんとひどい目に合わされた
  • 年を取るにつれて病気は増える、身を守るために筋肉をつけよう

その他

  • 英語上達した、頑張った
  • 人生変わった、確実に

来年の目標

  • がんばる TBD

とりあえずふゅーちゃーふぁんく摂取してくる

定期的に忘れるPyCharmのDocstringsフォーマット変更方法と自動入力例

こちらにある通り。 https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000784410/comments/115000640424

[Settings → Tools → Python Integrated Tools → Docstring format]

の順に辿ることで変更可能。 選択可能なスタイルは5種類。

  • Plain
  • Epytext
  • reStructuredText
  • NumPy
  • Google

以下にPyCharmによるそれぞれのスタイルの自動入力例を示す。

  1. Plain

    自動で入力しない。完全手動で書きたいときに。

def Foo(p1, p2, p3):
    """

    """
    return 1, "str", True
  1. Epytext
def Foo(p1, p2, p3):
    """
    
    @param p1: 
    @param p2: 
    @param p3: 
    @return: 
    """
    return 1, "str", True
  1. reStructuredText

    たぶんPyCharmデフォルト。

def Foo(p1, p2, p3):
    """
    
    :param p1: 
    :param p2: 
    :param p3: 
    :return: 
    """
    return 1, "str", True
  1. NumPy
def Foo(p1, p2, p3):
    """
    
    Parameters
    ----------
    p1
    p2
    p3

    Returns
    -------

    """
    return 1, "str", True
  1. Google
def Foo(p1, p2, p3):
    """
    
    Args:
        p1: 
        p2: 
        p3: 

    Returns:

    """
    return 1, "str", True

sam local invokeで timed out したときの対応

AWS SAMのローカル実行をしたときに、 Function 'YourFunctionName' timed out after 5 seconds が出ちゃったときの対応策。
といっても原因はエラーメッセージそのままなのでやることは単純。

Properties.Timeout の値を追記/変更する。 単位は秒。デフォルトは(おそらく)5。自分が試したときは5だった。

  Type: AWS::Serverless::Function
  Properties:
    Handler: index.js
    Runtime: nodejs8.10
    CodeUri: 's3://my-code-bucket/my-function.zip'
    Description: Creates thumbnails of uploaded images
    MemorySize: 1024
    Timeout: 15

参考: - https://stackoverflow.com/questions/56182205/aws-lambda-function-timedout-after-3-sec-using-aws-sam - https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction - https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template.html#serverless-sam-template-function

goで関数変数定数のパッチとモック

最近はGoでのテスト時の値の置き換えのしかたとかすごい悩んでます
最近自分がやった策をメモしておく。ただの所感ポエム。

関数のパッチ

MonkeyPatch最強。悩む必要なし
github.com

  • テストしたい関数
func Hoge(a string, b int) (string, error) {
    return "hoge", nil
}
  • テスト
func TestHoge(t *testing.T) {
    monkey.Patch(Hoge, func(string, int) (string, error) { return "fuga", nil})
    ~~テスト~~
}

ちなみに monkey.Patch() 先生は関数しかパッチできないので無理をしようとすると怒られる。

panic: target has to be a Func [recovered]
    panic: target has to be a Func

定数・変数のパッチ

自分が調べた限り、パッチするようなライブラリはない(あったら教えてください)。
メッチャ苦労するので、設計段階から置き換えやすいIFにしておくのが得策の様子。

苦心した方法は下記。

  1. envに入れる
    os.GetEnv("HOGEHOGE") に格納しておいて、都度そこから引っ張り出す。環境ごとに変更。
    テスト時は os.SetEnv("HOGEHOGE") でどうにかなる
  2. configファイルを用意、上書き
    コンフィグファイルに定数にしたいものを定義しておく。ただし var で。
    テスト時はそこを書き換える。けっこう無理矢理である。

コンフィグファイル

package config

var (
    Hoge = "foobar"
)

テスト

config.Hoge = "piyofuga"

モック

モックをするには interface が必要らしいので、ちょっと関数だけ…なときにはモックを作るほうにめんどうくささが偏っていく。
とりあえず interface があるなら(もしくはこのために作っても良いのなら) mockry とか gomock とか選択肢はある。
ジェネレートするだけ簡単仕様、使い方は色んな人が書いているからどうにかなる。

github.com

github.com


感想、設計がちゃんとしてればテストもラクなんだろうなあって思った(こなみかん)。
テストのしやすさも考えて実装しないと「テストどうやるの…」になって詰む。
Goはその辺試される言語ですね。ザコーダーにはつらい。

Fitbit製品はソニータイマーみたいな壊れ方するから買うべきではない

書かずにはいられなかったよ。

TL;DR

Fitbitは故障対応が最悪なので、購入を検討してここに辿り着いたなら考え直すことを強くお勧めします
特にIonicはダメだ。3万円もするんだぞ。
アキバでやっすい中華ウォッチを買ったほうがマシ

何が起こった

Amazonの日本先行発売で購入したFitbit Ionicを1年10か月使っていました。が、先日故障しました。
原因はおそらく水泳(ちなみに防水モデルですよ!)。

水泳アクティビティ記録モードにして、泳ぎ始めて30分ほど経ったころ、ふと気付くとIonicが再起動状態に。
オヤと思ってプールから上がって様子を見ていると、再起動を繰り返しているようです。
再起動の合間にボタン・パネル操作をしましたが、30秒ほど遅延してやっと操作が反映される状況でした。
とりあえず、時計はそれ以上水に浸けないように腕から外しました。

帰宅後、満充電してみました。
遅延が10秒くらいに減ったがなんかパネル操作がおかしい。左半分の操作が効いていない。
苦戦しつつなんとか設定画面に辿り着き、出荷状態へ初期化しました。

初期化後、遅延はなくなりましたが、やっぱりパネルの左半分はウンともスンとも状態でした。

サポートに連絡したらガッカリ対応だった

f:id:komajou:20191015082950j:plain

サポートに問い合わせるとこんなメールが返ってきた。

要約すると、

  • Fitbitに「修理対応」というものはない
  • 1年の保証期間を過ぎているので なにも対応できません

そんなことある…?
一応3万円するんですよ、Ionic。
3万円あればSwitchやらPS4やら買えます。任天堂ソニーが修理断るなんて想像できます?
機械は機械だから絶対に遅かれ早かれ壊れます。でも愛着持って使いたい人はいるわけで。
それなのに…?「対応をお断りせざるを得ない」…?

呆然。

みんなソニータイマーしてるらしい

https://community.fitbit.com/t5/%E3%83%98%E3%83%AB%E3%83%97/Ionic%E3%81%AE%E9%98%B2%E6%B0%B4%E4%BB%95%E6%A7%98%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/td-p/2835097

https://community.fitbit.com/t5/%E8%AD%B0%E8%AB%96/IONIC-VERSA%E3%81%AF%E6%B5%B7%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%A1%E3%82%83%E3%81%84%E3%81%91%E3%81%AA%E3%81%84/td-p/2850860

この辺を見ると、みんな同じような壊れ方をしているように思います。
かわいそうな人は1年1か月で故障しているようで…ひどい。

IonicはFitbitの最高級モデルで、1台3万円します。
それなのに、修理サポートもなく壊れたらはいおしまい。
ひどくないっすか。

結論

Fitbitが買収したPebbleが好きでした。
なのでFitbitも何となく好きだったけど今回のことで嫌いになってしまいました。
もうFitbitは買いません。
高い勉強代でした。本当に残念。

go-proto-validatorでis_in_enumを使ったときにコンパイルに失敗する

TL;DR

https://github.com/mwitkow/go-proto-validators の version 0.1.0 で、
ネストされているEnumに対して is_in_enum:True を設定するとエラーになる。 version 0.2.0 で解決された様子?だが、うまくいかない。。。

エラーメッセージ

C:\Go\Project\hoge\fuga\foo.pb.go:18:14: undeclared name: Belong_name
2019/09/25 15:33:54 Loading input failed: loading package failed

問題が発生するprotoファイル

item Person {
  string id = 1 [(validator.field) = {length_gt:0, msg_exists:true, string_not_empty:true}];
  string name = 2 [(validator.field) = {length_gt:0, length_lt:50, string_not_empty:true}];
  enum Belong {
    NONE = 0;
    COMPANY = 1;
    SCHOOL = 2;
    OTHER = 3;
  }
  Belong belong= 3 [(validator.field) = {msg_exists:true, is_in_enum:true}];
}

原因

version 0.1.0がネストされたEnumに対応していないことが原因の様子。 pb.go ファイルを生成するとき、Enumは下記のように NameValue の2つの変数に分けて定義される。

var Person_Belong_name = map[int32]string{
    0: "NONE",
    1: "COMPANY",
    2: "SCHOOL",
    3: "OTHER",
}

var Person_Belong_value = map[string]int32{
    "NONE":     0,
    "COMPANY":  1,
    "SCHOOL": 2,
    "OTHER":    3,
}

ここで変数名に注目して欲しいのだが、変数名は
{親のクラス名}_{自分のクラス名}_{name|value}
命名規則に則っている。

go-proto-validators はこの {親のクラス名} を追えないようで、 {自分のクラス名}_{name|value}
を探しに行ってしまう。そのため、参照エラーになる。

解決法

ネストしない。
ネストしているEnumを親クラスの外側に出す。

version 0.2.0でこの問題が解決したっぽい。 が、いまいちうまく生成できないのでとりあえずネストしない法でやりすごしている・・・