home ホーム search 検索 -  login ログイン  | help ヘルプ

find 検索

1191 - 1200 / 1320    [|<]  [|<]  [<]  111  112  113  114  115  116  117  118  119  120   [>]  [>|][>|]
タイトル/名前 更新者 更新日
YakiBiki/Cookbook/Permalinkを作りたい場合 msakamoto-sf 2009-01-24 19:34:28
日記/2009/01/24/YakiBiki 0.9.0 にアップグレードしてみた。 msakamoto-sf 2009-01-24 19:25:22
日記/2009/01/21/".svn"ディレクトリをまとめて消去するfindとxargs msakamoto-sf 2009-01-21 09:14:20
日記/2009/01/18/pixivに入って良かったこと。 msakamoto-sf 2009-01-18 11:35:09
日記/2009/01/12/PHPMailer for PHP4 2.0.3のclass.smtp.phpにバグ? msakamoto-sf 2009-01-12 22:29:33
日記/2009/01/12/YakiBiki 0.9.0 リリース msakamoto-sf 2009-01-12 22:17:29
TODO/YakiBiki/0.9.0 msakamoto-sf 2009-01-12 20:34:23
技術/TDD/HttpUnit解説リンク msakamoto-sf 2009-01-11 17:44:04
日記/2009/01/10/「お前ら勉強しろよ」と嘆く前に。 msakamoto-sf 2009-01-10 00:32:55
日記/2009/01/06/YakiBikiのログ出力追加でメモ msakamoto-sf 2009-01-06 16:43:52
ソート項目 / ソート順     1ページ 件ずつ表示

YakiBiki/Cookbook/Permalinkを作りたい場合  

所有者: msakamoto-sf    作成日: 2008-11-26 23:49:26
カテゴリ: YakiBiki 

2008/11時点でのYakiBikiは、デフォルトではPermalinkをサポートしていません。
これはmod_rewrite相当の機能が搭載されていないWebサーバーでも実行できるようにするために、やむなく断念しました。*1

ですが折角mod_rewrite相当の機能が搭載されているのであれば、使いたいよね・・・ということで、早速自分で調整してみました。


1. とりあえず.htaccessを修正する。

