@kotyのブログ

PythonとかAWSとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

謹賀新年2021

あけましておめでとうございます。例年通り、振り返りと今年やりたいことなどを書きます。

昨年の振り返り

健康問題が大きかったです。

コロナの影響は公私ともにありました。個人的には良いことも悪いこともありました。悪い面は保育園の行事が中止になったとか、旅行できなくなったとか、出社できなくなったとかですかね。 でも良い事もあって、消防や地域の要らん飲み会がなくなったりイベントが簡素化されたりしたことです。なので割と穏やかに過ごせた面もあり良かったです。

転職2年目

新規サービスのシステム面を任されました。割とうまくいっていると評価されているようでほっとしています。自分のスキルに合った規模、テクノロジーであったことが大きいと思います。 エンジニア、非エンジニア問わず周りが非常に優秀でなかなか自信を持って業務するに至っておりませんが、この調子で少しづつ成功体験を重ねて、会社になじんでいきたいです。

一番苦手なのは要件を決めるための調整ですね。利用者側は運用が固まる前にシステム化を望むことが多いのですが、それをしてしまうと無駄なものを作る危険があるのでまずは極力て運用で始めて業務フローが固まったら本格的にシステム化するように意識して調整を試みます。devのリソースで作れてopsのリソースが回る業務フローを提案&調整するのがほんと苦手。手を動かすのは楽しいのですけどね。でも今後ITに詳しい人間として飯を食っていくためには必要なスキルなので引き続きやっていきます。

ちなみに去年担当案件をどうにか世に出したいと書いていた件はいろいろあって世に出ていません。。。

コロナ禍の前から在宅勤務していたので、自分自身の働き方はほとんど変わりませんでした。唯一、月2回ほど出社していたのがなくなったのが地味につらいです。最後の出社は2020年1月で、さすがに出社したいです。

技術的には、引き続きRails+jQueryが主、vue、GASが少々という感じでした。Rails+jQueryはストレスがたまります。。。

IT勉強会関係

思い返せばNSEGが立ち消えしてしばらく経ちまたコロナで対面の勉強会もなくなり、すっかり参加するモチベーションが落ち、まったく勉強会には出ませんでした。なので昨今の最新技術に疎くなっている危機感があります。 PyConJPがオフライン開催されていれば情報交換する機会もあったのでしょうが。。。

英語

英会話は挫折してしまい、podcastを聴くくらいしかしませんでした。それでも耳はだいぶ慣れて、最初聞き始めた時にめっちゃ速いと感じた実践ビジネス英語はほぼ聞き取れるようになりました。聞き取れるだけで、知らん語彙が多いのは変わらず。 一方ネイティブ向けのpodcastはめっちゃ速くてほぼ聞き取れません。実践ビジネス英語でもゆっくり話していたんだと気付かされます。

また、English Journalを購読していたのですがこれは私には合いませんでした。割と俳優とか歌手のインタビューが多く、自分は興味が湧きませんでした。

水泳関係

ここ数年家族旅行を兼ねて出場していたOWSに今年は出られませんでした。フォームをいろいろ試行錯誤したり、練習時間を取ったりして一時期よりは泳力はついたように思います。まだ1,500mを22分半(1分半/100mペース)で泳ぐのは諦めていません。

夏場に水球の練習に参加できたのも良かったです。やはり水球は楽しいです。

家族

健康問題が大きく、夫婦ともに入院しました。健康第一。

koty.hatenablog.com

koty.hatenablog.com

息子が元気なのが救いです。

上記投稿でも書いたのですが、これらを無理なく乗り越えられたのは会社の理解があったからでほんとうに感謝しています。開発スケジュールの調整が効く一方、運用にしわ寄せが行っているのではという心配もあります。

今年の抱負

息子が小学生に上がるので、多少自分の時間が増えるのではと。。。

仕事

予定している新規サービスは非Railsなので楽しみです。少なくない量のGAS資産の保守も続くので、こちらの効率的な管理も模索したいです。

勉強会

新規案件で採用を予定している技術のコミュニティに入っていきたいです。 PyConJPも今年はどうにか現地開催できるといいけど、厳しいかな。

水泳関係

通っているジムがコロナ禍で事業縮小した関係で朝営業をやめてしまうのが痛いですが、引き続きがんばります。

OWSの大会に出たいです。1,500mは23分30秒くらいで泳げるようになりたいな〜。

英語

English Journalは合わなかったのでCNN English Expressを購読してみます。

このご時世で受検を控えていたTOEICを今年はどうにか受けれたらと思います。英会話はモチベーションがあれば。。。

プライベートのモノづくり

家業のシステムをいい感じにしたいなー。試用してみたShopifyはいまひとつ合わなかったので、自作する機運が高まっています。

今年もよろしくお願いします

健康第一で。

2ヶ月ワンオペ記録

