2016年やること
あけまして
おめでとうございます!今年もよろしくおねがいします! pic.twitter.com/yfzYLZwKW3
— きょこみ (@k_yokomi) 2015, 12月 31
去年の振り返り(続)
年越して改めて2015年振り返りを見直すとかなり雑だったので補足がてら2015年のまとめ書いてから、今年やることを書こうかなと思います。
上記見直すと、転職して1年間とにかくGoを書いてLTしたり発表してみたりという感じです。 あとは色々な人と出会った年だったと思います。(転職によって人脈が広がっていく感じですかね)
各分野のスペシャリストや、天才的な若手エンジニアと一緒に仕事できたのも刺激的でした。
他にもユーザーへサービス提供すること、システムを運用することに対する考え方がとてもしっかりした方と一緒に仕事ができたのは、今後の人生を左右するくらい学びありました。
またそういった正論だけでは仕事は成り立たないのだな・・・という闇も同時に見ることができて、激動の1年でした。(自分としては、うまく折り合いをつけていきたい)
2016年やるつもりのこと
- 今作っている個人開発の放置ゲームを完成させる
- 脱エターナルする
- Androidアプリ開発を再開する
- 1年サーバーやったので、クライアント側もちゃんとできるようにする
- インフラ周りの知識をつける
- Dockerは何となく使えるようになったけど、まごころが足りない...
- Goは引き続きやる
- まだまだ理解足りてないので、1〜2年は書いていきたいと思っている
- Scalaそろそろ入門する
- Goだけじゃなく、固い言語も学んでおきたいので
- 英語やるぞ...
- 脱中学英語レベル
ざっくり言うと、 今の方向性でしっかりと地盤を固めつつ個人ゲーム開発の脱エターナルする感じでいきます。
2015年振り返り
毎月最低1記事はブログを書くという自分ルールを達成するため(?)にこの一年を雑に振り返ってみようかと思います。 技術関係ないネタも多めなので、お気をつけ下さいませ・・・
1月
- ゲーム会社を退職して、ニュースの会社に転職した
- 仕事でGoを書き始めた
2月
- 仕事で必死だったのでよく覚えてない
- 仕事で必要だったのでReactとか触ってた
3月
- Gunosy Go利用の現状確認会 - Gunosy.go#11 -を主催
- https://github.com/kyokomi/renkinを作ってた(go generate系がお気に入り)
- [PSVita] 神次次元ゲイム ネプテューヌRe;Birth3 V CENTURYをクリア
会社ブログ
Gunosy.go#11を開催し、GunosyのGo現状確認を行いました – Gunosy Tech Blog
スライド
4月
- 趣味開発の集まりで開発合宿に行った
- 妖精帝國の臣民Liveに初参加
- GolangNotHttpNight(Gunosy.go#12)を主催
- DroidKaigi参加した(発表なし)
- ニコニコ超会議に初めていった(疲れた)
- PS4買った
開発合宿主催者のブログ
DevMorning合宿ハッカソンを12人で開催しました!devmorning.wordpress.com
スライド
5月
- GWにMeetAppというサービスをリリース(前月の合宿で作ったプロトタイプを一応完成させた)
- [PS4] 新次元ゲイム ネプテューヌVⅡをクリア
MeetAppの構成とか書いたブログ
いま見てもコードが雑すぎるのでいずれなんとかしたい・・・
MeetApp
6月
- GolangTips(Gunosy.go#13)を主催(少数人数で飲みながらワイワイやるLT楽しい)
- BattleHackに出た。惨敗(疲れた)
- Go Conference 2015 summerでLTした
スライド
BattleHack
とにかくタダで参加できるイベントとは思えない飯とか設備だった。 ただ、インターネッツ不安定なのが結構辛かったのも覚えてる。
7月
- 引っ越した
- ドラム式洗濯機を買って人生変わった
- 羊一等まるごと食うイベント
- ジムに通い始めた(2ヶ月で解約したけど)
- GitHubの草活が367達成して埋まった(後半すごいのは、仕事がGithub.comなので)
- github.com/kyokomi/lotteryを作った
草
8月
- YAPC2015参加(発表なし)
- 夏コミに初参加(gregさんの手伝いで参加して、スルっと入れた)
- 前職の人たちと2015年2回目の沖縄に行った
9月
10月
- テキサスホールデムにハマる
- オクトーバーフェストに行った(昼からビールクズキメた)
- 次世代Webカンファレンスに行った(発表なし)
11月
- GAE/Goにハマり始める
- [PSVita] 激次元タッグ ブラン+ネプテューヌVSゾンビ軍団をクリア
12月
- [PSVita] 魔壊神トリリオンをクリアした
- Go Conference 2015 Winterで発表
- エムスリー x Gunosy Beer bash!(Gunosy.beer#1)でLTした
- また引っ越した
- eureka Go ~pairsのGo言語フルスクラッチの舞台裏〜に行った(発表なし)
- Go Advent Calendar 2015の13日目を書いた
- Gunosy Advent Calendar 2015の16日目を書いた
スライド
Advent
おわり
ざっと1年振り返って最後の方は写真も貼らず雑になりましたが、色々やってました。 やろうと思ってたことで実現できなかったことも多いので、来年何するかとかはこれから考えます・・・。
Goのslackbotを改良したのと、プラグイン増やしたので紹介
以前のGoCon 2015 SummerでLTしたkyokomi/slackbotですが、 かなりリニューアルしたので、改めて紹介しようかと思います。
大きな変更点
- x/net/contextの依存をやめた
- 魔法みたいになんでも出てくる感じで分かりづらかったので
- importするだけの実装をやめた
- importする順番をきにしたり、魔法っぽい感じがわかりずらかったので
- プラグインに
help() string
メソッドの実装を強制した- systemコマンドっぽいのでhelpをまとめて出せるようにしたかった
実装例はこんな感じ。
package main import ( "flag" "net/http" "os" "github.com/kyokomi/slackbot" "github.com/kyokomi/slackbot/plugins" "github.com/kyokomi/slackbot/plugins/echo" ) func main() { var token string flag.StringVar(&token, "token", os.Getenv("SLACK_BOT_TOKEN"), "SlackのBotToken") flag.Parse() bot, err := slackbot.NewBotContext(token) if err != nil { panic(err) } // pluginを追加する bot.AddPlugin("echo", echo.NewPlugin()) // joinしてる部屋全部のeventが来るので注意 bot.Run(func(event plugins.BotEvent) { if event.ChannelName() == "#general" { event.Reply("起きた") } }) // herokuとかで起動する用 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("OK")) }) http.ListenAndServe(":8000", nil) }
追加したプラグイン
sysstdプラグイン
- システム系のプラグイン。基本的にbotContext作るときに強制的にAddPluginしてる
- Timezone周りの設定や、help表示、linux commandの実行などができる
<@bot_name> <command>
でcommandの所には、help
とかtimezone
とかcommand ls -al
とか入力する
コハエース画像プラグイン
koha
というキーワードで雑に反応する- 経験値先生が放出したLINEスタンプになるはずだった画像を表示する
- 先月のブログで雑に紹介済みなので割愛
google画像プラグイン
あかりプラグイン
<キーワード> 大好き
に反応して、わぁいxxxx あかりxxxx大好き
をする
Twitterでお気に入りした画像をランダムで返すGAE/Goアプリをつくった
ランダムで返す部分が雑にキャッシュしてるのはご愛嬌・・・
https://koha-api.appspot.com/v1/api/image
画像はこちらを利用させていただきました。(経験値先生最高です!さっちん絵がほしかった・・・)
というわけでお蔵入りじゃから、ツイッター画像とかで使ってくれなのじゃ。あ、営利目的には使用禁止で頼むのじゃ。 pic.twitter.com/4QWYf45SuM
— 経験値@コハエースXP(9月頃発売) (@keikenti) 2015, 9月 30
注意!!!営利目的でのご利用はやめてくださいね!!!
お気に入りは適当にアカウント作って作りました。
GAE/Goの実装の方ですが、かなり雑ですが以下になります。
使い方はREADME.mdに書きましたが、 環境変数だけで一応どのアカウントにも対応できるようにしてます。
需要があれば、もうちょっとなんとかします!
主な使い方ですが、LGTMとかみたいな感じにAPIクライアント作ってしまえばいいかと思います。 自分はGo製のSlackbotでAPIクライアントを実装しました。
シルバーウィークにいよいよUnity入門した
はじめに
最近Goばかり書いてるのですが、今作ろうとしてるゲームをCocos2d-xで作るのは流石にもう辛いので、コレを期にUnity入門することにしました。
シルバーウィークの月〜水の3日間でサクッと1冊本読み切ってExampleを2,3個作るとこまでやりましたので、その所感とか。
準備したもの
Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発
- 作者: 吉谷幹人
- 出版社/メーカー: ソシム
- 発売日: 2015/07/24
- メディア: 単行本
- この商品を含むブログ (2件) を見る
細かいミスだけど、正誤表あるので先に見ておくと良いです。 今の最新版のUnity5.2で挫折しないで最後までいけたので、すごいと思います。 自分みたいなガチ入門者向けかと。
正誤表はこちら => http://www.socym.co.jp/support/s-967#ttlWrong
- 出版社/メーカー: ロジクール
- 発売日: 2013/08/02
- メディア: Personal Computers
- この商品を含むブログ (24件) を見る
トラックパッド派なんだけど、流石に三次元の動きをトラックパッドで操作するの限界を感じて以前Unity挫折したので先に買っておいた。 買ってよかった・・・普通のマウスでも良かったかもしれないけどUnityで全然使えました。
環境
- Unityv5.2.0f3
はるか昔にUnity4になる前に触った頃に比べてサクサク動いてる気もするし、色々わかりやすくなった。 買った書籍がよかったのかもしれないけど、ストレスはほとんどなかった。
あと、マウス買ってよかった。以前にMacのタッチパッドでUnity操作しようとしたの無謀だった。 クリックしたまま引っ張るとか、回すとかかなりのテクニックがいるのでおとなしくマウスにしよう。
トラックボールだとマウス移動自体がないので場所も取らなくて楽だった。
Editorやばい
- Xamarin Studio: 日本語入力できるけど、日本語変換後の入力がスルーされることがあり結構ストレスだが、軽さや補完など平均点は維持してるのでコレに決めた
困ったこと
「変換が」を入力したつもりが「変換あ」になる
「変換」の時点でEnterをして確定してから「が」を入力すればいいのだが、「変換」の確定を「g」の入力でやる癖がもう抜けなくて辛い。(これ文章で説明してわかるのかな・・・)
他にも試したEditorたち
- MonoDevelop: まだ日本語入力できなくて消耗してるので没
- ReSharper: JetBrains製品好きとしては・・・と思ったがまさかのMac版なくて/(^o^)\
- VisualStudioCode: 一番ナウい感じなんだけど、Unity5.2での補完のきかせ方が分からず挫折
- 痛MonoDevelop: 惜しい所まできていたが、Unityちゃんの描画のためか重くなり没
色々教わったこと・学んだこと
- .gitignore設定しよう => ここにある
- 「Asset Serialization」を「Force Text」にする ※こちら参考にテラシュールブログ - Unity開発者が複数人で開発を進める上で覚えておくと幸せになる9つの事
- git initだけじゃなくてちゃんとこまめにCommitしよう(1回死んだ)
こんな感じでやってた
- まず章を1つざーっと目を通す
- 何作るかと何するかをざっくり把握してから、実際にExample作成の手を動かす
- とにかく作りきる
- 気が向いたら、ちょこっと改造する
こんな感じにキャラをUnityちゃんにしてみたり。
本読みながら、ポチポチ入力してくのもいいけど、結局図の方ばっかりみちゃって説明読み飛ばしちゃう気がする・・・(図だけで十分作れてしまうのもすごい)
なので、ざっと1回読んでから戻って作って行く感じでやっていくと、頭の中で整理もできて丁度良かったです。
C#なんとなく書ける
なんとなく書けるの良くない。もうちょいUnity自体の理解が深まったら、改めてC#も入門する。
(学生の時になんとなくC#書いてたから、軽く8年ぶりくらいか・・・)
所感
ようやくUnity入門してスタートに立てた感じ。Asset周りがなんか有料ばっかでゾッとしてるんだけど、まあ基本的な機能は揃ってるので、しばらくは手抜きしない方向でいこう・・・(素材周り以外は)
UnityちゃんかわいいよUnityちゃんかわいいよ
GitHubのREADME.mdに貼ったBadgeが更新されない時
なんかRefreshするタイミングとかミスすると更新されないときがあるので、手動でなんとかする方法。
こんなとき↓
↑のBadgeの画像URLをコピペして、こうする
$ curl -X PURGE https://camo.githubusercontent.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx {"status": "ok", "id": "xxx-xxxxxxxxxx-xx"}
そして、ブラウザを更新すると反映される。
参考
Aggressive image caching breaks image badges · Issue #224 · github/markup · GitHub
Goでlotteryという抽選ライブラリを作った
単なるmath/rand
のラッパーですが。
もしかしたら他にも似たようなやつあるかもしれませんが、見つからなかったので作りました。
指定した確率
20%の確率で〜みたいな処理をしたいときです。
lot := lottery.New(rand.New(rand.NewSource(time.Now().UnixNano()))) if lot.Lot(20) { // 20%の時の処理 }
抽選リストから1件抽選
以下のような複数の抽選対象から1件だけ抽選するときのinterfaceもあります。
- A: 10%
- B: 20%
- C: 30%
- D: 40%
Prob() int
というインターフェースを実装すればOKです。
type DropItem struct { ItemName string DropProb int } func (d DropItem) Prob() int { return d.DropProb } var _ lottery.Interface = (*DropItem)(nil)
抽選はこんな感じにやる。
lot := lottery.New(rand.New(rand.NewSource(time.Now().UnixNano()))) // 抽選対象リスト dropItems := []lottery.Interface{ DropItem{ItemName: "エリクサ", DropProb: 10}, // 10% DropItem{ItemName: "エーテル", DropProb: 20}, // 20% DropItem{ItemName: "ポーション", DropProb: 30}, // 30% DropItem{ItemName: "ハズレ", DropProb: 40}, // 40% } // 抽選 lotIdx := lot.Lots(dropItems...) if lotIdx == -1 { // errorです(抽選リストの指定ミスかと) } // 抽選結果のItem dropItem := dropItems[lotIdx].(DropItem)
以下のテストコードも参考にしていただければと。
lottery/lottery_test.go at 2c0264f14a47bf1be830ae12d2c84a90ce9f1ffa · kyokomi/lottery · GitHub
200万回実行した結果は以下になります。
2015/07/26 15:51 追記
@k_yokomi こんな感じにも使えていいですね!https://t.co/mlA7qfHv5z #golang
— taku ʕ ◔ϖ◔ʔ ==Go (@tenntenn) 2015, 7月 26
@tenntenn さんが「袋の中に球が3種類入っていてそれを順次取り出して行く」ような使い方を見つけてくれたので、紹介させていただきます。
ありがとうございます!