2018年2月25日日曜日

湘南パンまつり 2018

辻堂海浜公園で開催された湘南パンまつりに行ってきた。
思ったより家族連れが多く、店によっては凄い並んでいてた。




出店した店舗は東京から小田原までで、いくつか見覚えがある店もあった。




取り敢えず、自分の御飯とおやつのパンを買って帰ることに。
昨日より寒かったし。

パン屋だけという、面白そうなイベントだったのだが
今日はラーメンの気分だよな・・・

2018年2月24日土曜日

ついに江ノ島まで行けた

今日は昼御飯の縛りもなかったし、いつもより遠目に行くことに。
やっぱり、まだ茅ヶ崎で工事が終わってない区間があったが、内陸側に廻れば行けなくはない感じだった。
わりと風も弱かったし、いつの間にか昔行ったことがある景色が見えてきてた。

まだ冬にも関わらず、江ノ島は観光客で賑わっていてた。
とは言っても夏に比べると少ない感じもする。このぐらいが丁度良いかも。

f/5 1/1000 32mm ISO100


せっかくなので、橋を渡って島まで行ってみたかったが
工事中でだいぶ狭くなっていた。
無理すれば行けなくもないが、そこまでして行くつもりにはなれなかった。
まだいつでも来れるし。



f/11 1/200 41mm ISO100

家について、走った距離を調べてみたら
片道で約23kmだった。風がなくて休まずに行けば2時間半までは掛からないかと。

2年前に設定した目標に達成できて、帰りは満足した気分だった。
あと、体力が付いたお陰かも知れないが昨年の手前まで行けた時に比べると疲れが少なかった。

この調子で、今度は鎌倉まで行けると良いかも。
あと、流石にこの距離になると午前中に往復は無理そう。
お弁当も持参しないとダメか。

2018年2月12日月曜日

黒南風(くろはえ)の海 加藤清正「文禄・慶長の役」異聞

連休の間、前から読もうと思っていた加藤清正の本をさがしたところ
この本を見つけた。


黒南風(くろはえ)の海 加藤清正「文禄・慶長の役」異聞(amazon)

題名通り、「文禄・慶長の役」なので、朝鮮出兵前後の話はあまりないし
しかも主人公は別の人だったので、探していた加藤清正の話とが違っていた。

でも、久しぶりに面白い歴史小説を読んだ気がする。
結構ボリュームがあったので、連休明けもしばらく観ることになるのかな〜と思ったら
たった2日で読み終わってしまった。

何よりも戦国武将の話は好きだったので、日本側の登場人物にも馴染みがあったし
子供の頃、歴史授業で学んでいた内容がほぼそのまま語られていたので、読みながら懐かしい感じもしていた。

ストーリも面白いが、何よりも歴史的事実をここまで調べたことが驚きだった。
私が観る感じ、日韓どちらも寄せずに公平な観点から話を進めようとしているところで
韓国人が観ても面白いのではないかな。と思う。

今度、伊東潤さんの他の作品も観たいと思う。

※ちなみに気になってブログを観たら、昨年小田原にいらっしゃってたみたい。見たかったな・・・
http://jito54.blog13.fc2.com/

lambda + PhantomJS(webdriverIO)でamazon.co.jpをスクレイピング

概要


子ども用でfireタブレットを買ってあげたのは良いけど、いくら注意してもやりすぎてしまう。
あと何かしら言い訳・誤魔化ししようとしているところがムカつくようになった。

調べたところ、amazon.co.jpに購入したfireタブレットを登録するとwebから使用状況が確認できることが分かった。
ただし、毎回確認して子どもに注意するのも面倒なので
定期的にスクレイピングして、家族のLINEグループに通知する仕組みを作ってみた。




要件


・サーバーまで運用したくないことで、lambda限定で実装
・バージョン管理はgithub + serverlessフレームワーク使用
・結果をLINEグループへ通知する。そのために事前に作った通知用のbotアカウントをグループに追加する必要があった。
・fireタブレットは2台。どちらか使用時間が3時間超えたら通知を開始、以後はどちらかが1時間超えたら通知
・1回目は前日の使用時間を表示
・amazon.co.jpへのスクレイピング11:00〜21:00まで1時間1回行う
・勉強など使用しても問題ない履歴まで集計されてしまうので、明細まで表示されるようにする
・webサイトの明細までは表示しない。(息子が見たエロサイトまで表示されてしまうので)


