2006年1月31日火曜日

[エクセル関数] INDIRECT

INDIRECT関数とは、「文字列として入力したセルの番地や範囲名を、計算式で参照できる形に変換する。参照先を間接的に指定し、切り替えられるようにできる」というもの。
たとえば
・セルA1に「ほげ」と入れる
・セルB1に「A1」と入れる
・セルC1に「=INDIRECT(B1)」と入れる
するとセルC1には「ほげ」と表示される。
GoogleでINDIRECTで検索するといろいろと参考になるページが出てきます。

2006年1月28日土曜日

Smarty&PEAR講習会

会社でSmarty&PEAR講習会(超初級向け)をやりました。
自分のスキルレベルで講習会をやるなんて恐れ多いわけですが、とりあえずレジュメとサンプルコードを公開してみたいと思います。



〓Smarty〓
<概要>
・PHPのテンプレートエンジン
・楽天でも使っているというウワサ
・アプリケーションのロジックとデザインの切り分けが可能
*.php -> ロジックのみ
*.tpl -> デザインとコンテンツのみ
・速い
・変数の修正子(date_formatとか)
・フィルタ
・キャッシング
・HTMLとphpコードの切り分けが可能
  ↓ ↓ ↓
 ソースの可読性が高まる
  ↓ ↓ ↓
 バグ発生の確率が減る!
 (ファイル数は増えちゃうけど。。)
echo "<a href=\"" . $url . "\">" . $linktext . "</a>";
 ↓ ↓ ↓ ↓ 
