MicroAd Developers Blog

マイクロアドのエンジニアブログです。インフラ、開発、分析について発信していきます。

Scala

【新卒エンジニア向け】マイクロアドエンジニアの技術スタック(広告配信ユニット編)

こんにちは。 マイクロアドシステム開発部RDU(RTB Development Unit)でサーバーサイドエンジニアをしている飛田です。 この度は、主に新卒エンジニアの方や新入社員の方向けに、 数ある開発チームのうちの1つであるRDUで使っている技術について共有させてい…

情報処理学会 第85回全国大会 にインダストリアルセッションスポンサーとして協賛します!

マイクロアドは3月2日(木)~4日(土)で開催される 情報処理学会 第85回全国大会 〜ダイバーシティと情報処理〜 にインダストリアルセッションスポンサーとして協賛いたします! それに伴い、初日3月2日(木)14:30からエンジニアの大澤が講演予定です。 …

Scala3のMultiversal Equalityの紹介

はじめに こんにちは。マイクロアド京都研究所の池田です。本記事ではScala 3で導入されたMultiversal Equalityという等価の仕組みについて、実際のコードで動作を確認しつつ解説します。 コードはScala CLIで実行可能です。ぜひお手元でも実行してみてくだ…

UNIVERSE AdsでのScala 幽霊型 (Phantom Type) の活用方法

はじめに こんにちは。マイクロアド21年卒サーバーサイドエンジニアの陶山(id:suyama_naoki)です。普段は主にDSP (UNIVERSE Ads) の開発を行なっています。 今回の記事では、UNIVERSE AdsでのScala 幽霊型の活用方法について共有させていただきます。 はじ…

Scala依存型の調査

こんにちは。 マイクロアドでサーバーサイドエンジニアをしている飛田です。 今回はScalaの依存型について調査してみましたので、共有させていただきます。 依存型について調査したきっかけは、 Scalaで型レベル”だけ”でクイックソートという記事で、 こちら…

Scala マクロアノテーションに入門するための準備体操

Scala マクロに入門するための準備体操 サーバサイドエンジニアの飛田です。 マイクロアドの開発チームでは、以下のようにマクロアノテーションを使って、 処理時間が重要なメソッドのマイクロベンチマークを計測することがあります。 // コンパイル時に対象…

Atomic, volatile, synchronized について

はじめに サーバサイドエンジニアの酒井です. 普段はマイクロアドが提供する広告配信プラットフォーム UNIVERSE Ads の DSP 部分の開発をしています. 今回は JVM 言語におけるマルチスレッドプログラミングに関するいくつかの用語の理解と整理を兼ねて記事に…

Scalaのリテラル型について調べてみた!

サーバサイドエンジニアの飛田です。 主にDSPの開発を行っています。 今回の記事では、Scalaのリテラル型について調査しましたので、 ここで共有させていただきます。 リテラル型 SIP-23 - Literal-based singleton types | Scala Documentation リテラル型…

Cats の関数覚え書き

はじめに 前回 Scala With Cats を読む前に知っておきたかったこと というタイトルで、Scala With Cats の輪読会に参加した際の感想などを書きました。 developers.microad.co.jp その中で "今後やろうと思っていること" として挙げた「Cats で実装されてい…

Scala With Cats を読む前に知っておきたかったこと

