20150722雑記 AccessAnalyzerの障害に思うこと1

■現状説明

  • 先日からxrea-今はVALUE SERVERかな?のアクセス解析「AccessAnalyzer」が障害でここ1週間まともにアクセスがログられなかった。
  • どうもアクセスログ取得用設置タグのスクリプトが、アクセスログをaccessanalyzerの鯖に送る時点でアクセス遅延を起こしているようだ
  • 20150721障害で不味いなとおもった私がアクセスログ取得・解析を作り始める
  • 20150722accessanalyzer一応、「一応」障害が直ったみたい(大事なことなのでry)。
  • つくりはじめちゃったアクセス解析どうしようかなー と悩む
  • 悩んだ末、ブログのネタにしちゃえと思いつく←イマココ

■AccessAnalyzerについて

  • xrea,VALUE SERVERの無料アクセス解析
  • たしか有料版もあった気がするが登録してる人いるのか?ってぐらい無料ユーザしか居ないと思われる
  • 10年ほど前からあるツールでログの連続性も求められるので使う人は使ってる
  • 障害が1・2年に1回ほど発生していて発生のたびに取りこぼしてる!重い!読み込みが終わらない!他のものに乗り換える!などと文句をつけられている
  • 障害が多くサービス終了のためにユーザ間引きしてるんじゃね?とかまで言われる
  • かれこれ10年ぐらいサービスが続いている。
  • 障害が多いわりに解析画面が使いやすいのか、捨てるログがもったいなのか、新しいものに乗り換えることが億劫なユーザがおっさんなのか使う人は使ってる
  • 機能追加と機能改善はされません。(この10年みてきてもう断言していいとおもう)障害対応だけしかやってません。
  • 解析画面sjisでunicode対応などもされてないとおもう。
  • たぶん「アクセス解析?うちに無料のあるよ」とvalueserverが言いたいだけで続いているサービスだと思われる。
  • でもまあ10年前としてはグラフ出たりcookieで閲覧者管理したりと先進・そして無料がウケたのだとおもう。
  • で多々ある理由で乗り換えしてない人も居るしvalueserverでも一応設置方法など解説ページも作られている(現状サービス続けるつもりではあるらしい)

(20150722雑記 AccessAnalyzerの障害に思うこと2 に続きます)

※追記、
あああとスクリプト遅延の所為でツイッターのウィジェット・ツイートボタンなんかも自サイトでの表示の遅延も確認されていますね。

20150319最近のコーディング

Pubsubhubbubをページ作成時に自動で送信する機能を組み込む。
Atomのsummary CDATAにイメージを埋め込む。
AtomできてればPSHBのsendは特に難しいことはほとんどなかった。
何かをやりたい、やるべきだ、これをやるしかないと確信したら早いな。
確信がないとえーこれ作ってもなぁ、とか迷うとすぐ手が止まる。
普段の情報筋・取得・蓄積は大事にせねばのお

htaccessではまる

俺の人生で.htaccessにかけた時間はどのくらいだろう?なんつかアホらしい。

今回基本全部ひとつのファイルにアクセスを一旦集めるが、例外のURIを作ってそいつだけは別のRewriteRuleかますということをやろうとした。

失敗してめちゃくちゃ時間を浪費した。エラー部分

RewriteBase /
RewriteRule ^atom$ /atom.php [L]

アクセスに”/”がつかないこともあるのはさておき、RewriteBaseを”/”にしてるもんだから変換後のベースが”/”(.htaccessがおいてあるディレクトリ)であるにもかかわらず、転送先にも”/”がついてておかしなことになってた。

#RewriteBase /
RewriteRule ^atom$ /atom.php [L]

もしくは
RewriteBase /
RewriteRule ^atom$ atom.php [L]

ログとか取る方法もあるようだけどよくわからん。レン鯖でできるのか?もし同じ環境構築してテストなんかしようとしたらそれこそレン鯖借りる意味がない。適用されてる・されてないどのルール使ったとかわかりやすくなるロギングツール・バリデータツール無いものかねぇ

PubSubHubbubとping

昨日1日使ってpingサーバ作ってた俺が馬鹿だったようですなぁ^^;

pingはpingサーバに「俺のとこのブログが更新されたぜぃ。見にきやがれブログタイトルこれでURLこれな」みたいな。
ping打って鯖が「気が向いたときに巡回しまっせー、忙しいから何時になるかわからないけどなHAHA」
みたいなどっちも上から目線な通知と頒布の仕組みだった

今はPubSubHubbubという仕組みが一般的らしい。こいつはリアルタイム即更新!Twitterをfeedでやっちゃいましょうということらしい。

  • publisher 発行者
  • subscriber 購読者
  • hub PubSubHubbubハブ

・subscriberがこのpublisherの記事みたいよとhubに伝えておく

・publisherがhubに更新伝えるようブログ設定しておく

1)publisherが記事を更新→ブログスクリプト等がhubにfeed(atom)を伝える
2)hubはfeedの更新された部分を読み取ってsubscriberにfeedの更新部分を渡す
これでリアルタイム通信完成。

