エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Scalaで参照透過に作用を扱う

エムスリーエンジニアリンググループの冨岡です。この記事はエムスリーAdvent Calendar及びScala Advent Calendarの20日目の記事です。

  • はじめに
  • Future の特徴
    • Future の長所
      • 標準ライブラリで提供されている
      • 抽象化の戦略がわかりやすい
  • Future の短所
    • 処理を即時実行する
    • 結果が否応なしにメモ化される
    • ExecutionContextが必要なシーンが多い
  • 参照透過な作用
    • (コラム)プログラムをプログラムすることについて
  • 3rd party の Pure Effect ライブラリの紹介
    • Cats Effect: IO
    • Monix: Task
    • ZIO
  • まとめ
    • 参照透過性について補足
  • We're hiring!

はじめに

Scalaでは、作用、特に非同期での作用を扱うためのデータ型として scala.concurrent.Future が提供されています。これは手軽につかえて便利である一方、使いづらい点もいくつかあります。この記事ではそれらFutureの使いづらい点に触れ、それに対する関数型プログラミングでのアプローチと、それを実現する3rd partyライブラリをいくつか紹介します。

続きを読む

3Dアバター化しながらプレゼンするWebアプリを作った話

f:id:owl-m3:20191218160740p:plain (デモ用の3Dモデルは「ニコニ立体ちゃん」をお借りしています)

  • 概説
  • 技術スタック
    • three-js/three-vrm
    • clmtrackr-js
    • 実装
  • 工夫をつける
    • まばたき
    • リップシンク
    • パラメータのバリデート
  • まとめ
    • 余談
  • We are hiring!

概説

この記事は エムスリー Advent Calendar 2019 の19日目の記事です。

好きなマスコットはGopherくん、好きな言語はRuby! 最近の業務は主にJavaScriptとKotlin! エムスリーエンジニアリンググループのowlです。

さて、弊社内で毎週行われる『テックトーク』ではエンジニアが好きな技術の話を発表し合っています。最近になってこの発表を画面/音声キャプチャして保存し、後からいつでも発表内容を視聴できるシステムが構築されました。🎉

www.m3tech.blog

ただ、このシステムでは当然ながら発表者の姿が録画内容には含まれません。もし、プレゼン中の画面にアバター化した発表者を常時表示すれば発表の雰囲気をより良く伝えることが出来るはずです。今回はこの課題を解決するアバター表示プレゼンWebアプリを開発しました🎉。本当は自分がどうしてもGopherくん(のアバター)になりたかったので作っただけですが。

最近ではこのようにアバターを表示させながらプレゼンする人々をしばしば見ることが出来ます。例えばProduct Manger Conferenceでピクシブ社の方がアバター登壇しているのが有名ですね。いつか見慣れた光景になる可能性もまったくないとは言えません。そうゼロではない。

続きを読む

登壇経験無しの私がなぜ2週間連続で登壇できたのか

この記事は エムスリー Advent Calendar 2019 の18日目の記事です。

こんにちは、エンジニアリンググループ マルチデバイスチームの大和です。

先月の半ばから末にかけて、JJUG CCC 2019 FallとDevelopers Boost 2019の2つのカンファレンスで登壇しました。 これまでカンファレンス規模の登壇経験がなかった私が、11/23 (土) と 11/30 (土) の2週間連続 (のハードスケジュール) で登壇したことについてお話します。

f:id:daiwa_home:20191217191545j:plain
Developers Boost 2019会場そばの夜景 (池袋サンシャインシティの近く)

続きを読む

新規アプリでGraphQLを全面採用した話

この記事は エムスリー Advent Calendar 2019 の17日目の記事です。
こんにちは、エムスリーエンジニアリンググループ マルチデバイスチームの金丸 (@maru333) です。
アナと雪の女王2 は最高でしたね。ただ、劇中の波のシーンが実写か3DCGかを考えだすと気になって夜も眠れません。

さて今日のAdvent Calender では、新アプリを開発する中でGraphQLを試行錯誤しながら色々試した話をしたいと思います。

f:id:kanemaru-m3:20191216220546j:plain
栃木の大谷資料館 巨大地下空間に行った時の写真。ここはPV撮影や映画撮影など様々な事に使われる空間で、今ドラクエをやっているのでドラクエっぽいなと思って上げました (本文とは一切関係ありません)

続きを読む

MediaStream APIで画面キャプチャとマイクからの音声を同時に収録する

f:id:iwata1990:20191212185413j:plain
熱海のMOA美術館で撮影した景色

この記事は エムスリー Advent Calendar 2019 の 16 日目の記事です。

こんにちは、 エムスリーエンジニアリンググループ、プロダクトマネージャーの岩田です。 今回はMediaStream APIで画面キャプチャとマイクからの音声を同時に録画する方法についてご紹介します。

続きを読む

Googleフォームへの投稿を Google Apps Script で Amazon SQS にメッセージ送信する話

この記事は エムスリー Advent Calendar 2019 の15日目の記事です。

こんにちは。エンジニアリンググループ、SREチームの平岡(@uhtter)です。

思い返せば早1年前、エムスリーに入社してから最初に書いたのが AdventCalender の記事でした。 今回は、エムスリーのSREチームの業務に関するお話をします(タイトルもそれに関連します)。 最後までお付き合いいただければ幸いです。

f:id:uhm3:20191213194016j:plain
開発合宿*1で撮った風景写真です。これからフェリーに乗って帰るところです。

*1:今回の記事で紹介している一連の仕組みは開発合宿で作りました

続きを読む

Vueでレイアウトの切り替えを高階コンポーネントで実装する

この記事はエムスリー Advent Calendar 2019の14日目の記事です。

ご無沙汰しております、エムスリーエンジニアリンググループ 兼 QLife チーフアーキテクトの園田 (@ryoryoryohei) です。

今回はフロントエンドライブラリである Vue.js (というか vue-router)の小ネタです。

Nuxt.js を利用しない場合、vue-router で複数レイアウトを扱うには「ネストされたルート」の利用が公式ドキュメントで案内されています。

今回は「ネストされたルート」を利用せず、複数レイアウトの出し分けを高階コンポーネントで実現してみます。

詳しい人ならこの時点で実装含めてすべてイメージできちゃいますね。

第二の故郷 十和田湖の写真
第二の故郷 十和田湖の写真

続きを読む