仕事の総括: 1912-2002_機械学習支援ツール
機械学習の案件をやったとは口が裂けても言えないけれど、機械学習「関連」の案件をやった。
概して
- 2案件目
- ちょっとweb
- 言語: Python3系, R
- フレームワーク: Flask
- インフラとか: CentOS, gunicorn, nginx, 細かいバージョン覚えてない...
- フロントはAngularだったけど、ボスにお任せだったので全然触れてない
機械学習と呼ばれる領域の知識は全然なかった。ボスにはちょっとあった。わたしは大学でちょろっと統計やった程度。お客様から大量のRのサンプルコードをもらい、それを整え 、サーバーに乗っけるような案件だった。エンジン部分(前処理や統計の計算)はRで実装。PythonはAPIなど。ここら辺が今回のわたしの職域になった。本当はフロント側にも手を出したかったけど、コードを読むことすら全然できてない。SPA作るのやりたかったけども。
よかったところ
- 担当した部分についてはわりとお客様とガッツリやりとりしたかなと。Issueぶん投げられたりなんなり。
- 全体のAPIの設計ができた。画面設計書とかAPI設計書を作った感じ。チーム内でフロント/サーバーをきっちり分担し、納得のいく設計書を作ったおかげで、結合で驚くほどあっさり済んだなという学び。
- PythonもRも共通処理のlibsは結構な量を書いたと思う。実用性もあったみたいで嬉しい。関数は役割ごとにミニマムにわけ、結構きれいに書けたんじゃないかという感じ。前の案件の反省の活かしでもある。
- Rちょっと覚えた。うっすらとした機械学習周りの知識。大学でMATLABやっててよかった!
- 初Linux, VM。ツールまわりで結構新しく覚えることが多かったと思う 。
-
ほぼ遅れなしの進行。ボスとの相性がよかった。
よくなかったところ
- webの案件だったけど、案件自体が"プロトタイプ作成"という位置付けだったから、通信部分を本格的に作り込んだわけじゃないこと。セキュリティなど。
- インフラが全然わからん。慣れたい。
- DBとかやらんかったな、そう言えば。Sqlalchemyの技術調査をしたくらい、
- Angular結局全然やってない!
- Rでドハマりして、なんだかんだ30hくらい残業して面談になってしまった。
- ほぼ遅れなしというのは嘘かもしれない。
雑感
事前に統計の知識を持っていたり、MATLABをやっていたりしなければ、案外あっさり詰む案件だったのではないかという怖さ。*1 そういう意味では、自分が大学までに「学業」として真面目にやっていた部分に救われた面が多かった。
少し特殊な案件だったのかもしれない。webサーバーにアプリケーションを乗っけて、APIでクライアントとやりとりするわけだから、一応webの案件……になるのかもしれない。だけど、どちらかと言えばRのエンジン部分が肝だったと思う。その大事な部分を生半な知識で実装したのだから、本当に大丈夫か?と心配になってくる。コードレビューは隅々までしてもらえているから、きっと大丈夫と信じている。
認証機能を作ったり、DBにそれを突っ込んだりと、どことなく"Webっぽさ"を感じる経験はできていない。HTTP周りの通信関係の経験が詰めなかったのが惜しい。
インフラ周りの知識をつけたい。今回はボスがすいすい開発環境を作ってくれたので、それにおんぶに抱っこになってしまった。多少知識が着いたところはあったが、一から自分でやれとなると、LinuxのVMを立てて、nginxとgunicornでFlaskを動かして、Node.js入れてAngularを動かして……というのは完全にお手上げだったと思う。
Rって何なの
Rでのつまづきが多かった。いろいろ嵌ったところは多かったと思うけど、たとえば「リスト」が他の言語でよく使われるそれとは全然違うところとか、理解するのにわりと苦労した。リストというよりか、もはや一般オブジェクトって感覚なのだろうか……。
・l <- c(l, hoge)
appendに当たるものがないからベクトルにリストを入れるような書き方でリストに要素を追加する。
・l <- c(l, list(hoge))
リストにリスト入れたい時はなんかこんな感じの書き方したと思う。
・l <- unlist(strsplit(str))
文字列を分割し、リストにしたい時。unlistしないと我々の知る「リスト」にならないところがウケた。
・l"hoge" l$fuga
書き方によってはプロパティへのアクセスの仕方が違い、型が変わったりする。
・apply lapply sapply tapply
使えたらかっこいいけど、型の制限で微妙に使う機会が少なかった高階関数。
・name(l) <- hoges
今さらだけど何でこれで名前つくんですかね…?
こういう感じのところ。(((あまり詳しく覚えてないから間違ったこと言ってるかもしれない。)))
オブジェクトへの値の格納は、似たような感じでベクトルもマトリクスもデータフレームも書ける。しかし実は、matrix["hoge"]はいけるけど、dataframe["hoge"]は無理なのでdataframe[, "hoge"]と書けとか、それがdataframe$hogeだと出てくる型が変わるとか、いろいろ落とし穴があった。
型にゆるいように見えて、実はそこそこ強い制限があり、初見を殺しに来ているような気がする。理解すれば書くのは楽だし、そんなことまで出来るのかというパッケージが多いので、勢いよくバシバシ作っていく分には楽しいと思う。作ったあと読むのが大変。
自分は大学の研究室で画像処理をMATLABでやっていた経緯がある。そのおかげで、ベクトルや行列を計算の基本単位にするような感覚はすぐ順応できた。しかし、ボスや同期は「着いていけない……」と、はっきり口にしていたくらいだったから、一般的には壁を感じるものなのかもしれない。自分が初めてMATLABに触れた時はプログラミング自体も初めてだったから、あの頃の感覚はよくわからない。
次回
Javaの一般的なwebアプリケーションの機能追加だそう。1案件目がモバイルアプリ、2案件目が機械学習関係なので、図らずもモダンな路線を行ってる気がするが、この辺で一般的な案件で地力を着けられるのはちょうどいい気がする。新規開発とプロトタイプの開発しかしてないというのもあるので、既存の製品になっている他人のコードを読めるのも経験値としてありがたいと思った。*2
PythonとRから離れるのがちょっともったいない感じがする。
仕事の総括: 1907-1912_androidアプリ
仕事について節目節目できちんと振り返っていこうという試み。あくまで個人的な振り返りなので、技術な部分は書きません。
概して
- 転職して、というか、エンジニアの会社に入って初めての案件。
- androidのアプリ開発。iOS版もやるはずだったけど、諸般の理由でやれず(後述)。
- 言語としてはKotlin。MVVMをやろうとボスと話していたが、工期的なヤバさがあり途中で断念、死亡、MVCっぽい何かに強引にシフトされていった。
- サーバーサイドは関連会社の開発だった。
結論から言うと
よかったところ
- androidに関してはなんだかんだチームで一番書いた量が多かったと思う。アプリ全体を設計に絡めた。
- 技術調査を任されたので結構がんばり、サンプルコードを量産できた→他の新人の開発の捗り。
- 障害対応経験。
- サーバー側のAPI周りもちょろっと設計した(なぜか)。
よくなかったところ
- タスク切り分けがへた。抱え込みすぎ。
- 十分な技術調査とは言えなかった。OSバージョンによる差異がきつかった。非同期処理がゴミ。
- (事情が事情とはいえ)結局iOS版やれなかった。androidとiOS両方ともやるチャンスを逃す。
- 客対応をボスに任せっぱなしであまり情報を積極的に取りに行けなかったところ。遠慮しなければよかった。
雑感
そもそも我々のチーム構成は、
- ボス(5年目)
- わたし(未経験の猿)
- 同期転職者と新卒氏(二人とも未経験)
という感じだった。
新人3人もおって大丈夫かー????と思っていた。
↓
大丈夫じゃなかった。
月の残業時間はMAXで80hほどだったから、体感ちょっと多めだな〜という感じだが、普通に定時で帰る他のチームからは「深夜レギュラー」と馬鹿にされていた。9月以降はほとんど毎日終電になり、β版納品後の打ち上げの時に、新卒の人がしんどすぎて泣き始めたのが印象的だった。わたしの転職同期はストロングゼロを帰りの電車の中で毎日飲む人間になってしまった。公共の迷惑だから逮捕されたらいい。
わたしは比較的長時間労働に耐性のあるようなので「まぁこんなもんやろ」と構えていた。そしたら自分だけが面談に呼ばれ「お前の心も本当はヤバイんじゃないのか?ほんとのこと言うてみ?」と聞かれる回があった。悲しいがどうもこうもない。平気なだけだ。
わたしは「長時間労働キャラ」として定着しそうになっており、普通に会社からの評価が下がりそうなので正直全然笑えない。
愚痴
そもそもマネジメントの会社がお客様と我々の間に入っていたはずだが、そのマネージャーとそのマネージャーのボスがお客様や関連会社の居る前で激しい舌戦を始めるくらい相性が悪かった。
マネージャーに聞いても情報が全然降りてこないのが普通で、マネージャーのボスに聞いても彼と会ってないから分からないという(君たちは会社で何してんの?)。
お客様への連絡先はなぜか教えてもらえない。はぐらかされてしまう。
我々は確実に分かっているところを作る。そして知りたかったことが分かる頃には仕様が土台から変わっている。お客様のお偉方から連絡が来て、仕様の変更を指示される。変更すると、別のお偉方からなんでこんなことをしたと言われる。長い会議がある。まるごと一機能が消える。増える。
デザイン会社が降りる。
そのうちExcelにビッシリ書かれた不具合・要望・何が言いたいのか分からない指示・理解できない日本語が送られてくる。マネージャー氏が手元でずっとチャージしていたものだ。
それを1個ずつ指摘を加えたり、各会社に振り分けたりする。ボスとわたしがそれに製造工数を取られる。
サーバー側からAPIが上がってこない……。
「β前日にアップします!」と言って夕方に上げられてきたAPIは、仕様を完全に無視して作られていた。夜通し繋ぎこむ。その忙しい時に、マネージャー氏がアポ無しで打ち合わせに来る。追い返す。次の日の朝来る。彼はお客様に送るメールの書き方を我々のボスに教わる。結局ボスが書く。
FIX版の納品が2ヶ月先になり、その間にRC版1、RC版2の納品期日が新たに設けられた。それらの納品後にも仕様は膨らんでいき、そのたびに"納品"した(何回も納品をしているので何を以って「納品」と言うのか分からない)。結局、アプリの審査期日のギリギリまで開発していた。
最後の最後にはマネジメントの会社から詫びの箱菓子が会社に送られてきた。キットカットだった。
障害対応
初めの予定では前半でandroid、後半でiOSを全員でやるはずだったが、チームの中でわたしだけがandroid版に残って障害対応、他の人はSwiftでiOS版の開発という運びになった。
わたしがandroid版に残ることになったのはボス以外で一番アプリ全体を把握している人間になっていたから、という理由だった。
正直、初めの一案件で両方のモバイルアプリが作れるのはキャリアとして美味しすぎると感じていたので、この配置には内心がっかりした(薄々予想してたけども!)。
iOSもやりたいとボスには伝えていたので、会社の上の方には掛け合ってくれたそうだけど、ボスのボスが「android破綻するから…」と許さなかった。かなり謝られたので別に恨んだりはしていない……。*1
ただ、毎朝上がってくる不具合報告に対して調査し、タスクを切り分け、アプリ側なら改修し、リリースノートを書き、夜までにお客様に報告するというサイクルを一ヶ月間ぐるぐる規則的に続けたのは、わりといい経験だったと思う。
他人のソースコードのまずい所に目ざとくなったし、こういう形での客対応も次のステップに繋がる良い経験だったと思う。(全然こっちの言いたいこと伝わってね〜ってことが沢山あったので右往左往したけど)
技術的におもろいと思ったところ
- BLE。今回は既存のライブラリに頼って開発したけど、がっつりやってみたいかも→IOT的なものへの興味→医療器具とか楽しそう。
- プッシュ通知の実装。Firebase便利すぎてすごい……。
- やっぱMVVMでやりたかった。
- Kotlin書くの楽しい……。
- スマホのミドルウェアとかってどーなってんの。
- android developperを読むのが大切。
技術的に敗北したところ
- androidはOSのバージョンの違いがすごく大きいです……。バックグラウンドで動くBLEやFCM周りの処理がバグりまくってた。ユーザーの知らんところで動かすのに年々厳しくなっているそう。パーミッションの要否等。
- チャイニーズのカスタムOSでも挙動が異なるとかある(Oppoが申し送りに……)。
- というかandroid開発って全般的に「皆これどーやって実装してんのぉ?!」って言いたくなること多くないですか……?
- なぜ世間一般のアプリは普通に動くのか不思議……。
*1:ぶっちゃけた話だと、かなり貢献したはずなのにこれは無い!という感じ。
日記: 190527-190625_研修終わる
気づいたら1ヶ月近く日記を放置してしまっていた。働き始めてからというもの、日々なんとか時間を捻出しようとしているせいか中々「日記を書く」ところまで発想が至らないのかもしれない。
研修が今週いっぱいで終わる。Java ServletとOracle DBで簡単なWebアプリを作るという演習をやっていて、今日はその提出日だった。できた。今週末は合同誌の方も進捗を出してページ数を出さないといけないから、中々ハードワークな感じがある。すでにキャパがオーバーな気がするが、明日からは定時に帰れるから大丈夫なはずだ……。
実のところ残業はあまりつらくない。研修先にいる間は自主学習、という名目で残っているから残業代は付かないのだが、それがかえってノープレッシャーなので全然楽である。その分、家に帰った後はメリハリが付いて読書に専心できる。業後に残っているメンツは結構意識が高い人たちなので不愉快な感じもない。眠いが。
今日は早く帰ったのは提出日だったのもあるけど、何より病院に行く日だった。病院に行くのはおよそ2ヶ月ぶりだったから、先生に「元気?」と言われるところから始まった。「元気です」と答えた。
4月分の傷病手当金の書類を書いてもらう。前の会社に立て替えてもらっていた分の税金の請求に背中を打たれている。結局、税金を引かれても10万以上は手元に残るから臨時収入のようなものだと思いたい。貯金する。
去年の夏にポンコツ化してからずいぶん長い時間を過ごしていた感じがする(病院の帰りにそんなことを考えていたら、この日記の存在を思い出した)。初めて赤羽の病院まで行った時に比べると、海馬にできた隙間が埋まってきた感じがする。プログラミングはやればやる分できるから楽しい。少なくとも今のところは。
去年の冬のことを考えると、これは今まで一番キツかった期間だったから今は悪くない充実感がある。今のところはやればやる分だけ人生ゲームの駒を進められているような感触がある。やっと自分の生活ができている。
来週から上司が出来るからどうなるかしらんけど。
日記: 190511-190526_余暇、虚無化
やることがない。
本当は勉強したり合同誌の書き物をしないといけないはずなのだが、全くやる気が起きない。明日は研修でテストがあるのだが……。
こういう時はコメダのコーヒーに行ったりするといいのだが、ノートPCがもうダメそうなので如何ともし難い。
研修はぬるい。自分で思ったよりしっかり勉強できていた。かなり余裕があるので平日は帰った後に2,3時間程度勉強する余裕すらある。ので、平日はどれだけ時間があっても足りない、なんてことを思っているが、いざ休日に突入するとメリハリを失ってしまい、やるべきことに手を付けられない(珍しい話じゃないが)。何かのきっかけになればと、こうしてブログを書いてみても、うーん、書きたいものが無い。いつものようにスラスラと言葉出てこない。
アウトプットができないのは、きっと平日に勉強ばかりしているからインプットが足りてないせいだと思う。アベンジャーズを見に行くしかないので、見に行こうかな。金がないけど仕方ない。アベンジャーズは見なければいけない。
日記: 190502-190510_研修と独学
5/7から研修が始まった。
結局、令和初日にひいた風邪をこじらせて今も鼻水が出る。研修初日なんかは終始鼻をかんでいて、2日目にして隣の人に“めっちゃ鼻をかむ人”と認識されてしまった。治りが遅い。この土日でしっかり治さなければ。
研修の内容はぬるい。昨日まではビジネスマナーや情報セキュリティ等といった抽象的な内容で眠気を噛み殺すのに辛抱が要った。今日はJavaの基本構文といったところ。まだ変数すら宣言していない。余裕すぎる。予習が大変効いている(それなりに参考書代は掛かっているが)。
ともかく今週は帰った後にJavaのテキストを1章分進めることを平日に続けられていて、中々いい感じだった。
今のテキストはこれ↓
https://www.amazon.co.jp/dp/484433638X/ref=cm_sw_r_tw_apa_i_DCu1Cb4NVYPR2
研修でもらってるのはこれ↓
https://www.amazon.co.jp/dp/4815600848/ref=cm_sw_r_tw_apa_i_KAu1CbQQK6YS3
自分で買った方がわかりやすいのは初頭効果的なやつだろうか。インターフェイスのあたりまでは学んだ。今日は多様体?とかいう部分をやる。来週にはこのテキストが終わるから、そしたらまたPHPとLaravelの勉強に戻りたい。
Laravelが正直かなり難しく、すでに苦手意識がついてしまった。ので、PHPの参考書をもう一冊買って、それを仕上げてから今のLaravelテキストに戻りたい気がしている。それを本社配属までにやり遂げなければいけない。
でも時間があるだろうか。
合同誌の方に寄せる小説も書かねばいけないので5月と6月は中々大変そうだ。そしてまた動画を作りたい欲求がムクムクと湧き上がってきた。
今まで自分はAdobe系のソフトを覚えてきたけど、それで(大学のサークル外で)何かしっかり代表作を作ったかというと、ちゃんと誇れるものはイマイチなかったりする。それがコンプレックスになっている。なるべく早く解消してやりたいが、とにかく時間がない。ため息がたくさん出る。
日記: 190420-190501_旅行、令和、風邪。
風邪を引いた。38.5℃の熱があった。喉と鼻の粘膜が無くなったように乾いている。咽頭が腫れてるそう。耳の奥も痛い。気管支全体がやられてしまった感じだ。解熱剤と痛み止めを飲んで少し楽になり、眠っているのも飽きてきたから日記を更新することにした。
今、富山にいる。大学の時の友人の家で過ごす予定だったが、昼前に着いてから徐々に体調が悪くなり、そのうち熱が出た。高岡にある急患用の病院に行く。熱が出てからあまり時間が経っていないから、インフルエンザの検査はされなかった。明日の朝に熱を測り、38℃を超えていたら検査に来てほしい、とのこと。予定通り東京に帰れるか雲行きがあやしい。
帰ってプログラミングの勉強の続きがしたい。
もしインフルだったら、5/7の初出社(社外研修だが)に響くから暗澹たる気持ちでいる。いいスタートを切りたかったが。
GWの初日から長崎に旅行に行った無理が出た。しばらく運転しておらず、かえって危険だから僕が運転する番は回ってこなかったが、少し眠りが浅い中での行動だった。情けない。運転者のフォローをしなければと可能な限り起きてようとしたのがマズかったのかもしれない。令和の頭から絶不調だ。
旅記については後で別に上げたい。長崎は食べ物がとてもよかった。五島列島が晴れてさえいれば完璧だった気がするが、仕方のないことだ。
日記: 190409-190419_退職と金沢行
明日、4月20日の文フリに出展するために金沢に向かっている。その夜行バスの中だ。前日からの昼夜逆転の生活がたたって例のごとく眠れないから、早々と寝るのを諦めて毛布を頭からずっぽり被り、日記を書くことにしたのだ。
経済的な理由で新幹線にためらいがあったから、ずっと嫌って乗らなかった高速バスを予約した。たった3000円で石川と東京を繋ぐ4列シートの居住性はまさに最悪で、隣の席との境界は5cmの手すりだけだ。前後間隔もせまく、小さなテーブルを出せばほとんど身動きはできない。ボトルホルダーすら付いてない。仕方なく前の席の背に付いてる網袋にいろいろ詰め込んだら、網の下からウォークマンが滑り落ちてどこかへ行った。終点で降りることになってるから、そこで探すしかないと諦める。
文フリの方は無事に新刊が出来上がって満足した。毎度あることだが、作った段階でだいたいは満足して、イベント当日になると「こんなクソ重たい荷物は捨てよう」という話を仲間内でする。今回はそれを一人でやってるので、バスタ新宿に着いた段階でもうかなりぐったり来ている。僕が持ってる分は在庫分で、あんまり数はないのだが、それでも旅行はいつもバックパック一つで行くと決めているから、こう手荷物が増えるだけでストレスになる。
向こうでは友人の宅に3泊させてもらう。それゆえにかなり費用が浮いている。こんな苦労をするぐらいだったら、帰りは新幹線にすれば良かったと後悔することしきりだ。
文フリについて。目標の頒布数は相変わらず「1」だが、今回は前回の反省や他のサークルなんかを参考にして、表紙のデザインをちゃんとやったつもりだから、なるべく手に取ってもらえると嬉しい。人物を表紙にあしらった効果を測定できればと思う。
前回の日記から、この一週間、仕事関係でいろいろ動きがあった。
まず、ちゃんと退職届を提出した。話し合いは社外の喫茶店だった。前々から人事には話を通していたから大変スムーズに進む。聞くところによると、僕が休職に入ってから次々と休職者が出るようになって、例えば5人いた後輩たちはすでに2人が休職、1人が退社している。また、5年目の先輩の最後の一人が退職するらしく、これは現在進行形で相当モメているという話を聞く。その5年目の次はもう10年目になるから、つまり中堅どころと若手がいないくなる、ということらしい。もう知らんが。
会社に私物を取りに行くことになり、土曜の夜に忍び込む。しかし、22時を過ぎても全然灯りが点いたままだったから諦めて六本木で映画を見た。ブラッククラウンズマンがちょうどいい時間にやっていた。
見終わって、午前3時。さすがに誰もいなくなったようだから、会社にそっと入る。半年ぶりに入ったが、社内美化がとんでもなく乱れていて驚いた。片づける人間がいないのか。荒れている。
僕の席はまるごとなくなっていた。席替えが何度かあったという話は聞いていたが、それ以前に何もかもなくなっていた。私物も全部処分されたのかもしれない。とにかくどこを探しても無かったから、捨てられたか、あるいは他の人間に奪われたかしたのだろう。私物が勝手に取られることはたまにあった。誕生日に母親からもらったボディバックだけは何とか取り戻したいと思ったが、この先のやりとりが煩雑化することを考えると、どうにも粘る気になれず、諦めることにしてしまった。これは唯一残念なところだ。しかし、自分的には大変な思いをして新卒入社した会社を辞めるのだから、その引き換えに自分の部位をどこか失わないといけないような心理が働いて、一種の記念碑として、罪悪感への穴埋めとして、失うことを選んだ節もあった。
それにしても僕のデスクには担当案件の旧作素材が大量に詰まったHDDが10個近くしまってあったのだが、それもどこかに片づけられていた。かなり驚いた。これは退職に際してどう処分したもんか頭を抱えていたから、勝手に処分されていたのは好都合だった。
事前の打ち合わせ通り、人事のデスクに携帯電話、社員証、セキュリティカード、今後の連絡先やiCloudのアカウント情報を書いたメモなどを残してオフィスを出た。当然、自分ではもう施錠できないからセコムに電話をして自動で鍵を閉めてもらった。
セコムの人にワケを話す過程で退職する旨が口から滑り出た時、そこで初めて「俺はもうこのオフィスに立ち寄ることは二度とないんだなぁ」という実感が湧いてきた。もう西麻布に来ることすら無くなるだろう。もしかしたら東京すら去ることになるかもしれない……こうした想像が一気に胸に去来して、記憶を美化することはしたくないが、それなりにセンチな気分に浸った。
結局、見つかった私物はロッカーに入れておいた仮眠用のタオルケットだけだったから、それだけを抱えて始発に乗って帰った。
その翌日、新しい会社の入社手続きを済ます。事務処理がほとんどだが、終わり際に少しだけオフィスを見る機会があった。エンジニアの会社が一般にどんなものか分からないが、かなり静かな環境で、照明が弱かったのか全体的に仄暗い空間だった。冷房で涼しかった。少し狭いのが嫌だなと思ったが、冷たく仄暗い感じは好きだ。同期になる人と話す機会もあったが、なんとなく距離感を掴むのが難しい相手だと思った。まぁ、その辺はどうでもいい。
プログラミングの勉強はLavelで少しつまづいていたところだったから、研修でやるということもあったし、視座を変えて今はJavaをやっている。想像していたよりもPHPと共通点が多く、わりと楽しくできている。Javaでオブジェクト指向をちゃんと押さえてからLaravelをやっていった方が学習過程としては得策なのかもしれない。ともかく初めて触るフレームワークだから要領がまだ得られない。しかし、早く習得しなきゃいけないところだから焦りはある。
ブラッククラウンズマンの感想を書きたいが、もう結構な文量だからやめる。また別のところに書きたい。