2007.10.29 Mon

CSSで背景を指定した場合、背景画像がIE6でちらつく

背景をCSSで指定した場合、毎回背景画像を読み込むため、画像がちらつく状態になってしまいます。これはIE6限定のバグのようです。

html {
filter: expression(document.execCommand("BackgroundImageCache", false, true));
}

上記内容をCSSに指定るすることでちらつきの問題はで解決できます。

「expression」についてですが、CSS中でJavaScriptを記述できるIE6限定の機能のようです。

2007.10.29 Mon

Wiki書式からHTMLへの変換について調べた内容

Wiki書式からHTMLへの変換機能をWiki以外のサイトに導入できないかと思い、調査した内容のログ

Wiki書式って??という人のためにWiki書式についてまとめてくれているサイトがあったので、こちらを参考にしてみてください。

オープンソース PHP Markdown

Wikiとはまた違った感じの入力書式

オープンソース Markdownの入力補助「wmd」

JavaScriptを使ったWiki変換


CGIを使ったWiki変換


HTMLからWiki書式へ変換

調べていたら希望する処理の反対の処理も見つかりました。

2007.10.29 Mon

mysql_query() のカン違い

mysql_query()を使ってPHPからqueryを実行する場合 処理が実行されたかを判定するために

$query = mysql_query($sql);
if($query == true){
/* 正常に実行 */
}

と今までしていたのですが、 === で比較したほうが早いということを知り

$query = mysql_query($sql);
if($query === true){
/* 正常に実行 */
}

としてみたらエラー連発・・・・
何でだろうと思ったリファレンスに書いてあるじゃないですか・・・

SELECT, SHOW, DESCRIBE や EXPLAIN 文では、 mysql_query() は成功した場合に resource を返します。エラー時には FALSE を返します。
それ以外の SQL 文 UPDATE, DELETE, DROP などでは、 mysql_query() は成功した場合に TRUE 、エラー時に FALSE を返します。

== のときは気づかなかったのですが、SELECT, SHOW, DESCRIBE や EXPLAIN 文では処理が正常に実行できた場合は resource を戻り値として返してくれていたのね・・・。

なるほど。戻り値の型が違うからエラーになっていたということですね。

全て true false で帰ってくると思っていました。危ない危ない・・・


 mysql_query

2007.10.29 Mon

まるでCMのような本当の話

ふと見て笑えた(笑)YouTube動画。
いくら急いでてもおばあさんを怒らせるとこわいなぁ・・・

安全第一!お年寄りを大切に!


2007.10.29 Mon

ライブラリーなど直接アクセスされたときの対応は?

ライブラリーなどphpからincludeして使うファイルを隠蔽するにはどうしたら?

以下のような記述をファイルの上部に書いておけば、直接ファイルにアクセスした場合でも、処理を実行させずにエラー表示をして処理を停止します。

また、このスクリプトが実行された場合にメール通知するようにしておけば、不正を早期発見できるかもしれません。

/* 不正アクセス処理 */
if (!isset($_SERVER["argv"][0]) || isset($_SERVER['REQUEST_METHOD']) || isset($_SERVER['REMOTE_ADDR'])) {
die("<strong>不正アクセスです。</strong>");
}



 isset
 die

2007.10.29 Mon

気になる フリーのCMS

CMSを導入すればサイトの更新が容易にできるようになります。
ただ多数のCMSが存在しているので、長所短所をまとめておきます。
※ CMS = コンテンツマネジメントシステム

siteDev2

siteDev2 はPukiWikiをベースに作られたフリーのCMSです。

更新作業が比較的簡単に出来るのですが、作成されるページが

?SiteDev2%A4%C8%A4%CF%A1%A9

のような引数付のページになるので、一般的なサイトへの導入は難しいと思われます。
ただWiki書式での更新は非常にポイントが高いです。

2007.10.29 Mon

pre の中に記述した文章を折り返す CSS

pre 要素に以下のCSSを指定しておくと pre の中に記述した文章も横幅にあわせて折り返してくれます。

white-space: -moz-pre-wrap; /* Mozilla */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */

2007.10.26 Fri

Smart-UPS 3000RM 2U について

Smart-UPS 3000RM 2U について Smart-UPS 3000RM 2U について

Smart-UPS 3000RM 2U 詳細

