人力検索で引用スターを使っていると、☆はつくが引用がつかないことがあります。
同様の経験をされたかたはおられますか。「こんなときうまくいかなかった」「ここを変えればつくようになる」また、ブログやダイアリーなど他のサービスではどうか、等々、引用スターに関する経験や考察をお寄せください。
こちらのコメント欄から参りました。
http://q.hatena.ne.jp/1485914210#comment
id:a-kuma3 さんより回答リクエストをいただきました。せっかくなので回答させていただきます。
はてなスターはここ五年くらいろくにつけていなかったので、最初の引用スターが失敗する現象はごく最近になって知りました。
最近ブログでスターがらみの不具合がありまして、その時あたりに知りました。
不具合に対処する際、そろそろはてなさんとこでドキュメント用意してくれてたりしないかなと、わらすがり気分で検索したら、自分が昔回答した質問がそこここで引っ張り出されてるのを散見しました。
引用先の記事を見て、ふんわりした言葉で回答したので伝わりにくい部分もあったかなと省みました。今更ですが当時したことを思い出せる限り書いてみます。
そして回答からふんわり成分を取って箇条書きしたのがこちらになります。
Apache のログデータが残っていたので記事にして載せました。
私の持っている情報はこれくらいです。古い情報なので引用された他の方の記事なども併せてご覧ください。
以下はしゃっきりした検証データがなく、ほぼ私の妄想なので、適当に読み流してください。
====
以前人力検索はてなで脆弱性の報告をした際に、クリスさんが返信を下さいました。
pacochiさん
はてなスタッフのchris4403です。
XSSのご報告ありがとうございました。
こちらで確認したところ、サーバーのモジュールのバージョンが古いものがあり、そのサーバーで処理されるとエスケープされずに出力されてしまう事象でした。
先ほどサーバーのモジュールを更新したので、現在は発生しておりません。
「そのサーバー」ということは、人力検索は複数のサーバがあるということだと思います。
私はその時 exploit も書いて送っていたのですが、「何故か動作する時としない時がありました。」という文言も添えていたのを確認しました。ランダムにどれかのサーバに飛ばされて処理しているのでしょう。
スター不具合の原因は、それらのサーバ間でデータの同期が取れていない、もしくはリクエストがあったその時点でピンポイントに同期を取ろうとするものの、取り終わる前にリクエストがタイムアウトしてしまうことによるのではないかと思っています。
人力検索は、はてなの中でも URL とユーザの紐づけ規則が特殊なので、内部で結構複雑なキャッシュを持っているのではないかと推測しています。
引用スターをつける時にコメントが一部飛ばされているような挙動をしているのも、内部で同期が不完全なデータをもとに引用チェック用の HTML を生成しているのではないかと思いました。
引用スターとはちょっと違うのですが、gusted (はてなスターが見た目はついているのに相手に届かない現象、名前が分からないので勝手にこう呼びます) に関する考察を以前しました。
これも引用スターと根っこは同じで、データが同期されてないなどで準備が整っていないところにリクエストが来て、慌てて対処しようとするものの、時間切れでそのリクエスト中に完了できなかった結果なのではと思っています。
ちなみに guested になっても引用は問題なくできます。最初の一回は失敗するかもしれませんが、次回以降チェック用のキャッシュさえ取れていれば届け先がなくても引用は可能です。
ふと思い立って昔 guested になった回答にスターをつけてみたところ、通知が来るわ付けたスターのページでアイコンが自分になってるわでびっくりしました。
キャッシュが古いため、新しく取り直して、ついでに所有者情報の構築もし直したのではないかと思いました。最初にスターをつける時に例のごとく五秒くらいかかった末に引用失敗していたので、そんな感じがバリバリです。
ちなみにまだスターが一度もついていない回答に引用スターを三回答分ほどつけてみたところ、全て数秒待った後に引用成功しましたが、スターの通知が来ませんでした。☆レポートのページにも載りませんでした。付けたスターのページには載っています。
こちらはゼロから情報を構築したために挙動が違うのかなと思いました。付けたスターのページで確認したアイコンは私のものでしたが、なんとも guesty な感じですね。
あと、以前は引用できなかったフレーズが、今は引用できるようになっていました。以前は引用に使われる文字の順番をしっかりチェックしていたのが、いつの間にかチェックしなくなったっぽいのが関係していると考えています。
(2/22 追記: 回答した当時、私の表示名は「pacochi」だったので、「ぱ」の字が先頭 64kb よりも下のところでようやく出てくる状態でした。表示名が現在のものに変わったために引用できたとも言えますので、補足しておきます。ちなみに他の引用でも文字の順番は重視されなくなった感覚があります。)
クイズなどの誰かが頭を絞って作った謎も好きですが、はてなスターみたいな天然の謎もロマンがあって好きです。
いつか答え合わせができるといいなと思いますが、昨日はてなポイントを使うサービスをたたみ始めた気配をちょっと感じたので、そのままサービス終了して迷宮入りなんて結末も覚悟しないといけないなと思いました。
追記:
現在人力検索で複数の回答者が脚注記法を使うとどうなるのか知りたいのでそれだけ追記させてください。*1
(2/22 追々記: 悲しいままでした。)
*1:以前は ID がかぶって悲しいことになった覚えがあります。
・スマホで範囲選択してスターを付けても引用スターになることはほとんどありませんでした。
・一度失敗しても二度目は成功することがありました。
・イエロースターが黄色くならず透明な状態であることが長い時に失敗することが多いように感じます
→コメントにも記述されている通り回線の遅さが原因になることもあるのかと
失敗する人はよく見ます。不都合である可能性もあるし、回線やコンピュータの問題である可能性もありますね。
回答ありがとうございます。
> 一度失敗しても二度目は成功する
No.2 a-kuma3さんも書いておられるように、すばやく再挑戦するとうまくいくことがあるようですね。
一方で、何度やりなおしてもとことんつかない場合もあるし、何が要因になっているのか不思議です。
人力検索をそこそこ使うようになってからずっと思っていました。
人力検索での引用スターは、ちょいちょい失敗する。ハイクでは滅多に失敗しないのに。
同じように感じている人もいたりして、そこは おま環 の問題ではないと思っています。
ざっくり端折りますが、引用スターが失敗しているときには、
リクエストパラメータには選択箇所が乗っかっているのに、スターの処理結果には引用した内容が入っていない
という状況になってます。
たまたま一週間くらい前からはてなスターをいじってて(*1)、いくつか分かったことがあります。
まず、一番目については、過去に運営からの正式回答があります。
hatenaidea 『現在はてなスターの引用機能では、関係のないコメントの送信などに使われることを防ぐために、元のウェブページに引用された文字列が含まれているかどうかのチェックを行っています。このチェックを行う際に、うまくウェブページにアクセスできなかったり、ちょっとした空白や改行の入り方などで、正確なチェックが完了しない場合などが考えられます。こうした場合には、引用がうまくできない場合があります。この原因とは別の原因であると思われる場合には、不具合の可能性がありますので、またご指摘を頂ければ幸いです。』 (2008-04-23 11:45:21)
はてなアイデア - 引用スターが失敗する原因を教えて欲しい。もう直せなんていわないから原因だけでも教えて欲しい。せめて納得だけでもしたい。
まあ、仕様ということでは仕方ありませぬ。
ぱこちさんの回答では、サイズ制限があるらしいということが書いてありますが、レスポンスが 300KB オーバの質問(昔はあった)でも引用スターができています。
ただ、ちょっと思ったのは gzip 圧縮がかかっていること。
昔から gzip 圧縮がかかっていたかどうかわかりませんが、テキストだと、かなり圧縮が効くのでサイズのことはあまり気にしなくて良さそうな感じがします。
多分、そのチェックというのは、文字単位でやっていると思われます。
「地雷」が引用スターに成功する場合には、「雷地」と順序を入れ替えても成功します。
また、サーバ側でチェックの対象にしているのは静的なコンテンツの部分だけです。
ページが表示されてから javascript で動的に作成されるコンテンツの文字は引用に失敗します。
ただ、よく分からないこともあります。
特定の文字列の引用スターに失敗するケースがある(参考1、参考2)のですが、ぼくが得られた知見の範囲では説明できません。
# ただ、回避方法を見つけてしまったので、しつこく突き詰める気があまりありません :-)
二番目の話。
特定のサイトでスターをつける場合に、どうやらセッションの寿命切れのようなことが起きているらしく、同じ URL でスターをつけようとした場合に、一発目は失敗するが、続けて同じ URL をリクエストすると引用に成功します。
何かしら一発目の方が処理をしてるらしいのは、処理時間にも表れます。
12:27:34.186 GET http://s.hatena.ne.jp/star.add.json [HTTP/1.1 200 OK 5609ms] 12:27:39.819 GET http://s.hatena.ne.jp/star.add.json [HTTP/1.1 200 OK 239ms]
人力検索への引用スターを連続して行ったときの処理時間です。
失敗する方は 5秒ほど待たされるのですが、成功するときには 0.2~0.3秒で応答が返ってきています。
「重たいときに失敗していることが多い」と感じている方がいるのは、これでしょう。
この現象は人力検索以外では、ガラケーでスターをつけるときのページ http://s.hatena.ne.jp/mobile/entry?uri= でも確認できています。
古めのサービスが駄目なのかもとか思ったりもしてますが、確認してません。
ちなみに、セッションの持続時間は 5分程度のようです。
セッションを持続させるトリガーはよく分かっていません。
スターを表示する情報を取得するのに s.hatena.ne.jp/entries.json というのがあるのですが、同じドメインにも限らずセッション接続にはならないようです。
はてなハイクでは、このセッションの持続時間が原因と思われる現象が出ません。
はてなハイクは、最新の投稿を定期的にロードする仕組みがあるのですが、もしかすると、それが関係しているのかもしれません。
三番目の話
絵文字は引用スター出来ないぽい🍄
http://h.hatena.ne.jp/aox/228179591492908893
まるっと引用できないわけではなくて、絵文字が化けた状態で引用が表示されます。
正確に言うと、「UTF-8 のサロゲートペアが正しく扱えていない」です。
これは、s.hatena.ne.jp が Nginx らしいことが影響していると思われます(参考)。
昔は、きっとはてなスターも Apache だったと思う(違う?)ので、割りと新しめの話ではないかなあと。
で、人力検索での引用スターに失敗するのを回避する方法についてです。
前述の 2 については、二度打ちしてください。
問題は、前述の 1 なんですが、どうやら、実際にコンテンツの内容を引用しているかどうかをチェックしているロジックでは、英数記号を除外しています(多分)。
HTML の世界には「文字参照」というのがあるのですが、そのひとつの「数値参照」というやつは「& + # + ; + 数字」で全ての文字を表すことができます。
手でやる場合には、以下のような手順でやります。
文字列を数値参照にするのは、Web上にサービスがあります。例えば、エンコードマニアックス とか。
エンコード結果の数値参照(10進数)のところを使います。
例えば、「地雷」の 2文字は、数値参照だと、こんな感じになります。
地雷
この方法を使うと、前述の 3 のサロゲートペアの問題も回避できたりします。
「引用スターに失敗した!」ってなってから、あらためてやるにはかなり面倒な手順なので、こういったことをまとめてやってくれるような仕組みを作りたくなるわけですが、世間にさらすまでには、もうちょっと時間が欲しいところ。
# 質問終了までには、間に合うかな?
手で回避するときに気をつけなければいけないのが、引用スターの文字数制限です。
引用スターは、200文字までという制限があります。
先ほどの10進数の数値参照は、ひとつの日本語が 8文字の英数記号になってしまうので、25文字までしか表現できません。
そんなことをいじくりまわしているうちに知ってしまった Tips を最後にいくつか。
*1:テストに使った投稿では、セルフスターでむごいことになってます
メタスターをつけた相手に気が付いてもらえるかどうかという、ものすごく微妙な感じが、遊んでる感じがして良いかなとか思います。
愉快で楽しいけれど、普段使いで使うかと言えば、使わなさそうです(^_^;;
id:a-kuma3 さんより回答リクエストをいただきました。せっかくなので回答させていただきます。
はてなスターはここ五年くらいろくにつけていなかったので、最初の引用スターが失敗する現象はごく最近になって知りました。
最近ブログでスターがらみの不具合がありまして、その時あたりに知りました。
不具合に対処する際、そろそろはてなさんとこでドキュメント用意してくれてたりしないかなと、わらすがり気分で検索したら、自分が昔回答した質問がそこここで引っ張り出されてるのを散見しました。
引用先の記事を見て、ふんわりした言葉で回答したので伝わりにくい部分もあったかなと省みました。今更ですが当時したことを思い出せる限り書いてみます。
そして回答からふんわり成分を取って箇条書きしたのがこちらになります。
Apache のログデータが残っていたので記事にして載せました。
私の持っている情報はこれくらいです。古い情報なので引用された他の方の記事なども併せてご覧ください。
以下はしゃっきりした検証データがなく、ほぼ私の妄想なので、適当に読み流してください。
====
以前人力検索はてなで脆弱性の報告をした際に、クリスさんが返信を下さいました。
pacochiさん
はてなスタッフのchris4403です。
XSSのご報告ありがとうございました。
こちらで確認したところ、サーバーのモジュールのバージョンが古いものがあり、そのサーバーで処理されるとエスケープされずに出力されてしまう事象でした。
先ほどサーバーのモジュールを更新したので、現在は発生しておりません。
「そのサーバー」ということは、人力検索は複数のサーバがあるということだと思います。
私はその時 exploit も書いて送っていたのですが、「何故か動作する時としない時がありました。」という文言も添えていたのを確認しました。ランダムにどれかのサーバに飛ばされて処理しているのでしょう。
スター不具合の原因は、それらのサーバ間でデータの同期が取れていない、もしくはリクエストがあったその時点でピンポイントに同期を取ろうとするものの、取り終わる前にリクエストがタイムアウトしてしまうことによるのではないかと思っています。
人力検索は、はてなの中でも URL とユーザの紐づけ規則が特殊なので、内部で結構複雑なキャッシュを持っているのではないかと推測しています。
引用スターをつける時にコメントが一部飛ばされているような挙動をしているのも、内部で同期が不完全なデータをもとに引用チェック用の HTML を生成しているのではないかと思いました。
引用スターとはちょっと違うのですが、gusted (はてなスターが見た目はついているのに相手に届かない現象、名前が分からないので勝手にこう呼びます) に関する考察を以前しました。
これも引用スターと根っこは同じで、データが同期されてないなどで準備が整っていないところにリクエストが来て、慌てて対処しようとするものの、時間切れでそのリクエスト中に完了できなかった結果なのではと思っています。
ちなみに guested になっても引用は問題なくできます。最初の一回は失敗するかもしれませんが、次回以降チェック用のキャッシュさえ取れていれば届け先がなくても引用は可能です。
ふと思い立って昔 guested になった回答にスターをつけてみたところ、通知が来るわ付けたスターのページでアイコンが自分になってるわでびっくりしました。
キャッシュが古いため、新しく取り直して、ついでに所有者情報の構築もし直したのではないかと思いました。最初にスターをつける時に例のごとく五秒くらいかかった末に引用失敗していたので、そんな感じがバリバリです。
ちなみにまだスターが一度もついていない回答に引用スターを三回答分ほどつけてみたところ、全て数秒待った後に引用成功しましたが、スターの通知が来ませんでした。☆レポートのページにも載りませんでした。付けたスターのページには載っています。
こちらはゼロから情報を構築したために挙動が違うのかなと思いました。付けたスターのページで確認したアイコンは私のものでしたが、なんとも guesty な感じですね。
あと、以前は引用できなかったフレーズが、今は引用できるようになっていました。以前は引用に使われる文字の順番をしっかりチェックしていたのが、いつの間にかチェックしなくなったっぽいのが関係していると考えています。
(2/22 追記: 回答した当時、私の表示名は「pacochi」だったので、「ぱ」の字が先頭 64kb よりも下のところでようやく出てくる状態でした。表示名が現在のものに変わったために引用できたとも言えますので、補足しておきます。ちなみに他の引用でも文字の順番は重視されなくなった感覚があります。)
クイズなどの誰かが頭を絞って作った謎も好きですが、はてなスターみたいな天然の謎もロマンがあって好きです。
いつか答え合わせができるといいなと思いますが、昨日はてなポイントを使うサービスをたたみ始めた気配をちょっと感じたので、そのままサービス終了して迷宮入りなんて結末も覚悟しないといけないなと思いました。
追記:
現在人力検索で複数の回答者が脚注記法を使うとどうなるのか知りたいのでそれだけ追記させてください。*1
(2/22 追々記: 悲しいままでした。)
*1:以前は ID がかぶって悲しいことになった覚えがあります。
> スターにも☆がつけられるのかと
a-kuma3さんからメタスターを紹介していただきました。面白いですね、これ。
「あなたの返信(引用スター(はてな…)」みたいにならなくて、いきなりタイトル (質問文冒頭) になるんですね。
回答だと「あなたの回答(引用スター(はてな…)」になってるんですけどね。はてなが文面のテンプレートを設定し忘れているのでしょうか。
それにしても絶妙な省略され具合ですね。
「メタスター」ははてなのシステムそのままではスターにスターがつけられないので (スターはパーマリンクのある場所にしかつけられず、スターのパーマリンクは存在しないため)、疑似的にスターにパーマリンクを用意して、そこにつけています。
はてなブラックスターなんかと同じで、いちユーザが勝手に設定しているものなので、よそで使うときょとんとされちゃうと思います。
あくまでお遊びなので、分かる人・分かち合える人同士で楽しく使ってくださいね。
> スターにも☆がつけられるのかと
2017/02/21 15:26:51a-kuma3さんからメタスターを紹介していただきました。面白いですね、これ。
「あなたの返信(引用スター(はてな…)」みたいにならなくて、いきなりタイトル (質問文冒頭) になるんですね。
2017/02/21 16:04:40回答だと「あなたの回答(引用スター(はてな…)」になってるんですけどね。はてなが文面のテンプレートを設定し忘れているのでしょうか。
それにしても絶妙な省略され具合ですね。
「メタスター」ははてなのシステムそのままではスターにスターがつけられないので (スターはパーマリンクのある場所にしかつけられず、スターのパーマリンクは存在しないため)、疑似的にスターにパーマリンクを用意して、そこにつけています。
はてなブラックスターなんかと同じで、いちユーザが勝手に設定しているものなので、よそで使うときょとんとされちゃうと思います。
あくまでお遊びなので、分かる人・分かち合える人同士で楽しく使ってくださいね。