大きいGoogle Mapsが見たかったので、タブレットをたくさん買いました


コンセプトはこんな感じです。

タブレットを並べるとこんな感じになります(結局のところ、普段使っているディスプレイのほうが大きいGoogle Mapsが見られるのですが)。

お試しサイトとソースコードをあとで公開します。

追記:お試しサイト1 (AppFog)お試しサイト2 (Heroku)を公開しました。

追記:コードはここからたどれます。

お約束ですが、Google Mapsをプログラムで操作する方法を基本的なところから学びたいという場合は、拙著『Webアプリケーション構築入門』を参照してください。

Wolfram CDF PlayerをMathematicaとして使う方法


2016.1.27 Edgeでは動きません。

2015.3.14 Chromeでは動きません。

http://www.unfindable.net/umm3/

計算可能ドキュメント形式(Computable Document Format, CDF)を閲覧するためのソフトウェアWolfram CDF PlayerとMathematicaの関係は、Portable Document Format (PDF)を閲覧するためのソフトウェアAdobe ReaderとAcrobatの関係に似ています。Wolfram CDF Playerで閲覧可能なCDF文書を作るにはMathematicaが、Adobe Readerで閲覧可能なPDF文書を作るにはAcrobatが必要です。

しかし、CDFとPDFには大きな違いがあります。PDF文書は内容が固定された静的な文書であるのに対して、CDF文書は内容を変化させられる動的な文書です。下はCDF文書の簡単な例です。Wolfram CDF Playerがインストールされている環境なら、aの値を変えながらSin[a x]をプロットしてみることができます。CDF文書の内容は計算によって変化するのです。


Sin[a x]のaの値を変えられるなら、もっと大胆に「Sin[a x]」という式全体を変えられるのではないかと考えるのは自然でしょう。Mathematicaの式を処理できるCDF文書、それはMathematicaとして使えるCDF文書です。使い勝手は多少悪くても、「Mathematicaを使いたいけれど高すぎて買えない」という人にとっては有用でしょう。みんな大好きWolframAlphaも、Mathematicaのすべての機能を使えるわけではありませんし。

残念ながら、直接的な方法はうまくいきません。CDF文書に入力できるのは数値だけであり、「Sin[a x]」のような文字列は入力できないからです。しかし、コンピュータ上で表現されるすべてのものは、メモリ上では数で表現されています。「Sin[a x]」のような式ももちろん数で表現されています(メモリのことがよくわからない人は、ゲーデル数を思い出してもいいでしょう)。ですから、Mathematicaの式を一度数値に変換してからCDF文書に入力し、CDF文書内でそれを元に戻すというような工夫をすれば、CDF文書で式を扱えます。このアイディアを実現したのが、以前紹介したUniversal Mathematica Manipulator (UMM)です。

UMMには、Mathematicaの式を変換してできる数値が長大なため入力に手間がかかるという問題がありました。Wolfram CDF Playerには、文書上でクリップボードからの貼り付けができないという制約があるため、長大になる数値をCDF文書上で入力するための面倒な仕掛け(VBScriptやAppleScript)が必要でした。(Mathematicaに付属するCDF Playerなら貼り付けられます。このように仕様がばらばらなことが後で混乱を生まないことを祈ります。)

ここでは別の方法を紹介します。

まず、Wolfram CDF Playerをインストールします。これがなくては始まりません。

次に、PHPを使えるウェブサーバをlocalhostに用意します。WindowsならXAMPPを導入するのが簡単でしょう。

下のような内容のexpression.phpをhttp://localhost/umm3/expression.phpというURLで呼び出せるようにしておきます。ディレクトリumm3は、ウェブサーバから書き込めるようにしてください。

<?php

$file = 'expression.txt';

if (isset($_GET['body'])) {
  file_put_contents($file, $_GET['body']);
  echo $_GET['callback'].'()';
} else {
  if (is_file($file)) echo file_get_contents($file);
  echo '(* OK *)';
}

PHPのmagic_quotes_gpcがOffであることを確認します。XAMPPの場合はデフォルトでOffになっています。Macの場合はphp.iniを編集してApacheを再起動する必要があるかもしれません。

http://www.unfindable.net/umm3/にアクセスします。

お約束ですが、上の手順がよくわからない人は、拙著『Webアプリケーション構築入門』などを参照してください。

以上の準備ができたらhttp://www.unfindable.net/umm3/にアクセスします。ピタゴラス3体問題のような比較的大きなプログラムも実行できることを、Wolfram CDF Player 8.0.4(Win, Mac)で確認しています。

