ついっぷるでツイートするためのブックマークレット
私のブログにもあるが、最近では多くのサイトにそのサイトについてTwitterでツイートするためのリンクが用意されている。しかし、リンクが用意されてないサイトもあり、そのために【共有ブックマークレット】が用意されている。この「Share on Twitter」というリンクをFirefoxならブックマークツールバーに、Internet Explorer(IE)なら「お気に入りバー」に設置し、例えば私のブログを見ている状態でクリックすると、「リンクをあなたのフォロワーに共有する」と書いてある下の入力欄に「正己の異論・反論:So-net blog http://self.blog.so-net.ne.jp/」と入力されたウィンドウが開く。前半が見ているサイトのtitleで、後半が見ているサイトのURLである。ここで、そのままか文章を追加してから「ツイート」ボタンをクリックするとTwitterに投稿できる。
「共有ブックマークレット」は便利だと思うが、私は自動的に入力されている文字列が「title URL」だけであることが不満で、「→【title】 URL」となるように、自分でブックマークレットを作った。それは最終的には次のリンクになった。
上のブックマークレットは私の環境では問題なく動作しているようだが、他の人の環境で動作するか分からないし、私の環境でも今後は分からない。そもそも「→【title】 URL」という形の自動入力は私の好みだから、他の人は【共有ブックマークレット】の方を使った方が良いだろう。
実は、上のブックマークレットを作ったのは今日で、以前は別のJavascriptだった。Twitterを使ってツイートする場合は古いブックマークレットでも問題なかったのだが、ついっぷるでツイートするためのブックマークレットで問題が生じたので、それに合わせてTwitterでツイートするブックマークレットの方も修正した。
【共有ブックマークレット】を使って【内閣 (日本) - Wikipedia】のページを試してほしい。入力欄に次のように入力されているだろう。
この状態で「ツイート」ボタンをクリックすればURLは自動的に短縮URL「t.co」に変換される(参照)。その短縮URLで【内閣 (日本) - Wikipedia】にジャンプする。
しかし、ついっぷるの入力欄に上記のように入力されていて「URL短縮」がチェックされた状態でツイートすると例えば次のようにbit.lyで短縮される(参照)。
"("から後ろをURLの一部とみなさずに短縮したようである。この現象は2010年7月18日に気づいて(参照)2010年9月19日に報告して(参照)2010年10月4日に要望を出した(参照)のだが修正される気配がない。仕方ないのでユーザーが対処するしかない。
例えば、【内閣 (日本) - Wikipedia】については入力欄に次のように入力されていれば良い。
"("が"%28"に、")"が"%29"にエンコードされている。Firefoxではアドレスバーからコピーすればエンコードされて張り付けられるようになるが、できればブックマークレットをクリックして自動的に入力されるようにしたい。しかし、【共有ブックマークレット】を使った結果と同様に、通常は"("や")"はエンコードされない。JavascriptではencodeURIComponent()を使ってエンコードする方法が一般的だが、それでは"("や")"はエンコードされない。Googleで検索して次のような情報を見つけた。
If one wishes to be more stringent in adhering to RFC 3986 (which reserves !, ', (, ), and *), even though these characters have no formalized URI delimiting uses, the following can be safely used:
function fixedEncodeURIComponent (str) {(encodeURIComponent - MDN)
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
replace(/\)/g, '%29').replace(/\*/g, '%2A');
}
要するに、encodeURIComponent()でエンコードした後に"("や")"などを"%28"や"%29"などに置換すれば良いらしい。
まずは、JSActionsのスクリプトで試した。しかし、"("や")"は"("や")"のままで"%28"や"%29"と表示されない。試行錯誤の末に「"("や")"はreplaceで"%28"や"%29"に置換されてはいるがアドレバーに表示された時にデコードされて"("や")"に戻ってしまう」ということに気づいた。そこで、JSActionsのスクリプトでは"("や")"をreplaceで"%2528"や"%2529"に置換して、ようやくついっぷるの入力欄に例えば次のように自動的に入力されるスクリプトを作ることができた。
JSActionsのスクリプトを利用してブックマークレットも簡単に作れるかと思ったのだが、"("や")"を"%2528"や"%2529"に置換するだけではダメで、"%252528"や"%252529"に置換しなければいけないらしい。そんな試行錯誤の結果、ようやく、ついっぷるでツイートするためのブックマークレットを作ることができた。
私が利用するのはFirefoxだが、ブログに書くのでIE8用も作ってみた。全角文字の扱い方がFirefoxとIE8とで異なるので戸惑ったが、とりあえず作ってみた。バグがあったら修正する予定である。
A4やB5の紙の長辺を3等分する方法の確認の補足
【A4やB5の紙の長辺を3等分する方法の確認】で私は次のように書いた。
重要なのはEの位置である。頂点Dを対辺BCの中点Qに合わせるように折り曲げたら、折れ線と長辺ADの接点Eが偶然ADの1/4の位置になったかのようである。これは「長辺で半分に折り曲げた後の短辺と長辺の比が折り曲げる前の短辺と長辺の比に等しい」という紙の寸法の規格(参照)により生じたものらしい。
(A4やB5の紙の長辺を3等分する方法の確認)
「Eの位置」とは次の図のEの位置である。
このEの位置がADの1/4の位置になることは証明できる。ただし、引用文のように「長辺で半分に折り曲げた後の短辺と長辺の比が折り曲げる前の短辺と長辺の比に等しい」すなわち「長辺が短辺の
倍である」という条件の下である。
下の図のように座標を用いることで容易に証明できる。
長辺が短辺の1/aの紙(短辺が長辺のa倍の紙)を長方形ABCDとし、各頂点の座標をA(0,1)、B(a,1)、C(a,0)、D(0,0)とする。線分ADの中点はP(0,1/2)、線分BCの中点はQ(a,1/2)である。DとQを重ねるように折り曲げた時の折れ線は線分EFで、Eのy座標をbとする。a=
の時に b=3/4 になることを証明すれば良い。
直線EFの方程式②は直線DQ(方程式は①)と直角に交わることから傾きが分かり、線分DQの中点S(a/2,1/4)を通ることで求められるので、bは次のようになることがすぐに分かる。
![]()
aに
を代入すれば、b=3/4 になる。逆に b=3/4 になるのは a=
、すなわち長辺が短辺の
倍の場合だけである。
次にDをQに重ねることでPが移ったRのy座標が2/3になるためのaの値を確認する。
線分EDが移った線分EQを通る直線の方程式③はE(0,b)、Q(a,1/2)を通ることから求められる。直線PRの方程式④は直線DQと傾きが同じでP(0,1/2)を通ることから求められる。Rの座標は直線EQと直線PRの交点だから「③=④」から求められ、次のようになる。

