七行プログラミング (452レス)
上下前次1-新
228: ?O?????|?X [] 03/12/30 16:01 ID:2yZZI8A2(1) AAS
 ccv 
229: nobodyさん [ ] 04/01/02 08:14 ID:??? AAS
 (・Д・) 
230: nobodyさん [sage] 04/01/18 12:18 ID:??? AAS
 テクニックメモを基に既存プログラムのメンテ中。 
 ・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 "外部リンク:my.netscape.com 
 '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>' 
231: 7ch.cgi [sage] 04/01/18 14:25 ID:??? AAS
 #!/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 } 
232: nobodyさん [] 04/01/18 20:09 ID:Hq0k6H3L(1) AAS
 CCC 
233: 7blosxom [sage] 04/01/19 14:33 ID:??? AAS
 外部リンク:cm.xrea.cc 
 仕様は >>182182(4): nobodyさん [] 03/12/03 06:43 ID:4m1BwtbU(1) AAS
 >175 $p の指定に不具合あり。join忘れてた。 
  
 use CGI':all';use File::Find;$P=join'/',grep/^\D\w*$/,(@i=split'/',path_info);( 
 $Y,$M,$D)=grep/^\d+$/,@i;find sub{($d,$m,$y)=(localtime($t=(stat)[9]))[3..5];!( 
 !($Y&&$Y-$y-1900)&&!($M&&$M-$m-1)&&!($D&&$D-$d)&&/\.txt/&&(!$i[-1]||/^$i[-1]$/) 
 )or$e{$File::Find::name}=$t},"./$P";put header,start_html;for(sort{$e{$b}<=>$e{ 
 $a}}keys%e){open F,$_;s/^\.//;chomp($h=<F>);put h2(a{href,url.$_},$h),pre<Fhr 
 ;close F}put end_html; 
  
 若干仕様変更。 
 - カテゴリ名は /^\D\w*$/ 
 - ファイルの指定は、PATH_INFO の末尾のみ有効。 
 - findの対象はカレントディレクトリ以下のみ。(絶対パス指定できるのは、流石にちょっと 
  
 BTW,ファイルハンドルってスコープ抜けたら勝手にcloseされるんだっけ?perlって。  
 辺りに。 
  
 テストファイル生成スクリプトも更新。 
  
 @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$!} 
234(3): nobodyさん [] 04/01/20 15:14 ID:F518czSp(1) AAS
 激しく板違いなんですけど 
 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ルーチンで済ますことってできますか?
235: 234 [age] 04/01/20 15:22 ID:??? AAS
 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"; 
 } 
 } 
 } 
 } 
 } 
 間違えました。訂正しまつでつ。 
236: 234 [age] 04/01/20 15:25 ID:??? AAS
 ついでに2回のforルーチンでもいいです。 
237: nobodyさん [sage] 04/01/20 16:52 ID:??? AAS
 >>234 
 コードを短くしたいという意図はわかるけど、 
 実用的なプログラムでは、ここに挙がっている様なテクニックは、 
 なるべく使わない方が良いよ。 
238(1): nobodyさん [sage] 04/02/01 15:24 ID:??? AAS
 #!/usr/bin/perl  
 require 'bbs.pl'; 
 bbsmain(); 
  
 3行で掲示板作ったぞ 
239: nobodyさん [sage] 04/02/01 22:12 ID:??? AAS
 >>238 
 モジュール/ライブラリに関して >>4646(2): nobodyさん [require使えば] 02/11/03 19:44 ID:??? AAS
 1行でも書けるな。  
 >>135135(3): nobodyさん [sage] 03/04/19 12:54 ID:??? AAS
 ライブラリをつかってよいのなら、主要な処理はライブラリに書けば数文字でかけますね。  
 >>136136(2): nobodyさん [sage] 03/04/19 21:11 ID:??? AAS
 >>135 
 個人的にはモジュール不可派だけど、WebProg だし 
 標準モジュールだけ使用可にした方が面白いものが 
 出てきそうな気がするのでそういう縛りで考えてるよ。  
 >>174 >>175  
240(1): nobodyさん [sage] 04/02/12 06:42 ID:??? AAS
 転載 
 #!/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>>88(2): nobodyさん [sage] 02/11/01 19:29 ID:??? AAS
 #!/usr/bin/perl 
 my $logfile = './count.log'; 
 my $addr = $ENV{'REMOTE_ADDR'}; 
 open( FILE,"+<$logfile" ) or die; 
 flock( FILE, 2 ); 
 ( $_ = <FILE> ) =~ /^(.*?):(.*)$/; 
 my ( $count, $ip ) = ( $1, $2 ); 
 $count++ if $addr ne $ip; 
 seek( FILE, 0, 0 ); 
 print FILE "$count\:$addr"; 
 truncate( FILE, tell ); 
 close FILE; 
 print "Content-type: text/plain\n\n"; 
 printf( "%.5d", $count ); 
 exit; 
  
 自作のカウンターです。元はKENTですが原型無いです。 
 一応多重カウント防止、桁そろえします。 
 これなんとか7行にできそーなんだけど、どうでそう?  
