OTOBANK Engineering Blog

オトバンクはコンテンツが大好きなエンジニアを募集しています!

Live Coding の話を教えてもらいました

みなさんお久しぶりです! @riaf です。

暑い日が続きますね!水分補給しっかりしてますか? このクソ暑い日々に満員電車で通勤するの大変ですよね。弊社は満員電車禁止なので、空いてる涼しい電車で通勤オッケーで最高です。っていうか、僕は北海道に住んでいるので、そもそも涼しくて最高ですよ!

今日もこんなところでブログを書いています。

f:id:riaf:20190731124634j:plain
自宅の中庭でお仕事

最高。

どうしても満員電車に乗らなければいけない方にオススメのサービスはこちらです! audiobook.jp

そして本日も社内勉強会シリーズ、 id:kalibora 先生の「Live Coding してみたい」という発表でした。 engineering.otobank.co.jp

「Live Coding を知ってますか?」という問いに弊社メンバーは「登壇者がリアルタイムでコーディングするやつでしょ?」っていう反応でしたが、今回はちょっと違う話。

音楽や映像を即興的にプログラミングで作ってみせる「ライブコーディング」というパフォーマンス

https://weekly.ascii.jp/elem/000/000/405/405286/

資料や言語などがまとまっている toplap/awesome-livecoding という GitHub リポジトリが参考になります。

今回は TidalCycles を試してみたというお話。 しかしこの内容をテキストで紹介するのも難しいですし、チラッとだけ勉強会の様子を動画でどうぞ。

もっと本格的なやつは YouTube で見られます (笑)

youtu.be

youtu.be

僕もガラケー時代に MML とかは少し触ってたり、その昔に MIDI 打ち込んで遊んだりもしていましたが、このパフォーマンスは初めて見ました。 簡単に試してみることも出来そうですし、興味のある方はまずインストールしてみてはいかがでしょうか〜!

今回の発表資料はこちらです。

オトバンク社内勉強会 - プログラミング教育知ってる?

このブログにて既に数回記事にしている開発チームメンバーによる 社内LT、 今回は、タイトル『プログラミング教育知ってる?』で 2020年から始まるとされる小学校プログラミング教育の話について紹介します。

発表は、弊社CTO 佐藤によるものです。2019年6月1日に開催された、オープンソースカンファレンス2019 Hokkaidoにて行われたセッション「『プログラミング教育』とは? 今、わたしたち道民ができること」」では、司会をつとめております。*1

『プログラミング教育知ってる?』

勉強会で紹介された内容は、来年度から始まる教育内容の確認や、プログラミング教育について「私たちにできる支援は何だろう?」と各プログラミング教育活動についてです。

スライドと取り上げた内容は、OSC2019 Osakaで発表された「2020年から始まる小学校プログラミング教育の話」の資料を大いに基にしております。

プログラミングを教育するの?

学習指導要領では、「プログラミング教育」と一言も言っておりません。プログラミング教育はプログラム言語を学ぶのが目的ではなく、学びを深めるのが目的です。勉強会では、小学校プログラミング教育の概要を確認しながら、 PCN プログラミング クラブ ネットワーク や CoderDojo Japan の取り組みについてみていきました。

感想としては、論理的思考に寄せていくための手立てとして、プログラミング教育が寄与できればなと思います。

オトバンクは、U-16プログラミングコンテスト釧路大会のスポンサーです

U-16プログラミングコンテスト釧路大会の第7回が、 10月12日(土)に開催されます。 オトバンクから弊社CTO 佐藤が参加予定です。イベントについて詳しくは、U-16プログラミングコンテスト釧路大会のサイトを確認ください。 - https://u16procon-kushiro.qloba.com/

勉強会紹介: Mastodonについて

こんにちは。スマホ向けアプリを担当している けいま と申します。以後お見知りおきを。

オトバンクでは毎週、弊社エンジニア全員が集まる場で社内勉強会をしております。 engineering.otobank.co.jp

