タイトルリスト
さくら for MySQL ぷち改修(2005/09/01 00:08:32)
文字コード(2005/09/01 00:08:32)
さくら日記帳 for MySQL アップデート(2005/09/01 00:08:32)
表示完了速度(2005/09/01 00:08:32)
「最"新"の日記」テーブル追加(2005/09/01 00:08:32)
XMLパースエラー?(2005/09/01 00:08:32)
トラックバックping受信通知(2005/09/01 00:08:32)
DSBLを使用したSPAMコメントの回避(2005/09/01 00:08:32)
さくら混沌版更新(2005/09/01 00:08:32)
さくら混沌版α公開したいけど(2005/09/01 00:08:32)
さくら日記帳MySQL版更新(2005/09/01 00:08:32)
やっつけしごとのテンプレ(2005/09/01 00:08:32)
さくらV3(2005/09/01 00:08:32)
さくら 3.0.0 開発中(2005/09/01 00:08:32)
さくらB70、これまずいでしょ(2005/09/01 00:08:32)
0 | 1 | 2 | 3 | 4 | 5
 2005/05/13
さくら for MySQL ぷち改修
1.5 sec. の壁をようやく突破。
といっても 1.47 sec. だが。(藁

今までは COUNT(フィールド名) のデータ保持の仕方がわからず SQL をカテゴリの数だけループさせていたのだが、今日、そのデータ保持の仕方がわかったので 1発取得のコードに変更してみた。
結果、1.55 sec. → 1.47 sec. とびみょーに早くなった。

サンプル:
#!/usr/local/bin/perl5.8.6
use DBI;
my $query_strings = "SELECT category_en,COUNT(category_en) FROM diary GROUP BY category_en";
$mysql_db = DBI->connect("DBI:mysql:DBNAME:localhost", USERNAME, PASSWORD);
$mysql_sth = $mysql_db->prepare("$query_strings");
my $ret = $mysql_sth->execute;
my @MAIN_CAT_DATA;
while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) {
     printf("%-15s %5d\n", $TMP_HASH->{'category_en'}, $TMP_HASH->{'COUNT(category_en)'});
     push(@MAIN_CAT_DATA, "$TMP_HASH->{'category_en'}:$TMP_HASH->{'COUNT(category_en)'}");
}
$mysql_sth->finish;
$mysql_db->disconnect;
ただ単に $TMP_HASH->{'COUNT(category_en)'} とすればいいだけだったなんて・・・。
この部分は SELECT の後ろで指定するフィールド名がそのまま使われるようで、例えば "count(category_en)" と小文字にしたら、ブレス括弧内の文字列も "count(category_en)" と小文字にしなければならない。

だが、常時 1.50 sec. の壁を破っているわけではないのでまだ不満。
そこでどの部分が一番時間を食っているかを調べてみた結果、
0.167482 sec.
  SELECT category_en,subcategory_en,COUNT(category_en)
    FROM diary GROUP BY category_en,subcategory_en
0.164456 sec.
  SELECT category_en,COUNT(category_en)
    FROM diary GROUP BY category_en
0.145685 sec.
  SELECT * FROM diary
"SELECT * FROM diary" より遅くなるのは GROUP BY と COUNT で集計してるからか・・・。_| ̄|○
とりあえずこれ以上はどうがんばっても早くなる可能性は無い模様。

  - NO COMMENT -
TrackBack URL:[]
文字コード
山銀さんとこの namelist.txt の調子不良が治ってよかったというか。
これらの出来事を見て思った。

次からはなりふりかまわず EUC で行く。

普通なら華麗にスルー出来るところが SJIS のおかげさまでバグを誘引するようなコードを書かなければならないこの苦労。
そんな苦労が嫌だったのでさくら for MySQL は全て EUC で記述。
すると、なんと楽にコーディングできるのでしょう。
おかげさまで気を遣わずにコーディングできるすばらしさ。

まぁこのあたりは「最初もしくは最終段階で文字コードを変換」という方法で切り抜けられるわけですが、やはり文字コードを統一した方が楽っちゃー楽。

