Skip to content

システム管理者の日

システム管理者の日 published on システム管理者の日 へのコメントはまだありません

7月27日はシステム管理者の日らしい(公式?サイト)。
普段ハードに働いているシステム管理者に感謝しましょうって感じ。こういうのがもっと増えるとシステム管理者もちょっとは救われるかも?

XOOPSスパム対策

XOOPSスパム対策 published on XOOPSスパム対策 へのコメントはまだありません

XOOPSを使ってたサイト、かなーり長い間放置していたらスパムの投稿が2000件以上あった。ちょっと探したけどユーザーインターフェースから20個とか100個とかまとめて消す機能がなかったのでDBを直接いじって削除した。
で、今後は少し対策しようと思って色々ネットを探した。簡単に情報が見つかるかと思ったけど、意外に情報が分散してたり不十分だったりして、思った情報を見つけるのに丸1日位かかった気がするので、まとめてみる。
○Protectorのインストール
Protectorというモジュールは名前の通り色々な攻撃からXOOPSを保護してくれるもの。
・xoops_trust_pathの設定
Protectorをインストールする前に、xoops_trust_pathというものを設定しなければいけない。これはドキュメントルートとは独立していないといけない。詳しい設定方法はこちら
・ファイルのアップロード
このページからProtectorというモジュールをダウンロード。
Protectorのパッケージを解凍するとhtmlとxoops_trust_pathの2つのディレクトリがある。
xoops_trust_path内のディレクトリを先ほど設定したxoops_trust_pathに入れる。
html以下のディレクトリは通常のモジュールと同じ場所に入れる。
通常のモジュールのインストールの仕方については、こちらのページが分かりやすかった。
・インストール
後はいつもと同じように、管理画面からモジュール管理に進んで、通常通りインストール。分からない人は先ほどのページを参考に。
後はmainfile.phpを修正。詳しくはこちら。バージョンによって若干違うかもしれないけど。
・RBLで弾く、2バイト文字が無い場合は弾く
ここまでやっただけでもそれなりに効果はあったんだけど、何かイマイチものたりない。ブラックリストとかを使用したいけど…とか思ってたら、Protectorのパッケージに入ってた。単にデフォルトでは無効になってるだけ。
xoops_trust_pathmodulesprotectorfilter_disabled 内に入っている2つのファイルを filter_enabled に移動するだけで、これらの2つのモジュールが有効になる。

Continue reading XOOPSスパム対策

JavaScriptのデバッグ2

JavaScriptのデバッグ2 published on JavaScriptのデバッグ2 へのコメントはまだありません

以前、JavaScriptのデバッグに関して、MicrosoftのScript Debuggerを紹介した
その後、MSから提供されている別のツールを見つけた。Internet Explorer Developer Toolbarというやつで、その名の通りIEのツールバーとして動作する。
機能的にはDOMツリーを表示したり、特定のHTMLエレメントを非表示にしたり、tableの枠線の表示を動的に切り替えられたりとか。まぁまぁ便利だと思うので、一度試してみるといいかも。
ダウンロードはここから。

sprintfの引数

sprintfの引数 published on sprintfの引数 へのコメントはまだありません

自分用メモ
sprintfの書式指定の引数(って呼ぶのかな?)、%d, %sとかいっぱいある。基本的な書き方は覚えてるけど、細かい事は覚えてない。man sprintfでもいいけど若干分かりにくいのでこのページを良く参考にしてる。

IEのメモリーリーク

IEのメモリーリーク published on IEのメモリーリーク への2件のコメント

JavaScriptの書き方によってはInternet Explorerのメモリリークのバグによって、メモリの使用量が増え続ける。
けど、このページによると、2007年6月にバグ修正されたみたい。
バグ修正に関するMicrosoftの公式情報はこっち
バグの詳細情報はこっち
どんなJavaScriptを書くとメモリーリークが発生するかは、MSのこのページで解説してた。
もう少し簡単に説明した個人のページもあった。
循環参照がキーワード。
IEのメモリーリークを検出するDripっていうツールもあった。このページで簡単に解説してた。
このバグはまだ直っていない?

