もんりぃ is undefined.

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

ちょっと遅めの Happy birthday !!

今日は、実家の両親を招いて娘の2歳の誕生日をお祝いしました!

前回会ったのがゴールデンウィークだったので、3ヶ月ちょいという短い期間でも、かなり成長を感じられたようです。 まぁ、私自身も日々接している中で「おお!こんなこと出来るようになったんだ!!」とかあるので、そりゃそうですよねw

実際の誕生日には私たちがディズニーランドに行っていたこともあり、半月遅れくらいのお祝いにはなりましたが、みんな終始ニコニコで幸せな時間を過ごせて良かったです! プレゼントに「レミンちゃん」という人形をもらって、思いっきり喜んでいました。 いわゆる「おせわ人形」というジャンルの人形なのですが、特に遊び方を教えることもなくスンナリ「おせわ」していて、私も妻もただただ感動していましたw

あと、ケーキデビューも果たしました。 さほど神経質に砂糖を遠ざけていたわけではないのですが、まぁ世間的にも2歳くらいに解禁する人が多いらしいですね。 最初は「なに…これ…?」みたいなリアクションをしていましたが、一口含んだら「あ!おいしい!!」ってなってパクパク食べていましたw

そんなわけで、記憶の片隅の奥の方にでも残ってくれるお誕生日会になっていたら良いなぁと思いつつ、パパは高校時代の友人達との飲み会に向かっておりますw

なお、最近娘や妻と過ごす時間が増えていて QoL の圧倒的高まりを感じまくっています。 今日は夏休み2日目を利用した形ですが、リモートワーク開始してみたり、土日にキドキド行ってみたりと、家族と触れ合うことでの幸せを噛みしめております。 家庭に仕事に趣味にと楽しめるだけの心の余裕が出来たことは私の人生にとってとても大きい変化だと感じています。 マジで周りの人達に感謝です!

Unity Case-Study / シリアライズ可能でインスペクタから操作可能な Dictionary を扱いたい

What

  • 以下の要件を満たした Dictionary 的なフィールドを宣言したい!
    • シリアライズ可能
    • インスペクタで操作可能
    • キーと値の型を定義可能

Why

  • Unity の仕様上、 List<T> は OK ですが Dictionary<TKey, TValue> は NG です。
    • リアライザの仕組み上仕方ないらしいのですが、詳しいことは他の方の記事に譲りますw
  • そこで、別の切り口から代替案を考えてみました。

How

  • SerializablestructList を作ります!

f:id:monry84:20170817030220p:plain

  • そうすると、上記の画像のように、要件を満たした Dictionary もどきが実現できます!
    • Fuga List の方が Dictionary もどきになります。
  • ポイントは struct[Serializable] 属性をつける所です。
    • これがないとシリアライズできませんし、インスペクタから操作もできません。
  • struct 内部のフィールドに属性をつけてあげれば通常のインスペクタ拡張と同じ機能が利用できます。
    • この例だと [Range(1, 10)] が該当します。
  • 都度 struct を宣言する必要があるので、ちょっとシンドイですが。
  • 勿論、 ISerializationCallbackReceiver を実装するという素直な手もありますが、それはそれでインスペクタの拡張などが結構大変かなぁ…と。
  • なお、 structシリアライズ出来るようになった Unity は割と最近のバージョンなのでご注意ください。
    • 私は Unity 2017.1.0f3 で動作確認を行っております。

複数の Unity プロジェクトを同時に開く

はじめに

  • Unity で複数のプロジェクトを同時進行で開発することって多々ありますよね!?
  • そんなとき、毎回メニューから File > Open Project でプロジェクト切り替えるのって非効率ですよね!?
  • 今回は、そんな貴殿に伝える Tips です。
  • ただし、 macOS 限定です。 Windows でもやり方はあるんでしょうが調べてません。

TL; DR

  • open -n /Applications/Unity/Unity.app --args -projectPath /path/to/project

やり方

  • open -n /Applications/Unity/Unity.app で Unity を新規ウィンドウとして開くことができます。
  • さらに open コマンドの引数に --args ってのがあるので、 --args -projectPath /path/to/project としてあげれば、プロジェクトを直接起動できます。

