F@N Ad-Tech Blog

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

F@NでWebサービスを開発するインターンしてきました

 こんにちは、1月から2月末まで株式会社ファンコミュニケーションズでインターンをしていた浦野です。現在は同じくファンコミュニケーションズでアルバイトをしています。
 私はファンコミュニケーションズさんがWantedlyにて「会社を使って『これ作りたい』『あの技術に挑戦したい』を実現したい人を募集! 」と題している通称(?)「なんでもやっていいインターン」に参加してきました。おそらく他社ではあまり見かけないユニークなインターンシップではないでしょうか。このブログ記事では私がこのインターンで実際に制作したものと、インターンを通じた感想を紹介します。

  • 制作物「日報アプリ」について概略
  • 実装詳細
  • インターン感想

制作物「日報アプリ」について概略

 私がインターンで製作したものは「日報を編集・投稿したり、閲覧してコメントをつけることのできるWebアプリケーション」です。今回はファンコミュニケーションズさんで実際に使われているフレームワークや設計を参考にするために、Play FrameworkなどのWebフレームワークは使わずに、Finchというルーティングに特化したマイクロフレームワークを使ってWebAPIのみを提供し、SPA(Single Page Application)でクライアントを実現する方法をとりました。インターンではこのうちWebAPIの実装をしました。システム全体ではだいたいこんな感じです。

f:id:fan_r_urano:20180314181611p:plain
システム概観

実装詳細

 設計は実際の業務コードの一部を見せて頂き、それに沿って設計をしました。そのため多くのWebフレームワークが採用しているMVCではなく、DDDに基づいた設計になりました。といってもDDDに準拠して作ったわけではないので"なんちゃって実装"が多分に含まれています。
 設計のレイヤー図は以下のようになります。

f:id:fan_r_urano:20180314181600p:plain
レイヤ図

 上から見ていくと、RouterはFinchを使ったルーティング部分で、ControllerはServiceとRouterを結ぶ部分です。Serviceは業務ロジックを司る部分ですが、今回のアプリケーションはあまり複雑なことはしていないので規模的にはかなり小さいです。その下にはDBと接続するRepositoryがあります。

 Serviceが一部突き出ているのはWebサーバのセッション部分の実装です。Finch/Finagleにはセッションの機能は搭載されていないので、今回は独自に実装することにしました。JWTという選択肢もありましたが、ここはある程度慣れている技術を使ってコスト削減を目指しました。と言っても一から実装したのであまりコスト削減にはなりませんでした...残念。

インターン感想

 今回実装したのはAPI部分のみで見せられるデモンストレーションが無いのでこのまま感想に移ります。
 実装にあたっては設計の参考のために実際の業務コードを閲覧させていただきました。業務コードを読むのは初めてだったのでとても参考になりました。ありがとうございました。また社員の方には何度も相談に乗っていただいたので、過去の自分の制作物と比べても綺麗な設計と実装ができたと思います。
 今回参加したファンコミュニケーションズさんのインターンは「自分のやりたいことを実現する」インターンということで、いきなり業務に参加するインターンと比べると心的な敷居は低いのではないでしょうか?ぜひ長期インターンへの参加を踏みとどまっている人は参加してみてください!

CPU作りました

2月から3月までの二ヶ月間インターンをさせていただきましたko_tamuraです.
私自身は計算機科学の専攻ですが,計算機アーキテクチャに興味があって研究も特定用途向けプロセッサの開発をしてます.
今回F@Nさんとご縁があって,CPUを作りましたので,そのまとめをしたいと思います.

参加の経緯

サポーターズの逆求人イベントでF@Nの方とお話し,ぜひインターンシップに参加したいと考えました.
普通のインターンシップだと業務体験みたいな感じで,与えられたテーマに学生は取り組むという形になると思います.
F@Nのインターンシップでは自由になんでも開発してよい,しかもF@Nの事業に関係なくてもよいという寛大な心と懐の広さに惹かれました.

インターンの目的

だいたい次のつもりで参加してました.
・計算機の知識を深める
・F@Nの方が何やってるか,雰囲気だけでも知る

以上の2つはおおむね達成できた気がします.