オーストラリアとのアジア杯

オーストラリアとのアジア杯 published on オーストラリアとのアジア杯 へのコメントはまだありません

サッカーのアジアカップ、オーストラリア戦は1-1のまま決着が付かずPK戦で日本勝利!
これに関してはスポーツニュース等などでも色々報じられているので、試合についてはここでは特に書かない。
○オーストラリアのAFC移籍
サッカーに詳しくない人にとっては
「なんでオセアニアのはずのオーストラリアがアジア杯に参加するの?」
っていう疑問が当然あるのでちょっと書くと、オーストラリアはオセアニアサッカー連盟(OFC)を「脱退」して、去年からアジアサッカー連盟(AFC)に加盟している。
なんでオーストラリアがアジア?その理由は主に2つ(?)
・W杯に出場しやすくなる
・オセアニアに比べてレベルの高いアジアで自国のレベルアップを図る
W杯に出場しやすくなるってのは、今まではオセアニア予選で1位のチームは南米の5位とプレーオフを戦わなければいけなく、南米5位は結構な強豪が出てくるので、プレーオフ敗退でW杯出場を逃すってケースが過去に多かった。
2番目の理由に関しては、オセアニアではオーストラリアが実力で抜けていて、そこから少し離れてニュージーランド、残りは小国ばかりという状況で、地理的に離れているという点からも強豪国との強化試合がなかなか組めないという事。
・その他の移籍例
1992年にイスラエルがAFCからUEFA(ヨーロッパサッカー連盟)に移籍した。理由はアラブ諸国(AFC加盟)との政治的関係悪化。
その他、旧ソ連解体後、中央アジア諸国はAFCかそれともソ連が加盟していたUEFAか、どちらに加盟するか選択出来たが、全てAFCに加盟。ただ、その後カザフスタンはUEFAに移籍。
移籍とは違うけど、地理的にはアジア(とヨーロッパの境)に位置するトルコは文化的にも地理的にもヨーロッパとの繋がりが強い、レベルの高いところで自国を強化したいという意図から、昔からUEFA加盟。
○オーストラリアがアジアに入る事で
2006年W杯に出場した4カ国(日本、韓国、イラン、サウジアラビア)にオーストラリアを加えた5カ国が今後しばらくはアジアのサッカーの覇権を競っていく事になりそう。
日本とは地理的に離れている中東諸国に対して、日本のサッカーファンは特に特別な思い入れはなく、韓国がサッカーでは唯一最大のライバル。ただ、その韓国もW杯4強以降はぱっとした成績を残せていなく、停滞している感は否めない。最近では日本の方が若干先を行っているようにも思える。
そんな中、2006年W杯で日本を破ったオーストラリアは日本のサッカーファンにも記憶に残っているし、国としても貿易等で繋がりが強いので、そうした国がAFCに入る事で新たなライバルが増える事になり、日本の強化にもつながるだろうし、何よりファンにとって楽しみが増える気がする。

フランス語の勉強に役立つサイト

フランス語の勉強に役立つサイト published on フランス語の勉強に役立つサイト へのコメントはまだありません

