[ カテゴリー » 開発日誌 ]

オンタイム投稿のテスト

category-icon

 どうでしょうか。どういう仕様が(開発するのに)一番楽チンかなぁとアレコレ考えて、一応の形になったので。「日付の修正」で、未来の投稿したい時間に設定すると、その時間を過ぎるまではドラフト投稿扱いになる。更新pingがどうなるかはこれから見てみる。

 画像の添付は?
ArcdeTriomph
なんだか水平線が丸っこく見えるなぁ。

 更新PINGのテスト


— posted by martin at 09:26 pm   commentComment [2]  pingTrackBack [0]

ppBlogのお試しサイト

category-icon

 こんにちは。静的リンク出力を取り入れたのがバージョン1.7からで、今1.7.3ですが、だいぶ安定してきた感じなのでデモサイトを設置してみました。

 http://p2b.jp/demo/ppBlog173/index.php

 そのまま何の制限もなしに設置したいというのが本音ですが、さすがにそれだとセキュリティーの問題などありそうなので、一部機能制限を設けています。テーマテンプレートやCSSの編集が不可など。ただ、記事の投稿・編集などは出来るようにしています。更新PINGやトラックバックは不可にしてますが。管理画面にはadmin, passで入ることが出来ます。不具合なども見つかりやすくなるかなと。


— posted by martin at 12:43 pm   commentComment [3]  pingTrackBack [0]

MHTファイルからのログ復元

category-icon

 こんにちは、martinです。掲示板の方で、MHT形式のファイルからログが復元できないだろうかと要望があり、これは出来るべきであろうと思いますので、とりあえず作ってみました。MHT形式からのログ復元は、原理的に100%というわけには行きませんが、なるべく元のログを再現するようにしたつもりです。

 MHTファイルを作成したブログで作動させるのが原則です。使い方は、

  1. index.phpがあるディレクトリにこのファイルをアップします。
  2. 次に、同じディレクトリにmhtディレクトリを作成(FTPソフトで)、パーミッションを707にします
  3. index.phpかadmin.phpでログインした状態で、このmht2log.phpにアクセスします

 すると、ファイルアップロードの画面になるので、ここで手元にあるMHT形式のファイル(もちろんppBlogが作成したものです)を指定して「変換」ボタンを押せば、作成したmhtディレクトリにアップした月のログが作成されます。例えば、200805.mhtであれば、200805.logというログファイルが作成されます。これは、そのままppBlogのlogディレクトリに流し込むことが可能です。

 出力されるログの文字エンコードは、UTF-8EUC-JPか選べます。入力元のMHTファイルのエンコードはUTF-8でもEUC-JPでもどちらでも構いません。

 そう使う機会はないかもしれませんが(出来れば皆無がベスト)、何かの拍子にログが壊れてしまったけどMHT形式のバックアップログがある場合などに有効かと思います。バージョン1.6.4が生成するMHTファイルを参考に作ったので、古いバージョンで作成されたMHTファイルではうまく動かないかもしれませんが、その時はお知らせ下さい。

添付ファイル: mht2log.phpattachedIcon 

— posted by martin at 04:50 pm   commentComment [1]  pingTrackBack [0]

window.onloadの代替スクリプトその2

category-icon

 以前に、window.onloadの代替スクリプトGの記事を書いていたんですが、今はちょっと違ったスクリプトになっているので、この辺で、まとめもかねてメモを。

 今ではどのJavaScrptライブラリーも、画像も含めたページ読み込み完了まで待って、つまりwindow.onloadのタイミングで初期化関数を走らせるなんてことはせずに、もっと早い段階、つまりブラウザがDOMの構造を把握してパースしたタイミングを見計らって、初期化関数を実行するようにしています。Firefox、Operaでは、ブラウザ側がDOMContentLoadedというイベントハンドラを用意してくれているので、これを使います。Safariがこれを採用するのも時間の問題だろな、と前々から思っていたんですが、昨日、Safari最新版(3.1.1)も対応しているっぽいことに気が付きました。こういうスクリプトLink を書いて、イベントの発火順序を調べていたんですが、何気にSafariで動いているんでちょっとビックリしました。

 イベントの発火順序を調べる→http://p2b.jp/demo/events-order.phpLink

 IEに関しては、DOMContentLoadedというイベントハンドラはないので、以前から色々なアプローチが取られてましたが、今ではbase2Link のDean Edwardsも、jqueryLink のJohn ResigもDiego Periniが見つけたdoScrollLink を採用しています。確かに、これでも良いのですが、自分は天の邪鬼なので、HTCファイルでondocumentreadyを監視するというアプローチにしています。上に挙げたイベントの発火順序を調べるページの結果を見ると、IEに関しては、次のようなイベント順位で実行されてます。

  1. oncontentready     /* この時点でDOMのパースが終了 */
  2. deferred script      /* defer指定された外部スクリプトが実行される */
  3. ondocumentready    /* 次にHTCでのこのイベント。oParts.jsではこの時点で初期化。*/
  4. doScroll         /* 次にdoScroll */
  5. window.onload     /* 最後にこれ */

 このサイトのように、ソースをハイライト表示するスクリプトなどを使ってる場合は、数ミリ秒でも早くハイライト関数を起動させたいので、ondocumentreadyのタイミングで実行させてます。doScrollのタイミングでも良いんですが、十数ミリ秒程度遅れるんですよねぇ。oncontentreadyが一番早いですが、極々まれにこれが評価されないことがあるので、確実なondocumentreadyにしてます。ondocumentreadyとかoncontentreadyってBehavior絡みでしか使えないのが玉に瑕です。普通のイベントハンドラとして使えるようにしてくれれば良いのに、マイクロソフトさん。

 というわけで、ppBlogで使っているJSライブラリ oParts.jsLink での初期化関数は以下のような感じになってます。

