プログラミングで世界を変える

ゲームプログラミングと技術のこと

「学び続ける姿勢」について考えたこと、これから実践すること

内容要約

  • 「学び続ける姿勢」のインプットをした
  • 自分でやってみたことの振り返りをした
  • 今後の実践計画を立てた

はじめに

ドワンゴで行われた@t_wadaさんの講演についてのエントリを読みました yuelab82.hatenablog.com

学び続ける姿勢についてまとめられており、納得感のあるためになる内容が書いてありました。 その中の項目で アウトプットをするのが大事 とあったので、この機会に自分にとっての「学び続ける姿勢」を整理してみました。

『Write Code Every Day』をやってみて

実は3月下旬頃から『Write Code Every Day』を実践していました。

f:id:splas_boomerang:20170518025558p:plain

約1.5ヶ月間ですが、ほぼ毎日contributonsを生み出すことが出来ました。

github.com

始めたきっかけは、Battle Conference U30というイベントで「最良の砂場を目指して-プライベート開発を支える技術-」 というセッションを聴講したことでした。

持続性がという部分の話で紹介されていた『Write Code Every Day』に興味を持ち、実践してみることにしました。

自分なりの『Write Code Every Day』のルール

  • 目的は「毎日コードを書く習慣をつけること」
  • 目標は「毎日草を生やすこと」
    • githubのContribusionsの意味
    • 00:00-から23:59までに最低1contribution
    • 生活環境に依存せず継続する
  • “なるべく"意味のあるコミットを作る
    • 無意味なコミット < 毎日欠かさずコミット
  • オープンソースであることは問わない
    • github上での設定でプライベートリポジトリも表示させる

すぎゃーんさんの記事を参考に、かなり緩めのルールを設定しました。 memo.sugyan.com

書いていて気がついたのです、すぎゃーんさんは@t_wadaさんがきっかけで始められたみたいですね。

良かったこと

ほぼ毎日取り組めた

4月から新卒入社したので現在(2017/05/18)に到るまでずっと研修が続いているのですが、生活環境が変化しても継続出来たことは、習慣づけるためにとても良いことであったと思います。飲み会がある日は前日の寝る前にあらかじめ終わらせるなど、計画的に考えることが必要でした。

毎日開発に向き合う時間がある

ひどい時は空行を削除して「Remove empty line」というようなコミットもしていましたが、それでも意味はあったと思っています。というのも、個人開発は誰かに迷惑がかかるわけでもないので、自分のモチベーション次第では何ヶ月も放置してしまう可能性があります。空行を削除するだけでもプロジェクトに向き合う時間を作ることで、開発から意識が遠のくリスクはかなり軽減されたと思います。

悪かったこと

アウトプット量が少ない

毎日コミットすることだけを目的にしていたため、目的なく頭に浮かんだタスクを消化するという方法を取っていましたが、振り返って見ても大した進捗がほとんど出ませんでした。1回あたりの着手時間が少ない個人開発では、目的と締め切り意識をもち、短期間で集中してコードを書く必要があると感じました。

業務のContributionと混合させた

研修では個人のgithubアカウントが利用可能だったので、業務でコミットした日には個人開発に着手しない日がありました。業務に依存せずに毎日コードを書く習慣を身に付けることが大切だと思うので、後から混合すべきでなかったと感じました。

実践計画

すごい人達のベストプラクティスや『Write Code Every Day』の反省を活かし、個人開発や学習の計画を立てました。これまでの1.5ヶ月で習慣づけることは実践したので、これからは質が伴った習慣づけを行なっていきたいと考えています。

具体的にはスプレットシートにやりたいことのシートと作業計画のシートを作成し、1週間単位でゴールを設定できるようにしました。公開してあります。

docs.google.com

大きく分けて『開発』と『技術書』の2種類があり、それぞれを並行に進めていきたいと考えています。

開発では『Write Code Every Day』を今までのルールのまま継続し、ゴールを設定することで質を高めていきたいです。

技術書の項目では、今まで読みたいと思って積んでいる本がいくつかあるので、それを少しずつ消化していきます。インターネットで気になる記事を読むことも大切ですが、技術書を読んで体系だったまとまりでの知識を獲得する習慣を身に付けていきたいです。

最後に

やはり業務との違いは時間をしっかりと確保することの難しさだと思います。まずは確実にこの計画をこなし、少しずつ「学び続ける姿勢」の精度をあげていきたいです。

LPページを作る際のソーシャル設定のいろいろ