構成図とフロー





課題と解決まで


1. amazon.co.jpサイトのスクレイピングが難しかった。

・始めはcheerio-httpcliで試してみたが、時間を置いて動的に表示されるcssセレクタがあった為、waitを掛けれるheadlessブラウザではないとダメだった。
・lambdaでできる候補としてchromelessとphantomJSに絞った。
・chromelessの方が実装的に楽だが、原因不明のsocketタイムアウトになったため使えなかった。あと、もう少し上手いやりかたがあるかも知れないが、公式に乗っているremote実装だとlambdaを2つに分けて制御部のlambdaからchromeless本体lambdaを呼ぶような大掛かりになりそうなのが嫌だった。
・phantomjsをlambdaで動かせる為にはphantomjs-prebuiltというパッケージが必要だった。幸いサンプルがあったので使わせてもらった。

Node.jsでウェブスクレイピングする色々な方法

ブラウザの自動操作で手軽さを追求したらAWS LambdaとPhantomJSの組み合わせにたどり着いた


2. デプロイしてもphantomjsが含まれない。

phantomjs-prebuiltをlambdaで動かせるためにはphantomjs-prebuiltのinstall.jsを実行して、そのバイナリファイルを含ませる必要があった。ちなみに英語だがマニュアルにもちゃんと乗っていたが見落としたのが痛かった。
install.jsを実行してない場合は既に開発環境でパス指定されているphantomjsのバイナリが実行されることで正常に動くように見えてるが、lambdaにデプロイするとバイナリなしのが実行される為、同然動かない。あと、デプロイしたs3上のzipファイルのサイズもバイナリあり・なしでだいぶ違っていた。

3. phantomJSの作りがいまいち理解できない。webdriverIOを挟むことに。

ネットで調べると、例は乗っていたがchromelessみたいに直感的ではない。webdriverIOを挟むことで、だいぶ似たような作りができた。もしかしたらwebdriverIOを排除することでオーバヘットを減らすことができるかも知れないが、今のままで満足。

AWS Lambda (Node.js 4.3) で PhantomJS + WebdriverIO を使用してヘッドレスWebブラウザを操作する

4. amazon.co.jpではphantomJSブラウザでログインができない。

chromelessだとamazon.co.jpでログイン→スクレイピングができたが、phantomJSだとwebdriverIOでほぼ同じ書き方ができるにも関わらず、ログイン画面で止まって、うまくできない。
試しで止まった時点の画像を取ってみたところ、見慣れないブラウザの画面だった。
もしかしたらamazon.co.jpでは変なブラウザだと弾く仕組みになっているかも?と思い、userAgentをfirefox(Mac)に設定したら上手く進めるようになった。
だが、場所によってはdomの認識ができず、cssセレクタでのwaitForExistなどが使えなかったりするので
格好悪いがwaitで数秒、描画を待つようにした。

5. botアカウントが入っているLINEグループIDを特定する必要があった。

LINEのbotにメッセージを送る際にはbotのLINE IDが必要で、同じ流れでグループになるとLINE GROUP IDが必要。ただし、これは普通に公開してくれるものではなく、特定する為には
botがグループに招待・脱退する際に返されるレスポンスに含まれているIDを見る必要があった。
これもlamdaで作ったが、面倒だった。そもそも、curlでもできたかも。




6. DynamoDB処理が非同期

仕様だから仕方ないけどログイン情報など、必要な情報を取得する為DynamoDBからのget/put処理を全部callbackで実装した。格好悪いけど、このまま放置。余裕がある時にpromisなどでキレイにしたい。

7. DynamoDBではNumber型でもstringに扱うべきらしい

カラム定義をNumberにしたのにも関わらず、数値をputすると下記のエラーになってしまう。

message: 'Expected params.Item[\'usage_minute\'].N to be a string'
 code: 'InvalidParameterType'

しかたなく、stringにcastしている。なかなか納得できない仕様。

DynamoDBでNumber型をputItemするときのエラー

8. lambdaの環境変数へ書き込みができない

