スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

チャベリ裏口さん一時不調

先月もあったのですが、今日も一時チャベリ裏口さんが数時間にわたって不調になっていました。
たまたま気づいたので、チャベリサーチさんに切り替えたのですが、
自動で切り替えることを検討したほうがいいですかね。
でも、不調、復活を定義するのもけっこうややこしいかもしれませんね。
まったく応答がないなら、すぐわかるのですが、
一部ページだけが存在してて、データはくるものの、
それが全部なのか一部なのかって、判断するのもなかなか面倒かもしれませんね。

http://chattera.net/
http://chattera.net/chaberilist.php
スポンサーサイト

MySQLのcurrent_timestamp

MySQLでcreatedとmodifiedに

modified timestamp not null on update current_timestamp default current_timestamp
created timestamp not null default 0,

のようにして、登録日時(created)と更新日時(modified)を設定するということがありましたが、
これらのカラムの前に同じtimestampでnot null default がないtimestampのカラムを
入れるとエラーになります。。


accessed timestamp,
modified timestamp not null on update current_timestamp default current_timestamp
created timestamp not null default 0,

だと

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

がでますね。(MySQL 5.1)

accessed timestamp,



accessed timestamp not null default 0,

にしたり

accessed datetime,

にすれば大丈夫ですね。
あとはmodifiedの後ろに持ってくるとか。

もっとエラーメッセージをわかりやすくしてくれないと、何がエラーなのか、MySQLのバグなのか仕様なのか
わからないですね。

MySQLのcreatedとmodified

MySQLでレコード追加日時をcreated、レコード更新日時をmodifiedという名前にして
新規レコードが追加されたときにcreatedがその時刻になり、
レコードが更新されたときに自動的にmodifiedが更新される、お決まりの方法の備忘録です。


modified timestamp not null on update current_timestamp default current_timestamp
created timestamp not null default 0,


こんな感じで書くようです。
注意としてはcurrent_timestamp を設定できるのは1カラムだけということらしいので
createdはこのようにするしかないみたいです。

そしてレコードを追加する際には createdにnullを設定すればいいみたいです。

PHPで文字列から1文字ずつ取り出す

PHPで文字列を1文字ずつ取り出す方法のメモです。

1.str_split()をつかう
2.preg_match_all()で "(.)"を渡す
3.文字列を配列として[]を使って取り出す(PHP5以上)

という方法があるようです。


<?php


$str = "This is string split test";

$a1 = str_split($str);
print_r($a1);

preg_match_all("(.)", $str, $a2);
print_r($a2);

function mysplit($str){
$array = array();
for ($i = 0; $i < strlen($str); $i++){
$c = $str[$i];
array_push($array,$c);
}
return $array;
}

$a3 = mysplit($str);
print_r($a3);



結果は

$ php split.php
Array
(
[0] => T
[1] => h
[2] => i
[3] => s
[4] =>
[5] => i
[6] => s
[7] =>
[8] => s
[9] => t
[10] => r
[11] => i
[12] => n
[13] => g
[14] =>
[15] => s
[16] => p
[17] => l
[18] => i
[19] => t
[20] =>
[21] => t
[22] => e
[23] => s
[24] => t
)
Array
(
[0] => Array
(
[0] => T
[1] => h
[2] => i
[3] => s
[4] =>
[5] => i
[6] => s
[7] =>
[8] => s
[9] => t
[10] => r
[11] => i
[12] => n
[13] => g
[14] =>
[15] => s
[16] => p
[17] => l
[18] => i
[19] => t
[20] =>
[21] => t
[22] => e
[23] => s
[24] => t
)

)
Array
(
[0] => T
[1] => h
[2] => i
[3] => s
[4] =>
[5] => i
[6] => s
[7] =>
[8] => s
[9] => t
[10] => r
[11] => i
[12] => n
[13] => g
[14] =>
[15] => s
[16] => p
[17] => l
[18] => i
[19] => t
[20] =>
[21] => t
[22] => e
[23] => s
[24] => t
)


となります。

Baidu IMEとhao123が勝手に入り込んだ

自分のPCではないですが、Baidu IMEとhao123が勝手に入り込んでしまいました。

Baidu IMEはどこから入り込んだのかわかりませんが、
いつのまにか変換のときに変な選択肢がでてくるということで、気づきました。

hao123はBaidu IMEを更新するときにほぼ勝手にインストールされたようで、
Chromeを起動したときの画面を見て、叫び声がしたので、見に行きました。

