この日記の新しいこと

更新日時:

AtCoder のコンテストの記録を書くことにし、サイト内検索機能をつけました。

AtCoder のコンテストの記録

私は自分でプログラムを書いて AtCoder のサンプルチェックと提出を自動化している。これに git commit 機能を自動化したり TLE チェックも手元だけど一応するようにしたりしてきた。

今回さらに、自動でコンテストの記録をとる雛形も作るようにした。つまりコンテストをやると、自動的に日記に復習ページが追加される。

わからなかったところを自分で調べて補わないとスカスカの記事が上がってしまう。何としてもその事態は避けることになるだろう。

故に、コンテストをすると、その復習もやることになる。モチベーションができて多分解説を書き続けることができるだろう。本当かな。

サイト内検索

背景

この日記は jekyll を GitHub Pages で動かして生成している。 gh-pages は plugin に強い制約がかかっており、おいそれと動的なサイトを組み上げることができないのはもちろんのこと、ページの自動生成も制約がかかる。タグやカテゴリーも、タグごとに別ページを分けるといいのだが、 plugin の使用ができない以上これしかない。

この解決策はいくつかあって、ローカルで一度 site を生成して、それを gh-pages に上げるのが普通の方法である。しかし日記を更新する度に手間がかかる。些細な修正であっても commit 前に site 生成するのは面倒だろう。やっぱり gh-pages のサーバに生成を任せるのが良いかと思う。

しかし、最近では別の解決策もある。 plugin ではなく asset で解決するという方法である。 javascript 特に jQuery のおかげでできることが増しているし、動的サイトもどきもできる。悪い話ではなかろう。

Jekyll Tipue Search の導入

というわけで jekyll-tipue-search を入れてみた。仕組みの概要は簡単で、サイト内の全ての日記の文字テキストを js に埋め込み、検索ページにアクセスするとそれを読み込む。キーワードを打ち込むとブラウザ上でそれを検索、 jQuery で動的に表示している。要するに、全部 DL 、閲覧者のローカルで検索。これは検索「機能」なのかとも思うけど、キーワードを打ち込むと該当ページが出てくるから足りているだろう。私のページは大した量にもならないだろうし。

まず日本語対応をした。

  • tipuesearch_set.js の Internal strings を日本語に直す。
  • tipuesearch.min.js の minimumLength を 1 に直す。こうしないと漢字 1 文字の検索もできない。
  • 'wholeWords': false にした。こうしないと日本語の「部分一致」ができない。

ところがサンプルコードを移しても以下のエラーが出てきた。

jquery.min.js:2 Uncaught TypeError: $(...).tipuesearch is not a function
    at HTMLDocument.<anonymous> (?q=aaa:313)
    at j (jquery.min.js:2)
    at k (jquery.min.js:2)
(anonymous) @ ?q=aaa:313
j @ jquery.min.js:2
k @ jquery.min.js:2

検証すると、 js 自体は読み込まれているのでこれとは違う。そうでなく、ロシア語のサイトに当たる。読めないけれどもソースコードを参考にして解決。 JS も jQuery もよくわからんので理解もしていない。

コメントする