はじめに こんにちは。マイクロアドでソフトウェアエンジニアをしている田口と申します。 私が所属しているチームでは COMPASS というプロダクトに関する開発をメインで行っており、広告配信システム(Scala)、管理画面(Kotlin・Java)、バッチ系(Digdag(Pytho…

圏論初心者が自然変換について学んでみた!

こんにちは。マイクロアドでソフトウェアエンジニアをしている飛田と申します。私は主に UNIVERSE Ads というプロダクトの開発に携わっています。 UNIVERSE Ads では、より関数型ライクな設計や実装を取り入れることにより、高い保守性と効率性を目指してい…

SSPリニューアルの新規参入者向けチュートリアルを作って内定者アルバイトが爆速で即戦力になる予定の話

はじめに システム開発本部アプリケーションエンジニアの新卒1年目の輿水です。 前提としてマイクロアドのCOMPASSというSSPのプロダクトをScala、Catsを用いてDDDの戦術的戦略を取り入れてリニューアルすることになりました。 Scala、Cats、DDDを初めて学習…

Akkaを利用したクローラ開発

こんにちは、Tech Labの中野(@tosametal)です。 本記事ではAkka(Scala)を利用して開発したクローラの紹介を行います。 ストリームデータに対してクロールをする上で工夫した、ドメインごとのクロール頻度制御などについて紹介します。 Akkaはメッセージ指向…

圏論初心者が関手に入門し、Scalaで実装した話

はじめに こんにちは。マイクロアドでソフトウェアエンジニアをしている飛田と申します。私は主に UNIVERSE Ads というプロダクトの開発に携わっています。 UNIVERSE Ads では、より関数型ライクな設計や実装を取り入れることにより、高い保守性と効率性を目…

新卒2年目のエンジニアがモノイドの数学的な定義について調べてScalaで実装してみた

はじめに モノイド 代数学 圏論 Scalaでモノイドを実装する 代数学的な定義に従った整数を加算するモノイドの実装 圏論的な定義に従った整数を加算するモノイドの実装 モノイドの合成 Catsによるモノイドの利用例 おわりに はじめに こんにちは。マイクロア…

マイクロアドの新卒エンジニアがCatsに入門してみた

目次 目次 はじめに 型クラス シンタックス インタフェースオブジェクト implicitlyメソッド Catsの型クラスとインスタンス Catsまとめ 考察および雑感 型クラスのメリット 実装の責務のイメージ 終わりに はじめに こんにちは、19新卒バックエンドエンジニ…

Developers Boost 2019で登壇してきました

こんにちは、まっつーです。11/30に開催されたDevelopers Boost 2019に登壇してきました。 今年はマイクロアドからもスポンサーさせて頂き、登壇の他、ブースの出展も行いましたので、その様子を皆さんにご紹介できればと思います! はじめに Developers Boo…

「関数型言語をもっと使いこなしたい!」マイクロアドの新卒エンジニアがデータサイエンティストの先輩に圏論の初歩を指導してもらった話

はじめに こんにちは、19新卒バックエンドエンジニアの飛田です。 弊社では、プロダクトの一部にCatsという関数型プログラミングを行うためのライブラリを導入しており、今後、Catsをより多くのプロダクトに使用していく予定です。 Catsにはモナドやファンク…

ScalaMatsuri2019の参加レポート

こんにちは。サーバサイドエンジニアの松宮です。 今年もScalaMatsuriに参加してきました。そして今年は大名スポンサーとして協賛させて頂きました! 濃い内容のセッションが盛りだくさんで非常に勉強になりましたので、いくつかピックアップしてレポートを…

dead code following this construct ...という警告

マイクロアドのサーバサイドエンジニアの松宮です。本日はある日の社内日報を焼き直して、外部公開することにしました。 ・・・ ある晴れた日のこと。Specs2でテストを書いていて、下記のようなコードをコンパイルをすると警告が出ることに気が付いた。 ... …

Using the Java Comparator Construction Method in Scala

はじめに Ordered[T] compareの実装 コンパレータ構築メソッドを使って定義する Benchmark まとめ 参考文献 追記(2019/03/11) はじめに はじめまして。アプリケーションエンジニアをやってる新卒1年目の石田です。 Scalaをメインで書いているのですが、Scala…

Akka Streamsで例外を扱う時の注意

マイクロアドのサーバサイドエンジニアの松宮です。本日は技術Tips記事ということで、Akka Streamsで例外を扱う時の注意点についてのお話です。 Akka Streamsはフローを分岐した複雑なグラフを作る事が簡単に出来ます。また、例外についても捕捉する手段はい…

Spark Streaming と Kryo シリアライザーの話

マイクロアドでアプリケーションエンジニアをしている「G」です。日々、バッチを作ったり WEB アプリケーションを作ったりしています。 今回はライトに Spark Streaming でカスタム Kryo (クライオ)シリアライザーが必要になってしまったお話を書いていき…

新卒が初めてScalaを触って詰まったところと解決方法

18新卒でマイクロアドに入社した山城です。 今回はScalaを一切触ったことのない僕が、いきなりScalaで開発を初めて困ったところと、どうやって解決していったのかをセットにして紹介したいと思います。 初心者がどこで詰まるのかというところ、どのようにし…

2018年アドベントカレンダー完走

MicroAd Advent Calendar 2018 - Qiita 昨年から参加しているアドベントカレンダー(2017年はこちら)、今年も参加表明してくれたメンバーが頑張ってくれたおかげで完走することができました。年末の忙しい時期に時間を割いて投稿してくれた皆さんお疲れ様で…

Scala関西Summit 2018に参加したので感想を書きます

マイクロアドのサーバサイドエンジニアの松宮です。少し時間が経ってしまったんですが、今年もScala関西Summitに参加してきましたのでマイクロアドと絡めながらつらつらと感想を書きたいと思います。 ちなみに今年はマイクロアドからも初めてスポンサードさ…

SparkでGeoIP2を使うとjava.lang.NoSuchMethodErrorが発生する問題の回避方法

マイクロアドのサーバサイドエンジニアの松宮です。今回はプログラミングのTips的な記事になります。 タイトルの通り、「SparkでGeoIP2を使うとjava.lang.NoSuchMethodErrorが発生する問題の回避方法」を説明したいと思っておりまして、というのも、SparkでG…

マイクロアドに新卒で入っていきなりScalaを書かされた話

はじめまして。マイクロアドでアプリケーションエンジニアをしている新卒1年目の石田です。 主に、MicroaAd BLADEという広告配信プラットフォームの開発をしています。 内定者アルバイト時代からマイクロアドでBLADEの開発に携わっていました。BLADEのソース…

広告配信プログラム PerlからScalaへの軌跡

MicroAdの京都研究所でソフトウェアエンジニアとして勤務している池田です。主に広告配信やReal Time Bidding(以下RTB)のプログラムの開発に携わってきました。 本日はアドネットワークと呼ばれていた時代から現在主流となったRTBに至るまで、MicroAdの広…

順序保証型分散ストリーム処理

はじめまして.マイクロアドの新卒3年目のサーバサイドエンジニアの松宮です. 主にMicroAd BLADEという広告配信プラットフォームの開発をしています. サーバサイドの開発言語はJava/Scalaが中心で,最近はScalaの利用シーンが増えてきました. ということ…