適当に・・・

何の目的も無くブログを立ち上げてみました。更新は不定期ですね。

食事

2010年02月25日 14時09分50秒 | Weblog
今日も技術意外のお話。

食にあんまり興味がない私。
昔、美味しいものを食べると幸せと
聞いた事があったけど、全然そんなことは
ないと思っていた。

最近、オー・ギャマンド・トキオに
お邪魔することが多くなって初めてわかった。
料理が美味しいとちょっと幸せになる気分がwww

そして、同じくらい美味しいお店がもう1点
ギャマンとは嗜好が違うけど、美味しいお店。

月島ビストロ 03-6228-2903
(なんか似てる名前のお店があるらしいので
間違えないように気をつけてください。)

ここのアンチョビきゃべつが絶品!!!
行くと毎回注文する。

是非一度、食べてみてください。

CentOS5.4 ImageMagick アップデート

2010年02月06日 14時42分39秒 | Linux
CentOS5.4
ImageMagickのアップデート

yum list ImageMagick*
とすると

ImageMagick.i386 6.2.8.0-4.el5_1.1 installed
ImageMagick.x86_64 6.2.8.0-4.el5_1.1 installed
ImageMagick-c++.i386 6.2.8.0-4.el5_1.1 installed
ImageMagick-c++.x86_64 6.2.8.0-4.el5_1.1 installed
ImageMagick-c++-devel.i386 6.2.8.0-4.el5_1.1 installed
ImageMagick-c++-devel.x86_64 6.2.8.0-4.el5_1.1 installed
ImageMagick-devel.i386 6.2.8.0-4.el5_1.1 installed
ImageMagick-devel.x86_64 6.2.8.0-4.el5_1.1 installed
ImageMagick-perl.x86_64 6.2.8.0-4.el5_1.1 installed

と返ってくる。

でこれを最新に上げたい。

ということで教えてgoogle大先生!!!

cd /usr/local/src

wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/linux/SRPMS/ImageMagick.src.rpm

rpm -ivh ImageMagick.src.rpm

error: unpacking of archive failed on file /usr/src/redhat/SOURCES/ImageMagick-6.5.9-2.tar.bz2;4b6d0275: cpio: MD5 sum mismatch

エラー・・・・・

rpm -ivh --nomd5 ImageMagick.src.rpm

cd /usr/src/redhat/SPECS

rpmbuild -ba ImageMagick.spec

エラー ・・・・・

error: Failed build dependencies:
freetype-devel is needed by ImageMagick-6.5.9-2.x86_64
libpng-devel is needed by ImageMagick-6.5.9-2.x86_64
giflib-devel is needed by ImageMagick-6.5.9-2.x86_64
perl-devel is needed by ImageMagick-6.5.9-2.x86_64
djvulibre-devel is needed by ImageMagick-6.5.9-2.x86_64
libwmf-devel is needed by ImageMagick-6.5.9-2.x86_64
jasper-devel is needed by ImageMagick-6.5.9-2.x86_64
libtool-ltdl-devel is needed by ImageMagick-6.5.9-2.x86_64
libxml2-devel is needed by ImageMagick-6.5.9-2.x86_64
librsvg2-devel is needed by ImageMagick-6.5.9-2.x86_64

yum -y install freetype-devel libpng-devel giflib-devel libwmf-devel libtool-ltdl-devel libxml2-devel librsvg2-devel

djvulibre-develはdagリポジトリが必要

vi /etc/yum.repos.d/dag.repo

[dag]
name=Dag RPM Repository for CentOS5
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el5/en/$basearch/dag/
enabled=0
gpgcheck=1

として保存

rpm --import http://ftp.riken.jp/Linux/dag/RPM-GPG-KEY.dag.txt

yum --enablerepo=dag install djvulibre-devel

無事にインストールしたら次

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm

rpm -Uvh epel-release-5-3.noarch.rpm

次は yum でremiのリポジトリを使えるようにする。