ただ、最近は EUC を扱えるエディタも出てきているのでこの辺りは問題ないかと思ってますが。

  • 山銀:もしかしたら・・・と思って調べてみたら正解だったので一安心です。
TrackBack URL:[]
 2005/05/12
さくら日記帳 for MySQL アップデート
久しぶりにアップデート。
  • 月別表示した時、一番最後の日の記事が前日の記事と一緒になってしまうバグを修正。
  • 月別表示した時、表示している月のカレンダーを表示するよう修正。
    今までは「現在の月」を表示していた。
表示速度は 1.5sec まで短縮できたが、プラグインを使っている限りこの壁は越えられそうにない。
プラグインディレクトリを無くしてみたら 0.7sec ってどういうことよ・・・。_| ̄|○

  - NO COMMENT -
TrackBack URL:[]
 2005/04/28
表示完了速度
ちょいとさくら日記帳の「表示完了速度」つーのを調べているわけだが、これがどうにもこうにもわけがわからない。

Firefox の拡張機能である "lori" を使用すると、ページの表示が完了するまでの速度を計測できるのだが、sakura.cgi を静的生成したものを呼び出すと 0.5s くらいで表示が完了するのだが、動的生成したものを呼び出すと 3.5sec くらいかかる。
内部処理は 0.7sec くらいで終わっているようなのだが、どうやらその後が問題のようで。

Content-Length を出していないのが原因か?



Content-Length を出してみたが解決せず。
試しにスクリプトそのものの処理時間を計ってみた。
% /usr/bin/time ./sakura.cgi > /dev/null
       2.26 real   0.80 user   0.28 sys
・・・・・・。



もしかしてプラグインがオーバーヘッドになっているのだろうかと思って計測。

~/public_html/nikki> mv plugin plugin_
~/public_html/nikki> /usr/bin/time ./sakura.cgi > /dev/null
       0.64 real    0.37 user    0.08 sys
~/public_html/nikki> mv plugin_ plugin
~/public_html/nikki> /usr/bin/time ./sakura.cgi > /dev/null
       2.24 real    0.87 user    0.20 sys
