Inspective GUI

2010년 12월 17일, 지인과의 MSN 대화에서:

<lifthrasiir> 아...
<lifthrasiir> 역시 나는 온 세상에 불평 불만이 많은 듯;
<****> 뭐야 갑자기 ㅋㅋㅋㅋㅋㅋㅋ
<****> 뭔 불만? ㄲㄲ
<lifthrasiir> 04:04:00 <@lifthrasiir> 아아아... 전 세상 모든 것들에 불평불만이 왜 이리 많은 건지 orz
<lifthrasiir> 04:04:15 <@lifthrasiir> 프로그래밍 언어도 맘에 안 들고 운영체제도 맘에 안 들고 사회도 맘에 안 들고
<lifthrasiir> 04:04:27 <@lifthrasiir> 하나부터 열까지 뜯어 고치고 싶지만 역시 그건 안 되겠죠
<lifthrasiir> 이 얘기
<****> ......;;;;;
<lifthrasiir> 프로그래밍 언어가 그나마 만만해 보여서 전공으로 하고 있지만
<lifthrasiir> 사실 뜯어 고치고 싶은 건 세상에 너무 많음 ㅋㅋ
<****> 님이 시대를 너무 앞서가는 천재. ㄲㄲㄲㄲㄲㄲ
<****> 난 프로그래밍 언어는 C++만으로 만-_-족하고
<****> 오히려 한국어를 좀 뜯어고치고 싶지.
<****> 그래도 님 같은 사람이 있어야
<lifthrasiir> ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
<****> 세상이 발전할 수 있음. ㄱㅅ!
<lifthrasiir> 03:54:24 <@lifthrasiir> 룸메랑 얘기를 하면서
<lifthrasiir> 03:54:38 <@lifthrasiir> "사실 운영체제들은 요즘 웹 브라우저들에서 배워야 할 점이 정말 많아"라고 했고
<lifthrasiir> 03:54:42 <@lifthrasiir> 룸메도 동의
<lifthrasiir> 03:55:02 <@lifthrasiir> (그 녀석은 새로 산 맥북 에어에 macports로 프로그램 깔려다가 삽질하고 삽질하고 하고 있었;;;)
<lifthrasiir> 03:56:49 <@달리나음> 맥북은 별로 안쓰고 싶음
<lifthrasiir> 03:56:54 <@달리나음> 그런데 윈도우는 쉘이 구리고
<lifthrasiir> 03:57:00 <@lifthrasiir> ㅋㅋㅋㅋ
<lifthrasiir> 03:57:03 <@lifthrasiir> 운영체제를 하나 만드셔야죠
<lifthrasiir> 03:57:49 <@lifthrasiir> 만약 제가 운영체제를 정말로 만들 여력이 있다면 inspective하고 reactive하며 persistent하게 만들었을 것임 (각각의 낱말이 뭘 뜻하던간에)
<****> 맥북.. 써 보곤 싶은데 네이티브 프로그램 짜려면 반드시 옵C 써야 된다면 흠좀..;;
<lifthrasiir> 그러니까 난 맥도 부족하다고 생각함 ㅋ
<****> 그냥 네이티브가 아니라 군더더기 런타임 전혀 없는 가벼운 네이티브!
<****> 가령, 델파이는
<****> 네이티브 코드 생성 툴이지만 가벼운 네이티브를 만들지는 못합니다. ㅇㅋ?
<lifthrasiir> ㅋ
<lifthrasiir> 근데 결국 일정 수준의 런타임을 감수하긴 해야 해요.
<****> 가령, 훅킹 DLL이나 쉘 확장 DLL을 델파이나 C#으로 만들지는 않잖아!
<lifthrasiir> 예를 들어서 bigint를 디폴트로 만들려면
<lifthrasiir> 결국 그걸 계산하는 코드가 있어야죠.
<lifthrasiir> 사용자 입력으로 긴 정수가 들어 올 때 reject를 먹일 수도 없는 노릇이고.
<****> ㅋ
<lifthrasiir> 나루 얘기기는 한데
<lifthrasiir> alternative runtime을 사용하는 기능을 생각해 보고는 있어요.
<lifthrasiir> use runtime "naru-stripped" 같이
<****> 낄낄
<lifthrasiir> 03:57:49 <@lifthrasiir> 만약 제가 운영체제를 정말로 만들 여력이 있다면 inspective하고 reactive하며 persistent하게 만들었을 것임 (각각의 낱말이 뭘 뜻하던간에)
<lifthrasiir> 라는 말을 좀 더 정확히 해 보면
<lifthrasiir> inspective: 현재의 운영체제는 하나의 애플리케이션은 거의 블랙박스로 취급되지만 그렇지 않도록 하겠다는 것. 맥이 이 쪽에서 상당한 시도를 해 봤지만 난 쓸모 있는 시도라고 생각하진 않음.
<****> 블랙박스?
<lifthrasiir> 음... 그러니까
<lifthrasiir> 뭐라고 해야 하나
<lifthrasiir> 예를 들어서 스크립팅을 생각해 보세요.
<lifthrasiir> 유닉스 셸의 pipe라는 개념은 참 강력하지만 GUI로는 잘 전달이 안 되잖아요.
<lifthrasiir> 근데 유닉스 셸에서 pipe라는 게 가능한 이유는 각각의 프로그램이 "정확히 하나의 기능을 잘 수행하도록" 설계되어 있어서 그런 것임.
<lifthrasiir> 예를 들어서 아파치 로그에서 리퍼러 별로 랭킹을 뽑는다고 합시다.
<****> 흠..
<lifthrasiir> 그럼 이를테면 grep '^example.com ' /var/log/apache/access.log | awk '{print$12}' | sort | uniq -c | sort -r | tail -n 10 식의 파이프라인이 형성되죠.
<lifthrasiir> 무슨 의민지 대강 알겠음?
<****> 모듈화 같은 거?
<lifthrasiir> 음 그렇게 생각할 수도 있는데 그보다 더 넓은 범위로 말하려고 함.
<lifthrasiir> 저기서 grep은 입력으로부터 특정한 문자열을 찾아 내고, awk은 줄 별로 적절한 처리를 수행하고(이 경우 리퍼러가 공백으로 구분된 12번째 필드이므로 $12라고 씀), sort는 정렬하고, uniq는 연속된 같은 줄을 하나로 합치고(-c 옵션은 거기에 갯수를 붙이고), tail..아 head를 쓰려고 했는데, 아무튼 그건 첫 n줄/마지막 n줄을 표시하죠.
<lifthrasiir> 비단 텍스트 처리 뿐만 아니라 많은 유닉스 프로그램들이 이런 식으로 구성되어 있어요.
<lifthrasiir> 근데 GUI에서는 그런 게 잘 안 되지
<lifthrasiir> 예를 들어서...
<lifthrasiir> 음 무슨 예가 좋을까.
<****> ㅎㄷㄷ;;
<lifthrasiir> 음 내가 기본적으로 말하고 싶은 것들은 윈도든 무슨 프로그램이든 기본적으로 GUI 프로그램들은 지나치게 monolithic해지는 경향이 있다는 거에요.
<lifthrasiir> 이를테면 이미지 보는 프로그램이 있다고 치자.
<lifthrasiir> 이미지 보는 프로그램 보면 종종 zip이나 rar 압축 파일에 들어 있는 걸 보여 주는 것도 있죠.
<lifthrasiir> (보통은 스캔 만화 보는 용도 -_-;; )
<****> 낄낄
<lifthrasiir> 근데 여기에 새로운 압축 포맷, 이를테면 7z를 추가한다면?
<lifthrasiir> 애초에 이미지 보는 프로그램이 압축까지 풀어야 할 이유는 많지가 않아요. 거기에는 동의하지?
<lifthrasiir> 압축 푸는 프로그램은 이미 좋은 것들이 많잖아.
<****> 흐..
<lifthrasiir> 그럼에도 불구하고 현재는 그런 걸 하나로 묶을 메커니즘이 딱히 없어서 결국 하나 하나 다시 구현해야 한단 말이죠.
<****> 꿀뷰가 압축파일 안에 있는 그림 파일 바로 보여주기.. 멋있지.
<lifthrasiir> ㄲㄲ
<****> 개그만화 볼 때! ㅋㅋㅋㅋㅋ
<lifthrasiir> 아이곸ᆿᆿᆿᆿᆿᆿᆿᆿᆿᆿᆿ
<lifthrasiir> 이미지보다 좀 더 괜찮은 예제를 들고 싶은데 잘 생각이 안 나네
<****> 뭔가
<****> 프로그램들을 컴포넌트화하자
<****> 좀 COM스러운 사고방식?
<****> 그걸 얘기하는 거임?
<lifthrasiir> COM보다 더 하이레벨.
<lifthrasiir> COM은 프로그래머나 쓸만한 것이죠.
<lifthrasiir> 요점은 사용자가 어렵지 않게 여러 개의 프로그램을 묶을 수 있도록 하려는 건데, 이게 가능하려면 근본적인 재설계가 필요함.
<lifthrasiir> 특히 각 애플리케이션의 기능에 대한 inspection이 잘 되어야 겠지.
<lifthrasiir> 좀 어려운 예를 들어 보자
<****> ㄲㄲ
<lifthrasiir> 그러니까... 추석에 기차 표 예매를 하려고 하는데 자리가 계속 없어
<lifthrasiir> 그래서 F5를 계속 눌러야 해
<lifthrasiir> 물론 프로그래머라면 HTML 긁고 뭐 그런 걸 생각할 수 있겠습니다만
<lifthrasiir> 내가 생각하는 이상적인 것은,
<lifthrasiir> 1. (마치 비주얼 베이직 6에 있던 것처럼) 반투명한 타이머 애플리케이션이 있습니다.
<lifthrasiir> 2. 타이머와 웹 브라우저의 새로고침 버튼이 서로 매여 있습니다. (빨간 실-_-이라고 생각하셈)
<****> 헐..;; ㄲ
<lifthrasiir> 이 connection은 기본적으로는 control flow를 형상화하는데
<lifthrasiir> "타이머가 울리면 웹 브라우저를 새로고침하겠다"라는 의미가 되겠죠.
<****> 요즘 운영체제는
<****> GUI에만 너무 치중해서
<****> 자동화, 연계 기능이 부실한 건 사실이지. ㄲ
<lifthrasiir> 3. 웹 브라우저 화면에서 자기가 원하는 특정한 영역의 화면을 마찬가지로 빨간 실로 연결해서 이미지 뷰어로 연결합니다.
<lifthrasiir> 이러면 웹 브라우저를 숨겨 놓아도 이미지 뷰어만 켜져 있으면 이게 남는지 마는지 알 수 있잖아요?
<lifthrasiir> (이미지 뷰어가 충분히 작다고 가정하면)
<****> 그런 거 아이디어 부분적이나마 프로그램으로 구현하면
<****> 정올 공모나 창의성 대회에서 입상 가능할 듯.
<lifthrasiir> 4. 아니면, 이미지 뷰어긴 하되 이미지 뷰어가 "이미지가 바뀌면 알림"과 같은 이벤트를 구현한다고 칩시다.
<lifthrasiir> 그럼 이 이벤트를 사운드 파일에 연결하여
<lifthrasiir> 뭔가 바뀌면 소리로 알려 준다
<lifthrasiir> 또는 사운드 파일이 아니라 TTS 애플리케이션으로 알려 준다거나
<lifthrasiir> 이런 식으로 control flow와 data flow를 이어 주는 connection을 운영체제 차원에서 지원해야 하지 않을까 싶음.
<lifthrasiir> 솔직히 말하면 난 웹 브라우저에 뭐가 덕지 덕지 붙는 것도 싫고
<lifthrasiir> 웹 브라우저든 무슨 거든 다 마찬가지.
<****> 그건 so do(am) I. ㅋ
<lifthrasiir> 마찬가지로 msn 로그 같은 걸 저장하고 싶다
<lifthrasiir> 그러면 이 기능은 msn이 지원할 필요가 없어요!
<lifthrasiir> 메신저 애플리케이션이 "새 내용이 올 때마다"와 같은 이벤트를 구현해서 data flow로 파일로 보내면 됨.
<lifthrasiir> 만약 날짜 별로 저장하고 싶으면 일종의 logrotate 같은 반투명 애플리케이션이 존재해서, 들어 오는 것을 날짜에 따라서 다시 재분류해서 보낼 수 있겠죠.
<lifthrasiir> 내가 뭔 말을 하고 싶은지 알겠죠?
<****> 운영체제의 모델 자체가
<****> 깔끔하게 재설계되어야 할지도? ㄲㄱ
<lifthrasiir> 애초에 component라는 개념이 프로그래머한테만 보이는 것도 문제임. ㅋㅋ
<lifthrasiir> 물론 로그 저장 같은 걸 귀찮아하는 사람들을 위해서 default connection을 애플리케이션이 제공할 수도 있어요.
<lifthrasiir> 하지만 그렇다고 해서 애플리케이션이 모든 기능을 제공해야 할 필요는 없지.
<lifthrasiir> (즉 자신이 디폴트로 어느 컴포넌트랑 연결되어야 할 지를 알고 있다는 거랑 그 컴포넌트 자체를 제공해야 한다는 것은 다르다는 얘기)
<****> ㄳㄳ
<lifthrasiir> reactivity와 persistence는... 아 이것도 설명하기 드럽게 힘듬 ㅋ; 나중에... 
<lifthrasiir> 음 지금 말한 거 다른 곳에 뿌려도 되겠지?
<****> 나만 혼자 듣기 아까운데.
<****> 나 같으면 그런 개념 떠올리면 바로 두 주 뒤의(내일이 아니라! 내일이!)
<****> 블로그 포스팅으로.. ㅋㅋ
<lifthrasiir> ㅋㅋㅋㅋㅋㅋ
<lifthrasiir> 나는 보통 이런 건 irc 채널에 뿌려서;

ikiwiki를 씁니다.
마지막 수정