NoahOrblog

某・福島にある大学のコンピュータ理工学部の大学生のお話。

学生版ヒダッカソン サーバーサイド編 に参加してきた

Noahです。

結構前の話なのですが、サイバーエージェント主催の学生版ヒダッカソン -サーバーサイド編- に参加してきました。

www.cyberagent.co.jp

所感

2日に渡って開催され、初日はサイバーエージェントの社員さん方のLT、メインとなる2日目はISUCONのようなパフォーマンスチューニングをしてスコアを計測し、そのスコアの高さを競うものでした。

前日のLTでは、パフォーマンスチューニングする際にボトルネックを見つける方法など、翌日に活かせられる内容ばかりでした。

2日目では実際にパフォーマンスチューニングをしていくわけですが、MySQLにINDEXを貼ると途端にパフォーマンスが上がり、その他細かい変更などをすると午前中には1, 2位まで浮上しました。

が、午後になるとこれ以上のボトルネックを見つける方法がわからずに右往左往してしまい、そのうちにも徐々にランキングは下がっていき、N+1の箇所を発見するも解消まではできず。

ついに終了1時間くらい前にメンターの方からDBに負荷のかかっているボトルネックの探し方(mysqldumpslowなどを利用し、スロークエリを探し出す方法)や、原因がわかったらその問題に対してよくやる解消方法などを教わり、最終的には5位でヒダッカソンを終了することができました。

終わってみて

パフォーマンスの向上に計測は不可欠であり、基本的なことである 推測するな、計測せよ ということがとても大事だということがわかりました。

コードを読む、というよりは(今回の構成では)主にMySQLに負荷がかかっていたので、そちらを計測し、ボトルネックをみつけ、修正する、という単純ですが難しいことをやってのけるには、やはり日頃から経験を積むしかないとも思いました。

終わってからの社員さんからの解説では、並列化テクニックや、GolangならではのDBコネクションなどの内部処理にも着目されており、とても勉強になった2日間でした

2日目の夜の懇親会には諸用により参加ができなかったのがとても心残り…

Vimプラグインのキーバインド

Noahです。

TL;DR

map、これからはinit.vimとかで設定していこう

具体的な話

今までファイル内の文字列を探すとき、ptをCLIでよく使ってたんですけど、

Vimから似たような感じで検索できるctrlsfというプラグインがあって最近はこっちをよく使っています。

github.com

このctrlsfの単語での検索を、

function! InteractiveCtrlSFCmd() abort
  let s = input("plz input word: ")
  if (s != "") 
    execute ":CtrlSF " . s
  endif
endfunction

こんな感じに関数を書いて、 <SPACE>sf に割り当てたら、何故か期待通りに動作しない。原因調査すると、

github.com