Network Management Card EM (ネットワーク対応オプション)

Network Management Card EMを使った場合とシリアルケーブルとの大きな違いは、UPS をネットワークへ接続することができます。

また、シリアルポートの場合は接続するポートを拡張しなければなりませんが、Network Management Card EMを使えば最大50台の機器をネットワーク制御することが可能になります。

apcupsd を使ってShutdown 制御 (ネットワーク Centos5)

net-snmp インストール

yum install net-snmp*



apcupsd インストール

# wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-3.12.3.tar.gz
# tar zvfx apcupsd-3.12.3.tar.gz
# cd apcupsd-3.12.3
# ./configure --enable-cgi --with-cgi-bin=/etc/apcupsd/cgi --enable-snmp
# make
# make install



設定ファイルの編集

$ vi /etc/apcupsd/apcupsd.conf

  • UPSCABLE ・・・ ネットワークなので ether を指定。
  • UPSTYPE ・・・ UPS のタイプは snmp を指定。
  • DEVICE ・・・ UPSのIPアドレス:ポート:MIB:コミュニティ名



設定例

UPSCABLE ether
UPSTYPE snmp
DEVICE 192.168.1.150:161:APC:public

USB・シリアルケーブルで接続する場合

必ず上記正規ケーブルを使うこと。違うケーブルを使うとUPSが落ちます。


管理画面よりクライアントの設定

  • 事前にUPS管理画面のAdministrationタブのSNMPv1=>Access Controlより接続クライアントの許可を設定する必要があります。
  • ※複数台クライアントを接続する場合は0.0.0.0のままで設定

Battery Management System サンプルデモ id : apc / pass : apc

起動

# service apcupsd start



自動起動設定

# chmod 755 /etc/rc.d/init.d/apcupsd
# chkconfig --add apcupsd
# chkconfig --list apcupsd
apcupsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off



状態確認

apcaccess status

  • 正常に通信している場合は、「 STATUS : ONLINE 」 と表示されます。



動作テスト

  • UPSのコンセントを抜くと「 Warning power loss detected on UPS UPS名 」と表示
  • TIMEOUTで設定した秒数 以内に復旧したら「 Power failure on UPS名. Running on batteries. 」と表示
  • TIMEOUTで設定した時間でシャットダウンすることを確認する


ブラウザからUPSの状況を確認

  • apacheの設定ファイルに以下を記述

ScriptAlias /apcupsd/ /etc/apcupsd/cgi/
<Directory /etc/apcupsd/cgi/>
Options ExecCGI
#order deny,allow
#deny from all
#allow from 127.0.0.1
allow from all
</Directory>

  • http://アドレス/apcupsd/multimon.cgi にアクセスして状態を確認
  • ※ apcupsd が正常に起動できていない場合は 「 Not available: upsfetch: tcp_open failed for 127.0.0.1 port 3551 」というエラーが表示されます。


設定中に起こったエラー

FATAL ERROR in apcaccess.c at line 252
tcp_open: cannot connect to server localhost on port 3551.
ERR=Connection refused

接続クライアントの許可を設定を行っていない場合は上記のようなエラーが表示され接続することが出来ませんでした。

起動時に自動でapcupsdが立ち上がらないので、
/etc/rc.local に
/etc/rc.d/init.d/apcupsd start を記述しました。

それでも正常に起動しない場合
シェルスクリプトでプロセスを監視し、起動していなければ起動させる

# vi apcupsd_cron.sh

#!/bin/sh
isAlive=`ps -ef | grep apcupsd | grep -v grep | wc -l`
if [ $isAlive = 0 ]; then
/etc/rc.d/init.d/apcupsd start
fi

# chmod +x apcups_cron.sh

# crontab -e
*/5 * * * * /設置したパス/apcupsd_cron.sh


apcupsd を使ってShutdown 制御 Windows Server 2003



C:\apcupsd\etc\apcupsd.conf で設定変更
C:\apcupsd\etc\apcupsd.event でイベントログの確認

SNMPを使って通信する場合
サービスで起動させる場合、SNMPより前にサービスが起動しようとして起動できないので、タスクスケジュールの起動時に apcupsd が起動するように設定する

PowerChute Network Shutdown Standard Shutdown 制御


設定を参考にさせていただいたサイト

システム構築に関する覚書トップページへ