Chrome拡張+FirebaseでGoogle認証するいくつかの方法

Chrome拡張アプリを作っていて、ユーザのデータをユーザアカウント(email)単位にCloud FireStoreに保存したいと思っています。ユーザがアクセスできる情報をセキュリティルールを設定して制限したいので、Firebase AuthenticationでGoogle認証を行うことにしました。紆余曲折あり、いくつかの方法を試したので記録しておきます。 なお、単にGoogle認証したいだけなら google-api-javascript-client を使うのが一般的かもしれません。 【不採用】Firebase Authentication in ポップアップページ 公式ページで紹介されている方法を試してみました。参考にしたのは以下の二つのページです。 Chrome 拡張機能での Firebase 認証 Firebase を JavaScript プロジェクトに追加する Fireb Continue Reading

Posted On :
Category:

PySparkの実装サンプルと実行方法

最近Sparkを触る機会があって、少しだけ勉強したのでメモがてら残しておきます。 Sparkの分散処理の仕組み Sparkとは 高速で汎用的な分散処理システム 分散データ(RDD)をDISKを介さずにメモリ上に持つので、Hadoopの100倍ぐらい高速 Java, Scala, Python, RなどのAPIを提供 Spark SQL, MLlib, GraphX, Spark Streamingなどのリッチなツールを提供 分散処理システムの構成要素 画像は、こちらからお借りしました。 Driver Program Master Nodeで実行される起点となるプログラム SparkContextを作成し、RDDを生成して、Taskを実行していく SparkContext Sparkの色々な機能へのエントリーポイント ClusterManagerを通じてクラスターを操作する DAG Sche Continue Reading

Posted On :
Category:

GCPのコスト見積もり

GCPを利用していてコスト見積もりを実行するにあたってのメモを記載しておきます。 基本 基本的にはこちらを利用することになると思います。 Google Cloud Platform 料金計算ツール GCE GCEに関しては、上記よりも実際にVMインスタンスを途中まで作成するのが一番確実です。 コンソール を開いて、メニューからCompute Engine -> VMインスタンスを開き、作成ボタンをクリックします。 インスタンス作成画面が開かれますので、あとは、リージョン マシンの構成 GPUの有無 追加ディスクの有無など、色々設定を変えながら画面右上に表示されるコストを確認するだけです。 BigQuery 料金体系はこちらに記載されています。以下の3つは少なくとも気にしています。 アクティブストレージコスト: $0.020 per GB per month 例) 1TBを1ヵ月保存す Continue Reading

Posted On :
Category:

Kotlin+Ktorで技術要素を試しながらクリーンアーキテクチャでAPIサーバ構築

サーバサイドKotlinといえばSpring Bootを採用することが多いと思います。 個人的にはSpring Bootは、Auto Configurationのブラックボックス感が辛くて、もっとシンプルなフレームワークに乗り換えたいという思いが常々ありました。 JetBrains社製のWebフレームワークであるKtorが、2018年11月にv1.0.0がリリースされ、2020年4月現在v1.3.2まで順調にアップデートされ続けており、そろそろ本格的に利用しても良さそうな気配を感じています。 この記事では、Kotlin+KtorでREST APIの作成に必要な技術要素をStep By Stepで検証してみながら、クリーンアーキテクチャなAPIサーバを構築してみたいと思います。 最初の画面を表示 Ktor Pluginを使う方法だと良く設定内容を理解せずに使ってしまうことになりそうですし、D Continue Reading

Posted On :
Category:

TF-IDFのお勉強

少し前に会社の勉強会で発表した資料をブログにも転記しておきます。TF-IDFは自然言語処理の初心者にもとっつきやすく理解しやすい内容でした。 Wikipediaの記載に基づき手計算 概要 Wikipediaには以下のような説明がなされています。 TF-IDFは、文書中に含まれる単語の重要度を評価する手法の1つであり、主に情報検索やトピック分析などの分野で用いられている。 TF(英: Term Frequency、単語の出現頻度)と IDF(英: Inverse Document Frequency、逆文書頻度) の二つの指標に基づいて計算される。 TF(単語出現頻度)とIDF(逆文書頻度)の二つの指標を元に文書中の単語の重要度を評価する手法であることがわかります。 Wikipediaの計算式 計算式を見ると、TF-IDF値は、TF値とIDF値を掛け合わせたものであることが分かります。 TF Continue Reading

