してログ

ロボットのアクセスを判定するためのキーワードリストを、新しく作り直しました。このサイトのアクセスログから拾っていますので偏りがあるかもしれませんが、十分な期間のサンプルから作成したのでそれなりの精度で判定可能かと思います。

部分一致での判定リスト

基本的にサービス名っぽいキーワードを切り取ったリストなので、多少のバージョン違いによるブレも関係なく判定できます。

Googlebot
Yahoo! Slurp
Mediapartners-Google
msnbot
bingbot
MJ12bot
Ezooms
pirst; MSIE 8.0;
Google Web Preview
ia_archiver
Sogou web spider
Googlebot-Mobile
AhrefsBot
YandexBot
Purebot
Baiduspider
UnwindFetchor
TweetmemeBot
MetaURI
PaperLiBot
Showyoubot
JS-Kit
PostRank
Crowsnest
PycURL
bitlybot
Hatena
facebookexternalhit
twibble.io
Twitterbot
ceron.jp
spider
SocialRankIOBot
CCBot
Nuzzel
NINJA bot
IAS crawler
BLEXBot
crawler
SemrushBot
DotBot
AMZNKAssocBot
Mappy
linkdexbot
Scrapy
DeuSu
admantx
ltx71
Cliqzbot
AlphaBot
BUbiNG
Applebot
Y!J-BRW
SafeDNSBot
Slackbot
Fluctbot
heritrix

正規表現での判定リスト

短すぎるキーワードや開発環境しか入ってないログが結構ありました。部分一致にすると誤判定してしまうかも知れないので、正規表現で対応しています。

^bot$
^Java\/[0-9_.]+$
^Wget\/

去年末にインクジェット複合機が故障してメーカー修理に出したのですが、今までで経験した中で最悪でしたので愚痴っておきます。故障内容はペーパーが給紙されないといった良くあるもので、素人目には搬送ローラーでも交換してもらえば直るんだろうな、くらいに考えておりました。以下めんどうなので、時系列の箇条書き出します。

  1. 給紙でエラーになることが多くなり、キャノンのお客様相談センターに問い合わせる
  2. 修理の手配をしてもらい、クロネコが引き取りに来るのを待つ(ちなみに修理代は1万円、期間は1週間程度)
  3. クロネコが、通常の集荷で手ぶらで来る(梱包キット持参で梱包作業も行うということでしたが)
  4. クロネコにそう伝えると、裸で預かっていき後ほど伝票と届けるとのこと(しかし持ってったきり伝票は貰えなかった)
  5. 数日後、修理品が返送されてくるも、送ったときと同じ症状でまったく直ってない(作業内容は給紙ローラを分解清掃したとある)
  6. 修理票の電話番号でそう伝えると、ちゃんと確認したとのこと。症状を詳しく説明しはじめるが、一度お客様相談センターに掛け直してみてください、と言われる
  7. お客様相談センターに掛けたが、年末なのか長時間待っても繋がらない
  8. 仕方ないのでもう一度、修理票の電話番号に掛け、そこで再修理の手配をしてもらう(今度は使っている紙を同梱して欲しいとのこと)
  9. クロネコが来るも、またもや手ぶら(返送されたキットを再利用する)
  10. 数日後、同梱した用紙で現象を確認したとの電話連絡があり、給紙ローラの交換が必要だが部品が無いのか本体ごと別の機種に交換する対応になると連絡が来た
  11. 代替機種のスペックがFAXで送られてきたが、無線LANしかない機種だったため「前の機種と同じ有線LANで使いたい」と電話で伝える
  12. この時点で12/27だったのだが、驚いたことに何の連絡が無いまま、年を越した1/9に別の機種のFAXが来る
  13. これで修理継続(機種変更の交換対応)にOKを出す
  14. 数日後、その交換機種が送られてくる(設置してようやく終了か、と思いきや…)
  15. 電源投入1発目からエラーで動かない(マニュアルを見ると相談センターに連絡してくれと)
  16. お客様相談センターに掛けるが、繋がらないまま長時間待たされる … 諦める
  17. 修理票の電話番号に掛ける、その症状だとお客様相談センターに掛け直せと(これだけ酷い対応なのだから、そちらから対応できるものに掛けて欲しいと言ったができないらしい)
  18. お客様相談センターに掛け、スピーカーにして長時間放っておく(この間も電話代取られてるんだが)
  19. ようやく繋がったオペレーターだが、修理の履歴が上がってないらしく、交換機種と違うので確認して掛け直すと(掛け直せるんじゃないか!)
  20. しばらくして電話があり、エラー番号等を伝えると、預かり修理しかない(もう苦笑い)
  21. またもやクロネコ待ち、梱包キット持って来ないんだろうから、再々利用して梱包しといてやった(図星)
  22. 数日後、修理品が届く
  23. セットアップして、ようやく正常動作を確認

と、いうわけで…

最初に電話を掛けてから実に1ヵ月以上、まさか3往復も掛かるとは思いませんでした。仕事で使っていたというのもあり、月末にプリントやコピーの使用が多くなるので、それを見越して修理に出したのに…。別の古いプリンタとドキュメントスキャナを組み合わせるしかないのが大変でした。

電話受付の体制に疑問

お客様相談センターで集約するのは構わないが、修理途中の二次受付もここから入らないとダメだというのはどうでしょうか。修理票の表に修理センターの電話番号が書かれているのに、そこに電話を掛けても「(修理後の動作チェックでちゃんと確認したので)操作のことについては相談センターに…」のようなニュアンスでした。修理ミスを指摘しているのですから、対応できる者に取り次いで折り返し電話させるのが筋では無いかと思います。