人によって色々必要なものは違うと思うけど、自分の場合基本的な文法とかはある程度分かっているので、メール書いたりする時に辞書と活用が分かれば大体文章が書けるし、読む場合も辞書があれば何とかって感じ。
辞書はここ。英仏、仏英両方あるので便利。単語数はそれ程多くないけど。
活用はここ。日本語のサイトで便利。(トップページはここ

Continue reading フランス語の勉強に役立つサイト

JavaScript、イベントの順序

JavaScript、イベントの順序 published on JavaScript、イベントの順序 へのコメントはまだありません

最近のWebサイト・システムではとにかくとにかく「ダイナミック」で、画像・テキストなど至る所にイベントハンドラーが登録されている。
ごく原始的なやり方だと

<img src="foo.jpg" id="img1" onclick="somefunc()">

なんて方法だけど、最近ではprototype.jsのEvent.observeとかを使ってる人も多いと思う。
Event.observeだと

Event.observe('img1','click','somefunc()')

って感じになるけど、このメソッドには第4の引数がある。何に使うかだけど、例えばあるdiv領域の中にもう1つdiv領域があって(divじゃなくてもimgでも何でもいいけど)、それらに共にonclickのイベントハンドラーが設定されている場合、マウスをクリックするとどっちのイベントハンドラーが先に呼ばれるか?
答えは内側の要素に設定されたイベントハンドラーが先に呼ばれるんだけど、第4の引数useCaptureをtrueにするとちょっと違った動作に。とまぁその辺りをコントロールする引数。このページが分かりやすい説明だった。

Continue reading JavaScript、イベントの順序

SQL 最大値を持つ列を取得

SQL 最大値を持つ列を取得 published on SQL 最大値を持つ列を取得 へのコメントはまだありません

例えば以下のような製品名、サイズ、値段と最終更新日を入力するテーブルを考える。データはINSERTするのみ。同じ製品でもサイズが違えば値段は違うものとする。

PRODUCT SIZE UPDATED PRICE
シャツ1 L 2007-01-01 2900
シャツ1 S 2007-01-01 2900
シャツ1 L 2007-02-01 1900
シャツ2 S 2007-01-01 4900
シャツ2 S 2007-02-01 3900

こっから各製品の現在の値段を一覧を知りたい。PRODUCTとSIZEでGROUP BYして、各グループからUPDATEDが最大の列を選べばいい。

ま、結論から書くとこんな感じ。MySQLの場合だけど、他のDBMSでも大体一緒かと。

SELECT T.* FROM TABLE1 T
INNER JOIN (
SELECT MAX(UPDATED) AS LAST_UPDATED
FROM TABLE1
GROUP BY PRODUCT, SIZE
) AS T2
ON (
T1.PRODUCT=T2.PRODUCT
AND T1.SIZE=T2.SIZE
AND T1.UPDATED = LAST_UPDATED)

ON句に注目って感じ

ちなみにMySQLの場合、上の例でのAS T2をサブクエリーの中のFROM TABLE1の後に付けると、以下のようなエラーになった。

Every derived table must have its own alias

参考にしたのは、このページの5-2の直前に書いてあるSQL。

Continue reading SQL 最大値を持つ列を取得

怪我とか病気をした時

怪我とか病気をした時 published on 怪我とか病気をした時 へのコメントはまだありません

随分前だけど、スキーに行った時に人にぶつかって肋骨を痛めた。多分骨にヒビが入ってたんだと思う。外国で病気とか怪我をするって何かと不安なもの。とりあえず基本的な情報を書いてみる。
ケベック州モントリオールの場合だから、他の市や州では事情が違うかもしれない。
自分の場合
・近くにCLSC(後述)に行った
・CLSCで紹介された別のクリニックに行った
・クリニックで紹介された、レントゲンの撮れる施設に行った
・レントゲンを撮っておしまい
CLSCはケベック州立のクリニックみたいな感じ。最寄りのCLSCはケベック州のページから検索出来る。何か困ったらそこにとりあえず行くのが良いみたい。
あと、ホームドクター(以前ちょっと書いたエントリ)の制度も面倒というか何というか。
一昨年車にはねられた時に総合病院みたいな所に行ったけど、5時間位待たされたし、緊急の時以外は総合病院には行かないシステムなのかもしれない…(不明)
Medicareカード(健康保険証みたいなもの)があれば無料なのはありがたいけど、医療の質はあまりいい話は聞かない。
ちなみに医者だから英語は話せるだろうっていう甘い期待は2件目のクリニックで打ち破られた。ESLレベルの英語しか喋れない先生で、正直困った。