七行プログラミング (452レス)
上下前次1-新
306: Store7.pm [sage] 04/03/29 14:12 ID:??? AAS
 package Store7;use Symbol;sub E{$_=pop;s/['\\]/\\$&/g;"'$_'"}sub D{local$_=ref( 
 my$f=pop);/SCALAR/?E$$f:/ARRAY/?"[".join(',',map{D($_)}@$f)."]":/HASH/?"{".join 
 (',',map{E($_),D($f->{$_})}keys%$f)."}":E$f}$O='{open($f=gensym,$m.pop)||die if 
 $m="';$E='local$/;(eval<$f>';$P='print$f D pop;1';$F='eval{flock$f';$L='lock_'; 
 use base Exporter;$C=',close$f';$G='{$f=pop;';$M='}sub ';@EXPORT=($S='store',$R 
 ='retrieve');@EXPORT_OK=($S.'_fd',"fd_$R",$L.$S,$L.$R);eval qq/sub $R$O<";$E$C 
 )[0]$M$L$R$O<";$F,1};$E$C)[0]$M\fd_$R$G$E)[0]$M$S$O>";$P$C$M$L$S$O>";$F,2};$P$C 
 $M$S\_fd$G$P}/;$VERSION=1.00 
  
 ・store_fd 、lock_store 、fd_retrieve 、lock_retrieve 実装 
  
 >>260s/['\\]/\\$&/g でマズい例ってどんなのでしょう? 
308: SevenLines の中の人 [sage] 04/04/16 12:18 ID:??? AAS
 ダメ出しが無いようなので 7telnetd (>>300300(3): 7telnetd [sage] 04/03/25 10:13 ID:??? AAS
 cd 実装。 
  
 #!/usr/bin/perl 
 use IO::Socket;$S=new IO::Socket::INET(Listen,1,LocalPort,1029,Reuse,1);sub p{ 
 print$C @_}sub g($){($_=getc$C)eq pop}$n="\x0D\x0A";{binmode($C=$S->accept);$e= 
 1;$b='';p$p='$ ';{g"\xFF"?g"\xF7"?chop$b:/\xF8/?($b=''):/[\xFB-\xFE]/?do{$c=ord 
 ()-251;g"\x01"?($e=$c&2):/\x22/?($c&1or$e=0):($c=1);p pack(C2,255,250+(4,2,2,4, 
 3,2,1,4)[$c&1?$c:$c+4]),$_}:0:/\x00/?(($_,$b)=$b,s/[$n]+\z//,/^exit$/&&last,p$n 
 ,(/^cd\s+/?chdir$':map{s/\s+\z/$n/;$_}`$_`),$p):(/\x08/?chop$b:($b.=$_),/[$n]/ 
 ||$e&&p$_);redo}close$C;redo}  
) と Unit7 (>>305305(1): Unit7.pm [sage] 04/03/29 10:31 ID:??? AAS
 #!perl 
 if(!caller){my$p=pop;eval"use $p;1"?new$p->run:die$@}package Unit7;sub p{print" 
 @_\n"}sub new{bless{},shift}sub run{$N=$O=0;for(grep/^test/,keys%{ref($s=shift) 
 ."::"}){$T=$n=$o=0;$N++;set_up$s;$s->$_();tear_down$s;$n-$o||$O++;$T||p"$N) $S" 
 ;print"$o/$n ok\n"}p$N-$O?("Run: $N, Failures:",$N-$O):"OK ($N tests)"}*set_up= 
 *tear_down=sub{};sub assert{($s,$f,$m)=@_;($S)=(caller 1)[3]=~/\w+$/g;$n++;$o++ 
 ,return if$f;$T++||p"$N) $S";print"\t$m\n"}$VERSION=1.00 
  
 ・出力フォーマットの変更 
 ・簡易 TestRunner.pl を内包 (> perl ./Unit7.pm My::TestCase::Class)  
) を載せました。 
  
 (個人的な)TODO: 7ch と 7thread の転載体裁整え > Store7 > 7vote 
 128 氏もライセンス GPL にしちゃっていいんでしょか? 
  
 ご自身のサイトをお持ちでそちらで公開されるなら、SevenLines から 
 リンクさせてもらいますよと言ってみるテスト。 
