投稿

Firebase Web クライアントのイベントを処理する(RxFire, ReactFire)

本記事では Firebase Web クライアントの通知を処理しやすくなるかもしれない RxFire と ReactFile をみていきます。 【目次】 [1]はじめに [2]Firebase Web SDK をそのまま使う (1)Authentication 通知例 (2)Firestore 通知例 (3)Storage 通知例 [3]RxFire を利用する (1)RxJS と RxFire (2)RxFire のインストール (3)RxFire の利用例 [4]ReactFire を利用する (1)ReactFire (2)ReactFire のインストール (3)ReactFire の利用例 [1]はじめに 私が Firebase は面白いと感じることの一つに、様々な通知が得られることがあります。 例えば、Firebase Authentication であれば、ログイン、ログアウト状態の変化の通知を受け取ることができます。Firestore であれば、データベースの変更等の通知を受けることができます。 このような通知をうまく利用すれば、面白い動きをするアプリが作れそうな気になります。 一方で、アプリの規模が大きくなるにつれ、ユーザからのアクションとシステム等からの通知に対して一貫性を保って動作する設計や実装を行うことは難しいものです。 そこで本記事では手始めとして、Firebase Web クライアントの通知を処理しやすくなるかもしれない枠組みやライブラリを少しだけ見ておきます。 [2]Firebase Web SDK をそのまま使う Firebase クライアントライブラリから受けられる通知は沢山ありますが、ここではよくありそうな例を3つだけみておきます。 (1)Authentication 通知例 以下のようなコードで、ユーザのログイン状態(ログインした、ログアウトした)の変化の通知を受けることができます。 import { getAuth, onAuthStateChanged } from "firebase/auth"; const auth = getAuth(); const unsubscribe = onAuthStateChanged(auth, (user) =...

JavaScriptで学ぶ関数型プログラミング

イメージ
JavaScriptで学ぶ関数型プログラミング Michael Fogus 著、和田 祐一郎 訳 2014年01月 JavaScriptで学ぶ関数型プログラミング (Amazonで書籍情報を表示) 最近のプログラム、特に UI 系のプログラムでは、map などを使ったコードを当たり前のように目にするようになりました。関数型プログラミングに由来するコードが増えてきたと思います。 関数型プログラミングの考え方は新しいものではありませんが、最近のプログラミング言語は、関数型プログラミングっぽいスタイルのコードが書けるように、これらの機能を標準レベルでサポートする傾向にあると思います。 そうなると、map や filter などを単なる便利な機能という使い方から少しレベルを上げて、関数型プログラミングとはどのようなものか?ということを知りたくなります。 とはいいつつも、実務で Haskell のような言語を使うわけではないので、実務に直接役立ちそうなレベルで関数型プログラミングのエッセンスを知りたい、というのも人情です。 そんな時にお勧めしたいのが今回取り上げる本「JavaScriptで学ぶ関数型プログラミング」です。 以下はこの本のスタンスと思われる記載(5.2)を抜粋したものです。 本書は関数型プログラミングの美徳を熱く説くものではありません。世の中には様々な関数型のテクニックが存在し、それぞれがソフトウェア開発における複雑性を飼いならすための手段となります。しかし同時に、個々の実装においては、よりよい方法があることに気づくこともあります。 普段からあなた自身の個人的な興味とニーズを深く追っておくことで、アプリケーションを構築する際にそのテクニックを使うことが適切であるかどうかを判断できるよう準備しておくことがプログラマーとして賢明であると言えます。 本書は関数型プログラミングの本ですが、同時に、何にもまして、問題とその解決方法を理解する力とそこで使える引き出しを持っているということが、その場その場でとるべき最善のソリューションにつながるものであると信じています。 とはいいつつ、オブジェクト指向スタイルと関数型スタイルの違いに触れながら、JavaScript を使って関数型プログラミングの美徳を熱く説いています(笑)。 初版が...

Ubuntu 22.04 LTS 日本語デスクトップ環境のVagrant BOXを作る

イメージ
本記事は、Ubuntu 22.04 LTS のベースBOXから日本語デスクトップ環境のBOXを作成します。このBOXを利用すれば、デスクトップ環境の仮想マシンを素早く作ることができるようになり、さらに、開発ツールを追加したBOXを作成する際のベースBOXとしても利用できます。 【目次】 [1]はじめに [2]仮想マシンの定義 (1)プロジェクトディレクトリの作成 (2)Vagrantfileの作成 [3]仮想マシンの作成 [4]日本語環境の設定 (1)デスクトップへログインして状況確認 (2)言語サポート(日本語)の追加 (3)標準フォルダーの名前を設定 (4)入力ソース(日本語入力)の設定 (5)日付と時間の設定 (6)ソフトウェアの更新や Firefox 文字化け対応など [5]パッケージ化してBOX登録する (1)パッケージ化 (2)BOX登録 [6]BOXから新しい仮想マシンを作ってテストする (1)簡単な動作確認 (2)テスト用仮想マシンの削除 [7]BOX作成用の仮想マシンとプロジェクトディレクトリの削除 [1]はじめに 本ブログでは、Vagrant+VirtualBox+Ubuntu 上に日本語デスクトップ環境を構築する記事として、Ubuntu 18.04 LTS、Ubuntu 20.04 LTS 版を書きました。 Ubuntu 18.04 LTS 日本語デスクトップ環境のVagrant BOXを作る Ubuntu 20.04 LTS 日本語デスクトップ環境のVagrant BOXを作る 本記事はその Ubuntu 22.04 LTS 版です。 基礎的なベースBOXにデスクトップ関連のパッケージを追加する作業は、(特にダウンロードに)かなり時間がかかりますので、一度作ったデスクトップ環境をパッケージ化してBOX登録しておくと、そのBOXからデスクトップ環境の仮想マシンを素早く作ることができるようになります。さらに、このBOXに開発ツールを追加したBOXを作成する際のベースBOXとして利用することもできます。 本記事では、Ubuntu 22.04 LTSを対象として、Vagrant Cloudで提供されているベースBOXから日本語デスクトップ環境を仮想マシンに作りこみ、それをパッケージ化してBOX登録します。 具体的には以下...

Oxigraph を利用して RDFLib の SPARQL クエリを高速化してみる

本記事は Python から RDFLib 経由で Oxigraph を利用する方法のメモです。 【目次】 [1]はじめに [2]Oxigraph、Pyoxigraph、Oxrdflib について [3]利用方法など (1)ライブラリのインストール (2)RDFLib から SPARQL を実行するコード例 [4]感想など [1]はじめに Python で RDF データを処理しようとするとき最初の選択肢は RDFLib だと思います。 rdflib https://rdflib.readthedocs.io/en/stable/# RDFLib はネットに沢山情報があるし、実績もあります。個人的には Google Colaboratory で手軽に使えることが気に入っています。 しかし、トリプル数が少なく、単純な SPARQL クエリを実行するだけなら気になりませんが、それなりに多いデータに対して複雑な SPARQL クエリを実行しようとすると、パフォーマンスが気になることが多いです。 このようなケースは、Apache Jena とか Fuseki を利用すれば素晴らしいパフォーマンスを発揮するので速度面は解決することができます。 Apache Jena https://jena.apache.org/ しかし、対話環境で利用したいとか、SPARQL クエリの実行結果を Pandas に挿入して云々のような、Python ならではの利点を生かそうとすると、環境構築やプラグラミング環境を含めて考えると、あまりお手軽とは言えません。(少なくとも Google Colaboratory 上でお手軽に使うという感覚ではありません。) そこで、Colaboratory 上で動作する Python のライブラリで、RDF ファイルを読み書きでき、 SPARQL クエリが高速に動作するライブラリは無いものかと探してみたところ、Oxigraph を見つけました。 ありがたいことに、Oxigraph は RDFLib のプラグインが提供されており、RDFLib を利用したコードを殆ど変更することなく、内部では OxiGraph を動作させることが可能です。(つまり、RDFLib の API で Oxigraph を使える。) そこで、本...

Python で W3C PROV オントロジーを可視化する(Python PROV)

イメージ
本記事では Python の prov パッケージを利用して、PROV 情報を可視化する方法を見ていきます。 【目次】 [1]はじめに [2]Prov Python package の利用 (1)Prov Python package のインストール (2)PROV-N の概要 (3)Python で PROV 情報を作成する [3]可視化してみる (1)Graphviz、pydot のインストール (2)図(画像)をPNG ファイルとして出力する (3)属性の追加と日本語表示 [4]RDFファイルを読み込んで可視化する (1)PROV 情報を RDF ファイルとして保存する (2)RDFファイルから読み込んで可視化する [1]はじめに W3C PROV オントロジーを利用すると、物事の来歴情報を記述することができます。 PROV 仕様は来歴表現に関するデータモデルやシリアライズフォーマットが定義されていますので、機械可読な来歴情報を表現できます。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ ただし、一般に、形式的な表現のままでは人間が理解しやすいとは限りません。 これは PROV の仕様が複雑という意味ではなく、人間は、情報量が多くなると全体像を把握しづらくなるということかと思います。 これに対して PROV の表現を可視化(図示)するための推奨事項が公開されています。 PROV Graph Layout Conventions https://www.w3.org/2011/prov/wiki/Diagrams このような PROV 情報の可視化を行えば、全体像を把握しやすくなると思います。 前回の記事『 Git2PROV を例に W3C PROV オントロジー表現の基本を知る 』では、Git のコミット履歴に関する PROV 表現例を図を中心に概観しました。 簡単な来歴の図は手作業で書くこともできますが(前回の記事は手作業で書きました)、データが複雑になると手作業で書くのは無理です。 これは作図作業に時間がかかる、というだけでなく、誤りのもとになります。 そこで本記...

Git2PROV を例に W3C PROV オントロジー表現の基本を知る

イメージ
本記事では、W3Cが勧告している PROV オントロジーの表現方法を Git2PROV ツールを例にみていきます。 【目次】 [1]はじめに [2]PROV とは (1)PROVの基本概念 (2)簡単な補足 (3)PROV のシリアライズ形式 (4)PROV グラフの可視化について (5)拡張仕様について [3]Git のコミット履歴を PROV で表現する (1)Git2PROV (2)ファイルのバージョン1をコミットしたとき (3)ファイルのバージョン2をコミットしたとき (4)より詳細な Git のモデルや応用など [4]Git2PROVを実際に動かしてみる (1)インストール (2)ローカルサーバで実行 (3)コマンドラインから実行 [1]はじめに ネットで様々な情報が簡単かつ大量に得られるようになりました。 それはそれで良いのですが、同時に得られた情報が信用できる情報かどうかの判断も難しくなってきました。 昨今の生成系 AI などの事情を考えると、この傾向はますます進むような気がしますが、そもそも今まで何を根拠に「信頼」とか「信用」していたのか?と考えていくと、意外に根拠が薄そうな気がして、少々不安になります(笑)。 それはともかく、信用できる情報かどうかの判断基準として、データの来歴あるいは起源をみることは多いと思います。 W3C は、このような来歴あるいは起源を記述するための仕様である PROV を2013年に勧告しています。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ 崇高な概念をここで語ることはできませんが、来歴や起源をたどれるデータの表現方法は、一般のアプリ作成においても役立つことが多いと思いますので、本記事では、この PROV による情報の来歴あるいは起源に関する表現をみてみます。 ところで PROV 仕様をざっと概観するには、(英語ですが)以下のドキュメントが最適だと思います。 PROV Model Primer https://www.w3.org/TR/prov-primer/ 一方、本記事では開発者にとって身近な Git のコミット情報を PRO...