私自身は知識を身につけるだけで満足するタイプの人間ですが,工学分野では開発と理論はきっても切り離せない関係にあります.開発を通じてより知識を深めるという普通の企業の開発とは逆の目的でやってました.

やったこと

CPU作りました.
具体的には主に次の本にならって学びながら作りました.
gihyo.jp
XilinxというFPGAベンダの開発環境Plan Aheadを使ってCPUと,それを動かすために必要なシステムをVerilog HDL(回路を記述できる言語)を使って開発しました.

FPGAについて

FPGAってなんぞや?という人のために,簡単に説明します.FPGA (field-programmable gate array)は,書き換え可能な論理デバイスです.普通のASIC(application specific integrated circuit)のような回路は焼付けたら変更は不可能ですが,これはレジスタ(フリップフロップ)と演算器によって構成される単位から構成されており,その単位同士の配線をユーザが切り替えることで任意の回路を構成できるというアーキテクチャをしています.

従来はその設計柔軟性から制御系の産業でテスト的に使われることが多かったのですが,半導体の性能向上によって情報処理分野でも使われることが増えました.

処理の高速化やコスト削減のためにマイクロソフトのBing検索エンジンに使われた事例があります.また,クラウドでもAWSが提供するF1インスタンスを利用すれば,FPGAによる高速化の恩恵を享受できるソリューションを構成できます.しかも今では高位合成という,高級言語から回路を生成する技術も生まれ,トップダウン的なFPGA開発ができるため,興味があればぜひグーグルに聞いてみてください.

構成モジュール

全体構成

f:id:fan_ko_tamura:20180328144215p:plain

クロックソース

ICはクロックに同期した処理を実行した方が都合が良いので,評価ボードに備わるクロックジェネレータから入力します.
非同期設計にするとデータアクセスのタイミング設計がとても難しなります(同期回路でもクロックとデータ信号の遅延差を考慮せねばなりませんが).

CPU

いわずもがなです.
32bit RISCプロセッサを構成しました.詳しくは後述します.

SPM(スクラッチパッドメモリ)

キャッシュメモリのような役割を果たしますが,これは主記憶装置とは接続されず,プロセッサ側からのみのアクセスに利用できます.
PS3などで利用されていたセルプロセッサではSPMが搭載されているものがありましたが,メインストリームにはなれませんでした.

バス

各モジュールをつなぐ部分です.
バスは各モジュールがいつ使うかという管理機構が複雑でした.
関係ないけどバスって移動手段のバスと同じ語ですよね.Busはラテン語のomnibus(すべての人のための)という意味らしいので,このバスはすべてのモジュールのためのものとなります.

UART

UARTという規格でUSBを通じて外部の機器と通信できます.
外部から機械語の入力をこのシステムに与えればCPUが動く,みたいな用途を想定しています.

タイマ

時間を計ります.
ハイデガーによると存在は時間を根拠にしています.

ROM

記憶領域です.
ROMはFPGAベンダが提供しているIPコア(APIみたいなものです)を使って評価ボード上に搭載されているROMにアクセスができます.



プロセッサの構成

計算機の構成は大きく分けてCISC(Complex Instruction Set Computer)とRISC(Reduced Instruction Set Computer)の2パターンあります.
両者の大きな違いは命令長の長さです.

従来の計算機は命令長の長いCISCで,CPUが実行する命令が長いとデコードに時間がかかり,また並列処理に向きません.消費電力も大きいです.
実際にユーザが計算機で使う命令は単純な命令の組み合わせで実現できることがほとんどなので,命令長を短くして,それを並列に行ってスループットをあげよう,という思想から生まれたのがRISCアーキテクチャでした.
RISCでは命令パイプライン(命令を実行するライン工みたいなイメージです)によってレイテンシを隠蔽し,スループットの向上を実現しています.また,これによってレジスタ間の伝達遅延を抑えられるため,動作周波数が向上できます.
最もよく使われている命令パイプラインアーキテクチャは次の5つのステージで構成されます.

  1. Instruction Fetch: 命令をメモリから取り出す
  2. Instruction Decode: 命令を解釈して,演算に備える
  3. EXecute: 演算を実行する
  4. MEMory access:メモリのロード,ストアを行う
  5. Write Back:CPUレジスタにデータを書き込む