Baidu IMEはアンインストールするときに、少女がでてきて懇願するというので有名ですが、
その画面を見る羽目になるとは。。

hao123はアンインストールしてもブラウザの設定に入り込んでしまい、
いちいち設定を書き換えないと、元に戻らないという・・・

そういえば、昔Babylonというのが勝手に入り込んだときも削除するのに苦労しました。。

Baidu IMEとhao123は中国のBaiduの製品ですが、こういうずけずけと勝手に上がりこんで、
しかもなかなか出て行かないというのはいやですね。
しかもIMEとか検索ポータルとか、情報を取り放題ということですね。。。
アンインストールしてもこっそり隠れているかもしれませんし。。
こういうところの製品はなるべく使わないですませたいですね。
そういえば、うちのサーバにくるクローラにbaiduのクローラもよくきてますね。。。

simple_html_dom.phpのcase sensitive

simple_html_dom.phpでmetaタグからContent-typeを取得する場合


foreach( $html->find('meta[http-equiv=content-type]') as $e ) {
echo $e->content, "\n";
}


と書いた場合、

http-equiv=content-type

はマッチしますが、

http-equiv=Content-type

はマッチしません。
それはすごく困るのですが、なんと「=」のかわりに「*=」を書くことで
対応できるみたいです。
つまり

foreach( $html->find('meta[http-equiv*=content-type]') as $e ) {
echo $e->content, "\n";
}

という書き方ですね。
http://stackoverflow.com/questions/2213675/how-to-get-content-type-using-html-simple-dom
なんでこれで動くのかよくわかりませんね。

ただし、getAttribute("XXX")のときは、属性名はcase sensitiveのようで、
この対応方法はいまのところ、わかりません。

PHPでmb_convert_encoding()でautoがきかない

PHPで文字コードを変換しようとして
mb_convert_encoding($str,"UTF-8","auto");
のようにautoを指定してもきかない場合があります。
この場合は
・php.iniで
 mbstring.detect_order = auto
 がコメントになってないか確認
・mb_convert_encoding()を呼び出す前に
 mb_language("Japanese");
 が行われているか確認
ということですね。
ただ、autoをつけずに済ませる方法が別にあって、autoの部分に
"ASCII,JIS,UTF-8,EUC-JP,SJIS"のように検査する文字コードを
並べて書いてもいいようです。

autoなので全部自動なのかと思っていましたが、
現在の環境が日本語環境なので、autoは"ASCII,JIS,UTF-8,EUC-JP,SJIS"の意味だというのを
phpに教えてあげる必要があるということなんでしょうね。

rsync -Rでシンボリックリンクがあると

前回rync -Rで相対コピーできるという話でしたが、
パスの中にシンボリックリンクがあると、
シンボリックリンクがコピーされてしまい、ファイルをコピーするという
本来の目的が達成されません。
そういう場合は
--no-implied-dirs
というオプションをつければいいようです。
つまり
rsync -arR --no-implied-dirs という感じですね。

備忘録でした。

rsyncで相対コピー

rsync -Rをつかってディレクトリごと丸ごとコピーができます。


rsync -arR SOURCEDIR TARGETDIR


のような感じです。
こうすると
TARGETDIR/SOURCEというディレクトリとその下のファイルが作成されます。
でも、いちちcdしてディレクトリにいって相対コピーするのもいやだというときがあります。
その場合は、コピー元のパスにドットをはさむとうまくいくようです。
つまり


rsync -arR PATH/SOURCEDIR TARGETDIR


だと、
TARGETDIR/PATH/SOURCE
という構成になっていまいますが、


rsync -arR PATH/./SOURCEDIR TARGETDIR


だと
TARGETDIR/SOURCE
という構成ができるようです。

でもこの方法は、ぐぐってもでてこないです。
もしかすると古い方式で、もうやらないほうがいいんでしょうかね。

Linux OSのバージョン確認

めったにしないので、たまに行うとすると、忘れてしまっているので
備忘録としてメモしておきます。

Linux OSのバージョン確認

[root@www ~]# cat /proc/version
Linux version 2.6.18-194.26.1.el5 (mockbuild@builder10.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Nov 9 12:54:20 EST 2010


OSが32bitか64bitか

[root@www ~]# uname -a
Linux www.sakura.ne.jp 2.6.18-194.26.1.el5 #1 SMP Tue Nov 9 12:54:20 EST 2010 x86_64 x86_64 x86_64 GNU/Linux

x86_64 になっていれば64bit

CentOSのバージョン

[root@www ~]# cat /etc/redhat-release
CentOS release 5.5 (Final)

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。