僕はここだ!

読書記録とか、ポエムとか、メモとか、コードスニペットとか。まとまったのはQiitaにも書きます。(http://qiita.com/RyotaMurohoshi) 掲載内容は個人の見解であり、所属する企業を代表するものではありません。

BuriKaigi2019でドキドキライブコーディングした! #BuriKaigi

2019/01/26(土)に、宇奈月国際会館セレネ・延対寺荘で開催された「BuriKaigi2019」に参加し、「C# ドキドキライブコーディング」で登壇しました。

f:id:MRStar:20190129012228j:plain

Burikaigiでのドキドキライブコーディングは、3回目!

ドキドキライブコーディング自体は、4回目!!

私のBurikaigi(とその前身イベント)への参加は、5回目!!!!

toyama-eng.connpass.com

毎年毎年、この時期に富山に行くのが本当に楽しみです!


BuriKaigiは、毎年1月末に富山で開催される.NET & Javaのテクノロジに関する勉強会です。 富山や北陸の方だけでなく、東京や関西などからも多くの人が参加します。

C# ドキドキライブコーディング」は、

そして、私が、

  • @AILightさんが出すお題を、セッション中その場でライブコーディングでする
  • @AILightさんが事前に出すお題を事前に作成し、セッション中その場で競わせる

という、BuriKaigiの.NETトラックの恒例ネタ企画です。


今年の事前作成のお題は、

Base64エンコード・デコードの処理時間をきそう」

というものでした。

さて、「ネタ企画」と紹介しましたが、全力で真面目にやる「ネタ企画」です。

アルゴリズムで戦う」のではなく、「C#を駆使して、相手の裏をかいて倒す」という戦いです。ネタ企画です。

ここら辺の詳しい話は、私の資料の前半を見てみてください。

speakerdeck.com


今回の作戦名は、

「〜全てが0になる、全てがAになる〜」

です。

作戦はシンプルで、

  • 引数に渡ってきた「byteの配列」の全ての要素を0に書き換え
  • デコード結果もエンコード結果も常に一定
  • 爆速!!!!

「〜全てが0になる、全てがAになる〜」

という作戦名はデコード結果が全て0エンコード結果が全てA(と末尾に==)になることからつけました。


勝負の結果は、優勝です!

今回は失格にならなかった(?)です!嬉しい!初優勝!!!

ただ、内容的には完敗です。

実はまともな方法も用意していたのですが、Bit演算して、new string(char[])すること以上、何も浮かばなかった。

for展開するとか・・・・

正直、「試合に勝って、勝負に負けた」って感じです。

あ、ちなみに例年通り、「ライブコーディング」はダメダメでした。


ドキドキライブコーディングを観ていただいたみなさん、楽しんでいただけたでしょうか?

今年はしっかりと自分の役割を全うできたと思うのですが、いかがだったでしょうか?

今年の会場の、宇奈月温泉もとっても良い場所でした。夏にも行ってみたい!

富山には、ブリ以外にも、他の魚とか、白えびとか、イカとか、お酒とか、ラーメンとか、美味しいものがいっぱいです。

みんなもよかったら、行こうぜ!BuriKaigi!


以下、いろいろ振り返り!

IntelliJ IDEAの18周年キャンペーンにあたった、ありがとう!#IJ18Bday

IntelliJ IDEAの18才の誕生日、おめでとう。長く続くプロダクトってすげぇ!マジで!

18周年の記念ということで、「お気に入りの機能やTipsをハッシュタグをつけてツイートして」っていう懸賞が開催されました。

IntelliJ IDEA Familyには、Rider、WebStormそしてAndroidStudioと日頃からお世話になっているし、このキャンペーンに参加しました。

そしたら当選しました。ありがとうございます、JetBrains。ありがとうございます IntelliJ IDEA。

ありがとうございました!!!

DefinitelyTypedにちっこいプルリクを送ってみた

最近ウェブフロントをやり始めました、「むろほし」です。

TypeScriptの型定義ファイルの管理リポジトリDefinitelyTypedにちっこいPRを送ってみました。マージされました。

github.com

対象のライブラリはこちら、「js-yaml」。このjs-yaml最近アップデートがあって「noArrayIndent」というプロパティが追加されました。

で、最近追加されたこのプロパティの型定義が更新されていなかったので、「DefinitelyTyped/DefinitelyTyped」にプルリクエストを送ってみました。

README.mdの「How can I contribute?」を読んで、PRのテンプレートに書いてあることをやったか確認して、終わりでした。

boolean型のプロパティを一個追加するだけなので作業は楽でした。

他のPRを見るとわりとマージなり拒否されるまで時間がかかるかと思っていたのですが、寝る前にPR送って朝起きたら速攻マージされていました。

多分、

ってのが理由かなって思います。

今後ある程度の期間、TypeScriptにお世話になるので「どう言う手順でDefinitelyTypedにPR送るんだろう」っていうのを知れることができました。よかった!

手順もわかったし、そこそこ規模が大きい型定義ファイルがないやつとかあったら、またプルリクしていきたい。

金の弾丸と汚部屋の掃除

ズボラで掃除が苦手な30才独身男性プログラマが、お掃除本舗にハウスクリーニングをお願いした、というお話。

いやーめっちゃ綺麗になった。頼んでよかったー。


手狭な1ルームのアパートに4年住んでいる。

最近、掃除を頑張り始めたのだけど、それでも掃除をサボっていた箇所がある。

  • コンロ周り
  • トイレ
  • お風呂

の水回り。

たまには掃除するんだけど、ズボラな自分が掃除をしたところでそこまで綺麗にならない。 そして4年も住めば汚れもたまる。 特にひどかったのが、コンロ周り。ていうか一番サボっていたのがここ。きったねぇ。まじきったねぇ。


特にコンロ周りはサボりすぎて、掃除する気にならない。 道具もなけりゃ、テクニックもない。 ちょっとやったところで絶対に綺麗にならそう。 すんごい時間かかりそう。 何より大変そうだからやりたくない! だから汚くなるという無限ループ。


そこで出した結論が

「金の弾丸を使おう。プロに頼もう」


お掃除本舗

お手伝いパック : 15000円。

3時間定額でお掃除のプロがお手伝い

www.osoujihonpo.com


  • コンロ周り
  • トイレ
  • お風呂

の3箇所をお願いして、めっちゃ綺麗にしてもらった。

限られた時間だから、入居時と同様ピカピカというわけには流石に行かないけれど、満足している。

ていうか相談して、「完璧でなくていいので時間内で、効率よく3箇所を綺麗にしてください。めちゃめちゃ時間かかりそうな汚れとかは、パスしてください」って感じでお願いした。

満足。

あと、汚れが手強かったので、追加料金をお支払いして延長30分お願いした。(最初に「汚れが手強かったら延長をしましょう」って相談済み)


正直、安いお値段じゃなかったけれど、やってよかったと思っている。

実は、近くのアパートや同僚の住まいと比べてかなり家賃が安いところに住んでいるし、4年も住んでいるし、ってことで引っ越しも考えた。

けれどランニングコストが上がることがいやだったので、引っ越しはせずクリーニングをすることにした。

(家賃が安い分、推しごとに使いたい)


あと時間。

このレベルに掃除するには、確実に貴重な休日が丸々1日、いやなんなら2日は潰れたと思う。

ていうかここまでできないと思う。

貴重な貴重な休日を、2日間もしんどいこと・苦手なことに使いたくない。


(水回り以外の)掃除を頑張り始めてわかったのだけれど、「そこそこ綺麗な状態」から「とても綺麗な状態」に掃除するのは、「とても汚い状態」から「そこそこ綺麗な状態」に掃除するのと比べると、かなりコストが小さく感じる。

これはソフトウェア開発と一緒なのかもしれない。

今回、綺麗にしてもらったからある程度小さなコストで綺麗な状態をキープできたら、いいな。

できるかな・・・・

できるといいな。


安い値段ではないけれど、とりあえず、掃除が苦手な人は一回綺麗にするために「金の弾丸を使おう。プロに頼もう」っていうこともおすすめ。

個人ゲーム開発のウェブページ作った!

f:id:MRStar:20190108224303p:plain

趣味でゲームを作っています。その紹介のためのウェブページを作りました。

チームムロスタ

これからどんどん良くしていこうと思います!

使ったもの

  • Hugo
  • FirebaseHosting
  • CircleCI
  • Bulma
  • Google Domains
  • カタカナフォントパック

などなど。

以下、作った理由とか

ウェブのペットプロジェクトが欲しかった

自分のウェブのペットプロジェクトが欲しかったからです。

誰にも気兼ねすることなく、ツールやライブラリを「ちょっとこれ面白そうだな!」って思った時に、サクッと自分の権限で勝手に気軽に導入してみれるの、大事だと思うんですよね!

それもサンプルじゃなくて、生きているプロダクトで。

作ったアプリを紹介するページが欲しかった

メディアさんに紹介する時や、Twitterでシェアする時にウェブページがあると便利だなと思って、作りました。

iOSはこっち、Androidはこっち」

ってやるよりも

「アプリのウェブページはこっち」

ってやれるほうがいいなーって。

プライバシーポリシーをウェブ上に掲載する必要あった

アプリストアでのアプリを公開するには、プライバシーポリシーをウェブ上に掲載する必要があります。

  • AppStoreは必須
  • Google Playは広告IDとか使うならば必須

別にはてなブログとかに書くのでもいいかもしれないですけどね。

最後に

今年のスローガンの一つは、

「小さく、早く、多くのアウトプットをする」

です。とりあえず、公開できる最低限で公開しました。

別のスローガンは、

「作って公開したものはメンテナンスを続ける」

です。これからもっと良くしていこうと思います。

趣味個人開発ゲームアプリをUnity 2017.4からUnity 2018.3にアップデートした

趣味でUnity製のゲームモバイルアプリを作っています。今は、3個のゲームアプリをGoogle Play・AppStoreに公開しています。

2018年から2019年の年末年始でこれらのゲームアプリを、Unity 2017.4からUnity 2018.3にアップデートしました。アップデートしたものは、すでにアプリストアに反映されています。

この投稿ではその背景と作業内容を説明します。

Unityのアップデートサイクル

2018年の年末、TechリリースであるUnity 2018.3が出ました。これはLTSになるUnity 2018.4とほぼ機能的に差はないバージョンですね。

「LTSってなんだっけ? 」「Unityのアップデートサイクルってどうだっけ」という人は、次に紹介するブログ・資料でぜひUnityのアップデートサイクルを確認してみてください。

Unity の新しいリリースプラン:TECH ストリームと長期サポート(LTS)ストリームの導入 | Unity Blog

こちらのブログより。

TECH ストリームでの、あるメジャーリリースのサポートは、そのメジャーリリースの次のバージョンがリリースされると同時に終了します。

LTS ストリームでのリリースは 2 年間サポートされます。それぞれのリリースへの Unity のアプローチは上記に述べた以外の点でも変化します:

またこちらのユニティ・テクノロジーズ・ジャパンの黒河さんの発表がまとまっていて、とても参考になります。

learning.unity3d.jp

アップデートした理由

このタイミングで私がアップデートした理由を紹介します。


Q : Unity 2017.4 LTSがサポート期間があと1年間あるのに、なんで今したの?

A :

確かにサポート期間はあと1年あるね。 だから1年後に「Unity 2017.4 LTS => Unity 2019.4 LTS」ってアップデートも可能かもしれないね。 けれど2年間前のUnityからアップデートするのってかなり大変そうだから、Unity 2017.4 => Unity 2018.3ってアップデートにしたよ!

「あと1年間ある」っていうか「あと1年しかない」と思っているよ!

それからUnity 2018.xが.NET Standard対応してたからだよ。


Q : Unity 2018.3って今はまだバグが多いって聞いたけどなんで今したの?Unity 2018.4 LTSを待った方がよかったんじゃない?

A :

そうだね。Unity 2018.4 LTSを待つのもアリだと思うよ!

俺は年末年始のこのタイミングでしか、まとまった時間を取れない可能性があったから、今やったよ! 2018.4(LTS)がリリースされたら、またアップデートするよ! 2018.3は2018.4(LTS)とほぼ機能は一緒だから、2018.3から2018.4(LTS)へのアップデートはすぐできると予想しているよ。

会社のプロダクトとか、個人でも時間をかけているプロダクトとかの場合は、LTSの正式公開を待った方がいいと思うよ! だけどそんな場合でも、今からUnity 2018.3を試して技術調査とか、問題が出ないかとかをやってみた方が、いいと思うよ!


Q : Unity 2018.1や2018.2は試していなかったの?アップデートしていなかったの?

A :

Unity 2018.1や2018.2は面白そうな機能だけ試していたよ!

実は2018.2にアップデートできないか試したことがあったよ。1個のゲームアプリのアップデートを、実機デバックする所までしていたのだけれども、リリースする所までやっていなかったよ。(結局その作業ブランチは破棄したよ!)

アップデートして「はい、終わり!」じゃなくて、リリースするところまでやるのが大事だって思ったよ!

公開済みのゲームは、使いたい機能がない限り、LTSバージョンにだけアップデートする作戦、結構アリかなって思ったよ。


Q : アップデートしなきゃダメかな?今使っているUnity〇〇〇をずっと使うのはダメかな?

A :

「アプリストアのアプリをアップデートするためにXXX対応が必要、そのためにはUnityをアップデートしないといけない」みたいなことになると思うよ。

やっぱり継続的にアプリストアに公開し続けたいならば、どこかでUnityのアップデートはしないといけないと思うよ。

LTSサポートの方には、そういう対応が入ってくるだろうから、TECHストリームは無視するとしても、LTSストリームのUnityにはアップデートした方がいいんじゃないかな?

LTSのサポート期間は2年間だから、Unity 2017.4 => Unity 2019.4って更新もありだと思うけれど、2年間の差分を一気に更新するのは大変だと思うよ。

アップデートのための作業

自分のゲームは規模が小さく、Unityの利用機能も多くなく、使っているアセットも少ないので、作業量は多くありませんでした。

アップデートのための作業として、やったことは

です。

ちなみに、

  • コードはほぼそのまま。新しいC#の文法で書き換えとかはやっていない。
  • ライブラリはアップデートしただけ。SpriteParticleEmitterはLegacyなコードのままで新しいのに置き換えていない。

って感じで、今回はコンパイルエラーと実行時エラー、警告を修正しました。今の環境として適切なコード・綺麗なコードにするのは、次回のアップデートですることにしました。まずは問題なく動くものを、世の中に公開することを優先したかったからです。

下記のアップグレードマニュアルも見よう!

docs.unity3d.com

まとめ

自分の今年2019年の目標の一つは「作って公開したものはメンテナンスを続ける」です。

だから、作っている趣味個人ゲームアプリ3個は、しっかりとメンテナンスしていきます。まずその第一歩として、Unity 2017.4 => Unity 2018.3というアップデートを行いました。

まとまった時間がなかなか取りにくい可能性があったので、まとまった時間があった方が圧倒的に効率のいいUnityのアップデートを、年末年始休みに行いました。

多くの人はUnity 2018.4のリリース・その安定化を待つのもいいと思います。もし地雷踏んだら、情報共有してくれると嬉しいな!

みんなものゲームもUnityアップデートしていこうぜ!

アップデートしたゲーム

最後にアップデートしたゲームを紹介します。

遊んでね!


復活勇者 (Google PlayApp Store)

f:id:MRStar:20181229125929p:plain
復活勇者


スライムハンター (Google PlayApp Store)

f:id:MRStar:20181229130003p:plain
スライムハンター


にげろ、スライム (Google PlayApp Store)

f:id:MRStar:20181229130058p:plain
にげろ、スライム!

2019年の個人目標

2019年は20代で身につけたことを確認して、まとめて、棚卸しして、30代の方向性を決めていきたい。

35才でこの目標が達成できるように、2019年はその土台の準備をやっていきたい。

あと、年間目標が2017年・2018年うまくいかなかったので、今年は

  • 年間目標を毎月更新する
  • 年間目標をやめて月間目標だけにする

のどちらかにしたい。

定期的にやること

  • 毎日
    • 日記を書く
    • ツールで個人タスクを管理する
  • 毎月
    • 月の目標を決める
    • 振り返りブログを書く
    • 目標を更新する

スローガン

  • 作って公開したものはメンテナンスを続ける
  • 小さく、早く、多くのアウトプットをする
  • うわべでなく、基礎となる骨太な知識・知恵をインプットする
  • 「60才まで元気で働ける体」を作るための習慣をつける

数値目標

TODO 決める

1月の目標

  • 数値の目標を決める
  • 2019年の中期目標を決める
  • 体重を68kg台にする