カテゴリー: テクノロジー

Navigator.userAgentDataを使いたい

現在、検討が進められているUA-CHですが、導入にあまり乗り気では無いFirefoxが、
先日(6月)、Navigator.userAgentData実装のトラッキングステータスを “UNCONFIRMED” から “New” へ移行させました。

1750143 – Implement Navigator.userAgentData
https://bugzilla.mozilla.org/show_bug.cgi?id=1750143

これにより、少なくともuserAgentDataのプロトタイプが実装される可能性が少し高まったのではないかと考えています。実際の製品版への実装時期は未定。優先度も高くないため、
完全に取り下げられる場合もあり得る状況ですが、standards-positionsの議論を見ている限りでは、ユーザーエージェントの情報を構造化することについては肯定的なところもあるように見えます。

Navigator.userAgentDataが使えると何が嬉しいのか。

User-Agentの解析というと、これまでは以下のような文字列を解析していました。

Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Mobile Safari/537.36 EdgA/90.0.818.46

構造化されたuserAgentDataであれば、スマートフォンやタブレットの判定がこれで済みます。

const isMobile = navigator.userAgentData.mobile;

他にも、以下のような構造でデータが取得できます。

{
  "brands": [
    {
      "brand": "Chromium",
      "version":"91"
    },
    {
      "brand": "Microsoft Edge",
      "version":"91"
    },
    {
      "brand": "GREASE",
      "version":"99"
    }
  ],
  "mobile": false 
}

// https://docs.microsoft.com/ja-jp/microsoft-edge/web-platform/user-agent-guidance#user-agent-client-hints-javascript-api

特定の端末やブラウザの判定、対応がこれまで以上にやり易くなりそうです。
UA-CH自体とは無関係に実装して欲しい機能であることだなぁというところです。

ところで、炎暑酷暑のみぎりではありますが、Safari様におかれましてはご健勝でしょうか。userAgentの文字列は凍結するのかどうかどっちなんでしょうか。パワーでしょうか。
Push APIは、来年ようやく対応されるとのこと。おめでとうございますありがとうございます。

暑熱耐え難き時節、皆様夏風邪など召されませぬようご自愛ください。


SolrとZeppelinを連携させる

はじめに

Apache Zeppelin というウェブベースのノートブックプロダクトがあります。
ノートブックとはブラウザ上で動作する、対話型のプログラム実行環境で、プログラムやその実行結果、説明のテキストなどを同一のページ上で保存・管理するためのものです。試行錯誤の過程をそのまま記録として残すことができるので、データ分析でよく利用されます。
有名なノートブックとして Jupyter Notebook があります。

Zeppelin は Spark や各種 RDBMS など、様々なデータソースやインタープリタと連携させることができます。Solr との連携も可能です。

Zeppelin インストール

https://zeppelin.apache.org/docs/latest/quickstart/install.html
からダウンロードして展開後、以下を実行。

$ ./install-interpreter.sh --name solr --artifact com.lucidworks.zeppelin:zeppelin-solr:0.1.6
Install solr(com.lucidworks.zeppelin:zeppelin-solr:0.1.6) to /home/splout/zeppelin-0.10.1-bin-all/interpreter/solr ...
Interpreter solr installed under /home/splout/zeppelin-0.10.1-bin-all/interpreter/solr.

1. Restart Zeppelin
2. Create interpreter setting in 'Interpreter' menu on Zeppelin GUI
3. Then you can bind the interpreter on your note

Zeppelin 起動

$ ./zeppelin-daemon.sh start

Solr との連携を設定

  1. http://localhost:8080/ にアクセスしてメニュー「Interpreter」を開く。
  2. Solr の Properties を設定する
    • solr.baseUrl, solr.collection, jdbc.url, jdbc.driver
  3. 「Create New Note」で新しいノートブックを開く
    • Default Interpreter を solr にする

実行例

以降の操作対象をコレクション test1 にする

use test1

全件検索

