oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

NatureRemoの温度、湿度、照度をAWSでグラフ化する

いろんな人がいろんなもので既に可視化するのをやっている大人気な題材ですが、僕も試しにやってみました。 とりあえずiPhoneでこんな感じで見える。

https://github.com/oranie/natureremo-create-graph/raw/master/NatureRemoGraph.png

実際のコードはこれ。

github.com

全体のアーキテクチャ図は https://github.com/oranie/natureremo-create-graph/blob/master/architecture.png https://github.com/oranie/natureremo-create-graph/raw/master/architecture.png

多少自分の仕事の検証も兼ねているため少し冗長な構成になっているが解説すると

  • Lambdaがスケジュール実行されNatureRemo APIを叩いて情報を取得
  • 取得した情報をDynamoDBに保存
  • 保存した情報をGlueで定期的にS3にparquet変換を行ってExport
  • Exportされた情報を元にAthenaでクエリによる集計が出来るようにtableを作成
  • 集計クエリを元にQuickSightで可視化

となる。QuickSightはiPhoneアプリもあるので、これで自宅の状況がグラフ化されモバイルアプリで自分や家族だけ見ることが出来るようになった。次回のブログではgithubに上がっていない部分の手順やもう少し細かい解説をしたいと思っている。また情報が整備出来たらaws-samplesでももっとわかりやすいハンズオンとして公開をしたいと考えているのでもし実際に試してみたい人は少しお待ち下さい。

他の事例同様サーバレス構成で完結しているので運用管理などはかなり楽が出来る事と、ある程度のコンポーネントが既にあることでここから別のトリガー処理(例えば湿度が一定以下ならLINE通知をするとか)なども比較的書きやすかったりQuickSightで予測をさせるなども出来るため色々個人の事情に応じてカスタマイズなどもしやすいと思う。

もちろん、Lamba -> S3 -> QuickSightというような流れで最小限の処理に書き換える事でよりコンパクトなアーキテクチャに出来るのでその辺も色々試しやすいと思う。

Middlewares Deep Talksというイベントをやりました

oranie.hatenablog.com というブログを書いてからはや半年ですが予定どおり実施していました。おかげさまで大盛況でした。

発表頂いたみなさまの資料などは以下の通りです。本当にまとめが遅くなってしまってすみませんでした・・・。せっかく旬の資料だったのが少し時間経ってまとめになってしまいすみません。

speakerdeck.com

www.slideshare.net

noti.st

www.scylladb.com

www.slideshare.net

speakerdeck.com

で、こんな雑な報告をしておきながらアレですが、来年改めて第二回やれれば良いなーというのと、今度はDBももちろんですがWebサーバとか全然違う方面で話したいという人を探しつつ自分も何か検証したりして話さないと、と思っております。

改めて登壇して頂いた皆様、及び来場頂いた皆様本当にありがとうございました。

Middlewares Deep Talksというイベントを5/23 AWS LOFTでやります

題名そのままですが、Middlewares Deep Talksというイベントをやります。そもそもどんなイベントなのか?というのは公式申込みサイトの

https://middlewaresdeeptalkstokyo20190.splashthat.com/

を見て頂ければ(そして参加して頂ければ)という感じなのですが、少し補足をするとMySQL(@yoku0825さん)、PostgreSQL(@masahiko_sawadaさん)、Elasticsearch(@johtaniさん)、Cassandra(Yahoo!星井さん)、Hadoop/Spark(@moomindaniさん)という各プロダクトのエキスパートの方がスピーカーとして登壇して頂けることになりました。個人的にも今この人に喋ってもらえると嬉しいなーという人に来て頂けたので大変嬉しく思っています。

Deep Talksという銘を打っていますがコアコンポーネントソースコード解説とかに特化して喋ってもらう、とかではなくスピーカーの方がこれは是非喋りたい!という内容を喋って貰えれば大丈夫というある種気楽なイベントです。

自分はミドルウェア関連の運用に携わっていた事が多く、Webサーバ勉強会というのを自分でやったり、MySQL CasualやCassandra関連の勉強会とかに参加したりなどをしていたのですが最近そういうイベントに参加出来ていない事と単独プロダクトよりは一緒に色々なミドルウェアの話が聞けた方が楽しいかなと思って、ちょうどAWS LOFTがOPENしたこともあり今回こういうイベントを企画しました。同じように実際にミドルウェアを利用して開発をしている、運用をしている人は多くいらっしゃると思うので、是非参加した方にも有益なイベントになれば嬉しいです。