f:id:fan_ko_tamura:20180330152401p:plain

しかし,様々な要因によって図に示すような理想の動作ができません.
次に示すパイプラインハザードが発生した時には,何もしない命令を途中にはさんで処理の整合性を保つ必要があります.

IFとMEMが同じタイミングで発生し,伝送路が競合する場合

命令キャッシュとデータキャッシュを分ければ解決できます.ハードウェア的に領域を分けるということです.

EXの演算結果がレジスタに書きこまれない間に参照される場合

キャッシュレジスタを用意し,そこに演算結果を書き込んで参照すればよいですね.
賢いコンパイラならコードをなるべく依存関係がない順番にアセンブルしてくれます.

分岐命令により,順次実行されてきた命令が破棄される場合

( ˘•ω•˘ ).。oஇ



私自身は今回フォワーディング(EXの結果を直接次の命令で参照すること)を実装しました.
参考した本でも実装例があり,たぶん上記の中でこれが一番楽です.

こちらに実際Verilogで記述したコードがあるので,もし良ければご参照ください.https://github.com/flublight/my_CPU_with_SPARTAN3
自分で書いたコードとテキストのサンプルコードがごちゃまぜなので読むに耐えない感じになっています.

プログラマ的にRISCを知っておくと何がいいか

インテルのCPUも内部的にはRISCアーキテクチャを採用しているため,RISCの知識があるとより高速なプログラムを書けるかもしれません.
たとえば分岐命令を少なくすれば,上述のとおりパイプラインハザードを防ぐことができます.
更には,コンパイラや命令セットの知識があれば,パイプラインハザードを防ぐ効果的なプログラムが書けるようになります(しかし,その場合たいてい可読性が犠牲になります).高速性が必要となるソリューションでは,このような知識がかなり重要になります.

しかし,もっと早くするには,FPGAを使った専用回路を構成することが必要になると思います.

動作確認

をしたかったのですが時間の都合上できませんでした.
また現状ではデバッグが不十分なので十中八九動作しないと思います.
また,ロジックが正常であってもタイミング制約を与えてないので,もしかしたら動作しないかもしれません.10MHzの低速動作のため,遅延猶予は十分あるので杞憂かもしれませんが.
また,入出力機構はUARTしかないため,電気的な信号劣化の可能性は低いと信じています.

開発のまとめ

やったこと

  1. FPGA上にCPUと周辺回路を作った.
  2. CPUは32bitRISCプロセッサで,フォワーディング機能を持つ

できなかった(から後にやるべき)こと

  1. デバックちゃんとやる(めんどくさい)
  2. UART通信が正常にできるか実機確認する
  3. 機械語を送って動作するか確かめる

つらかったこと

  1. 配線がめんどう
  2. デバッグがめんどう
  3. 社内プロキシにはじかれる
  4. FPGA開発ツール探し(使ったFPGAが古かったので,それにあうバージョンを探す必要があった)

インターンの感想

かなりスケールの大きいデジタル回路を1から設計し実装したのは初めてだったので,システム全体の把握や,波形シミュレーションを使ったデバッグが大変でした.
機能の十分な検証にはあと数週間くらいかかりそうです(テスト項目をちゃんと作ったりしたら数ヶ月かかると思います).
しかし,計算機の内部の細かい仕様がわかり,実際にプロセッサを実装するのに必要な論理設計がなんとなくでも理解できたのは大きな収穫でした.

また,F@Nで働いている方の隣で開発ができて,働いている方々の実態がある程度わかりました.みなさん自由に,リラックスした環境で開発できるはすごく良いところだと感じました.また,社員の方にランチに連れて行っていただいたり,卓球の部活動に参加できたりと楽しい時間が過ごすことができて嬉しかったです.

最後に

二ヶ月間たいへんお世話になりました.
在学中にこのような貴重な体験ができて本当に良かったです.
本ブログは半分くらい計算機アーキテクチャのお勉強的な中身になってしまいましたが,エンジニアの方々の教養にでもなれば幸いです.
お世話になった方々はもちろんですが,事業とは関係ない開発を受け入れていただいたF@Nの懐の広さに改めて感謝いたします.ありがとうございました.