search q=*:*&fl=area,name,address,type,address_p

検索対象のコレクションを実行時に指定することもできる

search(test1,q=area_str:中央区,fl="name_str,area_str,address_str,type_str,address_p",rows=100)

[Solr] Streaming Expressios と Math Expressions 利用例のページが充実している

Solr はそもそもは検索エンジン・検索サーバですが、Streaming Expressios や Math Expressions という機能を組み合わせることで、データサイエンスのツールとしても使えます。

公式サイトResoucesのページの Documentation の項に Visual Guide to Streaming Expressions and Math Expressions というリンクがあり、そこで数多くの利用例を見ることができます。

目次はこんな感じです。

  • Visualizations
  • Getting Started
  • Data Loading
  • Searching, Sampling and Aggregation
  • Transforming Data
  • Scalar Math
  • Vector Math
  • Variables and Vectorization
  • Matrix Math
  • Text Analysis and Term Vectors
  • Probability
  • Statistics
  • Linear Regression
  • Curve Fitting
  • Time Series
  • Interpolation and Numerical Calculus
  • Signal Processing
  • Simulations
  • Machine Learning
  • Computational Geometry

たとえばこんな感じで、データ分析の各手法とその利用例がずらっと並んでいます。 Visual Guide となっているだけあって、データの可視化にも力が入っています。

Stream Expression には前から興味はあったのですが、このページを取っ掛かりにして勉強してみようと思います。


Solr 9 での追加モジュールの指定方法

従来、Solr の追加モジュールの位置づけにあるものは contrib 配下にありました。

$ ls solr-8.11.1/contrib/
analysis-extras    dataimporthandler-extras  gcs-repository             langid  prometheus-exporter  velocity
dataimporthandler  extraction                jaegertracer-configurator  ltr     s3-repository

Solr 9 では modules という名前に変更されました。

$ ls solr-9.0.0/modules/
analysis-extras  clustering  gcs-repository  hdfs                       jwt-auth  ltr            scripting
analytics        extraction  hadoop-auth     jaegertracer-configurator  langid    s3-repository  sql

いくつか新しいモジュールも増えています。

モジュールを追加して起動する方法も新しくなっています。従来は solrconfig.xml に lib ディレクティブで jar ファイルを指定する必要がありましたが、Solr 9 では solr.in.sh 内で環境変数 SOLR_MODULES に必要なモジュール名を書くだけでよくなっています。

SOLR_MODULES=sql

Solr 9 の Admin UI には SQL エディタが追加されていますが、デフォルトの設定では sql モジュールが動いていないようで SQL を使ったクエリを実行すると Error loading class ‘solr.SQLHandler’ となってしまいます。

そこで上記のように環境変数で SOLR_MODULES=sql を指定して solr を起動し直すと問題なく SQL エディタが動作します。

このあたりの設定の簡便化は非常にありがたいものですね。


SolrをPHPで使う(更新編)

前回の検索編に引き続き、今回はPHPでSolrのインデックスを更新する方法です。

更新リクエストを表すクラスは用意されていないので、XML文字列で直接更新リクエストを記述します。 commit() を実行しないとその場では反映されないので注意。

実行結果は以下の通りです。
正しくドキュメントが追加されていることが分かります。

$ php example_solr_php_update1.php 
{
  "responseHeader":{
    "rf":1,
    "status":0,
    "QTime":3}}

{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":2,
    "params":{
      "q":"id:PHPUpdateTest",
      "indent":"on",
      "version":"2.2",
      "wt":"json"}},
  "response":{"numFound":1,"start":0,"numFoundExact":true,"docs":[
      {
        "id":"PHPUpdateTest",
        "name":"PHPからの更新テスト",
        "manu":"splout",
        "cat":["software",
          "search"],
        "features":["テストです。",
          "説明です。"],
        "price":1.0,
        "price_c":"1.0,USD",
        "inStock":true,
        "_version_":1734261680380051456,
        "price_c____l_ns":100}]
  }}