FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

楽しいインターン SSP

おはようございます!!
3月25日から29日までの5日間インターンシップに参加させていただきました瀬川です。
楽しいインターンです!!
もう一度言います。楽しいインターンです!!

内容

Mini-SSPサーバの開発

1週間の振り返り???

1日目(初日)

初日ということもあって、入社書類等の提出書類の処理、社内見学?探検?、アドテク(DSP,SSP等について)の説明などなど。
自分はもともとSSP、DSPに興味があったのでSSP、DSPがどういうものかある程度知っていましたが、丁寧にDSP、SSP等について説明していただけるので全く知らない人でもわかりますし、自分も詳しいところまでは知らなかったので、詳しい中身まで理解して開発を行えます。 そのあとMini-SSP開発にあたって、言語選択から開始(ここで8~9割1週間の苦しみ具合が決まる)。
残り時間もあまりなかったので、残りは環境構築が主でした。

環境

OS - CentOS 7 (Centかubntでどちらでもいいと伝えたら、Centになった)
たぶん言えば別のOSでもやらせてくれるじゃないかな?・・・知らんけど

言語 - Scala (2.12.7) (最新版を使いたくないある程度安定版使いたい派なので、バージョンがちょっと古いのは許してくだせう) Scala触ったことなかったので挑戦を兼ねてScalaを選択

ビルドツール? - sbt (1.2.8)

エディタ - emacs (宗教戦争をするつもりはないです・・・でも、emacsのほうがいいですよですよね?)

のちにこのemacsが悲劇を生むことをこのときは知るよしもなかった・・・

[オススメ言語一覧]

  • c++
    dspとかssp用のライブラリーがある。並列処理をそのライブラリーでやってくれるので脳死で書ける。処理速度も早い。C++使ってる会社もある。
  • scala
    純粋に並列処理(リスト処理)が楽。処理速度も早い
  • python
    簡単に書ける。処理速度は遅い。
  • golang
    ゴルーチンは神。ゴルーチンとチャンネルのおかげで並列処理楽。処理速度はそこそこ速い。
  • Rust
    並列処理がいいんじゃない?・・・知らんけど
  • erlang
    並列処理向けの言語だから並列処理に向いてる。erlang使ってる会社も多い。
  • Assembler !? 高速通信ならアセンブラでしょ??できるのかわからないけど・・・
  • nginxモジュール !? Webサーバ本体が処理したらそっちのほうが早いに決まってんじゃんwww(誰もやらないだろう・・・)
  • Shell オススメはしてない。できそうだけど、速くはないと思うよ・・・ でも、誰かやってみてほしい。。。

余裕ある人は変わった言語で試してもらいたいなぁ|ω・`)

2日目

実装内容の確認

SDK -> SSP -> DSPの流れでリクエストが送られる。
そのレスポンスとして、DSP -> SSP -> SDK で送られる。

f:id:fan_h_segawa:20190411183414j:plain 

scalaが初めてで、sbtも初めて・・・
sbtのことをよくわかっていなかった。

とりあえず、リクエストを受けて、レスポンスを返すというものを作ったが・・・
ライブラリのエラーでずっと動かない!!
でも、コンパイル時ではエラー出てない!?
ずっと試行錯誤を繰り返していた。。。

3日目

ライブラリーのエラーで動かないという話をScalaのできる人に聞くと・・・
ででーん!!!!!!!!!!!!!
そもそも実行コマンドが間違っていた!!

sbt はコンパイルするためのツールと思っていた私( ́・ω・ )
sbt compileでコンパイルしたあとにsbt run で実行するんだってさ(;´Д`)
sbt compileでコンパイルしたあとに scala hogeで実行しようとしてた。。。
scala hogeでもできなくはないが、ライブラリをsbtで用意しているから当然scalaのライブラリの方にはないよね・・・
当然といえば当然なんですよね・・・

とりあえず、リクエストが送られて来るとレスポンスを返すようにできた。

4日目

3日目までに単一の処理しか実装できていないため、SDK,SSP,DSPで流れるようにしようとしたら、関数の使用時に別の関数を使用しろとエラーが起きていたが・・・

エラー内容がよくわかん( ́・ω・ )

時間かかっても自分で限界まで考えたいマンの僕は無駄に時間を消費した。。。(ただコミュ症なだけ)

そうここでemacsでの悲劇だったのだ。
ここまでサーバ上の素emacs(no package)でやったきたため、どれが関数かパッとわかりにくいのである!!

結果、IntelliJで開発することにした(最初からそうしろ!!)

IntelliJで書きだしたら、見える見える関数がどれか見える!!!!!!!!! コーディング速度がめっちゃ上がった。

Javaはやってたが、eclipseでやってたので知らなかったがIntelliJめっちゃいいね♥ ここまでScalaが嫌いになりかけていたが、なんとか持ちこたえたのである。

5日目(最終日)

IntelliJのおかけでなんとかSDK->SSP->DSP->SSP->SDKと流れるに動作するよにでき、 複数台DSPに対して、リストで処理するようした。 でも、残念なことにDSPからのレスポンスをSSPで受け取り、1位のDSPに勝利報告をするところがよくわからず時間内には実装しきらなかった・・・・・(帰って自宅鯖で完成させた)

感想

昇降机など自分にあった物理的開発環境を整えることができるのは長時間働く上ですごく大事だなと思った。高さがあってなければ、腰や首、目などに多大な影響を与えるため働き安い環境であると思った。 ただ、正直オフィス内の温度は暑かった・・・・ 大体のオフィスがそうなんだろうが、夏は寒く!!、冬は暑い!! ここだけは本当に辛かった。 ただ、それ以外に不満はなく本当に自由にできる最高のインターンでした。 ありがとうございました!!!