ふるさと納税で食べたいちごがおいしかった話

ふるさと納税——それは各地域のおいしいものが食べられる魅力的な仕組み。

 

というのは本来副次的なものですが、
ふるさと納税サイトでは返礼品を注文しているという感覚なので、
そしてそれを狙っているようにも感じるので間違いではないはず。

 

ふるさと納税を扱うサイトで返礼品を眺めているときに、
ふと、古都華といういちごがおいしいと聞いたことがあったのを思い出し、
古都華で検索してみるとおいしそうないちごだったので早速納税。

待つこと数日、古都華と書かれたきれいな箱が届きました。

箱の中身は、見るからに高そうなっゃっゃのいちごが、
大きいサイズと小さいサイズに分かれて2つのパックに入っていました。

味は、本当においしかったです。
いちごの味でした。

我ながら酷い語彙力なので「食レポ コツ」で検索してみましたが、
やっぱり、ただただおいしかったとしか言えません。
酸味と甘味がしっかりとあって、「いちごの味」というのを純粋に突き詰めた味。

 

実は、過去に古都華と書かれたいちごを食べたことがあって、
そのときは普通のイチゴとしか感じなかったように思います。

おいしいには違いなかったのですが、
化粧箱に入っているようなことはなくごく普通に売られていて
味も全然違ったような気がします。

そのとき食べたのは、実は古都華ではなかったりしたのかもしれませんが、
名産品はその地域外で食べると無難な味がしたりして、
あれ?ってなるのと似たようなものかとも思ったり。

また食べたいと思えるいちごでした。
気になった方は早速納税です。

ごちそうさまでした。

英語の面白い慣用句

こんにちは。開発担当のマットです。
オーストラリア生まれ育ちですが、人生の半分ぐらいは日本に住んでいます。

日本に来た時、日本語を必死に勉強しましたが、どれほど単語や文法を覚えても慣用句は完全に別物です。
「猫」も「小判」も単語として知ってても、いきなり「猫に小判」を聞くと・・・はぁ?となりますね。同じく、英語には多くの慣用句やことわざがありますので、この記事でいくつか面白いものを紹介したいと思います。

最近、AIの画像生成も楽しくやっていますので、それぞれに画像も付けておきたいと思います。

A snowball’s chance in Hell

直訳:「地獄の中の雪玉の見込み」
意味:絶対絶望。うまくいく確率ゼロ。
実例:”Our team has a snowball’s chance in Hell of winning the World Cup.”

A storm in a teacup

直訳:「茶碗の中の嵐」
意味:小さいことを大げさにする
実例:”I think this problem is just a storm in a teacup.”

On the fence

直訳:「柵の上」
意味:判断ができない状態
実例:”I’m on the fence if I should go or not.”

Spill the beans

直訳:「豆をこぼす」
意味:秘密を明かしてしまう
実例:”He spilled the beans about the party.”

Put on ice

直訳:「氷に付けておく」
意味:棚上げにする。ある問題を放置して先送りすること。
実例:”Let’s put this project on ice this year.”

The elephant in the room

直訳:「部屋の中の象」
意味: 見て見ぬふりをしている大きな問題
実例:”The relationship between the managers is the elephant in the room.”

まとめ

言語って、単語や文法だけではなく、多彩な文化が作り上げたものと考えると面白いですね。

[Solr]Jaegarと連携させて分散検索処理を追跡する

はじめに

Solr を Jaeger と連携させて分散検索処理を追跡することができます。
https://solr.apache.org/guide/solr/latest/deployment-guide/distributed-tracing.html

Jaeger は分散トレーシングのツールです。
SolrCloud で複数のノードによる分散インデックス・分散検索を利用するときに、どのノードからどのノードへどんなリクエストが送られたか、どのノードでどの処理にどのくらい時間が掛かったかを追跡でき、これらの情報をパフォーマンスの改善などに利用できます。

Jaegerの起動

Jaegerのバイナリをダウンロードサイトからダウンロードして展開し、以下のコマンドを実行します。

./jaeger-all-in-one --collector.zipkin.host-port=:9411

JaegerTracerConfiguratorの設定

solr.xml に以下を追加します。

  <tracerConfig name="tracerConfig" class="org.apache.solr.jaeger.JaegerTracerConfigurator"/>

それ以外のパラメータは Solr 起動時に環境変数で渡します。

bin/solr start -cloud -p 8983 -Denable.packages=true -Dsolr.modules=jaegertracer-configurator -DJAEGER_SAMPLER_TYPE=const -DJAEGER_SAMPLER_PARAM=1

プロダクション環境で全クエリを追跡したくはないときは JAEGER_SAMPLER_TYPE に probabilistic などを指定します。今回は動作確認なので const を指定して全部を対象としています。
JAEGER_SAMPLER_PARAM=1を指定しないとサンプリングが実行されません。

