hama のすべての投稿

Apacheログ解析(visitors)

今までたいしたコンテンツも置いてなかったのでほったらかしにしてきたが、MTとかのセキュリティホールを突かれてXSSの踏み台にされるとも限らないので、アクセスログの解析を真面目に行うように仕込んでみた。

Apacheのログ解析といえばawstatなんかが定番だろうが、今回はvisitorsを使ってみることにする。

クローラを個別に検出したり、いろいろ今時のweb事情に対応できているのはもちろんだが、graphvizを組み合わせることでRefererによるアクセスチェーンを視覚化出来るのがなかなかに面白い。

ネィティブバイナリで非力なマシンでも高速に解析できるのもポイント高し。

favicon

MT設置記念に、

http://www.degraeve.com/favicon/

で自サイトのfaviconを作ってみた。

絵心は皆無なので適当にお茶を濁した感じだが、ブックマークでfaviconが表示されるとそれなりに見栄えはするようで。
なにより、Firefox + FaviconizeTab でタブタイトルをアイコンだけにできるのが助かる。

最初、favicon.icoファイルを設置したときに Firefox からいくらリロードをかけても表示が変化しなくてひとしきり悩んだが、Firefoxを一旦終了させてやると無事表示されるようになった。

Haskell::素数列

今更ながらHaskellで素数列を計算するコードを書いてみる。
アルゴリズムはシンプルにエラトステネスの篩を使用。

 

-- primes.hs
main = let {
ps = primes [(2 :: Integer)..];
n = 1000;
} in putStrLn $ unwords $ map show $ take n ps
primes :: [Integer] -> [Integer]
primes (p:ps) = p : primes(filter (\x -> mod x p /= 0) ps)
--

パターン束縛(p:ps)のお陰で、head、tailに分けるのが自然に書けるところがHaskellっぽいですかね。

Haskell::ハノイの塔

以前let式をレイアウト構文で書いていたものをブレース構文で書き直してみる。
多少は見やすいか。

-- hanoi.hs
import List;
main = let {
n = 6;
m = 1000;
hs = hanoi n 'a' 'b';
} in putStrLn $ unwords $ map (\(x,y) -> [x]++"->"++[y]) $ take m hs
hanoi :: Int -> Char -> Char -> [(Char, Char)]
hanoi n x y
| length zs /= 1	= []
| n<=0		= []
| n==1		= [(x, y)]
| otherwise		= let {
z = head zs;
h1 = hanoi (n - 1) x z;
h2 = hanoi (n - 1) z y;
} in h1 ++ [(x, y)] ++ h2
where
zs = delete x $ delete y "abc"
--

MTインストール雑感

いくつかのPerlモジュール(Image::Size、DBD関連)をあらかじめインストールしておけば、さして悩む所はなし。
データベースは別サーバに分離するつもりがなければ、sqliteで十分。
mt-config.cgiは付属のウィザードを使って作成するよりも、直接テキストエディタで編集したほうが多分わかりやすい。

その他は、Apacheの設定(MT用CGIパス、スタティックファイル用のパス)、ディレクトリのオーナ、パーミッションに気をつけておけばはまる所もないと思う。このあたりはMTというよりもWebアプリケーション全般の話なので特筆すべきこともない。

CGIベースで動作しているのでパフォーマンスの懸念はあったのだが、意外にレスポンスは悪くないしサーバへの負荷もそれほどでもないようだ。まあ、もうちょっと運用を続けてみないとわからんけどね。