・・・・・・・・・・・・。(´д`;;;

更に追記で、プラグインを有効にし、かつ日記表示数を 1にしたところ速度に変わりは無かったが、プラグインを無効にして、かつ日記表示数を 1にしたところ、0.6sec くらいで帰ってきた。
どうやらデータベースの参照あたりで問題が山積みのようだ。_| ̄|○

  • たわし:>どうやらデータベースの参照あたり・・・
    毎レコードオープンクローズしてない?
  • G兄:してるかも。
    ちょっと切ってみましょうかね。

    一番最後に必ず切らないとダメですが、切れる自信なし。(汗)
  • G兄:してなかったみたい・・・。
    Connect
      exec→finish→くりかえし
    disconnect
    って感じです。
    ただ、exec→finish が半端じゃなく多い。
TrackBack URL:[]
 2005/04/11
「最"新"の日記」テーブル追加
数日前の日記を追記したり修正したりする事が多くなったので、プラグインで「最の日記」テーブルを作成。
左バー内に仕込んであります。


  - NO COMMENT -
TrackBack URL:[]
 2005/03/29
XMLパースエラー?
どうやらエラーが出ているようなので原因調査開始。
スペース?



原因判明。
< と > を特殊文字にしておりませんでした。(ぉ
ちなみに description でのスペース使用可否は「使ってもいい」はずです。(汗)

  • Casper-01:あくまで「ERRORメッセージ」ですんで ('ω';)
TrackBack URL:[]
 2005/03/18
トラックバックping受信通知
っつーのがメールで飛んで来ていてかなりビビッた。('A`;
誤報かと思ったらトラックバック受けてるし。

正常動作イイ(・∀・)!!

  - NO COMMENT -
TrackBack URL:[]
 2005/03/14
DSBLを使用したSPAMコメントの回避
まだ SPAM コメント食らったこと有りませんが先回りという事で。

メール系の公開ブラックリストデータベース (BLDB) の事を調べていると、このデータベース、実は IP アドレスのオクテットを逆さまにして BLDB のチェック用ドメイン名を付加したものを正引きしている仕組みという事。
実に簡単な仕組みなので「これは何かに使えるかも!?(゚∀゚)」と思っていた矢先、DSBL でググって見ると、やたらと "MT-DSBL" というのがひっかかる。
で、これってなんだろう?と思って調べてみると、どうやら今流行の MovableType 用のアンチ SPAM トラックバック用プラグインらしい。

そこでひらめいた。

DNS で正引きチェックによるチェックなら Net::DNS 入れちまえば対応できるのでは?

という事で早速作ってみたプラグイン "reject_blh.pl (Reject BlackListHost)"。
機能は以下の通り。
  • ローカルブラックリスト対応。
    IP アドレスはホスト単位とネットワークアドレスの両方をサポート。
    ホスト名は後方一致もしくは完全一致をサポート。
    ホスト名のみ正規表現対応。
  • 今のところ DSBL のみ参照しているが、ユーザーの任意で他の公開ブラックリストデータベースを登録可能。
  • ローカルホワイトリストは現在未対応。
    そのうち対応しないとだめかも。
正直、こいつが有効に働くことはないと思う。_no

自己満足イイ(・∀・)!!

  • G兄:というわけで本採用のためテスト。
TrackBack URL:[]
 2005/03/07
さくら混沌版更新
さくら混沌版更新しますた

一応必要なファイル及びインストーラー (sh シェル) を固めておいたので、人柱になれる方のみご利用下さい。
テンプレートも基本テンプレートとなる sakura.template 及びカレンダーを縦型にしたテンプレートの 2種類を入れています。

機能強化はここで止めておいて、先に調整に入ります。
まだまだ中途半端に放置プレイしてるところがいくつも。(ぉ

ちなみにドキュメントはありません。

  • 蝦兄:テスト版ページ覗いてみたら文字コード混在でものすごいことになってた(汗)
  • G兄:(;・3・)あるぅえ〜〜?
    混在してる?
TrackBack URL:[]
 2005/03/03
さくら混沌版α公開したいけど
設置が死ぬほどマンドクセ('A`)


このまま葬り去ろうかな。
イヤマジデ。
マトモに動かす方が大変。

とりあえず圧縮はしておいた。
マニュアルなんざ特殊タグの簡単な説明しか有りません。
テンプレート参考にして自分らしくテンプレ作ってくれとしか今はいえないレベルです。
質問は受け付けるけど答えられるかは不明。
  • namelist.txtは正規表現をサポート出来なくなりました。
    正規表現で書いてる人は元に戻してください。
  • ログファイルはそのまま使えます。
    log ディレクトリにそのままコピーでおk。
  • sakura.ini は一応そのまま使えます。
  • スクリプト系は全て変更されているので流用不可。

人柱版

  • あぞっち:むう・・・弄ろうにも時間が (ぉ
TrackBack URL:[]
 2005/02/25
さくら日記帳MySQL版更新
というわけで、こっちで話している修正を施したのと、さくら日記帳混沌版で採用した完全テンプレート化を実施。



マジで死ねた。=□○_



高機能化しているのでテンプレに必要な独自タグの数が多くなり、正規表現で置換する部分がかなり多い。
その量、恐らくさくら日記帳混沌版の約 2倍。
ファイルサイズにすると約 3倍か。

いや、マジ死ねるから。('A`)
つか テンプレ書くヤツも死ねる。('A`;

まぁ作ってしまえばあとは放置プレイでおkうぇwwwwなので別にかまわんのだが・・・。

絶対バグありそうだよなぁ・・・。

ちなみにココまで重装備にしても内部処理的には 0.3秒くらい。
問題は表示が遅いことだけ。
ここらへんはぼちぼち考えるか。

  • G兄:ちょいとテスト。
    同日のつっこみが上がらないっぽい。(謎
TrackBack URL:[]
 2005/02/23
やっつけしごとのテンプレ
さくら日記帳 V3 (混沌期) のやっつけ仕事テンプレを採用した例を展示中。
Azoしゃんは喉から手が出るほど欲しい仕様かもしれない。



まだ出せる段階
じゃないですから!!
残念!!!!



死んでもイイならダスト行ってみるテスツ。
「間違いなく死ぬ」に「おか泉」のざるうどん 1人前。

表示周りはまだ微妙に採用していない機能があるけど書き込みと修正の部分はほとんど弄ってないから普通に書けるはず。



とおもったら、MySQL 版でさっさとやりたいけどかなりマンドクセ('A`)なカレンダー縦置きのテンプレートが先にこいつで実装してしもたよ・・・。_| ̄|○
しかもなにげに全部テンプレート化完了してるし。

MySQL 版を一部追い抜いてますから!切腹!!!!!!

  • 蝦兄:おつかれさんです.
    ってか,良い感じじゃないですか.
    まだデバッグとか大変な段階だろうけど,途中経過がコレだと完成がかなり楽しみですw
  • あぞっち:ほほぅ、これは・・・
    いぢりがいがありそうな仕様ですな (フフフ
TrackBack URL:[]
 2005/02/22
さくらV3
窓から投げ捨ててイイッスか?





HTLM 構築部分がクソ過ぎて自分に対して腹が立つわ・・・。






1から新造しようかしら。



その(・∀・)後。








やっとひな形出来た。_no
もうやだこのスクリプト酷すぎ修正されるねうぇ。

さらにその(・∀・)後。

さくら日記帳の V3 爆弾バージョンがとりあえず表面上は修正完了。
記事全体をテンプレート化する事で、スクリプトのバージョンアップが行われても見た目の修正は一切行わずに済むというのは見た目を変更している人達には朗報かもしれないが、逆に初期導入時に基本テンプレートを修正しなければならないので結構手間がかかる。
まぁこのあたりは諦めてもらうほかあるまい。
この関係で ini ファイルに保存している設定のほとんどが消えることになると思う。

  • 蝦兄:なんだなんだ「爆弾ver.」って(^^;)
  • G兄:α版よりもたちが悪い、何が起こるかわからないバージョン。(ぉ
    つかマジで何が起こるかわからんよ。
    中身がスパゲティより酷いので・・・。_no
TrackBack URL:[]
 2005/02/21
さくら 3.0.0 開発中
あまりにも修正個所が多いので、メジャーバージョン番号を 1つインクリメントすることにします。(ぉ

内部がいい具合にカオスしてます。(プゲラ

ちょっとだけメモ。
  • 本文部分をテンプレに統一
  • 記事修正や投稿は初期ログインが必要だが、その後はログアウトするまで状態保持
  • スクリプトやログ全てを SJIS に統一。
    ※正直、なぜ SJIS で作り始めたのかがわからない・・・。


  • 窓枠:んーっとEUCじゃダメなんですか?
    SJISを必要とするのって蔵側だし、蔵ならEUCやらCRだのLFだのを
    意識して扱えるテキストエディタ用意しやすいと思うのですー
    CGIにしろなんにしろ鯖側にSJIS扱わせる事に対して個人的に抵抗が
    あるだけなのですがー
  • G兄:オレも激しく嫌なんですけどね。→鯖側でSJIS
    ものすごー(もう嫌になるくらい略)ーく面倒だし。
  • G兄:あ、ちなみにMySQL版は全てEUCです。
TrackBack URL:[]
さくらB70、これまずいでしょ
めっちゃくちゃヤバイ脆弱性発見。

対象:B70 以前の全てのさくら日記帳

先に緊急リリースしておきます
ついでに EUC 問題も削っておきました。
以下は修正方法。
簡単なコード追加なのでこれで対応してください。
修正方法:
sub init { 行の次に以下の行を挿入。
    error("パスワードが違います。") if !check_password($FORM{'writekey'});

sub config { 行の以下の行を参考に挿入。
    <form action="$script" method=POST>
    <input type=hidden name=mode value="init">
    <input type=hidden name=writekey value="$FORM{'writekey'}">  ←※追加

EUC を SJIS にする場合は以下の行を削除。
    sub regist { ルーチンにある以下の行
    
    # ログファイルが存在しなければ新規フォーマットで書き込み
    else { $formtmp = "$FORM{'weather'},$FORM{'subject'}\n$FORM{'comment'}"; }
    jcode::convert(\$formtmp, 'euc');  ←※これ
設定ファイル消えてたら呼んでください。バックアップこっちで確保しますた。→蝦・あぞーさん・Casper-01さん・山銀さん
それにしてもまぁ、よくもパスワード認証なしに設定の保存ルーチンに飛ばしてたもんだ。

バグメモ
  • 設定画面で "" を使ったタイトルを使用したとき、もう一度設定しようとすると消えている
    →type=text を使っていると全部出る。
    s/"/&quot;/していないのが原因。
今回のさくら日記帳で更新はひとまず止めます。
いや、内部がかなりカオス化してるので整理しないと。
MySQL 版で覚えた技術も取り入れたいですし。

MySQL版の方もあるので折り合い見ながら両方同時進行で調整かけながらにします。
ということで EUC 保存に関しては上記を参考にして無効化しておいてください。

  • 蝦兄:その前にそもそも7X系自体が動かない罠・・・(汗)
  • G兄:つっこむ所は似たようなもんッス。
  • 蝦兄:意を決してフルバージョン入れたら動きました.
    ついでに「真っ白でストップ」の原因判明.
    どうもnamelist.txtを旧来の物で使ってるとNGのようです.
  • G兄:>namelist.txt
    およ?MJSK?
    触った覚えないんだが・・・。
    って
    旧  来  っ  て  い  つ  で  す  か  。
    すんげー過去じゃないかと疑ってみるテスツ。
  • 蝦兄:namelist.txtも文字コード縛りを受けてるんではないかと・・・
  • G兄:あ、もしかしてnamelist.txtってEUCベースだから?
    こっちもSJISベースにしないとだめやね・・・。
    そういや触った覚えがおもっくそあるぞ。
    シャア専用ルーチン仕込んだアレだ。
  • 蝦兄:ですな,おそらく.
    内部で変換してあれこれ・・・とやるよりEUCならEUC,S-JISならS-JISでバシッと決めちゃった方が安全なんでしょうね.
    あるいはオプションなんかで使用するコードを決めさせて「EUCの場合はこっち」「S-JISの時はこっち」と,処理の初っぱなの方にフロー分岐を置いて完全に住み分けるとか.
    namelistもログもその設定に準拠する形で読み込むようにして,処理の行程から「変換」と言う作業を追い出してしまうのはちょっと強引ですかね(^^;)

    しかしその場合はログの文字コード(特にEUC←→SJIS乗り換え組)を変換させる手段が必要になって面倒か(汗)
  • G兄:切り替えは出来ないですな。
    それすると変換の工数が凄いことになります。
    一番の問題は s/// が SJIS だとマトモに使えない・・・。
  • Casper-01:>namelist.txt
    家も旧版ではS-JISで動いてました。
    で、継承させたら文字化けの嵐 |;ω) ニャー
    EUCで入れたら治りましたけど。

    因みに私はTapeEditorって言う、色々な文字コードや改行を扱えるエディタ使ってます。
    だもんで、EUCでもS-JISでもどっちもOKです。
TrackBack URL:[]
0 | 1 | 2 | 3 | 4 | 5
QRコード
携帯サイト試験運用
https://griffonworks.net/nikki/cgi-bin/k.cgi
1行板

備忘録
  • 無し
物欲リスト
  • Canon RF50mm F1.2L USM
  • SIGMA 20mm F1.4 EF Art
  • ニンバス チヌーク
  • OCB-1 ST II
ツーリング ドライブ兼野外撮影予定リスト