コード履歴書
再びどうも、僕です。
会社のエンジニアの間でなんか流行っているコード履歴書とかいうやつ。僕も自分の思考整理とか今後やりたいことを考えるにあたって、過去をまとめておこうかなと思ったので書いてみます。っていうか職務経歴書っぽいねこれ。コードに限るあたりが面白いけど。
- 小学5年生ぐらいのときからインターネットの民として動いていた。赤松健先生の AI Love Networkっつってわかる?あそこのチャットに入り浸ってた記憶がある。あの頃のチャットはHTMLタグを打って文字装飾ができたもんだから、<FONT>とか<B>とかを断片的に覚えて遊んでいたのがコードというものを初めて触った瞬間ではあると思う。
- で、そこらでできた友達が個人サイトを持っていたのがきっかけで、中学に上がる頃だと思うけど、自分も個人サイトを作った。HTMLをちゃんと書くことはまだできず、今はなきNetscape Composerというアプリで作り、細部を手直ししたりしたぐらい。ホームページビルダーじゃないのよ、意外にも。ちなみにこのときFFFTPを初めて触った。
- そして順繰りに欲は高まり、自サイトにBBSやチャットルーム、日記なんかを置きたくなるわけで、フリーのその手のCGIを持ってきて設置をしたり。あの時は666だの755だのが呪文にしか見えなかったけど、まぁ手順通りにやった。ちなみに言語はPerlで、$title = "{当時のHN}の屋敷BBS" みたいなイタいタイトルを表示するためにコードを触ったりもしたわけです。このサイトで少しずつだけどCSSを導入したりしてデザインがいじれることを知った。
- 時は流れて高校3年。卒業後の同窓生が交流するためのBBSを作る需要が出たので春休みに作った。このとき大学進学が情報系に決まっていたので、勉強の意味も兼ねてHTMLを自力で組んでやってみたり。2003年時点としてはだいぶレガシーなサイトだったけど、当人は楽しく組んだし需要は満たせたので満足。なお1年ぐらいで激しく過疎化したので畳んだ。
- 2004年大学入学。授業でC言語を学んだのがプログラミングの初体験。コンパイラのccとかみても「さくら?」としか思えなかった。コマンドツール開発を実習で行い、例によってメモリ管理に死ぬほど苦しめられた。この後しばらくプログラミングなんもわからんと思って劣等感に苛まれる(同期で親しかった奴らが元々詳しい連中だったのもあって尚更
- 大学1年のどっかで、一念発起してCGIに入門する。本を二冊ぐらい読んで、インターネット廃人だった頃にお世話になったようなアクセスカウンタ・BBS・チャットルームなんかを量産。フリーで出してくれていた作者の皆さまへの畏敬と感謝の念に震えるとともに、やはりjcode.plがすげえ、って話になる。
- 大学2年のときの演習授業というやつで、PerlでMIDI操作をするCGIを開発。初めて自力で企画したわけだが、結局は担当教官も呆れるほどグズグズの内容になった。やりたいことを考えることと、今の実力で実現可能か・可処分時間で実装可能かは別物であることを痛いほど感じる失敗体験。あと作業工数見積もりな、絶対ハズれるよな、あれは。
- これも大学2年だっけ?趣味の音楽イベントの参加者登録が主催の手作業だったのが辛くなりすぎた話を聞いて、システム化を申し出る。もちろんPerl/CGI。セッションイベントだったので楽器パートによる成立条件とかが正直めっちゃ複雑で、最後は主催のおっちゃんの家に泊まり込んで要件定義しながら実装してた。なんとかイベントまでに実現でき、不具合も無くはなかったけどリカバリ可能な内容だったので割と成功事例。作ったものが使われて喜ばれる経験がこの段階で積めたのはとてもよかったと思う。しかし今思うと、あんなアクセス集中するイベントのシステムでDB使わなかったのとか、本当に気が狂ってる。.datファイルと.lockファイルでなんとかこなしてたんだから怖い怖い。
- 大学3年。友人の紹介で学内ベンチャーのアルバイトをする。この頃はPerlの他にPHPもそれなりに使えるように独学でやっていたので、Web周りの案件をいくつかやっていた。このとき初めてMySQLを触り、DBのありがたみに恋に落ちる。面白かったのは位置情報付きブログシステムの開発で、位置情報を写メール(懐かしい)の画像から抜いたり、インポートしたKMLファイルから紐付けたり、なんなら当時の携帯電話のGPS昨日叩いて取得したりという辺りを触ったこと。当時GoogleMAPなんかは動いてたしAjaxも流行ってたから色々遅いんだけど、とはいえ当時の僕には未来来てんな感があって楽しかった。あとなぜかHDML(ezwebで使ってた言語)とかも少し触った。
- 時期を同じくして自分のバンドのWebサイトを立ち上げたりした。ここは技術的などーこーはあまりなかったけど、他のメンバーでも更新作業とかできるようにごく簡易なCMS的なことを実装した。こちらはPHP。この頃からPerlからPHPにメイン言語が変わりつつあったが、PHPの正規表現周りの機能はどうしても好きになれなかった。あとマルチバイト文字周りでひどい目にいくつか遭って、PEARは胡散臭い、という印象が完全に染み付いた。
- バンドからの派生で、主催ライブイベントのサイト立ち上げも何度か行った。自分意外にイラスト担当とWeb部品のデザイン担当の仲間がいたので、ここで初めてチームでの開発を経験する(バイトは個人作業だった)。チームのコミュニケーションやスケジュール見積もりとかは何度かの失敗を経てだいぶ勘所がつかめるようになり、最後の方はWBSなんかも書いてたっけ。サイトの出来云々というよりはネタ要素が仲間内にウケ、たまにヨソのイベントのサイト構築なんかも依頼が来てチームで請け負ったりもした。全体的に学園祭ノリで楽しかった。
- 4年で研究室配属。主にデータベースやデータ処理を扱う弱小の研究室で、僕のテーマはXMLDBの効率化、特に実体化ビューに関するところをやった。言語はJavaで、授業では触ったけどきちんと扱うのはここが初めてで、色々と苦戦した。LLばかり触っていたため重厚なIDEとかがしんどかったのが主な原因かな。ゼミではk-meansとかAprioriアルゴリズムとか、PageRankとか教師あり学習だとか、今思うと他のメンバーの研究って現代のブームに乗ってくる内容だったのでは?ともったいなく感じたりはするが、まぁ当時は研究室の活動にあまり興味がもてなかったのだ。とはいえ、不真面目な学生ながら3年間でどうにか修了できたのはよかった。
- そういえば担当教官は元々一般企業の出身の人で、コーディング規約とかコメント、設計やチーム開発のノウハウを学ぶゼミを開いてくれてた。あれは本当にありがたかったな、今でも生きてる知見だ。
- そうだそうだ。研究室にお菓子買い込んでおいて、レジ置いといて購買できるようなシステムも同期で作ったんだった。あれバーコードリーダーをジャンクで拾って動かしてたんだけど、あの手の入力装置からデータ引っ張ってくるところも面白かったんだよな。
- ちなみに先述のバイトは一応院の修了までいたけど、最後の方は経営陣の目が海外に向いたりとかで僕の担当する仕事が少なく、事務方っぽい仕事が多かった。発送とか。
- 2010年、就職。外資のDWHベンダーだったんだけど、ここは新卒研修が手厚く、4-9月まで研修だった。内容的にはC言語とbashの基礎の基礎あたりまではほぼTAの仕事だったけど、その後のSQLとDWH設計は未知の領域でめっちゃ楽しかった。Window関数好き。
- OJT期間はRubyを触ってた。僕のOJTリーダーが割とRubyコミュニティでも有名な人だったからだったりする。バッチワークフローのテンプレートから個別バッチを作るような社内ツールがあったんだけど、そのテンプレートごとにユニットテストも設定だけで作れるようにするようなフレームワークの実装(の一部)を任された。燃える僕だったが、レビューではボッコボコにされた。命名が悪いとか、ちゃんと関数分割しろだとか、そういうレベル。人様に見せられるコードを書くことをめちゃくちゃ厳しく指摘されたのを覚えてる。これもまた未だに時折思い出しては背筋が伸びるような経験だった。
- まーでもOJTが終わった後、現場に連れ去られてコードとは無縁な、スケジュール表とにらめっこする仕事になるんだけどね。先輩は僕を残そうとしてくれたらしいんだけど、現実は非情である。コードっぽい要素だと、分析SQLをたまに書いてたのと、クエリチューニングをちょっとだけやった。インデクス貼るだけで終わったショボいやつだが。
- また数ヶ月後に、今度は社内開発で外販してるBIツールの開発チームに転属。ヒャッホウと喜んだのも束の間、コードを読む権利を与えられず、ほとんどずっと本物がどれかわからない設計書の整理をさせられた。偶然そこらのタイミングで大学時代の先輩に誘われ、転職。
- 転職先は10人ぐらいのベンチャー企業。地方自治体向けのシステムをハコとセットで売るビジネスで、結構儲かってた。ここで.NETに初めて触れる。JavaのときEclipseはあんなに嫌ってたのに、VisualStudioすきすきー!ってなったので、人間わからない。ここには4年居て、VB.NETの製品をC#.NETにするプロジェクトの取りまとめとかもやった。あと映像系の技術がコアだったので、DirectShowとかもちょっと触ったり、Windows Media Encoderを使うためにCOMプログラミングを覚えたり、シリアル通信とかMIDI通信の機材とデータのやりとりして動かしたり、色々と学びがあった。負債だったJScriptのサイト運用はめっちゃ疲れたけども。ちなみに最後はビジネスモデルの話で社長と喧嘩して退職。
- 3社目は2社目の何人かと新規立ち上げ。2社目と似たような映像技術をコアにして売り込みをしてた。ここで前の会社で結構な課題だったUI部分をもっとよくしたくてWPFを学ぶ。必然的にMVVMの概念を学ぶことになり、最初はめっちゃ戸惑ったけど、慣れるとあの子は最高のビジネスパートナーだな、と思えるようになった。UXの専門家とかにもアドバイスもらって画面開発をリファインしていくのは楽しかったが、最後はハードスケジュールと莫大なプレッシャーで心がぶっ壊れて休職→退職。
- メンがヘラってる間に戯れにAWSを触ったりした。EC2すごーい、とかそのレベル。このブログの最初の方にちょっと触った記録が残ってるけど、早々に飽きてるな。
- メンが治ったので社会復帰した。外資コンサル。でもここではコード的な話は全然してない、というか触らせてもらえなかった。強いて言えば、最後1ヶ月ぐらいは中国のJava開発チームに設計書を投げていたんだけど、向こうの人間がSQL書けない(正確に言うと、ものすごくシンプルなCRUDしかできない)っていうので、設計書に丸々SQLを書いて渡してたぐらい。おれより等級いくつ上でどんくらいおれより給料高いかとかわかるので、心が折れるのは察してほしい。ここでもメンがヘラりかけて手足が震えだしたので退職。
- ようやく現職。社内の広告運用効率化ツールにアサインされ、DB設計とインフラの担当を仰せつかる。ヒャッホウDBの設計をイチからできるなんて!と大喜びでやり、いくつもの失敗を重ねるも今も元気に動いてて安心してる。ここでAWSも本格的に学びはじめ、Terraform、Dockerなどと戯れる業。またプログラミングもVue.js/TypeScript, Clojure(お隣の席がClojure界隈の有名人と後で知る), Scalaも初体験で、バリバリレビューされながら学びを進めていく。最近Pythonも仲間に入りました。軸足はRDB/インフラに起きつつなんでもするのがチームの流儀なのでなんでもやる。楽しい。
- また気づいたら社内インフラ改善の横断プロジェクトとか、その先行事例作りを自担当プロダクトでやるとかに巻き込まれ(あるいは突撃し)、社内にいるクラウドインフラのツワモノたちに色々教えてもらっていた。
- そんな感じでワクワクエンジニアライフしてられると思ったら、なんかマネージャー職を頼まれ、ちょっとガックリ。とは言え交渉のときにプレイングマネージャであることを維持することは約束してもらったので、今もマネジメントと言う名の山のような雑務の傍、ちゃんと開発タスクも楽しく取れているので不満はないかな、という感じ。
長かった。
年寄りのエントリーだな。もうちょっとまとめてもよかったかも。まぁいいや。
今後はどうなりたいか、自分でもだんだんわからなくなってきたけど、目下興味としてはデータストレージ周りとインフラなのかな。ネットワークはあんまり強くないので補強したいのと、本来専門だったRDBも再補強、NoSQLにも手を出したいし、コンテナ周辺からデプロイ自動化周りとかに知見を貯めたいような気がする。
ゆくゆくはどうなりたいか?それは正直わからない。一つだけわかっているのは、働かないで趣味の開発だけをできる状態が理想だということだけ。
ポエムでした。
いい加減サボりすぎた
どうも、僕です。
久しぶりに開いてみたらなんと前職でメンタルが死にかけたあたりで終わってるでやんの。やばいですね。
軽くその後の話をすると、前職の結構しんどいプロジェクトを結局抜け出すことができず延長され、ブチギレしてキリのいいところまで倒したのち思い切りで退職。少し転職期間がまた空いたのですが、友人の紹介で現職に復帰し、今1年半ぐらいという感じです。
この1年半は今までの価値観がぶっ壊されるような体験でした。
前職はぶっちゃけるとどでかい外資系コンサル企業のITのセクションで入ったんですが、自分はコンサルティングというよりはSIの御用聞きで、定額で無理難題をふっかけるクライアントをなだめすかしながら設計書をゴリゴリ書く、しかしコードはオフショアに全部任せるので触ることは罷りならん、みたいな感じのことをやってて、それはそれはストレスでした。単純に勤務時間もヤバかったし。
それから転職して今の職場はガラリと変わりまして。ざっくり言うと以下みたいな感じ。
- ちゃんと正しく自分の裁量を行使できる裁量労働制
- ハイレベルの設計だけでなく、コーディング技術というものをちゃんと評価してくれる仕組み
- 業務時間にOSSや技術記事執筆に工数を割かせてくれること
- 末端メンバが本当に役員レベルにまで言いたいことが言える風通しの良さ
- 開発スケジュールにおいて状況の変化や事情を鑑みて相談を聞いてくれるビジネス部門
これまで開発者は基本的にはビジネスやマネジメントの人たちより下の立場とされる職場が多かったので、結構な驚きでした。いやベンチャー時代は違ったけど、今の会社の規模(700人くらい)でこんな運用される会社あるんだ……ってなりました。
まぁそれだけ聞くと天国のように見えますが、一年半ぐらいいるのでもちろん悪い部分も見えてはいます。自由の代償として出てくる自律に対する強い要求、マネジメントにかかる莫大な労力、優遇措置の増長してしまいそうになるエンジニア心理、などなどなど。完璧な組織なんてのは難しいのでね。
ま、諸々ありますが楽しくやっています。
技術ネタについてはQiitaに書いてるので、今後ここでやることはないと思います。このブログはときどきポエムを吐きたくなったときに使おうかなと。
誰がみてるわけでもないブログですが、ひとつよしなに。
死ぬほどサボってた
相変わらず即飽きてサボってた。というか書くことねえ。
転職しました。
転職先は思考力奪われるレベルの激務プロジェクトに入って無事メンタル死亡。
とりあえず乗り切ったら異動の方向で話を進めてもらってますが、どうなることやら。
転職活動なんぞもちょいと視野に入れつつ、方々のツテ頼って情報収集。
そしてあれこれ話を聞いてると、やっぱり技術にしろ情報にしろ、長らく自己投資してなかったなーと反省した次第でした。
さて、そんなわけで技術力向上のためにも、今後何か作りたいなと思っているわけで。考えをまとめるためにエントリー書いてます。
何すっかな。
やってみたくて手を出していなかったスマートフォンアプリに手を出そうかと思っている。
iOSは趣味的にあまり触ってないので、まずはAndroid。
作ってみたいテーマとしては、そうねえ。パッと思いつくのは・・・
1.すっかりドルヲタになってしまったのだが、推しメン情報を収集するのが面倒という課題にぶち当たっているので、推しメンに関する情報を集めて提示してくれるアプリ
2.アニソンバンド・セッション界隈にいるんだけど、セッション時の成立情報とかが頻繁に流れてくるので、このあたりを使って何かデータ分析
・・・1だな。1にしよう。実際に自分にとって有益だ。
要件を考えてみる。まずは作り切ることが目的なのでスモールスタート。
・Andorid端末上で動作する
・僕が見たいのはブログ記事が中心、ということで推しメンのブログ更新をキャッチして通知する
・また、他のメンバーのブログに出ている情報も知りたいので、自動で他のメンバーのブログも解析し、名前が出てきたらそれも通知
・名前はもちろん愛称で呼ばれることが多いので、それらを全部ひっかける
これくらいから作り始めてみよう。
週末ぐらいしか使える時間ないので、まぁ低速に。
制作日誌をこれからつけたいと思います。
nginxをとりあえず立ててみた
さっそくサボって20日ですよ。まったく。
ぼちぼちやりたいことを始めようと思います。
HTTPサーバを立ててみよう
Webアプリ関係を作るにしても、まずHTTPサーバが立ち上がらないことには何もできん。というわけでまずそこから初めてみます。
OSのアップデート
例によって例のごとく。
$ sudo yum update
Completed! と出たので無事完了。
nginxのインストール
Apatcheにしようか悩んだけど、せっかくなら使ったことが全くないのを触ってみようということでnginxを採用。Apatcheもそんなにちゃんと触ったことないけどね!
まずはnginxがあるのか確認。
$ sudo yum info nginx
Loaded plugins: priorities, update-motd, upgrade-helper
Available Packages
Name : nginx
Arch : x86_64
Epoch : 1
Version : 1.10.3
Release : 1.31.amzn1
Size : 535 k
Repo : amzn-updates/latest
Summary : A high performance web server and reverse proxy server
URL : http://nginx.org/
License : BSD
Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP,
: POP3 and IMAP protocols, with a strong focus on high concurrency,
: performance and low memory usage.
あるっぽい。インストール。
$ sudo yum install nginx
Completed!ってなわけで終了。
あとは自動起動もしておくべきだよね。
$ sudo chkconfig nginx on
とりあえず起動してみた
$ sudo service nginx start
Starting nginx: [ OK ]
動いたくさい。
……が、そのままURL叩いても何も出ない。なんじゃこりゃあって思ったらそうかセキュリティグループがHTTPの80番通してないのね。わはは。
セキュリティグループの設定変更
【AWS】セキュリティグループを設定してみた(そして関連する用語を調べてみた) - Qiita
ここを参考にいじってみる。
1.まず「セキュリティグループ」を開く
2.セキュリティグループを作成。今回はSSHとHTTPを通しておこう。22と80。
3.「インスタンス」に戻る
4.インスタンス行を右クリック→「ネットワーキング」→「セキュリティグループの変更」
5.さっき作ったセキュリティグループをセット
…諸々セキュリティ上よろしくなさそうな情報が画面に出てたので、キャプチャはなし。画像加工めんどくさいし。
さて、これでどうじゃろかい?
キマシタワー。
とりあえず今回はここまで。
はじめてのAWS
巷で流行りのAWS。名前だけ知りつつも使ったことがなかった。
12ヵ月無料だというので、とりあえず考えなしに立ち上げてみることにしよう。
アカウント作成
個人情報をもりもり書いていく。めんどいので割愛。
認証の途中で、非通知で電話がかかってきてPINコードを入力するのがあったのはびびった。今時はこんな感じなんですね。
んで、できました。
10分間チュートリアル
へー、10分間チュートリアルなんてのがいっぱいあるのね、親切。
特に目的もないけど、とりあえず今回Linuxマシンでも作ってみることにする。
EC2インスタンスを作る
コンソール立ち上げたら色々出てきたが、真ん中にインスタンスの作成ボタンがあるね。ぽちっとな。
イメージのOS選択。こだわりもないしどれでもいい。定番らしいのでAmazon Linux AMIにしておこう。軽く調べたところCentOSベースとのこと。
インスタンスタイプの設定。ゆーても無料枠の対象は一つしかないから選択肢なし。
しっかしCPUやメモリがこの辺のパラメータ設定だけでできるっつうのは、本当に便利な時代になったね。仮想化技術すばら。
詳細設定も一応確認。VPCってのが仮想プライベートクラウド、ね、なるほど。とりあえず全部デフォルトでいいぞ、と。
確認OK。いざ作成。
と、キーの作成ね。はいはい。セキュリティ考えればそりゃそうか。
気を取り直して、作成っと。
できたようだ。
EC2インスタンスへの接続
手元は Windows 10 マシンなので、チュートリアルの薦めに従ってGit Bashでの接続をしてみよう。
$ ssh -i .ssh/{KeyPair.pem} ec2-user@{IPAddress}
接続オッケー。
EC2インスタンスを落とす
EC2コンソールで「1 個の実行中のインスタンス」を選ぶ。
インスタンスが選択されてるから、「アクション」->「インスタンスの状態」->「停止」で停止させましょう。
確認画面を経て、停止。
インスタンスの状態が「stopped」になってるから、無事停止されたようだ。
短いけど、今日はここまで。
ブログ解説
どうも、青木です。
文章を書くぞい
暇で暇でしょうがなかった大学時代にmixiが流行り、あの頃は山ほど文章を書いていたなァ…という年代の者ですどうも。
時代は変わり、今の主戦場はTwitterにしているんですが、いかんせんこいつは気軽に書け過ぎていかん。文章を書くこと自体は割とすきな方なのに、長文を書くことができない、抵抗が出る、というのを近年感じているため、リハビリがてらブログを書くことにしました。
そんなわけなので、このブログは他人が読んで面白いかどうかについては保証しかねるどころか、おそらく面白いものではありません。気の向くまま書きたいことを書いていこうと思います。
お前何者だよ
ですよね。
はっきり言って何者でもない、そこらへんにいるオジサンです。興味がある(≒ブログでネタにするだろう)ことは以下に列挙します。
- アニメ・ライトノベル等オタク系
- 技術(プログラミング)のお勉強
- メシ酒など
- アイドルライブレポ
取り急ぎ、しばらくは技術ネタ、、、というのも恥ずかしい自己学習記録にしようかなと思っています。っていうのも仕事辞めちゃって今ヒマだし、転職活動するにしても技術錆びつかせるのも怖いっつーのもあって。。。
そんなこんなで、よろしくどうぞ。