新書は題名が9割

最近の話題になる新書の多くは優れた題名を持っているのは決して偶然ではない。それは一面では題名が読者に対し強く遡及するからであるが、それだけが理由であるというようなニヒリストどもの主張は見識が浅いと言わざるを得ない。優れた表題が作者の執筆を強く動機付け、優れた内容を書かしめるという効果を忘れてはならないのである。優れた題名は内容を向上させる。優れた題名は優れたアイディアを生み出す。従っていかに優れた題名を考えるかというのは単なるマーケティング技術以上の価値を持つ物である。
それではいかにして優れた題名を生み出しうるか。優れたアイディアを生み出す方法はもちろん一つではないが、有効と思われる一つとして、概念の一見無秩序な横断というものを提案したい。すなわち風が吹くことと桶屋が儲かることには一見明白かつ合理的な関連性は認められないであろうが、それを何とか連絡させられないかという思考実験をするのである。するとその過程で、漸進的な思考では決して得られなかったような新たなひらめきに遭遇するのである。もちろん遭遇というからには確実に起るという物ではない。しかし既に知った道を歩いても新しい発見は少なく、普段通らない道では発見も多い。これは確率の問題であり、着想は確率的に降りてくる物であるから、こうした確率的なアプローチこそが有効であると思量するのである。
ごめんウソ。

というわけでDashcodeのテストも兼ねて『新書表題機』なるものの開発に着手。


要するにゲラゲラ作文Widgetで、新書の題名のリストを元に、並び替えて変な題名を作る。
新書の表紙っぽい画像を、OSに標準で内蔵されてるJaguar Aqua Blue.jpgを元にがっちゃがっちゃと制作。イラレを持ってないのでこういうベクター系の画像を上手く作れない。act2が日本語版を出したというLineformの購入を検討するかな。G3だから動かないけど。
本の題名は2ないし3つのパートに分けられています。参考までに現時点でのリストは以下。

[
 [ , "国家の", "品格"],
 ["超", "バカの", "壁"],
 [ , "世界の", "日本人ジョーク集"], 
 ["人は", "見た目が", "9割"],
 [ , "ウェブ", "進化論"],
 ["99.9%は", , "仮説"],
 [ , "相手に喜ばれる", "「電話の受け方・かけ方」"],
 ["さおだけ屋は", , "なぜ潰れないのか?"],
 ["他人を", "見下す", "若者たち"],
 [ ,"美しい", "国へ"],
 [ ,"下流","社会"],
 [ ,"日本","共産党"]
]

これは『honto - jbookとのサービス統合のお知らせ』のリストから、小説を除いた物をリストアップして作りました。将来的には自分で追加したりAmazonから最新の話題書の題名を取得したりとかしたいかも。
画像下部「林檎堂新書」の文字の上の、いかにもリロードしそうな矢印をクリックすると題名が変わります。
現時点ではWebKitの種が一定な糞Math.random()をそのまま使ってるので、題名も常に同じ順番で同じのが生成されますが、これは後ですぐ直す。
題名が長すぎると*1改行が入るんですが、改行が変な位置で入ると格好悪いのでちょっとだけ手間をかけてます。画像のアレもその成果。


ついでにDashcodeの感想。コードは汚くなるけど、たしかにまぁ手っ取り早く作れる。見た目の調整が楽。
でもデバッグ画面がちょっと解り辛い気がした。設定次第なのかもしれないけどさぁ。普通にJavaScriptのエラーメッセージを表示してくれる方が、慣れてるので有難い。
でも変更途中のコードをその場ですぐに試せるのは便利。
なんだろ。こだわらないなら便利なツールって感じ?ホームページビルダーとかの開発ツール版って感じの立ち位置だと思うといいかも。個人的にはもっとかっちり手書きしたいので必ずしも好みではない。まぁ、汚い部分を隠蔽して使い手には天国、という点ではAppleらしいと言えるかも。

同日追記

WebKitのMath.random()の問題回避には、以前『オケラボブログ:WebKitのMath.random()の糞仕様に対抗する』なんて記事を書いたんですが、その時は適当な回数、randomを空回りさせるという手法をとった。
いっちょMT法でも、と思ったら、すでにJavaScriptでのMT法実装があるじゃないですか!というわけで、試しに流用してみました。
MersenneTwister19937class.jsを使います。
同根のHTMLを参考に。一番単純な使い方なら

var MT = new MersenneTwister19937;
MT.init_genrand((new Date).getTime());

alert(MT.genrand_real1());

という感じ。初期化してから任意の関数を呼び出す。
関数には幾つか種類があるようなので、これについては後で違いを調べてみるかもしれないけど調べないかもしれない。
で、これを『新書表題機』に組み込んでみると、見事、毎回違う答えを返してくれます。
ただし難点が一つ。初期化に時間がかかっている模様。DashboardではなくDashcode上なのでインタプリタが遅いのかもしれないし、そもそもG3/600なんてアレ過ぎるのかも知れませんが、この点はちょっと気をつけなければならないかも。
そもそも今回のネタは、種さえ設定できれば乱数の精度は問題にならないのでPOSIXの実装例を移植する方が地球に優しいのかもしれない。

同日追追記

上のPOSIXの実装例だと2度目以降に何故か種が0で一定してしまったので、結局独自実装にしてみた。参考までにとりあえず掲載。こっちの方がMTのよりは使い方は単純。インスタンス化の時に自動的に時刻を元に種を作るので、特に何も考えなくて良いはず。public domainにするんで自由に流用可。

function MathPlus(){
  this.randSeed = (new Date()).getTime();
  this.random = function(seed){ //seedは無くても良い
    if(seed) this.randSeed = seed;
    
    RAND_WIDTH = 314159265; //元ネタは円周率。
    this.randSeed = this.randSeed * 1103515245 + 12345;
    var toReturn = ((this.randSeed/65536) % RAND_WIDTH)/RAND_WIDTH;
    if(this.randSeed > ((Number.MAX_VALUE-12345) / 1103515245)) //次でオーバーフローするのを回避
      this.randSeed = this.randSeed / (Number.MAX_VALUE/10000000000); //数字は適当。
    return toReturn;
  }
}

//for test
var MP = new MathPlus();
while(true){
  alert("Seed="+MP.randSeed+"\tRand="+MP.random());
}

どうも種が増え続けてNumber.MAX_VALUEを超えると吹っ飛ぶみたいなので、予防措置をとっている。ちなみにテスト部分は無限ループなので気を付けるヨロし。

*1:9字以上