次いってみよー!

あけおめことよろ。
今年もすでに一ヶ月終わりかけていることに気づいたマエダです。

年始は毎年恒例えべっさんにメンバーみんなでご祈祷に行って参りました。
そして、書き初めをしてSlackで共有し抱負を述べるランチ会を実施しました。
※ 例年もっと早くブログ書いてたのに忘れていました;

昨年の書き初め記事はこちら。

今年の僕の書き初めはこちら。

私たちの普段馴染みのあるUIでアプリでは、[次へ]というボタンやウェブサイトではページングで利用する[次へ]というリンクなどがあります。

弊社は、おかげさまで設立から丸5期・丸5年を経過しました。
本当にありがとうございます!

今期は10年目に向けた新しいスタートと捉え、「初心に帰ること」とこれまでの5年以上にこれから先5年は「チャレンジすること」をお約束します。

今始まったばかりの2020年代は僕たちがつくります。

いかりや長介さんの言葉、「次いってみよー」。
なんかすごくポジティブでワクワクするコトバ。
僕たちは次のステージに一歩踏み出せるよう頑張ります!

いつもお世話になっている皆様、これからお世話になる皆様、今後とも何卒よろしくお願いいたします!


Solrのコレクション名に日本語を使えるか

先日、テーブル名やカラム名に日本語が使われているデータベースからデータをSolrにインポートする機会がありました。Solr側のコレクション名やフィールド名で日本語を使えるならインポートの手間が小さくて済むので、実際そういうことができるのか調べてみました。

コレクションAPIで日本語名のコレクションを作ってみます。

$ curl -s 'http://localhost:8983/solr/admin/configs?action=CREATE&omitHeader=true&name=test1&baseConfigSet=_default'
$ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATE&name=テスト&numShards=1&replicationFactor=1&wt=json'
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /solr/admin/collections. Reason:
<pre>    Server Error</pre></p><h3>Caused by:</h3><pre>org.apache.solr.common.SolrException: URLDecoder: The query string contains a not-%-escaped byte > 127 at position 19
(略)

サーバエラーになってしまったのでURLエンコードしてパラメータ指定します。

$ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATE&name=%E3%83%86%E3%82%B9%E3%83%88&numShards=1&replicationFactor=1'
{
  "responseHeader":{
      "status":400,
      "QTime":0},
      "error":{
      "metadata":[
        "error-class","org.apache.solr.common.SolrException",
        "root-error-class","org.apache.solr.common.SolrException"],
        "msg":"Invalid collection: [テスト]. collection names must consist entirely of periods, underscores, hyphens, and alphanumerics as well not start with a hyphen",
        "code":400}}
エラーメッセージによると、コレクション名に利用できるのは以下の文字種に限るようです。
  • 英数文字
  • ピリオド
  • アンダースコア
  • ハイフン(ハイフンは先頭文字としては使えない)

ソースコードを調べると、コレクション名のチェックをしているのは以下のクラスでした。

solr/solrj/src/java/org/apache/solr/client/solrj/util/SolrIdentifierValidator.java

チェックに使う正規表現は以下の通りです。

final static Pattern identifierPattern = Pattern.compile("^(?!\\-)[\\._A-Za-z0-9\\-]+$");

SolrIdentifierValidatorではシャード、コレクション、コア、エイリアスの名前をチェックしています。チェックに使う正規表現は共通なので、シャード、コレクション、コア、エイリアスについては同じ仕様であることが分かりました。


さようならAppleWatch、こんにちはGarminWatch

タイトルでいきなりネタバレしちゃってますね。。。

以前、Apple Watchのある生活 という記事を書いたのですが、

どんどん歩く距離が伸びていき、休日には10km近く歩くようになっていき、ついにはランニングするようになりました。

AppleWatchにもランニングアクティビティを記録する機能がついていて、ラップタイムやGPSによるルートの記録など一通りの機能があります。

ただ、AppleWatchは開始終了や一時停止、音楽のコントロールなどを行う時、基本的にタッチパネルを操作するのですが、これが走ってるときにすごく操作しにくいのです。

