もんりぃ is undefined.

育児ネタとか、技術ネタとか。

リモートワーク Rev.9 / リモートで良かった🚃

はじめに

  • 2017/10/19 (Thu) は木曜恒例のリモート。
  • いつもの KPT を綴る。
  • そろそろ技術ネタもポストせねば…。

KPT

Keep

  • 物凄く集中できた。
    • やっぱ今のところリビングルームが最適解だな。
    • 妻と娘が遊ぶ声やテレビの音が程良い環境音になっていた感じがする。
  • Toggl Desktop 使い始めた。ヨサソウ。
    • 週の頭くらいから使い始めているが、結構ヨサソウ。
    • 「正確に記録できなくてもいいや。」くらいの気持ちで使ってるから良いのかも。
    • あと、「誰かに見られるワケではない。」ってのも大きいな。
    • 直前にやっていた作業に戻りやすくなった気がする。
  • 東急田園都市線が停電による長時間の運転見合わせを起こしていたが、巻き込まれずに済んだ。
    • ニュースにも取り上げられるレベルだったもんなぁ…。
  • 娘がテレビとか玩具とかの音楽に合わせて踊る姿を見ながら開発できた。
    • マジ可愛い😍

Problem

  • 席を立ち忘れる。
    • 元々トイレが遠い人なので、意識的に席を立って伸びとかしないと全身強張ってヤバい。
    • 書斎でのリモートで腰痛悪化したのもそれが原因の一つだったのかも?
  • Slack が静かすぎて逆に不安になったw
    • 電車遅延の影響でみんなリモートに切り替えたりしていたようで、とても静かだった。
    • メンション通知にも気付けないコトがあるので、「ひょっとして見落としてる通知あるかも!?」とか不安になった。
    • メンションがある場合にはバッヂに数字出してくれるとありがたいんだがなぁ。
      • macOS はバッヂに数字出せないんだっけか?

Try

  • 引き続き Toggl Desktop 使い続ける。
  • 技術ネタ書く。
    • 技術ネタのアウトプットも続けないと書き方忘れてしまうので、再開せねば!

所感

  • やっぱ、リモートの日に限って何かトラブルが起きている気がする…。
    • そして、その規模がだんだん大きくなってきている…w
  • 家族的にもリモートは好意的に受け止めて貰っているので、QoL 高まる!

リモートワーク Rev.8 / リビング開発継続

はじめに

  • 2017/10/12 (Thu) は毎週恒例のリモートワークだったので、恒例の KPT
  • 前週に引き続き、リビングルームでの作業
  • 最近、リモートワークの話しか投稿していない気がするw

KPT

Keep

  • やはりリビングルームの方が集中できる
    • ちょっとした家事の手伝いがし易いという家庭的な意味での副次的効果もあるし
  • 業務的にも余裕が出てきたこともあり、スパッと定時で終われた
  • 娘が可愛い😍

Problem

  • まだタスクの切り替えに問題が残る
    • 集中出来てしまうが故に、どんどん深掘りしそうになる
  • ごく稀に娘が「遊べー!」ってな具合に、キーボード叩こうとする
    • 特殊な操作しないと解除できないフルスクリーンアプリ作ろうかな?w
    • ユーザへのフィードバックとしては、キーボードの文字を出すだけとかなら簡単だし
  • 奥さん的に「監視されてる感じがして嫌」という事例があるとも聞くので、その辺がちと不安

Try

  • タスクの記録に Toggl 試してみる
    • 続けられるかどうかは分からないけど、スッと記録できるのはヨサソウ
  • 奥さんに迷惑じゃないか?を改めて聞く
    • 娘的には、ママだけの時よりもちょっとだけ聞き分けが良くなるらしいが…?

所感

*お風呂デーが増えることになってヨイ * いつの間にか「パパが居る日は、パパとお風呂」というルールが設定されていたらしいw * 暑かったので、エアコンつけようとしたら水漏れ起こすというトラブルが😢 * リモート日に何かしらトラブル起きるんだよなぁ…。

リモートワーク Rev.7 / at Living Room

はじめに、

  • 2017/10/05 (Thu) は(多分)7回目のリモートワーク。
    • もはや回数覚えてないw
  • 今回は普段と変えたことがあったので、その変化と所感を綴る。

KPT

