Nuxt.js + Skyway ( WebRTC ) で簡易ベビーモニタを作った

TL;DR

github.com

やりたかったこと

  • iOSのカメラを使う
  • リアルタイムで送ってほしい
  • 音声も拾いたい

やったこと

  • iOSのカメラを使う
  • 音声も拾いたい

MediaDevices.getUserMedia() - Web API | MDN

を使った

  • リアルタイムで送ってほしい

webrtc.ecl.ntt.com

を使った

公開するまでの流れ

最初はリアルタイムで配信すること & 音声の取得は難しいと思っていたので、 ブラウザで撮影したカメラの画像をサーバに送信する方法 - NaCl非公式ブログ とを参考にして、 Rails 5.2 + Stimulusjsで作っていた。

お世話になっていた FJORD BOOT CAMP(フィヨルドブートキャンプ) のシステムでも似たような実装があったのを記憶していたのでそのコード部分の実装*1*2 も参考にした。(余談だけどこの機能は今は消えちゃってた

ただ取得時間が短かったせいかうまく画像を表示させることができなかったので断念。

上掲のSkywayを試したら思ったよりもすぐ出来、Railsじゃなくても良くなったので Nuxt.js(デザインはbootstrap-vue)を導入。 全公開されちゃうのはちょっとなーと思ったので、合言葉と合致したら閲覧と配信ができるよう vuex-persistedstate を使った。Basic認証っぽいことをしたかったんだけど、SPAモードでそれができるやり方がわからず。なんか良いやり方があったら教えてください。

ホスティング先は zeit.co を使った。 初めてだったけど、now だけでデプロイされるのはすごい。 URLが毎デプロイごとに変わったので、now && now alias を実行している。この辺もこのやり方でいいか気になっている。

感想

当たり前のことだけど、自分たちにとって「便利〜」というものを作るのはとてもいいなぁと思った。

沖縄県獣医師会のホームページが良くなった

kimihito.hatenablog.com

で利用していた 公益社団法人 沖縄県獣医師会 が更新されました。

この変更に追いつかずに

github.com

スクレイピングが壊れてしまっていたので修正しました。

公益社団法人 沖縄県獣医師会 がすごくわかりやすくなっていて良いです。

JSONで出力できるようにしたので、なにかアプリケーションとして一つ作れないかなぁ。

2018年の振り返り

11月30日で今年の仕事を納めたので今年一年を振り返ります。

去年の記事はこれ

健康

  • 去年発症したアナフィラキシーは出ず過ごせた。食後の運動を控えたり、睡眠不足をなるべく回避するようにしたのが良かったと思う。
  • 目が人工レンズになった。視力は1.5になったが、近くの文字が見えづらくなった。
  • 歯がボロボロだった。虫歯がいくつも見つかったり、強く磨きすぎて神経を刺激している状態になった。詰め物で食い止めている感じ。歯茎も汚いとのことだった。歯磨きとフロスの使い方を教えてもらい改善を心がけている。4月ごろに診てもらうつもり。
  • 日が昇る前に起きて徘徊(という名の犬の散歩)をしている。顔なじみの先輩方が増える。

仕事

  • 去年から引き続き、コードタクト さんにお世話になっている。目の手術で1ヶ月休んだり、後述の理由で今月から仕事を休ませてもらったりとだいぶ融通を利かせてくれてありがたい。
  • 一緒のプロジェクトメンバーは自分よりもすごい人たちばかりで、学びがある。プロダクションでDockerが使われていたり、今どきな感じ。
  • スクラム開発っぽい開発の進め方を経験できたのは良かった。
  • 自分がやったと記憶しているのはこんな感じ。基本的にRailsアプリケーション開発に付随する作業が主。
    • Railsのアップデート
      • 5.2.1.1までやった
      • 合わせてActiveStorageに移行
    • Webpacker + Vue.jsを導入
    • bundle-auditをCIで回したり
    • Firebase Cloud Messagingも導入したかな?
  • 過去にテストがなかったときに自分が書いたテストコードが開発スピードの足かせになっている気がする。
  • 開発外のところだと、事業の理解を努める作業が不足していた。
  • Rails以外の業務経験が弱い。フロントエンド力がほしい。
  • 個人開発では小さなプロダクトをいくつか作っては公開まで持って行けずに挫折することが多数。

コミュニティ / OSS活動

  • 仕事関連でRailsのバグを踏んだ。そのうち一つは同僚のおかげでコントリビュートするところまでできた。(デバッグまではやれたけど、プルリクエストを作るのは眺めていただけ)
  • Ha4goをHerokuで動かして https://okinawa.ha4go.net にするところまではやった。 Ha4go自体へのコントリビュートはできていない。
  • コミュニティへの参加はOkinawarbに参加にたまに顔を出すぐらい。しばらくオフラインでのイベント参加はできなさそう。
  • スポンサードはいくつかした。ただ協賛するだけで自身は参加しないということが多かった。去年の反省を含めてそういう行為をしていたんだけども、技術系カンファレンスのスポンサーシップへの考え方 | F's Garageの下記の引用部分を見て、「イベントに共感したので協賛する」という意識をもっと伝えないとと思った。

    せっかく準備いただいてるわけですから、その機会は十分に活かさせてもらいたいですし、それを望んでイベント設計をされているわけで、しっかり話に乗って賑わいを出すのに貢献するという考え方でしょうかね。テンション低く、お金だけ出して終わるのも気分のよくない印象を与えてしまいます

  • 技術コミュニティではなくて、ママさんコミュニティや沖縄の教育関係のコミュニティには足を運んだり良くしていたかも。

    • ただどれも現時点ではフェードアウトしている。

生活

  • 子供が生まれた。今年の残り一ヶ月は、疑似育児休業(たかが一ヶ月 && 別に育児休業給付があるわけでもないので「疑似」)と称して育児に奮闘してみるつもり。
  • 子供が予定より早く産まれたりで10月、11月はずっと病院通いや手続きで市役所に行ったりだった。こども医療助成はすごい。
  • 家庭の振り返りは去年から引き続き継続中。
  • カレンダー振り分け術 を実践している。ゲームしてるみたいで楽しい。
  • スプラトゥーンがSになった。

2017年時点の抱負の振り返り

去年書いたもの が今年どうだったかという話

  • 謙虚に仕事をする

    • 謙虚というか、静観という感じの仕事ぶりだったかも。
  • 一発当てる

    • あたっていない
  • 読む / 書く

    • 去年よりはマシになったかも

2019年の抱負

  • 使える武器を増やしたい
  • 一発当てる
  • 意志はきちんと伝える

沖縄にある動物病院の夜間診療情報をJSONとして提供しています。 #CHNO

TL; DR

https://kimihito.github.io/veterinary-list/emergency_hospitals/2018_7.json

のURLで

公益社団法人 沖縄県獣医師会 に所属する動物病院の夜間診療情報をJSON形式で提供しています。

ソースコード

github.com

にあります。

きっかけ

kimihito.hatenablog.com

に書いたとおり、柴犬を飼いはじめ、もうすぐ一年になります。

その中で夜間に具合が悪くなったときにどの病院が夜間診療をしているか知るのがスマホでは大変だったという経験がありました。

(夜間診療の電話は共通ですが、当日どの病院が当番なのか知るのが面倒だった)

ちょうどそのときに、GitHubでトルコの動物病院リストを取得した

github.com

を見つけて、沖縄獣医師会のサイトを見たところ、定期的に夜間診療の情報を更新していたのでスクレイピングして GitHub Pagesにホスティングしています。

実装

  • Puppeteerを利用

github.com

github.com

Civic Tech Night Okinawa vol.3 に参加した

civic-hack-night-okinawa.connpass.com

Civic Hack Night というイベントは Code for Kanazawa の @ さんがよく connpassで募集している のを知っていました(情報のオープンさを心がけているのは本当にすごいです)、沖縄で開催されているのは知りませんでした。

今回の動物病院の夜間診療の内容はシビックテック向きかな?と思い参加して話してみたんですが、どうも主催の方には社会問題の解決とは遠いものだと感じられた(と僕は受け取りました)ようです。

グループディスカッションは他の方からの意見やアイデアなどはとても実りあるものだったと思います。それだけに早めに切り上げてしまったのはちょっと残念でした。

イベントの内容が非常に満足だったとは言えませんが、こうした場が継続的にあるのは素晴らしいと思いますし、より実りある場にするための貢献は参加者として取り組まければいけないと反省しました。

その他

動物病院情報も上記のGitHub PagesからたどればJSONが取得できるんですが、セレクタの指定が甘く、いくつか綺麗に情報を取得できていない部分があるので修正出来次第ブログに書こうと思います。

国会会議録検索システム検索用APIのRuby gemを作りました

TL;DR

kokkai.ndl.go.jp

Rubyクライアントを作ってみました

github.com

国会での発言が検索できる

国会での発言を検索できるAPIがあるということを このIssueで知りました

最近は自分の一票がどう使われているかをラクに知りたいなというところに関心があるので、使いやすくしたいなぁという気持ちがふんわりありました。

ちょうど一ヶ月ほど休むことになったので、gemにしてみました。

作っている中でAPI側の不具合のようなものも見つけて報告していますが、まだ直っていません。。。

参考にしたGem

特に esa.ioRubyクライアントは、ソースコードを読んだときに「きれいでかっこいい...!!!!」と思ったのでめちゃくちゃ参考にしています。

Twitter gem については、アプリケーションエラーハンドリングをどうしてるんだろうというので twitter/error.rb at 844818cad07ce490ccb9d8542ebb6b4fc7a61cb4 · sferik/twitter · GitHub あたりを参考にしました。

ハマったところ

パラメータのエンコード=& も含めて行わなければならない

この辺の対応については

straitwalk.hatenablog.com

を参考にしました。ありがとうございます 🙏

TravisCI上で ruby-head だとテストが落ちる

ビルド履歴にあるように、 String#splitruby-head で落ちてしまっていました。

非力な僕は特に対処せずに放置しちゃいましたが、最近あったOkinawa.rbで相談してみたところ、TRICKで入選した @ さんから以下のリンクを教えてもらいました。

blog.bigbinary.com

thats_it gem を作った @ さんも含めていろいろ教えてもらったり、フィードバックをもらったりしました。

こういうコミュニティが近くにあってすぐフィードバックをもらえるのはとても有り難いです。また来月もあるので参加しようかなぁ(宣伝)

okinawarb.doorkeeper.jp

okinawarb.doorkeeper.jp

作ったGemについては、まだ不具合もあるかと思うのでフィードバックなどお待ちしております 🙇

#雑Perl でNode.jsのスクリプトを書きました。

connpass.com

に参加しました。

Perlと書いていますがぶっちゃけPerlじゃなくても良いので 適当に集まってプログラミングしていこうぜみたいなノリ

ということで、Perlはまったくわかりませんが参加しました。

やったこと

https://github.com/GoogleChrome/puppeteer を使って銀行口座(ゆうちょダイレクト)の残高を通知するスクリプトを書きました。

puppeteerでゆうちょダイレクトから残高情報をスクレイピングする

普段はRuby on Railsで、特にサーバ側を書くことが多いのでJavaScriptの勉強が出来てよかったです。

async/await, Promise はまだイマイチ理解できていないですが...

本当は定期実行の部分をFirebaseとかそこらで出来るんじゃないかと思ったんですが、結局 Manual Job Approval and Scheduled Workflow Runs - CircleCI を使って定期実行を雑にしています。

感想

@ さんの「クラスとインスタンスがよく分からず、連想配列で十分でないかと思ってしまう」という発言から、Perl5のクラスについての説明が始まったときは面白いなぁと感じました。

勉強会などに行くとどうしても駄弁って相手の時間を奪ってしまうことが多い性分なので、こうしたイベントでしっかりコードを書くことが出来たのは本当に良かったと思います。

運営も低コストを心がけているので,隔週しないかもしれません.

とのことだったので次回がいつになるかわかりませんが、また開催されるときは足を運びたいと思います。

運営の id:anatofuz( @ )さんありがとうございました!