それと、症状が再現しなかったのか清掃だけして送り返したようなのですが、なぜユーザーに確認をしないのでしょう? 症状が再現しないのであれば、電話して確認するぐらいはして欲しいと思います。はっきり言えば怠慢です。

別機種交換の対応は“ユーザー想い”なのか?

結局、同等機種への交換対応になったわけですが、プリンターに限らずデジカメとかでも最近こう言った対応が増えています。一見すると新機種に換えてもらえてユーザー想いの対応に見えますが、果たしてそうでしょうか? 機種が変れば仕様も変ります。今回は、有線LANが理由でキャノンとしてはひとつ上のクラスの製品を提案せざるを得なかったようです。他にもプリンターならインクの換え置き(交換してくれるとは言っていましたが、送る手間を考えていない)、デジカメなら電池パックやら周辺アクセサリなど、本体交換でユーザーに強いる迷惑は多いと思います。

あと、交換品ですが新品だと思っていましたが、そうでは無く再生品じゃないかと思います。起動もしない不良品でしたし、本体に汚れや擦り傷があったり、化粧箱にも入っていませんでした。

発送連絡が欲しい

今回3往復もした訳ですが、その度にいつ来るか分からず、代引きの代金の用意や不在で再配達になったりしました。1回で済めばそう目くじらは立てないが、さすがに3回ともなると文句のひとつも言いたくはなります。対応番号を発行したら電話でメモさせるなりして、履歴をウェブで照会可能にし、以降の連絡はそこからできるようにすればいいのに…。

日本製に求めるもの

近年の日本製品やサービスってどうしちゃったんだろう。低価格競争だからといって、落としてはいけない部分を失ってしまったようです。キャノン製品だから、富士通製品だから、日本製品だから安心の高品質、それはもう幻想なのかも知れません。尖った製品が減ってしまい、無難で安くてそこそこの性能の製品しか無くなったのも、根っこは一緒のような気がしますね。

文字列フィールドの改行コードを取り除くSQLです。trim 関数を使いますがデフォルトだと空白文字だけなので、改行コードを指定してあげます。

update accesslog set useragent=trim(both E'\r\n' from usetagent);
2番目の Traident のやつ
2番目の Traident のやつ

なんかログ処理がエラー出していたんで調べてみると、User Agent におかしな文字コードが含まれているものがありました。元の文字コードが何なのか知らないけど、スペースが入る場所の文字コードが &#20 じゃないのが入っているようです。コンソールでダンプしたら文字化けして見えるのですが、実際何が入っているかまでは確認してません。

なお、IP は米国マイクロソフト社ばかり、本当にマイクロソフトか怪しいもんです。これ、なんか気持ち悪いなあ。でも、2/2 のログだけなんだよなあ。あ~気持ち悪い。

黒チューリップまで完了
黒チューリップまで完了

ガーデンイベントの中断でなかなかコンプリートできませんが、ロックンローズ前に黒チューリップまで完了しました。レアリティの低い順に集めましたが、逆の高い順に集めると一石二鳥、三鳥になるので効率的かも知れません。基本的には店売りのオレンジを、集めている色のチューリップに交配して増やしました。これから紫と青ですが、オレンジとの交配だと低確率なのですが、白が出るので溜めて交配の二段階手法でいけそうです。

汎用的に使える和暦フォーマット関数を作成してみました。元号は漢字表記とアルファベットに対応し、通常の日付フォーマットを利用することが可能です。また、明治以降に対応し、平成の次の新元号が決まったら書き換えれば済む(改元の2019年5月1日は組み込んであります)ようになっています。

  • 「平成」などの漢字表記と「H」などのアルファベット表記ができます
  • 最初の年を「元年」と表記します
  • 年以外の部分に日付フォーマットの書式が使えます
  • 新元号にすぐに対応できるようにしました
  • 明治以降の元号に対応しています
  • 明治より前は「西暦1192」や「AD 1192」のような表記になります

使い方

// 平成30年1月28日
convert_jpdt(time());

// 平成30年01月28日
convert_jpdt(time(),'年m月d日');

// H30.01.28
convert_jpdt(time(),'.m.d',false);

ソースコード

// 西暦→和暦変換
function convert_jpdt($dt,$fmt='年n月j日',$kanji=true) {
	$date = (int)date('Ymd',$dt);
	$year = (int)date('Y',$dt);

	if ($date >= 20190501) {        //新元号元年(2019年5月1日以降)
		$name = "  ?未定";
		$year -= 2018;
	} else if ($date >= 19890108) { //平成元年(1989年1月8日以降)
		$name = "  H平成";
		$year -= 1988;
	} else if ($date >= 19261225) { //昭和元年(1926年12月25日以降)
		$name = "  S昭和";
		$year -= 1925;
	} else if ($date >= 19120730) { //大正元年(1912年7月30日以降)
		$name = "  T大正";
		$year -= 1911;
	} else if ($date >= 18680125) { //明治元年(1868年1月25日以降)
		$name = "  M明治";
		$year -= 1867;
	} else {
		$name = 'AD 西暦';
	}

	if ($kanji) {
		$name = substr($name,3);
		if ($year==1) $year = '元';
	} else {
		$name = ltrim(substr($name,0,3));
	}

	return $name.$year.date($fmt,$dt);
}