今回はかなりデータストアに寄っていますが、もし次回以降も開催出来ればもっと色んなミドルウェアのエキスパート、開発者、ユーザーの方に登壇して貰えればと考えています。なので是非次回あったらこういうプロダクトのことで喋りたい!という方は是非連絡下さい。

みなさま、是非お越し下さい!

海外渡航の際にSIMを色々買ったのでまとめ

今の仕事になってからプライベートも含めアメリカに5回くらいとアジアに4回くらい行ってモバイル通信どうするかについて色々と覚えたのでまとめておく。

 

モバイルルーターをレンタルか、SIMを買うか

まず海外でモバイル通信する手段としてはモバイルルーターをレンタルするかSIMカードを買うかに分かれる。で、僕はモバイルルータを初めのうち借りていたけど、モバイルルータ自体の電池の持ちやレンタル手続きとか返却とか1週間も借りるとそこそこ良い値段するとか紛失や故障を気にするのが面倒になり今のiPhoneSIMフリーモデルな事もあって現地に対応したSIMカードを購入するスタイルになった。

現地で買うか日本で買うか

SIMカードを買う場合現地で買うか日本で買っておくかの二種類に分かれるが、アジア圏の大都市は現地でSIMカードを買うのが圧倒的に安いし、香港とかだとツーリスト用に無料SIMカードとかもある上に空港で買えるパターンが多いので、下調べして現地調達が1番楽だった。アクティベーションもその場で即やってくれた。

アメリカに関しては、現地で買っても日本で買ってもそんなに値段が変わらないのとハワイだと調べたら空港でそもそも売ってなかった事もあって日本で購入しておくパターンを取った。実際ハワイに行ったら安定のBestBuyの自動販売機があってSIMも売っていたけど値段が高かったので日本で買って正解だった。で、事前に買う場合に向こうのキャリアのプリペイド方式を買うか、キャリアの普通のプランを自分で契約する方式の2種類があって、プリペイドだと有効期間が決まっているので単発かつ2週間程度なら前者で充分、長期間だったり何度も行くので一回買ったらそのまま使いたいとか電話番号変わるのも面倒な場合は後者を買うと良いと思う。

普通の形式はこんなやつ

 

普通の形式を買ってもT-Mobileだとその月使って次の月は利用しないとかも可能だが、未使用期間が一定期間過ぎるとSIMカードが無効化されるらしい。その為月3$のプランに変更しておくとずっと有効にした状態を維持できて、必要に時にプランを変更すれば欲しい分だけの通信をする事が出来る。

但し、プランの変更には2週間くらいの設定ラグがありすぐに反映させたければ恐ろしい早口の電話ガイダンスに挑む必要がある。僕は今回この電話で挫折して旅行用に新規にもう一枚買う羽目になったので、スケジュールが分かっているときは計画的にプラン変更する必要が出てくる。あと前はツーリスト向けっぽい安いプランがあったけど無くなってしまったので、年数回程度の旅行とかだとプリペイドと比べてあまりコストメリットは無くなってしまった気がする。

SIMカードアクティベーションは事前にやるのであればSIMカードに付いてるアクティベーション手順に従えば簡単に出来た。基本はWEBサイトに接続してフォームに簡単な情報を入力したらもう終わり。ただ現地でやるとなるとそもそもネットに繋げないと出来ないので面倒だとは思う。購入した店でアクティベーションもしてくれるパターンもあるのでまあその辺は出来る人はそれでやればいい。買ったSIMによっては渡航の1~2日前までには日本でアクティベーションして問題があったら連絡して下さいというパターンがあるので、渡航直前に購入からやらない方がトラブル回避になると思う。

設定とか

SIMカードのAPNの設定だがT-Mobileだとアクティベーション済みであればiPhoneに挿せば即使えるんだけど、h2oのSIMはアクティベーション済みでも現地で一度wifiなどに繋いでプロファイルを落とす必要があった。更に落とすためのサイトが不具合なのかフォームに情報入れても全く動かず、結局キャリアプロファイルを落とせるサイトを探してそこから直接ダウンロードする事でなんとか通信出来たけどハワイの空港とかは公共のwifiとかも無かったので非常に面倒だった。なので面倒な事は日本で済ませて現地に着いたら即ネットを使いたいとかだとT-MobileSIMカードを事前に買ってアクティベーションしておくが1番ラクチンだと思う。この辺は機種とかにもよるので分からん。

