2009年11月17日

libmysqlclient.so.15 => not found

ldd /etc/httpd/modules/mod_auth_mysql.so

libmysqlclient.so.15 => not found

ならば

cd /usr/lib

ln -s /usr/lib/mysql/libmysqlclient.so.15 libmysqlclient.so.15

 

 

2009年11月11日

携帯動画変換ffmpegとgpac(MP4Box)

参考もと

http://d.hatena.ne.jp/clearlab/20091026/1256532860

 

DAGリポジトリ
http://dag.wieers.com/rpm/

rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

ffmpeg関連をインストール
yum -y install lame amrnb amrwb faac faad2 nasm x264 xvidcore ffmpeg zlib-devel libX11-devel libXt-devel amrnb-devel amrwb-devel faac-devel lame-devel xvidcore-devel gcc

yum -y install ffmpeg-devel

yum -y install re2c
wget http://sourceforge.net/projects/ffmpeg-php/files/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2/download
tar jxvf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
phpize
./configure
make
make install


gpac(MP4Box)インストール

yum -y install wxGTK
yum -y install wxGTK-devel

wget ftp://ftp.pbone.net/mirror/atrpms.net/sl5-x86_64/atrpms/stable/libfaad0-2.6.1-13.el5.i386.rpm
rpm -Uvh libfaad0-2.6.1-13.el5.i386.rpm
yum -y install freeglut
wget ftp://ftp.pbone.net/mirror/atrpms.net/sl5-i386/atrpms/stable/libmad0-0.15.1b-4.el5.i386.rpm
rpm -Uvh libmad0-0.15.1b-4.el5.i386.rpm
rpm -Uvh gpac-libs-0.4.5-0.7.20080217cvs.el5.i386.rpm gpac-0.4.5-0.7.20080217cvs.el5.i386.rpm

vi /etc/ld.so.conf.d/local.conf
/usr/local/libと記入
/sbin/ldconfig実行

 

2009年10月28日

osCommerce スパム対策

contact_us.php

line22

