自作CGIを評価するスレ (672レス)
自作CGIを評価するスレ http://medaka.5ch.net/test/read.cgi/php/1049514428/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
322: 301 [sage] 03/06/04 22:35 ID:??? >>321 スレタイにワラタ いや、もう終わってるっぽいスレなので、 もういいかな〜っと。 とにかく、コメントは思うように入れまくってみたら良いと思う。 そうしてる内に、どういう風にコメント書いたら分かりやすいとか、 こういうコメントは無駄だとか、分かってくるだろうし。 前に、冗談だろうけど・・・ $hoge++; #1を増加 ・・・こんなコメントを見た事がある。 こんなの、明らかに無駄。(w ただ、なぜ1を増やすかって事についてのコメントなら・・・ それは、意味を成すかもしれない
。 実は、俺も無駄なコメントが多いんだよね・・・ ぜんぜんプログラムとは関係ないようなコメントとかある。 そういうのって、俺的に後から見たら面白かったり。 もちろん、人に見せる時は、そんなコメントは消すけどね。 http://medaka.5ch.net/test/read.cgi/php/1049514428/322
323: nobodyさん [sage] 03/06/05 04:44 ID:??? OO なコード書いて POD 埋め込むようになってから 普通のコメントがかなり減った。スクリプトとドキュメント 同時に作るのは効率いいしオススメ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/323
324: nobodyさん [] 03/06/05 06:18 ID:t1krGQgT http://marugo.s15.xrea.com/ 掲示板のCGIです。 言語はPerl http://medaka.5ch.net/test/read.cgi/php/1049514428/324
325: nobodyさん [sage] 03/06/05 12:01 ID:??? >>324 >>280 http://medaka.5ch.net/test/read.cgi/php/1049514428/325
326: nobodyさん [] 03/06/09 21:44 ID:JSBfbdyK http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1032435179_5/hoge.zip むかしいじってたやつ、もう要らないから使えると思った香具師 勝手に使ってくれ。コメント皆無だけどね。 でも最後に軽く評価を聞きたいけどな。 http://medaka.5ch.net/test/read.cgi/php/1049514428/326
327: nobodyさん [sage] 03/06/09 21:59 ID:??? >>326 あぁ。今見直したら俺が書いたやつじゃないものが入っていた・・・ Text::WordIteratorとか。。。 あーあ。まぁ、いいや。 http://medaka.5ch.net/test/read.cgi/php/1049514428/327
328: 大塚裕司 [] 03/06/09 23:17 ID:4isQpEIX http://elife.fam.cx/a001/ http://medaka.5ch.net/test/read.cgi/php/1049514428/328
329: 211 [3025] 03/06/12 02:44 ID:??? ども。 いつぞやのコメント削除スクリプト作った俺です。 今作ってるスクリプトが行き詰まりました。 ちょっとイライラしたので、 息抜きにコメント削除スクリプトのバージョンアップとかしてみました。 このバージョンで、サブディレクトリ内も検索可能になりました。 深さは、どんなに深いサブディレクトリでも処理可能です。 http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1160.zip ・・・リファクタリングが必要かもしれん・・・ http://medaka.5ch.net/test/read.cgi/php/10495
14428/329
330: _ [sage] 03/06/12 03:03 ID:??? http://homepage.mac.com/hiroyuki44/hankaku02.html http://medaka.5ch.net/test/read.cgi/php/1049514428/330
331: nobodyさん [sage] 03/06/12 06:40 ID:??? >>329 >深さは、どんなに深いサブディレクトリでも処理可能です。 当方にはそのスタックをあふれさせる準備があるが良いのか? http://medaka.5ch.net/test/read.cgi/php/1049514428/331
332: 211 [3025] 03/06/12 06:59 ID:??? >>331 う〜ん。 スタックを溢れさせる準備があるって意味がわからんです・・・。 とにかく、かなり深いディレクトリでもOKなはず。 だって、Cのルートディレクトリから検索とか掛けてみたから。 とりあえず、試してみそ〜。 http://medaka.5ch.net/test/read.cgi/php/1049514428/332
333: nobodyさん [] 03/06/12 07:54 ID:s13jgVVf http://www1.neweb.ne.jp/wb/prof/index.htm 平成15年度 自作板 PC環境調査 ◆5月分の結果が出ました。現在は6月分に移行しています。 (参考) 平均年齢 25.4歳 ネット(2ch含) 78.7% ゲーム 59.0% Windows XP Family 46.9% Windows 2000 Family 34.4% Athlon 45.3% Pentium 4 29.7% nVIDIA 49.2% ATI 28.9% DVD-R/RW/マルチ
20.4% CD-R/RW 75.9% 光ファイバー 8.3% ADSL/xDSL 64.5% CRT 74.6% LCD 25.4% http://medaka.5ch.net/test/read.cgi/php/1049514428/333
334: nobodyさん [sage] 03/06/12 10:27 ID:??? >>332 ソースは見てないが、再帰的な処理をしてるのにスタックについて知らないというのは ちょっとヤバくないか? http://medaka.5ch.net/test/read.cgi/php/1049514428/334
335: nobodyさん [] 03/06/12 12:02 ID:I623aSMv まあまあ、知らなくても書けるてことで。 http://medaka.5ch.net/test/read.cgi/php/1049514428/335
336: 211 [3025] 03/06/12 14:17 ID:??? >>334 再帰? 自分の中で自分を呼ぶアレ? ・・・いや、普通にwhile文とかでブン回してるだけだが・・・ ディレクトリ検索のアルゴリズム考えるの、 実はちょっと大変だったんだよね・・・ ひさびさに、フローチャートとか書いたもん。(w ちなみに、見てもらったら分かるけど、 メモリの使用も最小限に抑えてるし。 >>335 そうみたいね・・・書けちゃったから・・・。 http://medaka.5ch.net/test/read.cgi/php/1049514428/336
337: nobodyさん [sage] 03/06/12 18:19 ID:??? whileでブン回しておいてメモリは最小限とはこれいかに。 http://medaka.5ch.net/test/read.cgi/php/1049514428/337
338: nobodyさん [sage] 03/06/12 21:33 ID:??? >>336 確かにWhileで再帰のまねごとは出来る。 でも、どっちにしろスタック的なデータ構造がないと困るはずだけれど。 http://medaka.5ch.net/test/read.cgi/php/1049514428/338
339: nobodyさん [sage] 03/06/12 22:33 ID:??? >>329 キモの部分 (Library_223.pm) 以外を書き換えてみた。 http://boobar.hp.infoseek.co.jp/refactoring/commentoff.pl.txt …まぁ、なんつか、もっと色々な人の話に耳を傾けて もっと上を目指して下され。今のレベルで固まられたら 正直痛すぎる。 漏れも人の事言えんけどなー。 http://medaka.5ch.net/test/read.cgi/php/1049514428/339
340: 211 [3025] 03/06/13 01:55 ID:??? >>337 簡単な話。 while文で、ブン回しながら、必要なデータか調べる。 必要なデータなら、ファイルへスワップ。 必要じゃなかったら、次のループで上書き。 つまり、メモリにデータを蓄えないようにしてる。 一通り調べ終わったら、次のステップでスワップしたファイルから データ読み出しって感じ。 >>338 そのスタックってのがよく分かてないんで・・・ どんなデータ構造なのか分からないけど・・・ 再帰処理は、一切使ってない、ただループさせてる処理をしてるよ。 DirTree.pmってファ
イルがディレクトリを走り回る処理部分だから。 一度、覗いてみてくださいませ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/340
341: 211 [3025] 03/06/13 01:55 ID:??? >>339 ソース見せてもらいました。 再帰処理使ってるね。 こんな事言っても仕方ないし、 プログラム打つ人間としては失格かもしれないけど、 再帰処理って嫌いなんだよね。 逐次処理&反復処理だけで、すべてをこなせると思ってる。 いままでで、再帰処理を行わないといけない場面ってなかったし。 まぁ、ヘッポコな俺だから、 まだそんな場面に出くわしてないだけかもしれないけど。 それに、再帰処理に出くわすと、ソース読むのが大変。 俺的にね。 と、まぁこれは俺の哲学。 それと、これはD&D
に対応してないね。 それと、処理中&処理後のログが少ない。 この辺でも、俺と嗜好が違うね。 俺のは、そういうログがないと固まってるようでイヤだから。 結構うるさいソースになってる。 と、「正直痛すぎる」とかって言われたので、 ちょっと反抗してみました。(w 正直な感想は、無駄のないスッキリ仕上げなソースだと思います。 それと、俺の知らない組み込み関数とか使ってる。 もうちょっと、俺も勉強しないとね。 改造とかしてくれる人少なくってさ・・・ ソースみて勉強させてもらいます。 ありがとうございました。 http://medaka.5ch
.net/test/read.cgi/php/1049514428/341
342: 223 [sage] 03/06/13 03:29 ID:??? 久しぶりに覗いてみたら まだやってたのねご苦労さんw 実はあと風呂に入ってたらフィルターバグまだいくつかあるのを 気づいちゃったんだよね… 漏れ的ソースの書き方ならアレで問題ないんだけど 世の中には漏れの想像もできない書き方する人がいるんで http://medaka.5ch.net/test/read.cgi/php/1049514428/342
343: nobodyさん [sage] 03/06/13 14:25 ID:??? ネタだろ? ネタと言ってくれよ!痛すぎるよ! http://medaka.5ch.net/test/read.cgi/php/1049514428/343
344: nobodyさん [sage] 03/06/13 21:35 ID:??? 傑作にケチつけられて熱くなっちゃいました。 DirTree.pm直してやるから待っててな。 http://medaka.5ch.net/test/read.cgi/php/1049514428/344
345: nobodyさん [sage] 03/06/13 21:56 ID:??? あ。再帰処理しか考えられない…止めよう。 今のやり方で、明らかにおかしい所は、ループ内で$tmpPathListを開いて閉じてる所。 ファイルハンドルが勿体無い。 それから、少し変な所で、メモリ使用量にこだわっている割には、readdirを リストコンテキストで呼んでる点。一つずつ調べればいいのに。 それから、趣味の問題だけど、変なインデントが気持ち悪い。スコープを分けたい(?)なら ブロックを作ればいいし。 あと、無駄な括弧。 if ( ($_ eq '.') || ($_ eq '..') ) { next; } こことか強烈
なんだけど…このままでも条件の中身の括弧は無くてもいいんだけど、 十分に優先度が低いorを使えば、心配しなくてもいい。それに大括弧のインデントも変。 @filelistのスコープも変。とにかく変数は使用直前に宣言した方が楽。 それから、$countはハッシュのリファレンスにする価値は無い。普通のハッシュで十分。 http://medaka.5ch.net/test/read.cgi/php/1049514428/345
346: nobodyさん [sage] 03/06/13 22:59 ID:??? >>345 ごちゃごちゃ言う前に書き直してそれがより美しいことを証明すればどうだ? http://medaka.5ch.net/test/read.cgi/php/1049514428/346
347: 211 [3025] 03/06/14 08:19 ID:??? >>342 うーん、忘れた頃に、またやってます(w そうそう、コメント削除のバグ。 俺も、2つほど気付いてました。 しかし、俺的に今の所実害がないので放置中。。。 今度、直してみます。 http://medaka.5ch.net/test/read.cgi/php/1049514428/347
348: 211 [3025] 03/06/14 08:19 ID:??? >>345 スクリプト自体は、すごくスッキリしてて、 本当、無駄がないと思います。 大半の人は、俺のスクリプトより>>339のスクリプトを好むかと・・・ 俺の言ってる事は、ヘッポコの戯言だと聞き流してください。 指摘された部分。 ループ内でファイルを開いたり閉じたりしてる部分。 メモリ使用量最小限とか言ってるのに、 ディレクトリ内のファイル名を一発で取得してる部分。 この2つは・・・ 言い返す言葉がないです(w ファイルは、ループ前に開いて、ループが終わったら閉じるように
変更。 ファイル名取得も、一つづつに変更してみました。 $countのハッシュリファレンスを使ってる。 これについては・・・ 戻り値は、今後の改良などで値が大きくなるかもしれない・・・ という理由から、俺が作るルーチンのほとんどはリファレンスが返ってきます。 しかし、ルーチン内でリファレンス使ってるのは意味ないですね。 と、言うことでルーチン内は普通にハッシュを使うように変更。 戻り値はリファレンスだけど・・・ インデントが変。 orを使わず、||を使って括弧の多様。 変数宣言は、使用直前に宣言した方が楽。 これらについては・
・・ 好みってことで、許してください。 http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1166.zip http://medaka.5ch.net/test/read.cgi/php/1049514428/348
349: nobodyさん [sage] 03/06/14 15:46 ID:??? ファイルの開き方が直ってね〜よ http://medaka.5ch.net/test/read.cgi/php/1049514428/349
350: nobodyさん [] 03/06/14 21:12 ID:jhwtfsoY aice.zive.net/index.jsp よろしくお願いします。 http://medaka.5ch.net/test/read.cgi/php/1049514428/350
351: nobodyさん [sage] 03/06/15 09:57 ID:??? >>350 ここの人は低レベルだからJavaなんて理解できないよ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/351
352: nobodyさん [sage] 03/06/15 10:05 ID:??? >>351 言われてみれば、Javaスレってないね・・・ http://medaka.5ch.net/test/read.cgi/php/1049514428/352
353: nobodyさん [sage] 03/06/15 11:13 ID:??? 難易の話をしているつもりかな? なら351はJavaを理解していないに430スイカ http://medaka.5ch.net/test/read.cgi/php/1049514428/353
354: nobodyさん [sage] 03/06/15 12:09 ID:??? 目的を達成する手段のひとつがJava http://medaka.5ch.net/test/read.cgi/php/1049514428/354
355: nobodyさん [sage] 03/06/15 14:10 ID:??? 350=351 http://medaka.5ch.net/test/read.cgi/php/1049514428/355
356: nobodyさん [sage] 03/06/16 18:02 ID:??? >>211の人。 記述が馴れないような感じになって良いなら、gotoでルーチン使うと(ルーチンね)スタックがたまらなくて良いよ。 ただし、それは履歴自体プログラムが管理しないって事だから時には諸刃の剣。 スタックはほとんど何やってもたまるよ。 スタックがたまると言うか、スタックの中にいろんなもんがたまる。 もちろんループもしっかりスタックに残り管理されてる(当たり前)。 だから「再起じゃないから」、「サブルーチンじゃないから」スタックには全く関係ないてのはでっかい間違
い。 どんな経過をたどって現在まで辿り着いたのかとか、捨てたと思った変数が実は残っているとか。 スタックにも色んな種類あるから調べて味噌。 http://medaka.5ch.net/test/read.cgi/php/1049514428/356
357: 211 [3025] 03/06/17 06:07 ID:??? >>356 うーん、無理にスタックを意識して、 goto文を使用しようとは思わないです・・・。 あまり、ソースがトリッキーすぎると、 未来の俺から苦情がきます。 それでなくても、結構トリッキーっぽいから・・・ スタックとは、何なのかはっきり分かってなかったのですが、 いろいろ調べ回って、何なのか、何となく分かりました。 スタックについて、勉強させてもらう機会をいただいた皆さんに感謝です。 さて、また一つヘンテコなスクリプトを組みました。 複数のファイルから、文字列を検索するス
クリプト。 My_Grep。 http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1181.zip 使い方などは、同封してるテキストファイルを読んでください。 改造してくれる人は、できればアップして、ソース見せてください。 勉強させてもらいます。 また、今回も「DirTree.pm」を同封してますが、 >>349の指摘された所は、直してます。 では、評価お願いします。 http://medaka.5ch.net/test/read.cgi/php/1049514428/357
358: 211 [3025] 03/06/17 06:17 ID:??? いきなりバグを見つけました。 http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1182.zip 修正しました。 http://medaka.5ch.net/test/read.cgi/php/1049514428/358
359: 211 [3025] 03/06/18 07:21 ID:??? バージョンアップしました。 http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1184.zip このバージョンで、 複数の拡張子のファイル検索が可能。 ログで、先頭のインデントなどのスペースを削るようにした。 ・・・誰か、評価お願いします・・・ 誰も手がってくれない。寂しいね。 http://medaka.5ch.net/test/read.cgi/php/1049514428/359
360: nobodyさん [sage] 03/06/18 15:16 ID:??? >>359 乙。 俺よりはるかにレヴェルの高いことやってらっしゃるので、 研究させてもらいます。 # 自作スクリプトを公開できるのはいつになることやら、、、 http://medaka.5ch.net/test/read.cgi/php/1049514428/360
361: 211 [3025] 03/06/19 02:58 ID:??? >>360 ども。 一応覗いてくれてた人がいてたんだね。 よかった。 まったく手がってもらえないから、かなり寂しかった(w やってる処理自体は、そんなにレベルの高い物じゃなかったりします。 俺も研究させてもらうので、何かスクリプト作ったらアップしてくれたら嬉しいです。 http://medaka.5ch.net/test/read.cgi/php/1049514428/361
362: 211 [3025] 03/06/19 02:59 ID:??? さて、また意味なくバージョンアップしました。 http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/1189.zip このバージョンで、 結果ログファイルがHTMLファイルになって、 ヒットしたキーワードが強調表示されるようになった。 ファイルがバイナリファイルか調べるようにした。 拡張子指定で、ファイル名に拡張子と同じ文字列があったら、 そのファイルも検索対象になっていたバグを修正。 指定した拡張子のファイルが無かった時でも、 つづけて検索フェイズに移
行してたバグを修正 Html.pmってファイルを書き換えると、 出力するログの見た目が変えられるかもしれません。 それと、今回のバージョンで謎なバグが一つ・・・ tmpファイルが、今までスクリプト終了と同時に、 削除されるようにしてたんだけど・・・ 今回のバージョンは、なぜかtmpファイルが残ります・・・。 何度も見直したんだけど、まったく原因がわかりませんでした。 どなたか、ご指摘いただけたら嬉しいです。 http://medaka.5ch.net/test/read.cgi/php/1049514428/362
363: nobodyさん [sage] 03/06/19 06:20 ID:??? >>362 いい加減ウザイ。完成してから後悔してくれ http://medaka.5ch.net/test/read.cgi/php/1049514428/363
364: 211 [sage] 03/06/19 14:12 ID:??? >>363 あら。 何か主旨が変わってきたね。 評価貰えるよう、スレを上げるために、 何もなくスレ上げてたら荒らしだから、 何か無いかと、がんばってバージョンアップしてたんだけど・・・。 でも、いくつか勉強させてもらったし・・・ この辺が潮時かな。 じゃ、俺のスクリプト公開は終了します。 http://medaka.5ch.net/test/read.cgi/php/1049514428/364
365: nobodyさん [sage] 03/06/19 14:28 ID:??? >>364 もう少し実用性のあるもので再チャレンジしてみたら? 今回のは正直言って使いたいと思えるものでなかったから 評価しなかった あれば便利とか使ってみたいと思えるものなら協力者も増えるのでは http://medaka.5ch.net/test/read.cgi/php/1049514428/365
366: 1 [sage] 03/06/21 10:11 ID:??? 自作CGIを評価するスレ このスレは終了いたしました。 みなさん書き込みありがとうございました。 投稿件数 : 365 最終投稿者: nobodyさん 最終投稿日: 03/06/19 http://medaka.5ch.net/test/read.cgi/php/1049514428/366
367: nobodyさん [sage] 03/06/21 17:05 ID:??? ∧__∧ / ̄ ̄ ̄ ̄ ̄ ̄ ( ^u^) < 乙彼様でした☆ と つ \______ (__つ 丿 し' http://medaka.5ch.net/test/read.cgi/php/1049514428/367
368: nobodyさん [sage] 03/06/22 07:46 ID:??? スレの趣向とは少し外れるんですが、 下記のロック、アンロックはどうでしょうか? # lock routine sub lock { $retry = 5; if (-e $lockex_file) { $mtime = (stat($lockex_file))[9]; if ($mtime + 600 < time) { rename($lockex_file, $lock_file) || &error("lock error"); } } while (1) { last if rename($lock_file, $lockex_file); if (--$retry < 0) { &error("lock error"); } } } # unlock routine sub unlock { if (-e $lock
ex_file) { rename($lockex_file, $lock_file) || &error("lock error"); } } 評価お願いします。 http://medaka.5ch.net/test/read.cgi/php/1049514428/368
369: nobodyさん [sage] 03/06/22 09:04 ID:??? >>368 いいんじゃないかな。 while文の所は・・・ while ($retry--) { return 0 if rename($lock_file, $lockex_file); } &error( 'Lock error' ); こうの方が良いかな。 http://medaka.5ch.net/test/read.cgi/php/1049514428/369
370: 368 [sage] 03/06/22 10:02 ID:??? >>369 どうもありがとうございます。 他のスレでこういう書き方をみかけました。 while (!rename($lock_file, $lockex_file) { if (--$retry <= 0) { &error("lock error"); } } >>369さんが書いてくれたものとどちらがいいんですかね? http://medaka.5ch.net/test/read.cgi/php/1049514428/370
371: nobodyさん [] 03/06/24 13:54 ID:01cZwzPj >>368 このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。 説明するのめんどいので、 http://www.din.or.jp/~ohzaki/perl.htm#File_Lock この辺りでも読んでみて。 >>370 好みだと思う。 個人的には>>368も>>369も>>370もループの最中にreturnやら&errorで関数の 外に飛んでるので気持ち悪い(これも好みの問題)。 あと、>>368はテストが最大6回行われるのに大して、>>369と>>370は 5回なので等価なコードじゃなくな
ってる。 というわけで、個人的にはこう書くかな↓ my $retry = 5; for($retry++; $retry; $retry--){ last if rename($lock_file, $lockex_file); } error("lock error") if not $retry; http://medaka.5ch.net/test/read.cgi/php/1049514428/371
372: 368 [sage] 03/06/24 14:57 ID:??? >>371 ありがとうございます。 ロックが甘いということは分かりましたが、アンロックはどうでしょうか? まだ371さんがおっしゃったサイトは見てないのでなんとも言えませんが…。 もう少し勉強してみることにします。 指摘されたリトライですが、 if (--$retry <= 0) { こうですね。 http://medaka.5ch.net/test/read.cgi/php/1049514428/372
373: nobodyさん [sage] 03/06/24 15:24 ID:??? >>371 > このルーチンだと穴がある。経験則だけど、アクセスが殺到すると簡単に壊れる。 > 説明するのめんどいので、 > http://www.din.or.jp/~ohzaki/perl.htm#File_Lock > この辺りでも読んでみて。 その辺り読んで、載ってるルーチンそのまま使ってテストした所、 ファイル壊れました。 俺は、>>368くらいの簡単なロックで良いと思うけど。 このロックで壊れるようなアクセス受けてるって事は、 その説明に載ってるようなルーチンでも、ほぼ壊れる。 どんなロックして
てもファイルは壊れるんだから、 小細工いれた重いロック処理するより、 簡単にロックする処理入れた方が良いような。 http://medaka.5ch.net/test/read.cgi/php/1049514428/373
374: nobodyさん [sage] 03/06/24 15:33 ID:??? >どんなロックしててもファイルは壊れるんだから そんなことはないよ。ただ言えることは、この板ではまだまともにロックできて いるルーチンが1つも書かれてないな。 http://medaka.5ch.net/test/read.cgi/php/1049514428/374
375: nobodyさん [sage] 03/06/24 15:35 ID:??? >>374 >そんなことはないよ。ただ言えることは、この板ではまだまともにロックできて >いるルーチンが1つも書かれてないな。 flock使っちゃだめ? http://medaka.5ch.net/test/read.cgi/php/1049514428/375
376: nobodyさん [sage] 03/06/24 15:36 ID:??? >>374 どんなに集中アクセスを受けても、 絶対壊れないファイルロックってある訳ない。 あったら、ぜひ見て見たい。 http://medaka.5ch.net/test/read.cgi/php/1049514428/376
377: nobodyさん [sage] 03/06/24 15:37 ID:??? >>375 あ、ちなみに、flockでも壊れるんで。ファイル。 http://medaka.5ch.net/test/read.cgi/php/1049514428/377
378: nobodyさん [sage] 03/06/24 15:40 ID:??? ↓これでもこわれる?(CSVの処理はPerlメモ参考にしてます) use strict; use Fcntl qw(:flock); $tmpfile = "$datafile".".$$.". time() .".csv"; #万が一リネーム失敗したときのために、 #ユニークなファイル名にしておく open (LOCKF, ">$datafile"."_lockf") or die("cannot open:$!"); #ロックファイルを作成する #(★注:ロックファイルは、各CSVごとにユニークに) flock (LOCKF, LOCK_EX); #ロックファイルをflockする open(I
N, "< $datafile") or die("cannot open:$!"); # 読みのみモードで開く open(TMP,"> $tmpfile"); #テンポラリファイルを作成 while ($line = <IN>){ $line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN)); $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_} ($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); #必要なものだけをEUCにして、出力
時にSJISにする foreach $value (@values){ &jcode::convert(\$value, "euc"); }; #CSV形式に変換 $newline = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values; print TMP "$newline\n" ;#テンポラリファイルに1レコード書き込み } close TMP; close IN; unlink $datafile; rename ($tmpfile, $datafile) or die ("cannot rename : $!"); close LOCKF; http://medaka.5ch.net/test/read.
cgi/php/1049514428/378
379: 374 [sage] 03/06/24 15:41 ID:??? >絶対壊れないファイルロックってある訳ない この根拠がどこからくるのかわからないが、 少なくともとてつもないアクセス集中に対応できるように非ブロックモードで タイムアウトを備えてないとまず無理だということは教えておこう。 http://medaka.5ch.net/test/read.cgi/php/1049514428/379
380: 378 [sage] 03/06/24 15:41 ID:??? あ、EUCにしてからSJISにもどすの忘れてるけど、そこは気にしないで http://medaka.5ch.net/test/read.cgi/php/1049514428/380
381: 371 [] 03/06/24 15:46 ID:01cZwzPj > どんなロックしててもファイルは壊れるんだから、 そんなことはない。 というか、上(大崎氏の)のルーチンでファイル壊れたんならファイルシステムに 不備があるか、打ち間違いがあるかパーミッションやらの設定を誤ってるかどれか。 ファイルシステム上でrenameが衝突しないという条件の元でならうまく行くはず。 アクセス集中でファイルが壊れるのはロックの機構に不備がある だけで、正しい状況下で行われたUNIX系OSでのflockでは、ファイルシステム にバグがあるか、ファイルシステム自体のクラッ
シュでもない限り壊れない。 >>375 flockはNFS越しの場合に失敗するから、ファイスシステムを予め 調べておく必要がある。 NFS越しだとPOSIXモジュール使うかfcntl使う必要があった気がする。 >>376 > どんなに集中アクセスを受けても、 > 絶対壊れないファイルロックってある訳ない。 > あったら、ぜひ見て見たい。 非ネットワークファイルシステム+UNIX系OSでのflock。stableなバージョン上で これで壊れたって話は逆にあったら見てみたい。 http://medaka.5ch.net/test/read.cgi/php/1049514428/381
382: 371 [] 03/06/24 15:48 ID:01cZwzPj >>377 ネットワークファイルシステムを使ってる場合はね。 それ以外で壊れるという話は(ファイルシステム開発中のバグ以外は) 聞いたことない。再現できたら結構すごいと思うが。 http://medaka.5ch.net/test/read.cgi/php/1049514428/382
383: 371 [] 03/06/24 15:54 ID:01cZwzPj 変な憶測並べる前にFAQくらいみんな読もうよ。 http://elib.cs.berkeley.edu/~loretta/perl/nmanual/pod/perlfaq5/How_can_I_lock_a_file_.html http://medaka.5ch.net/test/read.cgi/php/1049514428/383
384: nobodyさん [sage] 03/06/24 18:50 ID:??? 追加書き込みすれば壊れない。 http://medaka.5ch.net/test/read.cgi/php/1049514428/384
385: 371 [] 03/06/24 19:10 ID:01cZwzPj >>384 2つのプロセスが同時に追加書込しようとしたら、 その部分は壊れるよ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/385
386: nobodyさん [sage] 03/06/24 20:17 ID:??? >>371 って言うかOSが関与しないファイルロックで信頼できるアルゴリズムってあるの? http://medaka.5ch.net/test/read.cgi/php/1049514428/386
387: nobodyさん [sage] 03/06/24 20:18 ID:??? >>385 何を以て壊れるとするかだな。 http://medaka.5ch.net/test/read.cgi/php/1049514428/387
388: 378 [sage] 03/06/24 20:27 ID:??? >>378 はどうですか? http://medaka.5ch.net/test/read.cgi/php/1049514428/388
389: nobodyさん [sage] 03/06/24 20:34 ID:??? >>388 ええ、ばっちりシステムコールのflockがいらっしゃいますね。 http://medaka.5ch.net/test/read.cgi/php/1049514428/389
390: 371 [sage] 03/06/24 20:45 ID:??? >>386 symlinkにしろ、rewriteにしろ、mkdirにしろ、OSがファイルシステム上で衝突しないように 設計されているという大前提で作られてるし、実際衝突するかどうかはOS次第なので、 OSに非依存で汎用可能なアルゴリズムっていうのは原理的に不可能じゃないかと。 http://medaka.5ch.net/test/read.cgi/php/1049514428/390
391: nobodyさん [sage] 03/06/24 20:47 ID:??? >>390 その意見には激しく同意。 じゃあ、議論するだけ無駄だと思うわけだ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/391
392: nobodyさん [sage] 03/06/24 20:48 ID:??? >OSがファイルシステム上で衝突しないように設計されているという大前提で作られてるし。 OS側でAtomicでもプログラム側がそうでなけりゃ・・・。 http://medaka.5ch.net/test/read.cgi/php/1049514428/392
393: nobodyさん [sage] 03/06/24 21:00 ID:??? >>373-392 スレ違い。 ファイルロックについてのスレあるから、 そこで熱く語ってくれ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/393
394: nobodyさん [sage] 03/06/25 00:00 ID:??? require './my_flock.pl'; while (1) { while ( not defined ($lock = &my_flock()) ) {}; open (IN, "./count.txt"); $data = <IN>; close (IN); &my_funlock($lock); print ++$data. "\n"; while ( not defined ($lock = &my_flock()) ) {}; open (OUT, ">./count.txt"); print OUT $data. "\n"; close (OUT); &my_funlock($lock); if ($data >= 10000) { last; } } >>371のその辺のフ
ァイルロックを別ファイルに取って呼び出してる。 これを、二つのプロセスで実行してみろ。 無事に10000までカウントなんぞできんぞ。 http://medaka.5ch.net/test/read.cgi/php/1049514428/394
395: 374 [sage] 03/06/25 00:21 ID:??? >>394 まともに使えないならいっそ使わないほうが・・・ http://medaka.5ch.net/test/read.cgi/php/1049514428/395
396: nobodyさん [sage] 03/06/25 00:39 ID:??? >>395 はぁ? 全体に一度だけかけろとか言うのか? それでも壊れる。 何がまともに使えないだよ・・・ ルーチン呼び出すのに使えるも使えないもないだろヴォケ。 文句言う前に試せやハゲ。 試して、壊れなかったら文句言いにこいや。 http://medaka.5ch.net/test/read.cgi/php/1049514428/396
397: 374 [sage] 03/06/25 00:47 ID:??? ルーチンをまともに使えないヤシが晒されるスレはここでつか? http://medaka.5ch.net/test/read.cgi/php/1049514428/397
398: nobodyさん [sage] 03/06/25 00:57 ID:??? >>397 だから。 試せってよ・・・。 試しもしないで、使えてねーとか、使い方悪いとか。 そんな事言われても、説得力ねーっちゅーの。 こういう使い方したらファイル壊れないとか、 このタイミングでルーチン呼び出したら大丈夫だとか、 まー試しもしないで語ってるヤツに、 ロクな答えなんて返ってきそうにないけどな。 http://medaka.5ch.net/test/read.cgi/php/1049514428/398
399: 371 [] 03/06/25 00:59 ID:Q5i43+wA >>396 > 全体に一度だけかけろとか言うのか? だってそうしないとカウントが飛んじゃうでしょ。 > 試して、壊れなかったら文句言いにこいや。 一度に5プロセス動かして1000までやってみたけど壊れないね。 FreeBSD2.2.2 + Perl5.6.0だけど。 OS何使ってて壊れるの? > 396 http://medaka.5ch.net/test/read.cgi/php/1049514428/399
400: 371 [] 03/06/25 01:03 ID:Q5i43+wA プロセスを7つに増やしてテスト中。 時々ロックファイルが消えるな・・・。renameしかしてないはずなので、 ファイルシステムのバグか? でもデータが壊れるということは今のところない模様。テスト続行中。 http://medaka.5ch.net/test/read.cgi/php/1049514428/400
401: 371 [] 03/06/25 01:13 ID:Q5i43+wA FreeBSD2.2.8 + Perl 5.6.0でも実験したところ、20000件超えてるけど、特に問題なし。 FreeBSD2.2.2の方も、10000件行ってエラーなし。 合計30000件実験してみたけど衝突は起こってない模様(プロセスの譲り合いで片方のプロセスが ブロックする現象は見られたが)。 単にrenameシステムコールが衝突するようなファイルシステムを持つOSを使ってるだけ とか、そういうオチじゃなくて?>>398 http://medaka.5ch.net/test/read.cgi/php/1049514428/401
402: 371 [sage] 03/06/25 01:22 ID:??? ファイルが消える現象は、ロックファイルをディレクトリにすることで回避 # mkdir lockdir/lockfile で、20プロセス同時起動で、30000件やってみたけど、全く問題なし。 さすがに30000回連続で20プロセスが同時に1つのファイルにアクセス する状況はありえないだろうから、少なくともウチの環境上では きちんとロック機構が機能してると思われる。 で、たった2プロセス同時起動で10000件持たないファイルシステムを 持つ環境がどんな環境なのかとても気になるので早く教えてください>>398 あなたの言
う条件↓は満たしましたよ。 > 文句言う前に試せやハゲ。 > 試して、壊れなかったら文句言いにこいや。 http://medaka.5ch.net/test/read.cgi/php/1049514428/402
403: nobodyさん [sage] 03/06/25 01:30 ID:??? おっと、ご苦労さん。 マジで? ファイル壊れない? こっちの環境は、Win2kだけど。 > 単にrenameシステムコールが衝突するようなファイルシステムを持つOSを使ってるだけ んな訳ない。 2kで、そんなバグ聞いた事ない。 ずっとテスト環境は2kだったからなぁ〜。 とりあえず、こっちもVineの環境があるから、そっちでも試す。 >で、たった2プロセス同時起動で10000件持たないファイルシステムを >持つ環境がどんな環境なのかとても気になるので早く教えてください>>398 煽りで
すか。 あんた、一言多いね。 http://medaka.5ch.net/test/read.cgi/php/1049514428/403
404: 371 [sage] 03/06/25 01:49 ID:??? > こっちの環境は、Win2kだけど。 多分そのせいじゃないかなぁ。ファイルシステム何になってます? こっちは今のところ30プロセス同時起動で30万件ノンストップで突破してるので、 スクリプト自体に問題があるとは思えない。 まぁ、このルーチンはrenameの堅牢性に頼ってるので、その点において汎用性は 薄いということを証明する形にはなったかも。 > 2kで、そんなバグ聞いた事ない。 1秒間に同じファイルを数十回renameする必要性ってあまりないからなぁ。 renameのファイルの取り合いって普通の状
況だとまず起こりえないし。 ソース読んだら分かると思うけど、renameの空振り以外に原因は考えにくい ので、再現性あるなら追試してレポート出してみたら? http://medaka.5ch.net/test/read.cgi/php/1049514428/404
405: nobodyさん [sage] 03/06/25 02:14 ID:??? >>404 ファイルシステムは、もちろんNTFS Vineで試してみた。 たしかに、2kの時は途中ファイルが壊れてカウントが1に戻ったりしたけど、 Vineはそんな事なかった。 ・・・が、おかしい。 3つのプロセスで動かしたが、ログがおかしい。 同じ数字のカウントをする場面がある。 3つのプロセスでカウントしていったら、 同じ数字がカウントのログとして出るのはおかしいでしょ? そっちでは、ちゃんとカウントしていってる? http://medaka.5ch.net/test/read.cgi/php/1049514428/405
406: 371 [sage] 03/06/25 02:28 ID:??? >>405 >>394のソース直した?部分的でなく、全体をロックで囲まないと誤動作するよ。 print文の直上直下にあるunlockとlockの2行を外せばうまく行くと思う。 http://medaka.5ch.net/test/read.cgi/php/1049514428/406
407: nobodyさん [sage] 03/06/25 02:44 ID:??? >>406 あ・・・悪い。 修正してなかった。 ちゃんと動いてる。 もっと沢山のプロセスと、もっと沢山のループで試したかったけど、 Vineが入ってるPCのCPUが弱いんでやめた。 なんだ・・・今回の実験で、2kがいかに糞なのかが証明されたのか・・・? 結果は、壊れないファイルロックが存在したって事か? ・・・俺が、間違ってますた。 スマソ http://medaka.5ch.net/test/read.cgi/php/1049514428/407
408: 371 [sage] 03/06/25 11:01 ID:??? >>407 > 結果は、壊れないファイルロックが存在したって事か? 昨日、あのまま30プロセス同時起動のまま寝て、今朝見たら400万件を 突破してました。もちろんノンストップで。 30プロセスが400万回連続で殺到しても平気だということなんで、 少なくともウチの環境では、ほぼ「絶対に壊れないロック機構」と言い切って 差し支えないと思う。 どうでもいいけど、このテストスクリプトだと、count.txtを書き込みオープンした 瞬間にプロセスが落ちるとカウンタリセットされるよね。堅牢なスクリプト
を作ろうと 思ったらそこまで気を遣う必要があるかも。 >>377 flockに書き換えて同じ事やってみたけど、20プロセス10万件で壊れずに 行ってます。やっぱりOSの問題か、flock over networkが原因ではないかと。 スレ違いなようなので、この辺で。 http://medaka.5ch.net/test/read.cgi/php/1049514428/408
409: nobodyさん [sage] 03/06/25 14:12 ID:??? 結論的には何が一番? http://medaka.5ch.net/test/read.cgi/php/1049514428/409
410: 368 [sage] 03/06/25 18:02 ID:??? >>393さんがおっしゃってる通りたしかにスレ違いですが、 とても興味深い話題をありがとうございます。 >>402さんがおっしゃってることを試す価値はありそうなので、 とりあえずファイルを使うロックから、 ディレクトリを使うロックに変えてみたいと思います。 http://medaka.5ch.net/test/read.cgi/php/1049514428/410
411: nobodyさん [sage] 03/06/25 22:47 ID:??? >>410 ないよ。flockが一番。 http://medaka.5ch.net/test/read.cgi/php/1049514428/411
412: nobodyさん [sage ] 03/06/25 22:57 ID:??? >>411 NFS越しでも? http://medaka.5ch.net/test/read.cgi/php/1049514428/412
413: nobodyさん [] 03/06/26 06:18 ID:EBHZ+AEW . http://medaka.5ch.net/test/read.cgi/php/1049514428/413
414: nobodyさん [sage] 03/06/26 09:03 ID:??? NFSなんか使うなよ(;´Д`) http://medaka.5ch.net/test/read.cgi/php/1049514428/414
415: 412 [sage] 03/06/26 10:55 ID:??? >>414 お客さんでそういうトコ、多いんですよ(萎 だから仕事でflock使う際は、インストール先の OSとファイルシステムは必ず確認。 http://medaka.5ch.net/test/read.cgi/php/1049514428/415
416: nobodyさん [sage] 03/06/26 11:36 ID:??? なるほど(;´Д`) http://medaka.5ch.net/test/read.cgi/php/1049514428/416
417: nobodyさん [sage] 03/06/26 12:53 ID:??? >>414 十分有り得るよ。うちの大学もそうだし。 http://medaka.5ch.net/test/read.cgi/php/1049514428/417
418: nobodyさん [sage] 03/06/26 21:01 ID:??? >>417 レガシーな大学でつね。 http://medaka.5ch.net/test/read.cgi/php/1049514428/418
419: ◆5vUH/J4K/c [sage] 03/07/05 05:02 ID:??? http://medaka.5ch.net/test/read.cgi/php/1049514428/419
420: nobodyさん [] 03/07/06 16:49 ID:orJjX/H+ 別スレでrename失敗どうたらこうたら、言ってるんですが、 そんなにrename失敗することあるんですか? http://medaka.5ch.net/test/read.cgi/php/1049514428/420
421: nobodyさん [sage] 03/07/06 16:50 ID:??? 権限がなければ http://medaka.5ch.net/test/read.cgi/php/1049514428/421
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 251 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s