Posted On :
Category:

Neo4jにCSVロードする4つの方法

Neo4jにCSVロードする方法は少なくとも4つはあるようです。 CSV LOAD apoc.load.csv apoc.import.csv neo4j-admin import この記事ではこの4つの方法について、pythonから実行する具体的な実装を説明したいと思います。 ロードするデータ サンプル実装でロードするデータはこちらです。リレーションLINKEDにはscoreというリンクの強さを表すプロパティが設定されています。 検証環境 今回は、docker-hubのneo4j:latestイメージで、docker-composeで検証します。docker-compose.yamlの設定は基本的には以下のような感じです。 version: '3' services: neo4j: image: neo4j:latest ports: – "7474:747 Continue Reading

Posted On :
Category:

Neo4j+pythonで特定の条件で繋がっているサブグラフを抽出する

やりたいこと 候補ノード(約1億件)と候補同士のリレーション(約100億件)をneo4jに登録して、特定の条件で繋がっているサブグラフのノードIDを抽出したいと思います。 入力データ 候補1 — 候補2 (score = 40) 候補1 — 候補3 (score = 60) 候補3 — 候補4 (score = 50) 候補4 — 候補5 (score = 70) 候補6 — 候補7 (score = 30) 候補7 — 候補8 (score = 70) 候補9 … リレーションなし scoreは関連性の強さです。本来、関連性に方向はありません。 グラフ表示するとこんなイメージです。 このデータからクエリでscore >= 50以上のリレーションを接合して、以下のようなデータを取得したいと思っています。 [候補1, 候補3, 候補4, 候補5] [候補2] [候補6] Continue Reading

Posted On :
Category:

NLPの前処理

仕事で自然言語処理(NLP)に少し取り組む必要が出てきたので、自分なりの理解をTipsとしてまとめていこうと思います。 小文字化 文字の正規化という意味で、アルファベットを小文字化します。日本語の場合は、半角を全角に統一する、などの対応も必要と思います。 sentences: List[str] = ['I have a pen', 'That is a window'] print(sentences) # -> ['I have a pen', 'That is a window'] lower_sentences: List[str] = list( sentence.lower() for sentence in sentences ) print(lower_sentences) # -> Continue Reading

Posted On :
Category:

BigQueryのpython client(google-cloud-bigquery)の使い方

BigQueryのpython client(google-cloud-bigquery)の使い方をメモっていきます。 インストール サービスアカウントキーファイルを環境変数に設定 こちらを参考に、サービスアカウント+キーファイルを作成し、そのキーファイルのパスを環境変数に設定します。 export GOOGLE_APPLICATION_CREDENTIALS="/hoge/fuga/key_file.json" ライブラリインストール pip install google-cloud-bigquery クライアント生成 from google.cloud.bigquery import Client client: Client = Client() # 環境変数 GOOGLE_APPLICATION_CREDENTIALSが設定されている前提。引数で渡すこともできる Continue Reading

Posted On :
Category:

pythonにおける親/兄弟階層のモジュールimportの方法

pythonでは、デフォルトでは実行フォルダおよびその配下のフォルダだけがモジュール検索対象のパスとなっています。 そのため、ある程度プロジェクトが大きくなってきて、共通モジュールを特定のフォルダに整理してまとめたりすると、パスが通らず困ったりします。 今回は、兄弟階層の共通モジュールのimport方法を説明します(もちろん親階層でも同じ方法で対応できます)。 はじめに フォルダ構成 今回は以下のようなフォルダ構成でmain.pyにlogger.pyをimportする方法について解説します。 ┣ module ┃ ┗ logger.py ┗ business   ┗ main.py logger.pyの実装 import logging formatter = '%(asctime)s [%(levelname)s] %(message)s' logging.basic Continue Reading

Posted On :