2011年11月アーカイブ

Linuxでお手軽に使えるエディタ、GNU/nano。

デフォルトだとファイル表示したときに色がつかないので、Emacsやviのように色を付けて表示する方法を紹介します。

nanoでファイルを色づけ表示する方法

ImageMagickとActivePerlは、相性問題が難しいことで有名です。
バージョンにちょっとでも齟齬があると動いてくれません。

そこで、ImageMagickとActivePerlを確実に動作させる方法を紹介します。

ImageMagickのインストーラ画面にヒントが・・!

Ajaxで、サーバ側から"hello"という単純な文字列を出力したときに、
JavaScript側でそれを受け取ると<pre>で囲われてしまう現象が起きることがあります。

<pre>hello</pre>

対処法

カヤックのブログに、相反する2つの記事が書かれていました。
非常に面白かったので紹介します。

1つ目の記事
jQuery言語入門
iPhone4S (iOS5.0.1)で、AppStoreでインストールしようとしたときにパスワード入力ダイアログが出るのですが、そのときにキーボードが表示されなくて、パスワードが入力できないという奇妙な現象が起こりました。

下記手順をやってみたら解決しました。
iOSのバグかもしれません。
ご参考まで。

  • ホームボタンをダブルクリックして、起動中のアプリをすべて終了する
  • 電源Off → 電源On
AmazonS3上の画像を表示するときは、下記ようなHTMLタグになると思います。

<img id="image1"
 src="http://hoge.s3.amazonaws.com/fuga/file.jpg?AWSAccessKeyId=AKIHOGE&amp;Expires=1322305525&amp;Signature=abcde" >

これをjQueryで再読み込みする方法をご紹介します。

MongoDB : サルでもわかるMapReduce

| カテゴリ:
MongoDBにデータを入れたものの、何をどうしていいかわからないプログラマのみなさんこんにちわ。
今日はそんなあなたのために、MapReduceの超わかりやすい入門を書いてみました。

MapReduceで何ができるのか?

[PostgreSQL]本当は怖いREINDEX

| カテゴリ:

稼動中のサービスでREINDEXをしてはいけません。

普通のWebサイトであれば、稼働中にREINDEXをやると、SELECT文がブロックされて応答が返ってこなくなります。

REINDEXはなぜ危険なのか

MapReduceについて勉強していたら、"emit"という見慣れない英単語が出てきたので調べてみました。

emit : 〈液体・光・熱・においなどを〉出す,放つ

電気自動車のことをよくゼロエミッションカー(Zero Emission Car)と言いますが、"emission"の動詞形が"emit"なんですね。
ISODate is a thin wrapper around the Date constructor to fix some of it's shortcomings. It returns a normal Date object with all of the normal methods that javascript Date methods support. We have also changed the way that Date objects print to make sure that they don't look like strings and that if you copy and paste the output you get the same object.

要約すると、「ISODateはDateの薄いラッパーである」ということみたいです。

サンプルコード

今日もスロークエリとたたかうプログラマのみなさんこんにちわ。
さて、ウェブ上でよく見かけるExplain Analyzeの解説記事では、

「スロークエリの遅い原因を調べてSQLを高速化しよう!」

と言うスローガンのもと、結局は

「seq scanを見つけたら、indexを貼ってindex scanするようにしましょう

という結論で終わっていることがほとんどです。

これは難しくない。

Indexを貼ってないテーブルにIndexを貼るのは誰でもできる。
そうやって一個一個seq scanをなくしていけば、たいていのSQLは高速化できるでしょう。

問題はここからです。
ベンチマークとか検証用で、まっさらのPostgreSQLをちゃちゃっと使いたいというときのマニュアルです。
※事前にPostgreSQL本体をインストールしておいてください。

やはりPostgreSQLはソースからコンパイルするのが一番です。(←くどい)
CentOS 5.6 + PostgreSQL 8.4のときと手順は全く同じです。

以下rootで作業します。
yum -y install readline readline-devel # 事前準備
wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v9.1.1/postgresql-9.1.1.tar.gz
tar xvfz postgresql-9.1.1.tar.gz
cd postgresql-9.1.1
./configure
make  # コンパイル
make install # インストール

echo "PATH=/usr/local/pgsql/bin:\$PATH" >> /etc/profile # PATHを通しておきます。
adduser  postgres # 管理ユーザを作成
mkdir /usr/local/pgsql/data # データディレクトリを作成
chown postgres /usr/local/pgsql/data # オーナーを変更
su - postgres

以下、ユーザpostgresで作業します。
やはりPostgreSQLはソースからコンパイルするのが一番です。

以下rootで作業します。
yum -y install readline readline-devel # 事前準備
wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v8.4.9/postgresql-8.4.9.tar.gz
tar xvfz postgresql-8.4.9.tar.gz
cd postgresql-8.4.9
./configure
make  # コンパイル
make install # インストール

echo "PATH=/usr/local/pgsql/bin:\$PATH" >> /etc/profile # PATHを通しておきます。
adduser  postgres # 管理ユーザを作成
mkdir /usr/local/pgsql/data # データディレクトリを作成
chown postgres /usr/local/pgsql/data # オーナーを変更
su - postgres

以下、ユーザpostgresで作業します。

