[Solr] 検索結果をCBORで出力する

Solr 9.3 から Response Writer で CBOR がサポートされました。
CBOR は MessagePack の後継とも言われるオブジェクト・シリアライズ・フォーマットです。データモデルは JSON がベースになっており、シンプルかつコンパクトにデータのやり取りができます。

Solr の検索結果を CBOR で出力するには、パラメータで wt=cbor を指定するだけです。
Solr のチュートリアル用の techproducts データを対象に、同じ検索結果を JSON で出力した場合とでファイルサイズの違いを比べてみます。

$ curl -s 'http://localhost:8983/solr/techproducts/select?indent=true&q.op=OR&q=*%3A*&wt=cbor' --output result_cbor
$ curl -s 'http://localhost:8983/solr/techproducts/select?indent=true&q.op=OR&q=*%3A*&wt=cbor' --output result_cbor
$ ls -l result*
-rw-r--r-- 1 splout splout 2772 10月 28 20:13 result_cbor
-rw-r--r-- 1 splout splout 5166 10月 28 20:13 result_json

CBOR は JSON に比べると半分近くのサイズになっています。

cbor2 モジュールを使って CBOR のバイナリファイルを python で読み込んでみます。

$ python3
>>> import cbor2
>>> f = open('result_cbor', 'rb')
>>> dic = cbor2.loads(f.read())
>>> dic['responseHeader']
{'zkConnected': True, 'status': 0, 'QTime': 12, 'params': {'q': '*:*', 'indent': 'true', 'q.op': 'OR', 'wt': 'cbor'}}
>>> dic['response']['numFound']
52
>>> dic['response']['docs'][0]
{'id': '0812521390', 'cat': ['book'], 'name': 'The Black Company', 'price': 6.989999771118164, 'price_c': '6.99,USD', 'inStock': False, 'author': 'Glen Cook', 'author_s': 'Glen Cook', 'series_t': 'The Chronicles of The Black Company', 'sequence_i': 1, 'genre_s': 'fantasy', '_version_': 1780827206570737664, 'price_c____l_ns': 699, 'name_exact': 'The Black Company'}

cbor2.loads で dictionary として読み込まれ、JSON のとき同様に検索結果の情報を取り出せることが分かります。


ImageMagickでPDFを高解像度なPNGに

PDFファイルをImageMagickで画像に変換します。

ポイントは解像度指定です。

拡張子はPNG以外でも問題ありません。

$ convert -density 350 -units PixelsPerInch origin.pdf converted.png

density により解像度の指定が可能です。

ここでは350を指定していますが、600や1200を指定するとその値になります。

PDFからPNGに変換した画像 (original size 7000×3938)

ネット上には画像への変換ツールも数多くありますが、内容によっては利用が憚られることもあるかと思います。

高解像度画像への変換もお手軽に。

PDFの関連記事


最近の趣味

なにか新しい趣味を見つけようと思いまして、先月からアクアリウムをはじめました🐟

アクアリウムとは

アクアリウムとは、魚をや水草などの水生動物を人工的に飼育する水槽のことで、身近なところでいうと金魚やメダカの飼育などが該当します。

先月から少しずつですが、水槽の中にソイル(水槽の底に入れる砂のようなもの)や岩、水草、生体を入れて自分だけのアクアリウム環境を作ってみました。

最初の設備を揃えるのに少しハードルは高いものの、一度揃えてしまえばメンテナンスはさほど大変ではありませんでした。

必要なメンテナンス

・掃除、水換え(週1回程度)
・生体への餌やり(毎日2回)

これぐらいです。
掃除後に水槽がピカピカになっているのを見ると気持ちいいです。
水換えや掃除が面倒だと思う人も多いと思うのですが、掃除好きな私はそこまで苦痛を感じていませんw

現在の水槽の様子



岩とか流木も置いてます。


アカヒレです。


ヒメタニシの子どもです。