初めてのデータ分析をした話

こんにちは! インターン始めてもうすぐ5ヶ月になる a_ota です。
時が経つのは早いですね、このあいだ正月だったのに、もう春ですね。お花見したくなります。
大学生活も残り少ないので、たくさん遊ぼうと思います。


さて、前回は、iosアプリについてでしたが、
今回はガラッと変わって、python,SQLでのデータ分析についてです。

SQLでの分析

まずは、アドテクの仕組みを説明していただき、(恥ずかしながら何も知らない状態でした...)
SQLで何かデータを取り出して、excelで図にするところから始めました。
学校の3年の後期の授業で、初めてSQLを扱ったので、まだ知識が新しく覚えていましたが、
こんなに膨大な、しかも実際に使われているデータを扱ったのは初めてだったので、
授業では習わなかった書き方など知ることができました。

pythonでの分析

半月ぐらい経つと、pythonでの分析に変わりました。
ここら辺から、CTR予測、検定、クラスタ分けなど、アドテク独自の言葉や機械学習独自の方法、用語が並ぶようになりました。
後日、友達に尋ねると、授業で習った内容だったようですが、私はほとんど覚えていない用語ばかりだったので、最初のうちは、検索して勉強して、を繰り返していました。

CTR予測

CTR予測とは、広告のクリック率を予測し、ユーザーにより良い広告を提供できるようにするものです。
予測には主に機械学習をつかって精度を上げていったり、一部に起こる不具合の原因を調べたりしました。
実装する内容については、t_sakai さんにご指導いただきながら行いました。今でも苦戦していますが、pythonのライブラリが豊富でとても魅力的でした。


得られた結果の1つを紹介します。


CTR予測として、ロジスティック回帰とGBDTでgrid searchというものを行いました。
grid search とは、いくつかパラメータを与えるとそのモデルの中で最も良い結果になるパラメータの組み合わせを探してくれるものです。とても便利ですね!


まず、ロジスティック回帰では、
f:id:fan_a_ota:20180328181505p:plain


次に、GBDTでは、
f:id:fan_a_ota:20180328181512p:plain


となり、結果としてGBDTの方が良い結果となりました。
時間はかかってしまいましたが、AUCが 0.70 を超えたのは、今回行ったGBDTだけでした。


ここで、評価指標の見方についてですが、
t_sakai さんの記事を貼っておきます。
tech-blog.fancs.com


また、同じような解析を行っていた、同じインターン生の r_konuma くんの記事も貼っておきます。
tech-blog.fancs.com


社内ページ用のコード

社内で使われているページの裏で回っているpythonやMySQLのコードをいじったり、cssを編集してレイアウトを変えたりもしました。
社内サーバーからコードを書き換えるのは少し緊張しましたが、うまく関数化したり工夫することを学べました。
また、cssについては、ハッカソンの時に少しいじったり、学校の課題では締め切りに追われていたので、
今までうまく時間が取れなかったのですが、この機会に、ゆっくり好きなだけデザインを変えることができ、様々なデザインを知れたので楽しかったです。


まとめ

pythonもSQLもほぼ初めての状態からのスタートでした。
分からないところだらけだったけど、意外となんとかなるものなんだな〜、と思いました。


というのも、私にとって今回扱ったものは、難しそうと遠ざけていたのですが、調べればいろんな情報が出回っているし、すでに同じようなことをしている人がたくさんいるので、参考にできるものが多かったです。
もちろん、社員の方々にいろいろ助けてもらいましたし、データがないとそもそも扱えないことだったので、とてもいい経験になりました。
これを機に、これからも気になったものはいろいろチャレンジしていきたいです!

最後に

ランチに誘っていただいた社員の方々ありがとうございました!


機械学習についての知識不足だった私にわかりやすく解説して頂き、
その他業務でもご指導いただいた t_sakai さん、
インターン生の困った時の頼みの綱、 y_kawasaki さん、
他にも困った時の質問に答えていただいた社員の方々、
そして、身の回りのサポートの他、いろんな話を聞いていただいた a_uchida さん、
本当にありがとうございました!!

