文字列の置換方法(replace)
replace( 文字列 , '検索置換文字列', '置換後の文字列')
select replace('aabbcc', 'bb', 'BBBBB')
------- result -------
aaBBBBBcc
Updateでも使える
update
tableXXXX
set
col = replace( col , 'bb', 'BBBBB')
where
col = 'aabbcc'
文字列の置換方法(replace)
replace( 文字列 , '検索置換文字列', '置換後の文字列')
select replace('aabbcc', 'bb', 'BBBBB')
------- result -------
aaBBBBBcc
Updateでも使える
update
tableXXXX
set
col = replace( col , 'bb', 'BBBBB')
where
col = 'aabbcc'
ナショナルジオグラフィックの120年間分を160GBのHDDに収めた商品
http://shop.nationalgeographic.com/ngs/browse/productDetail.jsp?productId=1076014
うっふょー、これ200ドル弱なの?
すげぇすげぇと思いサイトをチェックして買おうとしたら
どうも日本への発送はしてくれないらしい。。。
かなり落ち込んでいましたら、ちょうどワシントンの友人から連絡があって
話をしたら向こうで購入して日本に送ってくれることに!!!!ラッキー!!!
持つべきものは友達です。
届くのが楽しみだなぁ。ただ全部見る時間が取れるかどうかが問題だけど。
PHP GDは、image関数を使って画像のサイズをリサイズする時によく利用します。
サンプルもググルとたくさんあるので使ってる方も多いかと思います。
いろいろな用途に使われているGDですが、意外とグラデーションをかけた画像を
GDで作成してるサンプルが無いことに気がつきまして書いてみました。
というのも、ものぐさな私はPhotoShopとかでいちいち画像を切り抜くのが非常に大嫌いなもので
ちょっとしたデザインの変更で背景のグラデーション部分を再度切り抜き直したりすることが
発生するとキーーーーっとなってしまいます。
そんなおりプロトタイプのときくらいは、動的に画像を生成してもいいでしょ!
っと、ものぐさな考えを実践すべくだらだらサンプルを探していたのですが
ちょうどいいのが見つからずあきらめて書くことにしました。
まぁ、単純にグラデーションを書ける方向にimageLine で色を変えた線を引く!
ということをやっただけです。かなりあっさりした感じでかけます。
つまり、ことさらサンプルあげるほどでもないというのが実状だったのかも。。。
$sc = 'ffffff'; // 開始色
$ec = '6699aa'; // 終了色
$w = 150; // 画像幅
$h = 50; // 画像高さ
$im = imagecreatetruecolor($w, $h);
$bgc = imagecolorallocate($im, 255, 255, 255);
$al = gradDiv($sc, $ec, $h);
$sc = str2hec($sc);
for($i=0; $i<$h; $i++){
$bgc = imagecolorallocate($im
, $sc['R'] + $al['R'] * $i
, $sc['G'] + $al['G'] * $i
, $sc['B'] + $al['B'] * $i );
imageLine($im, 0, $i, $w, $i, $bgc);
}
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
exit;
function gradDiv($sc, $ec, $l){
$S = str2hec($sc);
$E = str2hec($ec);
return array( 'R'=>($E['R'] - $S['R']) / $l
, 'G'=>($E['G'] - $S['G']) / $l
, 'B'=>($E['B'] - $S['B']) / $l);
}
function str2hec($col){
$R = hexdec(substr($col, 0, 2));
$G = hexdec(substr($col, 2, 2));
$B = hexdec(substr($col, 4, 2));
return array('R'=>$R, 'G'=>$G, 'B'=>$B);
}
上記のPHPで以下のようなグラデーションのかかった画像が表示できます。
ちょっとした変更にもすぐ対応できるので
プロトタイプ用のサイトを作るときなどに重宝します。
サンプルにしたがって、mixi OpenIDのサンプルコードを動かしてみた時の備忘録
インストール方法などは以下の参考サイトを参照
参考:http://d.hatena.ne.jp/botchy/20080820/1219255653
取得方法は、参考サイトを見てください。
この2つの証明書がmixi OpenIDの曲者です。
これを1つの証明書 both.crtにする必要があります。
どちらかの証明書にもう片方を追記します。(テキストエディッタで編集)
最初はわからなくて別々にcurl_setopt してましたが全くダメでした。
あとは上記の証明書を読み込むようにOpenID Libraryのソースに書き加えます。
Auth/Yadis/ParanoidHTTPFetcher.php 132行目と196行目付近
if ($this->isHTTPS($url)) {
curl_setopt($c, CURLOPT_CAINFO, '/path/to/both.crt');
}
忘れるとまたはまりそうなのでそのための備忘録です。
※ かなり初歩的な話ですのでご了承ください
PHPで、先月、翌月の月を取得するような場合、以下のようなプログラムを書いてしまいませんか?
echo '先月 => '. date('m', strtotime('-1 month')) .'<br>';
echo '今月 => '. date('m') .'<br>';
echo '翌月 => '. date('m', strtotime('+1 month')) .'<br>';
------ 結果 ------
前月 => 10
今月 => 11
翌月 => 12
(今日を11月01日とした場合です)
上記の結果は期待した結果で現状11月01日の場合は問題ありません。
ところが、10月31日の場合を例にとって見ます。
echo '前月 => '. date('m', strtotime('2009-10-31 -1 month')) .'<br>';
echo '今月 => '. date('m', strtotime('2009-10-31') ) .'<br>';
echo '翌月 => '. date('m', strtotime('2009-10-31 +1 month')) .'<br>';
------ 結果 ------
先月 => 10
今月 => 10
翌月 => 12
大変なことに、先月が10になってしまいました。
もっと、過去にもどって見てみると
for($i=1;$i<=12;$i++){
echo $i. 'ヶ月前 => '. date('m', strtotime('2009-10-31 -'.$i.' month')) .'<br>';
}
------ 結果 ------
1ヶ月前 => 10
2ヶ月前 => 08
3ヶ月前 => 07
4ヶ月前 => 07
5ヶ月前 => 05
6ヶ月前 => 05
7ヶ月前 => 03
8ヶ月前 => 03
9ヶ月前 => 01
10ヶ月前 => 12
11ヶ月前 => 12
12ヶ月前 => 10
もう、ありえないことになってしまいますね。
よく見ると31日のある日とない日で計算が狂ってしまうという内容です。
2月にいたっては、29~31日もアウトですね。
これはおそらく10月31日の1ヶ月前は9月31日となり
9月31日とは9月30日の次の日だから10月1日のことになるってことでしょう。
そのため、10月31日の1ヶ月前の月は10月って事になります。
strtotime の -1 month とは、日付はそのままで月だけ1減らすという意味で
決して先月にシフトするという意味ではない。
関数を作った側の理屈はなんとなくあっている気がするのですが
使ってる側にしてみると間違いやすいポイントかなと思います。
従いまして、先月、翌月とかを正確に取得するには現在の日を考慮いれて
今月の1日から起算して1ヶ月前とかになるようにします。
echo '先月 => '. date('m', strtotime(date('Y-m-1').' -1 month')) .'<br>';
echo '今月 => '. date('m') .'<br>';
echo '翌月 => '. date('m', strtotime(date('Y-m-1').' +1 month')) .'<br>';
------ 結果 ------
前月 => 10
今月 => 11
翌月 => 12
for($i=1;$i<=12;$i++){
echo $i. 'ヶ月前 => '. date('m', strtotime(date('Y-m-1').' -'.$i.' month')) .'<br>';
}
------ 結果 ------
1ヶ月前 => 10
2ヶ月前 => 09
3ヶ月前 => 08
4ヶ月前 => 07
5ヶ月前 => 06
6ヶ月前 => 05
7ヶ月前 => 04
8ヶ月前 => 03
9ヶ月前 => 02
10ヶ月前 => 01
11ヶ月前 => 12
12ヶ月前 => 11
ぶっちゃけ、昨日上記のバグを発見したからこのエントリーなんですけどね(汗)
かなり初歩的なバグが混入していて情けない思いをしました。未熟者です。
こんなのは常識だよーって言われそうですが、知らない人がいましたら後学のために参考になれば幸いです。
最近、Windows用のhamachi がアップデートされて hamachi2 になったのですが
いままで通信できていたLinux用のhamachi(Linux 0.9.9.9-20)とつながらなくなってしまった。
Windows用のhamachiは結構な頻度でアップデートされていたが
Linux用はずっとアップデートされてなかったのでとうとう互換性がなくなって
見捨てられたんだ、とちょっとあせった。
よくよく調べてみると結構同様のことで皆さん困っているようで
コミュニティーサイトには、hamachi2との接続の際に
デフォルトのKeepAliveの設定が短く変更されたことが原因ではないか?って事らしい。
そこで、KeepAlive設定を変更するには config ファイルに書け
みたいなことが掲載されていたので試してみた。
まず、linux側の各ユーザの .hamachiフォルダ(hamachiの設定が保存されている)
に、新規作成でconfigファイルを作成
touch ~/.hamachi/config
config ファイルの中に以下のKeepAliveの設定を書く
vi ~/.hamachi/config
KeepAlive 10
hamachi の再スタート
hamachi stop && hamachi start
一応上記の作業で無事に接続できました。
config ファイルを自分で新規作成するのがポイント!
初めはどこにあるのかわからず、探し回って苦労しました。
hamachiは、普段から結構利用していたので急に使えなくなると
慌てるもんですね。かなり依存度が高いことが自分なりに分かりました。
また、1つのツールに頼るのも良くないなぁと痛感。
Windows環境でファイルを操作し、Linux環境へファイルをアップロードする時に
意図せず、Shift_JIS ファイルをアップして文字化けしてしまったことありませんか?
実行時に簡単に分かる箇所ならテストすれば気がつきますが
アスキーコードだけで書かれた関数やクラスのファイルだったりすると、
エンコード問題が出ることは少ないので見落としがちです。
いちいちファイルを開いて確認するのは大変なので、一括して文字コードを確認する方法がないかと調べていたらありました。
以下のコマンドでOK。
find -name '*.php' | xargs nkf --guess
ファイル名と文字コードの一覧が表示されます。
ちなみに、一括して文字コードを変換することもできます。
# UTF-8 に変換
find -name '*.php' | xargs nkf --overwrite -w
# EUC-JP に変換
find -name '*.php' | xargs nkf --overwrite -e