YouTubeは動画の関連付けに機械翻訳を使っているらしい


YouTubeでヘンデルのシャコンヌのすごい演奏を見つけました。Michael Borgstedeによるハープシコードの演奏で,冒頭で呈示されるテーマが豪華絢爛に装飾されていて非常に華麗な演奏です。

Chaconne in G major HWV 435 – Georg Friedrich Händel

関連動画に

Полина Осетинская играет Чакону Генделя

というのが表示されていました。何だろうと思って,クリックすると,これもヘンデルのシャコンヌでした。こちらは,ピアノですが,これもなかなか良い演奏です。

「Полина Осетинская играет Чакону Генделя」はロシア語っぽいので,Google翻訳でロシア語から英語に変換すると”Pauline Ossetian plays Handel Chaconne”でした。

YouTubeって,機械翻訳を利用して,動画を関連付けてるんですね。まあ,Google翻訳があるんだから,そのくらい当然なんでしょうけど,ちょっと意表を突かれました。

jQueryのセレクタの指定法


ここのところ、JavaScriptとjQueryを勉強しています。

jQueryの基本であるセレクタの書き方についてのメモです。

基本的な指定法

$(“div”)
要素divすべてを選択
$(“.main”)
クラスmainの要素すべてを選択
$(“#foo”)
id=”foo”の要素を選択

組み合わせた指定法

ちょっとまぎらわしいので要注意です。

$(“div a”)
div要素の下に存在するa要素すべてを選択
(aはdivの子孫であればよい。子でも孫でもOK。)
$(“div > a”)
div要素の直下に存在するa要素すべてを選択。
(aはdivの子でなければならない。孫はダメ。)
$(“div,li,a”)
div要素すべてとli要素すべてとa要素すべてを選択。
(いわゆるorだと考えればよいでしょう。)
$(“label + input”)
label要素の直後にあるinput要素を選択。
(間にほかのものがあるとダメ)
$(“#prev ~ div”)
id=”prev”の要素の後ろ(同レベル)にあるdiv要素すべてを選択。
英語ではNext Sibling Selectorという。Sibling(兄弟)は、同じレベルで並んでいる要素のこと。

次の例のようになる:

<body>
  <div>選択されない(divだが#prevの前にあるため)</div>
  <span id="prev">ここが基準(選択されない)</span>
  <div>選択される</div>
  <div>選択される
    <div>選択されない(兄弟でないので)</div>
  </div>
  <span>選択されない(divでないので)</span>
  <div>選択される</div>
</body>

$(“div a”)と$(“div > a”)の違いに注意

前者$(“div a”)は、div要素の「子孫」であるa要素すべてを選択。a要素は、divの子でも、孫でも、ひ孫でもOK。

後者$(“div > a”)は、div要素の「子」であるa要素すべてを選択。こちらは、aはdivの直接の子でなければなりません。孫やひ孫は選択されません。

Emacsにauto-install.elをインストールする


Emacsにauto-install.elをインストールしてみました。

auto-install.elは、Emacs Lispのプログラムを簡単にインストールするツールです。

1. まず、auto-install.elをインストールするディレクトリ~/.emacs.d/auto-installを作り、そこに移動します。

$ mkdir -p ~/.emacs.d/auto-install
$ cd ~/.emacs.d/auto-install

2. auto-install.elをダウンロードします。

$ wget http://www.emacswiki.org/emacs/download/auto-install.el

3. ダウンロードしたauto-install.elを、バイトコンパイルします。

$ emacs --batch -Q -f batch-byte-compile auto-install.el

4. ~/.emacsに設定を追加します。

~/.emacsに、以下の設定を追加します。


3行目は、emacsの起動時にEmacsWikiからパッケージ名を取得するための設定です。EmacsWiki(http://www.emacswiki.org/)には、さまざまなEmacs Lispパッケージが集められています。

4行目は、install-elisp.el互換モードにします。

これでインストールは完了です。

M-x auto-install-batch(パッケージ名を指定してインストール)やM-x auto-install-from-emacswiki(EmacsWikiに登録されているパッケージをインストール)を使って、Emacs Lispのプログラムをインストールすることができるようになります。

nvm + Node.jsをUbuntu 12.04LTSにインストールする


Node.jsをUbuntu 12.04LTSにインストールしてみました。

Node.jsは、Ubuntuのパッケージになっていますが、現在、開発のペースが速く、パッケージでインストールされるのは結構古いバージョンになってしまいます。そこで、パッケージは利用せずに、手作業でNode.jsをインストールすることにしました。

また、複数バージョンのNode.jsをインストールしておき、必要に応じてバージョンを切り替えるツールnvmを使うことにしました。バージョンの更新が頻繁なために、複数バージョンを共存させて切り替えて使おうという魂胆です。

nvmのインストール

まず最初にnvmをインストールします。nvmは、自分が置かれたディレクトリの中に、Node.jsをインストールします。

ここでは、~/nvmにnvmをインストールすることにしました。

1. nvmのソースを取得する

nvmのソースはGitHubで公開されているので、必要なディレクトリを作り、git cloneすれば、nvmのソース一式を取得できます。

$ mkdir ~/nvm
$ cd ~/nvm
$ git clone git://github.com/creationix/nvm.git .

ファイルREADME.markdownには、インストールの手順やnvmの使い方が書いてあるので目を通すとよいでしょう。

2. nvmコマンドを起動してみる

設定ファイルnvm.shをシェルに読み込ませると、nvmコマンドを使えるようになります。具体的には、コマンドラインから次のようにすれば、nvmコマンドが使えるようになります。

$ . ~/nvm/nvm.sh

nvmコマンドをパラメータ無しで起動して、次の例のように使い方が表示されればOKです。

$ nvm

Node Version Manager

Usage:
    nvm help                    Show this message
    nvm install <version>       Download and install a <version>
    nvm uninstall <version>     Uninstall a version
    nvm use <version>           Modify PATH to use <version>
       <<以下略>>

3. nvmコマンドを常に使えるように設定する

次の1行を、~/.bashrcや~/.profileに入れておけば、ログイン時に自動的に実行されてnvmが使えるようになります。(この設定を行なってから、ログインし直してください。)

# Setting for 'nvm' and 'node.js'
source $HOME/nvm/nvm.sh

node.jsのインストール

さて、nvmがインストールできたので、次はnode.jsをインストールしましょう。

node.jsの公式サイトhttp://nodejs.org/を見ると、現時点での最新バージョンはv0.8.15なので、このバージョンをインストールしてみましょう。

1. nvm installコマンドでnode.jsをインストールする

nvm installコマンドを使えば、指定したバージョンのnode.jsをインストールすることができます。

$ nvm install 0.8.15
######################################################################## 100.0%
Now using node v0.8.15
$

2. node.jsがインストールできたことを確認

node -vコマンドを実行すると、node.jsのバージョンが表示されます。

$ node -v
v0.8.15
$

3. サーバプログラムを動かして動作を確認する

node.jsで、簡単なサーバプログラムを動かしてみます。

次の内容のファイル node_test.js を用意します。

ファイルnode_test.js:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-type': 'text/plain'});
    res.end('Hello World\n');
}).listen(5001, '0.0.0.0');
console.log('Server running at http://localhost');

ファイルnode_test.jsを引数として渡して、nodeコマンドを実行します。

$ node node_test.js

ブラウザからこのホストのポート5001にアクセスすると、「Hello World」と表示されるはずです。

これで、node.js(v0.8.15)がインストールされて、正しく動作していることが確認できました。

nvmコマンドの使い方

コマンドnvm lsで、インストールされているnode.jsのバージョンの一覧が表示されます。

$ nvm ls
    v0.8.9         v0.8.15
current:        v0.8.15
$

nvm useコマンドで、使用するnode.jsのバージョンを切り替えます。この例では、0.8.15を使用するようにします。

$ nvm use 0.8.15
Now using node v0.8.15
$

先ほど行なった~/.bashrcや~/.profileでのnvmの設定の直後で、利用するnode.jsのバージョンをnvm useコマンドで指定しておくと便利です。

# Setting for 'nvm' and 'node.js'
source $HOME/nvm/nvm.sh
nvm use 0.8.15 >/dev/null

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(設定編その2)


今回は、実際のNginxの設定ファイルの例を見てみましょう。(前回の設定編その1はこちら)

ここで説明する例は、2つの仮想ホストwww.alpha.comとwww.beta.comを運用するための設定です。

次のように、4つの設定ファイルが必要となります。

ファイル 目的
1 /etc/nginx/nginx.conf メインの設定ファイル
2 /etc/nginx/sites-available/default デフォルトホストの設定
3 /etc/nginx/sites-available/www.alpha.com 仮想ホストwww.alpha.comの設定
4 /etc/nginx/sites-available/www.beta.com 仮想ホストwww.beta.comの設定

もちろん、前回に説明したように、/etc/nginx/sites-enabledの中に、2、3、4に対して同じ名前のシンボリックリンクを作っておく必要があります。

これらの設定ファイルは、Nginxをインストールした際に用意されているデフォルトの設定ファイルの内容をベースにしています。

ここではポイントとなる点だけを説明します。具体的なディレクティブの意味については、Nginxの公式サイトのドキュメントなどを参照してください。

/etc/nginx/nginx.conf: メインの設定ファイル

1行目は、Nginxを、ユーザwww-data、グループwww-dataで実行するという意味です。4行目のworker_processesは、ワーカープロセスの個数を指定するもので、CPUのコア数を設定します。コメントにあるように、使用しているVPSは仮想3コアなので、3を指定しています。

8行目のworker_connectionsは、ワーカープロセスが同時にオープンするコネクション数の最大値を指定するものです。ここでは768にしています。

30〜31行目では、アクセスログとエラーログのパスを指定しています。

user www-data;

# Worker process setting for Sakura VPS 2G (3 Cores)
worker_processes 3;
pid /var/run/nginx.pid;

events {
	worker_connections 768;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-available/default: デフォルトホストの設定

デフォルトホストの設定ファイルです。設定されている仮想ホスト(www.alpha.com, www.beta.com)以外のホスト名、あるいはIPアドレスを指定してアクセスされた場合には、この設定にもとづいて処理されます。

ここでは、4行目のdeny allによって、常に403 Forbiddenをステータスとして返すようにしています。

server {
	listen 80 default_server;

	deny all;
}

/etc/nginx/sites-available/www.alpha.com: 仮想ホストwww.alpha.comの設定

仮想ホストwww.alpha.comの設定ファイルです。

5行目のlistenは、ポート80を使うことを指定しています。6行目のrootは、この仮想ホストのファイルは、/home/vh/www.alpha.com以下に置いてあることを意味します。7行目は、index.htmlをインデックスファイルとして認識するように設定しています。

9行目では、この仮想ホストの名前www.alpha.comを設定しています。

11〜12行目は、アクセスログとエラーログのパスを指定しています。

14行目の「location /」は、このサイトのパス”/”以下の部分に対して、ブレースで囲んだ宣言(15行目)を適用する、という意味です。パス”/”以下ということは、このサイトすべてが対象となります。

15行目のtry_filesは、指定されたパス($uriで表わされます)に対して、実際にどこを探すかを指定するものです。ここでは、「$uri」「$uri/」「=404」の3つを指定しています。

例えば、http://www.alpha.com/testにアクセスされたとしましょう。この場合、$uriには”/test”が入っています。

ですから、まずは/home/vh/www.alpha.com/testというファイルを探して、もしあればそれを返します。もしなければ、次は$uri/と指定されているので、後ろにスラッシュとindex.htmlを付けたもの、つまり/home/vh/www.alpha.com/test/index.htmlを探します。このファイルもなければ、次は「=404」と指定されていますが、これはエラーコード404を返すという意味です。ですから、「404 File Not Found」を返します。

#
#  www.alpha.com
#
server {
	listen 80;
	root /home/vh/www.alpha.com;
	index index.html;

	server_name www.alpha.com;

	access_log /var/log/nginx/www.alpha.com-access.log;
	error_log /var/log/nginx/www.alpha.com-error.log;

	location / {
		try_files $uri $uri/ =404;
	}
}

/etc/nginx/sites-available/www.beta.com: 仮想ホストwww.beta.comの設定

仮想ホストwww.beta.comの設定ファイルです。ファイルやディレクトリのパス名が違うだけで、それ以外の内容はwww.alpha.comと同じです。

#
#  www.beta.com
#
server {
	listen 80;
	root /home/vh/www.beta.com;
	index index.html;

	server_name www.beta.com;

	access_log /var/log/nginx/www.beta.com-access.log;
	error_log /var/log/nginx/www.beta.com-error.log;

	location / {
		try_files $uri $uri/ =404;
	}
}

これら4つの設定ファイルによって、2つの仮想ホストwww.alpha.com、www.beta.comを運用することができます。