私の世界を変えた10行のコード
Hello World や JavaScript の奇妙な挙動など、10行のコードがプログラミングの笑いと涙を語る。
日本語
コピー

十行のコード。どれもそれぞれの理由で俺にとって特別だ。自分で書いたからだったり、大半を丸写ししたからだったり、笑わせてくれたからだったり、泣かせてくれたからだったりする。
Hello World
10 PRINT "HELLO, WORLD!"
20 GOTO 10
これを初めて打ち込んだのがいつだったかは覚えていないし、このバージョンだったかどうかも定かじゃない。カンマがなかったかもしれないし、感嘆符がもっと多かったかもしれない。
それでもコンピュータはそのまま受け取り、元気いっぱいに世界へ挨拶してくれる——とりわけ、初めてコンピュータと会話して目を丸くしているあの子どもに向けて。
2行目で完全に理解した。コンピュータは、あなたがやらせたことをやる。Hello world、永遠に。
なんてこった、JavaScriptの奇癖だ、Batman!
Array(16).join('wat' - 1) + ' Batman'
このコードをブラウザのコンソールに貼り付ければ、古き良きポップカルチャーTVとギークなプログラミングユーモアの混ざり合い、それに「JavaScriptって本当にバカだな」という大さじ一杯が手に入る。
古典で、初めて実行したときは本当に笑ってしまった。
自己書き換えする6502アセンブリコード
LDX #$00 ; Load X with the value 0
.loop LDA $2000,X ; Load A with the byte at address $2000 + X
STA $0400,X ; Store A at address $0400 + X
INX ; Increase X by one
BNE .loop ; Branch back to .loop while X is not 0
INC .loop+2 ; X is 0, increase the byte at .loop + 2
INC .loop+5 ; Also increase the byte at .loop + 5
LDA .loop+5 ; Load A with the byte at address .loop + 5
CMP #$07 ; Compare it with 7
BNE .loop ; Branch back to .loop if A is not 7
マシン語はハードウェアに最も近い存在だ。警告もログもガードレールもない。自分自身を書き換えることさえ許す——コードが動いている最中に、コード自身のバイト列を上書きできる。
たとえばこの例では、ソースアドレスとデスティネーションアドレスの上位バイトを更新する。分岐は$2000から$20FFへループし、続くINCがアドレスを$2000から$2100へ書き換え、そしてループが最初から始まる。
(6502はリトルエンディアンなので、+1や+4ではなく+2や+5と書く)
これ以上なく低レベルで、ハードコアで、少し危険でもある。自分にこんなことができると気づいたことで、はっきりわかったことがある。ハードウェアにこれほど近い場所でコードを書くなら、何だってありだ。
touch.bat
type nul > .\"%*"
この小さなバッチスクリプトは、Windowsで貧者のtouchを実現してくれる。Windows NTからWindows 7まで使い続けた。Total Commanderのミニコマンドラインでtouch filename.txtと打って、新しい空ファイルをさっと作る。これがないと生きていけない。
CSSデバッガー
border: 10px solid hotpink;
カスケードするconsole.log!スタイルのvar_dump()!テーブルのprintf()!
しかもいつもhotpink。
無限ライフ
POKE 9450,173
コンピュータのメモリ上で、今動いているバイナリコードの該当箇所に特定のバイトを一つ書き込むだけで、突然無限のライフ、エネルギー、あるいは金が手に入る。
ゲームでチートできるようになるだけでなく、もっと衝撃的なことがわかる。どこでPEEKしてPOKEすべきかさえ知っていれば、どんなゲームのあらゆる要素も操作できるのだ。
加速するループ
for(i=0;i10) then readln;
{Hit anykey to quit}
until KeyPressed or Ends;
end.
90年代初頭、学校にようやくLANが敷かれた。俺と、サイバーパンクなscriptkiddies lamers 1337 h4x0rzの仲間たちは当然のように探検に向かった。ユーザー名が全部3文字だということ、誰も使っていないアカウントのパスワードがデフォルトのままだということは知っていた。
そこでBorland Pascalで超ざっくりしたユーザー名スキャナを組んだ。バグの数がコードの行数より多い出来だったが、どうにか動いた。(動いて当然だ——なにせバージョン2.00なのだから!)
俺たちは見つけた休眠アカウントを片っ端から嬉々としてハックし、そして……何も起きなかった。
RTFM、あるいは rm -rf /
# rm -rf /
2000年頃、Linuxで問題にぶつかると、たいていはIRCに助けを求めに行った。多くの人がそこで、あらゆるLinuxの問題を解決する万能薬を見つけた。しかもいつも同じものだ。rootでログインして、rm -rf /を実行する。
例外なく、すべてのLinuxの問題が消え去った!
SKAN2.PAS
{$M $4000,0,0 } {16 Kb stack}
{Skan v2.00 by Trexx}
Program Skan2;
uses crt,dos;
var a,b,c:char;
b1:byte;
str:string[3];
Ends:boolean;
begin
Ends:=False;
a:='a'; {Start values}
b:='a';
c:='a';
repeat
inc(c);
if (c='z') then
begin
inc(b);
c:='a';
end;
if (b='z') then
begin
inc(a);
b:='a';
end;
str:=a+b+c;
{Change this when FULL.EXE is in another directory}
exec('z:\public\full.exe',str);
if (whereY>10) then readln;
{Hit anykey to quit}
until KeyPressed or Ends;
end.
90年代初頭、学校にようやくLANが敷かれた。俺と、サイバーパンクなscriptkiddies lamers 1337 h4x0rzの仲間たちは当然のように探検に向かった。ユーザー名が全部3文字だということ、誰も使っていないアカウントのパスワードがデフォルトのままだということは知っていた。
そこでBorland Pascalで超ざっくりしたユーザー名スキャナを組んだ。バグの数がコードの行数より多い出来だったが、どうにか動いた。(動いて当然だ——なにせバージョン2.00なのだから!)
俺たちは見つけた休眠アカウントを片っ端から嬉々としてハックし、そして……何も起きなかった。
CSS280
*{transform:translateY(24vh);text-align:center}*>:before{animation:a 9s
1e+9 linear;content:'Roses are #F00'}@keyframes a{10%,15%,35%,40%,60%,65%,
85%,90%{opacity:1}12%,37%,62%,87%{opacity:0}25%{content:'Violets are #00F'
}50%{content:'All my base'}75%{content:'Are belong to you'}}
280文字のCSSだけで書かれたアニメーション詩。JavaScriptもなければHTMLすら不要——``ブロック一つと、この280文字の純粋なCSSがあれば、空のドキュメントで動く。
この人為的な制限は、かつてTwitterが定めていた140文字より少し緩く、短いコードを貼り付けて空のCodePenにコピーするだけで面白い効果が見られる。
特に自慢なのは1e+9の長さで、これはinfiniteより短い(時間としても文字数としても)。