.htaccessにこんな感じのmod_rewriteの設定を付け足しました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
RewriteRule ^$ index.php [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f

# view mode
RewriteRule ^view\/([0-9]+)$ index.php?mdl=view&id=$1 [L]
RewriteRule ^view\/([0-9]+)\/$ index.php?mdl=view&id=$1 [L]

RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>

viewモジュール・・・つまり通常のページ詳細表示の場合だけに対応を絞り込みました。YakiBiki内での「記事へのリンク」は通常、viewモジュールへのリンクになるからです。
この段階でURLから ".../view/10" とかしたりして、ちゃんと表示されるか確認してみます。

2. URL生成のカスタマイズフックを作成

yakibikiの plugins/hook ディレクトリに

yb_hook_make_url.php

というのがありますが、これがYakiBiki内のURLを生成する関数のデフォルト実装です。

plugins/hook 以下にはユーザが挙動をカスタマイズ出来るようなフックポイントを置く・・・筈なのですが、2008/11時点の 0.0.1-alpha3 時点ではまだこれ1つだけなんです・・・。

とまれ、まずはこれをコピーし、適当な名前にします。今回であれば

yb_hook_my_make_url.php

とします。

続いてyb_hook_my_make_url.phpの中の関数名を直します。

function yb_hook_make_url()
→
function yb_hook_my_make_url()

細かいコードの説明は省きますが、コピーした方で関数からreturnする直前を次のように修正します。
【修正前】

    if (count($_params) > 0) {
        $base .= $_query;
    }

    return $base;

【修正後】

    if (count($_params) > 0) {
        $base .= $_query;
    }

    // ここのifブロックを挿入
    if ($module == 'view') {
        if (isset($query_params['id']) && is_numeric($query_params['id'])) {
            $base = _YB('url') . 'view/' . $query_params['id'];
        }
    }

    return $base;

3. config.phpを修正してフックを付け替える。

追加した新しいmy_make_urlフックに付け替えるには、config.phpに以下の行を付け足します。

_YB('hook.convert.make_url', 'my_make_url');

少し解説します。フックを使用する場合、次のようにyb_Util::hook()を実行します。(2008/11, 0.0.1-alpha3時点)

$ret = yb_Util::hook('フック名', $args);

ここで _YB('hook.convert.フック名') が指定されていない場合、

plugins/hook/yb_hook_フック名.php

をロードして、

yb_hook_フック名()

を実行します。
もしも _YB('hook.convert.フック名') が指定されていて、'my_フック名'となっていれば、

plugins/hook/yb_hook_my_フック名.php

をロードして、

yb_hook_my_フック名()

を実行します。

この仕掛けを使用して、''YakiBikiのデフォルト実装を残したまま''、ユーザーのカスタマイズフックを有効化できます。

以上でviewモードについてはPermalinkを作る事が出来ました。YakiBikiは内部リンクについては全て動的に生成していますのでWikiキャッシュの影響はありません(=キャッシュクリアは不要)。

*1: 実は0.0.1のalpha-2の時点ではviewやrawモジュールに対しpermalinkになるような.htaccessが添付されていた・・・が、alpha-2ではmod_rewriteを前提にしてしまっていた。IISどうするよとか、mod_rewriteがたまたま入ってないWeb鯖上で実行したい時どうするよとか考え出した結果、mod_rewriteによるpermalinkは実装しないことにalpha-3では変更した。

プレーンテキスト形式でダウンロード
現在のバージョン : 2
更新者: msakamoto-sf
更新日: 2009-01-24 19:34:28
md5:719a85c9d8043a77a4a40967ab644cac
sha1:14bb8969749e5d78c277215a0ceea0c40af50c37

日記/2009/01/24/YakiBiki 0.9.0 にアップグレードしてみた。  

所有者: msakamoto-sf    作成日: 2009-01-24 19:21:46
カテゴリ: YakiBiki 

やっぱり「バックアップ機能」が無いと手間だなと思う。fix-perms.phpで一旦パーミッションを変更した後、データファイルをバックアップする必要がある。
YakiBikiは自分でディレクトリを作ってしまうので、動作権限やumaskの値によっては一般ユーザでYakiBikiが作成したディレクトリ中のファイルにアクセスできなくなる場合があり、特に共用レンタルサーバではそうなる確率が高い。
というかこのサイトのレンタルサーバがそう。

なので、出来ればYakiBiki自身がtar.gzなりzipファイル圧縮を生成してDL出来るようにしてくれると大変に助かるけど、まぁそれはまた後々。

細かい点だけど、カテゴリがアルファベット順に並ぶようになって、多少使いやすくなってほっとしてます。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-24 19:25:22
md5:52b8785c75624898c456e822283fc599
sha1:612c26515acea67a6521eb84b358314fd8845041

日記/2009/01/21/".svn"ディレクトリをまとめて消去するfindとxargs  

所有者: msakamoto-sf    作成日: 2009-01-21 09:09:46
カテゴリ: Linux Subversion 
find <path> -type d -name .svn | xargs rm -rf

以上。
いえ、チェックアウトディレクトリが要らなくなって(SVNのリポジトリが吹き飛んで、開発初期だったので手動でSVNサーバからリストア→リポジトリをゼロから作り直し)、でも念のためローカルコピーは取っておきたいのだけれど、間違ってsvnコマンド叩いて古いのが入ってしまうのも困るなと(リポジトリのURLは同一なので)。

なので、.svnディレクトリをまとめて消去したかった次第。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-21 09:14:20
md5:e2a778bbaf94a9dc4c6989cc1a3f7dfe
sha1:159615c39c42b7fab9da58279283046741191479

日記/2009/01/18/pixivに入って良かったこと。  

所有者: msakamoto-sf    作成日: 2009-01-18 11:32:01
カテゴリ:

・知り合いの漫画家がpixivに入ってて、リアルタイムで落書きとか絵チャットとかを見れるライブ感が楽しい。
・東方の萌え画像がGETし易い。
・アナログ画像の絵師が意外と面白い。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-18 11:35:09
md5:5c2840457ccac4cc56de4fef78aa1a46
sha1:70e48ce37f9f46a07957d240e090f27af4a5ebd3

日記/2009/01/12/PHPMailer for PHP4 2.0.3のclass.smtp.phpにバグ?  

所有者: msakamoto-sf    作成日: 2009-01-12 22:20:52
カテゴリ: PHP 

YakiBikiでメール通知機能をつけようと思って、LGPLのPHPMailer for PHP4 2.0.3(2009/01時点での最新)をDLしてSMTPドライバで動かしてみたが・・・
http://phpmailer.codeworxtech.com/index.php?pg=phpmailer

[12-Jan-2009 10:55:41] PHP Notice:  
Undefined variable:  str in ...\yb-php\libs\phpmailer\class.smtp.php on line 1043

とか出て、MTAが250返してるのに get_lines() でそれが取れていないようで、いろいろと失敗する。
で、class.smtp.php のget_lines()をデバッグしていたら・・・

   while($str == @fgets($this->smtp_conn,515)) {
              ^ !?

ここで上記Noticeが出力されていたらしい。

気になって、「そういえばXoopsもPHPMailer使ってたよな・・・」とXoopsCubeの2009/01/12時点でのlegacy版をDLして中を覗いてみたら、PHPMailerは2.0.2を使っていた。で、問題の箇所は

   while($str = @fgets($this->smtp_conn,515)) {
              ^

となっていた。まぁ当然ですよね。

PHPMailer開発元へのレポートはまだ挙げたりしてないんですが、とりあえずYakiBikiはそこ直したやつを入れてます。皆様、ここのところ注意して PHPMailer for PHP4 2.0.3 をご利用下さい。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-12 22:29:33
md5:60f50c4412842d507b1772a9a8dbb45e
sha1:02e5c9772582375941f59236a67a8e51efca6342

日記/2009/01/12/YakiBiki 0.9.0 リリース  

所有者: msakamoto-sf    作成日: 2009-01-12 21:58:18
カテゴリ: YakiBiki 

YakiBiki 0.9.0 をリリースします。

https://sourceforge.net/forum/forum.php?forum_id=906879

SourceForge.netのプロジェクトサイトよりダウンロード可能です。

http://sourceforge.net/projects/yakibiki

TODO/YakiBiki/0.9.0 でフリーズしていますが、主な変更点を以下に示します。

  • 使い勝手の向上(自分で使ってみたフィードバック)
  • ログ出力の調整
  • 簡易ではあるがメール通知機能
  • ログイン処理をHOOK化し、ユーザ名/パスワードの突き合わせ処理をカスタマイズ可能とした。
  • サポートスクリプトを追加し、"ybwebtools/"ディレクトリ以下にまとめた。

本サイトにて自分で使ってみた結果と、お仕事で要求された機能がこれで一通り揃った格好です。
当初はバージョン番号は 1.0.0-rc1 のつもりでしたが、まだ早すぎる気がしますので、0.9.0としました。
1.0.0へ向けての目標は TODO/YakiBiki/1.0.0 の方に移しました。

2007年の10月よりYakiBikiを初めて、既に1年と3ヶ月が過ぎています。これまでの間何とか続けて来れたのは、周囲の理解があってこそと思います。自分のサイトでも使い始めることができて、ようやくお見せできる形になりつつあります。ひとまずこの場で御礼申し上げます。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-12 22:17:29
md5:23a9e332757631ccd77eda48e1844a04
sha1:c07a5bb1071ad631274fe6b4dba8fd4bd2be2e06

TODO/YakiBiki/0.9.0  

所有者: msakamoto-sf    作成日: 2008-11-24 00:17:33
カテゴリ: TODO YakiBiki 

YakiBiki 0.9.0 目安TODOリスト

Windows上でのtar.gz圧縮は避ける事。ツールによってファイル名がおかしくなったり空ディレクトリが無視されたりして、トラブルの遠因になりうる。

SVN Repository Browser : http://yakibiki.svn.sourceforge.net/viewvc/yakibiki/

2009-01-12, rev521にて0.9.0へフリーズ

メイン目標

  • メールにて更新報知
    • リビジョン517 - 519にて対応。
    • edit, datainfo, deleteにおいて簡単なメール送信を実装。PHPMailerを使用。
    • 題名にタイトルとID、本文はviewへのURLのみというシンプル実装。まずはここまで。
    • 本来であれば新旧のDIFFや物理ファイルの添付等が欲しいが、まずはここまでにしておく。
      • 各モジュールでのデータの取り方がばらけているので、整理したい。
  • ログ出力の充実(監査を意識)
    • リビジョン507, 510, 511にて対応。
  • 外部認証機能対応(TypePadなどOpenID系)
  • ログイン時のユーザ名とパスワードの突合せ処理をHOOK化
    • OpenIDみたいに外部のサイトと行ったり来たりするようなのはさすがに今の実力では無理。
    • POP3のログインとかLDAPみたいに、単にユーザ名とパスワードを突き合わせるのであれば、hookにしてカスタマイズ可能にできる。
    • リビジョン513, 514, 515にてhook化、POP3ログインのサンプルを実装、対応。

細かい機能追加・調整

  • editとdatainfoでの更新時に、yb_Session::set_flashでflashメッセージを表示するよう調整。
    • リビジョン520にて対応。
    • 実運用では画面の切り替わりが早くて、「え?保存されたの?」となってしまう。保存完了を分かりやすく表示したかった。
  • ユーザ名に"."(ピリオド)を使えるようにする。但し連続する"."、および"."で始まる/終わるユーザ名は入力チェックエラーとする。
    • リビジョン516にて対応。
  • Smartyのバージョンを2.6.22へ更新
    • リビジョン512にて対応。また、SmartyはLGPLということで、Smartyに入っていたLGPLのライセンスファイル(COPYING.lib)とREADMEファイルを念のため追加。
  • _YB()の設定をダンプ出力する ybwebtools/check-ybvars.php を追加。
    • リビジョン506にて対応。
  • user, group, aclで、削除時に、被参照カウントを取得して参照されていれば弾くようガードしたい。
    • ACLの削除時にacl_to_dataインデックスを取得してガードするよう修正。リビジョン501にて対応。
    • groupの削除時に全ACLをサーチしてガードするよう修正。リビジョン503にて対応。
    • userについては、削除自体をデフォルトで禁止するよう修正。_YB('disable.user.physical_delete')がtrueのときのみ削除可とする。リビジョン504にて対応。
  • データ編集時に、編集前のデータ本体のチェックサムを取得しておき、複数人による編集の衝突を検出する。
    • リビジョン500にて対応。
  • カテゴリの並び順を名前のソート順に
    • リビジョン499にて対応。
  • trackback項目を隠す。
    • リビジョン494, 495, 496にて対応。
    • 隠すのではなく属性自体を消去した。サイト内TBを考えるのであれば残しておいても良いかな・・・とも思ったんだけど、サイト内TB的な用途であれば普通にコメント使えばOKなので・・・TBという概念自体を一旦YakiBikiから消去します。
  • umask()が未設定の場合、nobodyで作成されたディレクトリとかが消せなくなる。
    • umask()の設定をconfig.phpに追加。
    • fix-perms.phpみたいな、パーミッション操作専用のサポートスクリプトを添付すべき?
      • umask()をconfig.phpにデフォルトで含ませると、セットアップ直後にサーバ環境毎に手直ししなければならなくなるので、却って手間が増えると判断
      • umask()はconfig.phpに手動で任意に埋め込むことにして、ybwebtools/にfix-perms.phpを追加することで対処。リビジョン480 - 487まで。
  • yb_Session::hasRole(), isAuthenticated()を利用するよう修正。
    • 怖くて消せない・・・。
  • changelog、直前のchangeログを編集ボックスに予め表示させておく。
    • これ、バージョン番号を変えずに上書きする時に、クリアされてると前のchangelogまで消えてしまうので。
  • datatype毎のテンプレートを整理。ネストが厭らしい状況になってる。
    • リビジョン489 - 493
  • データ編集時に、タイトルやbookmarkのnoteなどを「情報」欄へ移動。編集時は表示オンリーに。
    • こうしておかないと、タイトルまでバージョン管理できると思われそうだから。
    • リビジョン489 - 493
    • noteについては断念。とりあえずタイトルをdatainfo(「情報」)モジュールに移動。
    • noteなどDataType固有のフィールドまでdatainfoに移すと結構手間。ネガティブな理由。tx/Edit.phpやtx/DataInfo.phpからほぼ作り直しになる。

BUG FIX

  • ユーザ名、メールアドレスの"@"より前で"."(ドット)を使えるようにする。
    • リビジョン516, 521にて対応。
    • 実際の運用時に"."が含まれるアカウント登録が必要であることが確認された為。
  • copyするときの"Copy XXXX Document from YYYY"の日本語訳が欠落。
    • リビジョン489にて修正。
  • setup.phpでの初期化データへのファイルパスが、setup.phpへの相対パスになっている。246行目とか。
    • リビジョン478にて修正。
  • check-perms.phpでのパーミッションチェックが変かも。ディレクトリが無くてもグリーンになる?
    • realpath()の結果は空欄。
    • リビジョン498にて修正。realpath()の結果をディレクトリ書き込みチェックに使っていた影響で、Windows上では書き込み可として判定されてしまっていた。("\dummy"のようなファイルの書き込みチェックがtrueになっていた)
  • lsモジュールで、show_edit_menu=falseにしてheader_tplを取り込むよう修正。- revision 471にて対応
  • groupモジュールのユーザーリストで、権限がシステム管理権限とグループ管理権限しか表示してないような気がする・・・。
    • リビジョン497 : groupモジュールと併せて、ユーザ一覧系のテーブルデザインでカラムの配置を修正。user/aclも修正。
  • search, viewモジュールのテンプレートで、作成日の表示がcreated_atを表示してしまっている。
    • →created_atは内部的に保持する値で、ユーザーにより変更可能な「表示・検索上の作成日」はpublished_atが正解。revision 472にて対応。
  • image wikiプラグインで、srcの中身で"&"を"&amp;"にするとFireFoxで画像が表示されなかったのを修正。
    • →yb_Util::make_url()じゃなくて、"&"を変換しない yb_Util::redirect_url()に修正。 : revision 473にて対応。
    • →対応は間違ってなかったけど理解は間違っていた。HTMLソースをよくよく眺めたら "&amp;"の部分が"&amp;amp;"と二重にエスケープされていた。
    • ←原因は make_urlを使った後に、さらにh()でエスケープした為の二重エスケープ。
    • →同様にID指定した時のリンク先URLも二重エスケープされていた。
    • →ID指定以外の絶対パスやyb://で始まる相対リンク時にもエスケープしなくちゃなので、imgタグ出力時点でのh()によるエスケープははずせない。
    • →というわけで、ID指定時はredirect_url()を使うようにして、imgタグ出力時点でのエスケープに統一。revision 474.

プレーンテキスト形式でダウンロード
現在のバージョン : 19
更新者: msakamoto-sf
更新日: 2009-01-12 20:34:23
md5:70ef06ce04d29104455138d7e5d730c6
sha1:dedd704df7f30ba7c44de7646d19dc7e23b14525

技術/TDD/HttpUnit解説リンク  

所有者: msakamoto-sf    作成日: 2009-01-11 17:37:19
カテゴリ: Java Web プログラミング 

中身を検査するにはHttpUnit, 負荷テストならJMeterという使い分け。
なおHttpUnitはRhinoと組み合わせることでJavaScriptによる画面遷移もエミュレートできるようだが、JavaScriptにエラーがあったりIE独自のJSコードではおかしくなる場合は、JSサポートをOFFにする。

なお商用製品として1万円を切る(安い・・・)、高機能なWebテストツールとして "SteadyForm" というのを見つけた。テスト駆動開発を強く意識している会社の製品。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-11 17:44:04
md5:9553c05dcb7a829869edcd0d24f06062
sha1:92c5e02caf61d1729233a98c72ed3adeebf03267

日記/2009/01/10/「お前ら勉強しろよ」と嘆く前に。  

所有者: msakamoto-sf    作成日: 2009-01-10 00:14:05
カテゴリ:

その人を見下げた態度がまず鼻につくんですよ。だから誰もあなたの言うことを聞こうとしない。
同僚に見下される周囲の気分を想像もせず、実際の現場で采配を振るったことすらない人間が、優等生気分で「勉強しようよ」と叫んだって、誰も振り向かない。あなたは結局優等生で居られる自分しか見ていないんだから。
最前線で地獄を見ること無しに、たらたらと雑誌やWebの記事を眺めてちょろっと手を動かしただけで「自分は周りの奴らより勉強してるんだ、偉いんだ」と悦に浸りたいだけでしょ?
そんなに最新技術が好きならベンチャーに転職すれば?自分で起業すれば?
結局見下せる人間が必要なんだよね。自分より頭が悪いと思える人間が周りに居ないと駄目なんだね。
本当に実力をつけようとしている人間は、もっと謙虚だと思うよ。「自分は違う」と悦に浸っている暇なんて無いんじゃない?
まずあなたが先に頭を下げるべきじゃないの?何様のつもり?

というわけで、「あなた」=「自分」のことでした。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-10 00:32:55
md5:a12c5702325a4ffb80fbb5c3db6a09d9
sha1:089f3972a03adaa25db07a915820fe0408f31949

日記/2009/01/06/YakiBikiのログ出力追加でメモ  

所有者: msakamoto-sf    作成日: 2009-01-06 16:28:45
カテゴリ: YakiBiki 

ログ出力を追加しようと思って弄っていて、ふとログフォーマットどうなってたか見直してみた。
PEARのLogライブラリを使っているのだけれど、$identの初期化を

$ident = "'" . yb_Var::server('REMOTE_ADDR') . "' - " . session_id();
→
'192.168.1.1' - abcd123456789...

みたいにしていた(yb_Logクラス)。「ああ、そういえばそうしていたなぁ。」と懐かしくスルーしようとしたが。

「あ、session_regenerate_id() されたら追えなくなるじゃん。」

yb_Session::start()の中で、一定期間を経過していたらyb_Session::regenerate_id()を呼ぶようにしている。これが動いてしまうと、途中から別のセッションIDになるため追跡できなくなる。
regenerateするタイミングで新旧のセッションIDをログに出すか・・・とも思ったんだけど、yb_Sessionの中でyb_Logが混ざりこむのってなんか気持ち悪い。

なので、$identの初期化はこんな感じに、user_contextから取得したユーザ名も括弧付きで出すように修正した。

$uc = yb_Session::user_context();
$ident = "'" . yb_Var::server('REMOTE_ADDR') . "' - " 
    . session_id() . '(' . $uc['name'] . ')';

ログ出力はyb_mdl_系の、つまりロジックレイヤーに埋め込むわけだけど、

  • マスタ系は create, update, delete 時にIDと名前、あるいはserialized()データ
  • データは・・・
    • 新規作成時(含テンプレート指定)
    • コピー時
    • データ編集時
    • データ情報変更時
    • バージョン情報変更時(現在バージョン変更、承認、削除)
    • コメント追加,削除,承認時

そんな感じで。データ変更の場合のログも、データのIDとあとタイトルとか関連IDとか。長くしない。

データのviewやrawでのダウンロードは・・・Apacheのログで良いよね、ということで入れてない。
ただしDataTypeがAttachの時のrawダウンロード時のみ入れておいた。意識してclickしないとDLは発生しないし、「誰がいつデータをDLしたか」というのを見たい、というのが元々の目標でもあるので、まぁここについては入れておく。画像の場合はviewのタイミングでimgタグのsrc属性経由でrawモジュールが動いてしまうので、あんまり意味ないし、「誰がいつ」をきっちり取りたいという対象でもない。

とりあえず以上。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-01-06 16:43:52
md5:9a4ab12215aa808b326b71a7bc6f7d29
sha1:be650de9b79962d570a1783091a23a053f025fd2