2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

七行プログラミング

1 :nobodyさん:02/11/01 18:06 ID:umVq3FGM
・7行×79文字
・Perl

どうぞ。

306 :Store7.pm:04/03/29 14:12 ID:???
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 でマズい例ってどんなのでしょう?

307 :nobodyさん:04/04/16 12:15 ID:???
>>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

308 :SevenLines の中の人:04/04/16 12:18 ID:???
ダメ出しが無いようなので 7telnetd (>>300) と Unit7 (>>305) を載せました。

(個人的な)TODO: 7ch と 7thread の転載体裁整え > Store7 > 7vote
128 氏もライセンス GPL にしちゃっていいんでしょか?

ご自身のサイトをお持ちでそちらで公開されるなら、SevenLines から
リンクさせてもらいますよと言ってみるテスト。

309 :Store7.pm:04/04/19 14:35 ID:???
縮め。

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 の中の人:04/04/21 09:33 ID:???
7ch と 7thread を GPL でパッケージング & Store7 を載せました。
README の変更等ありましたら作業用 uploader の方へお願いします。

311 :おうら:04/05/12 22:12 ID: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/

312 :おうら:04/05/12 22:16 ID:???
うぐぅ。上のコード URL=QUERY_STIRNG に $ が抜けてました。
URL=$QUERY_STRING と見て下さい。

313 :7vote:04/05/12 22:40 ID:???
仕様変更無しでザッと縮め。

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 :nobodyさん:04/05/15 10:22 ID:???
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さん:04/05/15 14:15 ID:???
>>314
perl -ne "/ [0-9a-z]{32}/ && print" in.txt > out.txt
grep " [0-9a-z]\{32\}" in.txt > out.txt

316 :nobodyさん:04/06/11 10:54 ID: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等で使われているフォーマット。

317 :nobodyさん:04/06/13 17:48 ID:???
>>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 :nobodyさん:04/07/14 16:53 ID:I7yo4p0b
お題。
ttp://www.webclap.com/
6行くらいにはなると思う。

319 :nobodyさん:04/07/14 23:00 ID:???
ム板より
http://pc5.2ch.net/test/read.cgi/tech/1051703369/699-700

こういうのはperlとかのが得意そうだったので。

320 :nobodyさん:04/07/15 21:20 ID:???
while($act ne "ガッ"){
print "ぬるぽ\n";
$act = <STDIN>;
chomp($act);
}
print "撃退\n";
sleep(1);

321 :nobodyさん:04/07/24 18:39 ID:???
これってphpじゃだめなん?

322 :nobodyさん:04/07/24 18:52 ID:???
>>321
個人的には WebPlog らしいお題なら言語は何でも
いいと思うけど。てかこんなんはやった者勝ちかと。

323 :nobodyさん:04/07/24 20:08 ID:???
とりあえず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さん:04/07/24 20:14 ID:???
>>318
ちなみにそれ、アクセス解析機能もつけるのか?

325 :nobodyさん:04/07/25 13:12 ID:???
>>323
GJ!