あとiOSの仕様でプロファイルが既にインストール済みだと後から入れたSIMのプロファイルが反映されないので帰国してから元のキャリアのSIMを挿しても通信出来ないとかがあるので注意が必要。その場合は既に入っているプロファイルを削除してからSIMカードを差し直したら大丈夫。

プランはどうするか

どれくらいの通信するプランにするかだけど現地でGoogleマップ見たりuber呼んだり暇な時にチラチラネットしたり程度だと4日で数百MB程度しか使わなかった。ホテルにwifiあるかどうかでこの辺は変わると思うので、購入する前に普段どれくらい通信するかを計測しておくといいと思う。まあ1000円くらい追加で1〜2GBくらい多く使えるプランが用意されていると思うから不安なら多めにしてしまって心配を無くす方が楽だとは思う。通信状況についてはシアトル、ラスベガス、ハワイのオアフ島だとT-Mobileは全て快適だった。普段はIIJmioを使っているんだけど、専用アプリで毎日の通信量も見れるので、同じような事ができれば参考になると思う。あとはiPhoneとかの機能でどれくらい通信したかの積算値を見るか。

結論

そんな訳でアメリカ行くならプリペイド方式を日本で買ってアクティベーションを済ませておくのが楽なんでは無いでしょうか。終わったSIMは捨てれば良い。なんでこの辺買うのがとりあえず無難だと思う。ただこの方式だと国際電話が出来ないのでそのまま日本の携帯をローミングしている人との通話なども出来ないから、まあskypeなりLINEなりDiscordなりを使えば良いのでは無いでしょうか。

 

あと忘れがちだけど、入れ替えたSIMを入れるケースとSIMを外すためのピンが無くて詰む人も多いので、必ずこういうのを買っておくこと。

あと、Ready SIMとか使った事無かったのは単純にプランの通信量が値段の割に少なかったので買ったことがなかったけど、今の利用量考えたら全然アリな気もする。

AWSでVPC内にしかないリソースに対してローカルテストとかでサクッとアクセスしたい時

※追記:HAProxy構築した流れで色々試していたので必要だと思いこんでいましたが、HAProxy要らないですねこれ。

ちゃんと

www.kmc.gr.jp

とかを読んでもいないで理解もしていないのにググってコピペしてとりあえず出来たーとやるとこういう恥をかきますね。


ローカルマシンのMacからコード走らせたらエラー出まくってなんでだ・・・ってハマってから2日くらい色々試行錯誤していたメモ。

AWSVPC内にしかリソースが無くNW的にグローバルからのアクセスが直接出来ない物に対してローカルのMacからどうやってアクセスするか、という流れ。

