spacelyのブログ

https://tech.spacely.co.jp/

Spacely Engineer's Blog

フィード

記事のアイキャッチ画像
bashで回せ!!!
spacelyのブログ
はじめに spacelyでEMとかなにとかやっている いちろー です。 結構shell scriptとか one liner で、何かをグルグル回す事って多いと思います。 その方法をいろいろと並べてみようと思います。 n回回せ!!! seqを使う方法 seq commandの出力を使います。 for f in $(seq 0 99); do echo ${f} done C的な記法で回す Cっぽいforの書き方で回せます。 for (( i=0; i<100; i++ )); do echo $i done rangeっぽい記法で回す rangeっぽいオブジェクトを作って回せます。 for f…
3ヶ月前
記事のアイキャッチ画像
社内モバイルLT会はじめました!
spacelyのブログ
はじめに 株式会社スペースリー iOSエンジニアの樋川です。 普段は弊社サービスの、物件の撮影を補助/管理するアプリのiOSの開発をしています。 現在、モバイルアプリチームはマネージャー1人、iOS/Android 2名ずつの計5名の構成となっています。 今回は、モバイルアプリチームで行っているモバイルLT会について紹介したいと思います! LT会が始まった経緯 OSを横断して知識を共有する コミュニケーションを増やす 上記2点の機会を増やすために始まりました。 特に完全リモートワークの中で、チーム内のコミュニケーションの重要性が高まっています。 開催方法 頻度は隔週水曜日に1時間ほどです。 発…
5ヶ月前
記事のアイキャッチ画像
リードレプリカの導入に関する挑戦
spacelyのブログ
概要 弊社のサーバ(Ruby on Rails 6.1, Ruby2.7, MySQL5.7)環境にてデータベースの負荷が増加し、アラートが頻発しています。この問題を解決するために、 rails guide を読みながらリードレプリカの導入を検討しました。 このブログでは導入までの試行錯誤を記載します。導入前後の負荷の比較は記載していません。 開発環境に導入し、テストを実行したところ、GETでもレコードの作成、更新などDBにwriteしている部分ではReadOnlyErrorが発生するようになりました。 そのため、暫定対応として下記のようにwritingのconnected_toブロックで囲む…
7ヶ月前
記事のアイキャッチ画像
Recoil で管理する状態を atom から atomFamily に変更した話
spacelyのブログ
目次 目次 はじめに 状態管理したいデータ構造と機能要件 atom と atomFamily について atom atomFamily atom と atomFamily の使い分け atomFamily を使った実装 atom で実装した場合 atomFamily で実装した場合 atomFamily だからこその課題 atomFamily からデータを取得するためにはパラメータが必要 atomFamily の default に selector を設定できない 課題に対応した結果 リファクタリング前の状態一覧 (atom を使った実装の場合) リファクタリング後の状態一覧 (atomFa…
7ヶ月前
記事のアイキャッチ画像
AWSでFTPを実装するためのいくつかの方法
spacelyのブログ
AWS spacelyはなぜAWSにFTPを実装するのか 私はこのあたり全くの門外漢なのですが、不動産業界で古くから利用されてきた基幹システムではシステム間の連携の手段としてFTPを利用することが多かったそうです。 不動産VRを掲げるspacelyの場合でも例にもれず、外部連携の手段のひとつとしてFTPを提供してきました。 そのFTPを今後もつつがなく提供していくにあたって、AWSに実装していたFTP機能の構成変更をしたことがあり、今回はそのあたりについてすこし書いてみたいと思います。 AWSにFTPを実装する方法 いくつかの実装方法がありそうななかで、3つの方法を検討していきました 方法1.…
7ヶ月前
記事のアイキャッチ画像
Spacelyの研究開発プロジェクト紹介
spacelyのブログ
はじめに スペースリーの研究開発チームでエンジニアをしている植木です。この記事ではスペースリーで行っている研究開発について紹介します。 弊社は空間データプラットフォームを提供しており、具体的なアプリケーションとしては、不動産領域でのVR/Web内覧サービスや、研修領域に向けたVR研修サービスなどがあります。 VRというと3DCGのゲームやエンタメのイメージが強いと思いますが、弊社では360°カメラで撮影した実写の画像や動画をコンテンツとするサービスを展開しています。 VRを扱う会社でありつつ実写画像をメインで扱うため、画像や空間を認識するComputer Visionと、その結果をユーザに提示…
8ヶ月前
記事のアイキャッチ画像
3DのWebサービス開発で宣言的なWebGLライブラリを導入して感じた保守運用上のメリット
spacelyのブログ
1 はじめに スペースリーでエンジニアをしている長谷川です。 最近は3DのWebアプリの開発を担当していて、弊社でリリースしている「パノラマ変換3Dプレイヤー」のコンテンツ作成機能などを開発しています。 3DのWebアプリを開発する際には「React/Vue × WebGL系ライブラリ」という構成が代表的なケースの1つであり、弊社でもその構成を選択しました。 ところが、3D Webアプリはサービスの数としては多くないので保守運用まで考慮した設計ノウハウはまだまだ十分に共有されてはおらず、開発を進めるにあたって以下のような懸念点がありました。(詳細は次章) 「宣言的なReact/VueのWebア…
9ヶ月前
記事のアイキャッチ画像
[Kotlin] GLSurfaceViewをキャプチャーしてbitmapを取得したい
spacelyのブログ
まえがき 株式会社スペースリー Androidエンジニアのふかまちです。 普段は弊社サービスのツールであるAndroidアプリ「Spacely Photo Task」を開発しています。 現在、後述するパノラマ画像の360°Viewerをキャプチャーした動画を生成する開発に取り組んでおり、 本記事では開発で得た知見を元に、GLSurfaceViewの活用方法を一部ご紹介します。 Android x OpenGLならGLSurfaceView GLSurfaceViewとは、OpenGL ESをサポートしている、Androidの3D描画を行うためのViewです。描画にはGPUを活用していることでメ…
9ヶ月前
記事のアイキャッチ画像
GitHub ActionsでPRを自動生成するチュートリアル
spacelyのブログ
株式会社スペースリーのRailsエンジニアの海老原です。 スペースリーが提供するサービスの反映は、CSチームでテストを実施してから本番環境にリリースする業務フローになっております。各featureブランチごとに、テストを実施できるように、プルリクエストに動作確認の手順を記載し、動作確認をCSに依頼するという流れです。今回は、ラベルごとにPRの記載内容を書き分けて、自動でプルリクエストを作成できるようにする設定を、GitHub Actionsを使って行いましたので、コードを交えて紹介したいと思います。 以下のようなプルリクエストをGitHub Actionsから自動で作成できます。赤枠が自動で埋…
9ヶ月前
記事のアイキャッチ画像
WaylandでX sessionの環境変数を設定したり、初期起動をしたりする方法
spacelyのブログ
Waylandではxprofileやxsessionは読まれない。 株式会社 スペースリーでEngineering Managerをやっている いちろー です。 最近仕事で開発の事を全くやっていないので、家のlinuxの環境回りからネタを引っ張って来ました。 Wayland環境では、~/.xprofileや~/.Xsessionが読まれないです。 そうすると、X sessionでの環境変数を設定したい場合に困りますよね。 例えば日本語入力の時の定番の、 export GTK_IM_MODULE='uim' export QT_IM_MODULE='uim' export XMODIFIERS=…
10ヶ月前
記事のアイキャッチ画像
An interface is not an interface - Recent thoughts about clean coding
spacelyのブログ
Introduction Recently I've had to work on code which seemed to be based on clean architecture, but after a while I concluded that it is probably not and it made me think about clean coding in general and the principles of clean architecture in particular. Is it about a set of rules, and we are guara…
10ヶ月前
記事のアイキャッチ画像
150万レコードを持つ画像テーブルの移行
spacelyのブログ
株式会社スペースリー Railsエンジニアの大津です。 弊社サービスでは物件画像データの管理機能を提供しており、サーバーサイドのフレームワークにはRuby on Railsを、データベース管理にはMySQLを採用しております。これまで物件画像は用途ごとにテーブルを分けて管理していましたが、 アップロードした後に用途を変更できないため画像テーブルを1つに統合しました。 今回は統合する際に実施した旧テーブルから新テーブルへのレコード移行の手順をご紹介します。 統合前後の画像テーブルの構成 まず、統合前の物件画像の管理方法について説明します。 統合前は物件画像テーブルは部屋の写真を管理する内観画像テ…
10ヶ月前
記事のアイキャッチ画像
Vue 2 から 3 へ移行しようとしたらいちばん大変なのが Vuetify 2 から 3 への移行だった話
spacelyのブログ
はじめに 株式会社スペースリー フロントエンドエンジニアの宮坂と申します。 ふだんは3Dビューアやその編集画面のDOM部分をReactやVueで書きつつ、たまにフロントエンド開発環境構築おじさんとして他チームへ出しゃばったりして生きています。 今回はその環境構築に関わるところ、Vue 2 から 3 へ移行しようとしたらいちばん大変なのが Vuetify 2 から 3 への移行だった話を書きます。 レガシーを生かしつつアップグレードする苦労話としてニッチに刺されば幸いです。 経緯と背景 Vue 2 のEOLまで1年を切って スペースリーはサービスインから6年以上経つこともあり、技術スタックはプロ…
10ヶ月前
記事のアイキャッチ画像
Using RenderDoc to Analyze Browser Rendering
spacelyのブログ
What's RenderDoc? RenderDoc is a powerful tool for capturing and analyzing the rendering process of applications utilizing rendering APIs (Direct3D, OpenGL, Vulcan, etc.) RenderDoc injects itself into the application's execution process intercepting calls to the rendering API. Important Features The…
1年前
記事のアイキャッチ画像
モノレポでreviewdog/action-tflintを実行するためにOSSコントリビュートして解決した
spacelyのブログ
インフラエンジニアの thaim です。 スペースリーではインフラの構築にTerraformを、Terraformのコードに対する静的解析にtflintを利用しています。 このtflintを上手く活用するために取り組んだこと、OSSコントリビュートに取り組んだことについて紹介します。 スペースリーにおけるインフラ開発の背景 始めにスペースリーのインフラ開発におけるtflintの活用状況について紹介します。 tflintを実行する Terraformのコードの静的解析ツールはいろいろと存在しますが、lintツールとしてtflintがあります。tflintはTerraformコードのコード規約を設…
1年前
記事のアイキャッチ画像
MonoSDFによる360°パノラマ屋内シーンのテクスチャ付きメッシュ復元
spacelyのブログ
はじめに スペースリーでインターンをしている大隣嵩です。弊社は空間データ活用プラットフォームとしてパノラマ画像を使った空間の3D化技術に関する研究開発を行っております。 最近では、iPhoneやAndroidで簡単に3Dスキャンができるアプリが登場しています。しかし、アプリを利用した3Dスキャンでは、低テクスチャな領域やスパースに撮影された領域の高精度な3D復元が難しいという課題があります。本記事では、単眼深度推定、法線推定結果をNeural Fieldsの追加の制約として学習させることで、一般的に復元が難しいとされる低テクスチャやスパースな画像群から高精度な3D復元を達成したMonoSDF[…
1年前
記事のアイキャッチ画像
NeRFによる360°パノラマ屋内シーンの任意視点画像合成
spacelyのブログ
はじめに スペースリーでインターンをしている大隣嵩です。 弊社は空間データ活用プラットフォームを提供しており、パノラマ画像を使った空間の3Dビューワーをリリースしました。 研究開発チームでは、更なる精度向上やコンテンツ制作負担軽減のため、より精度が高く柔軟な3D再構成技術の研究開発を進めています。 NeRF(Neural Radiance Fields)[1]では、写実的な陰影表現を含むシーンの高精度な3Dキャプチャを行うことができます。最近になって、NeRFを簡単に試すことができるアプリ(LumaAI[2])やフレームワーク(nerfstudio[3])が登場したことにより、研究者以外の人で…
1年前
記事のアイキャッチ画像
比べてみよう リレーショナル vs ドキュメントDB
spacelyのブログ
はじめに 株式会社スペースリー Railsエンジニアの海老原です。 スペースリーではメインのデータベースとしてMySQLを採用していますが、今後、MongoDBの活用も視野に入れて検討をしています。 最適な活用方法を日々模索するなかで、一覧形式で機能を比較検討したいと思いまとめました。 スペースリーでは、マスタの系のデータでは既にRDBによるデータ設計がなされています。 RDBの世界では先にエンティティとリレーションシップを用いたデータ設計を行い、正規化を経てテーブルという実態に落とし込みます。 事前に、各オブジェクトの役割や関係性が明確になっていることが前提です。 一方で、試行錯誤して開発す…
1年前
記事のアイキャッチ画像
社内ライブラリを Swift Package Manager に対応させた
spacelyのブログ
はじめに 株式会社スペースリー iOSエンジニアの樋川です。 普段は弊社サービスの、物件の撮影を補助/管理をするアプリのiOSの開発をしています。 今回は、研究開発チームが作成した、画像を台形補正する社内向けのライブラリをiOSプロジェクトに入れた時の内容をまとめます。 現在、iOSプロジェクトでは、Swift Package Manager(以下”SPM”と略)でライブラリ管理をしており、今回も他のライブラリと同様にSPMで対応することにしました。 今回は通常のSPMへの対応に加えて、下記のケースに対応する必要がありました。 ライブラリがC++で書かれている ライブラリがOpenCV, Ei…
1年前
記事のアイキャッチ画像
counter_cacheの導入でレイテンシ改善
spacelyのブログ
株式会社スペースリー エンジニアの出口です。 普段は弊社サービスの建物や物件といった情報の管理画面を開発しています。 バックエンドはruby on railsで開発されており、今回は建物一覧のレイテンシ改善のためActiveRecordのcounter_cacheを導入した経緯と実装内容についてまとめます。 概要 サービスに登録されているアパートやマンションといった建物の一覧を表示するページでは、建物の情報に加えて建物に紐づいている物件(個々の部屋)の数や撮影された画像の数などを表示しています。 各モデルのリレーションは下図の通りです。建物と物件が親子関係にあり、建物と物件それぞれに属する画像…
1年前
記事のアイキャッチ画像
家具を撮影した1枚の画像から3D形状を復元する【後編】〜ShaRFの実データへの適用と複数枚画像への拡張〜
spacelyのブログ
はじめに スペースリーでインターンをしている大隣嵩です。 前回は、家具を撮影した1枚の画像から3D形状復元するタスクに取り組んだShaRF[1]の説明と、既存データセットを用いた実験を紹介しました。 この記事では、ShaRFを実データに適用した実験と、推論時に複数枚の画像を使用した実験を紹介します。 実データを用いた実験 実データに対してShaRFを実行するためには、3D復元対象オブジェクト部分の画像の切り出し、カメラ位置や家具のバウンディングボックスのアノテーション、シルエット画像の作成など事前にいくつかのデータを作成する必要があります。 まずこれらの事前のデータ作成について簡単に紹介した後…
2年前
記事のアイキャッチ画像
家具を撮影した1枚の画像から3D形状を復元する【前編】〜ShaRFの紹介とPix3Dでの実験〜
spacelyのブログ
はじめに スペースリーでインターンをしている大隣嵩です。 1枚の画像から家具の3D形状復元を行う問題は、結果が1つに定まらない不良設定問題です。しかし、深層学習を用いて、カテゴリ特有の形状に関する事前知識を獲得し、精度向上を達成した手法がいくつか提案されています。 ShaRF[1]では、1枚のオブジェクトを撮影した画像からカテゴリ固有の3D形状復元を行う手法が提案されました。ShaRFの目標は、NeRF[2]を用いて、1枚の画像からの任意視点画像合成を高精度に行うことですが、そのために、中間表現として、オブジェクトの3D形状復元を行います。まずは、ShaRFを理解する上で必要となる任意視点画像…
2年前
記事のアイキャッチ画像
MySQL 5.7で学ぶMySQLの最適化 (コスト計算と統計情報)
spacelyのブログ
前回はMySQLのオプティマイザの挙動について詳しく学びましたが、今回はオプティマイザが動作するにあたって必要な情報について確認していきます。MySQL 5.7から新たに、server_cost、engine_costというスキーマが導入されてオプティマイザがクエリの実行計画をコスト計算をもとに作成するような仕組みになっています。今回は、MySQL8の内容にも触れながら学んでいきます。MySQL8の内容についてはとくに下記の書籍が参考になりますので、ぜひ、手に取ってみてください。 MySQL 8 Query Performance Tuning 1. コスト算出方法 MySQLのオプティマイザ…
2年前
記事のアイキャッチ画像
MySQL 5.7で学ぶMySQLの最適化 (環境設定とパラメータ理解)
spacelyのブログ
いよいよ、昨年11月から、Amazon Aurora 8.0がリリースされ、8.0への移行の日が差し迫ってきました。 Spacelyでは、現在、Aurora MySQL5.7を利用していますが、8.0移行の前準備として、最近の最適化の仕組みを学びはじめました。筆者が知っている時代よりも、最適化プロセス(オプティマイザの機能)がかなり高機能なものになっており、今まで思い込んでいた、勝手に作られるTemporary Tableが遅いとか、サブクエリが遅いとか、INよりEXISTSが早いとか・・・・・そういった固定観念を一気に拭うときがやってきたようです。インデックスが貼られていないと遅すぎてサーバ…
2年前
記事のアイキャッチ画像
AWS Backup for S3なしにS3をバックアップする
spacelyのブログ
インフラエンジニアの thaim です。 つい先日、待望のAWS Backup for S3がリリースされました! aws.amazon.com ちょうど利用したい案件があったのですが、スケジュールの都合上GAを待たずバックアップを取得する必要がありました。 そのため、AWS Backup for S3なしにS3のバックアップを実現する方法についていろいろと検討・実施していました。 AWS Backup for S3があればもう不要かもしれませんが、供養のためここにまとめておきます。 S3バケットをバックアップしたい S3バックアップ方針 aws cli等によるコピー レプリケーションルール …
2年前
記事のアイキャッチ画像
HashiTalks: Japanで発表しました「Terraform workspaceとTerraform Cloudを用いたDRYでシンプルな運用フロー」
spacelyのブログ
インフラエンジニアの thaim です。 先日 2021-09-30 に開催された HashiTalks: Japan 2021にて、ついに弊社におけるTerraformの活用状況を発表しました!今回その発表概要と発表した感想についてまとめておきます。 発表の経緯 HashiTalksはHashiCorp社が主催する年次カンファレンスで、日本など地域ごとに開催しています。発表内容はYoutubeでも公開されており、昨年度分も合わせて視聴することができます。HashiTalks: Japan - YouTubeスペースリーでは自分が入社した直後の2019年10月頃からTerraformの活用が本…
3年前
記事のアイキャッチ画像
DocumentDBを使用したサービスをAlgoliaに完全に置き換えた
spacelyのブログ
「AI空間設計」の家具データ 別の記事でVR空間に家具を配置する「AI空間設計」の基本的な実装方法について解説しました。その際は使用した家具は1種類のソファだけでしたが、実際の「AI空間設計」の中では、さまざまな家具ブランドから提供された家具を自分好みに選んで配置することができます!今回はその家具のデータを扱う中で発生した問題とその対応をお話しさせていただきます。 インフラ構成 「AI空間設計」のインフラ構成は下画像のようになっています。 家具のデータはユーザーがアクセスする「スペースリー」のWebアプリケーション(Ruby on Rails)の他に、家具を配置した部屋のパノラマ画像を生成する…
3年前
記事のアイキャッチ画像
VRの部屋に家具を置いてみた
spacelyのブログ
「AI空間設計」とは? スペースリーは360度VRを活用したサービスを提供しています。2016年のサービスリリース以来、VRを使ったさまざまな機能を開発してきました。そして、今年の3月に「AI空間設計」という機能をリリースしました!!360度パノラマで撮影した部屋のVR空間の中に、実際に販売されている家具などを配置することができるサービスで、本物の家具を置くことなく部屋のレイアウトを自由に試すことができます!残念ながらスペースリーは事業者様向けのサービスなので、実際に操作していただくことはできないのですが、こちらのページの動画でサービスの雰囲気を知っていただければと思います。 「AI空間設計」…
3年前
記事のアイキャッチ画像
AWS Firelensでfargateログをdatadogに集約する
spacelyのブログ
AWS ECS Fargateでアプリを実行・運用するときでも、アプリケーションログはdatadogに集約して監視・運用したい。これを実現する方法として AWS Firelensを導入したのでその詳細についてまとめました。
3年前
記事のアイキャッチ画像
360度パノラマ画像を魚眼画像に変換する過程
spacelyのブログ
パノラマ画像と魚眼画像の射影変換は3次元の極座標の図が書ければすぐ求められますが,3次元でイメージしたり,実装までやってみると結構手間が掛かります。今回はスペースリーにおける画像処理の前処理的な部分の取組みとして,360度パノラマ写真から2つの180度魚眼画像(いわゆるDual Fisheye Image)に変換する過程を紹介します。「パノラマ写真,一旦全部魚眼画像で見たいんだよなあ...」と思った時に,なかなか「これだ!」と思える説明・実装に出会えなかったため,今回の処理の内容を紹介してみました。
4年前