326 :nobodyさん:04/07/26 14:27 ID:???
人ほとんどいないなここ(´・ω・`)

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行に縮めてくれ。俺はもうだめだ(´Д⊂

327 :nobodyさん:04/07/26 20:37 ID:???
ためしにkaiseki.php作ったら12行になったΛ||Λダメポ

活気ないのでage

328 :7clap:04/07/26 23:10 ID:???
オリジナルから仕様を極力変えない方向で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 :nobodyさん:04/07/29 22:33 ID:???
>>323 >>326
PHPって関数名の途中に空白文字入っても動くの?

330 :nobodyさん:04/07/30 11:49 ID:???
>>329
行末改行は79文字で切ったものなんで、動かす場合は繋げて。

331 :nobodyさん:04/07/30 14:27 ID:???
あぁ、「そのまま動く」ってのが明文化されてないわけね…。

>>330
「560byte」プログラミングじゃなくて「7行」なので、79文字
一杯々々使いたかったら、コードの順番入れ替えたりして
調整してね。

332 :nobodyさん:04/07/30 23:12 ID:???
あと2chの仕様だが、コード中に半角スペースが2コ以上連続する時は
半角スペースを&nbsp;に置換する

行の最後に半角スペースが付くので、実行する時には注意する

333 :nobodyさん:04/08/04 20:11 ID:???
age

334 :7clap:04/08/06 15:30 ID:???
あと一行半。

#!/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
沢山の拍手を有り難うございました!
拍手が送信されました。ありがとうございました!
拍手が送信されました。ありがとうございますた!
拍手が送信されました。ありがとさ〜ん!

335 :nobodyさん:04/08/07 07:38 ID:???
>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が既にあるけど)


336 :nobodyさん:04/08/11 09:29 ID:???
age

337 :nobodyさん:04/09/18 22:44:55 ID:9YaH2aKo
age

338 :nobodyさん:04/09/18 22:53:04 ID:???
>>335
使い方がわからない。。。。

339 :nobodyさん:04/09/20 13:46:08 ID: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ファイル, メンバ関数, 変数の順に出力

340 :nobodyさん:04/09/20 14:43:21 ID:???
何故わざわざ 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",''}

341 :nobodyさん:04/09/21 17:50:57 ID:???
<html>
<head>
<title>あ</title>
</head>
<body>
</body>
</html>

342 :nobodyさん:04/09/21 17:58:26 ID:???
それはマークアップ言語という(ry

343 :nobodyさん:04/10/03 15:30:49 ID:qw0lrubh
Store7の圧縮してない奴ないですか? > 作者

344 :nobodyさん:04/10/03 17:06:58 ID:???
>>343
自分で展開していかないと面白味が分からないと思うなぁ、コレ。
http://cm.xrea.cc/upload.cgi?d=1096790671.tgz

345 :nobodyさん:04/10/03 20:29:26 ID:???
>>344
ありがとう
いや,実は>>258なんだけど機能強化されてるのでこっちを使おうかと思ってね

346 :nobodyさん:04/12/12 03:10:20 ID:???
あげ

347 :nobodyさん:04/12/16 18:47:01 ID:???
http://internet.watch.impress.co.jp/cda/news/2004/12/16/5820.html

348 :nobodyさん:04/12/17 09:19:09 ID:???
>>347
Perlのmolester-minの方はライブラリ使わず9行。(詰めれば6,7行以内に収まりそう。
http://ansuz.sooke.bc.ca/software/molester/

349 :nobodyさん:04/12/17 14:50:07 ID:???
>>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}

350 :nobodyさん:04/12/17 21:57:04 ID:???
>>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

351 :nobodyさん:04/12/24 21:39:51 ID:???
ほす

352 :nobodyさん:05/01/30 23:39:07 ID:cEoW2dZ/
>>341-342
そういえば、昔、5kっていう5KBにHTMLページを収めるってなコンテストがあったなぁ。
http://www.the5k.org/
5Kといい、7Lといい、こういうの好きなんだわ漏れ。
7行といえば560バイトでWebPage作るってのはどう?
ちょっと擦違いスマソ

353 :nobodyさん:05/01/31 00:37:15 ID:???
>>352
「どう?」じゃなくて、作って晒せば? こういうのはやったもん勝ち。
面白いと思わせる事ができれば挑戦者も出てくるんじゃない?

ただスレのルール的に、「560 byte」でなく、1 行は 79 byte + 改行、
7 行以内でそのまま使える、って条件を満たしてないと個人的には
受け入れ難いなぁ。

354 :nobodyさん:05/01/31 14:38:02 ID:???
<?

echo 'PHPもまぜてくれ';

?>

355 :nobodyさん:05/02/06 00:29:37 ID:???
じゃぁ、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が対応していないせい。

178 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)