【水草】
🌱前景草「グロッソスティグマ」
🌱後景草「ハイグロフィラ ポリスペルマ」
上記2種類を植栽しています。

どちらも初心者向けで育てやすい水草です。
実際枯れずに、しっかりと根を伸ばしてくれています。

【生体】
🐟アカヒレ 10匹
🐚ヒメタニシ 4匹(大人 1、子ども 3)

30cm水槽なので、少し生体数多い気がしますが特にみんな元気なので問題ないのかなと思っています。

もう少し大きな水槽でもやってみたいなと思ったので、今後なにか進展があればまたブログに書きたいと思います!


AIで国旗を作ってみました!

こんにちは。開発担当のマットです。
実は、私が旗オタクです。なぜかわかりませんが、小さい時から国旗のことを気に入って、家にいくつかの旗を飾っています。

ところで、AIに頼んだら各国の旗をなんとか面白く再構想できるではないかと思いまして…
この記事でやりたいと思います!

国旗を作るには

国の旗は国民を象徴するものです。要素を適当に選んではいけませんね。
どの国でも、国民が好む色やシンボルがあるかと思いますので、まずはその情報をAIに尋ねてみます。

なんとなくですが、日本語で質問をすると、各国のデータにちょっとした偏見が出ると思いますので、英語で質問をすることにしました。
なお、ChatGPT がかなり長い文面を返すことが多いので、短めな 10 ワード以内な回答をお願いしてみました。



日本の場合、赤, 白, 黒が一番人気だそうです。
黒はちょっと想定外ですが・・・赤と白は確かにそういう気がしますね。
(日の丸だけではなく、日本に「紅白」のテーマなものが多いですね。)

そして、日本を象徴するシンボルが 桜、富士山、鯉 のようです。
これは確かに命中していると思いますね。

この情報を使って、画像生成 AI に旗作りを頼みました。
今回、使わせていただきましたのは Craiyon という 画像生成 AI です。

A flag design in the colors Red, White, Black with the symbols of Cherry Blossom (Sakura), Mount Fuji, Koi Fish.

のプロンプトを使って、生成してみたら、以下の9枚の画像が生成されました。

その中から「旗っぽい」ものを選んで、旗っぽい比率で切り取ったら…

確かに・・・日本らしい国旗を作れました (笑)。

他にも・・・

せっかくなので、他の国も作ってみました〜
全部、以下に並べますが、どの旗はどの国か、当ててみてください。

★答え (タップで表示されます)
中国 オーストラリア インド
イギリス エジプト カナダ
イタリア メキシコ フランス
ロシア 韓国 アメリカ
ブラジル ウクライナ ドイツ


全部わかりましたでしょうか?
いくつかわかりにくいものもあるかと思いますが、その国のイメージ通りなものもありますね。

まとめ

最近、AI の画像生成も、AIの会話も急激に進化してきています。
この新しいツールで、色んな人が色んなことができるようになりました。

数年前だったら、このような画像をつくることは絶対にできませんでしたけど、今は楽に、何十枚も簡単に生成することはできます。

世界の皆さんが、この新しい AI で、何を作るかを楽しみにしています。


Markdownドキュメントをコマンドラインで読む

Markdown のドキュメントをコマンドラインで読みたいことがあります。
自分で書いているときはエディタのプレビューやブラウザの拡張を使えば良いのですが、たとえば github のプロジェクトを clone してきて README.md を読むような場合にはコマンドでさっと読める手段があると便利です。

初め markdown2html とか md2html みたいな名前で探したのですが、Debian パッケージとしては見つからず。結局のところ、markdown というそのまんまの名前のパッケージが見つかりました。

sudo apt install markdown

使い方は簡単で、ファイル名を指定してコマンドを起動すると標準出力にHTMLが出力されます。パイプで繋いでやればテキストブラウザで表示できます。

markdown README.md | lynx -stdin

以下の画像は Solr の s3-repository モジュールに付属の README.md を markdown で変換してから lynx で表示したものです。

こんな感じでさくっと閲覧できます。