aに
を代入すればRのy座標が2/3になることが分かり、逆にRのy座標が2/3になるのは a=
、すなわち長辺が短辺の
倍の場合だけであることが分かる。NHKEテレの「すイエんサー」という番組で4月に「定規もな~んにも使わずに、手紙をピッタリ3等分にしたい」というタイトルで紹介された芳賀の定理を応用してA4やB5の紙を三つ折りにする方法は、A4やB5の紙が「長辺が短辺の
倍である」という条件を満たしていたから使えたもので、その条件を満たしていなければ使えないことが証明できた。
【A4やB5の紙の長辺を3等分する方法の確認】ではRの場所を求める別の方法も紹介した。
こちらも座標を用いることでRのy座標が2/3であることを容易に証明できる。
線分DQで折り曲げてCが移った位置Rの座標を求める。
直線CRの方程式②は直線DQ(方程式は①)と直角に交わることから傾きが分かり、C(a,0)を通ることから方程式が求められる。ちなみに、a=
での直線CRのy切片bは1になり、Aと重なる。
直線CRと直線DQの交点Sの座標は「①=②」から求められ、次のようになる。

Rの座標はSが線分RCの中点であることを利用して求められ、次のようになる。

芳賀の定理を応用する方法と同じ結果である。
a=
、すなわち長辺が短辺の
倍ならば、Rのy座標は2/3になり、三つ折りの目安にできる。
A4やB5の紙の長辺を3等分する方法の確認
NHKEテレの「すイエんサー」という番組で4月に「定規もな~んにも使わずに、手紙をピッタリ3等分にしたい」というタイトルで、A4やB5など日本で使われる一般的な規格の紙の長辺を三つ折りにするテクニックが紹介されていた(参照)。定型郵便の封筒に手紙を入れる時に困っていたので助かった。紹介された方法は公式のサイトにはないが、ブログに記録してくれている人がいる。例えば、『すイエんサーの「定規を使わずに手紙をピッタリ3等分に折る方法」 - お気に入り』。四つ折りにした紙の一つを無視して3等分のための定規を作る方法は何等分にする場合にも応用できて頻繁に使いそうである。理屈は簡単で、三角形の底辺に平行に高さを3等分する線を引けば、その線は斜辺も3等分するので、三つ折りしたい紙の長辺を斜辺にすれば3等分する場所が分かる仕組みである。私は番組を見た後、一番最後に紹介された長辺を3重に丸めて端と端を合わせて印を付ける方法を利用していた。しかし、本当は芳賀の定理を使う方法を利用したかった。利用しなかったのは覚えられなかったからである。説明されても、何故3等分されるか分からなかった。考えずに横着していたからだが、先日、A4の紙が入った封筒が届き、捨てる前に、ふと3等分したくなった。インターネットで調べたら芳賀の定理を使う方法が載っていて、試したら、確かに3等分される。今度は横着せずに、何故3等分されるのか考えてみた。
すイエんサーで紹介されていたのは次の図のような方法である。
長方形ABCDの頂点Dを対辺BCの中点Qに合わせるように折り曲げて、反対の辺ADの中点Pが移動した場所Rの所で折り曲げれば、あるいは底辺DCがRの所に来るように折り曲げれば、綺麗に長辺AD、BCを3等分できる。上の図でRHが長辺AD、BCの1/3になる。
この方法で3等分できる理由を一所懸命考えた結果、芳賀の定理との関連は分からないが、次のようなことだろうと理解した。
計算した結果は後で書くが、頂点Dを対辺BCの中点Qに合わせた場合の折れ線EFのE(長辺AD側)はAPの中点、すなわち、AEは長辺ADの1/4になるらしい。するとEPはEDの1/3になる。3等分するための定規が作られ、DとQを合わせたことで、EDを移したEQにより、短辺ABを3等分する場所が分かるようになる。また、この定規はEQを対角線とする長方形の短辺EPを3等分する場所も分かる。上の図のGRはPQの1/3であり、EGはEPの1/3である。EPが紙の長辺ADの1/4だから、EGは1/12となる。これに、長辺ADの1/4であるAEを足して、AGは1/3になる。
この方法は、1/3と1/4の差1/12を作るために編み出された方法だろうか。一言で言えば、4等分から3等分を作る方法である。重要なのはEの位置である。頂点Dを対辺BCの中点Qに合わせるように折り曲げたら、折れ線と長辺ADの接点Eが偶然ADの1/4の位置になったかのようである。これは「長辺で半分に折り曲げた後の短辺と長辺の比が折り曲げる前の短辺と長辺の比に等しい」という紙の寸法の規格(参照)により生じたものらしい。だから、どんな寸法の紙でも可能なわけではないので注意が必要である。
次の図は計算結果をまとめたものである。
DSの長さは計算できるので、直角三角形DSEが直角三角形DPQと相似であることを利用して直角三角形DSEの斜辺DEの長さを求めた。DEが3/4となり、AEが1/4であることを確認できた。次にERがEPを移したものであるため長さが分かるので、直角三角形EGRが直角三角形EPQと相似であることを利用してEGの長さを求め、1/12であることを確認した。これで上記のように、AG、すなわちADの中点Pが移ったRの位置の短辺ABからの距離RHが1/3であることを確認した。
実は、上のように解く前に、別の方法でも解いていた。次の図のような解き方である。
まずはEの位置の確認である。これは上記と同じように直角三角形DSEが直角三角形DPQと相似であることを利用した。次に直角三角形GRPが直角三角形PQDと相似であることを利用してPGの長さを求めた。直角三角形GRPの斜辺PRを求めるために二等辺三角形EPRが二等辺三角形EDQと相似で辺が1/3であることを利用した。PGが1/6と分かったので、1/2であるDPと足してDGは2/3、すなわちADの中点Pが移ったRの位置の短辺DCからの距離が2/3で、短辺ABからの距離RHが1/3であることを確認した。
上記のように、すイエんサーで紹介されていた方法でA4の紙の長辺をぴったり3等分できることを確認した後に、もっと簡単に折り目の目安となるRの位置を見つける方法はないものかと、紙をいろいろと折っているうちに、別の方法を見つけた。すイエんサーの補足で紹介されたような気もするが、次の図のような方法である。
長方形ABCDの頂点Dと対辺BCの中点Qを結ぶ線で折り曲げた時に、頂点Cの移動した点Rが、長辺を3等分するための目印となることが分かった。この方法はすイエんサーで紹介されていた方法と比べて、DQの所に折り目が付きやすく、折り目が付かないように慎重に曲げるとRの位置が少しずれる欠点があるが、覚えやすく簡単なので、今後は利用するかもしれない。
この方法で正しいことは、次の図のように確認した。
直角三角形CDQと直角三角形SCQと直角三角形FCRが相似であることを利用して、Rの短辺DCからの距離CFを求めて、Rの短辺ABからの距離BFが1/3であることを確認した。
以上が、NHKEテレの「すイエんサー」という番組で紹介された「手紙を超ピッタリ三つ折りにする方法」について、正しいかどうか計算して確認した結果である。もっと簡単に証明できないか探している間に、丸一日が過ぎてしまった。私の能力の劣化を感じたが、楽しませてもらった。図を作成している最中に、どの三角形を使ったら良いか試行錯誤して何度も修正したので、修正し忘れて誤りがあるかもしれない。見つけた方は教えていただきたい。ところで、芳賀の定理との関連については、疲れたので考察しないことにする。
得票数の推移を見ながらの二者択一ギャンブル-2
以前に【得票数の推移を見ながらの二者択一ギャンブル】を書いた。そこでは「1枚100円の投票券が1000枚ある」と投票権の数が限られていた。それを1000人が好きな票数だけ投票できる設定に変えたらどうなるか、気になったのでシミュレーションしてみた。同じ人が何度投票してもかまわないが、延べ人数が1000人に達した時に終了する。得票数は、各自の投票数の合計になるが、一度に一票以上なので確実に1000票以上になる。
今回も、次の投票者がそれまでの得票状況を見て同調することを考慮する。ただし、同調率を決める式は【得票数の推移を見ながらの二者択一ギャンブル】と同じにはできない。その同調率の決め方で悩み、結局は妥当な決め方を思いつかなかった。しかし、せっかく時間をかけて考察したので、ここに記録を残しておくことにする。
ゲームのルールは次のようなものである。
- ある意見に対する賛否を投票する。
- 一人何票でも何回でも投票できる。
- 投票される度に賛成票と反対票の得票数が公開される。
- プレーヤーは公開された得票数を見てから投票できる。
- 投票者の延べ人数が1000人に達したらゲームは終わる。
- ゲーム終了時に自分の投票した側の得票数の方が多ければ勝ちで少なければ負けである。
- 「最終的な得票数の差-投票時の得票数の差」が投票者の得点となる。
例えば、自分が投票した直後の得票数の差が-50(50票負けている状態)で最終的には+600票の差を付けて勝った場合の得点は(600-(-50))=+650点となる。
自分が投票した直後の得票数の差が+100(100票勝っている状態)で最終的には勝っても+10票の差にしかならなかった場合の得点は(10-(+100))=-90点となる。
負けた場合は、例えば、自分が投票した直後の得票数の差が+100(100票勝っている状態)で最終的な得票数の差が-200(200票負けている状態)の場合の得点は(-200-(+100))=-300点となる。
自分が投票した直後の得票数の差が-50(50票負けている状態)で最終的な得票数の差が-5(5票負けている状態)の場合の得点は(-5-(-50))=+45点となる。
すなわち、投票時に勝っていた場合は、票差が広がって終わればプラスの得点だが最終的に負けたり票差が縮まるとマイナスになる。逆に、投票時に負けていた場合は、最終的に勝ったり票差が縮まればプラスの得点になる。票差が広がればマイナスである。
このゲームでも、鍵を握るのは例えば100票を投票するような大口プレーヤーである。誰もが多数派に投票したいので公開されている得票数で多い方に投票する傾向がある。大口プレーヤーの投票が多数派を形成すれば、大口プレーヤーに同調して投票するだろう。問題は大口プレーヤの投票でも逆転できずに小数派のままだった場合である。例えば、大口プレーヤーの投票に多数のプレーヤーが同調して得票差がさらに広がった後に別の大口プレーヤーが先の大口プレーヤーと同数の逆の投票をしても、票差を縮めることはできるが逆転はできないことがある。しかし、票差は縮まったし、大口プレーヤーに同調する別の大口プレーヤーが現れて逆転できるかもしれない。大口プレーヤーが何らかの裏情報を基に投票していたとしたら、後から投票した方は先に投票した大口プレーヤーの知らなかった情報を手にして逆に投票したのかもしれない。そうすると、その後に別の大口プレーヤーも続く可能性があリ、逆転する可能性がある。そう考えると、勝っている大口プレーヤーと負けている大口プレーヤーのどちらに同調するべきか。それが難しい問題である。
とりあえず、このシミュレーションでは同調率を次のように決めた。
- 得票数の差=賛成票-反対票
- 変動1=投票後の得票数の差-投票前の得票数の差
- 変動2=投票前の変動1
- 変動3=投票前の変動2
- 変動4=投票前の変動3
- 変動5=投票前の変動4
- 賛成が同調される確率
=0.5+得票数の差×重みw_diff+変動1×重みw_m1
+変動2×重みw_m2+変動3×重みw_m3+変動4×重みw_m4+変動5×重みw_m5 - 反対が同調される確率
=0.5-得票数の差×重みw_diff-変動1×重みw_m1
-変動2×重みw_m2-変動3×重みw_m3-変動4×重みw_m4-変動5×重みw_m5 - 賛成が同調される確率+反対が同調される確率=1
- (注:計算式が0以下になる場合は0に、1以上になる場合は1とする。)
変動1~変動5まで用意したのは、大口プレーヤーの投票を見て同調するのは次のプレーヤーだけではないからである。本当は、ずっと後のプレーヤーの投票にも影響を与えたかったが、大きく変化した票差(得票数の差)を考慮することで同時に大口プレーヤーの投票も考慮しているとみなして、用意したのは変動5までにした。
大口プレーヤーの投票の直後に別の大口プレーヤーが同数の逆の投票をした場合、大口プレーヤーの投票は無かったとみなせるのだが、残念ながら、その様子をシミュレーションに反映されることはできなかった。先の大口プレーヤーの投票直後は通常はプレーヤーの同調率が高くなるのに逆に投票した別の大口プレーヤーによって同調されず、後から投票した大口プレーヤーの投票直後は普通のプレーヤーの同調率が高くなる仕組みになってしまった。この点は改善する必要がある。
同調率の結果を次の投票に反映させる方法は、単純に同調率の高い方を選択するのではなくて、ルーレットを回して針が賛成票と反対票のどちらに止まるかで判断する仕組みである。同調率の高い方が針の止まる場所が広くて選択されやすくなる。
シミュレーション結果は、大口プレーヤーがいない状態では例えば次のようになる。
縦軸(賛否票差)のプラス側(上側)が賛成票の多い状態でマイナス側(下側)が反対票の多い状態である。
この例は接戦で賛成が勝ったようであるが、大口プレーヤーがいなければ接戦になるかというと、そうとも限らない。次のように一方的になることもある。証明はできないが接線になることの方が少ないかもしれない。
では、大口プレーヤーが参加する例として、11番目に100票を賛成に入れてみよう。例えば次のようになる。
得票数も同調率も賛成派の方が一方的に伸びて、最終的には賛成派の勝ちである。
これに対抗して400番目に反対に100票を入れてみよう。
残念ながら反対派は逆転できなかったようである。差が開きすぎていて、多数派になることができず、同調率で逆転することができなかった。賛成に同調する確率の方が高くて賛成に投票されやすく、その結果として賛成に同調する確率がさらに高くなり、差がさらに広がったのである。シミュレーションは票を入れ直すたびに再計算するので、400番目までのデータは上と異なるが、反対派が勝ちにくいことは同じである。
このように、人が多数派に同調する傾向があると、有力者がゲームを支配することになり、有力者が勝ちやすくなる。例えば、上の例では有力者(大口プレーヤー)は100票しか入れてないのに最終的には800票も差が付いた。この800票が有力者と逆に投票していれば、有力者は負けていた。あるいは、誰も同調しなければ、100票の差なら逆転したかもしれない。対立する全ての事に言えるのだが、勝敗の鍵を握るのは有力者だが、有力者に鍵を握られるのは多くの人が多数派に同調する傾向があるからである。
また、ゲームを支配するのなら、先に多数派を形成した方が有利である。有力者がゲームを支配したければ、早めに行動して多数派を形成する必要がある。圧倒的な多数派に対しては、多数派を形成した有力者と同程度の力を持った有力者の行動では逆転できない。多数派を形成した有力者よりも遥かに強い力を持った有力者に頼るか、多数の有力者が協力して対抗しなければ逆転できない。多数派を形成したのが有力者ではないとしても、圧倒的な多数派に対しては一部の普通の有力者の力では逆転できない。
このシミュレーションは未完成である。例えば、最近の金融市場の動きを表現し切れていない。金融市場が一方的になりやすいのは多くの人がトレンドに同調するからである。しかし、トレンドには終わりがあり、逆に動き始める時がある。トレンドが逆になったら多くの人はそのトレンドに同調するのだが、このシミュレーションでは「逆に動き始める時」を表現し切れていない。グラフを見るとトレンドが逆転することがあるのだが、それは乱数の結果の偶然に頼っているだけで、大口プレーヤーの影響を考慮し切れていない。上記のグラフのように、このシュミレーションでは、圧倒的な多数派が形成された後に一部の大口プレーヤーの力ではトレンドを変えることはできない。しかし、金融市場は圧倒的な多数派が形成された後でも一部の大口プレーヤーの動きでトレンドが変わる。多くのプレーヤーが同調傾向を変える。それが表現し切れていない。
どうやら今の金融市場はアルゴリズム取引に支配されているらしい。そのプログラムは複雑で、売買方法がどのように組まれているか分からない。プログラムがどのように判断して売買しているか分からない。アルゴリズム取引は金融市場が一方的になりやすい原因の一つだろう。例えば、皆が同じプログラムで売買したら一方的になるのは当然である。実際は、たくさんのプログラムが存在して、相互作用で市場が理解不能な複雑な動きになるらしい。その動きをシミュレーションできる人がいたらすごいと思う。ただ、アルゴリズム取引の特性を読んで「見せ玉」と呼ばれる手法で相場操縦した人もいるらしい(参照)。「見せ玉」という素人を相手にする一般的な相場操縦方法に自動売買のプログラムが引っかかったということだろう。これはアルゴリズム取引のプログラムが多くの人の売買方法を模倣して組まれているからかもしれない。そうならば、アルゴリズム取引であろうとも、売買方法に傾向があり、簡単に市場の動きをシミュレーションできるのかもしれない。
私のシミュレーションは人が多数派に同調することでトレンドが形成されてしまう怖さを示すために作ったものだが、接戦状態から大量の票数で意図的にトレンドを作るだけでなく、タイミングが良ければ同じ票数で意図的にトレンドを変えられる同調率の決め方を思いついたら、改良したい。今はトレンドが形成されても票差が小さければ意図的にトレンドを変えることは可能だが、票差が大きくても可能になる同調率の決め方を思いついたら、改良したい。人は多数派に同調するだけでなく、今は小数派でも後で多数派になりそうな方に同調する。それを組み込んだシミュレーションができたら嬉しい。














(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)
(クリックで拡大)