- 화면에 인사를 끝없이 출력하는 BASIC 두 줄만으로도, 컴퓨터가 내가 시킨 대로 움직인다는 사실에 눈이 휘둥그레지던 순간이 있었음
- 실행 중인 명령어를 바꾸는 6502 어셈블리와 게임에 무한 목숨을 주는 POKE는, 프로그램도 들여다보고 직접 바꿀 수 있다는 깨달음을 줌
- Windows에서 빈 파일을 만드는 짧은 배치 스크립트와 진분홍색 테두리를 두르는 CSS 한 줄은 거창하지 않아도 매일 꺼내 쓰는 도구가 됨
- JavaScript로 배트맨 주제가를 만들고, 빈 반복문의 횟수를 줄여 최적화를 가장하는 농담처럼 짧은 코드에는 개발자 특유의 유머도 담김
- 280자의 CSS만으로 움직이는 시를 만들 수도 있음. 직접 쓰거나 수없이 복사하고, 웃거나 울게 했던 코드 열 가지를 돌아봄
- 처음 입력한 시점이나 쉼표·느낌표의 개수는 기억나지 않지만, 화면에 인사를 출력하는 BASIC 두 줄은 컴퓨터와 처음 소통하는 경험을 줌 10 PRINT "HELLO, WORLD!" 20 GOTO 10
- 첫 줄이 세상에 인사를 건넸다면, GOTO 10은 그 인사를 영원히 반복하게 함
- 컴퓨터가 내가 시킨 대로 움직인다는 사실에 눈이 휘둥그레지던 순간임
- 'wat' - 1은 숫자로 계산할 수 없어 NaN 이 되며, 이를 반복해서 붙이면 NaNNaNNaN… Batman이라는 문자열이 만들어짐
- 나나나나를 반복하는 옛 배트맨 TV 시리즈의 주제가와 JavaScript의 기묘한 형 변환이 만나는 한 줄짜리 농담임
- 고전적인 Wat 발표와 연결된 예제로, 처음 실행했을 때 실제로 웃음을 터뜨리게 한 코드임
- 실행 중인 프로그램도 메모리에 놓인 바이트이므로, 자신의 명령어를 덮어써 동작을 바꿀 수 있음
- 아래 코드는 데이터를 복사한 뒤 명령어에 적힌 주소를 직접 수정해 다음 메모리 구간으로 넘어감 LDX #$00 .loop LDA $2000,X STA $0400,X INX BNE .loop INC .loop+2 INC .loop+5 LDA .loop+5 CMP #$07 BNE .loop
- 처음에는 $2000부터 $20FF까지의 데이터를 $0400부터 시작하는 영역으로 복사함
- 한 구간을 마치면 INC .loop+2와 INC .loop+5가 읽기·쓰기 명령어의 주소를 변경함
- 다음 반복에서는 $2100에서 읽어 $0500에 쓰고, 그다음 구간도 같은 방식으로 처리함
- 목적지 주소의 상위 바이트가 $07이 되면 반복을 끝냄
- 6502는 주소의 하위 바이트를 먼저 저장하는 리틀 엔디언 방식이므로, 상위 바이트를 바꾸려면 +2, +5 위치를 수정해야 함
- 코드가 데이터를 바꾸는 데서 그치지 않고 자기 자신까지 바꿀 수 있다는 깨달음을 준, 저수준이면서 다소 위험한 기법임
- 이 한 줄을 touch.bat 으로 저장하면 Windows에서 새 빈 파일을 빠르게 만들 수 있었음
- Windows NT부터 Windows 7까지 Total Commander의 미니 셸에서 touch filename.txt를 입력하며 자주 사용한 작은 도구임
- 단, Unix의 touch와는 달리 기존 파일에 사용하면 내용을 비울 수 있으므로, 새 파일을 만드는 용도로만 이해해야 함
- 요소 둘레에 두꺼운 진분홍색 테두리를 그려 어디에 있고 얼마나 큰지 한눈에 확인함
- JavaScript의 console.log, PHP의 var_dump(), C의 printf()처럼 필요할 때 바로 꺼내 쓰는 CSS 디버깅 한 줄임
- 색상은 언제나 hotpink
- 게임이 실행 중인 메모리의 알맞은 위치에 바이트 하나를 써넣으면, 목숨이나 에너지, 돈을 무한으로 만들 수도 있었음
- 중요한 것은 특정 숫자보다 어디를 바꾸면 어떤 일이 일어나는지 알아내는 것임
- 메모리를 읽는 PEEK와 값을 쓰는 POKE를 통해, 게임도 정해진 규칙을 따르기만 하는 대상이 아니라 직접 들여다보고 바꿀 수 있는 프로그램이라는 사실을 깨닫게 됨
- 아무 일도 하지 않고 시간만 보내는 반복문으로, The Speedup Loop에 등장하는 농담임
- 버그도 고치지 못하고 기능도 추가하지 못한 주에는 반복 횟수에서 0 하나를 지움
- 그러고는 관리자에게 “최근 변경 요청 때문에 성능 문제가 생겼지만, 대대적인 최적화로 속도를 크게 높였다”고 보고함
- 정작 요청받은 변경은 다음 주에 처리하겠다고 둘러댐
- 지루하고 목적 없는 프로젝트에서 일해 본 사람이라면 잠깐 솔깃할지도 모르는 이야기임
- 2000년대 무렵 Linux 문제를 해결하려고 IRC를 찾으면, 매뉴얼을 읽으라는 RTFM 대신 root로 로그인해 rm -rf /를 실행하라는 악의적인 장난을 접하기도 했음
- 이 명령은 문제를 해결하는 것이 아니라 루트 디렉터리 아래의 파일을 재귀적으로 삭제하려는 위험한 명령임
- “모든 Linux 문제가 사라진다”는 말은 시스템 자체를 없애버린다는 블랙 유머이며, 실제로 실행해서는 안 됨
- 1990년대 초 학교에 LAN이 처음 설치되자 친구들과 네트워크를 탐색하기 시작함
- 사용자명이 모두 세 글자이고, 사용하지 않는 계정에는 기본 비밀번호가 남아 있다는 사실을 발견함
- Borland Pascal로 SKAN2.PAS라는 조잡한 사용자명 스캐너를 작성함
- 세 글자 조합을 만들어 z:\public\full.exe의 인자로 전달하는 방식임
- 코드 줄보다 버그가 더 많을 정도로 허술했지만, 어쨌든 어느 정도 작동했음
- 이름부터 Skan v2.00이었으니 작동은 해야 했을 것임
- 그렇게 찾아낸 휴면 계정들을 들여다보고는, 이내 다른 일로 관심을 옮김
- 280자의 CSS만으로 문구가 바뀌는 시를 만듦. JavaScript도 필요 없고, <style> 블록 외에는 HTML 요소를 따로 작성하지 않아도 됨
- 다음 네 문구가 차례로 나타났다 사라짐 Roses are #F00 Violets are #00F All my base Are belong to you
- 빨강과 파랑을 색상 코드로 쓴 시에, “All your base are belong to us” 밈을 변형한 고백을 이어 붙임
- Twitter의 140자 제한에서 출발한 짧은 코드 놀이가 280자로 늘어나며 가능해진 작품임
- CSS280 CodePen 예제에서 실제 애니메이션을 볼 수 있음
- 반복 횟수에는 infinite 대신 1e+9, 즉 10억 번을 사용함
- 글자 수도 더 짧고, 끝나는 데 걸리는 시간도 무한보다는 짧다는 점이 특히 만족스러운 부분임