309: Store7.pm [sage] 04/04/19 14:35 ID:??? AAS
 縮め。 
  
 package Store7;use base Exporter;use Symbol;sub E{$_=pop;s/['\\]/\\$&/g;"'$_'"} 
 @EXPORT=($S=store,$R=retrieve);$L=lock_;@EXPORT_OK=($S.'_fd',"fd_$R",$L.$S,$L.$ 
 R);sub D{local($_,$")=(ref(my$f=pop),',');/^S/?E$$f:/^A/?"[@{[map{D($_)}@$f]}]" 
 :/^H/?"{@{[map{E($_),D($f->{$_})}keys%$f]}}":E$f}$M='}sub ';$P='print$f D pop;1 
 ';($E,$C,$F,$G)=qw|local$/;(eval<$f> ,close$f eval{flock$f {$f=pop;|;$O='{open( 
 $f=gensym,$m.pop)||die if$m="';eval qq/sub $R$O<";$E$C)[0]$M$L$R$O<";$F,1};$E$C 
 )[0]$M fd_$R$G$E)[0]$M$S$O>";$P$C$M$L$S$O>";$F,2};$P$C$M$S\_fd$G$P}/;$VERSION=1 
310: SevenLines の中の人 [sage] 04/04/21 09:33 ID:??? AAS
 7ch と 7thread を GPL でパッケージング & Store7 を載せました。 
 README の変更等ありましたら作業用 uploader の方へお願いします。 
311: おうら [] 04/05/12 22:12 ID:3q/C0Ti+(1) AAS
 リファーを残さずにリダイレクト。JavaScript Off でも動作可能なコード 
  
 #! /bin/ksh 
 # リダイレクト 
 if [ "$QUERY_STRING" ]; then echo "Pragma: no-cache 
 Refresh: 0; URL=QUERY_STRING\n"; exit; fi 
 # エラー出力 
 echo "Content-Type: text/html\nPragma: no-cache\n\n<html><head> 
 </head><body>\nリンク先を指定して下さい\n</body></html>" 
  
 リファーについて参考にしたページ 
 外部リンク:www.teria.com 
312: おうら [sage] 04/05/12 22:16 ID:??? AAS
 うぐぅ。上のコード URL=QUERY_STIRNG に $ が抜けてました。 
 URL=$QUERY_STRING と見て下さい。 
