株式会社Aimingを退職します
今日から有給消化です。
やっていたこと
早期出社のアルバイトから数えると、3年と3ヶ月勤めました。 ソフトウェアエンジニアという職種です。
Unity
最初の2年ほどは運用タイトルで、ほぼ Unity エンジニアとして機能追加や改修などをしていました。
クライアントの社内勉強会を(多い時で)毎週やったり、クライアントエンジニア間の情報共有の基盤作りにも注力しました。
Rails
この1年ほどは新規開発のプロジェクトで、ゲームのバックエンドを書いてる時間が長く、ほぼ Rails エンジニアでした。
気づけばチーム内では spec 書けおじさんになっていました。
デュアルキーボード
デュアルキーボードと Dvorak 配列に出会い、始めました。
デュアルキーボードのことは開発者ブログに書いたりもしています。
https://developer.aiming-inc.com/misc/dual-keyboard/
インドカレー
インドカレー部に入部し、新宿のインドカレーをたくさん食べました。
一番多く通ったのは、代々木の ruchi というお店です。
退職理由
裁量労働制がなくなる
コアタイムが10時からのフレックスになることが決まりました。
この1年ほど、体調を崩しがちになってからいろいろ試していて、 やはりがんばって朝から働くより昼くらいに出社する方がパフォーマンスを出せることがわかってきたところでの決定でした。
ただし、非同期でゲーム作るのが難しいことも一部認めており、会社の判断として間違っているとは思っていません。音楽性の違いみたいなやつです。
給料が上がらなかった
入社以来半期ごとにコンスタントに上がっていましたが、6月の査定では上がりませんでした。
やることやって、チームの改善の取り組みも頑張っていて、評価も良かったのですが、給与には反映されませんでした。 理由としては退職の機運を隠していなかったのが大きかったようです。
つまりさっさとやめろってことだなと解釈しました。
組織の文化が合わなくなってきた
あんまり詳しく書くと怒られそう。
- 風通しが悪くなってきた
- マネジメントへの関心がなかなか高まらない
あたりで自分で変えられる限界を超えていると感じたので、自分が環境を変えることにしました。 良くも悪くも大企業っぽく(イメージです)なってきたな、という感想です。
良かったこと
エンジニアのレベルが高い
新卒入社なのでまだ他の会社を知らない私でもそう感じるほど、技術力が高い会社だと思いました。 クライアントもサーバーも、強い人たちにいろいろ教えてもらってかなり成長できました。
運用と開発からのリリース両方経験できた
スマホゲーム開発のいろんなフェーズを経験できたのはとても良かったです。
立ち上げからみたいなのはできなかったのが少し心残りです。
次何するか
11月いっぱいは有給休暇と無職でお休みします。
この間は、積んでるアニメやゲームの消化と、なんか作りたいものを思う存分に作ったりします。 飲みのお誘いなどは大歓迎です。
次の会社は決まっていますが、入社してからまた書く予定です。 Twitter 転職のこともその時に書いたりします。
ちなみに xR です。
ほしいものリスト
様式美としてほしいものリスト載せておきます。 http://amzn.asia/a3wSYBn
それからねおりん Advent Calendar もよろしくおねがいします。 adventar.org
さいごに
仕事でお世話になった方々、プロジェクトは一緒にできなかったけど勉強会に協力・参加してくれた皆さん、 times でたくさん助言をくださった方、 そしてお疲れ様会を開いてくれたり、飲みに誘ってくれたり、退職祝いをくれた方々に、改めて感謝します。ありがとうございました!
『Unity x ARKit 入門Meetup』で LT しました
こちらのイベントにLT枠で参加しました。
会社に入ってから、社外の勉強会で発表するのはもしかすると初めてかもしれません。
発表したこと
「Multiuser AR Experience を ARKit + Unity で実装する」と題して ARKit を使った共有体験を Unity で実装するにあたってどういう選択肢があるか、というお話をしました。
こちらが発表の中でも紹介した MultipeerConnectivity の Unity 用ラッパーのリポジトリです。ふぁぼください。
フィードバックなどありましたら、(英語で書くのが億劫だったら日本語の Issue でもいいですし、 Twitter でもいいので!)いただければと思います。
ちなみに同じようなことを Qiita の記事にも書いています。
感想とか
AR の話こんなに濃密にできる時間が私には他にないんで、非常にエモという感じです。 引き続き個人としては AR やっていきの気持ちです。
あと勉強会の懇親会は、話しかけるのが苦手でぼっちになりがちなんですが、登壇しておくと話しかけてもらえるのでお得だなと思いました。 お話してくださった方、名刺交換してくださった方、どうもありがとうございました。
Windows の Unity でビルドした mac app を送るときは zip に気をつける
問題
Windows の Unity で mac ビルドしたとき *.app ディレクトリを直接 zip すると mac で unzip したときに、 Contents ディレクトリがルートになってしまいアプリとして起動できない
送る側は
(試してないけど)
テキトウなディレクトリにネストして zip すれば問題ないはず
(もしくはそういう zip オプションもあった気がする)
もし送られてきたら
要は *.app ディレクトリをつくって中に Contents を放り込めば良い
ただし finder では *.app ディレクトリは作れない(正確には作れるがドラッグアンドドロップできない)ので
ターミナルで
mkdir Hoge.app cp -R Contents Hoge.app
最後に
Windows で mac ビルドをしないといけない状況はなかなか起きないと思うけど、 いざというとき *.app ディレクトリの特殊さをしらないとハマりそうだなと思ったので記しておく
ゆいゆい*カンパニーにジョインしました
現職は退職していませんが、昨年の12月から ゆいゆい*カンパニー でオタクとして働いています。
入社のきっかけ
社長の小倉唯さんのことは数年前から一方的に知っていたのですが、 声、演技、歌、トーク、ルックス、どれをとっても非常に魅力のある方だなと以前から思っていました。
今回新会社の立ち上げという話を耳にした際に、ぜひ参加したいとこちらから申し出て入社に至りました。
業務内容
現職を続けつつスポットでお手伝いするような働き方をしています。
詳しいことはもちろん守秘義務違反なので書けませんが、
などといった感じです。
これから
小倉唯歴で4年程度、実務経験は1年未満とまだまだ経験が浅いので、まずはできることを増やしていきたいと思っています。 具体的には、 社長 Instagram や 社長 LINE ブログ へのコメントや前述ラジオへのメールなど、社長へのフィードバック業務が直近で覚えたい仕事です。
さいごに
ところで、武蔵野の森をうっかり2枚チケット取ってしまったのですが、連番希望の方は社内外問わずご連絡ください。
Unity で System.Net.WebSockets を使ったゲームサーバー書こうとしたらうまくいかない
今週ずっと悩んでる。
動機
なんとなくリアルタイムサーバーっていうか、 websocket でクライアントと繋がってるサーバーがどうなってるのかよくわかってなかったので、雑に書いてみたかった。 Unity をリアルタイムサーバーにしたければ、 NetworkManager とか使えばすぐできるのはわかってて、 適当に体験する分には楽かなと思って .Net 4.5 で入ったらしいそれで雑に書いてみたかった。
うまくいかないこと
HttpListener でリクエストを受け取って、ハンドシェイクするところが、どうにも websocket として判定されない。
var httpListener = new HttpListener(); httpListener.Prefixes.Add(uriPrefix); httpListener.Start(); while (true) { var listenerContext = await httpListener.GetContextAsync(); if (listenerContext.Request.IsWebSocketRequest) // これが true にならない {
全コードは最後に。
windows でも mac でもだめ。 Unity 2017.3 と 2018.1b10 は試した。 参考にした .Net のアプリケーションを実行しても同じだったので、 元のコードが悪そうだけど、どうすればいいのか検討もつかない。
Windows 7 で動かないという情報しか見つからない。久しぶりに"詰んだ"感覚を味わっている。
実装
一応載せておくけど、ほぼ下記のコピペ
WebSocket-Samples/Server.cs at master · paulbatum/WebSocket-Samples · GitHub
サーバー
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.WebSockets; using System.Text; using System.Threading.Tasks; using UnityEngine; public class Server : MonoBehaviour { [SerializeField] private string uriPrefix; void Awake() { StartServer(uriPrefix); Log("start."); } void OnDestroy() { Parallel.ForEach(_client,p=> { if (p.State == WebSocketState.Open) p.CloseAsync(WebSocketCloseStatus.NormalClosure, "", System.Threading.CancellationToken.None); }); } static readonly List<WebSocket> _client = new List<WebSocket>(); static async void StartServer(string uriPrefix) { var httpListener = new HttpListener(); httpListener.Prefixes.Add(uriPrefix); httpListener.Start(); while (true) { var listenerContext = await httpListener.GetContextAsync(); if (listenerContext.Request.IsWebSocketRequest) { ProcessRequest(listenerContext); } else { listenerContext.Response.StatusCode = 400; listenerContext.Response.Close(); Log("Response 400"); } } } static async void ProcessRequest(HttpListenerContext listenerContext) { Log($"New Session:{listenerContext.Request.RemoteEndPoint.Address}"); var ws = (await listenerContext.AcceptWebSocketAsync(null)).WebSocket; _client.Add(ws); while (ws.State == WebSocketState.Open) { try { var buff = new ArraySegment<byte>(new byte[1024]); var ret = await ws.ReceiveAsync(buff, System.Threading.CancellationToken.None); if (ret.MessageType == WebSocketMessageType.Text) { Log($"String Received:{listenerContext.Request.RemoteEndPoint.Address}"); Log($"Message={Encoding.UTF8.GetString(buff.Take(ret.Count).ToArray())}"); Parallel.ForEach(_client, p => p.SendAsync(new ArraySegment<byte>(buff.Take(ret.Count).ToArray()), WebSocketMessageType.Text, true, System.Threading.CancellationToken.None)); } else if(ret.MessageType == WebSocketMessageType.Close) { Log($"Session Close:{listenerContext.Request.RemoteEndPoint.Address}"); break; } } catch { Log($"Session Abort:{listenerContext.Request.RemoteEndPoint.Address}"); break; } } _client.Remove(ws); ws.Dispose(); } private static void Log(object o) { Debug.Log($"Server: {o}"); } }
20171225 - 20171231
水曜日、みのりんのライブに行った。
仕事休んで昼夜通してよかった。 とても元気になった。
茅原実里|Minori with Strings Quartet 〜弦楽四重奏の調べ〜 12月28日より音楽配信スタート! | News | Lantis web site
ずっと聴いてる。
今週はまあまあ趣味のコード書いた。
いい感じに書けていてすごく気持ちいい。
仕事はまあなんとか納まった。
金曜、焼肉してバー行って満足度の高い忘年だった。
おいしかった。
土曜、すしがコーヒー豆とお菓子持って来てくれたのでお茶した。
おいしかった。
帰省している。 予定どおりに家を出るのはやはり無理。
家庭環境比較的よくなっていて心は穏やか。
でもまあ本当はオタクコンテンツゆっくり楽しみながら年越ししたいし、 来年とかは正月に一泊とかだけしに来るくらいでいいかなって思ってたりする。。
今週は雑。
よいお年を。
20171218 - 20171224
今週も相変わらず体調よくない日が続いた。寒い。
あんまり年末感ない。
今年一番くらいにめーっちゃめちゃめちゃめちゃうれしいニュースがあって
声優の石原夏織さんがソロアーティストデビューすることが発表された。
今年一番悲しかったニュースが、ゆいかおり活動休止で
ぼくは小倉唯ちゃんのファンなので、今年後半のゆいたまの活躍ぶりはそれはもちろんうれしかったのだけど、 一方で、たまに更新されるキャリさんのブログを見ては少し寂しい気持ちになったりしていた。
そんなわけで、なんとなくゆいかおりの曲を聴くのを避けていた時期もあったのだけど、 このニュースがあって、本当にうれしくて、ちゃんと前に進んでいるんだよかったーって。
ぼくもがんばろって思いました。
来年も、ふたりのことを応援していきたい。
t.co キャリさんの魅力がよく出ているインタビュー記事。良い。
ところで、ゆいゆい*カンパニー早速入社した。
金曜は会社で飲酒LT大会した。
すごい盛り上がって楽しかったし 声かけた人みんな来てくれて、うれしかった。
ウイスキー飲みすぎてすごい泥酔した。
土曜日はうちで、だいたいいつもの感じで忘年会した。
食べ物がいっぱいあって幸せみが高かった。
最近の中では真面目なことしゃべった方な気がする。
日曜は、昼過ぎまで寝てて、部屋を片した後 バルド・マスターピース・クロニクルとカサブランカの騎士を開封した。
とりあえずCDが全部で15枚くらい取り込みして大変だった。
とにかく嬉しいのが、バルドスカイの主題歌音源が手に入ったこと。 めっちゃ好きなのでテンション上がっている。
今期アニメ、このはな奇譚と少女終末旅行は最終回も本当にすばらしく、尊かった。
開発はほとんどすすんでない
今週ただのオタクブログになってしまったな。