・7行×79文字
・Perl
どうぞ。
七行プログラミング
1nobodyさん
02/11/01 18:06ID:umVq3FGM262nobodyさん
04/02/29 23:12ID:??? 改行しなければいいんでねーの?
264nobodyさん
04/03/03 04:38ID:??? 新しいお題目なんだけど
七行ハーボット
ってどう?
最低限、カウンタ・人工無能・ミニゲームつきって事で。
七行ハーボット
ってどう?
最低限、カウンタ・人工無能・ミニゲームつきって事で。
266nobody
04/03/04 17:41ID:yJd59Upc accesslog.cgi - 7行アクセス解析。
SSIで埋め込むことで記録。例:<!--#exec cgi="accesslog.cgi"-->
データを見るときは http://○○/accesslog.cgi?20040304&MSIE 6
みたいにパラメータ’日付 & 検索文字列(省略可))を渡して呼び出します。
正直perl歴はまだ半年で、テクニック的なものは使えないのでこの程度です。
#! /usr/bin/perl
sub z{local(*z)=$_[0];$z=~s/^(\d)$/0$1/;}print"Content-Type:text/plain\n\n";%e=
%ENV;$q=$e{'QUERY_STRING'};($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;z(*m);z(
*d);z(*h);z(*n);z(*s);if(!$q){open(F,">>$y$m$d.txt");print F
"$h$n$s<>$e{'REMOTE_ADDR'}<>$e{'HTTP_USER_AGENT'}<>$e{'HTTP_REFERER'}\n";}else{
($p,$k)=split(/&/,$q);open(F,"$p.txt");while(<F>){$c++;if($_=~/$k/){print;$t++;
}}print"\n全$c件/ヒット$t件\n";}close(F);
SSIで埋め込むことで記録。例:<!--#exec cgi="accesslog.cgi"-->
データを見るときは http://○○/accesslog.cgi?20040304&MSIE 6
みたいにパラメータ’日付 & 検索文字列(省略可))を渡して呼び出します。
正直perl歴はまだ半年で、テクニック的なものは使えないのでこの程度です。
#! /usr/bin/perl
sub z{local(*z)=$_[0];$z=~s/^(\d)$/0$1/;}print"Content-Type:text/plain\n\n";%e=
%ENV;$q=$e{'QUERY_STRING'};($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;z(*m);z(
*d);z(*h);z(*n);z(*s);if(!$q){open(F,">>$y$m$d.txt");print F
"$h$n$s<>$e{'REMOTE_ADDR'}<>$e{'HTTP_USER_AGENT'}<>$e{'HTTP_REFERER'}\n";}else{
($p,$k)=split(/&/,$q);open(F,"$p.txt");while(<F>){$c++;if($_=~/$k/){print;$t++;
}}print"\n全$c件/ヒット$t件\n";}close(F);
267nobodyさん
04/03/04 21:42ID:??? >>266
初級者お断りとは言わないし、むしろどんどんコードを書き込んでほしい
けれど、http://cm.xrea.cc/techinfo.cgi は一通り読んでほしいな。
ハッシュキーのクォート、ブロック末のセミコロン、関数の括弧、暗黙の
代入が行われる変数 etc etc... 文法的に省略可能な部分が沢山残って
いるのはちょっとねぇ。
print"Content-Type: text/plain\n\n";if(($_,$k)=split/&/,$ENV{QUERY_STRING}){/^
\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)&&($t++,print)while<F>;print"\n全$.件/".
"ヒット$t件"}else{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m
=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join('<>',"$h$n$s",@ENV{REMOTE_ADDR
,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
Perl の習熟度に自信がないなら、自力で何とか10行、ぐらいのサイズ
から載せてくれたら、スレの住人がよってたかって縮めるんじゃないかな。
初級者お断りとは言わないし、むしろどんどんコードを書き込んでほしい
けれど、http://cm.xrea.cc/techinfo.cgi は一通り読んでほしいな。
ハッシュキーのクォート、ブロック末のセミコロン、関数の括弧、暗黙の
代入が行われる変数 etc etc... 文法的に省略可能な部分が沢山残って
いるのはちょっとねぇ。
print"Content-Type: text/plain\n\n";if(($_,$k)=split/&/,$ENV{QUERY_STRING}){/^
\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)&&($t++,print)while<F>;print"\n全$.件/".
"ヒット$t件"}else{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m
=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join('<>',"$h$n$s",@ENV{REMOTE_ADDR
,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
Perl の習熟度に自信がないなら、自力で何とか10行、ぐらいのサイズ
から載せてくれたら、スレの住人がよってたかって縮めるんじゃないかな。
268266
04/03/05 18:15ID:EBEJkXEP しっかりと読みました。
>>267さんが短くしてくれたおかげで、妥協した機能がつけれました。
日付の範囲指定を可能にして、データをtab区切りで記録して
ファイルを表示するのではなくCSV(TSV)としてDLするようにしてみました。
#! /usr/bin/perl
print"Content-Disposition: attachment;filename=log.csv;\nContent-Type: text/t".
"ab-separated-values\n\n";if(($f,$t,$k)=split/&/,$ENV{QUERY_STRING}){for($f...$
t){/^\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)&&(print)while<F>}}else{s/^\d$/0$&/
for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m=~s/^\d$/0$&/;open F,">>$y$m".
"$d.txt";print F join("\t",$h,$n,$s,@ENV{REMOTE_ADDR,HTTP_USER_AGENT,
HTTP_REFERER}),"\n"}
>>267さんのにただ付け足した感じです。
それでも、たった一日でものすごい勉強になりました。
>>267さんが短くしてくれたおかげで、妥協した機能がつけれました。
日付の範囲指定を可能にして、データをtab区切りで記録して
ファイルを表示するのではなくCSV(TSV)としてDLするようにしてみました。
#! /usr/bin/perl
print"Content-Disposition: attachment;filename=log.csv;\nContent-Type: text/t".
"ab-separated-values\n\n";if(($f,$t,$k)=split/&/,$ENV{QUERY_STRING}){for($f...$
t){/^\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)&&(print)while<F>}}else{s/^\d$/0$&/
for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m=~s/^\d$/0$&/;open F,">>$y$m".
"$d.txt";print F join("\t",$h,$n,$s,@ENV{REMOTE_ADDR,HTTP_USER_AGENT,
HTTP_REFERER}),"\n"}
>>267さんのにただ付け足した感じです。
それでも、たった一日でものすごい勉強になりました。
270nobodyさん
04/03/12 09:33ID:??? 息抜きにテキストカウンタ。お題がお題なので、今日/昨日/総計のカウントと、
ランダムワード表示機能付けてまだ一行余ってるけど。
--- 7rwcntr.cgi ---
#!/usr/bin/perl
sub P{seek local*F=pop,0,0;print F@_}sub o{open(local*F,"+<@_")||die;eval{flock
F,2};*F}sub j{(localtime((stat pop)[9]))[3]}$l=@l=<$_>,chomp($r.=$l[rand$l])for
map{o$_}sort<?.dat>;$A=o"all.dat";$a=<$A>+1;j($T=o"tday.dat")==j($Y=o"yday.dat"
)?do{P$t=<$T>+1,$T;$y=<$Y>}:do{P$y=<$T>,$Y;P$t=1,$T};P$a,$A;$s=@ARGV?javascript
:plain;printf"Content-Type: text/$s\n\n".join('',<DATA>),$r,$a,$t,$y
__END__
空ファイル all.dat, tday.dat, yday.dat を予め用意。
?.dat というファイルがあると、そのファイルから一行ランダムに選んで表示。
?.dat が複数あった場合は、各ファイルからランダムに取り出して繋げて表示。
例えば 0.dat に人名、1.dat に場所、2.dat に行動のリストをそれぞれ用意
しておけば、「誰々が何処で何々」のようなランダム文を表示します。
ランダムワード表示機能付けてまだ一行余ってるけど。
--- 7rwcntr.cgi ---
#!/usr/bin/perl
sub P{seek local*F=pop,0,0;print F@_}sub o{open(local*F,"+<@_")||die;eval{flock
F,2};*F}sub j{(localtime((stat pop)[9]))[3]}$l=@l=<$_>,chomp($r.=$l[rand$l])for
map{o$_}sort<?.dat>;$A=o"all.dat";$a=<$A>+1;j($T=o"tday.dat")==j($Y=o"yday.dat"
)?do{P$t=<$T>+1,$T;$y=<$Y>}:do{P$y=<$T>,$Y;P$t=1,$T};P$a,$A;$s=@ARGV?javascript
:plain;printf"Content-Type: text/$s\n\n".join('',<DATA>),$r,$a,$t,$y
__END__
空ファイル all.dat, tday.dat, yday.dat を予め用意。
?.dat というファイルがあると、そのファイルから一行ランダムに選んで表示。
?.dat が複数あった場合は、各ファイルからランダムに取り出して繋げて表示。
例えば 0.dat に人名、1.dat に場所、2.dat に行動のリストをそれぞれ用意
しておけば、「誰々が何処で何々」のようなランダム文を表示します。
271nobodyさん
04/03/12 09:36ID:??? ● SSI での使用
__END__ トークン以下に
%s<br />all:%06d today:%03d yesterday:%03d
HTML ファイルの body 要素内に
<!--#include virtual="/cgi-bin/7rwcntr.cgi"-->
● JavaScript 経由で CGI プログラムとして使用
__END__ トークン以下に
function writeCount() {
document.write("%s<br />all:%06d today:%03d yesterday:%03d");
}
HTML ファイルの header 要素内に
<script src="/cgi-bin/7rwcntr.cgi?1" type="text/javascript"></script>
body 要素内に
<script type="text/javascript"><!--
writeCount();
//-->
</script>
__END__ トークン以下に
%s<br />all:%06d today:%03d yesterday:%03d
HTML ファイルの body 要素内に
<!--#include virtual="/cgi-bin/7rwcntr.cgi"-->
● JavaScript 経由で CGI プログラムとして使用
__END__ トークン以下に
function writeCount() {
document.write("%s<br />all:%06d today:%03d yesterday:%03d");
}
HTML ファイルの header 要素内に
<script src="/cgi-bin/7rwcntr.cgi?1" type="text/javascript"></script>
body 要素内に
<script type="text/javascript"><!--
writeCount();
//-->
</script>
2727rwcntr
04/03/12 11:11ID:??? 日付切替部分修正。
sub P{seek local*F=pop,0,0;print F@_}sub o{open(local*F,"+<@_")||die;eval{flock
F,2};*F}$l=@l=<$_>,chomp($r.=$l[rand$l])for map{o$_}sort<?.dat>;$T=o"tday.dat";
$Y=o"yday.dat";$A=o"all.dat";$a=<$A>+1;(localtime)[3]-(localtime((stat$Y)[9]))[
3]?do{P$y=<$T>,$Y;P$t=1,$T}:do{P$t=<$T>+1,$T;$y=<$Y>};P$a,$A;$s=@ARGV?
javascript:plain;printf"Content-Type: text/$s\n\n".join('',<DATA>),$r,$a,$t,$y
sub P{seek local*F=pop,0,0;print F@_}sub o{open(local*F,"+<@_")||die;eval{flock
F,2};*F}$l=@l=<$_>,chomp($r.=$l[rand$l])for map{o$_}sort<?.dat>;$T=o"tday.dat";
$Y=o"yday.dat";$A=o"all.dat";$a=<$A>+1;(localtime)[3]-(localtime((stat$Y)[9]))[
3]?do{P$y=<$T>,$Y;P$t=1,$T}:do{P$t=<$T>+1,$T;$y=<$Y>};P$a,$A;$s=@ARGV?
javascript:plain;printf"Content-Type: text/$s\n\n".join('',<DATA>),$r,$a,$t,$y
2737rwcntr
04/03/14 02:10ID:??? sub o{open(F,"+<@_")?eval{flock F,2}:die;<F>}($a,$t,$y,$l)=split/\t/,o"cnt.dat"
;dbmopen%r,remote,420or die;if(time-$r{$r="@ENV{REMOTE_ADDR,HTTP_USER_AGENT}"}>
3600&&$r ne$l){$y=$t,$t=0if(localtime)[3]-(localtime((stat F)[9]))[3];seek F,0,
0;print F join"\t",++$a,++$t,$y,$r;eval{truncate F,tell F}}$r{$r}=time;chomp($w
.=$l[rand(@l=o$_)])for sort<?.dat>;$/=@ARGV?javascript:plain;printf
"Content-Type: text/$/\n\n".<DATA>,$w,$a,$t,$y
・カウンタファイル三つを cnt.dat 一つに統合。
・重複カウント防止。(一時間以内と直前)
;dbmopen%r,remote,420or die;if(time-$r{$r="@ENV{REMOTE_ADDR,HTTP_USER_AGENT}"}>
3600&&$r ne$l){$y=$t,$t=0if(localtime)[3]-(localtime((stat F)[9]))[3];seek F,0,
0;print F join"\t",++$a,++$t,$y,$r;eval{truncate F,tell F}}$r{$r}=time;chomp($w
.=$l[rand(@l=o$_)])for sort<?.dat>;$/=@ARGV?javascript:plain;printf
"Content-Type: text/$/\n\n".<DATA>,$w,$a,$t,$y
・カウンタファイル三つを cnt.dat 一つに統合。
・重複カウント防止。(一時間以内と直前)
2747wiki
04/03/14 15:28ID:??? use CGI":all";charset$c="EUC-JP";$w='\b(([A-Z][a-z]+){2,})';$f=script_name;$/=(
);($p)=path_info=~/$w/;$p||=FrontPage;request_method=~PO&!($m=param z)&&unlink$
p;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:"?"|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
・「〜/7wiki.cgi/」に対応。
);($p)=path_info=~/$w/;$p||=FrontPage;request_method=~PO&!($m=param z)&&unlink$
p;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:"?"|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
・「〜/7wiki.cgi/」に対応。
2757uploader
04/03/14 15:30ID:??? use CGI":all";$CGI::POST_MAX=1024000;$/=\4096;chdir D;sub v{open(F,pop)?binmode
F:die}if($f=upload f){$f=~/\.\w+$/;v">".time.$&;print F$_ while<$f>;close F}++$
i<51?push@f,$_:unlink for sort{$b<=>$a}<*>;($_=param d)?(v($_),put header(-type
=>'application/octet-stream',Content_length,-s,attachment,$_),<F>):put(header,
start_html,start_multipart_form,filefield(f),submit,endform,table({border,1},Tr
[th([Name,Date,Size]),map{td[a({href,"?d=$_"},$_),''.localtime((stat)[9]),-s]}
@f]),end_html)
・縮め。
F:die}if($f=upload f){$f=~/\.\w+$/;v">".time.$&;print F$_ while<$f>;close F}++$
i<51?push@f,$_:unlink for sort{$b<=>$a}<*>;($_=param d)?(v($_),put header(-type
=>'application/octet-stream',Content_length,-s,attachment,$_),<F>):put(header,
start_html,start_multipart_form,filefield(f),submit,endform,table({border,1},Tr
[th([Name,Date,Size]),map{td[a({href,"?d=$_"},$_),''.localtime((stat)[9]),-s]}
@f]),end_html)
・縮め。
2767Hoo
04/03/14 15:31ID:??? use CGI":all";charset$c="EUC-JP";($p=path_info||Home)=~s!^/+|/+$!!g;chdir"./$p"
||die;$F='.7hoo';s/\s/ /g for@p=map{param$_}U,T,D;open(F,">>$F"),eval{flock F,2
},$"="\t",print F"@p\n"if@p;sub A{a{href,url.pop},$_}sub e{escapeHTML@N[@_]}put
header,start_html(-title=>"7Hoo",encoding,$c,lang,ja),p(join" / ",map{A$i.="/".
$_}split"/",$p),ul(li[map{A"/$p/$_"}grep-d,<*>]),open(F)&&hr.dl(map{@N=split/\t
/x;dt(a{href,$N[0]},b e 1),dd e 2}<F>),hr,startform(0,url."/$p"),p(join br,(map
{textfield/(.)/,$_,40}Url,Title),textarea(D,"",3,40,1),submit),endform,end_html
・XSS 脆弱性の fix
||die;$F='.7hoo';s/\s/ /g for@p=map{param$_}U,T,D;open(F,">>$F"),eval{flock F,2
},$"="\t",print F"@p\n"if@p;sub A{a{href,url.pop},$_}sub e{escapeHTML@N[@_]}put
header,start_html(-title=>"7Hoo",encoding,$c,lang,ja),p(join" / ",map{A$i.="/".
$_}split"/",$p),ul(li[map{A"/$p/$_"}grep-d,<*>]),open(F)&&hr.dl(map{@N=split/\t
/x;dt(a{href,$N[0]},b e 1),dd e 2}<F>),hr,startform(0,url."/$p"),p(join br,(map
{textfield/(.)/,$_,40}Url,Title),textarea(D,"",3,40,1),submit),endform,end_html
・XSS 脆弱性の fix
04/03/14 15:52ID:???
>>274-276 の三つ、問題無いようでしたらサイトに載せます。
7uploader と 7Hoo は仕様や出力を随分いぢってしまったので、
軌道修正もお願いします。(w >原作者殿
作業用のアップローダ用意しましたので、ファイルの受け渡しに
ご利用下さい。 http://cm.xrea.cc/upload.cgi
TODO: 7rwcntr > telnetd > Unit7 > Store7 > 7vote
telnetd と accesslog.cgi は 202 さんと 266 さんに掲載許可を
頂け次第サイトに載せようと思ってますので、適用ライセンス等
ご連絡下されば幸いです。
7uploader と 7Hoo は仕様や出力を随分いぢってしまったので、
軌道修正もお願いします。(w >原作者殿
作業用のアップローダ用意しましたので、ファイルの受け渡しに
ご利用下さい。 http://cm.xrea.cc/upload.cgi
TODO: 7rwcntr > telnetd > Unit7 > Store7 > 7vote
telnetd と accesslog.cgi は 202 さんと 266 さんに掲載許可を
頂け次第サイトに載せようと思ってますので、適用ライセンス等
ご連絡下されば幸いです。
278266
04/03/15 14:12ID:jJ3gsLA0 #! /usr/bin/perl
sub r{$r=$_[0]?"tab-separated-values\nContent-Disposition: attachment;filenam".
"e=log.csv":"plain";print"Content-Type: text/$r\n\n"}if(($a,$f,$t,$k)=split/&/,
$ENV{QUERY_STRING}){r $a;for($f...$t){/^\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)
&&(print)while<F>}}else{r;s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;
$m++;$m=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join("\t",$h,$n,$s,@ENV{
REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
>>266です。
>>268はアクセスログ記録モードで呼び出したときもCSVのダウンロードダイアログが出る
という致命的なバグがありました。すみません。
バグ修正と、さらにパラメータで画面に表示/ダウンロードを選択できるようにしました。
また、REQUEST_URIも記録するようにしたので、サイト全体の解析にも使えるようになったと思います。
スクリプト名は他にあわせて、7accesslog.cgi と変更しようと思います。
こんなので掲載していただけるのであれば是非お願いします。
このスレのおかげで完成したと思っているので、私としては権利等の主張をする
つもりはありませんのでGPLあたりの他のスクリプト同様のライセンスにしてください。
■使用法
・記録時はSSI等で呼び出します。>>271さんみたいにJavaScriptでも呼び出せそうな気はします。
・表示およびダウンロード時はパラメータをつけて普通に呼び出します。
パラメータなし アクセスログを記録。
日付.txt に 時,分,秒,REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER を記録します。
パラメータあり アクセスログを表示/ダウンロード
第1パラメータ ・・・ 0:表示 1:ダウンロード
第2パラメータ ・・・ ログの取得開始日(yyyymmdd)
第3パラメータ ・・・ ログの取得終了日(yyyymmdd)
第4パラメータ ・・・ ログ取得時の絞込みキーワード(省略すると全件取得)
(例) http://hoge.com/7accesslog.cgi?1&20040301&20040331&MSIE
この例では、2004年3月1日〜2004年3月31日までの「MSIE」を含むログがダウンロードされます。
sub r{$r=$_[0]?"tab-separated-values\nContent-Disposition: attachment;filenam".
"e=log.csv":"plain";print"Content-Type: text/$r\n\n"}if(($a,$f,$t,$k)=split/&/,
$ENV{QUERY_STRING}){r $a;for($f...$t){/^\d{8}$/x&&open F,"$_.txt";($k?/\Q$k/:1)
&&(print)while<F>}}else{r;s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;
$m++;$m=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join("\t",$h,$n,$s,@ENV{
REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
>>266です。
>>268はアクセスログ記録モードで呼び出したときもCSVのダウンロードダイアログが出る
という致命的なバグがありました。すみません。
バグ修正と、さらにパラメータで画面に表示/ダウンロードを選択できるようにしました。
また、REQUEST_URIも記録するようにしたので、サイト全体の解析にも使えるようになったと思います。
スクリプト名は他にあわせて、7accesslog.cgi と変更しようと思います。
こんなので掲載していただけるのであれば是非お願いします。
このスレのおかげで完成したと思っているので、私としては権利等の主張をする
つもりはありませんのでGPLあたりの他のスクリプト同様のライセンスにしてください。
■使用法
・記録時はSSI等で呼び出します。>>271さんみたいにJavaScriptでも呼び出せそうな気はします。
・表示およびダウンロード時はパラメータをつけて普通に呼び出します。
パラメータなし アクセスログを記録。
日付.txt に 時,分,秒,REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER を記録します。
パラメータあり アクセスログを表示/ダウンロード
第1パラメータ ・・・ 0:表示 1:ダウンロード
第2パラメータ ・・・ ログの取得開始日(yyyymmdd)
第3パラメータ ・・・ ログの取得終了日(yyyymmdd)
第4パラメータ ・・・ ログ取得時の絞込みキーワード(省略すると全件取得)
(例) http://hoge.com/7accesslog.cgi?1&20040301&20040331&MSIE
この例では、2004年3月1日〜2004年3月31日までの「MSIE」を含むログがダウンロードされます。
2797accesslog
04/03/16 15:40ID:??? ($a,$f,$t,$k)=@ARGV;print"Content-Type: text/",!$a?plain:"tab-separated-values
Content-Disposition: attachment;filename=log.csv","\n\n";$k=~s/%([\da-f]{2})/
pack"H2",$1/egi;$f?do{/^\d{8}$/&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)
for$f..$t||$f}:do{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m
=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join("\t",$h,$n,$s,
@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
・検索ワードを URI-unescape
・第 3 引数を省略可能に
・パラメータをクエリ渡しから引数渡しへ
(例)
http://hoge.com/7accesslog.cgi?1+20040301+20040331+MSIE%205
http://hoge.com/7accesslog.cgi?1+20040301
Content-Disposition: attachment;filename=log.csv","\n\n";$k=~s/%([\da-f]{2})/
pack"H2",$1/egi;$f?do{/^\d{8}$/&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)
for$f..$t||$f}:do{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m
=~s/^\d$/0$&/;open F,">>$y$m$d.txt";print F join("\t",$h,$n,$s,
@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
・検索ワードを URI-unescape
・第 3 引数を省略可能に
・パラメータをクエリ渡しから引数渡しへ
(例)
http://hoge.com/7accesslog.cgi?1+20040301+20040331+MSIE%205
http://hoge.com/7accesslog.cgi?1+20040301
280266
04/03/16 18:36ID:??? >7accesslog
for で $f..$t ってやると、月や年をまたいだ時、
無駄なファイルオープン(できないやつ)が多発するので
そこをなんとかしたいです・・・。
ヘタレな私にはいい方法が思いつきませんが。
for で $f..$t ってやると、月や年をまたいだ時、
無駄なファイルオープン(できないやつ)が多発するので
そこをなんとかしたいです・・・。
ヘタレな私にはいい方法が思いつきませんが。
281nobodyさん
04/03/16 22:51ID:??? >>280
・効率的な生成アルゴリズムを Web や本から探す。
・思いつくまま色々書いて試す。
・文字数を食っている機能を捨てる。
・緩めのルール (shebang 無し 7 行 & モジュール可) で挑戦する。
とにかく足掻いて形にするのが大事。
・効率的な生成アルゴリズムを Web や本から探す。
・思いつくまま色々書いて試す。
・文字数を食っている機能を捨てる。
・緩めのルール (shebang 無し 7 行 & モジュール可) で挑戦する。
とにかく足掻いて形にするのが大事。
282nobodyさん
04/03/16 23:11ID:??? >>277
202です。 ライセンスとかようわからないですが、telnetdとStore7はほかのと同じようにして置いていただければ結構です。
202です。 ライセンスとかようわからないですが、telnetdとStore7はほかのと同じようにして置いていただければ結構です。
283266
04/03/17 10:18ID:??? ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack"H2",$1/egi;$l=$f.($t?"-$t":"").($k
?"-$k":"");print"Content-Type: text/",$a?"tab-separated-values\nContent-Dispo".
"sition: attachment;filename=log$l.csv":plain,"\n\n";$f?do{/^\d{4}(\d\d)(\d\d)$
/x&&$1*$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t
||$f}:do{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m=~s/^\d$/0
$&/x;open F,">>$y$m$d.txt";print F join("\t",$y,$m,$d,$h,$n,$s,@ENV{REQUEST_URI
,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
■記録時
・ログファイルに日付も記録するよう変更。
(日付範囲を指定してログ表示した際に日付が無いとわけわからないため)
■閲覧時
・ダウンロード時のファイル名に抽出条件を盛り込むよう変更。
・1〜12月の1〜31日の間だけファイルオープンを試みるよう変更。
いろいろ増やしたらshebang無し七行になっちゃいました。
?"-$k":"");print"Content-Type: text/",$a?"tab-separated-values\nContent-Dispo".
"sition: attachment;filename=log$l.csv":plain,"\n\n";$f?do{/^\d{4}(\d\d)(\d\d)$
/x&&$1*$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t
||$f}:do{s/^\d$/0$&/for($s,$n,$h,$d,$m,$y)=localtime;$y+=1900;$m++;$m=~s/^\d$/0
$&/x;open F,">>$y$m$d.txt";print F join("\t",$y,$m,$d,$h,$n,$s,@ENV{REQUEST_URI
,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
■記録時
・ログファイルに日付も記録するよう変更。
(日付範囲を指定してログ表示した際に日付が無いとわけわからないため)
■閲覧時
・ダウンロード時のファイル名に抽出条件を盛り込むよう変更。
・1〜12月の1〜31日の間だけファイルオープンを試みるよう変更。
いろいろ増やしたらshebang無し七行になっちゃいました。
284nobodyさん
04/03/17 11:13ID:??? トイレに行かせただけで動作未確認。
($k=$ARGV[3])=~s/%([\da-f]{2})/pack"H2",$1/egi;/\D/&&die for($a,$f,$t)=@ARGV;
print"Content-Type: text/",$a?"tab-separated-values\nContent-Disposition: atta"
."achment;filename=log$f".($t&&"-$t").($k&&"-$k").'.csv':plain,"\n\n";$f?do{/^.
...(..)(..)$/x&&$1*$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,
<F>)for$f..$t||$f}:do{($d,$m,$y)=(localtime)[3,4,5];open F,sprintf">>%d%02d%02"
."d.txt",$y+1900,$m+1,$d;print F join("\t",''.localtime,@ENV{REQUEST_URI,
REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
ログの日付を scalar localtime に変更。
($k=$ARGV[3])=~s/%([\da-f]{2})/pack"H2",$1/egi;/\D/&&die for($a,$f,$t)=@ARGV;
print"Content-Type: text/",$a?"tab-separated-values\nContent-Disposition: atta"
."achment;filename=log$f".($t&&"-$t").($k&&"-$k").'.csv':plain,"\n\n";$f?do{/^.
...(..)(..)$/x&&$1*$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,
<F>)for$f..$t||$f}:do{($d,$m,$y)=(localtime)[3,4,5];open F,sprintf">>%d%02d%02"
."d.txt",$y+1900,$m+1,$d;print F join("\t",''.localtime,@ENV{REQUEST_URI,
REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
ログの日付を scalar localtime に変更。
285nobodyさん
04/03/17 14:13ID:??? ($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack"H2",$1/egi;print"Content-Type: ".
"text/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=l".
"og$f".($t&&"-$t").($k&&"-$k").'.csv':plain,"\n\n";$f?do{/^....(..)(..)$/&&$1*
$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:
do{($d,$m,$y)=(localtime)[3,4,5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1
,$d;print F join("\t",''.localtime,@ENV{REQUEST_URI,REMOTE_ADDR,
HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
>>284
1行目ってなんで変えたの?>>283の1行目で動くようなので戻すことで若干縮め。
あとattachmentのつづり直した。もう少しでshebang含7行。
"text/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=l".
"og$f".($t&&"-$t").($k&&"-$k").'.csv':plain,"\n\n";$f?do{/^....(..)(..)$/&&$1*
$2&&$1<13&&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:
do{($d,$m,$y)=(localtime)[3,4,5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1
,$d;print F join("\t",''.localtime,@ENV{REQUEST_URI,REMOTE_ADDR,
HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
>>284
1行目ってなんで変えたの?>>283の1行目で動くようなので戻すことで若干縮め。
あとattachmentのつづり直した。もう少しでshebang含7行。
286nobodyさん
04/03/17 15:03ID:???287nobodyさん
04/03/17 17:14ID:??? >>285
78文字+改行になってるよw
さらに強引に短くしてみた。
変更点
pack"H2"→pack H2 DLファイル名→$f-$t-$k.log $1*$2→$1のみ判定 [3,4,5]→[3..5]
#! perl
($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te".
"xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($
t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";$f?do{/^....(..)(..)$/&&$1&&$1<13&&$2
<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:do{($d,$m,$y)=
(localtime)[3..5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1,$d;print F join
("\t",''.localtime,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),
"\n"}
あと5バイト
78文字+改行になってるよw
さらに強引に短くしてみた。
変更点
pack"H2"→pack H2 DLファイル名→$f-$t-$k.log $1*$2→$1のみ判定 [3,4,5]→[3..5]
#! perl
($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te".
"xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($
t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";$f?do{/^....(..)(..)$/&&$1&&$1<13&&$2
<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:do{($d,$m,$y)=
(localtime)[3..5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1,$d;print F join
("\t",''.localtime,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),
"\n"}
あと5バイト
288nobodyさん
04/03/17 17:15ID:??? 汎用 TSV ヴューア
#!/usr/local/bin/perl
use CGI":all";charset$C='EUC-JP';*P=*param;($f=P(f))=~/[^\w*\-.?\[\\\]]/&¨$
w=P(w)||"\t";chomp(@l=map{open(_)?grep(/\Q$w/,<_>):()}grep/$f/o&&-f,<*>)if$f;%l
=(f,"target file regex",w,"search word",o,"output file name");put(($o=P(o))?(
"Content-Type: text/tab-separated-values\nContent-Disposition: attachment;file"
."name=$o\n\n",@l):(header,start_html(-title=>'7tsview',encoding,$C,lang,ja),
table({border,1},Tr[map{td[split/\t/]}@l]),startform(0,url),p(map{$l{$_},
textfield($_,'',40).br}f,w,o),endform,end_html))
#!/usr/local/bin/perl
use CGI":all";charset$C='EUC-JP';*P=*param;($f=P(f))=~/[^\w*\-.?\[\\\]]/&¨$
w=P(w)||"\t";chomp(@l=map{open(_)?grep(/\Q$w/,<_>):()}grep/$f/o&&-f,<*>)if$f;%l
=(f,"target file regex",w,"search word",o,"output file name");put(($o=P(o))?(
"Content-Type: text/tab-separated-values\nContent-Disposition: attachment;file"
."name=$o\n\n",@l):(header,start_html(-title=>'7tsview',encoding,$C,lang,ja),
table({border,1},Tr[map{td[split/\t/]}@l]),startform(0,url),p(map{$l{$_},
textfield($_,'',40).br}f,w,o),endform,end_html))
289nobodyさん
04/03/17 17:27ID:??? use CGI":all";charset$C='EUC-JP';*P=*param;($f=P(f))=~/[^\w*\-.?\[\\\]]/&¨$
w=P(w)||"\t";chomp(@l=map{open(_)?grep(/\Q$w/,<_>):()}grep/$f/o&&-f,<*>)if$f;%l
=(f,"target file regex",w,"search word",o,"output file name");put(($o=P(o))?(
"Content-Type: text/tab-separated-values\nContent-Disposition: attachment;file"
."name=$o\n\n",@l):(header,start_html(-title=>'7tsview',encoding,$C,lang,ja),
table({border,1},Tr[map{td[split/\t/]}@l]),startform(0,url),p(map{$l{$_},
textfield($_,'',40).br}f,w,o),submit(0,go),endform,end_html))
submitを追加
w=P(w)||"\t";chomp(@l=map{open(_)?grep(/\Q$w/,<_>):()}grep/$f/o&&-f,<*>)if$f;%l
=(f,"target file regex",w,"search word",o,"output file name");put(($o=P(o))?(
"Content-Type: text/tab-separated-values\nContent-Disposition: attachment;file"
."name=$o\n\n",@l):(header,start_html(-title=>'7tsview',encoding,$C,lang,ja),
table({border,1},Tr[map{td[split/\t/]}@l]),startform(0,url),p(map{$l{$_},
textfield($_,'',40).br}f,w,o),submit(0,go),endform,end_html))
submitを追加
290nobodyさん
04/03/17 17:31ID:??? 動作未確認。末尾に空フィールドができるけどゴメンして。
($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te".
"xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($
t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";sub l{localtime}$f?do{/^....(..)(..)$
/x&$1<13&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:do{
($d,$m,$y)=(l)[3..5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1,$d;print F
join"\t",''.l,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER},"\n"}
($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te".
"xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($
t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";sub l{localtime}$f?do{/^....(..)(..)$
/x&$1<13&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$f}:do{
($d,$m,$y)=(l)[3..5];open F,sprintf">>%d%02d%02d.txt",$y+1900,$m+1,$d;print F
join"\t",''.l,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER},"\n"}
291266
04/03/18 14:52ID:vM8w8oY1 #! /usr/bin/perl
($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te".
"xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($
t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";sub l{localtime}$f?do{/^....(..)(..)$
/x&$1*$2&$1<13&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$
f}:do{open F,sprintf">>%d%02d%02d.txt",(l)[5]+1900,(l)[4]+1,(l)[3];print F join
("\t",''.l,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
・書き込み時のファイル名構築の際に関数lを使用するよう変更
・0月も0日も除外するようあらためて変更
・>>290さんの末尾の空フィールドができないよう変更
皆さんのおかげで再びshebang入り七行達成しました。
しかし、>>288-289のツールがあるなら、閲覧モードは不要だったりして・・・。
($a,$f,$t,$k)=@ARGV;$k=~s/%([\da-f]{2})/pack H2,$1/egi;print"Content-Type: te".
"xt/",$a?"tab-separated-values\nContent-Disposition: attachment;filename=$f".($
t&&"-$t").($k&&"-$k").'.log':plain,"\n\n";sub l{localtime}$f?do{/^....(..)(..)$
/x&$1*$2&$1<13&$2<32&&(open(F,"$_.txt"),print grep$k?/\Q$k/o:1,<F>)for$f..$t||$
f}:do{open F,sprintf">>%d%02d%02d.txt",(l)[5]+1900,(l)[4]+1,(l)[3];print F join
("\t",''.l,@ENV{REQUEST_URI,REMOTE_ADDR,HTTP_USER_AGENT,HTTP_REFERER}),"\n"}
・書き込み時のファイル名構築の際に関数lを使用するよう変更
・0月も0日も除外するようあらためて変更
・>>290さんの末尾の空フィールドができないよう変更
皆さんのおかげで再びshebang入り七行達成しました。
しかし、>>288-289のツールがあるなら、閲覧モードは不要だったりして・・・。
04/03/23 12:22ID:???
293nobodyさん
04/03/23 16:33ID:C7ISjwar #! /usr/bin/perl
use CGI":all";charset$c='EUC-JP';opendir(H,"./");$s='7editor';while($i=readdir
H){$l.=li a {href,"$s.cgi?$i"},$i}if(request_method eq'POST'){$p=param(f);open(
H,">$p");print H param(t);print"Location: $s.cgi?$p\n\n"}else{$q=$ARGV[0];if($q
){open H,$q;$f.=$_ while(<H>)}put header,start_html(-title=>$s,encoding,$c,lang
,ja),h1($s),ul($l),startform(post,"$s.cgi"),p(textfield f,$q),p(textarea t,$f,9
,82),p(submit regist),endform,end_html}
●7editor.cgi
サーバ上のファイルを直接編集できます。ファイル名欄を変えれば新規作成も可能です。
textareaのサイズは、一応七行プログラミングを組みやすいかと思われる82x9にしてみました。
ToDo:
・セキュリティ対策
・ディレクトリ移動
・ファイル削除くらいはできた方がいいかも
とりあえずたたき台ってことで。
use CGI":all";charset$c='EUC-JP';opendir(H,"./");$s='7editor';while($i=readdir
H){$l.=li a {href,"$s.cgi?$i"},$i}if(request_method eq'POST'){$p=param(f);open(
H,">$p");print H param(t);print"Location: $s.cgi?$p\n\n"}else{$q=$ARGV[0];if($q
){open H,$q;$f.=$_ while(<H>)}put header,start_html(-title=>$s,encoding,$c,lang
,ja),h1($s),ul($l),startform(post,"$s.cgi"),p(textfield f,$q),p(textarea t,$f,9
,82),p(submit regist),endform,end_html}
●7editor.cgi
サーバ上のファイルを直接編集できます。ファイル名欄を変えれば新規作成も可能です。
textareaのサイズは、一応七行プログラミングを組みやすいかと思われる82x9にしてみました。
ToDo:
・セキュリティ対策
・ディレクトリ移動
・ファイル削除くらいはできた方がいいかも
とりあえずたたき台ってことで。
294nobodyさん
04/03/23 17:07ID:??? 縮め&書き込み確認ダイアログ
#! /usr/bin/perl
use CGI":all";charset$c='EUC-JP';opendir H,"./";$s='7editor';while($i=readdir H
){$l.=li a{href,"$s.cgi?$i"},$i}if(request_method eq'POST'){$p=param(f);open H,
">$p";print H param(t);put"Location: $s.cgi?$p\n\n"}else{if(open H,$q=$ARGV[0])
{$f.=$_ while(<H>)}put header,start_html(-title=>$s,encoding,$c,lang,ja),h1($s)
,ul($l),startform(-onSubmit=>"return confirm('OK?')",post,"$s.cgi"),p(textfield
f,$q),p(textarea t,$f,9,82),p(submit regist),endform,end_html}
#! /usr/bin/perl
use CGI":all";charset$c='EUC-JP';opendir H,"./";$s='7editor';while($i=readdir H
){$l.=li a{href,"$s.cgi?$i"},$i}if(request_method eq'POST'){$p=param(f);open H,
">$p";print H param(t);put"Location: $s.cgi?$p\n\n"}else{if(open H,$q=$ARGV[0])
{$f.=$_ while(<H>)}put header,start_html(-title=>$s,encoding,$c,lang,ja),h1($s)
,ul($l),startform(-onSubmit=>"return confirm('OK?')",post,"$s.cgi"),p(textfield
f,$q),p(textarea t,$f,9,82),p(submit regist),endform,end_html}
295nobodyさん
04/03/23 18:36ID:??? #! /usr/bin/perl
use CGI":all";charset$c='EUC-JP';*b=*param;opendir H,"./";while($i=readdir H){$
l.=li a{href,($s='7editor').".cgi?$i"},$i}if(request_method=~/POST/){open H,">"
.($n=b F);$_=b T;s/[\r\n|\r[^\n]]/\n/g;print H;put redirect"$s.cgi?$n"}else{if(
open H,$q=$ARGV[0]){$f.=$_ while<H>}put header,start_html(-title=>$s,encoding,$
c,lang,ja),h1($s),ul($l),startform(-onSubmit=>"return confirm('OK?')",,"$s.cgi"
),p(textfield F,$q),p(textarea T,$f,9,82),p(submit regist),endform,end_html}
環境によって改行コードが変わってしまうバグを修正。結構ギリギリ。
use CGI":all";charset$c='EUC-JP';*b=*param;opendir H,"./";while($i=readdir H){$
l.=li a{href,($s='7editor').".cgi?$i"},$i}if(request_method=~/POST/){open H,">"
.($n=b F);$_=b T;s/[\r\n|\r[^\n]]/\n/g;print H;put redirect"$s.cgi?$n"}else{if(
open H,$q=$ARGV[0]){$f.=$_ while<H>}put header,start_html(-title=>$s,encoding,$
c,lang,ja),h1($s),ul($l),startform(-onSubmit=>"return confirm('OK?')",,"$s.cgi"
),p(textfield F,$q),p(textarea T,$f,9,82),p(submit regist),endform,end_html}
環境によって改行コードが変わってしまうバグを修正。結構ギリギリ。
296nobodyさん
04/03/24 11:46ID:/Yo7kiNa #! perl
use CGI":all";charset$c='EUC-JP';opendir H,".".($d=path_info);while($_=readdir
H){if(!/^\.+$/){$l.=li a{href,script_name."$d".(-d".$d/$_"?"/":"?").$_},$_}}if(
request_method=~/P/){open H,">.$d/".($n=param F);$_=param T;s/\r\n|\r[^\n]/\n/g
;print H}if(open H,".$d/".($q=$ARGV[0])){$f.=$_ while<H>}put header,start_html(
-title=>"7editor",encoding,$c,lang,ja),h1($d||"/"),ul($l),startform(-onSubmit=>
"return confirm('OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html
ディレクトリを移動できるように
「.」「..」は非表示
h1要素は現在位置を表示
スクリプト名は自由(7editorじゃなくても可)に
でも14文字ほどハミ出た。
use CGI":all";charset$c='EUC-JP';opendir H,".".($d=path_info);while($_=readdir
H){if(!/^\.+$/){$l.=li a{href,script_name."$d".(-d".$d/$_"?"/":"?").$_},$_}}if(
request_method=~/P/){open H,">.$d/".($n=param F);$_=param T;s/\r\n|\r[^\n]/\n/g
;print H}if(open H,".$d/".($q=$ARGV[0])){$f.=$_ while<H>}put header,start_html(
-title=>"7editor",encoding,$c,lang,ja),h1($d||"/"),ul($l),startform(-onSubmit=>
"return confirm('OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html
ディレクトリを移動できるように
「.」「..」は非表示
h1要素は現在位置を表示
スクリプト名は自由(7editorじゃなくても可)に
でも14文字ほどハミ出た。
297nobodyさん
04/03/24 14:15ID:??? use CGI":all";charset$c='EUC-JP';($d=path_info)=~s|/*$|/|;if(request_method=~PO
){open H,">.$d".($n=param F);$_=param T;s/\x0D\x0A/\n/g;tr/\r/\n/;print H}$/=()
,$f=<H>if open H,".$d".($q=pop);opendir H,".$d";$l.=li a{href,url.$d.(-d".$d$_"
?$_:"?$_")},$_ for grep!/^\.+$/,readdir H;put header,start_html(-encoding=>$c,
lang,ja,Title,"7editor"),h1($d),ul($l),startform(-onSubmit=>"return confirm(
'OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html
){open H,">.$d".($n=param F);$_=param T;s/\x0D\x0A/\n/g;tr/\r/\n/;print H}$/=()
,$f=<H>if open H,".$d".($q=pop);opendir H,".$d";$l.=li a{href,url.$d.(-d".$d$_"
?$_:"?$_")},$_ for grep!/^\.+$/,readdir H;put header,start_html(-encoding=>$c,
lang,ja,Title,"7editor"),h1($d),ul($l),startform(-onSubmit=>"return confirm(
'OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html
298nobodyさん
04/03/24 15:33ID:??? ・.で画面リロード、..で親DIRへ移動
・ディレクトリはお尻に「/」
use CGI":all";charset$c='EUC-JP';($d=path_info)=~s|/*$|/|;if(request_method=~PO
){open H,">.$d".($n=param F);$_=param T;s/\x0D\x0A/\n/g;tr/\r/\n/;print H}$/=()
,$f=<H>if open H,".$d".($q=pop);opendir H,".$d";$l.=li a{href,url.$d.(($h=-d".$
d$_")?$_:"?$_")},($_.($h&&"/"))for readdir H;put header,start_html(-encoding=>$
c,lang,ja,Title,"7editor"),h1($d),ul($l),startform(-onSubmit=>"return confirm(
'OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html
・ディレクトリはお尻に「/」
use CGI":all";charset$c='EUC-JP';($d=path_info)=~s|/*$|/|;if(request_method=~PO
){open H,">.$d".($n=param F);$_=param T;s/\x0D\x0A/\n/g;tr/\r/\n/;print H}$/=()
,$f=<H>if open H,".$d".($q=pop);opendir H,".$d";$l.=li a{href,url.$d.(($h=-d".$
d$_")?$_:"?$_")},($_.($h&&"/"))for readdir H;put header,start_html(-encoding=>$
c,lang,ja,Title,"7editor"),h1($d),ul($l),startform(-onSubmit=>"return confirm(
'OK?')"),p(textfield(F,$q),br,textarea(T,$f,9,82),br,submit),endform,end_html
299nobodyさん
04/03/24 20:28ID:??? #!/usr/bin/perl
use IO::Socket;$S=new IO::Socket::INET(Listen,1,LocalPort,1029,Reuse,1);sub p{
print@_}sub g($){($_=getc$C)eq pop}$n="\x0D\x0A";sub o{$c=pop;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]),
$_}{binmode($C=$S->accept);select$C;$e=1;$b='';p$p='$ ';{g"\xFF"?g"\xF7"?chop$b
:/\xF8/?($b=''):/\xFB/?o 0:/\xFC/?o 1:/\xFD/?o 2:/\xFE/?o 3:0:/\x00/?do{$b=~s/[
$n]+\z//x;"exit"eq$b&&last;s/\s+\z/$n/for@o=`$b`;p$n,@o,$p;$b=''}:(/\x08/?chop$
b:($b.=$_),/[$n]/||$e&&p$_);redo}close$C;redo}
ttp://www5e.biglobe.ne.jp/~aji/3min/53.html を読みながら色々
実装してみるも、>>207 に負けてる telnetd 。;)
動作確認:
TeraTermPro → Win98SE (command.com + KI-Shell)
TeraTermPro → FreeBSD 4-STABLE (tcsh)
telnet(1) (line mode) → Win98SE (command.com + KI-Shell)
telnet(1) (line mode) → FreeBSD 4-STABLE (tcsh)
TODO: cd
use IO::Socket;$S=new IO::Socket::INET(Listen,1,LocalPort,1029,Reuse,1);sub p{
print@_}sub g($){($_=getc$C)eq pop}$n="\x0D\x0A";sub o{$c=pop;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]),
$_}{binmode($C=$S->accept);select$C;$e=1;$b='';p$p='$ ';{g"\xFF"?g"\xF7"?chop$b
:/\xF8/?($b=''):/\xFB/?o 0:/\xFC/?o 1:/\xFD/?o 2:/\xFE/?o 3:0:/\x00/?do{$b=~s/[
$n]+\z//x;"exit"eq$b&&last;s/\s+\z/$n/for@o=`$b`;p$n,@o,$p;$b=''}:(/\x08/?chop$
b:($b.=$_),/[$n]/||$e&&p$_);redo}close$C;redo}
ttp://www5e.biglobe.ne.jp/~aji/3min/53.html を読みながら色々
実装してみるも、>>207 に負けてる telnetd 。;)
動作確認:
TeraTermPro → Win98SE (command.com + KI-Shell)
TeraTermPro → FreeBSD 4-STABLE (tcsh)
telnet(1) (line mode) → Win98SE (command.com + KI-Shell)
telnet(1) (line mode) → FreeBSD 4-STABLE (tcsh)
TODO: cd
3007telnetd
04/03/25 10:13ID:??? 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}
#!/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}
301クダランけど
04/03/25 11:06ID:??? ■ 7jump.cgi(ime.nuクローン)
ttp://hoge.com/7jump.cgi/http://www.2ch.net/ スキーマ指定可能
ttp://hoge.com/7jump.cgi/www.2ch.net/ 省略時はhttp://
#! perl
use CGI":all";charset$c='EUC-JP';$_=path_info;s|^/||;s/\"/"/g;s/\'/?/g
;s/</</g;s/>/>/g;s/&(?![\#0-9a-zA-Z]+;?)/&/g;$_="http://$_"if!/:/;($m
,$a)=<DATA>;put header,start_html(-title=>"7jump",encoding,$c,lang,ja),p(strong
(a{href,$_},$_).br.$m),hr,address($a),end_html;
__DATA__
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
Powered by WebProg
ttp://hoge.com/7jump.cgi/http://www.2ch.net/ スキーマ指定可能
ttp://hoge.com/7jump.cgi/www.2ch.net/ 省略時はhttp://
#! perl
use CGI":all";charset$c='EUC-JP';$_=path_info;s|^/||;s/\"/"/g;s/\'/?/g
;s/</</g;s/>/>/g;s/&(?![\#0-9a-zA-Z]+;?)/&/g;$_="http://$_"if!/:/;($m
,$a)=<DATA>;put header,start_html(-title=>"7jump",encoding,$c,lang,ja),p(strong
(a{href,$_},$_).br.$m),hr,address($a),end_html;
__DATA__
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
Powered by WebProg
302実体参照忘れてたスマソ
04/03/25 11:08ID:??? #! perl
use CGI":all";charset$c='EUC-JP';$_=path_info;s|^/||;s/\"/"/g;s/\'/'/g
;s/</</g;s/>/>/g;s/&(?![\#0-9a-zA-Z]+;?)/&/g;$_="http://$_"if!/:/;($m
,$a)=<DATA>;put header,start_html(-title=>"7jump",encoding,$c,lang,ja),p(strong
(a{href,$_},$_).br.$m),hr,address($a),end_html;
__DATA__
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
Powered by WebProg
use CGI":all";charset$c='EUC-JP';$_=path_info;s|^/||;s/\"/"/g;s/\'/'/g
;s/</</g;s/>/>/g;s/&(?![\#0-9a-zA-Z]+;?)/&/g;$_="http://$_"if!/:/;($m
,$a)=<DATA>;put header,start_html(-title=>"7jump",encoding,$c,lang,ja),p(strong
(a{href,$_},$_).br.$m),hr,address($a),end_html;
__DATA__
別のサイトにジャンプしようとしています。宜しければ上記のリンクをクリックしてください
Powered by WebProg
303nobodyさん
04/03/25 11:55ID:??? use CGI":all";charset$c='EUC-JP';$_=path_info;/:/?s|^/||:($_="http:/$_");put
header,start_html(-Title,"7jump",encoding,$c,lang,ja),p(strong(a{href,$_},
escapeHTML$_).br.<DATA>),hr,address(<DATA>),end_html
header,start_html(-Title,"7jump",encoding,$c,lang,ja),p(strong(a{href,$_},
escapeHTML$_).br.<DATA>),hr,address(<DATA>),end_html
304nobodyさん
04/03/29 10:25ID:??? 巻き戻り分。
304 :7uploader :04/03/25 21:16 ID:???
use CGI":all";$CGI::POST_MAX=1<<20;$/=\4096;chdir D;sub v{open(F,pop)?binmode F
:die}if(($f=upload f)=~/\.\w+$/){v">".time.$&;print F while<$f>;close F}++$i<51
?push@f,$_:unlink for sort{$b<=>$a}<*>;($_=param d)?(v($_),put header(-type,
'application/octet-stream',Content_length,-s,attachment,$_),<F>):put(header,
start_html,start_multipart_form,filefield(f),submit,endform,table({border,1},Tr
[map{td[a({href,"?d=$_"},$_),''.localtime+(stat)[9],(-s>>10).KB]}@f]),end_html)
・ファイルサイズを KB で表示。
304 :7uploader :04/03/25 21:16 ID:???
use CGI":all";$CGI::POST_MAX=1<<20;$/=\4096;chdir D;sub v{open(F,pop)?binmode F
:die}if(($f=upload f)=~/\.\w+$/){v">".time.$&;print F while<$f>;close F}++$i<51
?push@f,$_:unlink for sort{$b<=>$a}<*>;($_=param d)?(v($_),put header(-type,
'application/octet-stream',Content_length,-s,attachment,$_),<F>):put(header,
start_html,start_multipart_form,filefield(f),submit,endform,table({border,1},Tr
[map{td[a({href,"?d=$_"},$_),''.localtime+(stat)[9],(-s>>10).KB]}@f]),end_html)
・ファイルサイズを KB で表示。
305Unit7.pm
04/03/29 10:31ID:??? #!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)
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)
306Store7.pm
04/03/29 14:12ID:??? 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 実装
>>260
s/['\\]/\\$&/g でマズい例ってどんなのでしょう?
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 実装
>>260
s/['\\]/\\$&/g でマズい例ってどんなのでしょう?
307nobodyさん
04/04/16 12:15ID:??? >>209 までに出たものの追加分
# 7wiki.cgi >243 >244 >251 >253 >254 >255 >256 >274
# 7wiki.cgi 用 RSS出力 >230
# 7ch >231
# 動作確認用ファイル生成 4 7blosxom >233
# telnetd >299 >300
# 7uploader.cgi >245 >251 >275 >304
# 7hoo (PerlHoo) >257 >276
>>209 以降に出た分
# 掲示板(4) >211 >212
# 7memo >216 >218 >219 >224
# Unit7 >220 >221 >222 >305
# ライセンスについて >246 >247 >248
# 7vote >249
# Store7 >258 >259 >260 >261 >306
# 7accesslog >266 >267 >268 >278 >279 >280 >283 >284 >285 >286 >287 >290 >291
# 7rwcntr >270 >271 >272 >273
# 7tsview >288 >289
# 7editor >293 >294 >295 >296 >297 >298
# 7jump >301 >302 >303
# 7wiki.cgi >243 >244 >251 >253 >254 >255 >256 >274
# 7wiki.cgi 用 RSS出力 >230
# 7ch >231
# 動作確認用ファイル生成 4 7blosxom >233
# telnetd >299 >300
# 7uploader.cgi >245 >251 >275 >304
# 7hoo (PerlHoo) >257 >276
>>209 以降に出た分
# 掲示板(4) >211 >212
# 7memo >216 >218 >219 >224
# Unit7 >220 >221 >222 >305
# ライセンスについて >246 >247 >248
# 7vote >249
# Store7 >258 >259 >260 >261 >306
# 7accesslog >266 >267 >268 >278 >279 >280 >283 >284 >285 >286 >287 >290 >291
# 7rwcntr >270 >271 >272 >273
# 7tsview >288 >289
# 7editor >293 >294 >295 >296 >297 >298
# 7jump >301 >302 >303
04/04/16 12:18ID:???
309Store7.pm
04/04/19 14:35ID:??? 縮め。
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
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
04/04/21 09:33ID:???
7ch と 7thread を GPL でパッケージング & Store7 を載せました。
README の変更等ありましたら作業用 uploader の方へお願いします。
README の変更等ありましたら作業用 uploader の方へお願いします。
311おうら
04/05/12 22:12ID:3q/C0Ti+ リファーを残さずにリダイレクト。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>"
リファーについて参考にしたページ
ttp://www.teria.com/~koseki/memo/referrer/
#! /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>"
リファーについて参考にしたページ
ttp://www.teria.com/~koseki/memo/referrer/
312おうら
04/05/12 22:16ID:??? うぐぅ。上のコード URL=QUERY_STIRNG に $ が抜けてました。
URL=$QUERY_STRING と見て下さい。
URL=$QUERY_STRING と見て下さい。
3137vote
04/05/12 22:40ID:??? 仕様変更無しでザッと縮め。
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 のグラフは微妙。
・既に存在する選択肢への投票は、選択肢自体をクリックできた方がより直感的か?
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 のグラフは微妙。
・既に存在する選択肢への投票は、選択肢自体をクリックできた方がより直感的か?
314nobodyさん
04/05/15 10:22ID:??? 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 の内容を全部コピペ。テキストファイルに保存。
↓
その中からハッシュを摘出。テキストファイルに出力。
foreach $line (@lines)
{if( $line =~ / [a-z0-9]{32}/ ){$hash .= $line;}}
open(OUT, ">hash".$ARGV[0].".txt");
print OUT $hash;close(OUT);
WinnyBBS の内容を全部コピペ。テキストファイルに保存。
↓
その中からハッシュを摘出。テキストファイルに出力。
315nobodyさん
04/05/15 14:15ID:???316nobodyさん
04/06/11 10:54ID:iPrFu4uN # 最近、下がり気味なので保守ついでに
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等で使われているフォーマット。
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等で使われているフォーマット。
317nobodyさん
04/06/13 17:48ID:??? >>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)
それだとテスト (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)
318nobodyさん
04/07/14 16:53ID:I7yo4p0b お題。
ttp://www.webclap.com/
6行くらいにはなると思う。
ttp://www.webclap.com/
6行くらいにはなると思う。
319nobodyさん
04/07/14 23:00ID:???320nobodyさん
04/07/15 21:20ID:??? while($act ne "ガッ"){
print "ぬるぽ\n";
$act = <STDIN>;
chomp($act);
}
print "撃退\n";
sleep(1);
print "ぬるぽ\n";
$act = <STDIN>;
chomp($act);
}
print "撃退\n";
sleep(1);
321nobodyさん
04/07/24 18:39ID:??? これってphpじゃだめなん?
323nobodyさん
04/07/24 20:08ID:??? とりあえず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の使い方の勉強に…ならんか。
<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の使い方の勉強に…ならんか。
326nobodyさん
04/07/26 14:27ID:??? 人ほとんどいないなここ(´・ω・`)
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)>14)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)>200)array_pop($m);while(count($m)>0)fputs($f
,array_shift($m));fclose($f);}} ?>
ごめん、8行になってしまた。取得ログは14日分で1時間単位ごとの記録アリ、
一言メッセージは200件まで保存。動かす前にl,m,tとそれぞれ空ファイル作ってくだされ。
tには拍手ボタン押した後に表示するHTMLを一行で叩き込んで。
複数行にするとランダムでどの行か選んで表示します。一行の長さの制限はわからん。
だれか7行に縮めてくれ。俺はもうだめだ(´Д⊂
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)>14)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)>200)array_pop($m);while(count($m)>0)fputs($f
,array_shift($m));fclose($f);}} ?>
ごめん、8行になってしまた。取得ログは14日分で1時間単位ごとの記録アリ、
一言メッセージは200件まで保存。動かす前にl,m,tとそれぞれ空ファイル作ってくだされ。
tには拍手ボタン押した後に表示するHTMLを一行で叩き込んで。
複数行にするとランダムでどの行か選んで表示します。一行の長さの制限はわからん。
だれか7行に縮めてくれ。俺はもうだめだ(´Д⊂
327nobodyさん
04/07/26 20:37ID:??? ためしにkaiseki.php作ったら12行になったΛ||Λダメポ
活気ないのでage
活気ないのでage
3287clap
04/07/26 23:10ID:??? オリジナルから仕様を極力変えない方向で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拍手送信完了
ついでに一言あればどうぞ (拍手だけでも送れます)
もっと送る
沢山の拍手を有り難うございました!
拍手が送信されました。ありがとうございました!
拍手が送信されました。ありがとうございますた!
拍手が送信されました。ありがとさ〜ん!
#!/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拍手送信完了
ついでに一言あればどうぞ (拍手だけでも送れます)
もっと送る
沢山の拍手を有り難うございました!
拍手が送信されました。ありがとうございました!
拍手が送信されました。ありがとうございますた!
拍手が送信されました。ありがとさ〜ん!
331nobodyさん
04/07/30 14:27ID:??? あぁ、「そのまま動く」ってのが明文化されてないわけね…。
>>330
「560byte」プログラミングじゃなくて「7行」なので、79文字
一杯々々使いたかったら、コードの順番入れ替えたりして
調整してね。
>>330
「560byte」プログラミングじゃなくて「7行」なので、79文字
一杯々々使いたかったら、コードの順番入れ替えたりして
調整してね。
332nobodyさん
04/07/30 23:12ID:??? あと2chの仕様だが、コード中に半角スペースが2コ以上連続する時は
半角スペースを に置換する
行の最後に半角スペースが付くので、実行する時には注意する
半角スペースを に置換する
行の最後に半角スペースが付くので、実行する時には注意する
333nobodyさん
04/08/04 20:11ID:??? age
3347clap
04/08/06 15:30ID:??? あと一行半。
#!/usr/local/bin/perl
use CGI":all";charset$c=Shift_JIS;param(k,$k=1+param k);($w=escapeHTML(param w)
)=~tr/\x0A\x0D//d;($C,$M,$L,$E,@M)=<DATA>;open L;eval{flock L,2};@l=((0)x26,"
");sub d{($s,$m,$h,$d,$m,$y)=localtime(time-pop);$l[0]=($y+1900).sprintf"%02d"x
2,$m+1,$d}open C;d>(@c=<C>)[-1]?@c<14||shift@c:(@l=split/<>/,pop@c);$l[$_]++for
$h+2,1;open C,">$C";print C@c,join"<>",@l;d 1209600;open M;@m=grep$l[0]<=$_,<M>
;open M,">$M";print M@m,""ne$w&&d."<>$h<>$w<>\n";put header,start_html(lang,ja,
encoding,$c),$k<10?(p($M[rand@M]),startform,p(hidden(k),submit Clap),p(Comment,
textfield w),endform):p$E,end_html;__END__
./log.dat
./mes.dat
>./lock.dat
沢山の拍手を有り難うございました!
拍手が送信されました。ありがとうございました!
拍手が送信されました。ありがとうございますた!
拍手が送信されました。ありがとさ〜ん!
#!/usr/local/bin/perl
use CGI":all";charset$c=Shift_JIS;param(k,$k=1+param k);($w=escapeHTML(param w)
)=~tr/\x0A\x0D//d;($C,$M,$L,$E,@M)=<DATA>;open L;eval{flock L,2};@l=((0)x26,"
");sub d{($s,$m,$h,$d,$m,$y)=localtime(time-pop);$l[0]=($y+1900).sprintf"%02d"x
2,$m+1,$d}open C;d>(@c=<C>)[-1]?@c<14||shift@c:(@l=split/<>/,pop@c);$l[$_]++for
$h+2,1;open C,">$C";print C@c,join"<>",@l;d 1209600;open M;@m=grep$l[0]<=$_,<M>
;open M,">$M";print M@m,""ne$w&&d."<>$h<>$w<>\n";put header,start_html(lang,ja,
encoding,$c),$k<10?(p($M[rand@M]),startform,p(hidden(k),submit Clap),p(Comment,
textfield w),endform):p$E,end_html;__END__
./log.dat
./mes.dat
>./lock.dat
沢山の拍手を有り難うございました!
拍手が送信されました。ありがとうございました!
拍手が送信されました。ありがとうございますた!
拍手が送信されました。ありがとさ〜ん!
335nobodyさん
04/08/07 07:38ID:??? >319
全然要求満たしてないけど、叩き台に。
C/C++用、inputは余計なコード書いてないヘッダファイルのみ
#!/usr/bin/perl -Pn
/^namespace\s*(\w+)/ && ($ns=$1);
/\#include\s*[<"](.+)[">]/ && push(@inc, $1);
/^class\s+(\w+)\s*\:?/ && push(@cls, $1);
/(([\w\s\*]+)(\w+)\s*\((.+)\))/ && push(@memf, $1); # メンバ関数
/(([\w\s\*]+)(\w+));/ && push(@memv, $1); # メンバ変数
END{ print join("\n", $., $ns, "@inc","@cls","@memf", "@memv"),"\n" }
JAVAはリフレクションがあるし、classファイルのフォーマットも公開されてるので
別のアプローチでやってみると面白いかも知れない。(javapやClassBrowserが既にあるけど)
全然要求満たしてないけど、叩き台に。
C/C++用、inputは余計なコード書いてないヘッダファイルのみ
#!/usr/bin/perl -Pn
/^namespace\s*(\w+)/ && ($ns=$1);
/\#include\s*[<"](.+)[">]/ && push(@inc, $1);
/^class\s+(\w+)\s*\:?/ && push(@cls, $1);
/(([\w\s\*]+)(\w+)\s*\((.+)\))/ && push(@memf, $1); # メンバ関数
/(([\w\s\*]+)(\w+));/ && push(@memv, $1); # メンバ変数
END{ print join("\n", $., $ns, "@inc","@cls","@memf", "@memv"),"\n" }
JAVAはリフレクションがあるし、classファイルのフォーマットも公開されてるので
別のアプローチでやってみると面白いかも知れない。(javapやClassBrowserが既にあるけど)
336nobodyさん
04/08/11 09:29ID:??? age
337nobodyさん
04/09/18 22:44:55ID:9YaH2aKo age
339nobodyさん
04/09/20 13:46:08ID:k3h/6iWb スクリプト -> 335.pl
/* C++のヘッダファイル foo.h */
#include <iostream>
#include <stdlib.h>
#include "common.h"
using namespace std;
namespace test{
class FooTest: public Test {
int total;
public:
Test();
~Test();
int foo(void);
int bar(int n, int m);
}; // End of class FooTest
}; // End of namespace test
実行方法
$ perl -Pn 335.pl < foo.h または、
$ ./335.pl < foo.h
18
test
iostream stdlib.h common.h
FooTest
int foo(void) int bar(int n, int m)
using namespace std int total
行数, namespace, includeファイル, メンバ関数, 変数の順に出力
/* C++のヘッダファイル foo.h */
#include <iostream>
#include <stdlib.h>
#include "common.h"
using namespace std;
namespace test{
class FooTest: public Test {
int total;
public:
Test();
~Test();
int foo(void);
int bar(int n, int m);
}; // End of class FooTest
}; // End of namespace test
実行方法
$ perl -Pn 335.pl < foo.h または、
$ ./335.pl < foo.h
18
test
iostream stdlib.h common.h
FooTest
int foo(void) int bar(int n, int m)
using namespace std int total
行数, namespace, includeファイル, メンバ関数, 変数の順に出力
340nobodyさん
04/09/20 14:43:21ID:??? 何故わざわざ WebProg 板で? と思いつつ縮め。
#!/usr/bin/perl -n
$n=$1if/^namespace\s*(\w+)/;/#include\s*[<"](.+)[">]/&&push@i,$1;/^class\s+(\w+
)\s*\:?/x&&push@c,$1;/\s*([\w\s\*]+\w\s*\(.+\))/&&push@f,$1;/\s*([\w\s\*]+\w);/
&&push@v,$1;END{print join"\n",$.,$n,"@i","@c","@f","@v",''}
#!/usr/bin/perl -n
$n=$1if/^namespace\s*(\w+)/;/#include\s*[<"](.+)[">]/&&push@i,$1;/^class\s+(\w+
)\s*\:?/x&&push@c,$1;/\s*([\w\s\*]+\w\s*\(.+\))/&&push@f,$1;/\s*([\w\s\*]+\w);/
&&push@v,$1;END{print join"\n",$.,$n,"@i","@c","@f","@v",''}
341nobodyさん
04/09/21 17:50:57ID:??? <html>
<head>
<title>あ</title>
</head>
<body>
</body>
</html>
<head>
<title>あ</title>
</head>
<body>
</body>
</html>
342nobodyさん
04/09/21 17:58:26ID:??? それはマークアップ言語という(ry
343nobodyさん
04/10/03 15:30:49ID:qw0lrubh Store7の圧縮してない奴ないですか? > 作者
344nobodyさん
04/10/03 17:06:58ID:???346nobodyさん
04/12/12 03:10:20ID:??? あげ
347nobodyさん
04/12/16 18:47:01ID:???348nobodyさん
04/12/17 09:19:09ID:???349nobodyさん
04/12/17 14:50:07ID:??? >>348
定数をハードコーディングして可搬性を激しく落としてでも
Socket.pm を使わない選択は漢だなぁ。(w
80桁ギリギリまで詰めるよう整形したら既にシェバング無し
七行達成してるし、あと 40 byte ほど縮めたらいい感じかな。
$/=$_;$,=shift;$w=$a=shift;sub g{open(F,$4)&&t($2,$a,"e$4",<F>);close F}socket
S,2,1,6;$k{+shift}=1;bind S,&a;sub e{open F,">$4";print F$';close F}sub h{t($2,
$_,id)for keys%k}sub i{$k{$2}=1}sub f{t($_,$2,$4)for keys%k}sub a{$w=~/:/;pack
'CxnC4x8',2,$',split'\.',$`}sub t{socket X,2,1,6;$w=shift;$k{$w}=(connect X,&a)
?print X"$, $_[0] $_[1]/".pop:$/;close X}for(listen S,5;$SIG{ALRM}=sub{};
m!^(.*?) (.*?) ([e-i])([^/]*)/!s&&$,eq$1&&&$3){alarm 9;(accept(C,S),alarm 0)?
read C,$_,1e6:($_="$, $a f".shift);close C}
定数をハードコーディングして可搬性を激しく落としてでも
Socket.pm を使わない選択は漢だなぁ。(w
80桁ギリギリまで詰めるよう整形したら既にシェバング無し
七行達成してるし、あと 40 byte ほど縮めたらいい感じかな。
$/=$_;$,=shift;$w=$a=shift;sub g{open(F,$4)&&t($2,$a,"e$4",<F>);close F}socket
S,2,1,6;$k{+shift}=1;bind S,&a;sub e{open F,">$4";print F$';close F}sub h{t($2,
$_,id)for keys%k}sub i{$k{$2}=1}sub f{t($_,$2,$4)for keys%k}sub a{$w=~/:/;pack
'CxnC4x8',2,$',split'\.',$`}sub t{socket X,2,1,6;$w=shift;$k{$w}=(connect X,&a)
?print X"$, $_[0] $_[1]/".pop:$/;close X}for(listen S,5;$SIG{ALRM}=sub{};
m!^(.*?) (.*?) ([e-i])([^/]*)/!s&&$,eq$1&&&$3){alarm 9;(accept(C,S),alarm 0)?
read C,$_,1e6:($_="$, $a f".shift);close C}
350nobodyさん
04/12/17 21:57:04ID:??? >>349
正規表現による暗黙の代入とグローバル特殊変数を使った引数渡しは使えそうだ。
PythonのTinyP2PがXMLRPC等のライブラリを使っているので、
動機のひとつにライブラリなしバージョンを作ろう、ってのがあったみたい。
サイトを良く読むとblogとかにその辺の事情も書いてる様です。
他の言語では、Java(16行), Ruby(6行)版も投稿されてます。
ttp://developers.slashdot.org/comments.pl?sid=132907&cid=11103175
ttp://developers.slashdot.org/comments.pl?sid=132907&cid=11097812
正規表現による暗黙の代入とグローバル特殊変数を使った引数渡しは使えそうだ。
PythonのTinyP2PがXMLRPC等のライブラリを使っているので、
動機のひとつにライブラリなしバージョンを作ろう、ってのがあったみたい。
サイトを良く読むとblogとかにその辺の事情も書いてる様です。
他の言語では、Java(16行), Ruby(6行)版も投稿されてます。
ttp://developers.slashdot.org/comments.pl?sid=132907&cid=11103175
ttp://developers.slashdot.org/comments.pl?sid=132907&cid=11097812
351nobodyさん
04/12/24 21:39:51ID:??? ほす
352nobodyさん
05/01/30 23:39:07ID:cEoW2dZ/ >>341-342
そういえば、昔、5kっていう5KBにHTMLページを収めるってなコンテストがあったなぁ。
http://www.the5k.org/
5Kといい、7Lといい、こういうの好きなんだわ漏れ。
7行といえば560バイトでWebPage作るってのはどう?
ちょっと擦違いスマソ
そういえば、昔、5kっていう5KBにHTMLページを収めるってなコンテストがあったなぁ。
http://www.the5k.org/
5Kといい、7Lといい、こういうの好きなんだわ漏れ。
7行といえば560バイトでWebPage作るってのはどう?
ちょっと擦違いスマソ
353nobodyさん
05/01/31 00:37:15ID:??? >>352
「どう?」じゃなくて、作って晒せば? こういうのはやったもん勝ち。
面白いと思わせる事ができれば挑戦者も出てくるんじゃない?
ただスレのルール的に、「560 byte」でなく、1 行は 79 byte + 改行、
7 行以内でそのまま使える、って条件を満たしてないと個人的には
受け入れ難いなぁ。
「どう?」じゃなくて、作って晒せば? こういうのはやったもん勝ち。
面白いと思わせる事ができれば挑戦者も出てくるんじゃない?
ただスレのルール的に、「560 byte」でなく、1 行は 79 byte + 改行、
7 行以内でそのまま使える、って条件を満たしてないと個人的には
受け入れ難いなぁ。
354nobodyさん
05/01/31 14:38:02ID:??? <?
echo 'PHPもまぜてくれ';
?>
echo 'PHPもまぜてくれ';
?>
355nobodyさん
05/02/06 00:29:37ID:??? じゃぁ、phpで7行wiki
<? require("Text/Wiki.php");require("Cache/Lite.php");$c=&new Cache_Lite();
$s=$_SERVER[PHP_SELF];$g=$_GET;$b=&$_POST[b];$n=$g[n]?$g[n]:"FrontPage";$b&&
$c->save($b,$n)&&header("Location: $s?n=$n");($b=$c->get($n))||$g[c]=e;
$h="<h1>$n</h1>";if($g[c]==e)$h.="<form method=post action='?n=$n'>".
"<textarea name=b rows=30 cols=80>$b</textarea><input type=submit>";
else{$w=&new Text_Wiki;$w->setRenderConf(xhtml,wikilink,new_url,"?n=%s");
$h.=$w->transform($b,xhtml)."<hr><a href='?c=e&n=$n'>e";}?><html><body><?=$h?>
PEAR::Text_Wikiが必要。Cache_LiteはPEARにデフォルトで入ってる気がする。
あとshort_open_tag=Onでよろしく。
整形ルールは ttp://wiki.ciaweb.net/yawiki/index.php?area=Text_Wiki&page=SamplePage
日本語のwikinameは使えなかったりする。これはText_Wikiが対応していないせい。
<? require("Text/Wiki.php");require("Cache/Lite.php");$c=&new Cache_Lite();
$s=$_SERVER[PHP_SELF];$g=$_GET;$b=&$_POST[b];$n=$g[n]?$g[n]:"FrontPage";$b&&
$c->save($b,$n)&&header("Location: $s?n=$n");($b=$c->get($n))||$g[c]=e;
$h="<h1>$n</h1>";if($g[c]==e)$h.="<form method=post action='?n=$n'>".
"<textarea name=b rows=30 cols=80>$b</textarea><input type=submit>";
else{$w=&new Text_Wiki;$w->setRenderConf(xhtml,wikilink,new_url,"?n=%s");
$h.=$w->transform($b,xhtml)."<hr><a href='?c=e&n=$n'>e";}?><html><body><?=$h?>
PEAR::Text_Wikiが必要。Cache_LiteはPEARにデフォルトで入ってる気がする。
あとshort_open_tag=Onでよろしく。
整形ルールは ttp://wiki.ciaweb.net/yawiki/index.php?area=Text_Wiki&page=SamplePage
日本語のwikinameは使えなかったりする。これはText_Wikiが対応していないせい。
356nobodyさん
2005/04/24(日) 00:09:53ID:s2OIHVmv 保守あげ
357nobodyさん
2005/04/26(火) 00:51:58ID:UrRypboo >>355
ちょっとずるい気がする
ちょっとずるい気がする
358nobodyさん
2005/04/26(火) 17:50:19ID:??? どの辺が? タグを閉じていないあたり?
360nobodyさん
2005/04/27(水) 03:24:58ID:0BxullHs361nobodyさん
2005/04/27(水) 07:43:42ID:??? >>355
まぁでも、7行で基本機能を備えたwikiが使えるなら実世界でも結構有用じゃないか。
Text_Wikiの機能のデモにはなるでしょ。
むしろwiki技術関連スレ向きとは思うが。
向こうにも一応アンカー張ってあるね。
まぁでも、7行で基本機能を備えたwikiが使えるなら実世界でも結構有用じゃないか。
Text_Wikiの機能のデモにはなるでしょ。
むしろwiki技術関連スレ向きとは思うが。
向こうにも一応アンカー張ってあるね。
レスを投稿する
ニュース
- 【ネット民のツッコミ】立憲・野田代表の「事実上の撤回」発言がトレンド、「高市さんそんな事は言ってない」「流石に無理あるだろw」 [1ゲットロボ★]
- 【国際法を無視】日本での「中華人民共和国に台湾問題を論じる資格なし」との声に 中国外交部が厳しく反論… ★2 [BFU★]
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★3 [ごまカンパチ★]
- 生クリームだけの真っ白なクリスマスケーキ 大手メーカーが販売、その理由は…フルーツなしで価格は半額以下に ★3 [おっさん友の会★]
- 【文春】元TOKIO・国分太一(51)「女性スタッフ2名への“わいせつ事案”」日テレ事情聴取の全貌が分かった! ★5 [Ailuropoda melanoleuca★]
- 首相答弁「スパイ防止法、外国代理人登録法、ロビー活動公開法などについて速やかに法案を策定する」 [1ゲットロボ★]
- ( ・᷄ὢ・᷅ )なに!?クソク遺跡で世紀の大発見があっただと!?
- まったりまったりおじゃる丸待機スレ🏡
- 風呂気持ちい
- 中国外務省「全く不十分だ。ごまかすような手口を使うべきではない」高市答弁を批判 [834922174]
- 家族が具合悪くなるとムカツク
- ✋🏿( ・᷄ὢ・᷅ )用便願います