クエリの実行と追跡結果の表示

この実験のために2レプリカずつの2シャードのコレクションを作成しました。準備が整ったら Solr Admin UI で何かクエリを実行してから Jaeger UI ( http://localhost:16686/ )にアクセスします。
以下は追跡結果のタイムライン表示の例です。

2023-03-19 12:37:01.732 INFO  (qtp487416600-120) [c:test s:shard2 r:core_node7 x:test_shard2_replica_n4] o.a.s.c.S.Request webapp=/solr path=/select params={df=_text_&distrib=false&fl=id&fl=score&shards.purpose=16388&start=0&fsv=true&q.op=OR&shard.url=http://localhost:8983/solr/test_shard2_replica_n4/|http://localhost:8983/solr/test_shard2_replica_n5/&rows=10&rid=localhost-6&version=2&q=*:*&omitHeader=false&NOW=1679229421713&isShard=true&wt=javabin&useParams=&_=1678885506788} hits=4562 status=0 QTime=11
2023-03-19 12:37:01.733 INFO  (qtp487416600-15) [c:test s:shard1 r:core_node6 x:test_shard1_replica_n2] o.a.s.c.S.Request webapp=/solr path=/select params={df=_text_&distrib=false&fl=id&fl=score&shards.purpose=16388&start=0&fsv=true&q.op=OR&shard.url=http://localhost:8983/solr/test_shard1_replica_n2/|http://localhost:8983/solr/test_shard1_replica_n1/&rows=10&rid=localhost-6&version=2&q=*:*&omitHeader=false&NOW=1679229421713&isShard=true&wt=javabin&useParams=&_=1678885506788} hits=4676 status=0 QTime=8
2023-03-19 12:37:01.753 INFO  (qtp487416600-120) [c:test s:shard1 r:core_node6 x:test_shard1_replica_n2] o.a.s.c.S.Request webapp=/solr path=/select params={df=_text_&distrib=false&shards.purpose=64&q.op=OR&shard.url=http://localhost:8983/solr/test_shard1_replica_n2/|http://localhost:8983/solr/test_shard1_replica_n1/&rows=10&rid=localhost-6&version=2&q=*:*&omitHeader=false&NOW=1679229421713&ids=22,11,12,24,13,14,15,16,20,10&isShard=true&wt=javabin&useParams=&_=1678885506788} status=0 QTime=1

それぞれのリクエストは上記のログに対応しています。
shard1 と shard2 に id だけを取得するリクエストを並行して投げて、その後、得られた id のリストを統合して結果作成用のリクエストを投げていることが分かります。

[Solr]ChatGPTにスキーマを作らせてみた

Solrによる検索環境を構築するにあたって、スキーマの設定ファイルを作るところは意外と面倒です。
その部分を試しに ChatGTP に手伝ってもらいました。

以下の内容で依頼しました。

Apache Solr で以下の文書のインデックスを作成します。デフォルトのスキーマ設定にスキーマAPIを使って必要な設定を追加するための JSON ファイルを作成してください。
インデックス対象の文書は以下の形式の JSON ファイルで与えられます。
[{“id”:”10″,”type”:”官公庁”,”area”:”住之江区”,”name”:”軽自動車検査協会大阪主管事務所”,”address”:”住之江区南港東3-4-62″,”address_p”:”34.6164938333333,135.438210722222″},
{“id”:”11″,”type”:”官公庁”,”area”:”住之江区”,”name”:”大阪陸運支局なにわ自動車検査登録事務所”,”address”:”住之江区南港東3-1-14″,”address_p”:”34.6190439722222,135.442191833333″}]

インデックス対象は、いつもの大阪の施設情報です。具体例として与えたのは2レコード分だけですが、以下のように適切なスキーマを作ってくれました。

以下は、Apache Solr でこの JSON ファイルをインデックスするためのスキーマ定義の例です。この例は、id、type、area、name、address、address_p の6つのフィールドをインデックスすることを想定しています。

{
  "add-field": [
    {
      "name": "id",
      "type": "string",
      "indexed": true,
      "stored": true,
      "required": true,
      "multiValued": false
    },
    {
      "name": "type",
      "type": "string",
      "indexed": true,
      "stored": true,
      "required": true,
      "multiValued": false
    },
    {
      "name": "area",
      "type": "string",
      "indexed": true,
      "stored": true,
      "required": true,
      "multiValued": false
    },
    {
      "name": "name",
      "type": "text_general",
      "indexed": true,
      "stored": true,
      "required": true,
      "multiValued": false
    },
    {
      "name": "address",
      "type": "text_general",
      "indexed": true,
      "stored": true,
      "required": true,
      "multiValued": false
    },
    {
      "name": "address_p",
      "type": "location_rpt",
      "indexed": true,
      "stored": true,
      "required": true,
      "multiValued": false
    }
  ]
}

このスキーマ定義によって、以下のようにインデックスを作成することができます。

  1. Apache Solrの管理画面にアクセスします。
  2. 左側のメニューから「コアの作成」をクリックして、新しいコアを作成します。
  3. 新しいコアの名前を入力し、「コアを作成する」をクリックします。
  4. 新しいコアの管理画面に移動し、「スキーマ」をクリックします。
  5. 「スキーマ」のページで、「スキーマAPI」をクリックし、「スキーマ定義の追加」をクリックします。
  6. 上記のスキーマ定義をコピーして、「スキーマ定義の追加」のテキストボックスに貼り付けます。
  7. 「送信」をクリックしてスキーマを追加します。
  8. 左側のメニューから「ドキュメント」をクリックして、新しいドキュメントを追加します。
  9. 新しいドキュメントのJSON形式のデータを入力し、「追加」をクリックしてインデックスを作成します。
  10. インデックスが作成されたことを確認するために、左側のメニューから「クエリ」をクリックして、クエリを実行して結果を確認します。

短い文字列には string、 長めの文字列には text_general、緯度経度には location_rpt とデータの内容に合わせてフィールドタイプを選んでくれているように見えます。 address_pという名前がヒントになったかもしれないので hoge にして試してみましたが、やはり location_rpt になりました。

このようにインデックス作成までの準備の部分を AI に手伝ってもらえると、いろいろと楽になりそうです。

Adobeの新たなジェネレーティブAI「Adobe Firefly」で何ができるのか

3月21日ついにAdobeがAI画像生成ツールを発表しましたね。
その名も「Adobe Firefly」

 
アドビ、新たなジェネレーティブAI「Adobe Firefly」を発表
https://www.adobe.com/jp/news-room/news/202303/20230321_adobe-unveils-firefly.html
 
まだ、Bata版ですが、製品版が出るのが楽しみです。
Bata版を触りたい場合は「 https://firefly.adobe.com/ 」の右上のボタン「Request access」から、申請をすることができます。
大きな特徴として「商業利用に特化したジェネレーティブAI」という点。
(現在、プライベートベータ版)
 
今までの画像生成ツールなどは、どの画像を使ってAI訓練されているか未公開なので、著作権もグレーな状況。
 
「Adobe Firefly」は「Adobe Stockライブラリ」や「著作権切れ」などのコンテンツを利用するなどしてかなり安心して利用できそうです。
Adobe Stockの画像や一般に公開されているライセンスコンテンツや著作権が失効しているパブリックドメインコンテンツを対象としており、画像やテキストエフェクトを中心に、商業利用として安全性を考慮したコンテンツを生成するように設計されています。
https://www.adobe.com/jp/news-room/news/202303/20230321_adobe-unveils-firefly.html
 
では具体的に何ができるか見てみましょう。
(すぐ申請はおりないようで、私はまだ触れるように触れてません。なので、同じ紹介動画の該当箇所をペタペタ貼っているのでご了承を…)

Text to image

テキストを入力するだけで画像を生成できます。
https://youtu.be/_sJfNfMAQHw?t=4
今まではAI画像生成などは操作や準備が大変なのですが、わかりやすい操作画面で使いやすそうですよね。
写真風なのかアート風なのかなども細かく設定できるようです。

Extend image

画像の足りない部分も簡単に増やしてくれます。
https://youtu.be/_sJfNfMAQHw?t=10

Inpainting

人が着ている服を指定して、テキスト入力するだけで、その内容に沿った服に変更できるようです。
https://youtu.be/_sJfNfMAQHw?t=14

Smart Portrait

人の表情や年齢も簡単に変えれそうです。
https://youtu.be/_sJfNfMAQHw?t=24

Depth to image

写真をアップロードして、変更したいイメージのテキストを入力するだけで、写真のイメージが変更できるようです。
https://youtu.be/_sJfNfMAQHw?t=30

3D to image

3Dオブジェクトとテキストを組み合わせるだけでそのイメージ画像が簡単にできるようです。
「芝生の丘お城」にしたり「お菓子のお城」にしたり。
https://youtu.be/_sJfNfMAQHw?t=36

Text to template

デザインテンプレートもたくさん作ってくれるようです。
例えば「ハッピーバースデーのテンプレートを作って」と書くだけで様々なデザインパターンを作ってくれます。
https://youtu.be/_sJfNfMAQHw?t=43
それ以外にも様々なことが簡単にできるようになるようです。
安心して商用利用できるようになるのも心強いですよね。