こんな感じにplugin側でキーマップしているのが原因だった。(しかも自分の作ったプラグイン

まとめ

ちゃんと考えて、バッティングしないようにしよう(戒め

アルバイトをやめた

同じとこでアルバイトしてた友人が上げていたので上げる

都内にあるベンチャー企業のサーバーサイドエンジニアとして1年程度アルバイトしてましたが、5/19付でやめました。

やめた理由とか言ってもアレなので、良かったところを書きますが、個人的には色々な人との関係が築け、多くの学びがあったのが一番良かった。

自分はそこで1年程度働きました。最初はTwitter経由でそこの支社長からDMが飛んできて、トントン拍子に契約まで行ったのですが、そもそも仕事で使うGolangすら書いたことなかったし、フロントかサーバーサイドをどっちでもいいよと言われてサーバーサイドを選んだけど、その時は課外授業でやって興味を持ったという理由だった。(よくそんな自分を雇ってくれたと感謝しかない)

そんな自分でも先輩方にコードレビューしてもらったり、大学が夏季休業中はオフィスである趣きのある日本家屋でフルタイムで勤務する中、社の先輩や社員の方とペアプロをしたりしつつ自分自身成長することができたことがとても良かった点。

あとはアルバイト先の先輩たちと(目的は多々あれど)小名浜まで行ったり、慰安旅行で京都に行ったり、他にも貴重な経験があってとにかく最高の経験でした。

正直、この環境が無ければ今の自分はなかったと思うし、先輩方や社員の方に感謝してもしきれない。


ちなみに今度は(また別の)東京にあるベンチャーで(また)サーバーサイドとしてリモートワークする予定なのでがんばるぞー💪

MacでSpotifyをNeoVimから操作できるようにしてみた

Noah です。

最近、Spotifyを契約したのですがこれがまたとても良い。

www.spotify.com

プレミアム3ヶ月100円に釣られました。はい。

で、

SpotifyをNeoVimから操作できるようなプラグインを書いてみました。

Mac かつ Shougoさんのプラギンマネージャ、dein.vim の環境下でしか現状は動きませんが、最近Linuxマシンを手に入れたのでそっちも対応させたい 💪💪💪

github.com

(わりと最近書いたつもりだったけど最終コミット2ヶ月くらい前やん…)

ちなみに名前はBiSHのアユニ・Dさんから取りました

おうち開発環境を整えた

Noahです。

おうちの開発環境を整えました🎉

今まで

2015年モデルのMacBookProのみで開発を行っていました。

外部ディスプレイとかなしで、キーボードとかマウスももちろん無し。

バイト先で初めてデュアルディスプレイで開発したとき、作業の効率がグンと上がったので感動してたくらい。

買ったもの

ディスプレイ一枚、トラックボールマウス、ThinkPadのキーボードを買いました。

ディスプレイ

予算が大してないので、クーポン適用で1万ちょっとで変えるディスプレイを購入。

スピーカーは付いていないが、別に使わないので構わない。

普通に画面大きくてめっちゃ良い。これで12kなら満々足。

ThinkPadキーボード

ThinkPadのキーボード。ThinkPad自体は使ったことがないですが、使ってる友人曰く最高らしいので購入。

ケーブルレスがいいので、Bluetoothモデルを購入。

一番届いたのが遅かったけど、打ち心地は普通に良い。

トラックポイントが感度難しい。慣れかも。

ラグもなくてストレスから解放されてる。

トラックボール

LOGICOOL ワイヤレストラックボール M570t

LOGICOOL ワイヤレストラックボール M570t

慣れない。でも便利。

トラックボールのおかげで移動させる必要がないので、めちゃ便利。でも慣れない。

2日触ってようやく少し慣れた。快適。

その他

HDMIケーブルとか買った。Thunderboltも。

不満点を言うなら、トラックボールは専用レシーバーが必要。あまりさしたくない。

ディスプレイのHDMIケーブルはしょうがないけど、元あったディスプレイ(HDMI入力があるなんて思っていなかった)含めてトリプルディスプレイにしているので、何箇所もケーブルをささねばならないのは面倒。

ThinkPadのDock Stationみたいなのほしい。

QC30を修理に出した話

Noahです。

かなり前の話ですが、QC30が調子が悪くて修理に出して返ってきました🎉

故障

3月のインターンの頃から、電源を切っても緑のライトが付いたままだったり、充電中にオレンジの点滅のはずが緑のまま点滅してたり挙動不審。

でも、操作も問題ないし、まともに再生できるしそんなに気にしていなかった。

(電源切れない、というわけではなかった。)

4月に入って、帰省をした頃に満充電でも電源をつけた数秒後に電源が切れる症状に陥った。

修理

挙動不審だった頃から同じQC30を使ってる先輩に相談とかしてたのだが、さすがに使い物にならなくなったのでBoseカスタマーサービスに連絡。

郵送すれば無償で新品交換してくれる話になった。

大体一週間くらいで返ってきた気がする。

手厚いサービスがあって最高。

終わりに

ちなみにだが2A出力で充電するのも駄目っぽい。

MBPのUSBポートから充電するようにしてる。

あと、3月中にはインターン先の社員さんにこんなこと言われた。

これはこれで怖い

CyberAgentのインターンに参加した話

自分は20卒ですが、3月の1ヶ月間CyberAgentで19卒向けのインターンに行ってきました。

www.cyberagent.co.jp

書類選考

書類選考では、何を作ったか、どんなことをやってきたか、とかそういうことを記述するのが多かった気がする。

自分はハッカソンにわりと出るけど、ネイティブやフロントも特段書けるわけでもないし、まぁつまりそんなに貢献しているわけではなかったりして。

むしろ一人で開発して作り上げたもののほうが多かった。

11月にWebで提出するフォームを書いたが、学祭中に引き篭もって2日である程度動くもの (gilbert.nvim) を作ったことを書いた。

その頃はGoしか書いてないのでGoの事ばかりかいたことを覚えている。

面談

一次選考では、社風や、どこでGoがつかわれているかなどをきいた。

二次選考では、現場のエンジニアの人と面談をした。Goの話はもちろん、(知識はそれほどなかったが興味があった)インフラ周り、MySQLやCockroachDBの話もした。

今は、Goでサーバーサイドで働いているけど、インフラの勉強もしたいこと、フロントにも興味があることなどを伝えた。 20分くらい面談したあと、エンジニアの方から結果はいつお知らせしたらいい?と聞かれて、あ、これは落ちたやつかなと身構えながらも『出来るだけ早いうちでお願いします』、とだけ伝えた。

その後、普段の仕事中に、面談から2時間もしないくらいで人事の方から合格という報せが届いて、オフィスで(迷惑にならない程度に)軽く飛び上がった。

番外編: LT

その後、うちの大学でCyberAgentとのLT会が開かれたので、その時、生まれて初めてLTに登壇した。ちなみに、その時にはAOJ(Aizu Online Judge)のNeoVimクライアントプラグインを作った話をした。(最近はNeoVimプラグインしか書いてないため必然とこのネタになる)

www.slideshare.net

(注: このスライドの最後のdiesirae.nvimの未実装問題はいくつかは修正済だったりする)

50p以上あるスライドだったにも関わらず当初予定していた10分よりかなり早めに終わってしまったから残念だった。

いざインターンに行ってきた

AmebaOwndというサービスのサーバーサイドエンジニアとして1ヶ月間インターンしてました。

www.amebaownd.com

具体的に何をしたかまではNDAがあるので書けないのですが、以前から興味があったクラウドサービスを少し触らせていただいたりした。

最初は軽めのタスクを複数任され、それぞれその日のうちに実装を終わらせてPRを出した(Goで、そのパッケージを使ったことがなかったためかなり楽しかったw

特に、実際に運用されているコードを読むのはとても良い経験だった。

前半はそのように過ごしつつ、全体の構成や、機能追加するところについての説明を受け、インターン後半に担当するタスクについても事前知識として色々教わった。

さらに、コードを書くことばかりではなく、デザインスプリントというものにも参加した。

www.slideshare.net

コーディングする開発だけではなく、このような開発プロセス的なことをも学べたのは自分の中でもとても良い経験になった。

ユーザーテストの準備では、自分はネイティブは書けないので社員の方と一緒に表示する文言を考えることになったが、日本語は難しいことを改めて知るなどした。(途中、類義語などを調べ始めてエンジニアではなくて言語学者みたいになってたw

後半は、割りと重いタスクを複数日かけてやる感じになったが、メンターさんにレビューをしてもらい、フィードバックをもらいながらもなんとか最終日の前日にマージをして開発環境にデプロイが出来た。

最終日は退社手続きがあって結構暇するという話を聞いていたけど、午前中にあらかた書類関係を終わらせて、午後は既知のバグの調査をするなどした。(最終日で時間がなく、半分程度しか調査できなかった&&自分で修正までできなかったのが心残り…

環境について

希望により、US配列のMacBookPro(それも見た感じ新品)を貸与された。

予め貸与PCがあることは把握していたので、インターンの前から自分の .zshrc をmacOSなら読み込むだけでfzfなどのインストールを終わらせてくれる君を書いたりして環境構築をスムーズに💪💪

github.com

ディスプレイやIntellijなども貸与され、開発に困ることはほぼほぼなかった。

終わってみて

とても充実した一ヶ月でした!

最終日はお世話になったOwndチームの方々とシュラスコしに行きました🍖

しこたま食べた後、メンターさんから、

www.oreilly.co.jp

を頂き、これからももっと精進していきたいと思いました!!!

最後に

このようなインターンシップ自体、初めてだったけど、一ヶ月で大きく成長できたと思います。

短い期間ではありましたが、本当にありがとうございました!!!

これからも自分の腕を磨き、成長していきたいなと思います

おまけ

会津から東京への道中、@flying_hato_bus という僕の友達と一緒に行ったんですけど、彼は時間を間違える天才です(彼のせいで一時間郡山で暇な時間が出来てしまった