普通自動車免許(AT)を取得したその後の話

こんにちわ。
リエです。

2020年に普通自動車免許(AT)を取得したと書きましたが、https://blog.splout.co.jp/12005/

今回はその後のお話です。

実は・・・


免許を取った事に満足し、全然車を運転していません。
気合入れて車のスマホホルダーも買ったのに!
正直もう運転の仕方オボエテナイ。

唯一運転したときは、不安すぎて運転方法の復習をしまくりました。
あと私はバック駐車ができない。
〈余談〉
社内のメンバーにバック駐車ができないという話をした時にめっちゃ驚かれたのですが、教習所での練習って2〜3回なので出来んわ!と反論しました。
路上教習で出発点(車庫)に戻ったときの駐車も前進での車庫入れだったし!

という言い訳もよくないので、季節が春になったら運転がんばります。
今のままだと愛犬とのドライブもリエママから許可もらえないし。
寿命縮んでもいいよという方はぜひ私の運転練習につきあってください。
運転見守り隊(人)を絶賛募集中です。


[Android 11] USBテザリング時の IP アドレスが変わっていた話

Android が 11 にアップデートされてから、
USB テザリングで使われるIPアドレスが変更になっているようです。

Android 10 のときは、USB テザリングを有効にしたときのIPアドレスには 192.168.42.* が使用されていました。

USB、Bluetooth、Wifi のテザリングに加え、
新たに有線LANテザリングに対応した影響ではないかと思います。

 

Windows は設定がおかしいと自動的に別のネットワークで繋いでくれるようで場合によっては気付きにくいかもしれません。

同じような使い方をしている人向けに確認する方法を一応書いておくと、
タスクマネージャーのリソースモニターからネットワークの欄を見ると、
ローカルアドレスとリモートアドレスが表示されています。

 

テザリング時の端末のIPアドレスを固定してしまうと楽かもしれませんが、
仕様変更があったときに面倒なのと、
IPアドレス自体は簡単に分かるので何もしていません。

新しく対応した有線LANテザリングは、
余ったSIMフリー端末でもあれば遊べそうな気はします。

 

脱線しそうなのでここまで。
以上、USBテザリング時に使われるIPアドレスが変わっていたという話でした。

 

192.168.42.* が USB テザリング用に割り当てられるというのは後からググって知った情報ですが、設定が有効だった頃は常に 192.168.42.129 が使われていた気がします。調べてみるとハードコーディングされているという記事がヒットして、それについては自分で確認はしていませんが実際にそうだった可能性はありそうです。 ただ、固定だった場合はUSBやBluetooth複数でテザリングするとどうなるのか試してみたいと思いつつ、その実験のためだけに複数回線を契約するのは厳しい。にも関わらず世の中には実際に複数接続を実現している人もいるようですごい…。


Amazon配送の「置き配」に注意

どうも。

コロナ禍ということもあって買い物はほとんどネット通販で済ませている、という方も多いと思います。かくいう私も食料品以外の買い物の大半をAmazonで済ませています。ポチッとするだけで翌日か翌々日には商品が手元に届きます、ホント便利ですね。

このみんな大好きAmazonなのですが、配送方法がヤマト運輸とか佐川急便などの宅配業者から「Amazon配送」というものに変わっていってるようです。
これはAmazonが独自に構築している配送網ということで、都市圏から徐々にこの配送に置き換わっていってるようです。自社配送にしてコストダウンを図っているのでしょうね。

私が住んでいるところも先日Amazon配送に切り替わったのですが、配送日なのに全然荷物が来ないなーと思っていたら急に配送完了メールが来て、メールにあるリンク先を見たら自宅の玄関先にAmazonの箱が置いてある写真が貼ってありました。


慌てて玄関を開けるとそこにはAmazonからの荷物が、、、玄関先に置いていってるよ!!(怒)

どうもこのAmazon配送には「置き配」といって、玄関先やガスメーターの中に商品を置いていくという受け渡し方法があるのですが、なんと配送方法の既定値がこの置き配になっているようなのです。
なので、初めてAmazon配送に切り替わったときには置き配が指定された状態になっています。そんなの聞いてないよ。。。

そんな指定がどこにあるのかというと、、、、

注文確定前の画面のここをクリックすると

このような画面が出ますので変更します。

わかりにくい場所にありますよね。。。

まあこのほうが人と接触しないから安心だ、という方はいいのでしょうが、玄関に荷物置きっぱなしだと盗まれる心配もありますし荷物がホコリだらけになるんですよね。。。