313: 7vote [sage] 04/05/12 22:40 ID:??? AAS
 仕様変更無しでザッと縮め。 
  
 use CGI":all";*P=*param;charset$c='EUC-JP';chdir V;($F)=P(f)=~/^(\d+)$/;if(open 
 F,"+<$F"){eval{flock F,2};$t=<F>;/\t/and$D{$`}=$'+0while<F>;($n=P(n))?$D{$n}||= 
 1:($v=P(v))&&$D{$v}++,seek(F,0,0),print F"$t\n",map"$_\t$D{$_}\n",keys%D if 
 request_method=~PO}$L{$K[$i++]}=$_ for radio_group(v,[@K=sort{$D{$b}<=>$D{$a}} 
 keys%D]);put header,start_html(-Title,$t,encoding,$c,lang,ja),h1($t),startform, 
 table({},Tr[map{td["$L{$_}($D{$_})",hr{width,$D{$_}}]}@K]),hr,p(textfield(n), 
 hidden(f,$F),submit),endform,end_html 
  
 ・hr のグラフは微妙。 
 ・既に存在する選択肢への投票は、選択肢自体をクリックできた方がより直感的か? 
314(1): nobodyさん [sage] 04/05/15 10:22 ID:??? AAS
 open(IN, $ARGV[0].".txt");@lines = <IN>;close(IN); 
 foreach $line (@lines) 
 {if( $line =~ / [a-z0-9]{32}/ ){$hash .= $line;}} 
 open(OUT, ">hash".$ARGV[0].".txt"); 
 print OUT $hash;close(OUT); 
  
 WinnyBBS の内容を全部コピペ。テキストファイルに保存。 
 ↓ 
 その中からハッシュを摘出。テキストファイルに出力。 
315: nobodyさん [sage] 04/05/15 14:15 ID:??? AAS
 >>314 
 perl -ne "/ [0-9a-z]{32}/ && print" in.txt > out.txt 
 grep " [0-9a-z]\{32\}" in.txt > out.txt 
316(1): nobodyさん [] 04/06/11 10:54 ID:iPrFu4uN(1) AAS
 # 最近、下がり気味なので保守ついでに 
  
 package BEncode7;use base Exporter;@EXPORT=qw/bencode bdecode/;sub bencode($){ 
 my$i=pop;ref$i eq'HASH'?"d@{[join('',map{bencode($_).bencode($i->{$_})}keys%$i) 
 ]}e":ref$i eq'ARRAY'?"l@{[join('',map{bencode($_)}@$i)]}e":$i=~/^([+-]?\d+)$/? 
 "i${i}e":length($i).":$i"}sub bdecode{local$_=pop;(/^d(.+)e$/s)?{bdecode($1)}:( 
 /^l(.+)e$/s)?[bdecode("$1")]:(s/^i?([+-]?\d+)e//)?(int("$1"),bdecode($_)):( 
 /^(\d+)/&&s/\d+\:(.{$1})//s)?("$1",bdecode($_)):undef}7 
  
 Convert::BEncodeの7行版。bittorrent等で使われているフォーマット。 
317: nobodyさん [sage] 04/06/13 17:48 ID:??? AAS
 >>316 
 それだとテスト (001_basic.t) 通らないから、 
 オリジナルからザックリ縮め直してみたよ。 
  
 package Bencode7;use strict;use bytes;use base"Exporter";*bencode=*E=sub{no 
 locale;my$i=pop;ref$i eq"HASH"?join("","d",map(E($_).E($i->{$_}),sort keys%$i), 
 "e"):ref$i eq"ARRAY"?join("","l",map(E($_),@$i),"e"):$i=~/^\d+$/?"i${i}e": 
 length($i).":$i"};sub D{my$c=pop;my$i=shift@{$c};$i=~/d/?do{my%h;while(($i= 
 shift@{$c})ne"e"){unshift@{$c},$i;my$k=D($c);$h{$k}=D($c)}\%h}:$i=~/l/?do{my@l; 
 while(($i=shift@{$c})ne"e"){unshift@{$c},$i;push@l,D($c)}\@l}:$i=~/i/?do{my$n; 
 $n.=$i while($i=shift@{$c})ne"e";$n}:$i=~/\d/?do{my$n="";do{$n.=$i}while($i= 
 shift@{$c})=~/\d/;my$l="";$l.=shift@{$c}for 1..$n;$l}:$c}sub bdecode{D[pop=~ 
 /./gs]}our($VERSION,@EXPORT_OK)=qw(0.01 bencode bdecode) 
318(1): nobodyさん [] 04/07/14 16:53 ID:I7yo4p0b(1) AAS
 お題。 
 外部リンク:www.webclap.com 
 6行くらいにはなると思う。 
319(1): nobodyさん [age] 04/07/14 23:00 ID:??? AAS
 ム板より 
 2chスレ:tech 
  
 こういうのはperlとかのが得意そうだったので。 
320(1): nobodyさん [sage] 04/07/15 21:20 ID:??? AAS
 while($act ne "ガッ"){ 
 print "ぬるぽ\n"; 
 $act = <STDIN>; 
 chomp($act); 
 } 
 print "撃退\n"; 
 sleep(1); 
321(1): nobodyさん [sage] 04/07/24 18:39 ID:??? AAS
 これってphpじゃだめなん? 
322: nobodyさん [sage] 04/07/24 18:52 ID:??? AAS
 >>321 
 個人的には WebPlog らしいお題なら言語は何でも 
 いいと思うけど。てかこんなんはやった者勝ちかと。 
323(2): nobodyさん [sage] 04/07/24 20:08 ID:??? AAS
 とりあえずPHP5+SQLiteな一行掲示板。フォーム部分は分離させた。 
 <form action=bbs.php method=post>名前:<input type=text name=n>一言:<input type=t 
 ext name=t size=60><input type=submit value=送信></form> 
  
 <? $d=sqlite_open('l');$n=$_POST['n'];if(!@sqlite_query($d,'SELECT * FROM b;')){ 
 sqlite_query($d,'CREATE TABLE b(n,t,d);');}$t=$_POST['t'];$z=date("Y/m/d H:i:s") 
 ;if($n!=''&&$t!=''){$s="INSERT INTO b(n,t,d) VALUES(\"$n\",\"$t\",\"$z\");";sqli 
 te_query($d,$s);}print "<hr>";$r=sqlite_query($d,"SELECT * FROM b ORDER BY d DES 
 C");$c=0;while(($a=sqlite_fetch_array($r))&&$c<50){print htmlspecialchars($a['n' 
 ]).":".htmlspecialchars($a['t'])."[".$a['d']."]<br><hr>\n";$c++;}sqlite_close($ 
 d); ?> 
 DBファイルとテーブル勝手に作る方式。新着順、50件まで(ただしDBからは消してない)。 
 読みにくいけどSQLiteの使い方の勉強に…ならんか。 
324: nobodyさん [sage] 04/07/24 20:14 ID:??? AAS
 >>318 
 ちなみにそれ、アクセス解析機能もつけるのか? 
325: nobodyさん [sage] 04/07/25 13:12 ID:??? AAS
 >>323 
 GJ! 
326(1): nobodyさん [sage] 04/07/26 14:27 ID:??? AAS
 人ほとんどいないなここ(´・ω・`) 
  
 Web拍手PHP版(記録側)。例によってフォームは分離。 
 <form method="post" action="webclap.php" target="clap"> 
 <input type="hidden" name="m" value="c">ついでに一言。 
 <input type="text" name="t" size=40> 
 <input type="submit" value="拍手を送る"></form> 
  
 <? if($_POST['m']=='c'){$n=file("l");$d=date("Ymd");$h=date("H");$b=split(",",$n 
 [0]);$a=file("t");echo $a[array_rand($a)];if($b[0]!=$d){$i=0;$x="$d,1,";while($i 
 ++<24){if($i==$h+1)$x.="1,";else$x.="0,";}array_unshift($n,"$x\n");}else{$b[1]++ 
 ;$b[$h+2]++;$x="";$i=-1;while($i++<count($b)-2)$x.="$b[$i],";$n[0]="$x\n";if(cou 
 nt($n)>1414(2): nobodyさん [sage] 02/11/01 22:14 ID:??? AAS
 ああ、; までで1行ってわけじゃないんだ。  
)array_pop($n);}$f=fopen("l","w");while(count($n)>0)fputs($f,array_shif 
 t($n));fclose($f);$t=$_POST['t'];if($t!=""){$m=file("m");$f=fopen("m","w");array 
 _unshift($m,"$d,$t\n");if(count($m)>200200(6): nobodyさん [sage] 03/12/05 22:30 ID:??? AAS
 マ板から誘導されました。 
 既出と承知しつつ、1行掲示板です。 
 一応、名前と本文両方がないとはじく機能と、投稿日付つき。 
 (4行目の $t[4]/$t[3] を $t[2]:$t[1] にすれば、手動リロードの 
 簡易チャットにもなります。名前毎回入れるの面倒だけど。笑) 
 ファイル名は lb.cgi、パーミッション755で置けばいきなり稼動可能です。 
  
 #!/usr/bin/perl 
 $l='log.dat';@t=localtime();$t[4]++;use CGI;$q=new CGI;$d=$q->param('n'); 
 $e=$q->param('h');($d&&$e)and &g;&p;exit;sub g{&i;open F,">$l";flock(F,2);print 
  F "$t[4]/$t[3]:$d<BR>$e<HR>\n",@b;close F;}sub p{&i;print"Content-Type:text/h" 
 ,"tml\n\n一行掲示板<FORM METHOD=POST ACTION=\"lb.cgi\" NAME=1>名前<INPUT TYPE=" 
 ,"TEXT SIZE=20 NAME=n><BR>本文<INPUT TYPE=TEXT SIZE=60 NAME=h><BR><INPUT TYPE=" 
 ,"SUBMIT VALUE=\"送信\"></FORM><HR>",@b;}sub i{open F,"$l";@b=<F>;close F;}  
)array_pop($m);while(count($m)>0)fputs($f 
 ,array_shift($m));fclose($f);}} ?> 
  
 ごめん、8行になってしまた。取得ログは14日分で1時間単位ごとの記録アリ、 
 一言メッセージは200件まで保存。動かす前にl,m,tとそれぞれ空ファイル作ってくだされ。 
 tには拍手ボタン押した後に表示するHTMLを一行で叩き込んで。 
 複数行にするとランダムでどの行か選んで表示します。一行の長さの制限はわからん。 
 だれか7行に縮めてくれ。俺はもうだめだ(´Д⊂ 
327(1): nobodyさん [age] 04/07/26 20:37 ID:??? AAS
 ためしにkaiseki.php作ったら12行になったΛ||Λダメポ 
  
 活気ないのでage 
328: 7clap [sage] 04/07/26 23:10 ID:??? AAS
 オリジナルから仕様を極力変えない方向で10行。 
  
 #!/usr/local/bin/perl 
 use CGI":all";charset$c=Shift_JIS;param(k,$k=1+param k);($w=escapeHTML(param w) 
 )=~s/\x0D\x0A|[\x0A\x0D]/br/eg;sub d{($h,$d,$m,$y)=(localtime(time-86400*pop))[ 
 2..5];$g=($y+1900).sprintf"%02d"x2,$m+1,$d}($C,$M,$L,$T,$I,$S,$E,@M)=<DATA>; 
 open L,">$L";eval{flock L,2};open C;d>(@c=<C>)[-1]?(@c<14||shift@c,@l=((0)x25, 
 "\n")):(($g,@l)=split/<>/,pop@c);$l[$h+1]++;$l[0]++;open C,">$C";print C@c,join 
 "<>",$g,@l;d(14);open M;@m=grep$g<=$_,<M>;open M,">$M";print M@m,""ne$w&&d."<>$ 
 h<>$w<>\n";put header,start_html(-Title,$T,lang,ja,encoding,$c),($k<10?(p($M[ 
 rand@M]),startform,p(hidden(k),submit$S),p($I,br,textfield w,'',50,50),endform) 
 :p$E),end_html;__END__ 
 ./log.dat 
 ./mes.dat 
 ./lock.dat 
 web拍手送信完了 
 ついでに一言あればどうぞ (拍手だけでも送れます) 
 もっと送る 
 沢山の拍手を有り難うございました! 
 拍手が送信されました。ありがとうございました! 
 拍手が送信されました。ありがとうございますた! 
 拍手が送信されました。ありがとさ〜ん! 
329(1): nobodyさん [sage] 04/07/29 22:33 ID:??? AAS
 >>323 >>326 
 PHPって関数名の途中に空白文字入っても動くの? 
330(1): nobodyさん [sage] 04/07/30 11:49 ID:??? AAS
 >>329 
 行末改行は79文字で切ったものなんで、動かす場合は繋げて。 
上下前次1-新書関写板覧索設栞歴
あと 122 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル アボンOFF
ぬこの手 ぬこTOP 0.021s