今日は主にviについて。
流浪のオタク: はじめに、天とvi(ヴィ)を創造された。 にてviの系譜的なものがパロディにされていましたがそれを(また)Wikipediaを使ってちょっと改変。と、いってもあんまり変わらない。
QEDはedはexの父なり。edの子ex、viを生み、vi、elvisとnviとStevieを生む。Stivie、vimを生めり。
QEDが追加しただけ。
他にはviを参考に作られたCursesというライブラリを使ってnanoが生まれた。
こんなものも発見。少佐の演説×vi。
vi
vi系エディタ等のリスト?
JSVim
JavaScriptで書かれたVim。その名はJS Vim。
JS Vim | Get JS Vim at SourceForge.net
cl.pocari.org - JavaScript で書かれた Vi クローン JSVim
2009/09/17
2009/09/14
樹系図=ツリーダイアグラム。・・・禁書目録?
今日はとあるサイトについて紹介しよう。
Éric Lévénez's site
主要なプログラミング言語、UNIX、Windows系OS等の樹系図を作っているサイト。
このトップページのそれぞれのロゴをクリックするとそれぞれのページへ飛びますがそのときどうもPDFもついでに開いているみたいなのでスペックの低い方は注意。
樹系図はPDFでも配っていて、印刷して壁に貼ったりも出来る。
ものによってはA4で20枚以上必要だったり。
GIGAZINEでも2年前にネタにしてますね
Fortranから最新言語まで、約2500種類のプログラミング言語の系図 - GIGAZINE
Éric Lévénez's site
主要なプログラミング言語、UNIX、Windows系OS等の樹系図を作っているサイト。
このトップページのそれぞれのロゴをクリックするとそれぞれのページへ飛びますがそのときどうもPDFもついでに開いているみたいなのでスペックの低い方は注意。
樹系図はPDFでも配っていて、印刷して壁に貼ったりも出来る。
ものによってはA4で20枚以上必要だったり。
GIGAZINEでも2年前にネタにしてますね
Fortranから最新言語まで、約2500種類のプログラミング言語の系図 - GIGAZINE
2009/09/12
はじめに、天とvi(ヴィ)を創造された。
プログラミング言語が宗教だったら・・・ - スラッシュドット・ジャパンのコメントの中になかなか面白いものを見つけた。エディタ×聖書の創世記。
以下いくつか抜粋
内容がそれぞれ独立してるが、なかなか面白い。
ああ、今日の投稿が遅れたのはただたんにぐっすり眠ってただけです。
以下いくつか抜粋
全てのプログラムは偉大なるviによって記述される文字列に過ぎない
1.初めにviはEmacsとVimを創造した。
2.Vimは形が無く、何もなかった。やみが大いなるScreenの上にあり、viのコマンドはScreenの上を動いていた
3.その時viが「:!make」と仰られた。するとVimクローンができた。
(以下略)
edはexの父なり。edの子ex、viを生み、vi、elvisとnviとStevieを生む。Stivie、vimを生めり。
(以下略)
catはedの父なり
内容がそれぞれ独立してるが、なかなか面白い。
ああ、今日の投稿が遅れたのはただたんにぐっすり眠ってただけです。
2009/07/03
2009/6/30のエントリで
ソースコードが一文字のHello,world!を作りましたが
今回はfizzbuzzに挑戦して見ました
ソースコードfizzbuzz.cの内容は
前回と同じく
A
のみ
肝心のコンパイラオプションは
gcc -DI="char *strrev(char *s){char *ret = s;char *t = s;char c;while( *t != '\ 0' )t++;t--;while(t > s) {c = *s;*s = *t;*t = c;s++;t--;}return ret;}void itoa(int value, char *buff){char *p;int mod;if( 0 > value ) {*buff++ = '-';value = -value;}p = buff;do{mod = value % 10 + 48;*p++ = (char)mod;value /= 10;}while(value);*p = '\ 0'; strrev(buff); }" -DX="write(1,&F,1);write(1,&i,1);write(1,&z,1);write(1,&z,1);" -DY="write(1,&B,1);write(1,&u,1);write(1,&z,1);write(1,&z,1);" -DA="I int main(void){int j;int k;char F='F';char B='B';char i='i';char u='u';char z='z';char N=0x0A;char buf[16];for(j=1;j<=100;j++){if(j%15==0){X Y}else if(j%5==0){Y}else if(j%3==0){X}else{itoa(j,buf);for(k=0;buf[k] != '\ 0';k++){write(1,&buf[k],1);}}write(1,&N,1);}return 0;} " fizzbuzz.c
です
マクロIの部分は
http://oshiete1.goo.ne.jp/qa3355671.htmlの10番の回答を
勝手に使わさせてもらいました
前回!が使えない的な事を言いましたが
なんか全部使えないわけじゃなさそうです
文字の次に!があるのがだめなのか?
スペースをいれればいけるのか?
書き下したコードをのせようと思いましたが
のせるとなぜか全体のプロポーションが崩れるので
別にします
このエントリに
http://tyosasurainootaku.blogspot.com/2009/07/fizzbuzzc.html
↑でも大分崩れてますけど
関係無いけど
こんなふうにソースコードが一文字で
コンパイラオプションでするプログラミングの事を
一文字(ひともじ)プログラミングとでも名付けようか
ソースコードが一文字のHello,world!を作りましたが
今回はfizzbuzzに挑戦して見ました
ソースコードfizzbuzz.cの内容は
前回と同じく
A
のみ
肝心のコンパイラオプションは
gcc -DI="char *strrev(char *s){char *ret = s;char *t = s;char c;while( *t != '\ 0' )t++;t--;while(t > s) {c = *s;*s = *t;*t = c;s++;t--;}return ret;}void itoa(int value, char *buff){char *p;int mod;if( 0 > value ) {*buff++ = '-';value = -value;}p = buff;do{mod = value % 10 + 48;*p++ = (char)mod;value /= 10;}while(value);*p = '\ 0'; strrev(buff); }" -DX="write(1,&F,1);write(1,&i,1);write(1,&z,1);write(1,&z,1);" -DY="write(1,&B,1);write(1,&u,1);write(1,&z,1);write(1,&z,1);" -DA="I int main(void){int j;int k;char F='F';char B='B';char i='i';char u='u';char z='z';char N=0x0A;char buf[16];for(j=1;j<=100;j++){if(j%15==0){X Y}else if(j%5==0){Y}else if(j%3==0){X}else{itoa(j,buf);for(k=0;buf[k] != '\ 0';k++){write(1,&buf[k],1);}}write(1,&N,1);}return 0;} " fizzbuzz.c
です
マクロIの部分は
http://oshiete1.goo.ne.jp/qa3355671.htmlの10番の回答を
勝手に使わさせてもらいました
前回!が使えない的な事を言いましたが
なんか全部使えないわけじゃなさそうです
文字の次に!があるのがだめなのか?
スペースをいれればいけるのか?
書き下したコードをのせようと思いましたが
のせるとなぜか全体のプロポーションが崩れるので
別にします
このエントリに
http://tyosasurainootaku.blogspot.com/2009/07/fizzbuzzc.html
↑でも大分崩れてますけど
関係無いけど
こんなふうにソースコードが一文字で
コンパイラオプションでするプログラミングの事を
一文字(ひともじ)プログラミングとでも名付けようか
2009/06/30
1987年のIOCCC作品であるbiggar.cをgeekなページなんかでたまたま見かけた。
biggar.cのソースコードは
P;
以上。
は?と思われたでしょうが秘密はコンパイラオプションに有ります。
$cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" -DP="main(){X}"\ -DR="read(0,&c,1)" -DT="c!=015" -DW="while(C)I" -DX="char c;W" biggar.c
コンパイラオプション-Dでマクロを設定しているわけです。
こちらに書き下したものが有ります。
こんな感じです。
もちろんgccでも出来ます。
ccをgccに変えるだけで。
gccに関してはここなんかやman gccを見たりしました。
-Dmacro=valueで臨時にマクロを定義。
というわけで以前gccでコンパイルできる最短のHello,world!、最短のソースコードに挑みましたが、それよりさらに短い物に挑んで見たいと思います。
ソースコードhello.cの中身はこう
A
以上、半角一文字。
おそらく最短。
このAにマクロを設定する。
コンパイラオプションは
$gcc -DA="int main(void){char H='H';char e='e';char l='l';char o='o';char S=',';char w='w';char r='r';char d='d';char E=0x21;char N=0x0A;write(1,&H,1);write(1,&e,1);write(1,&l,1);write(1,&l,1);write(1,&o,1);write(1,&S,1);write(1,&w,1);write(1,&o,1);write(1,&r,1);write(1,&l,1);write(1,&d,1);write(1,&E,1);write(1,&N,1);return 0;}" hello.c
まともなソースコード風に書き下すと
int main(void){
/*初期化*/
char H='H';
char e='e';
char l='l';
char o='o';
char S=',';
char w='w';
char r='r';
char d='d';
char E=0x21;//!
char N=0x0A;//改行コード
/*出力*/
write(1,&H,1);
write(1,&e,1);
write(1,&l,1);
write(1,&l,1);
write(1,&o,1);
write(1,&S,1);
write(1,&w,1);
write(1,&o,1);
write(1,&r,1);
write(1,&l,1);
write(1,&d,1);
write(1,&E,1);
write(1,&N,1);
return 0;
}
printfやput系はSegment Faultとなるのでwriteを使った。
charで文字一種類ずつ宣言してwriteで出力、
の流れです
"が使えないのと!がマクロのイベントか何かと認識されるのと
改行コードでの改行の出力がポイント。
09/09/09 少し改良。文章を。
biggar.cのソースコードは
P;
以上。
は?と思われたでしょうが秘密はコンパイラオプションに有ります。
$cc -DC="R>0" -DI="if(T)O" -DO="c=write(1,&c,1);" -DP="main(){X}"\ -DR="read(0,&c,1)" -DT="c!=015" -DW="while(C)I" -DX="char c;W" biggar.c
コンパイラオプション-Dでマクロを設定しているわけです。
こちらに書き下したものが有ります。
こんな感じです。
main(){
char c;
while(read(0,&c,1)>0)
if(c!=015) c=write(1,&c,1);
}「IOCCC 1987 P;」なんかでググるといろいろ出てきます。もちろんgccでも出来ます。
ccをgccに変えるだけで。
gccに関してはここなんかやman gccを見たりしました。
-Dmacro=valueで臨時にマクロを定義。
というわけで以前gccでコンパイルできる最短のHello,world!、最短のソースコードに挑みましたが、それよりさらに短い物に挑んで見たいと思います。
ソースコードhello.cの中身はこう
A
以上、半角一文字。
おそらく最短。
このAにマクロを設定する。
コンパイラオプションは
$gcc -DA="int main(void){char H='H';char e='e';char l='l';char o='o';char S=',';char w='w';char r='r';char d='d';char E=0x21;char N=0x0A;write(1,&H,1);write(1,&e,1);write(1,&l,1);write(1,&l,1);write(1,&o,1);write(1,&S,1);write(1,&w,1);write(1,&o,1);write(1,&r,1);write(1,&l,1);write(1,&d,1);write(1,&E,1);write(1,&N,1);return 0;}" hello.c
まともなソースコード風に書き下すと
int main(void){
/*初期化*/
char H='H';
char e='e';
char l='l';
char o='o';
char S=',';
char w='w';
char r='r';
char d='d';
char E=0x21;//!
char N=0x0A;//改行コード
/*出力*/
write(1,&H,1);
write(1,&e,1);
write(1,&l,1);
write(1,&l,1);
write(1,&o,1);
write(1,&S,1);
write(1,&w,1);
write(1,&o,1);
write(1,&r,1);
write(1,&l,1);
write(1,&d,1);
write(1,&E,1);
write(1,&N,1);
return 0;
}
printfやput系はSegment Faultとなるのでwriteを使った。
charで文字一種類ずつ宣言してwriteで出力、
の流れです
"が使えないのと!がマクロのイベントか何かと認識されるのと
改行コードでの改行の出力がポイント。
09/09/09 少し改良。文章を。
Label:
Code Golf,
C言語,
gcc,
HelloWorld,
IOCCC,
Linux,
UNIX,
一文字プログラミング,
小ネタ
2009/06/27
昨日髪の毛を切った
事はおいといて
Unix-like toolsなるものをインストールしてみた
ようはDOS、というかコマンドプロンプトでlsとかpwdとかのコマンドを
使えるようにするってやつです
インストールはいたって簡単
展開してbinディレクトリにPATHを通すだけ
ついついdirじゃなくてlsって打っちゃったりする人にお勧め
tmanでつまずいた人への追記
tmanを使うにはMANPATHという環境変数を作って
値はインストール先\ntuxtl***(バージョン)\man
例)C:\Program Files\ntuxtl014\man
とする。最後に;を付けないこと。
そしてそれでも無理なら
manディレクトリ以下の***(コマンド名).txtの拡張子を
すべてmanに変える
私は先にbinにパスを通して
(例の通りなら)
>cd C:\Program Files\ntuxtl014\man
>rename *.txt *.man
とした
事はおいといて
Unix-like toolsなるものをインストールしてみた
ようはDOS、というかコマンドプロンプトでlsとかpwdとかのコマンドを
使えるようにするってやつです
インストールはいたって簡単
展開してbinディレクトリにPATHを通すだけ
ついついdirじゃなくてlsって打っちゃったりする人にお勧め
tmanでつまずいた人への追記
tmanを使うにはMANPATHという環境変数を作って
値はインストール先\ntuxtl***(バージョン)\man
例)C:\Program Files\ntuxtl014\man
とする。最後に;を付けないこと。
そしてそれでも無理なら
manディレクトリ以下の***(コマンド名).txtの拡張子を
すべてmanに変える
私は先にbinにパスを通して
(例の通りなら)
>cd C:\Program Files\ntuxtl014\man
>rename *.txt *.man
とした
登録:
投稿 (Atom)