pingと比較すると
「これを見ろ・めんどいけど貰っとくわ・全然更新されてねえ」
から
「更新したぜ・ちゃんと更新あるな見たいつってる奴いるし届けるわ・みれたー」
になってるってことね。
ネットってすごいなぁ

phpの配列の再定義についてテストするよ(断固)

ほら、おっさんプログラマって昔VBとかでReDimとかやってたんだって。
Cで文字配列の最後の¥0入れ忘れてメモリ壊しまくっちゃった事あるんだって。
心配なんだって。配列の再定義なんか。
しかも配列数を指定せずに配列に値ぶちこんでこの配列にいくつ入ってるのかーなんて自動でやってくれないからカウンター仕込みまくるんだって。
連想配列、foreachの挙動も心配なんだって。なかったらwarning吐いちゃうし
「そんなところからオッサンはテストしなきゃいけないのかよwプゲラーw」とかいわれてもやっちゃうしぃー。

…まぁイイワケはここまでにして
再定義した場合の配列のカウント、内容チェックテスト
なんつか基本からやってすいません。

ソース:
<?php
//配列の再定義のテスト
$ary = array();
$ary[0]="test0";
$ary[1]="test1";
$ary[1]="test2";
print "no1:count=".count($ary)."\n";
var_dump($ary);
print "\n";
$ary = array();
$ary[0]="test00";
print "no2:count=".count($ary)."\n";
var_dump($ary);
print "\n";

結果:
no1:count=2
array(2) {
[0]=>
string(5) "test0"
[1]=>
string(5) "test2"
}
no2:count=1
array(1) {
[0]=>
string(6) "test00"
}

explodeの使い方ではまった。

