2010年05月25日

JavaScript の読み込みによって異なるサーバのスクリプトを実行する方法

JavaScript の読み込みによって異なるサーバのスクリプトを実行する方法です。

下記英語サイトが非常に参考になりました。

Cross-domain gif request with javascript

GoogleAnalytics の手法と同じとのことなので間違いないでしょう。

上記ページより私が行いたかった方法の方が簡潔だったので書き直します。コールバックの部分とかも省いているのでレベルを下げていると考えていただいて構いません。

まず、サーバ上の JavaScript を読み込ませます。

<script src="http://domain.jp/cross.js" type="text/javascript"></script>

crossRequestSender.js は簡潔に下記のようになります。

var img = new Image();
img.src="http://domain.jp/cross.gif";

※ js と gif が異なるサーバ、と言う意味ではなく、JS読み込みタグを埋め込んでいるHTMLファイルが異なるサーバに配置されていることを想定しています。

で、http://domain.jp/ に下記のように mod_rewrite を設定した .htaccess ファイルを配置します。

RewriteEngine on
RewriteRule ^cross.gif$ /cross.php [L]

以上で cross.php が実行されます。同じ cross と言う名前を利用しましたが、js ⇒ gif ⇒ php とバトンが引き継がれていったことを確認できるかと思います。

2010年05月07日

更新日時と作成日時

MySQL での更新日時(`updated_at`)と作成日時(`created_at`)の型をどうしようか迷ってしまい、ちとはまってしまった。。。

私の結論としては下記がベストのように思っている。

まず、テーブル作成は下記のようにする。