また、GPSと心拍計をフル稼働させたときのAppleWatchのバッテリーの減りは凄まじく、1日に複数回アクティビティ記録を行ったりすると、夜には充電しないといけない状況になります。

まあ、ささいな不満ではありますし、特にマラソン大会に出るとかそういう予定もなく、あくまで日々のフィットネスとしてやっているだけなんですが、、、

でもこれはガジェット好きとしては買い替えフラグでしょ!

ということで、、、

Garmin ForeAthlete 245 というランニングウォッチを購入しました。

Amazonで3万円弱、、、安くはなかった。。。

これ、上で挙げたAppleWatchの不満点はすべてクリアしてます。

  • 一日2−3回のアクティビティ記録を行って、バッテリーは実質4日間ほどは持つ。
  • タッチパネルではなくすべてボタン操作なので、ランニング中に押しにくいということはない。

また、iPhone、Androidのどちらにも対応していて通知も受けることができます。

ただ、全てボタンでの操作なので直感的とは言いづらく、ちょっと操作が面倒臭いですし、ディスプレイは圧倒的にAppleWatchのほうが見やすいです。

とりあえずの評価としては、アクティビティの記録や体調管理がメインの人にはオススメできますが、管理はGarminアプリでやることになりますので、iPhoneとの連携を重視する人はやはりAppleWatchのほうがいいかなと思います。

私がスマートウォッチに求めているものは前者なので一応満足していますが、まだ使い始めたばかりなので、数カ月後にまた使用感などを書いてみたいと思います。


Solrのフィールド名に日本語を使えるか

前回の記事に引き続き、今回はフィールド名に日本語を使えるかどうかを調査しました。

フィールド名の仕様については、Solrリファレンスガイドの”Field Type Definitions and Properties”に記載があります。

The name of the fieldType. This value gets used in field definitions, in the “type” attribute. It is strongly recommended that names consist of alphanumeric or underscore characters only and not start with a digit. This is not currently strictly enforced.

  • 英数字(先頭文字として数字は使えない)
  • アンダースコア

「今は厳密には強制していません」というのが微妙なところです。“Defining Fields”にもう少し詳しい説明がありました。

Field names should consist of alphanumeric or underscore characters only and not start with a digit. This is not currently strictly enforced, but other field names will not have first class support from all components and back compatibility is not guaranteed.

英数字とアンダースコア以外の文字も使えないことはないけど、全部のコンポーネントがサポートしているとは限らないよ、ということのようです。

フィールド名に日本語を使うとどういうことが起こるか試してみました。

まずtestという名のコレクションを作成します。

$ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATE&name=test&numShards=1&replicationFactor=1'

「日付」というフィールドを追加します。

$ cat add_field_j.json 
{
  "add-field":{
     "name":"日付",
     "type":"pdate",
     "stored":true }
}
$ curl -s -X POST -H 'Content-type:application/json' -d @add_field_j.json http://localhost:8983/solr/test/schema

APIで「日付」フィールドが存在することを確認できます。

$ curl -s 'http://localhost:8983/solr/test/schema/fields/%E6%97%A5%E4%BB%98'
{
  "responseHeader":{
    "status":0,
    "QTime":0},
  "field":{
    "name":"日付",
    "type":"pdate",
    "stored":true}}

「日付」フィールドに値を持つデータを投入してみます。

$ cat j.json
{"日付":"2019-01-01"}
$ ./post -c test j.json

比較のため、”date”フィールドを追加してデータを投入します。

$ cat add_field_e.json
{
  "add-field":{
     "name":"date",
     "type":"pdate",
     "stored":true }
}
$ curl -s -X POST -H 'Content-type:application/json' -d @add_field_e.json http://localhost:8983/solr/test/schema
$ cat e.json
{"date":"1999-01-01"}
$ ./post -c test e.json

データがどう保持されているか比較します。

$ curl -s 'http://localhost:8983/solr/test/select?q=*%3A*&omitHeader=true'
{
  "response":{"numFound":2,"start":0,"docs":[
      {
        "id":"578b7513-831e-4ef3-bdb9-770268f27a7e",
        "__":["2019-01-01T00:00:00Z"],
        "_version_":1651454167605051392},
      {
        "date":"1999-01-01T00:00:00Z",
        "id":"892eb3b5-a648-45a5-80c1-5b975e8ebc47",
        "_version_":1651454169922404352}]
  }}