Keep

  • 前回の Try であった「部屋を片付ける」を「リビングでやる」にシフト。
    • 娘の世話や相手は妻がやってくれるし、娘が邪魔しに来ることも殆ど無かったので、普通に仕事できた。
    • 広い空間で楽な姿勢をとれたので、むしろいつものリモートワークよりも捗った。
  • ちゃんと朝食を食べた。
    • 開始時点からフルスロットルで作業に当たれた気がする。
    • いや、普段から食べろよって話だけどw
  • リビングで作業したことにより、良い緊張感が持てた。
    • 妻や娘の前で仕事をすることになるので、程良い緊張感を持ちながら作業できた気がする。
    • 「ええ格好しぃ」なので、他人の目があった方が効率良いのかも。
  • 残業しなかった。
    • 普段は、夕食後に作業再開していたが、今回はスパッと切り上げられた。
    • やるべきコトはいっぱいあるけど、今すぐやらないと拙いモノが減ったので。
    • やろうと思えば作業再開できちゃう状態ではあったが、気持ちの切り替えができたのは自分にとって良い変化だと思う。

Problem

  • ちょっと YAGNI な開発をしてしまった。
    • 今はフェーズ的に基盤側を固めるタイミングなので、ナシではないけど…。
  • 朝会時点で宣言した「やること」を実現できなかった。
    • 本当は翌日やろうと思っていたコトと入れ替えてしまった。
    • 環境的に会社の iMac の方が効率的かも?と思っていた作業が、意外と MacBook Pro でも行けることを知れたのは収穫だった。
  • git pull 忘れがち。
    • 会社の iMac で開発中のモジュールを触る時に、MacBook Pro 側を同期し忘れて「あれ?」ってなることが2回ほどあった。
    • 作業前に git pull する癖を付けないと…。
  • Issue の移動忘れがち。
    • Waffle.io で管理している Issue のステータスを作業着手時に「作業中」ステータスに移動するのを忘れてしまう。
    • いまだに良い解決策が浮かばない…。
    • 思い付いたら直ぐにコード書き始めちゃうから、ってのは判っているんだが…。

Try

  • 引き続き、リビングルーム開発を試してみる。
  • タスク管理の重要性を再確認する。
    • 他人に説明できるレベルにまで昇華できれば身につく気がする。

所感

  • リビングルーム開発により、家族と最接近した状態で仕事ができるのは素敵すぎる!
    • 夕方くらいに、毛虫が入ってきてて奥さんが悲鳴を上げるというトラブルがあったが、即時対応できたのもリモートワークのメリットかな?w
    • 楽しそうにキーボード叩いてるパパの姿を娘に見せられたのは良かった…かな?
      • まぁ、難しい顔もしてたとは思うがw

育児タスクから得る達成感

前提

  • 今日は、初めて娘の寝かしつけをした。
    • 2歳2ヶ月で初めてってのもアレだが。
  • 夫婦共通の趣味である合唱の練習に、オレだけ参加して奥さんがなかなか参加できないという状況が続いており、このままだと夫婦関係に良くない影響があると判断し、8月末の合唱コンクールが終わったら、オレの出席頻度を減らして輪番制で練習参加しようという話になっていた。
  • んで、諸々あって今日が初めての奥さんのターン。
  • 基本的に練習は夕方から開始して練習の後は飲み会がある。
  • 日頃のストレス発散のためにも飲み会まで参加して欲しい *1 という想いがある。
  • そうなると、必然的に夕飯準備〜寝かしつけまでの全育児タスクを担当することになる。
  • んで、よくよく思い起こすと、お義母さんが来ていない状況で奥さんが練習に単騎参加するのって多分初めて。
  • 「お、これは初めての経験をするチャンスだぞ!?」と思い、しっかり記憶して記録に残そうと思った次第。

いざ寝かしつけ

  • 寝かしつけと授乳以外の育児タスクは全て何度も経験済みなので、余裕だろーとか思っていたが、ちょっとだけ苦戦したw
    • 寝かしつけ開始から20分あたりで絵本の読み聞かせを始める。
    • 絵本読んでる最中にウトウトし始めてたから「お?これは楽勝か??」とか思っていたら、何かの拍子に眠気が飛んだらしく、パズル遊びにスイッチ。
    • 10分くらい元気にパズルで遊んだ後に、また絵本の読み聞かせ。
    • 開始して5分くらいでウトウトし始めたが、外のバイク走行音に刺激されて、またもや覚醒。
    • その後、なんやかんやで絵本と玩具の往復を1.5時間くらい繰り返す。
    • 最後は、雑誌の付録のアンパンマンの嵌め絵パズルで遊んでいる最中に寝落ち。
  • 床で寝落ちしてくれちゃったので、布団まで運搬するというタスクが追加発生した。
    • 何気に、慎重かつ大胆な動きが要求されるので、一番気を遣ったw