大学生3人組でインターンに参加させていただきました

2018/3/19~2018/3/23まで2018/3/21の春分の日を除いての4日間インターンに参加させていただきました。
メンバーはfopen(@fopen_s) , Kanon(@kanon_k4) , itosato(@it0sat0) の三人です。

インターンに参加した理由

参加者全員が立命館大学の新2回生であり、立命館大学で2017/11/25日に開催された通称「あいちゃれ」(正式名称:立命館大学 全国高校・大学ソフトウェア創作コンテスト(ICT Challenge+R))にてファンコミュニケーションズの方々より、アイデア部門で賞をいただきました。その際に「好きなものを好きなように作るインターンがある」ということを教えていただき、『自分が作りたいものを開発してよく、その上実践経験のあるプロのエンジニアさんに質問できるとか行くしかねぇなこれ!』と、思い参加させていただきました。

4日間でしたこと

今回は、「あいちゃれ」で提案した農家さんと学生さんをマッチングするサービス「CCCS~City & County side Connecting Service~」を実際に開発することにしました。

1日目

会社に到着すると用意された机に案内されました.荷物をおいて少し休憩するとミーティングルームに案内され、会社の大まかなルールと入社に必要な書類を渡されました。
インターンを行うにあたっての書類が新入社員とほぼ同等数書く必要があったため、午前中は社内ルールの説明やオフィスの案内、書類にサインする時間になりました。4日間という短い期間にも関わらず、しっかりと社内案内や書類。緊急時の対応等を用意していただいており大変好感がもてました。書類を書き上げると歓迎会でお昼を食べに行きましょうと声をかけていただき、一緒に昼食を食べました。
午後からはエンジニアの方を交えて現在考えている大まかなサービスシステムや使用技術について共有を行いました。その後メンバーでミーティング。実装する機能の洗い出しや全員のイメージを擦りあわせてから、最後にもう一度エンジニアの方を交えてシステムの概要を報告して、更なるアドバイスをいただきました。そこからは個人作業に入り、それぞれが担当する部分の大まかな開発の進め方や詳細部分の決定作業を行い、初日は終了!

2日目

fopen・バックエンド(Flask + db管理)
Kanon・jQueryでフロントとバックエンドを結合
itosato・(html + css + js)でフロント
という役割分担初日に決まったので朝から開発をはじめました。
フロント・バックエンドは順調に開発が進んだものの、jQueryからAPIサーバーにPOSTするとOPTIONSというメソッドを使用していてPOSTできない問題が発生し、半日溶かしてしまいました。
エンジニアの方も経験があったらしく、アドバイスをもらうことで何とか解決し一安心。
現在のWebブラウザでは、あるWebサイトが持つ情報が別の悪意あるWebサイトに悪用されるのを防ぐために備わっている防御機構(CORS)が原因でした。

3日目

フロント・バックエンドは開発スピードが早くはなかったが何とか滞ることなく、じわじわと進捗を生み続けることが出来ていました。
しかし、またしてもjQueryとFlask間でエラーが発生。
どうしてもFlask側から投げたCookieをjQueryで保持することができない問題が発生しました。
二日目の件についてはバックエンド側の対処で解決したため、レスポンスヘッダーにいろいろ設定してみたり、リクエストを変えてみたりしましたが、どうしても上手く行かずこれも半日程度溶かしてしまうことに。
エンジニアさんと議論した結果、決め手となる情報源を見つけることはできませんでしたが、どうやらhttp通信とajaxでは若干レイヤーが違うようなのでうまくいかなかった様子。試行錯誤することで上手くcookieを利用する手法があるかも知れないというところまでたどり着きましたが、進捗状況的に考える時間は無かったためレスポンスヘッダーにトークンをのせて返すことになりました。おそらくセキュリティ的によろしくないので真似する際は自己責任でよろしくお願いします。

4日目