“date”の方は特に問題ありません。「日付」フィールドは無く”__”というフィールドに値が格納されています。値が配列になっていることから、「日付」フィールドの定義とは異なるフィールドとして扱われていることが分かります。何か別のダイナミックフィールドのルールにヒットしたようです。

当然検索もできません。

$ curl -s 'http://localhost:8983/solr/test/select?q=%E6%97%A5%E4%BB%98%3A%5B*%20TO%20*%5D&omitHeader=true'
{
  "response":{"numFound":0,"start":0,"docs":[]
  }}
$ curl -s 'http://localhost:8983/solr/test/select?q=date%3A%5B*%20TO%20*%5D&omitHeader=true'
{
  "response":{"numFound":1,"start":0,"docs":[
      {
        "date":"1999-01-01T00:00:00Z",
        "id":"892eb3b5-a648-45a5-80c1-5b975e8ebc47",
        "_version_":1651454169922404352}]
  }}

というわけで、割と基本的なところで躓いてしまいました。結論としては、フィールド名に日本語を使うのも実用としては無理ということになりそうです。


好きな漫画について語ってみた

こんにちわ。
リエです。

突然ですが、皆さんは漫画を読みますか?
私はよく読みます(漫画大好き!)

最近、2年ほどかけて読んでいた闇金ウシジマくんをついに読み終えてしまい寂しい気持ちでいっぱいです。洗脳くん編は衝撃だったなぁ。

少女漫画はあまり読まず、青年漫画ばっかり読んでいます。
ということで最近読んでいる漫画をざっくり語らせていただきます。

日常系

・ゆるキャン

https://yurucamp.jp/
知っている方も多いとは思いますが、女子高生がキャンプをする話です。
アニメ化とドラマ化もされており、漫画含めどれも大好きです!
ドラマでリンちゃんを演じている福原遥さんがかわいいのなんのって。
この漫画を読んで一時期キャンプに行きたいと言いまくっていました。

・きのう何食べた?

https://morning.kodansha.co.jp/c/nanitabe
有名な漫画ですし2019年にテレビ東京でドラマ化されたので、ご存知の方は多いかもしれないですね。ゲイカップルの日常を描いている漫画です。ドラマのキャストはまじで神でした。
出てくるお料理もどれも美味しそうで夜中に読むと危険です。(お腹がすく)

ダークサイド系

・ホームルーム

https://www.mbs.jp/homeroom_drama/
日常サイコパス系ラブコメです。(すごいジャンルだな)
コーポレートブログでこの漫画の詳細を書くと始末書を書かなきゃいけないかもなので、気になった方は読んでみてください。
ドラマ特別枠で2020年1月からドラマがスタートするそうで、よくドラマ化したなとびっくりしました。あの話を地上波に流すとなるとどう収めるんだろうと気になっています。

・闇金ウシジマくん

https://ymkn-ushijima-movie.com/
2004年から2019年まで連載されていた長編漫画です。
46巻あるのですが、ちびちび読んでいたので読むのに2年かかりました。
私の周りでは読むと病むと言われている漫画なのですが、(私は別に病まなかった)すごいなという一言につきます。完結してしまって寂しいです( TДT)


最近読んだ漫画はこのくらいでしょうか。
上には書いていませんが、凪のお暇も好きで何回も読み直したな。
ジョジョの奇妙な冒険は名前は知っていましたが読む機会はありませんでした。でも2017年にUSJとコラボした時にアトラクションに乗りたかったので、第3部まで頑張って読みました。そこから第6部まで読んだのですがまた続きが読みたいなと思っています。
あー、書いてたら最初から読みたくなってきた/(^o^)\時間を忘れて読んじゃうので引きこもりする時に読もうかな。

ちなみに今話題沸騰の鬼滅の刃はハマりそうでまだ手を出せていません。
おすすめの漫画がありましたらぜひ教えてくださいm(__)m