Awstatsで集計したアクセスログの件数が実際の件数より少なくいという報告を受け原因を調べる。

(検証)まず本当にAwstatsの集計が少ないのかApacheの生ログをローカル環境でチェック。
→たしかにAwstatsの集計は極端に少なくなっている。

(対策)Awstatsのコンフィグファイル(awstats.****.conf)の精度設定を下げた。
※赤字の部分を(デフォルト)2→(変更後)0に変更した。
#-----------------------------------------------------------------------------
# オプショナルセットアップセクション:精度 (必須ではないがAWStatsの機能を向上)
#-----------------------------------------------------------------------------

# 以下の変数を設定すると, AWStatsの検知機能(ロボット, ブラウザ, OS, Referer,
# ファイルタイプなど)の正確さを指定することができます.
# 大規模なWebサイトやAWStatsを多数の利用者に提供しているISPでは, 2の代わりに
# 1(もしくは0)を設定するといいでしょう.
# 取りうる値:
#  0 = 検知を行わない,
#  1 = 標準的な検知能力
#  2 = 最高の検知能力
# 変更: 更新が行われたときに有効になります
# ノート: LevelForBrowsersDetectionには"allphones"という値を設定することも
#         できます. この場合, 携帯/PDFブラウザの詳細な検知が有効になります.
# 訳者注: "allphones"の検知に利用される携帯/PDFの機種情報のデータベースは,
#         海外(おそらく西欧)のものなので, 日本国内では事実上役に立ちません.
# 規定値: 2 (LevelForWormsDetectionのみ0)
#
LevelForBrowsersDetection=0         # 0 ブラウザの検知を無効にする.
                                    # 2 AWStatsの速度を2%低下させる
                                    # allphones AWStatsの速度を5%低下させる
LevelForOSDetection=0               # 0 OSの検知を無効にする.
                                    # 2 AWStatsの速度を3%低下させる
LevelForRefererAnalyze=0            # 0 接続元の検知を無効にする.
                                    # 2 AWStatsの速度を14%低下させる
LevelForRobotsDetection=0           # 0 ロボットの検知を無効にする.
                                    # 2 AWStatsの速度を2.5%低下させる
LevelForSearchEnginesDetection=0    # 0 検索エンジンの検知を無効にする.
                                    # 2 AWStatsの速度を9%低下させる
LevelForKeywordsDetection=0         # 0 検索文/検索語の検知を無効にする.
                                    # 2 AWStatsの速度を1%低下させる
LevelForFileTypesDetection=0        # 0 ファイルタイプの検知を無効にする.
                                    # 2 AWStatsの速度を1%低下させる
LevelForWormsDetection=0            # 0 ワームの検知を無効にする.
                                    # 2 AWStatsの速度を15%低下させる


(結果)ログの詳細な解析はできなくなりましたが、少なくとも数値は正常であると思える値になりました。
実際こんなすんなり解決してないけど、とりあえず安心はしました。


ぷしゅー!!
AD

CakePHPのAuthコンポーネントをログイン認証に用いたサイトで発生しました。


調査してみると以下のフローでセッション切れが発生していたことがわかりました。



①サイトにログインする
サイト内のリンクから別ドメインのサイトを別ウィンドウで開く
③元ウィンドウのログインセッションが切れる




どうも別ドメインのサイトを開いた時にログインセッションを切断している様な動きです。



対策として/app/config/core.php内のSession.checkAgentをfalseに設定しました。




(変更前)Configure::write('Session.checkAgent',true);

(変更後)Configure::write('Session.checkAgent',false);
※Security.levelはlowに設定しています。


CakePHPサイトのマニュアルによると

Session.checkAgent false に設定すると、リクエストの間にユーザエージェントが変更されていないかを CakePHP のセッションが確認しなくなります。

とのことです。

http://book.cakephp.org/ja/compare/44/CakePHP-Core-Configuration-Variables



こんな簡単な設定で直っちゃうのに2日間は悩みましたよ!!まじかんべんべん。。

AD

Redmineで運用しているプロジェクトサイトが一般的な検索エンジン(google,yahooなど)から検索に引っかかってしまった!なんて経験はないでしょうか?


僕はあります(汗)


当然ログインIDやパスワードがなければログインはできませんが気分は良くないですよね。

その時に対応した方法を書きます。


手順①:ルートフォルダにrobots.txtを設置する
redmine/public内にrobots.txtというファイルを作成、以下のソースを書いて保存する。


[ソースコード]
User-agent: *
Disallow: /


※すべてのエージェント(検索エンジンボット)からRedmine内のすべてのアクセスを禁止します。