<a href="{$url}">{$linktext}</a>
<サンプルコード>
smaSample.php
smaSample.tpl
<メモ>
・Smartyを継承したクラスを作っておくと楽。Googleで「MySmarty」で検索
・テンプレートの文字コードはUTF-8かEUCを使う。SJISはダメ!
・Smartyマニュアル(http://sunset.freespace.jp/smarty/)。困ったらここを見る
・[書籍]Smarty入門
〓PEAR〓
<概要>
・PHPのライブラリ集
・Perlで言うCPAN
・読み方は「ぺあー」
・エラーハンドラが便利
・使いこなせば工数大幅削減
・ライブラリ豊富
<主なライブラリ>
◆横綱
HTML_QuickForm
◆大関
DB
◆三役
HTTP_Download
Log
◆その他(まだ使ったことない)
Auth
HTTP_Request
XML_RSS
HTML_Menu
Services_Amazon
<サンプルコード>
QuickFormSample.php
QuickFormSample.tpl
<メモ>
・[書籍]PEAR入門 (とりあえず買うべし!)

2006年1月25日水曜日

Googleから振込が!

Google AdSense アカウントの非承認以来、失意のドン底。
。。。
そして、心の傷が癒えつつあった年明け正月3日、銀行の残高照会をしてみると、ななんと、、、Googleから12,630円の振込が!!!どうやら、アカウントが非承認になる直前に振込手続きが行なわれていたらしい。ラッキー♪
不幸中の幸い、地獄に仏とはまさにこのこと。Adsenseが使えないのはイタイけど、ちょっとしたお年玉でした。いやぁ、よかったよかった。

2006年1月18日水曜日

MovableTypeのGoogle API キー

MT3.2にアップグレードしたら、いくつか見慣れない機能が見つかる。「Google APIキー」というのが気になって調べてみた。
http://www.sixapart.jp/movabletype/manual/mtmanual_weblog_config.html#basic_config_others
http://www.hatayan.org/weblog/archives/2003/08/28/030825.php
さっそくGoogleAPIキーを登録し、MTに仕込んで使ってみた。
キーワード「司馬遼太郎」での結果↓
"><$MTGoogleSearchResult decode_html="1" property="title"$>

。。。なんか中国語のサイトがいっぱい出てきてしまった。言語はどうやって指定するんだろう。。

さらば、Zopeよ

ここ最近サーバーの調子が悪く、何度か再起動をしていたら
Error: The object named by "DBTab.ClassFactories.autoClassFactory" could not be imported
というエラーを吐いて、Zopeが起動しなくなってしまった。ググってみても日本語ページにはほとんど情報はない。がんばって英語ページも少し見てみたものの、どうもこのエラーは簡単には直らなさそうな感じ。。。
そんなわけで、思い切ってZopeをあきらめることにした。
まあ、ポート8080で旧コンテンツとして残しておいただけなので特に問題はない。放置し続けるとセキュリティホールになるリスクもあるのでちょうどいい機会かもしれない。
とりあえず別サーバーでZopeを起動し、wgetでコンテンツをすべて静的HTMLで保存。多少の調整をしつつコンテンツをすべて http://kawama.jp/02_04/に設置して完了。
Zopeはけっこう勉強したんだけど、結局日本ではぜんぜん普及しなかった。
ウェブアプリケーションサーバーとして、CMSとして、開発環境として、、、Zopeはウェブの統合プラットホームという意味で非常に優秀だと思うんだけど、「なんでもできる」のが逆にとっつきにくく感じられてしまっているのかもしれない。
でも、なにかの拍子で一気にブレイクする可能性もあるので、今後もちょくちょくチェックしようと思います。

2006年1月17日火曜日

PentiumとCeleronの差

仕事で数百KBのテキストファイルを20個ほど、秀丸の「全閣下」というマクロで半角カナ→全角カナ変換する、という作業をした。処理を早めるためにPentiumMのノートPCとCeleron2GhzくらいのデスクトップPCでそれぞれ処理をしたのだが、、、
。。。Celeronの処理が遅い。PentiumMの10分の1くらいの処理速度だった。結局Celeronマシンはほとんど役に立たず、9割くらいPentiumマシンで処理する結果になった。
普段PCを使っていてもPentiumとCeleronの違いはあまり実感しないけど、こういうところで差が出るんだなぁ、と勉強になりました。

2006年1月15日日曜日

memtest86

サーバーの調子が悪い。非常に悪い。
症状は、
・OSを起動してから数時間~数日経つと、何の前触れもなくサーバーが劇的に重くなる
・重いけれど、フリーズはしない
・重い間は、時計が止まる(dateコマンドで確認しても、時間が止まったまま)
・ログには特に何も残っていない
という感じ。この状態になるともうどうしようもないので、電源を切るしかない。。。
いろいろな可能性を検討してみた結果、どうもメモリがおかしいような感じだったので、memtest86というソフトでメモリチェックをしてみた。
http://www.memtest86.com/
memtest86でテストするときはメモリは1枚差しにしたほうがいいようです。うちのサーバーはメモリ2枚差しなので、1枚ずつテストしました。
で、テスト結果は、どちらも問題なし。。
その後メモリを差し直してサーバーを起動してみたところ、とりあえず問題なく1週間連続稼動中。
結局何が原因だったかはよくわからないまま。メモリがしっかり差さってなかったんだろうか。。もうしばらく様子を見てみます。

2006年1月12日木曜日

クレジットカードの番号をチェックする関数

クレジットカード番号のチェックデジットを利用した、カード番号チェックの関数を作成しました。

クレジットカード番号の法則は下記の通り。


  1. カード番号の奇数桁目を2倍にし、値が10以上になったら9を引く
  2. それぞれの数字を足す
  3. 2の結果が10の倍数になったら正しい番号。10の倍数で無ければ不正な番号


もちろん、この法則を通ったとしてもカード会社でオーソリかけないと本当に有効かどうかはわかりませんが、単純な入力ミス等を防ぐには役立ちます。
参考ページ:http://life7.2ch.net/test/read.cgi/credit/1089482722/

<?php
$credit_card_no = "4980123456789012";
if(checkCardDigit($credit_card_no)){ echo "OK牧場"; }
else{ echo "だめぽ"; }
function checkCardDigit($card_no)
{
$all = 0;
for ($i = 0; $i < 16; $i++)
{
if($i % 2){ $tmp = $card_no[$i]; }
else
{
$tmp = $card_no[$i] * 2;
if($tmp > 9){ $tmp = $tmp - 9; }
}
$all = $all + $tmp;
}
if($all % 10 == 0){ return true; }
else { return false; }
}
?>


◆2006/09/13追記
http://freeweb.supereva.com/tobiac/index.html?p
ここのページに、より深く作り込まれたクレジットカード番号チェック関数が公開されていました。checkcard.zipというやつです。
念のためこちらにもアップ→checkcard.zip

2006年1月11日水曜日

特定のIPやホストからの接続の場合のみ、コンテンツを表示する

.htaccessやhttpd.confに、
--------------------------------------------
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.012$
RewriteRule .* ___maintenance.html
--------------------------------------------
と書いてあげる。すると、
123.456.789.012からのアクセスの場合は普通にコンテンツを表示。
123.456.789.012以外からのアクセスの場合は___maintenance.htmlを強制的に表示。
ということができます。
正規表現を使えばもっと複雑な設定もできるようです。

2006年1月8日日曜日

MovableType3.2にアップグレード

最近トラックバックスパムとコメントスパムが多いので、スパム対策が施されているという、MovableType3.2にアップグレードしてみた。
アップグレードは意外とすんなり終わった。ただ、アップグレード完了後、エントリ一覧画面へ行くと
Can't handle date (52, 54, 15, 30, 10, 199) at lib/MT/Util.pm
というエラーが出る。どっかで見た事あるなぁ、、と思いつつ検索してみたら、perlのTime::Localモジュールを入れれば直るとのこと。早速
# cpan install Time::Local
で解決。
ちなみに3.2はUIがかなり変わっています。タブが効果的に使われるなどしてなかなか使いやすくなっていました。