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を使えるようにします。

続きを読む

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

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

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

f:id:pirika-inc:20211015162905p:plain
SNSピリカサービス GCPサービス間連携例

ローカル環境で開発するとき、Pub/SubからCloud FunctionsをPushサブスクリプション経由で呼び出したいことがあります。

その際のやり方について、備忘録として掲載します。

続きを読む

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

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

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

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

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

続きを読む