Parse error: syntax error, unexpected ‘[‘ in [phpファイル名] on line [行数]

explode1行既存のコードに追加したところエラーが出た。
あーん?パースエラーのシンタックスエラーなんて、どうせクォート書き忘れたとかなんか書き間違えたんだろうと。1文・1文字ずつ見直すが思い通りのコードになってる。
??意味わからん。

$filename = explode("<>" , $filename )[0];

どこを間違うっていうんだ?

てサンプルコード作って動かしたら動いちゃう。ますます悩んで??あれこれ悩んだ末…
で結論。

サンプルコード動かすphpディレクトリのphp5.4のバージョン
本番実行するファイルをphp5.3で動かしてました。

どうもphp5.3ではexplodeの返り値配列をつづけてexplode(…)[0];みたいにいじったら駄目みたい。
下記、5.4で普通に書くコードと、5.3でも動くバージョン
単に一回配列変数に落とし込んでるだけなんだけど。

//php5.4で動くコード
$source_str=";lkj;ljasd;fjas;lkjg;alskj;glaksj";
$ary = explode("asd",$source_str);
$output = explode("asd",$source_str)[0];  //←ここで5.3では動かない
print "output=".$output;
print_r($ary);
print "<br />------------------<br />\n";

//php5.3でも動くコード
$source_str=";lkj;ljasd;fjas;lkjg;alskj;glaksj";
$ary = explode("asd",$source_str);
$aryoutput = explode("asd",$source_str);  //←変更
$output = $aryoutput[0];                  //←変更
print "output=".$output;
print_r($ary);
print "<br />------------------<br />\n";

追記:
$output = reset(explode("asd",$source_str));
これは1行でいけるんだな。分割した文字列の最初の要素を取り出す時にしか使えないけど。
最後の要素はrest→end()に変更でいける。
ま、普通最初の要素取り出す時にしかこんなexplode(…)[0]みたいな書き方しないよね。ならresetでいいかと。
もし詳しく配列内部を読み倒して処理するなら普通に配列に一旦放り込むしね。

Firefoxの簡単便利すぎる機能:ウェブサイトページ全体・全景スクリーンショットが簡単に撮影できる

ウェブサイトのスクリーンショット・スナップショットで皆さんどうやって撮影されてるでしょうか?
まあ手軽なのはgazoとかで配布してるスナップショット用ソフトインストールでもしてブラウザの見えてる部分を撮影してるかもしれません。
画面のスナップショットだけではウェブサイトページ全景、スクロールしたもっと下のほうまで撮影ができなくて、加工切抜きとかはこっちのフォトレタッチソフトでするんで「ウェブサイトページの全体を撮影したスクリーンショット」だけくれるようなものないかなー?とか思ってました。
んで、あーfirefoxならなんかアドオンとかあるかなーとか思って検索しましたらありました。


firefox本体に付いてましたw
。何も導入する必要はありません。(ver36.0.1で確認)

「ツール」「Web開発」「開発ツール表示」とし、開発ツールを表示させます。
開発ツール触ったことない人はなんだかHTML出てきてドキっとするかもしれませんが心の問題は各自処理していただきたい。

20150308firefoxdevtool1

歯車マークの「開発ツールのオプション」「ページ全体のスクリーンショットを撮影します」にチェックを入れるとカメラマークが出てきました。
これでOK。これでおしまい。簡単でしょう?あとは利用するだけ。
20150308firefoxdevtool2

  1. ウェブページ表示
  2. 開発ツール表示
  3. カメラボタン押下
  4. ダウンロードフォルダに撮影された画像が作成される。

あとはその撮影された画像を切り抜くなり、貼り付けるなり、ぼかすなり、モザイクかけるなり「お好きにすればいいじゃない?ねえそうでしょう爺?」「はっ、まったくその通りでございますお嬢様」という事です

まぁ撮影時に「撮影完了しました!」とかダイアログ出るわけでもなくホゲー・・・と何事もなく撮影できたのかできなかったのかわからんというちょっとしたワガママお嬢様お茶目仕様です。けど、やるべき仕事はきちんとやっていて、「あーやっぱりお嬢様はきちんとお勉強なさっていて成績はトップクラスなんだなぁ」というところです。
動く広告にタイミング合わせてボタン押してもきちんとそのカメラボタン押したときのスナップショットだったので狙った瞬間の画像を得ることができました。

ウェブ開発ツールになぜか力を入れてくださってるmozillafirefoxさんですけど、これはめちゃくちゃ便利すぎるわ
最初からチェックボックス入れておいてほしいぐらいの機能。

WordPressのリビジョン削除

いつも怪しげな情報を載せてるこのブログですが
リビジョンの存在も気にせず書きまくってたら1記事12リビジョンとか。
あーこれはまずいなとリビジョンの消し方を探っていたのですが、通常使えるBettar Delete Revisionとかいうリビジョンバッサリやっちゃうプラグインが、SQLiteDBでワードプレス運用してる場合使えないんだと。

だもんでさらに手動で削除しようかとおもい検索。

DELETE FROM wp_posts WHERE post_status = 'inherit' ;

inheritステータスでwp_postsに保存されてるからそれ削除しな、ということだったので削除。
ついでにどうせ消したところ容量に加算されてるだろうから圧縮かましてしたら600Kbyte→1.5Mbyte

え・・・なんで?
わからん。まぁDBもどして普通に使えてるからまあいいか。。。ホントニ?・・・

追記:
なんかやっぱだめそうだった。特にpost_typeがattachmentのやつけしちゃまずいかんじ。
画像がアップロードはされてるがメディアにでてこない。DBもどしたー
select * FROM wp_posts WHERE ((post_status='inherit') and not(post_type='attachment'))
これで出てくるやつは消していいのかなぁ・・・よーわからん

追記2:
DELETE FROM wp_posts WHERE post_type = 'revision' ;
これでいいとの記述もあったし、自分のDBみても消しても問題なさそうではある。確認はしてない

追記3:

  • wp_term_relationships
  • wp_postmeta

テーブルも関係あるらしい。こんなSQLをネットで見つけた
DELETE a,b,c FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision'

あとSQLite Integrationのプラグイン互換性チェック&改造方法にこんなコードもあった
$sql = "SELECT ID FROM $wpdb->posts WHERE post_type = 'revision'";
$col_id = $wpdb->get_col($sql);
$id_to_delete = implode(',', $col_id);
$queries[] = "DELETE * FROM $wpdb->posts WHERE ID IN ($id_to_delete)";
$queries[] = "DELETE * FROM $wpdb->term_relatiionships WHERE object_id IN ($id_to_delete)";
$queries[] = "DELETE * FROM $wpdb->postmeta WHERE post_id IN ($id_to_delete)";
foreach ($queries as $query) {
$wpdb->query($query);
}

ワードプレスの中身しらん初心者だがやりたいことはわかる。

wp_postsのpost_type=’revision’のIDを記憶しておいて、これらのテーブルの同IDのレコードも消すのがいいらしいがauto-draftが消えないとか色々問題もあるのかなぁ
せっかくリビジョン考えた仕組みになってるのになんで削除機能をワードプレス本体が持ってないのか謎だなぁ。
画像とかのリレーションもデータベースのリレー切れたら無いも同然だし。
テーマいじる管理画面よりもそういうののほうが大事な気がするんだけど。まあ愚痴終了。

ブロック要素の枠線をマウスオーバーさせたときに点滅明滅させたい

なんか入力場所とか画像とか押せますよー的な場所を示す枠線をマウスオーバーされた時に点滅・明滅をさせたい場合のサンプルコード。
javascriptのonmouse=this.~みたいなかんじでもできるけど、CSSだと簡単すぎるほど簡単。こっちのがお勧めだろう。
その他、画像等に適用するテクニックとしては

  • opacityとか使って薄消しにしたりとか
  • hover時にテキスト乗せたりとか
  • position:relativeで画像をピクつかせたりとか
  • 画像を拡大させたりとか

色々あるけど省略。俺には必要ないから。

<html>
<head>
<style type="text/css">
<!--
.waku_onmouse{
background-color:#eee;
border:    1px #000000 solid;
}
.waku_onmouse:hover{
border:    1px #ff0000 solid;
}
-->
</style>
</head>
<body>
<span class='waku_onmouse'> test </span>
</body>
</html>

実行結果:

test