CREATE TABLE テーブル名 (
 ・・・略・・・
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at` datetime NOT NULL
);

で、データを作成する際は

INSERT INTO テーブル名 (
 ・・・略・・・
`created_at`
)
VALUES (
 ・・・略・・・
NOW( )
);

とし、`updated_at`は明示しない。

また、データを更新する際は

UPDATE テーブル名
SET
・・・略・・・
WHERE
・・・略・・・;

とし、同じく`updated_at`は明示しない。

するとデータ作成時は `created_at`にセットされる NOW( ) と `updated_at` に暗黙的にセットされる CURRENT_TIMESTAMP が同じ値を挿入することにはなるが、以降、データ更新時には`updated_at` は明示しなくても自動的に CURRENT_TIMESTAMP で更新し続けてくれる。

細かくてどうでも良さそうで、今までは両方 datetime にして更新日時には NOW() をセットしていたんだが、この際ケジメをつけようと思ってこだわってみた結果、こう言う結論に私は至ったのである。

異論等御意見歓迎。

ユーザのグループ変更とパーミッションの設定

下記が Linux でユーザのグループを変更する場合のコマンド。

sudo /usr/sbin/usermod -g 変更先グループ名 変更対象のユーザ名

ちなみに Linux 操作は root では行わず(SSH でも root ログイン禁止、su でもログイン出来ないようにする)なるべく sudo を使って管理者権限系の操作は行うようにします。 そうすることによって誰が操作を行ったか管理できるようになります。

後、上記コマンドもフルパスでなく、登録しておけばいいですね。alias だと自分のみになりますが、全てのユーザ用に登録する方法は覚えていません。とりあえずは良しとし、どなたか補足いただければ幸いです。

会社用のグループを作っておけば複数のユーザで同じサービスを管理できますが、その際のパーミッションはWEB システムの場合は 664 が良さそうです。

自分と自グループには読み込みと書き込み権限を、それ以外のユーザは読み込みのみの権限を付与しています。

パーミッションは用途によってもっと適切な設定があるかもしれません。

2010年04月22日

Cassandraを使ってみる

前回の記事でCassandraのインストールが終了したので、READMEに載っているサンプルを使って実際に動かしてみる。

  1. コマンドプロンプトでCassandraサーバーを起動する。

    C: > cassandra -f
      INFO 21:28:42,151 Auto DiskAccessMode determined to be standard
      INFO 21:28:46,540 Sampling index for C:\var\lib\cassandra\data\system\LocationInfo-1-Data.db
      INFO 21:28:47,361 Replaying \var\lib\cassandra\commitlog\CommitLog-1271852302580.log
      INFO 21:28:47,472 Log replay complete
      INFO 21:28:47,862 Saved Token found: 25683936072561874319604724012100455105
      INFO 21:28:47,885 Saved ClusterName found: Test Cluster
      INFO 21:28:47,922 Creating new commitlog segment /var/lib/cassandra/commitlog\CommitLog-1271939327922.log
      INFO 21:28:48,151 Starting up server gossip
      INFO 21:28:48,473 Binding thrift service to localhost/127.0.0.1:9160
      INFO 21:28:48,499 Cassandra starting up...
  2. もう1つのコマンドプロンプトでクライアントを起動する。

    C: > cassandra-cli
      Starting Cassandra Client
      Welcome to cassandra CLI.

      Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
      cassandra>
  3. サーバーに接続するためにconnectコマンドを入力します。ホスト名とポート番号は設定をいじっていなければlocalhost/9160になります。
    以下のように表示されていれば接続は完了しています。

    cassandra > connect localhost/9160
    Connected to: "Test Cluster" on localhost/9160
  4. 接続が完了したら、set Keyspace1.Standard2['jsmith']['first'] = 'John'を入力し、実行します。
    (コマンドの詳しい解説は次回以降に掲載します。)

  5. 実行すると以下のように表示され、データの投入が正常に完了したことがわかります。

    cassandra > set Keyspace1.Standard2['jsmith']['first'] = 'John'
    Value inserted.
  6. 次に投入したデータを取得してみます。get Keyspace1.Standard2['jsmith']と入力し、実行します。

  7. 以下のように実行結果が表示され、データが登録されていることと、データを取得できていることを確認できると思います。

    cassandra > get Keyspace1.Standard2['jsmith']
    => (column=first, value=John, timestamp=1271940972780000)
    Returned 1 results.

以上がREADMEに載っているサンプルです。

コマンドやCassandraの仕組みなど、まだまだ調べてみないとわからない点が多いので、継続して調査していきます。

2010年04月21日

CassandraをWindowsにインストール

CassandraをWindowsにインストールした時のメモです。

※ 執筆時のCassandra(0.6.1)ではJavaSDK 1.6 以上のパスがJAVA_HOMEに定義されている必要があります。

以下がインストール手順になります。

  1. Cassandraのダウンロードページよりダウンロードする。
  2. ダウンロードしたtar.gzファイルを任意の場所へ展開する。
  3. 環境変数にCASSANDRA_HOMEを新規で追加し、cassandraを展開したディレクトリにパスを通す。
  4. 環境変数にすでに存在しているPath%CASSANDRA_HOME%\binを追加する。
  5. コマンドプロンプトにcassandraと入力し実行するとサーバーが起動できます。

■ サーバーの実行結果


C:\ > cassandra
Starting Cassandra Server
Listening for transport dt_socket at address: 8888
  INFO 21:18:20,224 Auto DiskAccessMode determined to be standard
  INFO 21:18:22,471 Saved Token not found. Using 25683936072561874319604724012100455105
  INFO 21:18:22,471 Saved ClusterName not found. Using Test Cluster
  INFO 21:18:22,580 Creating new commitlog segment /var/lib/cassandra/commitlog\CommitLog-1271852302580.log
  INFO 21:18:22,892 Starting up server gossip
  INFO 21:18:23,594 Binding thrift service to localhost/127.0.0.1:9160
  INFO 21:18:23,625 Cassandra starting up...
  INFO 21:42:23,089 GC for ParNew: 563 ms, 16260912 reclaimed leaving 12759184 used; max is 1174208512


Cassandraの操作はクライアントより行います。

サーバーのコマンドプロンプトは起動したままで、もう1つコマンドプロンプトを起動し、cassandra-cliと入力し、実行します。

実行すると以下のように表示され、Cassandraの操作ができるようになります。


■ クライアントの実行結果


C:\ > cassandra-cli
Starting Cassandra Client
Welcome to cassandra CLI.

Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
cassandra >


以上でCassandraをWindows上で使う準備ができました。