おまけ

  • 使い方としては、以下の通りです。
    1. パスの通った所に上記のシェルスクリプトを配置して、実行権限付与 (chmod u+x /path/to/unity.sh)
    2. Unity プロジェクトのディレクトリに移動 (cd /path/to/project)
    3. unity と打つだけ
  • 複数の Unity をインストールしている場合は、第一引数にバージョン入れれば起動できるようにしてあります。
    • ただし、Unity のインストール先が /Applications/UnityX.Y.Z/Unity.app という構造になっていないと NG です。
    • 例えば 5.6.2f1 であれば /Applications/Unity5.6.2f1 とか、 2017.1.0f3 であれば /Applications/Unity2017.1.0f3/Unity.app とか。

Unity Case-Study / Animator が付いている GameObject の特定のプロパティが操作できない

What

  • Animator が付いている GameObject の position や scale などがスクリプトから操作できないコトがあります。
    • インスペクタからも操作できません。
    • Animator の enabled を false にすれば操作できます。
  • 例えば、拡縮する Animation を含む Animator があったときに、その Animator が AddComponent されている GameObject は Transform.localScale の操作ができません。

Why

  • Animator が含有する Animation によって操作されるプロパティは原則的に書き換えできないようになっています。
  • 正確に言うと、Animator 内の全 Animation が操作しうる全プロパティが Animator の管理下に置かれてスクリプトからの操作を上書きしてしまいます。
    • Animator がネストしている場合にどうなるのかは検証していませんが、ヨシナにブレンドしてくれるのかな…?

How

  • Animator に管理されない GameObject を作りましょう。
  • 常套手段としては、Animator がアタッチされている GameObject の外側 (親) に新しい GameObject を作り、スクリプトはそちらに AddComponent する、といったところでしょうか?
  • もちろん、Animator の enabled を一時的に false に設定する手もありますが、ステートマシンの状態管理が複雑になりがちなのであまり良い手とは言えない気がします。
    • Animator の外側から無理矢理 State を殺すような形になるので、元の State を意識する必要が出てしまったりします。
  • (実はそれ以外にも手はあるのかも知れませんが調べていません。)

Note

  • 同僚がその辺でハマっていたので、備忘録も兼ねて綴りました。
  • 今後も実際のプロダクト開発時に起きた課題などについて Case-Study をためていく所存です。

初リモートワーク

はじめに

昨日 (2017/08/08) は初めてのリモートワークでした。

プログラマーになってから実質的に初めてのリモートワークで、「どのくらい集中できるのか?」「家族は理解してくれるか?」とかちょっと不安でした。

TL; DR

結論としては、何ら問題なく遂行できました!

詳細

集中力

普段通りの集中力を出せたと思っています。

むしろ、集中しすぎた気もします。

家族

家族の理解については、妻は元々理解があって娘はまだ2歳なので、こちらも問題なく。

たまに娘が「あれ?今日はパパがいたりいなかったりする…?」ってな感じで不思議そうな顔してましたがw

進捗

これについては、そもそも YAGNI とか Yak Shaving などの個人的な課題が解決していないので、オフィスワークとリモートワークとで差は感じられませんでした。

個人的な課題が解決したら、もう少し変わるのかも。

KPT

Keep

  • 普段より朝の時間も長くなるし、家族の生活リズムに合わせて一緒に食事をとったりするので、娘とふれあう時間が圧倒的に増えたのがとても良かったです!
  • 差し込みタスクが入りにくかったのは個人ベースでは良かったコトでした。
    • 反面、会社の業務という意味では必ずしも良い面だけではないと思いますが。
  • 今後も (まずは) 週1とかのペースで続けていく所存です。

Problem

  • YAGNIYak Shaving などの課題が残っています。
    • こちらは、リモートワークなることで外部からの指摘が減るため、自制していかないと沼になると感じました。
  • オフィスワークの人たちがオレ宛の差し込みタスクを入れづらい状態になっていた可能性があります。
    • これは、ヒアリングしてオフィスワーク・リモートワーク間でのコミュニケーションをもっとカジュアルに行う方法を探したいです。
  • インターフォンに気付けないコトが2度ありました。
    • 妻が居たから良いけど、一人だったら危なかった…。
    • 娘のためにインターフォンの音量絞っているので仕方ないのだけれども、書斎に通知する方法を探す…?

