「JavaScript」タグアーカイブ

「ギャンブラーの誤謬」ダイスプログラム

「ギャンブラーの誤謬(ごびゅう)」と呼ばれる言葉がある。コイン投げで表、表、表と連続して表が出ると、次は裏が出そうな気がする心理傾向である。実際は何回表が連続して出ようとも、次に表が出る確率は1/2である。なぜなら、コイン投げは、毎回独立事象(前回の結果と次のコイン投げは無関係)だからである。

ギャンブラーの誤謬 : カイジに学ぶ

現実のサイコロをまっとうにプログラムで再現すれば、乱数を使って毎回同じ確率で出るようになりますが、あえてギャンブラーが間違うような結果を出すサイコロを書くこともできます。Javascript で書かれたギャンブラーダイス

このダイスクラス、コンストラクタで与えた数字の面のサイコロとなります。6ならD6, 20ならD20。物理的な制約がないのでD7でもD13でも何でもできます。

このダイスでは、6面サイでたとえば1が出ると、次回は1が出にくくなります。何度も1が出れば、次に1が出る確率はどんどん下がっていきます。「これだけ1が続いたから、次は1は来ないだろう」というギャンブラーの思い込みが、本当に再現してしまうわけですね。

ボードゲームでこのようなダイスを用意するのは大変ですが、コンピューターゲームなら、こういった判定機を使うことで、プレイヤーがギャンブラーの誤謬のせいで「こんなはずはない」「騙されている気がする」と感じにくいようにすることもできるんでしょうね。実際やってるゲームがあるのかも。

via Hacker News
image credit: Flickr James Bowe

サスペンスかSF風のBGMをブラウザで作れるサイト

Jake Albaugh さんが公開した Musical Chord Progression Arpeggiatorは、楽譜や楽器の素養が無くても、和音の要素をばらしてそれらしく弾いてくれるというアルペジエーターを、ブラウザ上のJavaScriptで作ったというものです。

musical-chord-progression-arpeggiator

いろいろなスイッチを適当に変えれば、一つとないオリジナルな曲ができあがります。どれも同じように聴こえてしまうオリジナルさではありますが。

自分の作った動画に他人の著作権が及ばないBGMを簡単につけたいというときなどに、こういう自動作曲のサービスは使い良いのではないでしょうか。

ブラウザ上でのインタラクティブな音を扱うオープンソースライブラリTone.jsを使っています。codepen.io上に置かれたソースがそのまま実行されているので、やる気があれば自分用に改造することもできるでしょう。

via reddit

PDFで作られたブロック崩し

pdfファイルといえば様々な環境でなるべく同じに見えるようにレイアウトを固定した文書を配る時のフォーマットだと思いますが、そのpdf形式で作られたブロック崩しゲームが公開されました。

breakout.pdf
(Chromeブラウザでのみ動作)

画面下の青い部分でマウスを動かすと、自機を左右に動かすことができます。

pdf-breakout

Omar Rizwanさんによるソースコードおよび解説によると、PDFは仕様上はFlashやら音声やら動画やらJavaScriptやら、いろんなものを内蔵できるようになっているのだそうです。

ただ、ほとんどのPDFビューワーでは、そういった本流でない部分の仕様は実装していません。しかし、Chromeブラウザ内蔵のpdfビューワーでは、pdfがサポートしているJavaScriptの仕様のうちのいくつかが実装されているそうです。pdfからJavaScriptを呼び出せるというブログを見たRizwanさんは、使えるAPIだけを使って、ブロック崩しゲームを実装してしまった、というわけです。

このChrome pdfビューワの実装においても、データベースに接続するとか、接続されたモニターを検出するとか、外部リソースにアクセスするとか、そういったほとんどの機能は「サポートしない」となっていて、pdfの内部で計算をすることはできても、外部とのやりとりをする手段の多くは使えないのだとか。

この限定されたAPIから、テキストの背景色を動的に変えることはできないけれど、その枠の大きさと枠のスタイルは変えられる、ということで、ブロックの表示・非表示を制御したそうです。

また、マウスの正確な位置を検出する手段はないけれど、PDF作成時に配置したフィールドへのマウスカーソルの出入りは検出できるということで、これを使ってマウスの場所を取得しているそうです。

フィールドも後で追加することはできず、PDFに最初から持たせておく必要があるそうで、自機、ブロック、ボール、得点、残機のそれぞれを、大量のフィールドとしてPDF上に配置するスクリプトを書き、それでゲーム画面のPDFを生成させているということ。

Chromeブラウザ上のpdfビューワは、もともとGoogleがFoxitから買い取ったpdfビューワーを基にしたものらしいということで、Foxitの時代にその顧客がこの小さなJavaScriptセットを使っていたのではないか、とRizwanさんは推測しています。

