フォトライフの画像は割と丸見え
question:1332381053 での回答コメントに関する補足です。
補足の前に前置きから。
フォトライフの認証周りはとってもカジュアルなつくりになっているため、公開範囲を狭めに設定したフォトライフ画像でも、画像 URL (http://〜.png など) を直接開けば誰でも閲覧可能な状態になっています。
加えて、画像表示ページ (http://f.hatena.ne.jp/pacochi/20120324195100 など) から画像 URL を推測することも容易に可能です。
たとえば、http://f.hatena.ne.jp/pacochi/20120324195100 なら、http://f.hatena.ne.jp/images/fotolife/p/pacochi/20120324/20120324195100.png になります。
細かく分けて説明するとこんな感じです。
http://f.hatena.ne.jp/ | images/fotolife/ | p/ | pacochi/ | 20120324/ | 20120324195100 | .png |
現在フォトライフで表示される画像のドメインは cdn-ak.f.st-hatena.com ですが、f.hatena.ne.jp でも同じ画像が表示されます。 | はてな ID の一文字目 | はてな ID | 画像 ID の先頭から八文字分 | 画像 ID | .jpg, .png, gif のどれかです。勘で探ります。.jpg の場合、本体 (.flv) が存在する可能性もあります。 |
また、上記のような URL をぽちぽち打たなくても、自分のダイアリーの記事を書くページを開いて、以下のように加工した文字を貼り付けて、「確認する」ボタンを押してプレビューすれば、さっくり閲覧できます。
[f:id:pacochi:20120324195100p:image] [f:id:pacochi:20120324195100j:image] [f:id:pacochi:20120324195100g:image] [f:id:pacochi:20120324195100f:movie]
四行のうちどれかが展開されて、画像もしくは動画が表示されるはずです。ちなみに [f:id:pacochi:20120324195100f:movie] が展開される場合、 [f:id:pacochi:20120324195100f:image] で画像ファイルが出てきます。 (今回の例では出てきません。)
ダイアリーを開設していなくても、フォトライフ記法が展開されるところならどこでも可能です。
そんな感じなので、フォトライフに正真正銘ひみつ画像を置くと後で恥ずかしいことになるかもしれません。
その辺の恥ずかしさはさておき、ここからが本題です。私が数日前に書いた以下のコメントについてです。
フォトライフのトップから辿れないよう非公開フォルダに回答画像を置いていて、3月26日 10:50 の少し前くらいに別フォルダに移そうと考えているので、実は忘れてちゃいけないんですけどね。
http://q.hatena.ne.jp/1332381053#ac21249
前置きの通り、非公開フォルダに入れてもフォトライフ記法や個別ページを伝えた時点で見ようと思えば見ることができる状態になるので、実のとこフォルダ移動なんて忘れてても平気だったりします。
しかし、これも前置きの通り、そのままだと閲覧の手間が微妙にかかるので (そしてその辺の仕組みを知らない人はお手上げ状態になってしまうので)、皆様の手を煩わせるつもりはないよ、という意味で「忘れてちゃいけない」と発言しました。
が、これだと「非公開フォルダに画像を置いておけば、表示ページの URL やフォトライフ記法が知られても見られちゃうことはないんだ、安心だね」という誤解を与えかねないことに気付いたので、このエントリを書きました。
若干繰り返しになりますが、フォトライフは色々と油断ならないので、公開範囲を設定したからといって安心せず慎重に使って下さい。
せっかくこの辺に触れたので、似たような事例のこともおまけで書いておきます。
はてなダイアリーで「Twitter上でのツイートまとめを定期的にブログに投稿」する設定にしているアカウントのツイートは、ID や URL が分かれば、 twitter 上で鍵付きだろうとダイアリーがプライベートモードだろうとお構いなしに見ることができます。
フォトライフの時と同じように、twitter 記法が有効なところでプレビューするだけです。
[twitter:171084712608145408:detail]
私のはてなダイアリーも twitter のアカウントもプライベートモードですが、上記のような指定であっさり発言が出てきます。
PS3 ブラウザの UA、"Mozilla/5.0 (PLAYSTATION 3; 1.00)" だったのが "Mozilla/5.0 (PLAYSTATION 3 4.11) AppleWebKit/531.22.8 (KHTML, like Gecko)" になってた。
2012-02-19 13:12:28 via web
あともうちょいおまけで書きますが、hatena code petit はその辺を活用したショートカットをしても最終解答に辿り着けないようになっています。
フォトライフ + なぞなぞ認証を使った問題を出す際は、この問題のようになぞなぞ認証のフレーズを再利用するか、画像表示ページのタイトル欄も併せて見ないと分からないような画像にした方が堅実だと思います。
HideMyAnswer で隠された回答を見るユーザスクリプト 1.2
1.1 からのバージョンアップです。コメント欄に書かれた回答も見るようにしました。
Firefox 用アドオンができるまで個人的に使うつもりのつなぎをご近所さんにおすそ分けしてるような気持ちなので、どっかに登録したりずっと更新し続けたりはしないと思います。
// ==UserScript== // @id ShowOurAnswer // @name ShowOurAnswer // @version 1.2 // @namespace id:pacochi // @author pacochi // @description HideMyAnswer を見るだけ // @include http://q.hatena.ne.jp/* // @run-at document-end // ==/UserScript== (function() { if (!document.URL.match(/q\.hatena\.ne\.jp\/\d+(#|$)/)) return; var url = 'http://hidemyans.appspot.com/getAnswer'; var hma = {}; var pick = function(ansXpath, timeXpath) { var ans = document.evaluate(ansXpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for(var i = 0; i < ans.snapshotLength; i++) { var ap = ans.snapshotItem(i); if(ap.nodeType == 3 && ap.nodeValue.match(/HideMyAnswer:(\d{13})/)) { var id = RegExp.$1; var timestamp = document.evaluate(timeXpath, ap, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); var atime = Date.parse(timestamp.singleNodeValue.nodeValue); // 早く回答した方だけ変換 if (typeof(hma[id]) == 'undefined' || hma[id].atime > atime) hma[id] = { atime: atime, ap: ap }; } } }; var req = function(id) { GM_xmlhttpRequest({ method: 'POST', headers: { 'Content-type': 'application/x-www-form-urlencoded' }, url: url, data: 'hidemyansid=' + id, onload: function(res) { var txt = document.createElement('span'); txt.style.cssText = 'display:block; padding:1em; border:1px solid #F6AC5A;'; var lines = res.responseText.split('\n'); for (var i = 0; i < lines.length; i++) { if (i > 0) txt.appendChild(document.createElement('br')); txt.appendChild(document.createTextNode(lines[i])); } hma[id].ap.parentNode.insertBefore(txt, hma[id].ap); } }); }; // 回答欄 pick("id('read_answer_list')//div[@class='answer-detail clearfix']/div[@class='section clearfix']/p/text()", "ancestor::div[@class='answer' or @class='answer reply_content']/h3/span[@class='timestamp']/a/text()"); // 回答コメント欄 pick("id('read_answer_list')//div[@class='answer-comment-detail']/div[@class='section']/p/text()", "ancestor::div[@class='section']/span[@class='timestamp']/text()"); // 質問コメント欄 pick("id('comment-section')//div[@class='comment-content clearfix']/text()", "ancestor::li/div/span[@class='comment-time']/a/text()"); for(var id in hma) req(id); })();
HideMyAnswer で隠された回答を見るユーザスクリプト 1.1
Hide My Answer (question:1331264191 や question:1331284462 などで使われているサービス) の回答を、今メインで使っているブラウザでさっくり見たかったのですが、Firefox 用のアドオンなどはまだ開発されていないみたいなので、自分でちまちまユーザスクリプトを書きました。
// ==UserScript== // @id ShowOurAnswer // @name ShowOurAnswer // @version 1.1 // @namespace id:pacochi // @author pacochi // @description HideMyAnswer を見るだけ // @include http://q.hatena.ne.jp/* // @run-at document-end // ==/UserScript== (function() { if (!document.URL.match(/q\.hatena\.ne\.jp\/\d+(#|$)/)) return; var url = 'http://hidemyans.appspot.com/getAnswer'; var req = function(id) { GM_xmlhttpRequest({ method: 'POST', headers: { 'Content-type': 'application/x-www-form-urlencoded' }, url: url, data: 'hidemyansid=' + id, onload: function(res) { var txt = document.createElement('span'); txt.style.cssText = 'display:block; padding:1em; border:1px solid #F6AC5A;'; /* みんな適度に改行するタイプならこれでもいいと思う txt.style.cssText = 'display:block; padding:1em; border:1px solid #F6AC5A; white-space:pre;'; txt.appendChild(document.createTextNode(res.responseText)); */ var lines = res.responseText.split('\n'); for (var i = 0; i < lines.length; i++) { if (i > 0) txt.appendChild(document.createElement('br')); txt.appendChild(document.createTextNode(lines[i])); } hma[id].ap.parentNode.insertBefore(txt, hma[id].ap); } }); }; var ans = document.evaluate("//div[@class='section clearfix' and starts-with(@id, 'answer-formatted-body-')]/p/text()", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var hma = {}; for (var i = 0; i < ans.snapshotLength; i++) { var ap = ans.snapshotItem(i); // Node.TEXT_NODE って書いたら undefined になった if(ap.nodeType == 3 && ap.nodeValue.match(/HideMyAnswer:(\d{13})/)) { var id = RegExp.$1; // 数日前まで書かれてた「reply_content」が質問によっては消えてたのを確認 (20120316) //var name = document.evaluate("ancestor::div[@class='answer reply_content']/h3/span[@class='timestamp']/a/@name", var name = document.evaluate("ancestor::div[@class='answer' or @class='answer reply_content']/h3/span[@class='timestamp']/a/@name", ap, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var aid = parseInt(name.nodeValue.substr(1), 10); // 早く回答した方だけ変換 if (typeof(hma[id]) == 'undefined' || hma[id].aid > aid) hma[id] = { aid: aid, ap: ap }; } } for (var id in hma) req(id); })();
Scriptish でしか確認してないので、他のやつだと動かないかもしれません。
以下追記です。
回答周辺のクラス名が変更されていたので修正しました。
回答欄の他に、回答コメント欄と質問コメント欄も変換する版 (ver 1.2)を書きました。
思い出しお菓子
書くパッションがはじけたものの、どこに書けば良いのか迷ったので日記に書きます。
question:1321531839 のコメントでこういう質問があったことを知りました。
青森県津軽半島で、お取り寄せのできる、
スイーツ・お菓子・お土産を探しています。
※お酒のおつまみになりそうなものは、別に質問していますのでここでは要りません。
津軽半島周辺ならではのものを教えてください。
変わった珍しいものなどあると嬉しいです。
限定キティちゃんまんじゅうなど、
地域が限定でも商品自体がどこにでもあるものは除きます。
よろしくお願いします!
真っ先に地元のケーキ屋さんのアップルパイを思い出したのですが、公式サイトに行ったらトップにピンポイントで通販休止中のお知らせが出ていました。
テレビで紹介されて生産が追いつかなくなったみたいです。
はじめ質問のコメント欄に書いちゃうつもりでしたが、通販できないとなると質問文の要件を満たしていないことになるので、そんな有用じゃない情報を今更数年前の質問にわざわざ書くのはどうなんだろうと思い、コメントは控えました。
ここのケーキ屋さん、観光客の方向けにお土産も売っていますが、地元の人が自分用、家族用、お客様用などで買い求める事の方が多い感じのお店なので、より「地元の味」という感じがします。*1
商品名を書きそびれていましたが、「気になるリンゴ」という名前です。りんごが丸ごと一個使われている、素朴なのにゴージャスなパイです。数年前に食べたのですが、箱がかわいかったので取っておいて小物入れとして使っています。
(顔は私が描き加えました。)
他の商品では「いのち」がおすすめです。おいしいです。
*1:観光客はよく買って食べるけど地元の人は全然食べないお菓子って結構あるみたいです。
くいくら
※先日、人力検索でこのサイトの URL を載せた質問が非公開になりました。復号化のためにサイトは残しておきますが、新規で利用するのは避けた方が良いかと思われます。
以下の文は、ちょっと情報が古いものとしてお読み下さい。
くいくらという、人力検索はてなでのクイズ回答に特化した暗号化サイトを作ってみました。
そして試しにいっこ質問してみました。
【かんたんクイズ】
http://hateco0x.g.hatena.ne.jp/pacochi/20100911
上記 URL で、ナンバー 00 として扱われている URL (謎解きのスタート地点) を、下記【答え方】に則ってお答え下さい。
【答え方】
1. 回答をテキストエディタか何かに書き留めて下さい。
2. http://hen.acho.co/quiz_crypt/?hatenaid=pacochi に行って、その回答を貼り付けて変換して下さい。
3. 変換結果を回答欄に貼り付けて下さい。
色々とドキドキです。
以下追記です。
質問は非公開にされることなく終了しました。
終了した質問が非公開にされることは少ないみたいなので、多分この質問もずっと残るのではないでしょうか。
question:1314457501 のような質問が非公開にされない中、question:1315058272 や question:1315289852 のような質問がどどんと非公開になったので、クイズ質問だけ厳しく取り締まるような感じになったのかなと思い、それを確かめるためにしてみた質問でした。
根っからのあがり症なのと、普段こういう尖り気味の事はせずに暮らしているのとで、それはもうドキドキものでした。
ところがどっこい蓋を開けてみたら円満終了、同時期に出題された他のクイズ質問も無事終了し、どうもクイズだからという訳ではなかったようで、私の被害妄想と自意識過剰が出玉大サービスになっただけという、何ともほっとしたようなこっぱずかしいような結果になりました。
質問にお付き合い下さった方々、それから hatena code 0X に参加して下さった方々、ありがとうございました。
(何かただの hatena code 0X の宣伝みたいになっちゃってたところもこっぱずかしポイントだったりしますが…。)
何はともあれ非公開にはならなかったようなので、くいくらも残しておきます。(元から残しておくつもりでしたが、放置するかしないかの気持ちの違いです。)
使いたい方がいらしたら、使っていただいて構いません。
ただ、私が非公開にされなかったからといって、必ずしも非公開にされないとも限りませんので、その辺はご注意下さい。
使い方はページに書かれていますが、以下にちょろっと補足します。
出題前に確認する事
まず、ログインできるか確認します。
ログインできたら、http://hen.acho.co/quiz_crypt/?hatenaid=【自分のはてな ID】にアクセスします。
自分のはてな ID が入力されていたら、URL をどこかに書き留めておきます。
書き留めたら、回答文入力欄に何か文章を打って、暗号化ボタンを押します。
送信結果が出てきたら、その送信結果を回答文入力欄に貼り付けて、復号化ボタンを押します。
送信結果にさっき打った文章が出てきたら、テストは終わりです。
「【さっき書き留めた URL】に行って、回答を変換してから答えて下さい」という旨を質問文やコメントに書いて下さい。可能であれば「元の文章を保存しておいて下さい」という旨も書いて下さい。
回答者さんが元の文章を保存する意味
他の人には何を書いたか分からない状態になるので、書いたことの捏造を防ぐために、同じ文章を同じはてな ID 宛に暗号化した場合、だれが暗号化しても同じになるような方式を採用しました。
質問者さんが文章を貼り付けなかったり、回答内容と違うことを貼り付けたりした場合は、コメント欄などに元の文章を貼り付けると、第三者の方が同じ文章を暗号化して、回答欄の暗号文と同じ文字列になることを確認する事ができるようになります。
回答文を書く時の注意
文章の最初や最後にある改行やスペースは取り除かれます。
行ごとではなく、文章全体の最初と最後のみそうなります。
最初の行に「*********」のような飾り文字を入れて、変な表示にならないようスペースを行頭に置いたとしても、復号化した文を貼り付けるとスペースが取り除かれて変な表示になりますので、ご注意下さい。
いわゆる「全角スペース」(「 」) なら取り除かれません。
以下さらに追記です。
気付いた事があればこの日記のコメント欄を利用してもらおうと思っていたのですが、日記を書く時だけプラスに入っている関係で、時々コメント欄がふさがっていたりする事を思い出しました。
コメント欄が使えない時は、はてなの右上で通知される「お知らせ」に届く形でメッセージを発信するか、ブログ情報のページにあるメール宛にご連絡下さい。
ぐっぱのメロディー
question:1313802675 に答えようと思い、リニューアル後からひそかに使えるようになっていた (ただしプレイヤーはリンク切れ) mml 記法がそろそろちゃんと使えるようになったかなと試してみたら、ただのスーパー pre 記法扱いになっていて拍子抜けしたので、結局答えませんでした。
せっかく書いたので、ダイアリーに書いておきます。こんな感じの掛け声でした。
- ぐーっ、ぱっ
v8 o5 l8 @2 @'U'd16&d&>b&<dr@'A'f16
- ぐっぱじゃーんけーんぽん
v8 o5 l8 @2 @'U'd+32&er@'A'>a+@'A'b32&<c4@'U'>a+@'E'b32&<c4@'U'>a+@'O'<c+&>a32