^($f=($t=255)&($d  
 >>1212(2): nobodyさん [sage] 02/11/01 21:11 ID:??? AAS
 >>11 
 でも、読みにくいね  
^$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  
241: nobodyさん [sage] 04/02/12 06:51 ID:??? AAS
 >>240 
 それがそもそもの始まりだったりする。 
 2chスレ:tech 
242: nobodyさん [] 04/02/16 23:08 ID:j3AvJVjF(1) AAS
 保守age。ついでに、あまり役に立ちそうにないTip 
 配列と配列サイズを同時に宣言 
 my $length_of_array = my @array = (1, 2, 3, 4, 5); 
243(2): 7wiki [] 04/02/18 20:32 ID:b6u9ly2x(1) AAS
  * 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
244(1): nobodyさん [sage] 04/02/19 09:30 ID:??? AAS
 >>243 
 eval の {} は外せないですよ。 
 eval flock F,2; だと flock() の戻り値から成る文字列を eval する事に。 
 unlink の問題はあっちでも指摘されてますが。:o) 
245: 7uploader [sage] 04/02/19 11:44 ID:??? AAS
 順番的には先に 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 が必要に。 
  
 ファイル名は連番や時刻等にする方が安心且つ楽かな。 
246(2): nobodyさん [] 04/02/19 20:30 ID:mWwpYaYp(1) AAS
 >>244  
 あ、なるほど。それではevalの意味がなくなってしまう。 
 一応、事前に実験したんですが、検証方法が間違ってました。m(_ _) 
 フォローありがとうございます。 
  
 > unlink の問題はあっちでも指摘されてますが。:o)  
 あぁ、やってしまったぁ。試してくれた方ありがとう&&すみません。 
 ひとまず >>243は無効って事で、代案考えます。 
ところで、ライセンスや掲載許可みたいな事を尋ねられたのだけど、 
 wiki, や blosxom, はオリジナルと同じ GPL って事でいいかな? 
 実際、7wikiはYukiWiki, 7blosxomは初期のblosxomを参考にしたので。
247: SevenLines の中の人 [sage] 04/02/19 21:28 ID:??? AAS
 >>246 
 ライセンスやら何やらは原作者に尋ねるのがスジですが、初出が 
 2ch だけに連絡取り辛いですな。各スレで直接呼びかけるしか無いかも。 
  
 SevenLines で保守している作品については、各原作者と配布形態等を 
 逐一取り決めてはいないので、建前上あのような断り書きの縛りにして 
 います。拙作のは全部修正 BSD ライセンスで、アーカイヴにライセンス 
 文書も同梱してます。 
  
 ニーズがあるなら専用ドメイン取って、転送メールアドレスの提供ぐらいは 
 しますよん。:) >各原作者殿 
248(1): nobodyさん [] 04/02/20 22:48 ID:g/Yl/nab(1) AAS
 # 重要な事を書き忘れました。 
 246==7wiki, 7files, 7search, 7rss, 7blosxom, 7Unit, 7uploader, 7hoo 原作です。 
 (当然だけど、オリジナルではなくこのスレの7行版の方の、です) 
  
 掲載許可に関しては、手間のかからない方法で「連絡不要」って事でいいかな? 
 連絡先作って貰っても、どれほど需要があるかは自分にもわからないので。 
  
 ライセンスについては、 
 #!/usr/bin/perl -w -- "License: 外部リンク[txt]:www.gnu.org" 
 で、どぉでしょう?GPL以外でもいいけど  
249: 246 [] 04/02/22 02:18 ID:Sgt6pnb3(1) AAS
 >ライセンスの件 ...  
 自分が叩き台を出したとは言え、成果物はこのスレで参加者皆のものなので 
 出来れば他の方の意見も伺っておきたいのですが。特に異論がなければ、 
 >>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 # ブラウザからアクセス 
250(1): SevenLines の中の人 [sage] 04/02/22 20:17 ID:??? AAS
 とりあえず 7wiki, 7files, 7search, 7rss, 7blosxom を GPL で 
 パッケージングしときました。README やライセンス文書の 
 和訳同梱までは手が回らなかったので、その辺はご希望が 
 あれば追々。 
  
 あー、ココに載せるにゃデカ目のファイルのやり取り用に 
 7uploader 改良して設置しますかのぅ(笑)。 
  
 7Unit, 7uploader, 7hoo もその内転載させてもらいますね。 
251(1): nobodyさん [sage] 04/02/22 23:23 ID:??? AAS
 7wiki と 7uploader 。どちらも shebang 無し七行ルールじゃないと辛いですな。 
  
 use CGI":all";charset$c='EUC-JP';$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=( 
 );($p)=(path_info||FrontPage)=~/$w/;if(open F,($m=param z)?">$p":$p){eval{flock 
 F,2};print F$m||=<F>;close F}param(d)eq"D"&&unlink$p;$_=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,map{submit d,$ 
 _}Write,Delete),endform,hr,$_,end_html 
  
 ・削除機能の実装案。 
  
 use CGI":all";$CGI::POST_MAX=1024000;$/=\4096;sub v{open(F,pop)||die;binmode F} 
 chdir D;if($f=upload f){$f=~/\.\w+$/;v">".time.$&;print F$_ while<$f>;close F}$ 
 i++<20?push@f,$_:unlink for sort{-M$a<=>-M$b}<*>;($_=param d)?(v($_),put header 
 (-Content_length=>-s,attachment,$_,Type,'application/octet-stream'),<F>):put( 
 header,start_html,start_multipart_form,filefield(f),submit,endform,hr,table({ 
 border,1},Tr[th([qw/name date size/]),map{td([a({href,"?d=$_"},$_),''.localtime 
 ((stat)[9]),-s])}@f]),end_html) 
  
 ・ファイル名を time に。 
 ・最大保存数を設定可能に。 
252: nobodyさん [sage] 04/02/23 22:42 ID:??? AAS
 7wikiがすこし結城さんとかにとりあげられて話題になってるんですね。 
上下前次1-新書関写板覧索設栞歴
あと 200 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s