今回は同じくアプリエンジニアの s4kr4 さんが発表した "Mastodonについて" を紹介します。


Mastodonについて

f:id:p-side:20190708180859p:plain

2016年公開のミニブログシステム。TweetDeckに似たUIを持っています。 短文投稿をすることが目的のシステムです。 ユーザーをフォローすることによりタイムラインが形成でき、リプライやDMでコミュニケーションを取ることが出来ます。

ちなみに「マストドン」は絶滅した動物(象の祖先)の名前とのこと。

特徴

Mastodonは特定(単一)の企業が運営しているサービスではありません。 ソースコードやデプロイ方法が公開されており、誰でもサーバーを建てることが出来ます。

国内では mstdn.jp や Pixiv運営の pawoo.net、Qiitaが運営しているqiitadon.com などがあります。 かつてドワンゴが運営していた friends.nico もありましたが閉鎖されました...

アカウントを作成する際はどのインスタンスに所属するかを決める必要があります。 それはSlackのworkspeceに似ているかも知れません。

どこでアカウントを作っても、異なるインスタンス間でのコミュニケーションもできるようになっています。

技術要素

nginxがWebサーバーとして採用されている。 HTTPS転送やメディアファイルへのリクエストにキャッシュ要求ヘッダを追加するなど。

サーバー処理としてRailsが採用されており、Mastodonの主要部です。 ストリーミング以外のAPI提供をしています。

StreamingAPIの提供にNode.jsを採用しています。

データベースにはPostgreSQLを採用しています。

フロントエンドはReactで記述されています。

画像やユーザーアイコン、カスタム絵文字の保持にAWS S3かOpenstack Swiftが使えるようになっています。 (なおOpenstack SwiftはS3よりもちょっと安いらしい)

ジョブハンドラにsidekiqが採用されており、非同期処理のキューイングやリトライ処理で使われます。 小規模サーバーでユーザーが増えたときに重くなる原因になることが多いようで、 登壇者のアカウントを作成したサーバーにおいても、ユーザーが増えて重くなったので鯖主がsidekiqの対応をしていたようです。

ActivityPub

ActivityPubは、W3Cで標準化された非中央集権型のソーシャルネットワークプロトコルです。

異なるインスタンス間でどうやってコミュニケーションを取るのか?を定義するもので、Mastodonはその実装の1つです。

概念としては以下の2つがあります。

outbox: 自分が起こしたアクティビティ(トゥート, ブースト, フォロー)が集積されているコレクション inbox: 自分が受け取ったアクティビティが集積されているコレクション

outboxのアクティビティが一定のルールに応じて他のインスタンスユーザーのinboxに送信されます。 リプライを例に説明すると、 リプライを送ったユーザーのリプライがoutboxに蓄積され、リプライのActivityが相手のinboxに届き、 リプライされた側のユーザーがリプライを受けたことを気づくことができる

質疑応答のコーナー

  • sidekiqってRuby製?
    • Yes
  • 運用難しいって聞いたけど?
    • スケールさせるのが難しいらしい

まとめと雑感

Mastodonは私(keima)もTwitterからの避難地としてアカウントをひとつ持っています。 (現在はからあげクン新商品のレビューアカウントですが・・・)

私はMastodonそのものよりもActivityPub実装に関心があり(そのくせ自分で実装する根性はないのですが・・・)、 より広く使われるようになる未来が来ることを願っています。

個人的には既存サービスのインターフェースとしてActivityPub実装がなされるようになるかと期待したのですが、 そのようなムーブメントは起きず、ActivityPubを実装したシステムが産まれるに留まったのは物足りなく思いました(それだけでも凄いことですが)。

現在においてメールアドレスを人格ごとに1つ以上持つ(例えば個人のGmailアドレスとは別に会社のメールアドレスをもつ)ように、 ActivityPubプロトコルで人格ごとに発信をする未来が理想ですが、流石に夢見すぎかなと我ながら思ったりもしました。

というわけで今回はこの辺で。また来週 ノシ