wget http://rpms.famillecollet.com/el5.x86_64/remi-release-5-6.el5.remi.noarch.rpm

rpm -Uvh remi-release-5-6.el5.remi.noarch.rpm

でリポジトリの設定ファイルが入った。

次は入った設定ファイルの編集
vi /etc/yum.repos.d/epel.repo

failovermethod=priority
enabled=1
gpgcheck=1

となっている記述のところを探して、
failovermethod=priority
priority=1 #追加
enabled=0 #変更
gpgcheck=1

として保存

次も同じく
vi /etc/yum.repos.d/remi.repo

enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

との記述があるところを

enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority
priority=1

とする。

yum --enablerepo=epel,remi -y install jasper-devel

としてインストール

再度 rpmbuild -ba ImageMagick.spec とすると
perl-devel is needed by ImageMagick-6.5.9-2.x86_64
と出るがどうも perl-devel はないみたい。

vi ImageMagick.sepc として
perl-devel を perl に変更

BuildRequires: libtiff-devel, giflib-devel, zlib-devel, perl-devel
 ↓
BuildRequires: libtiff-devel, giflib-devel, zlib-devel, perl

として保存

再度 rpmbuild -ba ImageMagick.spec
(ちょっと時間がかかるからココアを飲んで放置プレイ・・・・)