oParts.start = function(F){
  if(client.Gecko || client.Opera || client.Safari){
   document.addEventListener('DOMContentLoaded', F, false);
  } else if(client.MSIE){
   $IEHTC = document.documentElement.addBehavior('js/ie.htc');
  } else o(window).on('load', F);
};

 SafariでもDOMContentLoadedが使えるようになったので記述が少なくて良いですね。IE向けのie.htcファイルの中身は以下のような感じ。

<public:attach
  event="ondocumentready"
  onevent="oParts.callee[oParts.callee.length-1]();
           document.documentElement.removeBehavior($IEHTC);
           $IEHTC=null;" />

 ちなみにイベント発火順位を調べるスクリプトですが、以下のように指定すると、このサイト以外のページも読み込めます。Yahoo!の例を挙げておきます。

http://p2b.jp/demo/events-order.php?site=yahoo.co.jpLink

 余談ですが、jquery-1.2.3のテストをしていて、気になった点がありました。以下のようなスクリプトを書くと、$()関数がwindow.onloadの後にしか実行されません(IE7の場合)。jqueryに関しては素人なので使い方が間違っているのかもしれませんが、非常に簡単な例なので気になります。

<script type="text/javascript">
  window.onload = function(){
   document.getElementById("test").innerHTML = '<p>window onloaded!</p>';
  }
  $(function(){
   alert($("#test").html());
  });
</script>

 実際の実行サンプルLink 。FirefoxとIE7で挙動が違います。Firefoxでは意図したように、window.onloadよりも先に$()が評価され、<p>original</p>とアラート表示されますが、IE7ではなぜか、window.onloadに割り当てた関数が先に実行されて、<p>window onloaded!</p>って表示されるんですよねぇ。何でかなぁ。doScroll絡み?

 

— posted by martin at 05:08 pm   commentComment [0]  pingTrackBack [0]

アップロード出来る画像のサイズ

category-icon

 3MB超の画像をアップしてみます。()元の画像サイズが大きいので、回線が貧弱だと、クリックして元の画像を表示させるのに時間がかかります。
Tamuro1
福岡の前原駅の近くにある「たむろ」。出国する前に先生方と。美味しかったなぁ。

 アップロードするのに、こちらの回線では2分弱かかりました。

 昨年の9月末に、アップできる画像の上限を可変的に扱うスクリプトを書いてたはずでしたが、これがローカルのテスト環境でのutils_admin.phpや配布版にも反映されてませんで。ローカルの別のテスト環境のディレクトリにあるutils_admin.phpにその記述を見つけました。具体的には、サムネイル画像を生成するcreate_thumbnail()関数内にその記述がありますが、動的に、アップされた画像ファイル処理に必要なメモリを取得して、一時的にサーバーのメモリ容量を増やす方法です。PHP.NETのユーザーメモにあったものです。たった数行の記述を加えるだけですが、これでかなりのサイズの画像ファイルをアップロードすることが出来ます。デジカメが高解像度になって、写真1枚のファイルサイズが1MBを超えるものが当たり前になってるので、ブログの方もこれに合わせないとですね。


Tamuro2
同じくたむろにて。これはマグロの頭だったかな。とにかくでかかった。左は自分の手。大きい方なんだけど。更にでかい。

Tamuro3
個人的には、にぎりは「しゃり」が命。ねたがいくら優れていても土台が旨くないと台無しになってしまう。

 ちなみに加えたコードは以下のようなやつです。

 $fudgeFactor = 1.7;
 $memoryNeeded = round(($info[0] * $info[1] * $info['bits'] * $info['channels'] / 8 + Pow(2, 16)) * $fudgeFactor);
 $memoryLimit = 8 * 1048576;
 if(memory_get_usage() + $memoryNeeded > $memoryLimit){
  $newLimit = ceil((memory_get_usage() + $memoryNeeded) / 1048576);
  ini_set('memory_limit', $newLimit.'M'); /* 新しく取得したメモリ量を割り当てる */
 }

追 記

 いつからかそうだったのか知りませんが、Vista Sp1のIE7上で、いつの間にか写真をお洒落に見せるスクリプトのphotoeffect.jsが動いてないのを今日発見しました。VML関係のセキュリティーアップデートで動かなくなったのか理由は定かではありませんが、色々試した結果、

<v:image src="" /> で画像を呼び込むのはダメで、<v:rect><v:imagedata src="" /></v:rect> だと上手く行くようです。なので、久しぶりにphotoeffect.jsもアップデート。ついでに、この効果を施した画像には、photo-canvas というクラス名を付けるようにしました。これで、スタイルシートで、これに対する画像の説明(キャプション)にCSSを適用することが出来ます。

.photo-canvas div.photo-caption { margin: -20px 5px 30px 5px; }

みたいに。


— posted by martin at 03:41 am   commentComment [7]  pingTrackBack [0]

T: Y: ALL: Online:
Created in 0.0081 sec.
prev
2025.5
next
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31