所感

  • で、振り返ってみると、色々な達成感を得られた。
  • 今回の諸々で拾った達成感は以下の通り。
    • サッと作った小松菜とツナの和え物を、娘が美味しそうに食べてくれた。
    • 食後に娘が玩具で遊び飽きる前に、手際よく皿洗いと炊飯設定を済ませられた。
    • 風呂洗いをしているときに娘が手伝いに来たのだが、その時にオムツにウンチしてるコトに気付けたので、入浴前の脱衣時にアタフタせずに済んだ。
    • 風呂で娘を爆笑させられた。
    • 床で寝落ちした娘を、一切起こすことなく布団に運搬できた。
  • 個々の達成感の高さは決して高くないとは思う。
  • が、こうやって並べてみると、セルフドヤァができる程度には達成感を味わえている。

まとめ

  • 思ったのは、仕事にせよ家事にせよ育児にせよ、こういう小さい達成感を拾い集める癖をつけると、ちょっと人生が豊かになるかも?ということ。
  • なんなら、こうやって記録に残すと、いつかシンドイ状況に陥った時に振り返ることができて、立ち直りが早くなるんじゃないかな?
  • もちろん、「んな心と時間の余裕ねぇよっ!」ってな状況は少なくないと思うけどね。

*1:奥さんはお酒弱いし、まだ授乳しているのでお酒は飲まないけど。

UnityWebRequest を用いた Texture の取得方法 (追記あり)

TL; DR

  • UnityWebRequest.Get ではなく UnityWebRequestTexture.GetTexture を使いましょう。

UnityWebRequest について

  • 昔のバージョンの Unity では WWW というクラスを用いて HTTP な通信を行っていました。
  • しかし、Unity 5.4 から UnityWebRequest というクラスが新たに登場しました。
  • このクラスの登場により、より柔軟な HTTP Request / Response が行えるようになりました。
  • UniRx と組み合わせると、より便利になったりするのですが、それはまた別のお話。

本題

  • 最初、画像を取得する際の処理を以下のように考えました。
    • UnityWebRequest.Get で UnityWebRequest のインスタンスを構築
    • request.Send() でリクエスト送信
    • レスポンス受信が完了したら request.downloadHandler.data を Texture2D に食わせる
  • しかし、そもそもそのやり方だとうまく Texture2D のインスタンスが生成できませんでした。
  • じゃあ、何故か?というと、元々 2017.1.0f1 以前の Unity には UnityWebRequest.GetTexture というメソッドがあり、そちらを使うのが正解でした。
  • しかし、2017.1.0f1 で UnityWebRequestTexture.GetTexture に移動しているので、こちらを使う必要がある、というオチでした。
  • なお、 AudioClip や MovieTexture (モバイル非対応) も同様に UnityWebRequestMultimedia.GetAudioClip や UnityWebRequestMultimedia.GetMovieTexture が正解っぽいです。
  • また、データを受けるための DownloadHandler はそれぞれ DownloadHandlerTexture と DownloadHandlerAudioClip と DownloadHandlerMovieTexture という専用のクラスが用意されています。

所感

  • 利用している Unity のバージョンによって処理が異なるので、共通ライブラリ化してたりすると #if UNITY_X_Y な制御が増えそうですね…。

追記

  • Unity 2017.1.1p3 に於いて、 UnityWebRequestTexture.GetTexture() は挙動が怪しいようです。
  • まだ、バグレポ送れてはいませんが、「iOS 環境で同時に複数リクエストを送信すると、稀に取得できるインスタンスが Texture2D 以外のモノになる」というバグがあります。
  • 直るまでは、downloadHandler.data を Texture2D.LoadImage() に食わせるやり方が安全っぽいです。

平穏な週末

この土日は、とてもゆっくりとした時間を過ごせました。 その記録を記事に残しておく次第。

