Xiaomi Mi Band 5発売日・スペックまとめ(自分とお友達用)

○○について調べてみました!系の日本の記事の情報が遅い。モー自分でまとめる。

発売日・価格について

ヨーロッパ・アメリカではすでに予約開始中・かつ発売日確定。
2020/07/15目安で各社動いているようです。

日本円にすると、ヨーロッパだと5000円程度、アメリカだと4500円程度。
日本展開時もそのあたりの価格帯になると予想されます。
それぞれ中国版モデルより1000円程度高い値段設定になっています。

スペックについて

上記製品ページからのピックアップして、日本の調べてみました!系情報になかったものをつらつら見ていく。

  1. Mi Bandの言語は中国語・英語のみサポート
    • スマートフォンの言語が英語以外の言語に設定されている場合、Mi Bandは自動的に中国語に設定される。
    • Mi fitアプリは複数言語対応。スマートフォンの言語と動機される。
  2. NFCは中国国内でのみ使用可能(もしくはなし)
    • Union Payのみサポート。Google Payサポートという噂があったが…
    • それ以前に、「NFC非搭載モデル」と表記しているページもあり、グローバルモデルの位置付けがよくわからない
  3. 血中酸素モニタは実装されなさそう
    • これも事前の噂で「中国国内版にはなかったがグローバル版には実装される」と言われていた機能。各製品紹介ページでそのような記述は見つけられず。

その他の情報について

ヨーロッパで7/15に製品発表会があり、その際に追加の情報が公開されると推測されている

www.techradar.com

(7/16追記) 噂通り、上記の製品発表会で正式に発表され、各社で販売がスタートしました。 ただ日本展開の話はなかったようです。 k-tai.watch.impress.co.jp

Serverlessルートディレクトリの外にある自作モジュールを読み込ませる

概要

repo-root
├ functions
│ ├ func_a
│ │ ├ main.py
│ │ └ serverless.yml
│ └ func_b
│   ├ main.py
│   └ serverless.yml
├ libs
│ └ mod_c
│   └ foo.py
└ tox.ini

とあるServerlessのLamdaを管理するリポジトリがあります。
このリポジトリは(歴史的背景により)、それぞれ serverless.yml を持つ複数のFunction(func_a, func_b)を持っています。

という条件の中で、func_a, func_bで共通の自作モジュール mod_c/foo.py を読み込みたくていろいろやったメモです。

なにゆえ?

普通にこのままデプロイをかけると、 serverless.yml があるディレクトリの外側にある libs はzipされません=Lambdaが libs を持たない状態になります。
そのため、Lambdaは

Unable to import module 'main': No module named 'libs'

というエラーを出すことになります。
本稿の目的はこれを回避することです。

本来なら /repo-rootserverless.yml を置くのがたぶん最適解です。
が、歴史的背景が色々あってその変更を掛けることができませんでした。
というお断りをしておきます…

説明すること

  1. Serverlessデプロイするまで
  2. PyCharm上で読み込めるようにする方法
  3. tox/pytestでテストできるようにする方法

1. Serverlessデプロイするまで

serverless-python-requirementsというプラグインを使用します。

github.com

serverless.yml があるディレクトリで↓を実行してインストール。

$ sls plugin install -n serverless-python-requirements

インストール後、 serverless.ymlplugins 内に vendor オプションを追記することで libs を含めることが可能になります。

GitHub - UnitedIncome/serverless-python-requirements: ⚡️🐍📦 Serverless plugin to bundle Python packages

service: xxxx-yyyy-zzzz
frameworkVersion: "^1.xx.x"

provider:
  ...(省略)...

plugins:
  - serverless-python-requirements
custom:
  pythonRequirements:
    vendor: ../../libs
  ...(省略)...

functions:
  ...(省略)...

ただ、デプロイ後、 vendor に指定したディレクトリ階層が1階層浅くなるトラップがあります。

デプロイ後、Lambdaの中は↓のようになります。

func_a
├ /bin
├ /redis
├ /requests
├ __init__.py
├ main.py
├ /mod_c
└ ...

serverlessルートディレクトリ直下にimportしているライブラリが展開されます。
それによって何が起きるかというと、func_aおよびfunc_bの main.py

from libs.mod_c.foo import bar

