GAE/Pythonでサービスアカウントキーファイルを使わないようにした

こんにちは。ピリカ開発チームの伊藤です。 GCPの各種サーバーレスサービスにアクセスするには、認証情報が必要となります。App EngineやCloud Functions上で動作している場合は、GCPの各種ライブラリを使っていれば特に何もしなくても認証が通った状態とな…

Androidアプリ Realmでモデルパラメータを追加するとき、過去バージョン全てに渡ってパラメータ有無を考慮する必要があった話

SNSピリカのAndroidアプリについて、段階公開していたv5.4.13, v5.4.14リリースで起動クラッシュが発生する問題がありました。v5.4.13でRealmのバージョンアップおよびRealm操作周りの役割分離を行っており、そのなかでのマイグレーション処理の不備が原因で…

GoogleAppEngineでCloud SchedulerからのHTTPリクエストのみを受け付ける

こんにちは、ピリカの開発の冨田です。 ピリカのごみ拾いSNS「ピリカ」は、Google Cloud Platformを利用しています。 その中で、定期実行させたい処理を、Cloud Scheduler→AppEngineで行っています。 Cloud SchedulerからApp Engineに対してHTTPリクエストを…

Pythonのインターン(Intering)・文字列インターン(String Intering)

こんにちは、ピリカ開発チームの冨田です。 Pythonにはインターン(Intern, Intering)という仕組みがあります。 特に文字列のインターンはとても複雑です。 ここでは、インターンとは何か、Pythonでインターンが利用されるのはどの様な場合か、文字列がインタ…

GeoPandasをGoogle App Engine(GAE)上で動かすためには、libspatialindexを事前ビルドする必要がある

※ 2021年4月時点での検証内容であり、ライブラリ側の更新により解消済みの可能性があります。 GAE上でGeoPandasを動かすには、libspatialindexをDebian系x64 OS上でビルドして依存関係に含めておく必要があります。本記事ではその方法を共有します。

Cloud NDBのredisキャッシュでredis-namespaceを使うとキャッシュキーのコリジョンを起こすことがある件

こんにちは、ピリカ開発チームの九鬼です。 SNSピリカのサービスでは、データ永続化用にCloud NDBを使用しています。また、データ取得のスループットを高めるためCloud Memorystore for Redisを利用しています。 SNSピリカ データベース周り概念図 そこで、…

pythonの真偽値と条件分岐

こんにちは、ピリカの冨田です。 pythonで、Noneかどうか、空文字列かどうか、空配列かどうか、空辞書かどうかの判定とその時の処理の書き分けで迷いがちの冨田です。 それらを正しく書き分けるためには、何がNoneで何がTrue/Falseで、それらがどうやってやi…

リモートワークで固定IPするために: L2TP/IPsec VPNを設定する

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

ローカルでPub/Sub, Cloud Functionsを同時に動かしながら動作確認する

こんにちは、ピリカ開発チームの九鬼です。 SNSピリカのサービスでは App EngineからPub/SubにメッセージをPublish → サブスクリプションフィルタで絞り込み → Cloud FunctionsからCloud Tasks経由で再度App Engineに戻して処理するケースがあります。 SNSピ…

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

こんにちは、ピリカ開発チームの九鬼です。 Docker Composeで複数コンテナからなるサービスを動かしている最中に、一部コンテナをアップデートしたいことがあります*1。 そこで、本記事ではその方法を紹介します(もし、さらに良い方法がありましたらぜひ伺い…

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

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

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のConnected…

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

初めまして、ピリカ開発チームの九鬼と申します。 Google Cloud Functions(以後、GCF)でアプリをデプロイするとき、Cloud Build環境でSSHキーにアクセスできません。そのため、GitHubのprivateリポジトリにアクセスできないので、アプリのソースコード上に自…

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

こんにちは。 ピリカ開発チームの伊藤です。 SVGは解像度や拡大縮小に依らずきれいな描画が得られるため、アイコンなどの描画に最適なフォーマットです。 SVGフォーマットの画像にある色などは外部からスタイルを上書きすることで色を変更できます。 例えば…

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

こんにちは。 ピリカ開発チームの伊藤です。 ピリカではアルバトロスプロジェクトで集めたマイクロプラスチックサンプルを分析する際、各サンプルの画像を撮っています。 このサンプル画像には、右下にスケールが書いてあり、この数字を元に映っているサンプ…

ピリカ開発者ブログをはじめます

こんにちは。 株式会社ピリカで開発のとりまとめをしています伊藤(id:iseebi)と申します。 このたび、ピリカ開発者ブログを立ち上げることになりました。 なぜ開発者ブログを始めるのか 株式会社ピリカ/一般社団法人ピリカは「科学技術の力であらゆる環境問…