Try

  • ポモドーロなどを取り入れてタスク管理をしていきます。
    • リモートワークとは直接的に関係はないけれども。
  • もう何度かリモートワークをした後にオフィスワークのメンバーに「どうだったか?」をヒアリングします。
  • インターフォンは…、実際に問題が発生してから、かな?

git lfs 化したリポジトリで git status すると Encountered N file(s) that should have been pointers, but weren't: って言われる件について

はじめに

  • git lfs 化したリポジトリを複数人で運用している場合の話です。
  • 既存のリポジトリlfs 化したにせよ、新規に構築したにせよ起こり得ます。
  • タイトルが長い!というツッコミは甘んじて受け入れますw

TL; DR

  • git lfs clone しましょう。
  • git clone 済の場合は git lfs install で解決します。

課題

Encountered N file(s) that should have been pointers, but weren't:
    // 以下ファイル名...
  • 複数人 (じゃなくても起こせるけど) で git lfs リポジトリを運用していると上記のようなメッセージに遭遇することがあります。
  • git reset --hard とかしても消えてくれません。
  • git status でずっと怒られた状態になります。困った!

原因

  • じゃあ、なんでそんなことになるのか?
  • 凄く端的に言えば git lfs さんが「ポインタ化すべきファイルあるっぽいけど?」って教えてくれているわけです。
  • これの根本原因は、当該リポジトリにコントリビュートしている人の誰かの環境が git lfs 化されていないからです。
    • git lfs 化されていない環境では、実体ファイルを参照できないので、 git lfs 管理されているファイルが壊れたように見えます。
    • 故に、「あれ?何か壊れてる。戻そう。」みたいな感じでポインタ化ファイル→実体ファイルという感じに戻されたコミットが積まれてしまうわけです。
  • 「え?ちゃんと git lfs add とかもして、 .gitattributes もコミットしたんだけど!?」とか思うんですが、あくまでそれはポインタ化の対象ファイルを列挙したに過ぎず、git lfs のフックを全環境に配信したわけではないのです。
    • git lfs というのは、 git の hooks を駆使して Large File を取り扱う仕組みなので、 .git/hooks/ 以下に hook スクリプトが配信されないとダメなのです。

解決策

  • まだ git clone していない環境の場合は git lfs clone しましょう!
    • これにより、自動的に hook スクリプト達がインストールされた状態になります。
    • 更に git lfs の実体ファイルの取得が高速化する *1 というオマケつき。
  • 既に git clone でローカルリポジトリ作っちゃった場合は、 git lfs install コマンドで hook スクリプトがインストールされます。
    • インストール時のオプションも幾つかあるっぽいけど、調べてない。

*1:git checkout と同時に1件ずつ取得するのでは無く、並列ダウンロードしてくれるので10倍くらい速い。

夢と魔法の王国

娘が2歳の誕生日を迎えたので、家族3人でディズニーランドに行ってきました!

アトラクションは「アリスのティーパーティー」と「プーさんのハニーハント」の二つに乗ったけど、まださすがに怖かったのか途中ちょっとベソかいていた。けど、笑顔になるシーンもあって良かった。

ディズニーランドはノリの良い音楽が流れるコトが多いので、その手の音楽が好きな娘は身振り手振りで踊って楽しんでいたもよう。*1

さすがに娘が大人になったときに2歳の時の記憶は残っていないとは思うけど、「楽しかった」という思い出が心に刻まれてくれたら良いなぁ。

なお、パパはしっかり日焼けしてしまいました。*2

*1:前泊してボンボヤージュとかイクスピアリとかに買い物に行ったのだが、途中にある音楽が流れる街路灯で10分近く立ち止まって踊っていたりもした。

*2:紫外線に弱いからちゃんと日焼け止めクリームを塗ったんだけど、それでも太陽の力には勝てなかった…。