おおまかな流れとしてはめんどいが

  1. アクセスしたいリソースにアクセス出来るEC2インスタンスを起動 2. HAProxyを設定する
  2. ローカルマシン側でHAProxyが起動しているインスタンスにSocks Proxyとしてsshで接続する
  3. 開発しているIDEに接続設定を入れる(今回はIntelliJ + Java

という流れ。1は割愛。

HAProxy設定

とりあえず今回は用途的にTCP modeで設定。内容は雑にこんな感じ。

defaults
    mode                    tcp
    log                     global
    option                  tcplog
    option                  dontlognull
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000


frontend  main *:80

    default_backend             backendApp

backend backendApp
    balance     roundrobin
    server  backendApp local.backendApp.example.com:8111 check

ローカルマシン側でHAProxyが起動しているインスタンスにローカルにSocks Proxyとしてsshで接続する

とりあえずこんな感じでSSHで接続する。

ssh -i .ssh/haproxy.pem -f -N -D localhost:1080 ec2-user@HAProxyマシンのグローバルIP

接続が完了したらローカルの1080ポートに接続したらHAProxyに接続出来るのでJavaコマンドラインでやるなら

java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080 TestApp

こんな感じで起動したら無事HAProxy経由で接続が出来る。で、これをIntelliJで接続するにはRun -> Edit Configuration -> VM Optionに同じオプションを設定してあげればRun実行時も同じ事が出来る。

https://i.gyazo.com/ce8cbad3b6932534385cdc4290f01ee6.png

CircleCIとかでも多分同じ様な問題にあたって設定例を見つけたので多分外部CIサービスでも出来るとは思う。 ただ、IPアドレスのバッティングだけは気をつけてリソースを作成する必要があるとは思う。 gist.github.com

以上。

Cassandraにslow query logがマージされた様なので、どれだけ待望されていたのか勝手に簡単な解説をする。

題名のままです。

ついにCassandraにslow query logがVer 3.10でマージされた様です。

[CASSANDRA-12403] Slow query detecting - ASF JIRA

で、今までなぜこれが無かったのかというのと、どれだけ素晴らしいかというのを簡単に解説したいと思います。英語の部分はすごいニュアンスだけで書いていたり正確に仕様や歴史や経緯を把握している訳では無いのであくまでも傍から見ていてCassandraを運用した思い出を持っているだけの人が書いているという認識でお願いします。間違っていたらコメントで指摘下さい。もしくはもっとちゃんとした解説ブログ書いて頂ければ幸いです。

まずslow query log自体の要望は普通にありました。まあデータストア運用する人間からしても、実際にクエリを発行するアプリを書く人からしても当然ですよね。

[CASSANDRA-1305] Slow query log - ASF JIRA

ただこの時はパフォーマンスの問題やtrace logを実装するので、大半の問題は解決出来るのでは?という議論で完結している模様です。

[CASSANDRA-1123] Allow tracing query details - ASF JIRA

で、じゃあtrace logがslow query logの代替手段になるかと言うと、これはSQLで言うとEXPLAINに相当する機能となります。その為、「このクエリに問題がある」と分かっている時はCassandraのどのステージでどれだけ遅いのかが分かるのですが、「なんらかのパフォーマンス障害があった場合にどのクエリが問題だったか」という特定には不向きです。

で、月日は流れまたもJIRAに要望が上がっています。僕もこの辺の時期に運用に携わっていたので、このチケットは良く見た記憶があります。やっぱ欲しいですよね。

[CASSANDRA-6226] Slow query log - ASF JIRA

で、この時のDataStax co-founder and project chair for Apache Cassandra.であるJonathan Ellis氏の回答は凄くわかりやすく

「Tracing works fine at 0.1% or similar.(traceで同じような事出来るよ)」 注:trace logはsamplingでクエリの内何%かを拾い結果を出力する為、全てのクエリが等しく平均的に投げられていたら確かに彼の言うことも分かる。ただ、実際の運用では100万件のクエリの内数件のクエリのせいで著しくパフォーマンスに影響を及ぼしていた場合にサンプリングだと漏れてしまう懸念を僕も持っていたし、おそらくこのリクエストを書いた人も同じだったでしょう。

で、そうこうしているとクライアント側で使うJavaのdriver側でslow query logの機能が入った模様です。

https://datastax-oss.atlassian.net/browse/JAVA-646

とりあえずこれで安心ですね(ニッコリ ただ、このドライバを使わないと結局自分でslow query log相当を実装必要があるのと、今取りたい!みたいになった時にアプリ側全部で設定を動的にONに出来るようにしないといけない気がします。この辺は使った事が無いので想像で書いています。あとはNWの影響を受けた場合に「クエリが悪いのかそれとも他のレイヤの問題でレスポンスが遅くなったのか」も切り分けがやっぱり微妙になるので、Cassandraノード側でslow query logはやっぱり欲しいですよね。

で、冒頭に書いたJIRAに行き着く訳です。

JIRAの中を見てみるとShogo Hoshiiさんという方がコミットしており、おそらく

www.db-tech-showcase.com

にて発表をされたヤフー株式会社の星井 祥吾さんであると思います(間違っていたらほんとすみません。)非常にタフなやりとりがCommentsからも垣間見れます。運用していた時期にたまたまカンファレンスで発表する機会を貰えた時に「slow query log欲しいー」ってだけ言って結局正式なrequestやpatchも書かなかった僕とは大違いですね。

最後に念のため書いておくと、このブログを書くためにググってみたらDSEではVer 4.5にてslow query logの機能は実装されていた模様です。

docs.datastax.com

ただし、Cassandra本体に無い機能だという事からおそらくDSE内でなんらかのコンポーネントを組み合わせて実現したのではと推測しています。もしくは独自パッチでしょうか。

という訳で実際に読み返すと推測とかニュアンスばっかりで解説と言えるかどうか微妙なエントリですが、この機能は自分も運用時に待望していた機能でもありましたので、今Cassandraを運用している方はリリースされたらアップデートをする事により、より素晴らしいCassandra運用ライフを送れるのではないでしょうか。

全然経緯も仕様も違うぞ!!デマ流すんじゃねぇ!!!!という場合は是非ちゃんとした解説を書いて頂き僕に教えて頂ければ幸いです・・・。

Splatoonをより楽しくプレイする為に買ったもの

前にブログ書いたのが半年くらい前なのに全く技術情報では無いですが一応仕事はちゃんとしていました。きっと。

2015年の俺ベスト・バイアイテムとして名高いSplatoonですが、2016年ベスト・バイの候補にもなっているレベルで今も非常に楽しくプレイしています。ちなみにウデマエは半年くらいやってSなので人並みレベルより多分下手な方だと思う・・・。きっと皆様も楽しくプレイし、、時にはパッドを投げ、時にはパッドを割り、時には負け試合で味方の戦犯探しに勤しんでいる方もいるかと思います。そんな僕ですがSplatoonをやるためにWii Uを買いその後もちょこちょこ色んな物を買いましたので備忘録とナレッジの共有をさせて頂きます。

ElgatoGame Capture HD60

Game Capture HD60 | elgato.com

何をするものかと言うとWii UHDMI出力をキャプチャしPCに動画として保存出来るデバイスです。要はキャプチャボード。これの良い所としては

  • デバイス側でエンコードするのでPCの負担が少ない

  • HDMI信号がパススルーでTVに出力されるので(少なくとも僕レベルでは)遅延が無い。

  • Macにも管理アプリが対応していてなおかつYoutube、Twitchなどにはボタン一発で投稿出来る機能とRTMPでの配信にも対応

しています。但しRTMPビットレートが最低でも500kbpsとなっておりニコ生は直接対応出来ず。残念。あとキャプチャした動画の簡単な編集も可能なので、これで自分のプレイ動画を見て「うわ・・・なんでこいつこんな所で突っ込んでいるんだろ・・・」「いや・・・そこ塗れよ・・・」などを冷静に見る事が出来ます。もちろんたまたま上手く行った試合の動画を見て「俺やっぱ上手いじゃん!」って悦に浸る事も可能です。 これを買って自分のプレイ見るようになったからちょっとは上達した気もします。あとは単純にタッグマッチとかプラベやった時の動画を共有出来るのでおもしろ珍プレーを残す事も出来ますね。

あと、管理アプリを起動しておくとドライブレコーダーの様に自動的に録画をしておき、あとで「いい試合だったわー動画にしよう!」という時にキャプチャしたい場面を選択して保存する事が可能なので毎回録画設定してからプレイする、みたいなのをしなくても良いところが便利です。

注意点としては2015年MBPを使っていますが、1080p フルHDを60fpsでキャプチャし更に管理アプリでプレビューした上でストリーミングするのはさすがにきつくCPUがパツるので、今は720p 60fpsくらいでプレビューしない状態でキャプチャしています。そうすると4コアのCPU使用率がだいたい30%くらいで他の作業しながらでも快適でした。 あとIkaLogが動きません…。

だいたいこんな感じで個人で見る分には十分過ぎるくらい綺麗。

youtu.be

belkin MixIt UPシリーズ マルチイヤホンスプリッター ロックスター

何をするものかというと、複数の音声入力をmixして複数のデバイスに出力出来るものです。各ポートは自動で音声の入力、出力を判断してくれるのでケーブルさすだけでOKというお手軽な製品でした。タッグマッチやプラベをやる時にskypeでボイチャしながらSplatoonをしたいんですが、そうなるとPCの音声を片耳ヘッドホンで聞くことになりゲームの音が若干聞こえづらいんですよね。なので、これで音声をmixすることで1つのヘッドホンでPCからの音声とWii Uの音声を混ぜて聞くことができました。もちろんミキサーを使えば同じ事は出来るんですがこの為にミキサー買うのは高かったのと邪魔になるので躊躇していましたが、これは1000円台後半という事もありお手軽でした。注意点としては各音声入力はそれぞれのデバイス毎に調整をする必要があるのと複数の音声が入ると出力時にそれぞれのボリュームが小さくなるので多少の調整が必要になります。まあ普通に音声ボリューム調整すれば済むレベルです。あとWii Uパッドからの音声出力だと若干ボリュームが小さかったのでTV側の音声をこれに繋げています。

このようにSplatoonを買い、更に快適にプレイするためのデバイス購入にも繋がる事で日本経済にも貢献出来たのでほんと良いゲームですね。最後にシオカライブ2016の動画でお別れです。イカヨロシクー。

www.youtube.com