インターン最終日だというのにFlaskとjQueryの進捗が芳しくなかったため、それぞれ気合を入れなおしたり、残り数時間じゃ実装できないと嘆いたりとバタバタしながらの作業。
結果的に動作させたい9割ぐらいの実装は完成しましたが、jQueryでリクエストを飛ばす際のエラーに時間が裂かれすぎてjQueryの実装をギリギリ間に合わせることが出来ませんでした。
バックエンドのセキュリティ対策も全くと言ってもいいほど出来ず……DBは生で叩いているのにエスケープが全くされていないため、SQLインジェクションやXSSもやり放題となっている現状のままではとても公開できそうにはありません。
後1日あればなんとか形になったと思いつつも、4日間という短い期間に目や肩や腰が痛くなったものの、プロの方々の手厚いサポートを受けながら真剣に開発が出来たということを今の時期から経験できたことは、とても大きな糧となりました!

社内の雰囲気

社内の雰囲気は、参加初日の月曜日こそ皆さんが疲れていたようでとても大きな声で話せる雰囲気ではなかったですが、火曜からはエンジニアさんがふざけあったり昼ご飯の時間にボードゲームで遊んだり、エンジニアの皆さんが笑顔で仕事をしており、とても良い職場だと感じました。

メンバーそれぞれの感想

fopen

社内は綺麗で働いている社員さん達も挨拶をすると必ず返してくれるため、とてもよい環境でした。
言語化できていない質問にも的確にアドバイスをしていただき、短い間でしたが技術的なサポートだけでなくイベントの開催や食事会を開いてくださったのですぐに緊張がとけて、会社になじむことができました。
とても成長できた4日間だったと感じています。様々なサポートありがとうございました。

Kanon

私はインターンに参加すること自体初めてだったので、色々と緊張もしていたりしましたが、最後は非常に楽しむことができてよかったです。
開発環境に関しては、もっと静かな部屋でキーボードのタイプ音だけが鳴り響くような場所を想像していたりしましたが、
社員のみなさんが色々会話していたり笑っていたりして、とても楽しい環境でした。
今回開発していた、Webアプリケーション自体はとても「よくできた」ものではなかったのですが、エラーが出たら質問できたり、構成について相談できたり、あたたかい場所でした。
ランチなどで他のインターン生の方との交流もすることができ、4日間とも非常に多くの知見を得られるインターンでした。
短い期間でしたが、ありがとうございました。

itosato

今回のような、がっつりサービスを開発するというインターンは初めてで、さらにフロント開発も本格的なものは今回が初めてだったのでいろいろと心配な部分が多かったのですが、サービス概要を詰めていくところからプロの方々のサポートを受けることができたので、自信をもって開発を進めることが出来ました!
初日からエンジニアの方も含めたランチや懇親会など、開発の部分以外もとても充実しており、エラーや不具合で苦しんだ部分もありましたが、とても素晴らしい経験をさせていただきました。4日間という短い間でしたが、本当にお世話になりました。ありがとうございました!

まとめ

・各々の技術アップにつながった
・個人で学ぶことが難しいDB設計などが学べた
・Web系は難しい……
・会社の雰囲気が伝わった

最後に

4日間という短い期間でしたが、入社から退社までのフォロー、技術的なアドバイス、歓迎会などのイベント開催など大変お世話になりました。とても楽しく勉強させていただきました。本当にありがとうございました!

インターンで圏論に目覚めた学生の話

3月19日から1週間お世話になっているy_koizumiです。
2月頭からインターンを転々としており
これが5社目で春休み最後のインターンとなりました。

普段は学生団体でチーム開発をしています。
技術領域としてはゲーム・Android/iOS・サーバといろいろ経験してきました。

インターンのブログを書くとのことで1週間で思ったことを
他のインターンなどの比較を踏まえながらツラツラと書いていきます!

やったこと

今回のインターンではviidleの機能開発をScalaでやらせてもらいました。
「viidleのアクション(View)を別アプリケーションで実行する」機能の一部を開発しました。

実際に担当したのは「Pub/SubのMessageをSubscribeしてHTTPリクエストを送る」というものです。

参加の経緯

他のインターン生と同じくサポーターズで面談したことがきっかけで
インターンに参加させていただくことになりました。

他の会社のインターンにも結構入っていたので
何か得るものがあるかな〜というラフな気持ちできていました