機械翻訳を使って日本語→英語→日本語…(Bing版)


「翻訳に不動点はあるか—我々は生活の中で美しいを破壊している by Google」では、Google Translate APIを使って「日本語→英語→日本語」や「英語→日本語→英語」を1クリックでできるようにしていました。Google Translate APIが終了してしまうということなので、作り直さなければなりません。

先日で紹介したMicrosoft Translator V2がここでも使えます。翻訳APIを使えるようになるとまず、日本語→英語→日本語…みたいなことを試したくなるものなので、練習にもちょうどいいでしょう。

Open Questions

翻訳エンジン自体が不変のものではないので結論を出せるものではないかもしれませんが、以下のそれぞれに該当するものはあるでしょうか。

  1. 収束しない(測定可能な周期での振動もしない)
  2. 測定可能な周期で振動する

お約束ですが、ボタンを押した時の動作の実装方法やAPIを使う基本的な方法については、拙著『Webアプリケーション構築入門』に書いてあります。

Bingを使ってTwitter上のさまざまな言語のつぶやきをひとつずつ翻訳するユーザーサイドスクリプト


2011年11月末でサービスを終了するGoogle Translate API。これを利用していたアプリその他の対応に追われるという話、その2です。

ある言語で書かれたウェブページをまとめて翻訳するというような場合には、その1で紹介したTranslate Elementで何とかなりそうです(ページのコンテンツが動的に変更される場合には対応できませんが)。

しかし、Twitterのタイムラインに対しては、Translate Elementは無力です。Twitterのタイムラインには複数の言語のつぶやきが同時に存在するため、「ある決まった言語の文書を別の言語に翻訳する」という仕掛けでは対応できないのです。

APIを使ってつぶやきを一つずつ翻訳するというのがよい解決策で、Google Translate APIを使ってそれを実装したのがTwitter上のさまざまな言語のつぶやきをひとつずつ翻訳するユーザーサイドスクリプトでした。一つのつぶやきの中に複数の言語の文章があるときはダメでしたが、たいていの場合はこれで十分でした。

Google Translate APIが使えなくなるということなので、代わりのAPIとしてMicrosoft Translator V2を試すことにします。

GoogleのAPIと違って、まずBing Developer CenterでBing AppIDを取得しなければなりませんが、それさえ済めば。あとはAPIリファレンスを見ながら問題なく使えるでしょう。(お約束ですが、APIを使う基本的な方法については、拙著『Webアプリケーション構築入門』に書いてあります。)

というわけで、Microsoft Translator V2を使ってつぶやきを一つずつ翻訳するユーザーサイドスクリプトを書きました。

FirefoxとChrome 13 betaで動作を確認しています。Chrome 12では動作しません。

インストール方法

  1. Bing Developer CenterでBing AppIDを取得する
  2. (Firefoxの場合)Greasemonkeyをインストールする
  3. Twitter Translator (Bing)をインストールする
  4. Twitterにアクセスする
  5. (最初に利用する時のみ)Bing AppIDを入力する
  6. (最初に利用する時のみ)ブラウザ(あるいはタブ)を一度閉じ、再度Twitterにアクセスする

Bing AppIDをリセットしたい時は、twitter.comの「Bing_AppID」というcookieを削除してください。

Bing AppIDを設定しなければならないので、ちょっと面倒なスクリプトになってしまいましたが、とりあえずはこれでよしとしましょう。

2011/12/10 Twitterの新しいUIに対応しました。

ページの自動翻訳法・改—Google翻訳APIの代わりに


少し前に、プログラムからGoogle翻訳を利用するためのサービス、Google Translate APIの終了がアナウンスされました(参考)。(ウェブブラウザで利用するGoogle翻訳の話ではありません。)

拙著のサンプルで使っていなかったは不幸中の幸いですが、他の場所で実際に使っていたので、急いで代わりを探さなければなりません。他人のサービスを使うのは手軽でいいのですが、こういう危険があるということを改めて意識させられます。

まず、ウェブページの文字列を、ページが書かれた言語とは違う言語に翻訳する「Googleを使ったなんちゃって地域化」です。これは、Translate Elementで代替できそうです。このブログで実際に試しています。

「なんちゃって地域化」は静的なページでしか動きませんが、あの考え方はクライアント側でコンテンツが変化する動的なページでも有効でした。Translate Elementでそのようなページに対応するのは無理そうですが、とりあえずはこれでよしとしましょう。