七行プログラミング (452レス)
七行プログラミング http://medaka.5ch.net/test/read.cgi/php/1036141603/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
220: Unit7.pm [] 03/12/15 17:14 ID:zoqm3JaO #!/usr/bin/perl package Unit7;sub new{bless{},pop}*set_up=*tear_down=sub{};sub p{printf@_}sub assert{my($s,$f,$m)=@_;++$s->{n};$f?++$s->{o}:p"%s:%d\t$m\n",(caller)[1,2]}sub run{$s=shift;$N=$O=0;for(grep/^test/,keys%{ref($s)."::"}){$s->{n}=$s->{o}=0;$N ++;set_up$s;$s->$_;tear_down$s;p"$N ) $s->{o}/$s->{n}\t$_\n";$s->{n}-$s->{o} or $O++}p"\nRun $N Tests. $O success.\n"}7 __END__ $s ... $self $N ... test* メソッドの数 $o ... 成功したテストの数 $n ... サブテストの数 $o ... 成功したサブテストの数 Test::Unit::TestCase 相当のモジュールです。 メソッド名 set_up, tear_down, assert は、オリジナルのTest-Unitを意識してそのままにしています。 名前を併せたらTestRunner.pl で実行できるかな?と互換性を期待したけど、無理だった。 http://medaka.5ch.net/test/read.cgi/php/1036141603/220
221: nobodyさん [] 03/12/15 17:21 ID:zoqm3JaO >>220 の使い方です。 - assert(bool, [message]) - set_up, tear_down は、他のTestUnit framework と同等。 - test runner は付いてないので、自分で実行しないといけない。->run; new MyTest->run; {package MyTest; use base qw/Unit7/; sub new { shift()->SUPER::new(@_) } sub set_up { my($self)=@_; $self->{val} = 0 } sub tear_down { my($self)=@_; undef $self->{val} } sub test_foo { my($self)=@_; $self->assert(defined $self->{val}, "defined val"); $self->assert(!$self->{val}, "! val"); $self->assert(0==$self->{val}, "0 == val"); $self->assert('0' eq $self->{val}, "'0' eq val"); } sub test_bar { my($self)=@_; $self->{val} = 1000; $self->assert(1000 < $self->{val}, "1000 < val"); # failure $self->assert(1000 <= $self->{val}, "1000 <= val"); $self->assert(1000 == $self->{val}, "1000 == val"); $self->assert(1000 > $self->{val}, "1000 > val"); # failure $self->assert(1000 <= $self->{val}, "1000 >= val"); } } http://medaka.5ch.net/test/read.cgi/php/1036141603/221
222: nobodyさん [] 03/12/15 18:50 ID:zoqm3JaO >>220.diff - $o ... 成功したテストの数 + $O ... 成功したテストの数 >>221 の捕捉。 基底クラスを Test::Unit::TestCase に変更するとTestRunner.pl でも実行できます。 でも、Test::Unit::TestCase => Unit7の互換はなし。 >>216 ありがとう。早速使わせてもらってます。 >>218 ()や{}の末尾では、引数の型宣言なしに弧省略出来たと思う。 nice tricky closure. FP的なアプローチってコードの短縮に貢献出来るテクニック多いよね。 >>217 Windows 環境の事すっかり忘れてた。 でも、エンコードしなきゃ大丈夫じゃない? %5C http://medaka.5ch.net/test/read.cgi/php/1036141603/222
223: nobodyさん [sage] 03/12/16 04:29 ID:??? >>222 PATH_INFO の挙動調べてみました。確認ブラウザは IE 6.0.2800.1106 、Mozilla 1.5 、Opera 7.23 ・AN HTTPD 1.42k ピリオド直後の \ は / に変換され、パスとして最適化される。 より上位のディレクトリを指す事はできない。 /foo/bar../baz は 404 。/foo/bar.../baz は 403 。 環境変数 PATH_INFO には URI-unescape 済みの値が入っている。 ・Apache 1.3.29 on FreeBSD \ はそのまま渡され、パスとして最適化される。 より上位のディレクトリを指す事はできない。 /foo/bar../baz はそのまま渡される。 環境変数 PATH_INFO には URI-unescape 済みの値が入っている。 IIS は周りに無いので未調査。 http://medaka.5ch.net/test/read.cgi/php/1036141603/223
224: 7memo [sage] 03/12/16 14:56 ID:??? これで一旦完成。 #!/usr/local/bin/perl use CGI":all";sub U{unescape CGI@_}chomp(($d,$c,$s,$q,$_,@w)=<DATA>);chdir$d;$_ =$&if path_info=~m|[^/]+|;tr/\x00- \x7F/ /s;$_=escape CGI$_;-d&¨$/='';open F,($w=param w)?">$_":$_;eval{flock F,2};print F$w||=<F>;opendir D,'.';charset$c ;put header,start_html(-title=>U($_),style=>$s,lang,ja,encoding,$c),ul(map{li"" .localtime((stat)[9]),a{href,url."/$_"},U$_}sort grep!/^\./,readdir D),h1(U$_), startform(0,url."/$_"),p(textarea(w,$w,@w),submit$q),'</form>',end_html __DATA__ data_dir EUC-JP http://example.com/path/to/your.css save Default Page Title 20 70 http://medaka.5ch.net/test/read.cgi/php/1036141603/224
225: nobodyさん [sage] 03/12/20 01:06 ID:??? >>224 お疲れ様です。 使いやすいしいい感じ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/225
226: ?O?????|?X [] 03/12/28 16:50 ID:7YW8A3U6 c http://medaka.5ch.net/test/read.cgi/php/1036141603/226
227: ?O?????|?X [] 03/12/28 21:24 ID:7YW/F4a6 b http://medaka.5ch.net/test/read.cgi/php/1036141603/227
228: ?O?????|?X [] 03/12/30 16:01 ID:2yZZI8A2 ccv http://medaka.5ch.net/test/read.cgi/php/1036141603/228
229: nobodyさん [ ] 04/01/02 08:14 ID:??? (・Д・) http://medaka.5ch.net/test/read.cgi/php/1036141603/229
230: nobodyさん [sage] 04/01/18 12:18 ID:??? テクニックメモを基に既存プログラムのメンテ中。 ・CGI.pm は最新版縛りで。 ・日本語が通るように。 ・改めて調べたら Win32 でもグロブ使えたのでそのように。 ・XSS 脆弱性や open に渡す値の再確認。 7rss を RSS 0.91 仕様にしてみるテスト。 #!perl -w use CGI qw/:all channel link language description item textinput name/;charset $C='EUC-JP';$w='7wiki';url=~m|[^/]+$|;$p=$`;sub e{title($d=pop),description($d) ,link pop}put header('text/xml'),join"\n",'<?xml version="1.0" encoding="'.$C. '"?>','<!DOCTYPE rss SYSTEM "http://my.netscape.com/publish/formats/rss-0.91.'. 'dtd">','<rss version="0.91">',channel(e("$p$w.cgi",$w),language(ja),(map{item e"$p$w.cgi/$_",$_}sort{-M$a<=>-M$b}grep/^([A-Z][a-z]+){2,}$/&-f,<*>)[0..9], textinput(title($w),link($p.'7search.cgi'),name S)),'</rss>' http://medaka.5ch.net/test/read.cgi/php/1036141603/230
231: 7ch.cgi [sage] 04/01/18 14:25 ID:??? #!/usr/bin/perl use CGI":all";charset$C=Shift_JIS;open F,'+<F';[<F>];seek F,0,2;*i=*param;s!> ;(\d+)!a{href,"#R$1"},$&!egx,s!https?://.+!a{href,$&},$&!eg,s/\n/br/eg,($n=i(N) ||'nobodyさん')=~s/#.+/crypt$1,'◆'/e,eval{flock F,2},print F dt(++$.,':'.b(a{ name,"R$.",i(M)&&(href,'mailto:'.i M)},$n),':'.localtime),dd($_.p),"\n"if$_= escapeHTML i T;seek F,0,0;*x=*textfield;put$/=header,start_html(-style=>{code=> <DATA>},Title=>'7ch',encoding,$C,lang,ja),dl(<F>),hr,startform,p(submit('書き'. '込む'),' 名前:',x(N),' E-mail:',x(M),br,textarea T,'',6,70),endform,end_html __DATA__ b { color:#080 } body { background:#fff } http://medaka.5ch.net/test/read.cgi/php/1036141603/231
232: nobodyさん [] 04/01/18 20:09 ID:Hq0k6H3L CCC http://medaka.5ch.net/test/read.cgi/php/1036141603/232
233: 7blosxom [sage] 04/01/19 14:33 ID:??? http://cm.xrea.cc/prog/7blosxom.shtml 仕様は >>182 辺りに。 テストファイル生成スクリプトも更新。 @c=('a'..'z','A'..'F');$t=time;$i=24;sub u{$t-=9**5;utime$t,$t,pop}sub j{join"" ,@c[$_[0]..$_[0]+2]}while($i){open(T,'>'.($f=j(--$i).'.txt'))||die$!;print T j( $i),"\n",j($i+3),"\n",j($i+6);close T;$t-=8**7if$i==13;u($f)||die$!}@f=sort <*.txt>;$t=(stat$f[0])[9]-9**7;for(@f){open(S,$_)||die$!;s/(\w+)/uc($1).++$i/e; open(D,">$_")||die$!;print D map uc,<S>;close D;u($_)||die$!} http://medaka.5ch.net/test/read.cgi/php/1036141603/233
234: nobodyさん [] 04/01/20 15:14 ID:F518czSp 激しく板違いなんですけど for(@LOG){ my($no,$dammy)=split(/<>/,$_); for(@LOG){ my($no2,$dammy)=split(/<>/,$_); if($no eq "$no2"){ print "LOG"; for(@LOG){ my($no3,$dammy)=split(/<>/,$_); if($no2 eq "$no3"){ print "LOG"; } } } } } を一回のforルーチンで済ますことってできますか? http://medaka.5ch.net/test/read.cgi/php/1036141603/234
235: 234 [age] 04/01/20 15:22 ID:??? for(@LOG){ my($dammy,$no)=split(/<>/,$_); for(@LOG){ my($dammy,$no2,$no3)=split(/<>/,$_); if($no eq "$no3"){ print "LOG"; for(@LOG){ my($dammy,$no4,$no5)=split(/<>/,$_); if($no2 eq "$no5"){ print "LOG"; } } } } } 間違えました。訂正しまつでつ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/235
236: 234 [age] 04/01/20 15:25 ID:??? ついでに2回のforルーチンでもいいです。 http://medaka.5ch.net/test/read.cgi/php/1036141603/236
237: nobodyさん [sage] 04/01/20 16:52 ID:??? >>234 コードを短くしたいという意図はわかるけど、 実用的なプログラムでは、ここに挙がっている様なテクニックは、 なるべく使わない方が良いよ。 http://medaka.5ch.net/test/read.cgi/php/1036141603/237
238: nobodyさん [sage] 04/02/01 15:24 ID:??? #!/usr/bin/perl require 'bbs.pl'; bbsmain(); 3行で掲示板作ったぞ http://medaka.5ch.net/test/read.cgi/php/1036141603/238
239: nobodyさん [sage] 04/02/01 22:12 ID:??? >>238 モジュール/ライブラリに関して >>46, >>135 >>136, >>174 >>175 http://medaka.5ch.net/test/read.cgi/php/1036141603/239
240: nobodyさん [sage] 04/02/12 06:42 ID:??? 転載 #!/usr/bin/perl -w # 526-byte qrpff, Keith Winstein and Marc Horowitz <sipb-iap-dvd@mit.edu> # MPEG 2 PS VOB file on stdin -> descrambled output on stdout # arguments: title key bytes in least to most-significant order $_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5; $_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d= unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=($t=255)&($d >>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9 ,$_=(map{$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t ^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271)) [$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval http://medaka.5ch.net/test/read.cgi/php/1036141603/240
241: nobodyさん [sage] 04/02/12 06:51 ID:??? >>240 それがそもそもの始まりだったりする。 http://pc3.2ch.net/tech/kako/984/984182993.html http://medaka.5ch.net/test/read.cgi/php/1036141603/241
242: nobodyさん [] 04/02/16 23:08 ID:j3AvJVjF 保守age。ついでに、あまり役に立ちそうにないTip 配列と配列サイズを同時に宣言 my $length_of_array = my @array = (1, 2, 3, 4, 5); http://medaka.5ch.net/test/read.cgi/php/1036141603/242
243: 7wiki [] 04/02/18 20:32 ID:b6u9ly2x * Added 空投稿でPage削除 * Diet evalの{}外してみた。-1 byte #!/usr/bin/perl -w use CGI":all";charset$c='EUC-JP';$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( );($p)=(path_info||FrontPage)=~/$w/;($m=param z)||unlink$p;if(open F,$m?">$p":$ p){eval flock F,2;print F$m||=<F>}$_=pre(escapeHTML$m).hr.ul map{li"".localtime ((stat)[9]),$_}sort{-M$a<=>-M$b}grep/^$w$/&-f,<*>;s|$w|(!-f$1&&$1).a{href,"$f/$ 1"},-f$1?$1:"?"|eg;put header,start_html(-title=>$p,encoding,$c,lang,ja),h1($p) ,startform(0,"$f/$p"),p(textarea(z,$m,6,60),br,submit),endform,hr,$_,end_html http://medaka.5ch.net/test/read.cgi/php/1036141603/243
244: nobodyさん [sage] 04/02/19 09:30 ID:??? >>243 eval の {} は外せないですよ。 eval flock F,2; だと flock() の戻り値から成る文字列を eval する事に。 unlink の問題はあっちでも指摘されてますが。:o) http://medaka.5ch.net/test/read.cgi/php/1036141603/244
245: 7uploader [sage] 04/02/19 11:44 ID:??? 順番的には先に telnetd を何とかしたいけど、検証が大変なので後回し。 #!/usr/bin/perl use CGI":all";sub v{open(F,pop)||die;binmode F}$CGI::POST_MAX=1024000;$/=\4096; chdir D;%f=map{$_,[a({href,"?d=$_"},$_),-s,''.localtime((stat)[9])]}@f=sort{-M$ a<=>-M$b}<*>;$f{$f=upload f}or$f&&do{v">$f";print F$_ while<$f>;close F};$f{$F= param d}?(v($F),put header(-type=>'application/octet-stream',Content_length,-s $F,attachment,$F),<F>):put(header,start_html,start_multipart_form,filefield(f), submit,endform,hr,table({border,1},Tr[th([qw/name size date/]),map{td$f{$_}}@f] ),end_html) ・windows 対応。 ・既存ファイルへの上書きを防止。但し upload 後自力 reload が必要に。 ファイル名は連番や時刻等にする方が安心且つ楽かな。 http://medaka.5ch.net/test/read.cgi/php/1036141603/245
246: nobodyさん [] 04/02/19 20:30 ID:mWwpYaYp >>244 あ、なるほど。それではevalの意味がなくなってしまう。 一応、事前に実験したんですが、検証方法が間違ってました。m(_ _) フォローありがとうございます。 > unlink の問題はあっちでも指摘されてますが。:o) あぁ、やってしまったぁ。試してくれた方ありがとう&&すみません。 ひとまず >>243は無効って事で、代案考えます。 ところで、ライセンスや掲載許可みたいな事を尋ねられたのだけど、 wiki, や blosxom, はオリジナルと同じ GPL って事でいいかな? 実際、7wikiはYukiWiki, 7blosxomは初期のblosxomを参考にしたので。 http://medaka.5ch.net/test/read.cgi/php/1036141603/246
247: SevenLines の中の人 [sage] 04/02/19 21:28 ID:??? >>246 ライセンスやら何やらは原作者に尋ねるのがスジですが、初出が 2ch だけに連絡取り辛いですな。各スレで直接呼びかけるしか無いかも。 SevenLines で保守している作品については、各原作者と配布形態等を 逐一取り決めてはいないので、建前上あのような断り書きの縛りにして います。拙作のは全部修正 BSD ライセンスで、アーカイヴにライセンス 文書も同梱してます。 ニーズがあるなら専用ドメイン取って、転送メールアドレスの提供ぐらいは しますよん。:) >各原作者殿 http://medaka.5ch.net/test/read.cgi/php/1036141603/247
248: nobodyさん [] 04/02/20 22:48 ID:g/Yl/nab # 重要な事を書き忘れました。 246==7wiki, 7files, 7search, 7rss, 7blosxom, 7Unit, 7uploader, 7hoo 原作です。 (当然だけど、オリジナルではなくこのスレの7行版の方の、です) 掲載許可に関しては、手間のかからない方法で「連絡不要」って事でいいかな? 連絡先作って貰っても、どれほど需要があるかは自分にもわからないので。 ライセンスについては、 #!/usr/bin/perl -w -- "License: http://www.gnu.org/licenses/gpl.txt" で、どぉでしょう?GPL以外でもいいけど http://medaka.5ch.net/test/read.cgi/php/1036141603/248
249: 246 [] 04/02/22 02:18 ID:Sgt6pnb3 >ライセンスの件 ... 自分が叩き台を出したとは言え、成果物はこのスレで参加者皆のものなので 出来れば他の方の意見も伺っておきたいのですが。特に異論がなければ、 >>248通り連絡不要/GPLという事にしたいと思います。 # もしくは、保守して下さってるサイトの管理者さんにお任せ。m(_ _ # 7vote use CGI':all';$p=POST;*P=*param;charset$c='EUC-JP';chdir V;($F)=P(f)=~/^(\d+)$/ ;if(open F,"+<$F"){eval{flock F,2};$t=<F>;while(<F>){if(/^(.+)\t(\d+)$/){$D{$1} =$2}}if(request_method==$p){($n=P(n))?$D{$n}||=1:($v=P(v))?$D{$v}++:0;seek F,0, 0;print F join("\n",$t,map{"$_\t$D{$_}"}keys%D)}}for(radio_group(v,[@K=sort{$D{ $b}<=>$D{$a}}keys%D])){$L{$K[$i++]}=$_}put header,start_html(title=>$t,encoding ,$c,lang,ja),h1($t),startform($p),table({},Tr[map{td["$L{$_}($D{$_})",hr{width =>$D{$_}}]}@K]),hr,textfield(n),hidden(f,$F,force=>1),submit,endform,end_html 設定方法 1) ディレクトリV を作る。 mkdir V;chdir V 2) 題名を書いたファイルを作る。echo "What is your native language" > 00001 # ファイル名は番号で。 3) chmod 0666 00001 # 必要に応じてパーミッションの設定 ./7vote.cgi?f=00001 # ブラウザからアクセス http://medaka.5ch.net/test/read.cgi/php/1036141603/249
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 203 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.009s