インターンの目的

・Scala触ってる会社を色々みてみたいと思ったから
・Scalaでの関数型プログラミング能力を向上させたかったから
・ScalaとかDDDやっている人たちとの人脈作り
この時点では圏論なんてことは頭の中にありませんでした(笑)

4日間の日程

・1日目:AkkaStreamsとGCPを使ってサンプルを動かす
・2日目:AkkaStreamsを本格的に使ってみる
・3日目:並列化によるパフォーマンスの向上、DDDについて雑談
・4日目:圏論について学習、ブログを書く、Rustについて雑談

1日目

業務内容

午前中は入社手続きをやりました。
他の会社よりも約2割り増しの記入量だったと思います ^^;

午後からは1週間でやることの説明と実装に取り掛かりました。
初めてAkkaを使うのでわからないことが多かったですが
石川さんに色々教えてもらって実装していきました。

余談

戦術的DDDを取り入れている最中とのことで、これからメンバーに浸透させていくのは大変だろうなぁと勝手に思っていました。
DDDを取り入れるのはどの会社でも苦戦しているようだったので
何かチームとして勉強していく方法はないものか自分でも探してみようと思います(笑)

2日目

業務内容

2日目はAkkaStreamsを使ってロジックの実装を行いました。
基本のSource、Flow、Sinkを理解して
BroadCastやZipなど色々な実装方法を試していました。

ドキュメントが英語なので少し苦戦しましたが
石川さんに助けてもらいながらロジックを実装することができました。

感じた事

石川さんが英語の文献をさらっと投げてきていたので
やっぱり英語の文献を積極的に活用しなきゃダメだなー感じました。

3日目

業務内容

パフォーマンス改善と認証情報の外部ファイル切り出しに取り組みました。
AkkaStreamsの仕様を理解するのが苦しかったので
石川さんに英語の記事を紹介してもらって頑張りました。

2日目で処理フローを分けていたのですが
これでは実装できなかったので処理フローを1本化して実装し直しました。

パフォーマンスの詳しい値を検証することはできませんでしたが
非同期で実行するため処理が詰まることは無さそうです。

圏論に興味を持ち始めた

機能開発がある程度落ち着いたら、関数型や圏論について色々お話しさせていただきました。
Scalaの基本的な操作はある程度できるようになっていたので
これからはモナドとかを学習していこうかなと考えるようになりました。

学生のためのインターンイベントに参加した

業務後にインターン生の成果発表イベント?なるものに参加しました。
イベントでは元営業の方とお話することができて新鮮でした。一人が数十社の企業を相手にすると聞いて面白そうな世界だなと感じました。

思い返すと、どこの会社に行っても人事、エンジニア、役員としか話していなかったので
営業の方と話すのは初めてだったかもしれません。

4日目

業務内容

3日目終了の時点でタスクは一区切りついたのでブログを書いていました。
ブログを書くこと自体は初めてで、ただ感じたことを書いたんですが大丈夫なんですかね ^^;

圏論について

石川さんや酒井さんから圏論についての話を聞いていると面白そうだなと思ったので、
午前中は関数型プログラミングと圏論についてひたすら情報を集めていました。

友達に数学科の人がいたので圏論について聞いてみると
「かなり抽象的だから数学をある程度やってから嗜むもの」
と言っていたのでかなり難しい概念なんだと再認識しました。
職業エンジニアの場合ライブラリの使い方を理解できていれば十分なのかな〜とも思ったりしました。

圏論を適用した高度なライブラリが開発され続けており、関数型プログラミング言語をやっていく上では重要な概念なので、これから1年かけて勉強していこうと思います。

まとめ

・技術的な気づきを多く得ることができたと思います。
・会社の雰囲気については、落ち着いてるな〜という印象を受けました。
・関数型の理解を深めるためのキッカケとなったのでよかった。
・ピザを沢山食べる事が出来た
・圏論頑張る。

1週間ありがとうございました!

ランチに誘ってくれた社員の皆さんありがとうございました!
石川さんと酒井さんとは技術的なお話をする機会が多かったのでとても助かりました!
内田さんにも手続き周りでサポートして下さりありがとうございました!