推しアイデア
カメラから受け取った映像をリアルタイムでAAに変換してターミナルに表示してくれる
―
カメラから受け取った映像をリアルタイムでAAに変換してターミナルに表示してくれる
エンジニアたるものWebブラウザを開くことよりターミナルを開くことの方が多いだろうからターミナル上でミーティングできたらいいよねってなった
パフォーマンス重視! サーバー側はRedisとin-memory-cacheを用いて,大量のトラフィックも捌けるようにしています. 多言語対応! 諸事情により使えない言語がある人向けに3言語での実装を行いました
エンジニアってめんどくさがりですよね? ミーティングに参加するためにブラウザやミーティングアプリを開かないといけないと面倒だなと思ったことがある人は多いのではないでしょうか? そんな人のために開発したのがこの「*om」というアプリ。 なんとターミナル上でビデオ通話ができます! カメラから取得した映像をアスキーアート(AA)に変換し、ターミナル上で文字列として表示しています。ギリギリ輪郭や表情がわかる絶妙な解像度で映るので、身だしなみが整っていない状態でも安心してミーティングに参加できます。 全てがターミナル上で完結する、そんな世界の幕開けとなるアプリです!
エンジニアたるもの諸事情や宗教上の理由で使えない言語があると思います.そこで,今回のプロダクトではクライアントサイドは複数の言語(C++,Python,Go)で行いました.また,マルチプラットフォーム対応(Mac,Windows,Linux)も行いました. AA化にはOpenCVを用いました
今回はリアルタイム通信サーバーということで,パフォーマンスを意識して作りました.通信はUDPで行い,インメモリキャッシュを用いてキャッシュを行い,データの保存にはRedisを用いました.
今回はサーバーへの負荷がかかりやすいサーバーということで,負荷分散ができるようにしました.またargoCDを用いており,開発者体験がとても良かったです.
ADRとDesign Docのドキュメントに関してはscaffdogでテンプレートを自動生成できるようにMakefileに書いてあります.(バージョニングもできます!)
. ├── Dockerfile ├── Makefile ├── README.md ├── app │ ├── adapter │ │ ├── controller │ │ │ ├── chat.go │ │ │ ├── controller.go │ │ │ ├── meeting.go │ │ │ └── schema.go │ │ └── gateway │ │ ├── client.go │ │ └── room.go │ ├── di │ │ ├── wire.go │ │ └── wire_gen.go │ ├── domain │ │ ├── entity │ │ │ ├── client.go │ │ │ └── room.go │ │ └── repository │ │ ├── client.go │ │ ├── data_store.go │ │ ├── db.go │ │ ├── in_memory_cache.go │ │ └── room.go │ ├── driver │ │ ├── redis │ │ │ └── init.go │ │ ├── ristretto │ │ │ └── init.go │ │ ├── tcp │ │ │ └── server.go │ │ └── udp │ │ └── server.go │ └── usecase │ ├── ascii_art.go │ ├── chat.go │ ├── meeting.go │ └── session.go ├── changelog.config.js ├── ci.mk ├── cmd │ └── main.go ├── compose.yml ├── data │ └── redis │ └── dump.rdb ├── docs │ ├── ADR │ │ └── 1_ristretto.md │ └── DesignDog │ ├── 1_アスキーアート.md │ ├── 2_ルームの作成.md │ ├── 3_ルームの参加.md │ ├── 4_ルームの退出.md │ ├── 5_音声通信.md │ ├── 6_コメント機能.md │ └── 7_放映者の選択.md ├── go.mod ├── go.sum ├── locust │ ├── data_subnet.tf │ ├── main.tf │ ├── output.tf │ ├── plan │ │ └── basic.py │ ├── provisioner.tf │ └── variables.tf ├── server.go └── utils ├── config │ └── config.go └── uuid └── uuid.go