//if(ereg("[^ -~]",$enquiry))$enquiryに2byteの文字が含まれる時だけ処理を行う
//$enquiryにひらがな(あ~ん)が含まれる時だけ処理を行う
#    if (tep_validate_email($email_address)) {
    if ((tep_validate_email($email_address)) && (ereg("[^ -~]",$enquiry))){
#    if ((tep_validate_email($email_address)) && (mb_ereg_match(".*[あ-ん]",$enquiry))){

2009年10月18日

php encode PHP Obfuscator

PHP Obfuscator

2009年10月 9日

eAccelerator php

# vi /etc/yum.repos.d/utterramblings.repo
enabled=0

enabled=1

# yum -y install php-devel

# vi /etc/yum.repos.d/utterramblings.repo
enabled=0

# wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2

# bzip2 -dc eaccelerator-0.9.5.3.tar.bz2 | tar xvf -

場所確認
# updatedb
# locate phpize

# cd eaccelerator-0.9.5.3

# phpize
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config

 

# make

# make install

ファルダ/usr/lib/php/modules/
確認

php.ini
最終行に追加

zend_extension="/usr/lib/php/modules/eaccelerator.so"
eaccelerator.shm_size="32"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.allowed_admin_path="/home/info/htdocs/foo/control.php"

Step 4. Creating cache directory

  mkdir /tmp/eaccelerator
  chmod 0777 /tmp/eaccelerator

解凍したフォルダにcontrol.phpが
あるので、ID passを変更して
設置する

2009年10月 3日

MySQL最適化サーバパラメタ

MySQL/最適化/サーバパラメタ

ここでは、サーバパラメタの最適化によるMySQLのチューンについて紹介する。

パラメタのチェック

現在の設定値を確認するには、

# mysqld --help

とする。 MySQL-5.xでは、

# mysqld --verbose --help

としないと、確認できなかった。

あるいは、クライアントから、

mysql> SHOW VARIABLES;

でもOK。

_ key_buffer_size

MyISAM テーブルのインデックスを保存しておくバッファの大きさ。サーバ全体で共有される。メモリに余裕があれば、MyISAMのみのMySQL専用サーバなら、RAMの1/2、Apache などと共用なら、RAM の1/4程度とする。ただし、サイズを大きくすると、OSのページングのために、逆に遅くなることもあるので注意。

set-variable = key_buffer=256M
MySQL> SET GLOBAL key_buffer=268435456;

Key_reads/Key_read_requests によりキャッシュミス率を算出し、これを0.003より小さくなるよう、key_buffer_size を割り当てるのが理想らしい。

_ innodb_buffer_pool_size

InnoDB テーブルのデータとインデックスを保存するためのバッファの大きさ。サーバ全体で共有される。InnoDB のみの MySQL 専用サーバなら、RAMの 70-80% 位まで上げてもよいらしい。MyISAM の key_buffer_size よりも、性能にシビアに影響する。

innodb_buffer_pool_size = 256M

_ innodb_log_file_size

データの書き込み、得に大きなサイズのデータの書き込み性能に影響する。ただし、大きなサイズほどデータのリカバリ時間を要する。サイズを変更する場合、正常停止後、作成済みのログファイル(デフォルトは /var/lib/mysql/ib_logfileX)を削除し、mysqlサーバを起動しなおす必要がある。

innodb_log_file_size = 64M

_ innodb_flush_method

OSによるバッファリングを抑制する。InnoDBのみを使っている場合に、MySQLとOSとによるダブルバッファリング状態になってしまうのを抑制する。LinuxとFreeBSDでは必要な設定だが、Windowsの場合は不要らしい。

innodb_flush_method=O_DIRECT

_ innodb_flush_logs_at_trx_commit

ログファイルへの書き込み方法を設定する。そのため、書き込みの際の性能に影響する。
0:ログファイルを使用しない、1:ディスクへ書き込み、2:メモリへ書き込み。当然、2がパフォーマンスで優るが、書き込みの信頼性をあげるなら1が妥当。

innodb_flush_log_at_trx_commit = 1

_ query_cache_size

Ver. 4.0.1 以降では、実行した Query の SQL とその結果をキャッシュし、同じ Query がキャッシュにある場合は、SQL を実行せずに、キャッシュの内容を返す機能がある。そのためのバッファの大きさ。サーバ全体で共有される。なお、該当するテーブルの内容が変更された場合には、キャッシュもなくなるので、キャッシュによる不具合が生じることはない。

query_cache_size= 16M

ただし、長いこと使っていると、キャッシュの断片化によりキャッシュからの検索処理がばかにならなくなるので、時々 FLUSH QUERY CACHE にてキャッシュのクリアをやってあげた方がよいらしい。

_ table_cache

MySQL では、DB は MyISAM ならテーブル単位でファイルとして保存されている。table_cache は、一度開いたテーブルを格納しているファイルのファイルポインタを保存しておくためのキャッシュで、次回からのアクセスを高速化する。

set-variable = table_cache=1024
mysql> SET GLOBAL table_cache=1024;

SHOW STATUS; で、Open_tables の値が大きい場合、 table_cache の数を増やした方がパフォーマンスが向上する。

_ sort_buffer_size

sort時に使用されるバッファの大きさ。ORDER BY や GROUP BY 使用時のパフォーマンスに影響する。

set-variable = sort_buffer_size=512K

_ myisam_sort_buffer_size

MyISAMでsort時に使用されるバッファの大きさ。ORDER BY や GROUP BY 使用時のパフォーマンスに影響する。

set-variable = myisam_sort_buffer_size=512K
  • REPAIR TABLE
  • CREATE INDEX
  • ALTER INDEX
    にてINDEXのソートに使用される、バッファの量らしい

_ read_buffer_size

テーブルを順次読み込んでいく時に使用されるバッファの大きさ。INDEXが使用されない場合に使われる。

set-variable = read_buffer_size=256K

_ read_rnd_buffer_size

テーブルをランダムで読み込んでいく時に使用されるバッファの大きさ。

set-variable = read_rnd_buffer_size=256K;
MySQL> SET GLOBAL read_rnd_buffer_size=262144;

ORDER BY や、GROPY BY を行う場合のパフォーマンスに影響する。

_ join_buffer_size

INDEXが使用されない場合の、テーブル結合時に使われるバッファ。

set-variable = join_buffer_size=128K

_ max_connections, max_user_connections

クライアントからの接続数の上限。無闇に大きくすると、逆にパフォーマンスを落とす原因にもなる。

set-variable = max_connections=140
set-variable = max_user_connections=120
mysql> SET GLOBAL max_connections=xxx;

_ thread_cache_size

通常スレッドは、クライアントからの接続ごとに生成され、その後破棄されるが、thread_cache_seize の数だけ破棄されずに再利用することが出来る。

set-variable = thread_cache_size=10
mysql> SET GLOBAL thread_cache_size=10;

_ wait_timeout

DBへのコネクションのタイムアウト時間。これが大きすぎると、再利用されず無駄になる。

set-variable = wait_timeout=60
mysql> SET GLOBAL wait_timeout=60;

_ skip-name-resolve

DNSの逆引きをしないようにする。この場合、クライアントの登録の際、IPアドレスまたは localhost で登録する必要がある。

skip-name-resolve

_ delay_key_write

有効にすると、index の更新の際、その table が閉じられるまでバッファを DISK に書き込まない。そのため、キー数が多い場合に有用。MyISAM にのみ適用され、デフォルトではCREATEの際に指定したもののみに適用されるようになっている。

set-variable = delay_key_write=ALL

それでは、いつtableが閉じられるか、というと...

  • キャッシュが一杯で、更にテーブルを読み込もうとしているとき
  • table_cache 以上のキャッシュがあり、その table が使われていないとき
  • FLUSH TABLES が実行されたとき

ただし、これを使う場合には、起動オプションに --myisam-recover=BACKUP,FORCE を追加すべき、とのこと。

MyISAMとInnoDBの共存

両方使用する場合、key_buffer_size と innodb_buffer_pool_size の大きさの合計は、メモリの 70-80% までにしたほうがよい。また、Linux x86 では、以下の値が 2GB 以上だと危険らしい。最悪の場合、サーバがクラッシュする。

innodb_buffer_pool_size + key_buffer_size +
    max_connections * (sort_buffer_size + read_buffer_size) + max_connections * 2 MB

これは glibc に起因する問題らしいが、この記載は 4.1 のマニュアルにしかないようなので、glibc のバージョン依存で、既に解決されているのかもしれない。また、32bitの話とも考えられる?

Tips

  • 1データベースに、大量のテーブルを作成すると、動作が遅くなることがある。この場合、table_cache を増やすとで改善できる。
  • --skip-name-resolve を mysqld のオプションに設定すると、DNS へのホスト名問い合わせを省略できる。その際は、GRANTでの指定もIPにする必要がある。
  • SSL などの暗号化された接続を使わない
  • DELETE は遅いので極力使わず、有効/無効のためのフィールドを設ける
  • 同一ホスト上でのサーバへのアクセスは、TCP/IP 接続でなく、UNIX ドメイン ソケットを使う(default は UNIX ドメイン ソケット)

コンパイルオプション

  • gccなら、'-O3'にてコンパイル。また、CXX=gcc として C++の ライブラリ(libstdc++:不要)が含まれないようにする。
  • -static オプションを付けてコンパイルする(動的リンクを用いない)。
  • strip libexec/mysqld を使用し、不要なシンボルを取り除く

参考

:MySQL:performance

2009年9月21日

VBA N-gram

'**************************
' Ngram
' 文書をN文字単位に分解
' 2009/04/24
'**************************

Function Ngram(ByVal 文字列, ByVal n)

  If Len(文字列) - n > 0 Then
    MaxIndex = Len(文字列) - n
  Else
    MaxIndex = 0
  End If

  ReDim tmpArray(MaxIndex)

  For i = 0 To MaxIndex
    tmpArray(i) = Mid(文字列, i + 1, n)
  Next i

  Ngram = tmpArray

End Function

【使い方】
第一引数に対象となるテキスト、第二引数にN(文字列長)を指定します。
(ユニグラムなら1、バイグラムなら2、トライグラムから3を指定してください)

Sub NgramSample()
  テキスト = "鏡の国のアリス"
  Debug.Print Join(Ngram(テキスト,2),"-")
End Sub

→イミディエイトウィンドウには「鏡の-の国-国の-のア-アリ-リス」と表示

--------------------------

 

わかち書き

'**************************
' Segmenter
' 文書を分かち書き
' 2009/04/20
' 事前に[ツール]-[参照設定] より
' Microsoft Word 11.0 Object Library の参照設定をしておいてください。
'**************************
Function Segmenter(ByVal 文字列)

  Dim Word文書 As New Word.Document
  Dim 単語配列()

  i = 0
  Word文書.Paragraphs(1).Range.Text = 文字列

  For Each 単語 In Word文書.Paragraphs(1).Range.Words
    If 単語.Text <> 文字列 Then
      ReDim Preserve 単語配列(i)
      単語配列(i) = 単語.Text
       i = i + 1
    End If
  Next

  Segmenter = 単語配列
  Set Word文書 = Nothing
  Word文書.Close

End Function

【使い方】
Sub SegmenterSample()
  テキスト = "鏡の国のアリス"
  Debug.Print Join(Segmenter(テキスト),"-")
End Sub

→イミディエイトウィンドウには「鏡-の-国-の-アリス」と表示されます。

【付記】
分割の候補が複数あるときに、複数出力

参考

http://pub.ne.jp/arihagne/?cat_id=104434

2009年9月 6日

IP無しref無し

ttp://alaev.ru/cgi-bin/nph-hap.cgi/000010a/http/67.59.186.119/cgi-bin/py.cgi/000110a/http/www.post-mortem.info/cgi-bin/miscopolemammediquellidiinfocamere.pl/000010a/687474703a2f2f7777772e7061676572616e6b63686b2e636f6d2f746572612f6974656d2f3330343537302f736e6f776c616e643a31303032343230302f

SetEnvIf User-Agent "\[ru\]" bad
SetEnvIf User-Agent "Anonymouse" bad
order allow,deny
allow from all
deny from env=bad

2009年9月 3日

WinHttp.WinHttpRequest

Dim oHttp  As Object
'Set oHttp = CreateObject("MSXML2.XMLHTTP")
Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oHttp.Open "GET", "http://www.yahoo.co.jp/", False
Call oHttp.SetRequestHeader("User-Agent", "Googlebot/2.1 (+http://www.googlebot.com/bot.html)")
oHttp.Send
Me.txtソース = oHttp.responseText

Set oHttp = Nothing

2009年8月21日

ms2 oscommerce add_current_page


Fatal error: Call to a member function add_current_page() on a non-object in /home/info/htdocs/catalog/includes/application_top.php on line 312

// navigation history
if (tep_session_is_registered('navigation')) {
if (PHP_VERSION < 4) {
$broken_navigation = $navigation;
$navigation = new navigationHistory;
$navigation->unserialize($broken_navigation);
}
} else {
tep_session_register('navigation');
$navigation = new navigationHistory;
}
$navigation->add_current_page();


Change it TO..........................this


// navigation history by apurba
if (tep_session_is_registered('navigation')) {
if (PHP_VERSION < 4) {
$broken_navigation = $navigation;
$navigation = new navigationHistory;
$navigation->unserialize($broken_navigation);
} else {
$navigation = new navigationHistory;
}
} else {
tep_session_register('navigation');
$navigation = new navigationHistory;
}
$navigation->add_current_page();

Archives