タグ

ブックマーク / tech.mirrativ.stream (56)

  • AddressableによりWebGLゲームのクラッシュ率が改善した話 - Mirrativ Tech Blog

    こんにちは、ミラティブ菅谷です。MirrativのWebGL製ライブゲームにて、アセットのロード方法をインスペクタでの直接参照からAddressable Asset System(以下Addressable)に変更したことで、クラッシュ率が大幅に改善し、クラッシュせずにプレイが終了した「正常プレイ率」は98%まで改善しました。記事では、その具体的な手順と効果について紹介します。 課題背景 MirrativのライブゲームはWebGLで動いていますが、特にモバイルのWebGLではパフォーマンスに気をつける必要があります。今回改善を行ったプロジェクトではもともとAddressableを使用していませんでした。プロジェクトの初期リリース時点では大きな問題もなく運用できていましたが、アセットやリソースを追加していくにつれてクラッシュが多く見られるようになりました。ただし、WebGLではクラッシュし

    AddressableによりWebGLゲームのクラッシュ率が改善した話 - Mirrativ Tech Blog
    honeybe
    honeybe 2024/06/12
  • CLIツールの管理をSPMからMintに移行した経緯とその課題 - Mirrativ Tech Blog

    はじめに お久しぶりです、iOSチームにインターンとして参加させて頂いておりますMと申します。 MirrativのiOSアプリでは、これまでSwift製のCLIツールをBuildToolsという名前のSwift Packageを作成してこれにまとめて管理していました。 しかしこの度、ある課題や利便性の観点からyonaskolb/Mintでの管理に移行しました。 今回はMintへの移行に至るまでの背景や経緯、および移行に際して起こったいくつかの課題をどのように解決したかについて書いていこうと思います。 目次 はじめに 目次 Mintへの移行に至る背景 CLIツールの利用 SPMによる管理における課題 依存関係の不整合 依存解決の時間 Mintへの移行 Mintへの移行時に発生した課題とその解決 バージョンの自動更新 バージョン更新のためのコマンドを実装 1. Mintfileのパスを取得 2

    CLIツールの管理をSPMからMintに移行した経緯とその課題 - Mirrativ Tech Blog
    honeybe
    honeybe 2024/05/30
  • SwiftGenとSwift-DocCを活用してコード上の画像を一瞬でプレビューする方法 - Mirrativ Tech Blog

    こんにちはiOS開発をしている福山です。 この記事では、SwiftGenとSwift-DocCを用いて、xcassetsを開かずにコード内の画像をQuick Help(右パネルまたは⌥オプションキー+クリック)で直接確認する方法を紹介します。 各ツールの簡単な説明 Swift-DocCは、Swift言語用のドキュメント生成ツールです。Swiftコード内に書かれたコメントから、ナビゲーションが容易で、見た目も美しいドキュメントを生成することができます。 SwiftGenは、Xcodeプロジェクトで使われるリソース(画像、フォント、色、ローカライズなど)を静的に型付けされたSwiftコードに変換するツールです。自動生成された安全なコードを通じてリソースにアクセスできるため、タイプミスによるエラーや存在しないリソースへの参照をコンパイル時に検出するのに役立ちます。 SwiftGenの生成コード例

    SwiftGenとSwift-DocCを活用してコード上の画像を一瞬でプレビューする方法 - Mirrativ Tech Blog
    honeybe
    honeybe 2024/03/22
  • Neural Audio Codec を用いた大規模配信文字起こしシステムの構築 - Mirrativ Tech Blog

    こんにちは ハタ です。 最近Mirrativ上に構築した配信の文字起こしシステムを紹介したいなと思います 音声からの文字起こしは、各社SaaSでAPI提供されているものがあると思いますが、今回紹介するものはセルフホスト型(自前のGPUマシンを使う)になります 構築していく上で色々試行錯誤したのでそれが紹介できればなと思っています どんなものを作ったか 前提知識: 配信基盤 前提知識: Unix Domain Socket Live Recorder Archiver DS Filter VAD Filter NAC / Compress Transcriber NAC / Decompress Speach To Text コンテナイメージ まとめ We are hiring! どんなものを作ったか 今回作ったものは Mirrativで配信されるすべての音声を対象に文字起こしを行う シス

    Neural Audio Codec を用いた大規模配信文字起こしシステムの構築 - Mirrativ Tech Blog
    honeybe
    honeybe 2024/03/05
  • Cloud BuildでDockerのマルチプラットフォームイメージをビルド - Mirrativ Tech Blog

    こんにちは、バックエンドエンジニアの藤井脩紀です。 今回は表題の通りCloud Buildを活用してDockerのマルチプラットフォームイメージをビルドする方法をご紹介しようと思います。 マルチプラットフォーム is 何 まず、マルチプラットフォームイメージとは何かから説明すると、複数のCPUアーキテクチャやOSに対応したイメージのことです。 より具体的にはDockerの公式ドキュメントとブログが参考になるかと思いますので挙げておきます。 Multi-platform images | Docker Docs マルチプラットフォームドッカービルド | Docker 動機 そしてマルチプラットフォームのイメージが必要となった背景ですが、Appleシリコンの登場によりローカルでの開発ではARM、サーバー上ではAMDのイメージが欲しいというニーズが生まれました。これに応えるべくマルチプラットフォ

    Cloud BuildでDockerのマルチプラットフォームイメージをビルド - Mirrativ Tech Blog
    honeybe
    honeybe 2024/02/29
  • input type=“date” の沼から、ライブラリを導入する意義を考える - Mirrativ Tech Blog

    はじめまして!2023年7月からミラティブでフロントエンドインターンをしております、かずえもんと申します😺 今回は、インターンでの作業中にハマってしまった Safari のバグについて調査していたら、なんと10年モノの issue だったことが判明し、ライブラリを導入する意義について考える機会となった話を書いてみたいと思います。 Safari の日付入力欄に無効な日付を入れると起こるバグ onChange が正しく呼ばれないのは Safari が原因? Safari 17 以降で再現しないので原因は Safari で間違いなさそう Safari 17 以前での解決方法として DatePicker を使ってみる まとめ: ネイティブを補う存在としてのライブラリ We're Hiring!! Safari の日付入力欄に無効な日付を入れると起こるバグ 2023年8月、私はミラティブの管理シス

    input type=“date” の沼から、ライブラリを導入する意義を考える - Mirrativ Tech Blog
    honeybe
    honeybe 2024/02/20
  • ミラティブCTO交代の挨拶 - Mirrativ Tech Blog

    みなさまこんにちは、ちぎら @naru_jpn とよこて @n0mimono です。noteの方に対談を掲載していますが、テックブログのほうでも記事を書いてみようと思います。社内外の多くの方に読んでいただければ幸いです。 note.com prtimes.jp CTOを交代しました! 今のCTOより こんにちは、ミラティブ3代目CTOの千吉良(ちぎら)です。プレスリリースにあるように2024年1月よりCTOに就任しました、よろしくお願いいたします。 夏さん、横手さんと組織の中でCTOの移り変わりを眺めていて自分がその立場になるとは夢にも思わず生活をしていた訳ですが、せっかく挑戦する機会をいただいたのでお話を受けさせていただくことにしました。 私は2018年の8月からミラティブに副業ではじめて関わり、そのまま同年12月にミラティブに入社しました。 note.com インタビューにも書いたと思

    ミラティブCTO交代の挨拶 - Mirrativ Tech Blog
    honeybe
    honeybe 2024/01/23
  • iOSプロジェクトに対してモジュール分割しながらSwiftUIを部分適用している事例 - Mirrativ Tech Blog

    こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 MirrativのiOSチームでは、開発効率の最大化を狙い以下に取り組んでいます。 データフローの単方向化 (Fluxアーキテクチャの強制) 宣言的UIによるView実装 (SwiftUIの部分適用) 責務分割 (モジュール分割) 今回の記事では、どのような構成でSwiftUIを適用し始めたか、また、MirrativのiOSプロジェクトの構成やプロダクト特性の課題感からセットでモジュール分割を進めている点を紹介します。 背景 前提となるプロジェクト構成 導入に向けて決めたこと SwiftUIでどこまで実装するか 体アプリではなくSwiftPackageを活用する 垂直分割するか水平分割するか 方針やTipsを明文化し育てる 新規開発部分のUI開発をFeatureモジュールで行う SwiftPackage: SwiftUI.

    iOSプロジェクトに対してモジュール分割しながらSwiftUIを部分適用している事例 - Mirrativ Tech Blog
    honeybe
    honeybe 2024/01/16
  • UnityチームでGodot勉強会をしました - Mirrativ Tech Blog

    こんにちは、ミラティブ菅谷です。ミラティブではUnityチームで定期的に勉強会を行っています。今回はその取り組みの一つとして行ったGodot勉強会について紹介します。Unityエンジニアから見たGodotの特徴や触ってみての感想を記載しました。 背景:Unityライセンス体系の変更 2023年9月、Unityはライセンス体系の変更を発表しました。この変更は、多くのUnityユーザーに影響を与え、さまざまなゲームエンジンに関する議論を促しました。ミラティブのUnityチームもこの動きに注目し、ゲームエンジンの多様化に関する議論を行いました。最終的にライセンス体系は再変更されたため、ミラティブでもUnityからの移行は見送りとなりましたが、この話題をきっかけに他のゲームエンジンへの理解を深めることでUnityの長所と短所をより明確に把握することが必要であるとの結論に至りました。 Godot選択

    UnityチームでGodot勉強会をしました - Mirrativ Tech Blog
    honeybe
    honeybe 2024/01/10
  • サービスの管理画面を継続的に改善するためのReact Hook FormとZod活用術 - Mirrativ Tech Blog

    こんにちは!ミラティブのフロントエンドエンジニア どじねこ です。 今回は、ミラティブを支える社内向けの管理システムにおいて、機能開発の体験を改善する取り組みを「MUIZodReact Hook Form の活用術」としてご紹介させていただきます。 前提 ミラティブでは、他の多くの Web サービスと同様に配信者さんの登録した情報や配信の履歴を管理する社内向けのシステムが存在しています。 特に管理システムのフロントエンドにおいては、その特性上入力フォームの実装がその大半を占めています。 日々の機能開発においては、そうした管理システムに実装された入力フォームの新規実装や機能拡張が行われています。 課題 一般的な入力フォームでは、画面の初期描画の際にすでに設定済みの値をフォームに適用する初期化処理や、入力された内容を検証して必要に応じてエラー表示するバリデーション処理が必要です。 ミラ

    サービスの管理画面を継続的に改善するためのReact Hook FormとZod活用術 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/11/21
  • 【Go】time.Time.AddDateの注意点と対策 - Mirrativ Tech Blog

    こんにちは、バックエンドエンジニアの藤井脩紀です。 今回の記事では日付計算に潜む罠についてお話しさせていただきます。 なお今回はGoでの事例をご紹介しますが、原理的には他の言語やライブラリでも同様の事象が発生する可能性があります点にご注意ください。 time.Time.AddDateの注意点 突然ですがここでクイズです。 来月が何月か知りたいので以下のようなコードを書きました。 このコードを実行したのは10月だとします。 結果は何になるでしょう? // AddDateの引数は順に年、月、日でそれらの値を加算したtime.Timeを返してくれます fmt.Printf("%d月\n", time.Now().AddDate(0, 1, 0).Month()) 「え、11月でしょ?」と思う方もいらっしゃるかもしれませんが正確には異なります。 焦らさずに書きますが答えは「11月か12月のどちらか

    【Go】time.Time.AddDateの注意点と対策 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/10/31
  • 内製オブジェクトストレージサーバ「b3」でコスト最適化を目指した話 - Mirrativ Tech Blog

    インフラストリーミングチームの近藤 (@udzura) です。今回は、ミラティブで内製しているオブジェクトストレージサーバ「b3」の紹介記事を書きたいと思います。 今回の記事は、6月にGopher Talkというイベントで発表した「Go製ミドルウェアを実践投入するにあたりやったこと」をベースに、内容を詳細にしたり直近の開発状況に合わせて更新したものです。一部内容はこの発表と重複していますがご了承ください。 オブジェクトストレージサーバを内製した背景 1. 大量オブジェクトの操作や増え続ける転送量に対応したい 2. 一定期間しかファイルの保持をしない 3. オンメモリ/SSD/HDDを組み合わせたチューニングがしたい オブジェクトストレージb3の特徴 S3 互換の基的なAPIを実装 LSM-Tree index+WALなDB/マージ操作に対応 I/O 帯域を制限可能 非同期レプリケーション

    内製オブジェクトストレージサーバ「b3」でコスト最適化を目指した話 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/10/20
  • SwiftyJSONからDecodableへ移行する際に気をつけてよかったこと - Mirrativ Tech Blog

    こんにちは、iOSエンジニアのいっちー(icchi (@0IcchI) / X)です。 MirrativのiOSアプリでは4年ほど前にレスポンスパラメータとレスポンスクラスのマッピングにDecodableを採用したAPIクライアントを作成し運用してきました。 新規の実装ではDecodable対応のAPIクライアントを採用していましたが、旧式APIクライアントを用いた膨大な量の実装はそのままにしていたので、今年から気持ちを高めてAPIクライアントの移行作業を開始しました。 気持ちを高めたものの、レスポンスクラスのデコード処理をSwiftyJSONからDecodableへ移行する際に、「レスポンスクラスの継承関係/依存関係の複雑さ」や「マッピングの際の型変換」によって悩まされることが多々ありました。 そんな悩みを乗り越えて、レスポンスクラスをDecodableへ移行する際に気をつけてよかったこ

    SwiftyJSONからDecodableへ移行する際に気をつけてよかったこと - Mirrativ Tech Blog
    honeybe
    honeybe 2023/10/11
  • 【インフラ】xDS API の EDS に手を加えて動的に Envoy で weight 調整できるようにした - Mirrativ Tech Blog

    こんにちは、ミラティブのインフラを担当している清水です。 ミラティブではクラウドに Google Cloud を利用しているのですが、稀にインスタンスの性能劣化が発生し動かしているアプリケーションの応答時間が長くなることがあります。 非同期な処理の場合は一時的にタスクキューの時間あたりの処理数が減るものの、遅延を許容できる機能であれば時間経過で回復するのでシステムを継続稼働できます。 一方で、web サーバのように同期処理の場合はリクエストを時間内に返すことができずに timeout したりだとか、worker が埋まって新たにリクエストが返せなくなったりと、正常にリクエストを返すことができずにユーザのクライアントにエラーが返ってしまします。 そこで、今回はクラウドが不調になったときに web サーバへ流れるリクエストの流量を動的に制御し、一時的にリクエスト数を減らしてユーザのクライアント

    【インフラ】xDS API の EDS に手を加えて動的に Envoy で weight 調整できるようにした - Mirrativ Tech Blog
    honeybe
    honeybe 2023/10/08
  • ミラティブでのアウトゲーム設計の紹介 - Mirrativ Tech Blog

    こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。 今回はミラティブのライブゲーム開発で行ったアウトゲームの設計について紹介します。 以前アウトゲーム設計に関してXでポストしたらレスポンスをいただけたのでできるだけ丁寧に解説してみました。こんな話も聞きたいよというのがあったら是非教えてください。 よくありそうなソシャゲアウトゲームの設計について今更記事化してるんだけどどれだけ需要あるんだろう。MVPの概念とかクリーンアーキテクチャライクな知識って業界的な浸透率どんなもんなんだ。— 鉄 -TETSU- (@tetsujp84) 2023年8月28日 アウトゲームについて ゲーム開発者にとっては馴染み深いと思いますが、ゲームにはインゲームと呼ばれる部分とアウトゲームと呼ばれる部分に別れます。インゲームゲーム体験のコアでキャラクターを操作したり、アクションがあったりと

    ミラティブでのアウトゲーム設計の紹介 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/09/22
  • UnityでモバイルWebGLゲーム開発を頑張る話 - Mirrativ Tech Blog

    こんにちは。ミラティブUnityエンジニアの菅谷(tetsujp84)です。 ミラティブのライブゲームUnityで開発し、MirrativアプリのWebGLで動いています。 ライブゲームを支える仕組みと実際のライブゲーム開発で使用した技術については過去の記事で紹介しています。 tech.mirrativ.stream tech.mirrativ.stream UnityはWebGL向けにもビルドでき、モバイルのWebGLであってもUnity製プロダクトが動くようになっています。一方で、Unityは正式にはモバイルWebGL対応をサポートしておらず、ネイティブのモバイル開発と比べると開発の難易度は高いです。その難易度の高さは具体的にどこにあったのか、実際にモバイルWebGL向けのゲームを開発した経験を元に知見を共有します。 パフォーマンス編 モバイルWebGLの開発は常にパフォーマンスの意

    UnityでモバイルWebGLゲーム開発を頑張る話 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/08/14
  • iOSプロジェクト内の神クラス解体の進め方 - Mirrativ Tech Blog

    こんにちは、クライアントエンジニアの竹澤(@to4iki)です。 Mirrativでは、リアルタイムの配信視聴時のコメントやギフト機能を実現するために、WebSocket ベースの仕組みを利用して、サーバー・クライアント間でPub/Subのメッセージングを行っています。*1 サーバーからのHTTPレスポンスをマッピングするように、ペイロードのJSONを受け取り、それをクライアントで扱う型に変換して使用していますが扱いにくい点がありました。記事では改善に取り組んだ内容と進め方を紹介します。 目次 課題 ゴールと進め方の認識あわせ 1. 最初にゴールの定義を行う 2. 段階的な進め方の方針と見通しを立てる ゴールまでの道筋を可視化する 3. 技術的な懸念事項などを先に潰し作業をパターン化する 動作検証に利用する再利用可能なサンプルのペイロードを定義する Decodable準拠のレスポンスでI

    iOSプロジェクト内の神クラス解体の進め方 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/06/28
  • Go Conference 2023 にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルでお話してきました - Mirrativ Tech Blog

    こんにちは ハタ です。 このたび Go Conference 2023 Online にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルで発表しました 久しぶりの大きなカンファレンスでの登壇だったのでとても緊張しましたが、10周年を迎えた機会に登壇できて光栄です gocon.jp 今回発表した資料はこちらになります、当日のアーカイブは近々公開されると思いますのでお待ち下さい speakerdeck.com (2023/06/28追記) アーカイブ公開されたようです! もし当日ご覧になれなかった方はこちらからご視聴ください! zenn.dev さて、今回登壇するにあたり資料を用意していたのですが、発表時間の関係で削除してしまった内容がいくつかあるため、ここで紹介させてください go <-> cgo のオーバーヘッドを何とかしたい トランポリンコードの世界 c

    Go Conference 2023 にて Go/Cgoで映像・音声のリアルタイム処理をやるまでの道のり というタイトルでお話してきました - Mirrativ Tech Blog
    honeybe
    honeybe 2023/06/08
  • LeSS Huge を参考にしたスクラムのスケーリング - Mirrativ Tech Blog

    こんにちは、エンジニアのちぎらです。先日 開発組織にはじめてのスクラムを導入する という記事を公開しました。先日の記事にも課題として記述した通り、組織の一つのチームにスクラムを導入した後は、他のチームにどのようにスクラムを展開していくか、全社的な開発体制をどうやって変えていくかということを考えていく必要があります。 ミラティブでは、その後の半年弱の期間で3つの開発チーム全てにスクラムを導入しました。さらに、LeSS Huge を参考にした開発体制を敷くことで、チーム横断の開発施策の把握や、全社的な開発施策の透明化を推進しています。 スクラムを他チームに展開する 先日の記事を書いた時点では、ひとつの開発チームにスクラムを導入したのみでした。いずれかのチームでスクラムの導入経験があれば、他のチームへのスクラムの展開は比較的簡単です。一方でチームへのスクラム導入のタイミングは重要で、メンバーの混

    LeSS Huge を参考にしたスクラムのスケーリング - Mirrativ Tech Blog
    honeybe
    honeybe 2023/05/23
  • Jetpack ComposeにおけるViewの多重タップ、複数同時タップの防止策 - Mirrativ Tech Blog

    こんにちは。ミラティブのAndroidエンジニアのかねき@kanesyです。 以前の記事でも何度か紹介していますが、MirrativのAndroidアプリでは新規で作る画面には積極的にJetpack Composeを活用しています。 tech.mirrativ.stream Jetpack Composeでの開発が活発になるにつれて、Viewの多重タップや、リスト中の複数アイテムの同時タップなどの想定外の挙動に向き合う必要が出てきました。 そこで今回は、MirrativのAndroidアプリで採用したJetpack ComposeにおけるViewの多重タップや、リスト中のアイテムの複数同時タップに対する取り組みについて紹介します。 Android Viewにおける多重タップ防止 Jetpack Composeでの実装の説明に移る前に、まずは既存のAndroid Viewにおける多重タップ防

    Jetpack ComposeにおけるViewの多重タップ、複数同時タップの防止策 - Mirrativ Tech Blog
    honeybe
    honeybe 2023/04/12