奥さんが10月の末に入院し近頃退院しまして、その期間の所感です。

平日

食事は同居する私の母に作ってもらってたので、完全なワンオペではありません。世の中のひとり親さんはすごいと思います。

  • 5:00 私起床。洗濯等
  • 6:00 息子起床
  • 7:00 朝食
  • 7:45 保育園に送る
  • 8:30 自宅に戻り始業
  • 17:50 終業
  • 18:00 保育園迎え
  • 19:00 風呂、夕食
  • 21:00 就寝

この前からだけど、ほぼ定時で仕事をできていたのも今の所属会社の理解あってのおかげです。超絶ホワイト会社です。

休日

休日は食事は私が用意していました。(2世帯住宅なので)

最近は本をよく読むので、図書館に行くことが多かったです。

所感

常に一緒というのと食事が辛かったかな〜。

休日はこれまでは奥さんが息子を見て自分が自由にできる時間がありましたが、常に一緒にいたのが地味に辛いかったです。保育園の友達の家に息子だけ外泊させてもらったのは大きな息抜きになりとても感謝しております。

食事は自分は今まで「食べれれば良い」レベルのものしか作らず美味いものを作る努力をしてきませんでした。奥さんはそういうものも食べてくれますが子供は残酷です。そんなわけで私の作ったものを食べないことが多く、「せっかく作ったのになんで食べないんだ」「なんで美味いものが出てこないんだ」と両者不幸でした。最終的に短期的にうまいものを作るのは諦めて、中食、外食をするようにしました。大人になるまでには「ご飯を作る人が一番偉い」ことを学んで欲しい。私は「レシピに沿って料理を作る」ことを学ばねば。。。手順書見ながら作業するの苦手なんだよな。

育児はひとりでするものではないことを痛感しました。世の中のひとり親の皆さんに幸あらんことを。

実践Rust入門 読了後メモ

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]

Rustの調査のために手にとった。

言語自体の難しさもあるかもしれないけど、中級者以上向けといった感じで、特に解説無くPythonコードが出てきたり「クロージャ」という単語が出てきたりする。

説明は詳細なので、Rustの基本部分は理解できるのではないかな。

しかしRustは常駐プロセスのようなミドルウェア向けでWebアプリにはあまり向いていないようだな。 メモリを厳密に管理できるのは良いが、Webアプリを作るのにそこまで気にしたくなく業務ロジックに集中したいのが本音である。

それに、比較的使われているWebアプリケーションフレームワークのactix webでさえマルチパートpostをサポートしていないとか。。。

More Effective Agile 読了後メモ

今の会社のエンジニア内ではスクラムで日々仕事をしている。割りとうまく行ってると思っておりあまり参考になる点は少なかった。(問題意識が低いだけかもしれんけど)

  • サポート時間をスプリントに盛り込む
  • バーンアウトやスプリント疲れを防ぐために短いスプリントを入れてリズムを変えてみる
  • オープンフロアオフィスでは対面のコミュニケーションがブースに比べて70%減少する。ググってみた情報 まあこのご時世のおかげで強制的に「ブース」状態である。

活かせるところは活かしていきたい。

bundle install時にmysql2のインストールでこける件

突然Railsの話題。

FAQらしい。よく見かける対応方法は

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

だが、自分の場合は

error: unsupported option '--with-cppflags=-I/usr/local/opt/openssl/include'

というログが出ていたので、 .bundle/config から当該オプションを削除したらインストールが成功した。

間違ってbrew upgradeしちゃったときにトラブル気がするので、根本対応はdockerコンテナに入れてmacから開発環境を切り離すのが良いのだろう。やれやれ。

ちなみにパーフェクト Ruby on Railsは良書でした。仕事で使うようになって1年、ようやくRailsの全体感をつかめた気がします。Rubyはいまだによく分からんけど。

Django for Professionals と Django for APIs 読了記録

諸事情で、今時点でのDjangoのベストプラクティスを知りたくなり、手にとった。

そもそもDjangoって時点で和書が少ないのにあっても入門レベルのものばかりで、仕方なく洋書をぽちった。Djangoを使うくらいの人は普段(仕方なく)英語を読む機会は多いので、この本もどうにか読めるんではと思う。

Django for Professionals

Django for Professionals: Production websites with Python & Django

Django for Professionals: Production websites with Python & Django

  • 著者はDjango Software Foundationの人。Django podcastもやってる
  • 自費出版らしい
  • Django3対応をうたっている
  • 1章はのっけからDockerについての説明でDjango関係ないじゃんと思ったが環境構築するうえで必要だったんだろう。
  • 自分はAPIとしての利用を考えているので、template部分の説明は読み飛ばした
  • 個人的には、あまり詳しくなかった1章のDockerによる開発環境構築と、18章のherokuへのデプロイが参考になった
  • Stripeとの連携の話があるので、これから導入する人には参考になるのでは
  • ほか、for Professionals を名乗っているだけあって実践的な内容だった。この内容の和書があると良いのだけど。