土曜

  • 奥さんが、オレの日頃の睡眠不足を鑑みてか、正午くらいまで寝かせてくれた。
  • んで、起きてからは、娘のお昼ご飯に卵焼き作って、一緒に食べて、食べ終わったら娘はお昼寝タイム。
  • お昼寝中に、娘の知育玩具(?)として、マグネットシートを正円とか直角二等辺三角形とかにカットする簡単なお仕事を済ませる。
  • その後は、洗濯物干して、ちょっとまったりしてから、晩ご飯の準備。
    • お味噌汁とジャージャー麺ならぬジャージャー飯を作ったところ、結構美味しく出来たので自己満足w
  • その後、娘と一緒にお風呂に入って、「今日も楽しかったね〜?」とお喋り。
    • まだ、娘は会話になるほど言葉が出ていないので、一方的に喋って、娘は「うんっ!」って頷くだけだけど。

日曜

  • 土曜に引き続き、昼前まで爆睡。
    • 奥さん、本当にありがとう!
  • 奥さんが美容院に行くので、娘と二人でお留守番。
  • お昼食べてからお出かけの予定が、「今すぐ外出たい〜!」って感じになっていたので、予定変更。
  • いつも通りたまプラーザの Kid-o-Kid に向かう。
  • たまプラーザ着いたら、フードコートでお昼ご飯。
    • 先ず、座席の確保に苦戦して、確保できたらできたで、娘を片腕に担いで注文するのが大変だった。
    • NFC で支払いできたからまだ良かった。
    • そう、iPhone ならね。
  • その後、注文してた眼鏡を受け取る。
    • 受け取る間大人しくしててくれたので助かった。
  • ようやく、本題の Kid-o-Kid に。
  • 着いた瞬間、「早く行こ!」みたいな感じになる。
    • でも、靴と靴下脱いだり、ロッカーに荷物預けたりすることを理解してくれているのはありがたい。
  • 中では全力で遊び、1.5時間後くらいに奥さんと合流。
  • おやつ代わりに軽食を食べて、食べ終わる頃には船を漕ぎだしてお昼寝。
  • 軽く買い物をして帰る。
  • 帰宅後、お風呂に入れる。
    • 娘がお湯をオレの顔めがけて掛けて、オレが顔を背けるのが面白かったらしく、何度も繰り返してひたすら爆笑してた。

所感

  • だいぶ「ママじゃなきゃイヤ!」という時期は過ぎたようで、奥さん一人の時間を作りやすくなってきたのが何より助かる。
  • ここ半年くらいで、リモートワークの日も含めて、娘と触れ合う時間が格段に増えているので、好感度がめっちゃ上がってる感じがする。
  • このところ、仕事がハードでなかなか平日に顔を合わせる時間が少ないので、一瞬一瞬を大事にせねば!

Unity Case-Study / AssetBundle 化している要素の一部が実機で動作しない

TL; DR

  • Strip Engine Code の作用により、一部の UnityEngine ネームスペース配下のクラスが含まれなくなった。
  • il2cpp を用いたビルドであり、かつ Scene や Prefab を AssetBundle 化している場合に発生する。
  • link.xml 書くのが手っ取り早いかな?

現象

  • ビルドしたアプリで、当たり判定が効かない!という事象が発生。
  • クラッシュすることはないのに、兎に角 BoxCollider2D がウンともスンとも言わない。
  • 実機ログ見てみたら「Could not produce class with ID 61」と出ている。

原因

  • Strip Engine Code という機能により、ビルド対象の Asset や Script から直接参照されていないクラスが除去されたコトが原因でした。
  • BoxCollider2D の他にも、SpriteRenderer とか ParticleRenderer なんかも該当していました。

対応

  • テラシュールブログさんの記事でも言及しているように、スクリプトから参照させたり link.xml 書いたりするのがヨサソウです。
  • 私は link.xml を書く方法で行きました。
    • エラーログに出てくる Class ID を元に Class ID 一覧 からクラス名を割り出し、UnityEngine. から始まる完全修飾クラス名を記載する感じです。

所感

  • この手の「実機でしか起きない」系の問題の原因究明は、「あ、これ○○のサイトで見たことあるなぁ…。」とか「前もハマったことあるぞ!」みたいな経験則に頼りがちなので、どうにかしたいですね…。
  • こうやって、地道に Case-Study を書いて知見を溜めていくのが今のところの最適解なのかな?と思っています。