DooD(Docker outside of Docker)で、Docker Composeで一部コンテナを逐次アップデートする

こんにちは、ピリカ開発チームの九鬼です。

Docker Composeで複数コンテナからなるサービスを動かしている最中に、一部コンテナをアップデートしたいことがあります*1

そこで、本記事ではその方法を紹介します(もし、さらに良い方法がありましたらぜひ伺いたいです)。

*1:例えば深層学習において、あるメンバーはTensorFlowで解析するサービス、あるメンバーはPyTorchで解析するサービスを作る、という構成が挙げられます

続きを読む

リモートワークで固定IPするために: VPNの認証のためにRADIUSサーバーをつくる

こんにちは。 ピリカ開発チームの伊藤です。

ピリカでは開発環境へのアクセスを保護するための一環としてIP制限をしていますが、ピリカという会社は元々リモートで仕事をしている人が多く、またオフィスのIPアドレスは動的IPの時代が続いていました。

そこで、各自のIPアドレスを固定化するためにVPNやプロキシサーバーを構築していますが、その認証の管理をできるだけGoogle Workspaceの権限を元にやりたいと考えました。

この記事では、VPNやプロキシの認証をするための前段として、Google Workspaceの情報と連動した独自の認証基盤をどのように作ったかを紹介します。

続きを読む

TensorFlow 2.xでObject Detection APIを使うにはTensorFlowバージョンを揃える必要がある話

こんにちは、ピリカ開発チームの九鬼(niccari)です。

機械学習周りで物体検出したいとき、TensorFlowとともにObject Detection APIを利用することがあります。

Object Detection API側のアップデートで新規Docker環境が動かなくなったことがありました。

続きを読む

BigQueryのデータを定期的にGooleスプレッドシートに出力する方法

こんにちは、ピリカ開発の冨田です。

今日は、BigQueryのデータを定期的にGooleスプレッドシートに出力する方法について書きたいと思います。

今回使用するツールはOWOX BI BIgQuery Reportsという無料のアドオンツールです。

というのも、GoogleのConnectedSheetを使用すれば、同様のことは可能なのですが、使用できる条件が、合わなかったので他の方法を探しました。

続きを読む

Google Cloud Functionsで、GitHubのprivateリポジトリにある自作ライブラリを使う方法

初めまして、ピリカ開発チームの九鬼と申します。

Google Cloud Functions(以後、GCF)でアプリをデプロイするとき、Cloud Build環境でSSHキーにアクセスできません。そのため、GitHubのprivateリポジトリにアクセスできないので、アプリのソースコード上に自作ライブラリをあらかじめ組み込んでおく必要があります(公式リファレンス)。

しかしながら、pip install -tでインストールした方法ではいくつか問題があります。

そこで本記事では、ライブラリをwhlに固めてから組み込む方法を紹介します。

続きを読む

SVG内の色をプログラムから指定する

こんにちは。 ピリカ開発チームの伊藤です。

SVGは解像度や拡大縮小に依らずきれいな描画が得られるため、アイコンなどの描画に最適なフォーマットです。 SVGフォーマットの画像にある色などは外部からスタイルを上書きすることで色を変更できます。

例えば、地図上のマーカーを状態により色を変更するといった用途で使用することができます。

f:id:pirika-inc:20210909093714p:plain

ここではReactにSVGファイルを読み込ませて、色を動的に変更する方法をご紹介します

続きを読む

Google DriveからGoogle Cloud Storageにファイルをコピーする

こんにちは。 ピリカ開発チームの伊藤です。

ピリカではアルバトロスプロジェクトで集めたマイクロプラスチックサンプルを分析する際、各サンプルの画像を撮っています。 このサンプル画像には、右下にスケールが書いてあり、この数字を元に映っているサンプルの最大径・面積などを求めています。

f:id:pirika-inc:20210907121435p:plain
アルバトロスオープンデータより © 2021 Pirika Association.

右下のスケールのテキストは顕微鏡のソフトウェアにより自動挿入されており、テキストデータとして得ることはできなかったため、別途このテキストを読み取る作業が必要ですが、1000を超すサンプルすべてに対してこれを人力でやるのは非効率です。 そこで、Cloud Vision APIを用いてこの右下のスケールを読み取るようにしました。

f:id:pirika-inc:20210907121718p:plain
Cloud Vision APIを使えば画像中のテキストを読み取れる

サンプル画像は分析作業の段階ではGoogleドライブに入っていますが、Cloud Vision APIで分析するにはhttp/httpsでアクセスできるようにするか、Google Cloud Storageにコピーする必要があります。

GoogleドライブからGoogle Cloud Storageへのコピーする際、一度ダウンロードしてからアップロードをすると時間がかかるだけでなく、一時ファイルに保存する必要があり面倒です。 なるべく手間なく高速にできればと思い、TypeScriptでストリーミングコピーを実装してみたのでご紹介します。

続きを読む