認証情報などをlambda実行する度にDBから取得するのも非効率だったので、環境変数を利用することに。
ただし、githubにpushするserverless.ymlに残す訳にもいかないので、初回だけDBから取得して→環境変数へ書き込みをしようとしたが、nodejsからlambdaの環境変数へ書き込みができない。仕様ならしかたないけど、やり方が悪かったかも。

9. lambdaの日付がUTCだった。

nodejsで日付を取得すると+9:00のUTCになってしまう。環境変数にタイムゾーンを設定しないとダメらしい。

TZ: 'Asia/Tokyo'

東京リージョンって意味があるのか?

AWS Lambdaのタイムゾーン変更

10. ReadCapacityUnitsLimit / WriteCapacityUnitsLimitの意味がわからない。

取り敢えず正常に動くようにはなったけど、cloudwatchから見慣れない警告が出るようになった。
調べたところ、キャパシティを計測するためのデータが不足しているせいで出ているぽい?
そもそも、そんなに頻繁にDBアクセスをする訳でもないので、測定データがないのは同然?
という自分なりの推測した。

アラームの設定の「欠落データの処理方法」に何も指定されてなかったので「適正」に変えたら
取り敢えず、警告にはなれなくなった。これで良いのかは分からないが。



結果イメージ




今後の課題

・やる気になったら、callbackにした非同期実装をpromis化する。


その他

・amazon.co.jpでは「コンテンツと端末の管理」情報取得のAPIを提供してほしい。
・LINEは簡単にグループIDを特定できる方法を提供してほしい。
・dynamoDBからテーブル定義をjsonに抽出するコマンド。IAMポリシにあるdynamoDBのDescribeTable権限を付ける必要がある。

table_name=users
aws dynamodb describe-table --table-name ${table_name} > ${table_name}.json


既存のDynamoDBテーブルからテーブル定義を作成する

・fireタブレットのweb使用明細はslikブラウザを開いた時しか取れないらしい。
取り敢えず使用時間だけ知りたいだけだったので問題ないが、あまりにも子どもの利用時間が改善されなかったら家のルータからアクセス履歴を収集して公開する仕組みも考えてみる。


github

https://github.com/mwookpark/amazonJpConsole

2018年2月9日金曜日

パスポート更新

今回はパスポートの更新になるか・帰化になるか迷いもあったが
結局パスポートを更新することになった。

今のところ、それそれのメリットを比べると

韓国籍:会社から郷帰りの航空券代が出る
日本籍:選挙権が付与される

だけと、別に選挙は興味ないし、逆に年5万ぐらい節約できるのは大きい。
会社の方針が変わらない限り・またはこれ以上韓国に行くことがなくなったら
変わるのかな。

ということで、今回は初めて横浜の韓国領事館に行ってきた。
前日電話でも確認したが、朝一行ったら空いていてた。

パスポート申請に写真が必要なくなったのは良かった。
正確には運転免許みたいに領事館で撮ることができるようになってた。
あと、途中で来た人が公認認証書を申請するところをみて、ついでに申請した。

前から韓国の公認認証書がないことで、いくつか認証ができなかったのができるようになるかなーと思いきや
どうやら申請した際に書いたパスワードと違うパスワードになっているらしく、全然使えなかった・・・

まあ、本来の目的は達成したし、久しぶりに横浜観光もできたので良しとしようか。



2018年2月4日日曜日

alexaハンズオン 2019/2/3

本来は1月に行こうとしていたが、既に締め切りだったので2月のを申し込んでいた。 
あと、一緒に申し込んでいた会社の同僚は別の用事ができて一人で行くことに。 

たまに仕事の打ち合わせなどでamazon.co.jpさん(買い物の方)の目黒オフィスはたまに行ったので 大丈夫かと思いきや、一人で行ったのは初めてだったせいか、少し道を迷ってた。 


会の雰囲気など
会場は思ったより広いところだった。各席にはecho dotが置いていて、まだ時間にはなってないが できる人は早めに設定するように言われた。

最初は周りの人たちと簡単な挨拶。一人は金融関係システムのインフラ担当で、もう一人はEC関係者だった。 
聞いてみたらECシステムのパッケージカスタマイズ・販売をやっているらしい。ECxxxxと言っていた。
なんとなく分かりそうな気がした。この業界も狭いな・・・。 

ちなみに既にskillを作ったことがある人はハンズオンをやらずにハッカソンをやるように別の場所へ案内された。 