至近距離ガールVRというVRコンテンツのLPサイトを作り直したのですが、その際に行ったソーシャル設定の共有です。Twitter、Facebook、Google+を例に、以下の2点についての概略を説明します。

  • 投稿リンク(シェアリンク)
  • Open Graph Protocol

今回WordPress(WP)を使用していますが、初めての取っ掛かりとしては汎用的に使える内容になっています。

f:id:splas_boomerang:20170327023936p:plain

vr-locker.com

続きを読む

"AmebaTV"が含まれるツイートに訂正リツイートをするbotを作った話

AmebaTV bot

f:id:splas_boomerang:20170320151650p:plain

AbemaTVのことをAmebaTVと言っている人が多かったので作りました。こんな感じのツイートを自動でしてくれます。非公開アカウントです。

※ 元ネタはプラチナゲームズの神谷さんです。 togetter.com

続きを読む

UnityでWindowsデスクトップアプリの仮想キーボードを呼び出すdll

UnityでWindowsデスクトップアプリを作る際に、タブレットなどで必要になる仮想キーボードが表示されない問題がありました。そこでUnity上から仮想キーボードを呼び出すdllを作成しました。

ダウンロード

http://unubore.egoism.jp/techblog/distribution/WindowsTouchScreenKeyboard/UnityKeyboard.dll

使い方

Assets/Pluginsフォルダ以下にダウンロードしたdllをインポートします。

ちなみに複数のプラットフォームに対応する場合は、インスペクターかサブディレクトを用いて適用先を設定することも可能です。 docs.unity3d.com

あとはusingしてメソッドを呼び出せばokです。以下のスクリプトを参考にしてください。

このスクリプトをシーン上の適当なオブジェクトにアタッチすれば自動的にハンドリングされると思いますが、動作確認はしていません。 gist.github.com

続きを読む

Oculus RiftのルームスケールとKinect v2を同時に使用した時に困った話のメモ

不正確な情報が多い記事なので、参考程度に留めてください。

問題の要約

現象

Kinect v2のフレームレートが著しく低下する現状が発生しました。

同時にOculus Rift側では3台のセンサーを用いてルームスケール機能を使用していました。

原因

恐らくUSB帯域不足による問題だと判明しました。

USBを接続するホストコントローラーには使用できる帯域に制限があるため、それを超えたデータ転送を行えないということらしいです(多分)。

参考: USB 2.0と3.0について知っておくべき10のポイント - page4 - builder by ZDNet Japan

以下の通り、RiftとKinectそれぞれで多くの帯域を使用するとのことでした。

If you connect three Oculus sensors—each sending and managing a ton of data locally—you can run into problems when they try to send more data than the USB host controller can handle.
(意訳) 3台のセンサーを繋いで制限以上のデータを送ろうとすると問題が発生しうる。

Oculus Roomscale: Balancing Bandwidth on USB | Oculus

Kinect for Windows v2 センサーは、USB コントローラーの USB3 帯域幅をかなり消費します。

Windows アプリが Kinect for Windows v2 センサーで機能しない

解決方法

  1. ホストコントローラーに接続するUSBを減らす
  2. ホストコントローラーを追加し、接続先を分散させる
  3. (Riftではなく) HTC Viveを使用する

以下でそれぞれについて説明します。

(1,2について) ホストコントローラーの種類

EHCI(Enhanced Host Controller Interface)がUSB 2.0対応、xHCI(Extensible Host Controller Interface)がUSB 3.0対応だそうです。

[デバイスマネージャー] > [ユニバーサルシリアルパスコントローラー]で確認すると、僕のPCにはxHCIが1つとEHCIが2つ接続されているようです。xHCIがEHCIの機能を内包しているかどうかが分からなかったのですが、少なくとも3.0に対応しているxHCIが1台なので、現状で接続先を分散させる対処は恐らくできません。

参考: USB ホスト コントローラー ‐ 通信用語の基礎知識

(3について) HTC Viveのルームスケール

Oculus Riftのルームスケールは、Rift本体から飛ばした赤外線を、周囲に設置したセンサーで認識することで実現しています。そのため、センサーが受け取った情報が取得するためにセンサーとPCを接続する必要があります。

対するHTC Viveですが、こちらはセンサーから飛ばした赤外線を本体で認識する仕組みになっています。この違いにより、Viveのセンサーに必要な接続は、電源供給のためのACアダプターのみとなります。そのため、今回のようなUSB帯域を圧迫するような問題は解決できると思います。

続きを読む