(1度目のトライでlibmagic.so.1が無いみたいな感じのエラーがでて
スゲーハマった。でもlibmagic.so.1は file-4.17-15.el5_3.1
のパッケージに入ってて
yum list file*でやるとインストールされてるからな~と思いつつ
ビルドできないのは問題だから探す。

http://fr.sourceforge.jp/new/sfnet_releases.php?date=2009-9-7

file-5.04.tar.gzってのがあるのでダウンロードコンパイル
インストールしてlibmagic.so.1が入った。
fedora用のなら rpm とかあったけど、ちょっと入れることは
躊躇ったのでソースから入れました。

原因はマシンがAMDのせい?わからん。


問題なく終わったら、

cd /usr/src/redhat/RPMS/x86_64/

ls

ImageMagick-6.5.9-2.x86_64.rpm
ImageMagick-c++-6.5.9-2.x86_64.rpm
ImageMagick-c++-devel-6.5.9-2.x86_64.rpm
ImageMagick-debuginfo-6.5.9-2.x86_64.rpm
ImageMagick-devel-6.5.9-2.x86_64.rpm
ImageMagick-doc-6.5.9-2.x86_64.rpm
ImageMagick-perl-6.5.9-2.x86_64.rpm

rpmが出来上がってる~~~♪

rpm -Uvh ImageMagick*

エラー・・・・・

yum remove ImageMagick*

Removed:
ImageMagick.i386 0:6.2.8.0-4.el5_1.1
ImageMagick.x86_64 0:6.2.8.0-4.el5_1.1
ImageMagick-c++.i386 0:6.2.8.0-4.el5_1.1
ImageMagick-c++.x86_64 0:6.2.8.0-4.el5_1.1
ImageMagick-c++-devel.i386 0:6.2.8.0-4.el5_1.1
ImageMagick-c++-devel.x86_64 0:6.2.8.0-4.el5_1.1
ImageMagick-devel.i386 0:6.2.8.0-4.el5_1.1
ImageMagick-devel.x86_64 0:6.2.8.0-4.el5_1.1
ImageMagick-perl.x86_64 0:6.2.8.0-4.el5_1.1

再度 rpm -Uvh ImageMagick*

ImageMagick.x86_64 6.5.9-2 installed

で最新が入った。

以上

CentOS5.4 PHP 5.1.6 →PHP 5.3

2010年02月06日 13時40分09秒 | PHP
最近phpを使う機会が
多くなってきた。

だけどCentOS5.4のyumで
インストールするphpは
PHP 5.1.6
安定版なんだろうし、通常使う時は
問題ないのだけれど、便利な関数や
その他諸々の事情でアップデートしたい。

PHP 5.1.6 → PHP 5.3にする手順。

まず、yum でepelのリポジトリ(レポジトリ?)を使えるようにする。
(いつも発音がわからね)

cd /usr/local/src

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm

rpm -Uvh epel-release-5-3.noarch.rpm

次は yum でremiのリポジトリを使えるようにする。

wget http://rpms.famillecollet.com/el5.x86_64/remi-release-5-6.el5.remi.noarch.rpm

rpm -Uvh remi-release-5-6.el5.remi.noarch.rpm

でリポジトリの設定ファイルが入った。

次は入った設定ファイルの編集
vi /etc/yum.repos.d/epel.repo

failovermethod=priority
enabled=1
gpgcheck=1

となっている記述のところを探して、
failovermethod=priority
priority=1 #追加
enabled=0 #変更
gpgcheck=1

として保存

次も同じく
vi /etc/yum.repos.d/remi.repo

enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

との記述があるところを

enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority
priority=1

とする。

yum --enablerepo=epel,remi -y update php php-mbstring

終了したら

php -v として

PHP 5.3.1 (cli) (built: Nov 20 2009 18:18:28)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

こんな感じの結果が返ってくればOK

以上。


シシンデラ カテゴリー

2010年02月02日 15時25分22秒 | Weblog
ライブドアのレコメンドエンジン シシンデラ(cicindela)
アイテムオンリーでしか使ってなかったから
カテゴリーがidしか入力できないと言うのを初めて知ったw

userとitemは
{cicindela_home}/lib/Cicindela/Config/_common.pmのフィルタに
use_user_char_id=>1,
use_item_char_id=>1,
って書いたら自動的にcharからidに変換してくれるのだけどー
categoryは無いな。

use_category_char_id=>1みたいなのをコピーで作るか?w

ちょっとやってみた。

cicindelaカスタマイズ
use_category_char_id=>1の実装

cicindelaのデータの投入のしかたは
xxxx_bufferという名前のテーブル
からxxxxのテーブルにデータが
flush_buffers.plによって移動されるので
まずcategory_bufferのテーブル構造を変更する。

cicindela.sqlの

drop table if exists categories_buffer;
create table categories_buffer (
id int not null auto_increment primary key,

item_id int,
item_char_id varchar(255),
category_id int,
is_delete tinyint(1) not null default 0,
timestamp timestamp not null default CURRENT_TIMESTAMP
) engine = innodb;

これを

drop table if exists categories_buffer;
create table categories_buffer (
id int not null auto_increment primary key,

item_id int,
item_char_id varchar(255),
category_id int,
category_char_id varchar(255),
is_delete tinyint(1) not null default 0,
timestamp timestamp not null default CURRENT_TIMESTAMP
) engine = innodb;

とする。

あと、新しいテーブルcategory_id_char2intを
作成する必要があるので
drop table if exists category_id_char2int;
create table category_id_char2int (
id int not null auto_increment primary key,
char_id varchar(255) not null,
timestamp timestamp not null default CURRENT_TIMESTAMP,

unique key (char_id),
key (timestamp)
) engine = innodb;

を一番最後に追記(最後じゃなくても別にいいけどさ)

次に
lib/Cicindelaの配下
IncomingData.pmの中に
# int以外の型のidの変換用
と言うコメントがあるので


# int以外の型のidの変換用
'insert_user_char_id' => q{
insert ignore into user_id_char2int (char_id) values (?)
},
'insert_item_char_id' => q{
insert ignore into item_id_char2int (char_id) values (?)
},

これを

# int以外の型のidの変換用
'insert_user_char_id' => q{
insert ignore into user_id_char2int (char_id) values (?)
},
'insert_item_char_id' => q{
insert ignore into item_id_char2int (char_id) values (?)
},
'insert_category_char_id' => q{
insert ignore into category_id_char2int (char_id) values (?)
},

とする。

さっきの # int以外の型のidの変換用のすぐ下に
今度はresolve_xxx_idsってのがあるからそれも追加する。

'resolve_user_ids' => q{
update %$buffer_table a, user_id_char2int b
set a.user_id = b.id
where a.id <= ? and a.user_char_id = b.char_id
},
'resolve_item_ids' => q{
update %$buffer_table a, item_id_char2int b
set a.item_id = b.id
where a.id <= ? and a.item_char_id = b.char_id
},


'resolve_user_ids' => q{
update %$buffer_table a, user_id_char2int b
set a.user_id = b.id
where a.id <= ? and a.user_char_id = b.char_id
},
'resolve_item_ids' => q{
update %$buffer_table a, item_id_char2int b
set a.item_id = b.id
where a.id <= ? and a.item_char_id = b.char_id
},
'resolve_category_ids' => q{
update %$buffer_table a, category_id_char2int b
set a.category_id = b.id
where a.id <= ? and a.category_char_id = b.char_id
},

にする。

次、sub insert_categoryを変更

sub insert_categoryの中で
変数を定義しているところがあるが新しく
$category_char_idを作成するので
my ($item_char_id);を
my ($item_char_id,$category_char_id)として

if ($self->{use_category_char_id}) {
$category_char_id = $category_id; undef($category_id);
$self->sql('insert_category_char_id')->execute($category_char_id) or db_error;
}
を追加し、


$self->sql('insert_categories_buffer')->execute($category_id, $item_id, $item_char_id, $is_delete)
or db_error;

となっているのを

$self->sql('insert_categories_buffer')->execute($category_id,$category_char_id,$item_id, $item_char_id, $is_delete)
or db_error;

とする。
引数を変更したので
'insert_categories_buffer' => q{
insert into categories_buffer (category_id, item_id, item_char_id, is_delete, timestamp) values (?, ?, ?, ?, now())
},

これを

'insert_categories_buffer' => q{
insert into categories_buffer (category_id, category_char_id, item_id, item_char_id, is_delete, timestamp) values (?, ?, ?, ?, ?, now())
},

とする。

次 sub flush_buffers


if ($max_id) {
# $LOGGER->debug("flushing $self->{buffer_table} up to id $max_id");
if ($self->{use_user_char_id} and $self->_find_column_in_buffer_table('user_id')) {
$self->sql('resolve_user_ids')->execute($max_id) or db_error;
}
if ($self->{use_item_char_id} and $self->_find_column_in_buffer_table('item_id')) {
$self->sql('resolve_item_ids')->execute($max_id) or db_error;
}

eval {
$self->sql('flush_buffer2_insert')->execute($max_id);
$self->sql('flush_buffer2_delete')->execute($max_id);
$self->sql('flush_buffer3')->execute($max_id);
};
$LOGGER->info($@) if $@; # 解析のためにロックかかってて失敗するのは構わない
}

と言う記述があるのでこれを

if ($max_id) {
# $LOGGER->debug("flushing $self->{buffer_table} up to id $max_id");
if ($self->{use_user_char_id} and $self->_find_column_in_buffer_table('user_id')) {
$self->sql('resolve_user_ids')->execute($max_id) or db_error;
}
if ($self->{use_item_char_id} and $self->_find_column_in_buffer_table('item_id')) {
$self->sql('resolve_item_ids')->execute($max_id) or db_error;
}
if ($self->{use_category_char_id} and $self->_find_column_in_buffer_table('category_id')) {
$self->sql('resolve_category_ids')->execute($max_id) or db_error;
}

eval {
$self->sql('flush_buffer2_insert')->execute($max_id);
$self->sql('flush_buffer2_delete')->execute($max_id);
$self->sql('flush_buffer3')->execute($max_id);
};
$LOGGER->info($@) if $@; # 解析のためにロックかかってて失敗するのは構わない
}

とする。

以上。とりあえずデータを入れるところは問題無いと思われる。
(誰か人柱になってw)