のようにimportしている場合、
libs が見つからないことによってLambdaの中で結局 Unable to import module が出ます。
ソースコード上での解決方法は簡単で、 libs を除けば動作します。

from mod_c.foo import bar

ただこの状態だとローカルでテストが動作しなくなったり、toxが回らなくなったりするので、
importに合わせて各種設定を変更することが必要になります。次節へ。

2. PyCharm上で読み込めるようにする方法

1の手順に沿ってimportを書き換えるとPyCharmが警告を出すので、Project Structureから libs をSource Foldersとして登録します。

  1. PyCharmのProject Structure画面を開きます。
  2. [File] -> [Settings] -> [Project] -> [Project Structure]
  3. [Mark as:] から [Sources] をクリックしてから、 /libs をクリックします。
  4. /libsディレクトリが青色になったら [Apply] -> [OK]

これでPyCharm上では正しくimportができる状態になります。

3. tox/pytestでテストできるようにする方法

toxを使っている場合、まだimportが失敗するので修正する必要があります。
(本稿ではCircleCI+tox+pytestの使用を前提としています)

原因は libs にpathが通っていないことなので、
テスト実行時の環境変数PYTHONPATH を追記します。

tox.ini

[testenv:py36]
deps = pipenv
commands =
  - pipenv install --dev
  pipenv run pytest
setenv =
  PYTHONPATH = {toxinidir}/functions{:}{toxinidir}/libs
...

この例では、 /functions/libs の2つのディレクトリにパスを通しています。

setenvについての詳細はこちら。名前の通り環境変数をセットするだけです。

tox.readthedocs.io

{toxinidir} はtox.iniがあるディレクトリを指す変数、
{:} は複数変数の区切り文字(環境依存)を環境に合わせて変更してくれるものです。

toxの置換変数の詳細はこちらを参照。

tox.readthedocs.io

{:} でちょっとハマりました。
Windowsローカル環境で作業しているときに ; で書いて、
それをCircleCI(つまりLinux)に出したら動かなくなって、区切り文字が環境依存であることに気づくまでに数十分かけてしまった…
直接 : , ; とか書かずにちゃんと {:} を使いましょう。

【退職エントリ】SES嫌いだけどSESとして働いて退職するまで

はじめに

2年ほど勤めたSES(開発者派遣・客先常駐の業態)主体の会社を退職した。

僕は元々SESが嫌いで、その存在を知ったときから絶対その業態では働きたくね〜〜〜〜と思っていたし、
前前職でやむなく客先受注に出されたときにはいろんな圧力が原因で精神を病んでいる。

ところが、色々あって「実際にやってみなきゃわからん」と妙にポジティブな気持ちでSESの会社で働くことを決めた。
そして最終的に、インターネットで言われる「SESのこれがダメ」は正解だったことを知り、退職を決めた。

※注意:この記事はあくまで退職エントリです。「SES」っていう主語でものを語るつもりではないのでご理解ください。あくまで僕の経験です。

続きを読む

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

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

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

はじめに

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

もくじ

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

移動の話

シャトルバスなどの話

f:id:komajou:20200211105704j:plain
シャトルバス行列

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

僕はNYNYに滞在していたので、お隣のMGMグランドからバスに乗って毎日ベネチアンに向かっていました。
MGMグランドベネチアンは徒歩だと50分とのことで、まぁバスのほうが早いっちゃ早い。おそらく。バスの所要時間は20分程度かな。
しかし問題がひとつあり、NYNYからベネチアンのバス乗り場がまた遠い遠い…
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の話

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

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

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

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

ご飯の話

f:id:komajou:20200211105757j:plain
ヘルシーでおいしかった朝ごはん
メチャクチャ悪評ばっかり聞いてましたが概ね普通においしかったです。
ランチボックスは取りませんでした。ランチボックスは評判悪かった。
朝昼夜、できるだけお金を使わないように会場で食べてました。

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

f:id:komajou:20200211110419j:plain
ごはん会場は死ぬほどでかい

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

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

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

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

遊びの話

やったこと

f:id:komajou:20200211105638j:plain
オーのシアター。上演前。

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

日用品の話

f:id:komajou:20200211105911j:plain
薬局の飲み物売り場(特に意味はない

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

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

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

あってほしかったもの

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

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

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

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

お土産の話

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

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

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

カジノの話

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


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

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