via TheNextWeb

Alex – 政治的に正しくない英単語の利用をチェックできるツール

Catch insensitive, inconsiderate writing (心無く、浅はかな文章を捕らえよう) というキャッチで公開されている Alex は、JavaScript/Node.js ベースで書かれた英文チェックツールです。いわゆるポリティカル・コレクトネス(PC)に反する、政治的や社会的に差別や偏見のある単語が使われていないかを見つけてくれます。

ウェブですぐに動作を試せるデモが公開されているので、それを見てみるのが一番早いでしょう。

alexjs-demo

「カメラマン」「チェアマン」みたいな男女差別につながる言葉、”he”とか”she”とかの男女を決め打ちで書いた主語、master/slave など人種差別の時に使われる表現、などを見つけ、赤でハイライトしてくれます。

下部には、「ではどんな単語を使えば問題ないのか」も表示してくれます。

# ワンクリックで全部置き換えるボタンもあっても良さそうなものですが

GitHub 上でソースは公開されていて、修正提案や用語の追加なども受け付けています。

JavaScript のソースをローカルでコマンドラインで動かすこともできるし、Atom や Sublime といった著名なテキストエディタや、gulp からマニュアルファイル等のチェックをするために呼び出すためのインテグレーションコードも紹介されています。

話題になっている Hacker News でも、GitHub の Issues でも、「なぜこれがダメなのか」とか「判定がおかしい」という文句が出ていて、問題の難しさが垣間見えます。

機械的に処理しているのだから誤検出も多く、指摘されたことを全部書き換える必要はない(しするべきでもない)ですが、僕ら非ネイティブからしたら「そんな問題があったのか/気にしてる人がいるのか」という情報を簡単に得られるという点で、英文のメールやリリースを書いたときに通してみる意味はあるように思います。

それが配慮なのか、それとも言葉狩りになってしまっているのか、検出結果を見て判断するのもまた非英語話者にはたいへんなことではありますが。

via Hacker News

関連

ネーミングが外国語で危ない意味になってないか調べられる WordSafety.com

joblint – 英語の求人表現をチェックしてくれるツール

あなたの英語がどの方言かを判定してくれるサイト WhichEnglish

ASCII Cam – カメラの画像をリアルタイムでASCII Artに変換するサービス

ASCII Cam は、ブラウザ上でwebカメラの入力をアスキーアートに変換するサービスです。

ascii-cam-top

Start cam を押すと、初回はカメラへのアクセスをしても良いかというのがブラウザから訊かれます。許可をするとウェブカムの映像がASCII文字だけで表示されます。

asciicam

ソースコードもGithubで公開されています。

Untrusted – JavaScriptをいじって先へ進むRogueライクゲーム

ローグライクゲーム、というジャンルがあります。Rogue(ローグ)を代表とする自動的に生成される迷路・迷宮から脱出するというゲームで、日本で有名なものでも、ネットハック、トルネコの大冒険、チョコボの不思議なダンジョンなど多数あります。

Untrusted は、そのようなローグ風ゲームのバリエーションなのですが、JavaScriptのコードを操作することでパズル的な迷宮を解き、先へ進むというのが最大の特徴です。

untrusted-3

画面左の迷宮で、自分のキャラクター”@”を、階段”□”まで、カーソルキーを使って導かなければいけません。しかし、普通に上下左右に移動しただけでは、出口にたどり着くことはできなくなっています。

そこで、右側のコードに書かれた、迷宮を生成するJavaScriptのコードのうち、書き換えて良いという黒地の部分を変更し、Ctrl+5 で実行するとあら不思議、壁や出口の場所を書き換えてしまうことで、次の階へと進むことができるようになるというわけです。

いかだを使ったり鍵を探したりと、面ごとに違う趣向の障害が配置されています。

その階がどういうトラップなのか、どんな障害が設けられているかというヒントがJavaScriptのコメントとして書かれているので、解く際の参考になるでしょう。

untrusted-2

壁を描画している部分の位置を書き換えるとか、出口の場所を移動するとか、で解ける面もありますが、後の面ではそれらを防ぐようなバリデーション・コードが追加されたりして、同じ手は2度使えないようになっています。

UntrustedのソースコードはオープンソースとしてGitHub上で公開されています。ソースコードを見れば現在のダンジョンが何階あるかはわかってしまうのですが。

# HackerNewsで紹介されたせいで、現在ゲームはちょっと重かったり、正しく動かなかったりすることがあるようです。その場合は、footerにリンクのあるミラーサイトで遊んだり、オープンソースですから自分のところで動かしたりということもできます。

via HackerNews