手順②:メタキーワードにインデックスさせない旨を書く。
redmine/app/views/layouts/base.rhtml内の<head>~</head>内に以下の1行を追加して保存する。
<meta name="googlebot" content="noindex,nofollow,noarchive" />
※グーグルボットからのアクセス拒否します。




この2つの対応をしたら検索エンジンに引っかからなりました。

ぷしゅーーーーーー!!!



AD
どうも、平日はもれなく会社ゾンビに徹しているぷしゆです!

ハイエンタの新しいWEBサービスのお知らせでぷ。

自分のブログで使っている新しい言葉とか、友達内だけで通じるオモチロイ言葉を「新コトバ」としてランキングに参加させてみんなに広めよう!という主旨のWEBサービスになります。

つくって、ひろがる、新コトバ コトコト

コトコトのブログパーツを自分のブログに貼っておけばこんな風に・・・









ぷしゆはまぎれもなく会社ゾンビです。


自分で登録した新コトバの意味を吹き出しで表示してくれます。

もしかしたら自分のつくった新コトバが流行語になるかもしれませんよニコニコ

サーバーサイドから値をブラウザにそのまま表示させるとjavascriptなど不正なコードを実行してしまう危険性があるため、前もって値をサーバー側でサニタイズする必要があります。

そこでコントロール側のプログラムでset時に毎回サニタイズするのはアホらしいのでsetメソッドをオーバーライドして、意識しなくても自動的にサニタイズされるようにしました。

/cake/libs/controller/app_controller.phpを以下のように編集。

class AppController extends Controller {
/*setメソッドをオーバーライド*/
	public function set($var, $val = null, $sanitize = true)
	{
		if ($sanitize) {
			 $val = $this->__sanitize($val);
		}
		return parent::set($var, $val);
	}
/*サニタイズメソッド*/
	private function __sanitize($dat){
		if (is_array($dat)) {
			foreach ($dat as $cnt=>$val) {
				$dat[$cnt] = $this->__sanitize($val);
			}
			return $dat;
		} else {
			return htmlspecialchars($dat);
		}
	}

}

逆にset時にサニタイズしたくない場合は3番目の引数にfalseを指定すればそのまま出力してくれます。

$this->set('auth',$this->Auth->user(),false);

CakePHPで開発中のアプリでmysqlテーブル内の削除レコードを削除フラグを使って判断していますが、以下の難点があります。

それはfindする時にいちいち削除フラグを条件に追加するのがめんどい事です。。。

※対象テーブルの以下フィールドで削除レコードを判断しています。

deleted tinyint(1) NULL無し ・・・ 「0」なら有効レコード、「1」なら削除レコード


そこでモデルでbeforeFindを設定してfind時に削除レコードが引っかからないようにする仕様にしました。

対象モデルのクラス内に以下メソッドを追加。


 /*削除済みは抽出しない*/
function beforeFind(&$queryData) {
$queryData['conditions']['deleted']='0';
return $queryData;
}

こうすることによりfind関連実行時に自動的に削除レコード以外を持ってきてくれるようになりました。

やっぴー!!!!!!ニコニコ

php側で画像をjpgからgifに変換する際にエラーが出る

Call to undefined function imagecreatefromjpeg()


GDをインストールしてみる。
aptitude install php5-gd
まだ同じエラー。

再ビルドしようとしたがうまくいかない。
参考)http://d.hatena.ne.jp/mallowlabs/20080707/1215443890


悩んだ挙句、結局
aptitude update
aptitude install php5-gd
で動くようになった。アップデートか…

タスク管理には今まではgoogleデスクトップのタスク使ってたんだけど、機能に満足がいかないので

RTM(remember the milk )を使い始めた。


基本的には「やる事」と「締め切り」を登録していくだけなんだけど毎日タスク一覧がメールで送られてきたりして便利。igoogle のコンテンツもあるのでいつも表示されてるからやる事を忘れずに済む。


おかげでタスクをこなすのが楽しくなってきた。細かい事でもどんどん入れちゃう。

なんか仕事の仕方の考え方が変わった気がする。


adidas Y-3 がかっこ良過ぎる件

テーマ:

ジムのウェアでも探すか~と何気なくadidasのサイトをチェックしてたら

Y-3っつーブランドを発見。


http://www.adidas.com/campaigns/y-3/aw09/index.asp?country=jp


フルFLASHでサイトの重さにいらつきながらもカッコ良すぎて興奮。

興奮しすぎてジムのウェアどころじゃありません!



・・と思いきやぷしゆさんには手が届かない値段って事に気づいて沈没。

もはや何も買う気も失せました。