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リクエストを送るのですが、その際にApp Engine側ではCloud Schedulerからのリクエストのみを受け取るようにしました。

f:id:kahi0223:20211203122844p:plain
Cloud SchedulerからApp EngineにHTTPリクエストを送る

続きを読む

文字列とリストの`is`の謎: Pythonのインターン(Intering)・文字列インターン(String Intering)

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

Pythonにはインターン(Intern, Intering)という仕組みがあります。

ここでは、インターンとは何か、Pythonインターンが利用されるのはどの様な場合か、文字列がインターンされる条件は何かなど、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を利用しています。

f:id:pirika-inc:20211106093447p:plain
SNSピリカ データベース周り概念図

そこで、用途毎でnamespace切り分けるためにredis-namespaceライブラリを使っていました。しかしながら、Cloud NDBで特定のエンティティ間でキャッシュキーが重複してしまい、別エンティティのキャッシュが保存・読み込みされてしまうことがありました。例えばID:1のエンティティを参照したときにID:2のエンティティを参照していました。

続きを読む

pythonの真偽値と条件分岐

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

pythonで、Noneかどうか、空文字列かどうか、空配列かどうか、空辞書かどうかの判定とその時の処理の書き分けで迷いがちの冨田です。

それらを正しく書き分けるためには、何がNoneで何がTrue/Falseで、それらがどうやってやif文や比較演算子で処理されるのかをちゃんと理解する必要があると思っています。

そこで、ここでは、python3の真偽判定とその時の条件分岐について書こうと思います。

続きを読む

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

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

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

この記事では、前回実装したRADIUSサーバーを使って、L2TP/IPsec VPNを設定し、VPNを使えるようにします。

続きを読む