今宅配業者が配送している地区もある日急に配送方法が変わりますので、置き配にしたくないという方は毎回注文確定前に確認したほうがいいですね。


【Solr】3種類の言語判定ライブラリの対応言語

はじめに

Solrでのインデックス作成の際の言語判定には以下の3種類のライブラリが利用できます。

  • Apache Tika
  • LangDetect
  • Apache OpenNLP

ただし、Solrのリファレンスを読んでも、どのライブラリがどの言語をサポートしているかの情報がありません。詳細についてはそれぞれのプロジェクトページを参照するようにと書かれているので確認してみました。

Apache Tika

プロジェクトのページには言語判定について詳しい情報が無かったので、ソースコードを確認しました。

LanguageIdentifierクラスを見ると、各言語のプロファイルとして .ngp という拡張子のファイルを読み込んでいることが分かります。そこで、solr-8.6.1 同梱の tika-core-1.2.jar に含まれる .ngp ファイルをリストアップしました。

$ jar tvf ./contrib/extraction/lib/tika-core-1.24.jar | grep .ngp
 10960 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/be.ngp
 10411 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/ca.ngp
 10004 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/da.ngp
  9999 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/de.ngp
 12664 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/el.ngp
  9897 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/en.ngp
 10292 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/eo.ngp
  9960 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/es.ngp
  9648 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/et.ngp
 11479 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/fa.ngp
 10081 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/fi.ngp
 10050 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/fr.ngp
 10416 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/gl.ngp
  9738 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/hu.ngp
  9301 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/is.ngp
  9960 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/it.ngp
 12509 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/lt.ngp
  9923 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/nl.ngp
  9373 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/no.ngp
  9165 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/pl.ngp
 10023 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/pt.ngp
 10456 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/ro.ngp
 11783 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/ru.ngp
 10431 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/sk.ngp
 10329 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/sl.ngp
 10081 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/sv.ngp
 14302 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/th.ngp
 11942 Wed Mar 11 18:05:28 JST 2020 org/apache/tika/language/uk.ngp

サポートされている言語は28。日本語はサポートされていないようです。

LangDetect

リファレンスからリンクされているプロジェクトページがgithubになっており、ほとんど情報が無いため、こちらもソースコードを確認しました。

profiles というディレクトリの下に各言語のプロファイルが置かれています。

$ ls profiles
af  bg  cs  de  en  et  fi  gu  hi  hu  it  kn  lt  mk  mr  nl  pa  pt  ru  sl  sq  sw  te  tl  uk  vi     zh-tw
ar  bn  da  el  es  fa  fr  he  hr  id  ja  ko  lv  ml  ne  no  pl  ro  sk  so  sv  ta  th  tr  ur  zh-cn

サポートされている言語は53。日本語も含まれています。

Apache OpenNLP

こちらはREADMEにしっかり記載されていました。

サポートされている言語は103。日本語も含まれています。


【Solr】インデックス作成時に言語判定してフィールドを振り分ける

はじめに

Solrでインデックスしたいドキュメントが日本語だけと限らない場合があります。日本語の場合なら形態素解析ベースのトークナイザーを使いたいが、英語の場合は空白区切りベースのトークナイザーを使いたい。そういうときに使える言語判定の仕組みをSolrは備えています。

言語判定とスキーマ定義の方針

以下のような簡単なドキュメントを考えます。

[
    {
        "id" : "1",
        "text" : "Solr 8.4 からパッケージ管理機能が追加されました。リファレンスによると、ここでいうパッケージは1つまたは複数のプラグインを1つにまとめたものという意味のようです。Solr におけるパッケージ管理について調べました。",
    },
    {
        "id" : "2",
        "text" : "Starting in Solr 8.4, package management features have been added. According to the reference, package here means one or several plug-ins in one package. We looked at package management in Solr.",
    }
]

“text”が本文のフィールドで、ここに日本語の文章が入るかもしれないし、英語の文章が入るかもしれないという設定です。

日本語の場合は形態素解析を行う text_ja というフィールドタイプ、英語の場合は空白区切りベースの text_en というフィールドタイプにします。以下のようなスキーマ定義のイメージです。

<field name="text_ja"      type="text_ja"    indexed="true" stored="true"/>
<field name="text_en"      type="text_en"    indexed="true" stored="true"/>

言語判定の設定

以下を solrconfig.xml に追加して必要なライブラリを読み込みます。

<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />

LangDetectLanguageIdentifierUpdateProcessor を使う updateRequestProcessorChain を設定します。

 <updateRequestProcessorChain name="langdet">
    <processor class="org.apache.solr.update.processor.LangDetectLanguageIdentifierUpdateProcessorFactory" name="langdet">
      <lst name="defaults">
        <str name="langid.fl">text</str>
        <str name="langid.langField">language</str>
        <str name="langid.whitelist">ja,en</str>
	<str name="langid.map">true</str>
        <str name="langid.fallback">other</str>
      </lst>
    </processor>
    <processor class="solr.LogUpdateProcessorFactory" />
    <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>

上で設定した langdet チェインを update リクエストのときに使うように設定します。

  <initParams path="/update/**">
    <lst name="defaults">
      <str name="update.chain">langdet</str>
    </lst>
  </initParams>

langid パラメータの意味

langid.fl

言語判定処理の対象とするフィールド名。上の設定では text フィールドを対象としています。

langid.langField

言語判定結果の文字列(jaとかenなど)を格納するフィールド。上の設定では language フィールドを対象としています。

langid.whitelist

言語判定の対象とする言語名。上の設定では日本語と英語を対象としています。

langid.map

言語判定結果をフィールドにマッピングするかどうか。マッピングする場合はtrueを指定します。デフォルトでは {元のフィールド名}_{言語名} というフィールドにマッピングされます。上の設定では日本語判定の場合は text_ja フィールドに、英語判定の場合は text_en フィールドにマッピングされます。

langid.fallback

langid.whitelist で指定した言語にあてはまらない場合のマッピング先を決定するための文字列。上の設定では other を指定しているので、日本語でも英語でもない場合は text_other フィールドにマッピングされます。

スキーマ定義

言語判定の設定に基づいてフィールドを定義します。

<field name="text_ja"      type="text_ja"    indexed="true" stored="true"/>
<field name="text_en"      type="text_en"    indexed="true" stored="true"/>
<field name="text_other"      type="text_ngram"    indexed="true" stored="true"/>
<field name="language"  type="string"  indexed="true" stored="true"/>

updateリクエストで送られてきた text フィールドの内容を言語判定して、日本語なら形態素解析して text_ja フィールドに、英語なら StandardTokenizer を通して text_en フィールド に、それ以外なら ngram 分割して text_other フィールドに格納されます。

動作確認

上記の設定でコレクションを作成してサンプルドキュメントを投入してみます。

$ cd server/solr/configsets
$ cp -r _default langdet
[langdet/conf/{solrconfig.xml,managed-scheme}を編集
$ (cd langdet/conf && zip -r - *) |curl --user user:pass -X POST --header "Content-Type:application/octet-stream" --data-binary @- "http://localhost:8983/solr/admin/configs?action=UPLOAD&name=langdet"
$ curl --user user:pass 'http://localhost:8983/solr/admin/collections?action=CREATE&name=langdet&numShards=1&replicationFactor=1&collection.configName=langdet&wt=json'
$ cat ~/sample.json 
[
    {
        "id" : "1",
        "text" : "Solr 8.4 からパッケージ管理機能が追加されました。リファレンスによると、ここでいうパッケージは1つまたは複数のプラグインを1つにまとめたものという意味のようです。Solr におけるパッケージ管理について調べました。",
    },
    {
        "id" : "2",
        "text" : "Starting in Solr 8.4, package management features have been added. According to the reference, package here means one or several plug-ins in one package. We looked at package management in Solr.",
    }
]
$ bin/post -u user:pass -c langdet ~/sample.json

最近のSolrでは、認証を設定しないとsolrconfig.xml内にlibディレクティブでライブラリを追加できないので注意が必要です。

$ curl -s -u user:pass "http://localhost:8983/solr/wikipedia_langdet/select?omitHeader=true&q=*%3A*"
{
  "response":{"numFound":2,"start":0,"numFoundExact":true,"docs":[
      {
        "id":"1",
        "language":"ja",
        "text_ja":"Solr 8.4 からパッケージ管理機能が追加されました。リファレンスによると、ここでいうパッケージは1つまたは複数のプラグインを1つにまとめたものという意味のようです。Solr におけるパッケージ管理について調べました。",
        "_version_":1682039285845327872},
      {
        "id":"2",
        "language":"en",
        "text_en":"Starting in Solr 8.4, package management features have been added. According to the reference, package here means one or several plug-ins in one package. We looked at package management in Solr.",
        "_version_":1682039286023585792}]
  }}

正しく言語判定されて、それぞれのフィールドに振り分けされました。