ハマったこと
手順も親切に書いているし、既に家のamazon echoの設定をやっているので echo dotの設定はササッと済ませよう。とあまく考えていたが、あまかった・・・ 

・一斉に初期設定をするし、色んなechoが起動していることでwifiがカオス状態に。
それでかecho dotにはsidがシールで貼られていたが、なかなかwifi一覧から見つからない。
結局3回ぐらいやり直していた。 

・ハンズオン手順通りにテストまで終えて、skill登録をしようとしたらそもそもdevスキルが表示されない。 近くのスタッフさんに聞いたところ、amazon.co.jpとalexa.amazon.co.jp、developer.amazon.comのメール及びパスワードが一致しないとダメらしい。
登録したメールは同じだったけど、よくみたらdeveloper方だけパスワードが違っていた。 
結局developerのアカウントを作り直すことに。 


感想
ハンズオンはガイド見て自分でやるだけなので、ワザワザ目黒まで行くことはなかったと思う。 
この会の良いところとしては 
1. echoに興味があるけど、購入するべきかを迷っている開発者が実機で試せる。 
2. ネットにもあるかも知れないが、alexa <-> echo / skillの仕組み(特にintentとslot)を直接教えてもらう。 
<->私としては2が大きいかったかも。 






最後に
帰りに扉の隣をみたらwifiのsidとパスワードが書かれていてた。
それも知らずハンズオンの間、自分の携帯からデザリングして頑張ってた。3時間で250MBは使ったもよう。自分だけではなく、隣の人にもwifiではなくデザリングを使わせることになって悪い気がした。

Amazon echoの招待メールが来た。しばらく使ってみて。

申し込み〜購入
11/9に申し込んでいたAmazon echoの招待メールが1/15に来た。
最初、「数週間」と書かれていたので、遅くても2-3週間掛かるのかなーと思ったら
2ヶ月以上掛かってた。確かに10週まではなってないけど・・・



今まで周りを見るとdotを申し込んでいいた人たちは割と早く届いたような気がする。
普通のechoだと遅くなるものなのかな。

早速注文することに。色は黒系のチャコールで良いかと思ったが
嫁はヘザーグレーと、言っているものなので、決まり。
まあ、黒だと目立つよな・・・

使ってみた感想
・dotのACアダプタはusbからも電源供給できるが、echoはできない。usb専用アダプタがあるので使えないのは不便な気もするが、おそらくスピーカが電気を食っている?かとも思う。
・今までせいせい携帯で音楽聞いただけなので、比較の対象にならないかもしれないけど音質が良い。
echo一つでリビングがカバーできる。dotは会社で少しみただけなのでよく分からないが、音楽メインで使うのであればechoで良かったと思う。
・リビングのインテリアを考えて棚の中に入れているが、棚の上段のせいか、喋る位置によっては上手く認識しない場合がある。
・ネットに色々口コミがあるけど、alexaは検索的には使いにくい。普通にwikiから検索してもいいのに、やってくれる時とくれない時がある。
・やっぱり音楽再生の比率が高い。ただし妻と子どもも使っているので、それなりに有効活用されているかも。
・アルファベット名になっているマイプレイリストの再生が難しい。というかライブラリ > マイプレイリスト > プレイリスト名で言うのがくどいし、面倒くさい。
・意外とbluetoothイヤフォンと相性が良い。リビングで音楽またはニュースを掛けて2階へ移動しながらも普通に聞ける。
家事で忙しい時は良いかも。

skillについて
・ヤフーニュース、JR東日本、ラジコを登録している。便利だが、skillを起動する際に「〜開いて」というのが
どうも馴れないというかPC的で違和感がある。
・skillを作ってみたいというか、echoを利用して通知したい、ことはあるが
取り敢えず、今あるechoの機能で遊んだら&lambdaでの作りたいものが落ち着いたらやろう。

Amazon Music Unlimited
echoプランだと安く聞けるので申し込んだ。
・確かにプライム会員の時より曲数は多くなっている。ただし、自分が好きな曲が全部あるかと言うと、そうでもない。
個人的には90年台曲をもう少し豊富にしてほしい。でもライセンスとか厳しいだろうな・・・
・バグかも知れないがandroid携帯にインストールしたAmazon MusicアプリからはUnlimitedの曲が聞けない。まだ無料期間中なのに・・・