MongoDB速すぎワロタw

いま巷で話題のMongoDB。
どれくらい速いのかと、insertのパフォーマンスをPostgreSQLと測定してみました。

結果はMongoDBの方が10倍以上速かったです。
まさに爆速!!

pecl: command not found

| カテゴリ:
CentOSなどでPHPを入れたあと peclコマンドを実行しようとすると、"pecl: command not found"エラーが出ることがあります。

SELECT
  objname,
  to_char(pg_relation_size(objname::regclass), '999,999,999,999') as bytes
FROM (
  SELECT
    tablename as objname
  FROM pg_tables
  WHERE schemaname = 'public'

  UNION

  SELECT
    indexname as objname
  FROM pg_indexes
  WHERE schemaname = 'public'
  ) as objects

ORDER BY bytes DESC
このようなSQLはいちいち覚えてられないので、下記のようにビュー作成しておくのがオススメです。

pg_relation_size関数でエラー

| カテゴリ:
PostgreSQL 8.4から、pg_relation_sizeはtext型を受け付けなくなりました。

text型を引数に指定すると、こんなエラーが出ます。
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

テーブルサイズを知りたいときは、regclassに型キャストしてあげましょう。

pg_relation_size(tablename::regclass)
pg_send_queryは非同期クエリ送信だから、結果を待たない分だけpg_queryより速いかと思ってベンチマークをとってみた。

ポイントは2つ。

  • expat-develパッケージが必要。
  • LWP::UserAgent::Determinedのテストがこけるので、force installする。
$ sudo yum install expat-devel
$ cpanm  LWP::UserAgent::Determined --force
$ cpanm  Amazon::S3
これでいけるはずです。
Perlで、AmazonS3にファイルをうpするには下記のようにします。

use strict;
use warnings;
use Amazon::S3;

my $s3 = Amazon::S3->new({
        aws_access_key_id     => 'foo',  # アクセスキーID 
        aws_secret_access_key => 'bar',  # シークレットアクセスキー
        retry                 => 1,
     });

my $bucket = $s3->bucket('yourbucketname'); # あらかじめ作成したバケット名を指定

my $filepath = '/tmp/hello.txt';  # ローカルのファイルパス名
my $keyname = 'tmp/hello.txt';    # S3上のオブジェクトパス名

$bucket->add_key_filename($keyname, $filepath)  or die $s3->err . ':' . $s3->errstr;
空行を除くと12行です。
CentOS 6.0にperlbrewとPerl 5.14.2とcpanmをインストールする方法を紹介します。

rootではなく一般ユーザとして実行してください

memcached-toolは、memcachedのソースコードを解凍した中にあります。

例えばバージョン1.4.5だと、下記のファイルがそれです。

memcached-1.4.5/scripts/memcached-tool

使い方

異常終了したときに、pidファイルが残ったままになるのが原因です。

/etc/init.d/ttservd

を修正すればうまく行くと思います。

実は意外と知られていない、ディレクトリのパーミッションの意味

(私が知らなかっただけです。ごめんなさい。)

ディレクトリのパーミッションで、「実行権限(x)」に何の意味があるか、ご存知ですか?


実はこれ、「アクセス権」なんです。

ディレクトリに実行権限がない場合は、中にあるファイルの中身を見ることができません。
最近にわかサーバ管理者になったDQNEOです。
こんにちわ。

Apacheのログファイルを、一般ユーザとして閲覧しようとしたらエラーが閲覧できないことがあります。

$ tail -f /var/log/httpd/access_log
tail: `/var/log/httpd/access_log' を 読み込み用でオープンできません: 許可がありません
tail: 何もファイルは残っていません

原因と対処法

s3cmd というツールを使うと、ディレクトリの中身を丸ごと(再帰的に)アップロードすることができます。
使い方は非常に簡単で、これだけです。
$ s3cmd put --recursive   /path/to/mydir  s3://bucketname/foo/bar/  
または
$ s3cmd put --recursive   /path/to/mydir/  s3://bucketname/foo/bar/mydir/  

1行目と2行目は同じ意味です。 (ローカルディレクトリ名の末尾のスラッシュに要注意。rsyncの場合と同じです。)

コマンドラインやシェルスクリプトなどから実行するときは非常に便利です。
よかったら試してみてください。

s3cmd 公式サイト: http://s3tools.org/s3cmd

ただ欠点が1つあって、大量のファイルをアップロードしようとすると非常に時間がかかります。
この問題の解決方法は次回説明します。
s3cmdを使えばAmazonS3に大量のファイルを一気にアップロードできますが、スピードが遅いのが難点です。

そこで、Perlで並列アップロードするツールを作ってみたら、6倍高速化できました。
よかったら使ってみてください。
(ソースコードは一番下にあります)
PerlからAmazon S3を利用するには、Net::Amazon::S3とAmazon::S3という2つのモジュールがあります。

こちらの記事によると、Amazon::S3の方が依存モジュールが少なくてインストールが楽と書いてありました。

CentOS 5.3で早速インストールしようとしてみたら、期待に反して依存モジュールのせいで見事にこけました(泣笑)

人気記事

このアーカイブについて

このページには、2011年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2011年10月です。

次のアーカイブは2011年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事