Django for APIs

Django for APIs: Build web APIs with Python & Django

Django for APIs: Build web APIs with Python & Django

  • 同じ著者
  • こちらはDRFDjango Rest Framework)初心者向けという感じで、少し物足りなかった
  • あると良いなと思ったのは、CSRF対策、フロントエンドも含めたプロジェクト構成とデプロイ方法、ネストしたオブジェクトの更新 あたりか。と思ったが、akiyokoさんの本ではどれも言及されていた。DRFに関しては良い和書があった。

というわけで、 Djangoについて知りたいなら「Django for Professionals」はおすすめ。DRFについて知りたいならakiyokoさんのDRF本がおすすめ、という所感。

後付け自動窓開け閉め装置「ムーブウィンドウ」をプログラムから操作する

背景

自分は暑いのが苦手で仕事のパフォーマンスは落ちるしQoLは落ちるしで、夏はいつも憂鬱な日々を過ごしている。 特に夜に気温が下がらないのが辛い。かといって夜中エアコンをつけるのもそれはそれで冷えるので無理。

この対策として以下をやりたいと常々思ってきた。

  • エアコンをタイマーで稼働させておき、就寝後1,2時間で切れるようにしておく。
  • 一定の温度になったら窓を開ける

イケてる人だったらハンズで材料を買ってきてサーボモーターか何かで窓を開け閉めできるようにするんだろうけど、 あいにく自分にはそのスキルが無い。

しかし最近になってホームオートメーションのデバイスやエコシステムががそろってきた。時はきたれりである。

今回以下を導入してみた。 www.thanko.jp なかなかのお値段がするが、QoLのためなので仕方がないし、これでハッピーになるならむしろ安いくらいだ。

設置

取説通りにやればOK。取り付けたかった窓はこの製品が対応する幅よりも狭いので、10cmほど切断した。 切断方法も取説に書いてあるので大きな問題はなかった。金ノコがないと切断は厳しいかも。

Smart Lifeアプリから操作できるところまで確認できた。 しかしアプリから操作したいのではない。アプリは不要。ほしいのはAPI。アプリなんて飾りなのです。

事前にサンコー社のサポートにAPIによる操作ができるか確認してみたら、「APIは公開しておりません」との冷たいご回答が返ってきた。 しかし調べてみるとSmart Life対応デバイスはtuya APIなるプラットフォームで操作できるらしい。できるではないか。 サポートさんはちゃんとしてほしい。

APIからの操作

初期設定

基本的には以下に記載されている手順でできる。 qiita.com

WiFiのAPが複数ある場合は、狙ったAP以外は切っておかないとうまく接続できなかった。ここがかなり苦労した。

操作方法

取得した情報を使って以下のコマンドでデバイスの状態を取得できるようになる。

tuya-cli get -all --id <id> --key <key>

各dps値の意味

しかしこの値の意味が分からない。ググってもどこにも情報がない。

{ devId: 'xxx',
  dps:
   {
     '6': false,
     '101': 0,
     '102': 'pause',
     '103': false,
     '104': '6',
     '105': '7',
     '106': 'left',
     '107': 'cancel',
     '108': false,
     '109': false } }

仕方がないので、取説に掲載されているアプリの画面を参考に各dps値の意味を予測しつつ、値を実際に変更してみた。

以下のコマンドで全開する。

tuya-cli set --dps 102 --set open  --id <id> --key <key>

まとめたのが以下。必要なdps値しか実際に動かしていない。

{ devId: 'xxxx',
  dps:   {
      '6': false, <— アラームロック
      '101': 0, <- 1以上全開 0全閉
      '102': 'pause’, <-現在の状態。指定も可。open/close/pause
      '103': false, <- ロック(たぶん)
      '104': '6’, <- 動作速度(たぶん)
      '105': '7’, <- Anti clamp strength
      '106': 'left’, <- 窓を開く方向
      '107': 'cancel’, <-infared control
      '108': false, <- infered fortification
      '109': false <- Manual start(たぶん)
   }
}

dps値102にopenコマンドを送って途中どこかでpauseコマンドを送ればちょっと開けることができる。

しかし動作遅延の関係で、open送出してから何秒後にpauseを送出すれば良いのかよく分からんし、そもそも再現性が怪しい。 現実的には、ストッパーか何か(つっかえ棒?)を使って所望の位置で止まるようにしとくってもんかな。

CLIだと使いにくいのでWeb APIを直接叩けないかとCLIのソースをざっと眺めると、httpじゃないっぽいな。MQTTかな。なので、CLIでがんばってみる。

今後の展望

何らかの手段で温度を取り、一定のしきい値を超えたら窓を開閉したい。

目の前にRasPi Zero Wがある。これで何とか。