2016년 3월 9일,
구글의 자회사인 딥마인드가 개발한 인공지능 시스템인 알파고와 프로 바둑 기사인 이세돌 9단의 대국이 시작되었다.
이 경기는 구글 딥마인드 챌린지 매치(Google DeepMind Challenge Match)라는 이름으로 개최되었으며 총 5국의 대전을 펼칠 예정이다.
애당초 이세돌 9단은 5:0 혹은 4:1의 일방적인 승리를 자신했는데, 모든 사람들의 예상을 뒤엎고 초반 3국을 모두 알파고가 승리하였다.
이 글을 쓰고 있는 3월 15일 새벽 현재는 4국까지 진행되었으며, 다행히도 이세돌 9단이 네번째 경기를 이겨서 1:3인 상황으로 마지막 한 경기만을 남겨 두었다.
이 과정은 거의 모든 인류에게 충격을 주었음이 확실한데, 팔순을 넘긴 부친께서도 방송을 보시고 걱정을 하셨더랬으니....
그리고 그걸 보고 있자니 인간들이 받았을 공포와 두려움, 그리고 한번의 승리에 대해 환호하는 모습에서 비쳐지는 초라한 안도감에, 만감이 교차하고 온갖 생각들이 머리 속을 흔들어 놓았다.
아주 많은 사람들이, 그 보다 더 다양한 상상과 우려와 희망을 얘기하고 있는데,
나 또한 여기에 지금까지의 내 생각을 한번 끄적여 보고 싶다.
경기에 대한 예고가 있었을 시점부터 내가 예상했던 한가지.
만약에라도 이세돌이 알파고에게 패배한다면(이제 현실이 되었다), 사람들은 이 사실을 애써 무시하려 할 것이다.
그래봐야 단지 좀 복잡한 '게임'일 뿐 아니냐고....
성능 좋은 기계와 효율적인 알고리즘으로 언젠가는 정복될 수 있었던 복잡한 계산이었을 뿐이라고...
알파고가 이세돌을 이긴 순간, 나는 혼란에 빠졌다.
이세돌을 이긴 것이 알파고인가, 알파고를 개발한 딥마인드의 개발자들인가?
그리고 이 질문은 또 하나의 공포를 불러냈다.
알파고를 개발한 딥마인드의 개발자들은, 알파고가 둔 바둑의 각 수에 대해 설명할 수 있을까? 알파고가 내린 결정을 미리 예측할 수 있었을까?
설명할 수 없는 결정을 내린 것은 과연 알파고의 버그일까?
인공지능의 이해할 수 없는 결정에 인간이 따라야 하는 그런 암울한 순간이 오게 되는 건 아닐까?
이대로 가게 되면 미래에는,
과연 '인공지능'일 필요가 있을까? 인간을 닮으려는 목표로 시작되었지만, 결국에는 인간스러워야 하는 것은 단지 제약일 뿐이고, 다시 인간다워지는 것을 벗어난 '궁극의 지능'이 탄생하는 것은 아닐까?
대국을 진행하는 화면을 보면서, 한편으로는 여러가지 의심도 들었다.
과연 알파고는 여러대의 컴퓨터가 연결된 일종의 서버팜일까? 혹시 거기엔 바둑 고수들 여러명이 모여 있는건 아닐까? 그리고 구글이나 딥마인드가 원했던 것은 알파고와 같은 뛰어난 시스템이 아니라, 그런 시스템이 등장했을 때, 사람들의 반응을 알고 싶었던 건 아닐까?
그리고 무엇보다도 허무하게 만드는 것이 있으니,
지난 수천년간 그 많은 사람들이, 그 많은 시간들을 써가며 골몰하고 온갖 묘수를 짜냈던 그 노력들이 무슨 의미가 있는것일까?
그리고 생산성과는 아무 관련이 없는 인간의 감각적인 측면에 호소하는 많은 일들 - 스포츠, 오락, 예술, 영화, 문학 - 등등은 이제 시간만 갉아 먹는 백해 무익한 것들로 전락할 것인가?
2016년 3월 1일 화요일
[자바스크립트] 이벤트 퍼즐 게임의 샘플 코드
자바스크립트는 제대로는 물론이고 대강도 공부해 본 적이 없는 언어지만,
간혹 특정 홈페이지의 소스코드를 들여다 볼라치면,
이제는 html보다 자바스크립트가 차지하는 비중이 월등히 높아진 까닭에 어쩔 수 없이 읽어라도 볼 수 밖에 없는 언어가 되었다.
여러가지로 궁금한 점들도 있고 공부해 보고 싶기도 하지만, 대부분 그 때 뿐이라 그냥 지나치곤 하는데....
최근에 모 회사에서 퍼즐 게임이벤트를 열었는데, 이것이 자바스크립트로 구현되어 있음을 알게 되었고, 그 소스코드를 보게 되었다.
이 코드를 통해서 차근차근 공부해 본다면 실력 향상에 큰 도움이 되지 않을까 해서....
먼저 해당 이벤트 페이지는,
http://www.nongshimi.com/event/2016/02_bulbimpibim/bulbimpibim_event?
위 이벤트 페이지의 소스를 보면, 537 line에 자바스크립트 파일이 지정되어 있음을 볼 수 있다.
해당 자바스크립트 파일은 다음과 같이 시작한다.
맨 처음의 주석으로 미루어 보아, Open Source인 것으로 보인다.
직접 게임을 해 보면서 소스를 공부한다면 좋은 참고자료가 되지 않을까 싶어 여기에 기록을 해 둔다.
간혹 특정 홈페이지의 소스코드를 들여다 볼라치면,
이제는 html보다 자바스크립트가 차지하는 비중이 월등히 높아진 까닭에 어쩔 수 없이 읽어라도 볼 수 밖에 없는 언어가 되었다.
여러가지로 궁금한 점들도 있고 공부해 보고 싶기도 하지만, 대부분 그 때 뿐이라 그냥 지나치곤 하는데....
최근에 모 회사에서 퍼즐 게임이벤트를 열었는데, 이것이 자바스크립트로 구현되어 있음을 알게 되었고, 그 소스코드를 보게 되었다.
이 코드를 통해서 차근차근 공부해 본다면 실력 향상에 큰 도움이 되지 않을까 해서....
먼저 해당 이벤트 페이지는,
http://www.nongshimi.com/event/2016/02_bulbimpibim/bulbimpibim_event?
위 이벤트 페이지의 소스를 보면, 537 line에 자바스크립트 파일이 지정되어 있음을 볼 수 있다.
해당 자바스크립트 파일은 다음과 같이 시작한다.
맨 처음의 주석으로 미루어 보아, Open Source인 것으로 보인다.
직접 게임을 해 보면서 소스를 공부한다면 좋은 참고자료가 되지 않을까 싶어 여기에 기록을 해 둔다.
2015년 11월 30일 월요일
설계된 인간(The Schematic Man) - 프레드릭 폴(Frederik Pohl)
플레이보이 SF 걸작선 (The Playboy Book of Science Fiction) 1권에 실린 매우 짧은 단편 작품이다.
10페이지 분량도 되지 않는, 말 그대로 장편(掌篇) 소설이고, 어쩌면 소설이라기 보다는 백일몽이나 스쳐 지나가는 상상 한 조각 정도?
주인공은 컴퓨터를 전공으로 하는 교수.
당시(1969년)에는 컴퓨터의 활용 범위가 복잡한 수학 계산에 주로 이용되었지만, 작가는 자기 자신을 모델링하여 컴퓨터에 입력하고 시뮬레이션 하는 작업에 몰두하게 된다.
(인공지능과 유사하지만, 범용 인공지능이 아닌, 일 개인의 행동 양상을 예측하는 시스템)
동료 교수가 왜 그런 일을 하냐고 묻자, 앨런 튜링의 튜링테스트에 대한 언급을 한다.
이 때 "무엇이 '나'인가?"라는 질문이 나오고, 주인공은 튜링 테스트를 언급하며, 외적인 부분을 제외한다면 나와 시스템을 분간하지 못할 것이라고 말한다.
- 공각기동대 극장판에서도 이와 같은 질문이 나온다.
- 무엇이 과연 나를 만드는가. 얼굴, 목소리, 기억......
- 타인으로 하여금 나를 구분하게 만드는 특징은 위와 비슷하겠지. 기억은 바로 그 타인과의 공유하는 기억으로 한정되겠지만....
- 나 자신에게 인식되는 나는?
- 철학적인 문제가 되는가? 종교적인 문제가 되는가? 나라는 본질이 존재하기는 할 것인가?
- 모인사가 말하길, 나는 누구인가, 하는 질문의 답을 찾고자 한다면, 내 주위에 있는 사람들과의 관계를 통해서만 답을 찾을 것이라 했다.
- 한편으로는 이와 같은 심리적인 작용이 아주 자연스러운 것이다.(비판받기 쉽기도 하지만)
- 흔히들 한국의 주부들이 자가 자신을 누군가에 소개할 때 하는 방식이 이와 같다.
- 남편이 누구고 무엇을 하며, 자식이 몇명이고, 자식들이 무엇을 하며, 시댁이 어떠하고 친정이 어떠하고....
- 어린이들도 마찬가지....아버지가 뭐하고 어머니가 뭐하고 형제관계가 어떻고....
- 하지만 서양의 어린이들은...좋아하는 색깔이 뭐고, 즐겨하는 놀이가 뭐고, 싫어하는 음식이 뭐고....
여튼....
소설의 주인공은 자신을 시뮬레이션 하는 시스템을 만들어가며, 이상한 증세에 시달린다.
시스템이 완성되어 갈수록 자신의 기억은 점점 사라지게 되는 것.
마치 자신의 기억들이 시스템으로 이동하는 듯한.....
그리고 마침내는 자신 또한 하나의 시스템이 아닐까 하는 의문.
수학적 모델로 표현된 자신을 컴퓨터 프로그램으로 만들지만, 그 모델이 완벽해질 수록, 자신과 프로그램의 차이는 줄어들고, 과연 내가 프로그램과 무엇이 다를까라는 자아의 혼란.
이 소설은, 특별한 사건이나 갈등 전개 결론 없는, 그저 상상의 한 조각과 같지만, 읽으면서 자꾸 나를 또 다른 상상에 빠지게 만드는....영감을 불어 넣는 작품이었다.
언뜻, 내가 좋아하는 사람을 영원히 곁에 두기 위해, 일종의 시뮬레이션 시스템을 만드는 작업도 어렵지만 재미있겠다 싶다. 시스템의 이름은 미믹(Mimic)이면 어떨까?
아마도 이런 시스템이 일반화 된다면, 사람들의 관계가 점점 폐쇄적으로 흘러가서 인간적인 교류가 없는 이상한 사회가 되지 않을까도 싶다.
어쩌면 이렇게 인류가 멸망하게 될지도....
또...시스템의 발전으로 특정 개인과 매우 흡사해진다면 과연 누가 진짜이고 누가 가짜인지, 그리고 이런 과정에서 진짜와 가짜를 구별하고자 하는 노력이 있을 것이고, 인간 본질에 대한 접근과 성찰이 활발해지지 않을까?
10페이지 분량도 되지 않는, 말 그대로 장편(掌篇) 소설이고, 어쩌면 소설이라기 보다는 백일몽이나 스쳐 지나가는 상상 한 조각 정도?
주인공은 컴퓨터를 전공으로 하는 교수.
당시(1969년)에는 컴퓨터의 활용 범위가 복잡한 수학 계산에 주로 이용되었지만, 작가는 자기 자신을 모델링하여 컴퓨터에 입력하고 시뮬레이션 하는 작업에 몰두하게 된다.
(인공지능과 유사하지만, 범용 인공지능이 아닌, 일 개인의 행동 양상을 예측하는 시스템)
동료 교수가 왜 그런 일을 하냐고 묻자, 앨런 튜링의 튜링테스트에 대한 언급을 한다.
이 때 "무엇이 '나'인가?"라는 질문이 나오고, 주인공은 튜링 테스트를 언급하며, 외적인 부분을 제외한다면 나와 시스템을 분간하지 못할 것이라고 말한다.
- 공각기동대 극장판에서도 이와 같은 질문이 나온다.
- 무엇이 과연 나를 만드는가. 얼굴, 목소리, 기억......
- 타인으로 하여금 나를 구분하게 만드는 특징은 위와 비슷하겠지. 기억은 바로 그 타인과의 공유하는 기억으로 한정되겠지만....
- 나 자신에게 인식되는 나는?
- 철학적인 문제가 되는가? 종교적인 문제가 되는가? 나라는 본질이 존재하기는 할 것인가?
- 모인사가 말하길, 나는 누구인가, 하는 질문의 답을 찾고자 한다면, 내 주위에 있는 사람들과의 관계를 통해서만 답을 찾을 것이라 했다.
- 한편으로는 이와 같은 심리적인 작용이 아주 자연스러운 것이다.(비판받기 쉽기도 하지만)
- 흔히들 한국의 주부들이 자가 자신을 누군가에 소개할 때 하는 방식이 이와 같다.
- 남편이 누구고 무엇을 하며, 자식이 몇명이고, 자식들이 무엇을 하며, 시댁이 어떠하고 친정이 어떠하고....
- 어린이들도 마찬가지....아버지가 뭐하고 어머니가 뭐하고 형제관계가 어떻고....
- 하지만 서양의 어린이들은...좋아하는 색깔이 뭐고, 즐겨하는 놀이가 뭐고, 싫어하는 음식이 뭐고....
여튼....
소설의 주인공은 자신을 시뮬레이션 하는 시스템을 만들어가며, 이상한 증세에 시달린다.
시스템이 완성되어 갈수록 자신의 기억은 점점 사라지게 되는 것.
마치 자신의 기억들이 시스템으로 이동하는 듯한.....
그리고 마침내는 자신 또한 하나의 시스템이 아닐까 하는 의문.
수학적 모델로 표현된 자신을 컴퓨터 프로그램으로 만들지만, 그 모델이 완벽해질 수록, 자신과 프로그램의 차이는 줄어들고, 과연 내가 프로그램과 무엇이 다를까라는 자아의 혼란.
이 소설은, 특별한 사건이나 갈등 전개 결론 없는, 그저 상상의 한 조각과 같지만, 읽으면서 자꾸 나를 또 다른 상상에 빠지게 만드는....영감을 불어 넣는 작품이었다.
언뜻, 내가 좋아하는 사람을 영원히 곁에 두기 위해, 일종의 시뮬레이션 시스템을 만드는 작업도 어렵지만 재미있겠다 싶다. 시스템의 이름은 미믹(Mimic)이면 어떨까?
아마도 이런 시스템이 일반화 된다면, 사람들의 관계가 점점 폐쇄적으로 흘러가서 인간적인 교류가 없는 이상한 사회가 되지 않을까도 싶다.
어쩌면 이렇게 인류가 멸망하게 될지도....
또...시스템의 발전으로 특정 개인과 매우 흡사해진다면 과연 누가 진짜이고 누가 가짜인지, 그리고 이런 과정에서 진짜와 가짜를 구별하고자 하는 노력이 있을 것이고, 인간 본질에 대한 접근과 성찰이 활발해지지 않을까?
2015년 4월 26일 일요일
MAME에 대한 궁금증
시간이 날 때에 아무 생각 없이, 부담 없이 즐길 수 있는 게임으로 MAME 만한 것이 없다.
MAME는 Multiple Arcade Machine Emulator의 약자로 업소용 게임기의 게임 에뮬레이터이다.
대부분 과거 십수년이 지난 게임들이기에 저작권에 대한 문제도 그리 민감하진 않고 (그렇다고 저작권이 없다는 뜻은 절대 아니다. 그러기에 게임 하나마다 게임에 대한 사용권리를 가지고 있는지 주의를 환기시키는 문구가 포함되어 있다.),
플레이 시간이 비교적 짧아서 부담도 적다.
그런데 그 많은 게임들을 대체 어떻게 에뮬레이팅을 하는 것일까?
게임기에 대한 큰 분류가 있어서 동일한 기종에서 돌아가는 게임들이 아주 많고, 그런 게임기들 몇가지를 에뮬레이팅 해 주면 되는 걸까?
설마 각 게임마다 각각 에뮬레이팅을 해 주는 것일까?
간혹 롬파일이 없다는 문구도 보이던데, 그럼 롬파일에 대한 정보도 모두 가지고 있는 걸까?
딥스위치에 대한 정보는 어떻게 알고 있으며, 입력 장치의 수정은 어떻게 하고 있으며, 자동연사기능은 왜 없어진걸까?
궁금증은 많지만, 의문을 풀고 싶은 욕구는 적었던가 보다.
수년 이상을 가졌던 의문을 풀지 않고 그냥 지내 온 것을 보니.....
그래서....마음만 먹으면 얼마든지 구할 수 있는게 소스코드이니 소스를 구해서 저런 궁금증 만이라도 풀어보기로 했다.
최신 소스코는 다음에서 받을 수 있다.
http://www.mamedev.org/release.html
0.160b인데, MAME와 MESS의 소스코드가 묶여 있다. (대략 55MB ~ 79MB)
살펴보니, 이미 다운로드 받았던 0.149 소스가 있어서 이것을 풀어 보았다.
대략적인 소스의 디렉토리 구조는 위와 같았다.
0.149 버전에서도 MAME와 MESS의 소스가 함께 존재했다.
에뮬레팅에 대한 핵심적인 부분은 emu 폴더에 있지 않을까 싶다.
소스가 너무 방대하기에 소스인사이트를 이용해서 살펴보기로 하고
프로젝트를 만들어 파일들을 프로젝트에 등록하고 싱크로나이즈 해 주었다.
전체 소스들이 정렬되어 나타난 브라우징 창이 다음과 같았다.
이 창에서 7번째부터 익숙한 이름이 보인다.
1942.*, 1943.*
캡콤의 유명한 슈팅게임들이다.
두개의 C 파일과 하나의 헤더 파일.
drivers라는 폴더와 video라는 폴더, includes라는 폴더에 각각 위치하고 있음을 볼 수 있다.
잠깐 살펴보니 drivers폴더에 있는 내용이 알아보기 쉽다는 것을 알게 되었다.
잠시 MAME를 직접 구동해서 게임을 하나 골라서 해 보았다.
우리에겐 보글보글로 알려진 게임인데, MAME에서의 이름은 Super Bobble Bobble이다.
윈도우 타이틀바에 표기된 [sboblbob]가 소스 파일의 이름일지 모르겠다는 생각이 들었다.
하지만 찾아보니 그런 파일은 없었다.
조금 더 찾아보니, Bublbobl.c(drivers 폴더)라는 파일에 다음과 같은 부분이 보인다.
위 소스의 밑에서 두번째 줄을 보면,
GAME( 1986, sboblbob, bublbobl, boblbobl, sboblbob....
라고 되어 있다.
그리고 GAME이라는 매크로는 다음과 같이 정의 되어 있다.
PARENT가 보글보글(bublbobl)인 게임의 몇가지 버전들이 위와 같이 주~욱 나열되어 있는 듯하다.
이렇게 보니 MAME는 엄청난 노력이 들어간 에뮬레이터였다.
처음의 시작부터 현재의 모습까지 오는 과정에는 엄청난 노력과 발전이 있었음을 미루어 짐작할 수 있다.
아마도 지속적인 발전을 해 오면서 공통되는 부분을 묶고, 기능을 공유할 수 있도록 일반화 하는 과정이 있었을 것이며, 그럼에도 각 게임 하나 하나의 에뮬레이션도 직접 손대야 하느 번거로움까지....
아주 아주 맛보기만 보았지만, 시간이 나면 나머지 의문들도 하나 둘씩 파헤쳐 볼 수 있기를 바래본다.
MAME는 Multiple Arcade Machine Emulator의 약자로 업소용 게임기의 게임 에뮬레이터이다.
대부분 과거 십수년이 지난 게임들이기에 저작권에 대한 문제도 그리 민감하진 않고 (그렇다고 저작권이 없다는 뜻은 절대 아니다. 그러기에 게임 하나마다 게임에 대한 사용권리를 가지고 있는지 주의를 환기시키는 문구가 포함되어 있다.),
플레이 시간이 비교적 짧아서 부담도 적다.
그런데 그 많은 게임들을 대체 어떻게 에뮬레이팅을 하는 것일까?
게임기에 대한 큰 분류가 있어서 동일한 기종에서 돌아가는 게임들이 아주 많고, 그런 게임기들 몇가지를 에뮬레이팅 해 주면 되는 걸까?
설마 각 게임마다 각각 에뮬레이팅을 해 주는 것일까?
간혹 롬파일이 없다는 문구도 보이던데, 그럼 롬파일에 대한 정보도 모두 가지고 있는 걸까?
딥스위치에 대한 정보는 어떻게 알고 있으며, 입력 장치의 수정은 어떻게 하고 있으며, 자동연사기능은 왜 없어진걸까?
궁금증은 많지만, 의문을 풀고 싶은 욕구는 적었던가 보다.
수년 이상을 가졌던 의문을 풀지 않고 그냥 지내 온 것을 보니.....
그래서....마음만 먹으면 얼마든지 구할 수 있는게 소스코드이니 소스를 구해서 저런 궁금증 만이라도 풀어보기로 했다.
최신 소스코는 다음에서 받을 수 있다.
http://www.mamedev.org/release.html
0.160b인데, MAME와 MESS의 소스코드가 묶여 있다. (대략 55MB ~ 79MB)
살펴보니, 이미 다운로드 받았던 0.149 소스가 있어서 이것을 풀어 보았다.
![]() |
MAME 소스의 디렉토리 구조 |
대략적인 소스의 디렉토리 구조는 위와 같았다.
0.149 버전에서도 MAME와 MESS의 소스가 함께 존재했다.
에뮬레팅에 대한 핵심적인 부분은 emu 폴더에 있지 않을까 싶다.
소스가 너무 방대하기에 소스인사이트를 이용해서 살펴보기로 하고
프로젝트를 만들어 파일들을 프로젝트에 등록하고 싱크로나이즈 해 주었다.
전체 소스들이 정렬되어 나타난 브라우징 창이 다음과 같았다.
![]() |
MAME의 소스들 |
1942.*, 1943.*
캡콤의 유명한 슈팅게임들이다.
두개의 C 파일과 하나의 헤더 파일.
drivers라는 폴더와 video라는 폴더, includes라는 폴더에 각각 위치하고 있음을 볼 수 있다.
잠깐 살펴보니 drivers폴더에 있는 내용이 알아보기 쉽다는 것을 알게 되었다.
잠시 MAME를 직접 구동해서 게임을 하나 골라서 해 보았다.
![]() |
슈퍼 보블보블 |
우리에겐 보글보글로 알려진 게임인데, MAME에서의 이름은 Super Bobble Bobble이다.
윈도우 타이틀바에 표기된 [sboblbob]가 소스 파일의 이름일지 모르겠다는 생각이 들었다.
하지만 찾아보니 그런 파일은 없었다.
조금 더 찾아보니, Bublbobl.c(drivers 폴더)라는 파일에 다음과 같은 부분이 보인다.
![]() |
보글보글 게임에 대한 매크로 |
위 소스의 밑에서 두번째 줄을 보면,
GAME( 1986, sboblbob, bublbobl, boblbobl, sboblbob....
라고 되어 있다.
그리고 GAME이라는 매크로는 다음과 같이 정의 되어 있다.
PARENT가 보글보글(bublbobl)인 게임의 몇가지 버전들이 위와 같이 주~욱 나열되어 있는 듯하다.
이렇게 보니 MAME는 엄청난 노력이 들어간 에뮬레이터였다.
처음의 시작부터 현재의 모습까지 오는 과정에는 엄청난 노력과 발전이 있었음을 미루어 짐작할 수 있다.
아마도 지속적인 발전을 해 오면서 공통되는 부분을 묶고, 기능을 공유할 수 있도록 일반화 하는 과정이 있었을 것이며, 그럼에도 각 게임 하나 하나의 에뮬레이션도 직접 손대야 하느 번거로움까지....
아주 아주 맛보기만 보았지만, 시간이 나면 나머지 의문들도 하나 둘씩 파헤쳐 볼 수 있기를 바래본다.
2014년 11월 27일 목요일
Mini vMac
초기 Macintosh에 대한 에뮬레이터로 종종 언급되는 것이 바로 이 Mini vMac이다.
그런데 어찌된 일인지 사용하기가 무지 까다롭다.
정확히 말하자면 내.가. 사용하기에 무지 까다로왔다.
아직까지도 제대로 써 보질 못했으며, 써 보려고 시도한 것도 수차례이며, 같은 삽질이 반복되고 있다는 것은 정말 화가 날 지경이다.
그래서 더 이상은 삽질하지 말자는 의미로 여기에 정리해 두려 한다.
1. Mini vMac
공식적인 홈페이지가 sourceforge에 있었는데 이번에 방문해 보니 다른 곳으로 옮겼다고 한다.
http://www.gryphel.com/c/minivmac/index.html
여기에서 Mini vMac 바이너리를 다운로드 받을 수 있다.
그런데 어찌된 일인지 사용하기가 무지 까다롭다.
정확히 말하자면 내.가. 사용하기에 무지 까다로왔다.
아직까지도 제대로 써 보질 못했으며, 써 보려고 시도한 것도 수차례이며, 같은 삽질이 반복되고 있다는 것은 정말 화가 날 지경이다.
그래서 더 이상은 삽질하지 말자는 의미로 여기에 정리해 두려 한다.
공식적인 홈페이지가 sourceforge에 있었는데 이번에 방문해 보니 다른 곳으로 옮겼다고 한다.
http://www.gryphel.com/c/minivmac/index.html
여기에서 Mini vMac 바이너리를 다운로드 받을 수 있다.
2. ROM
어디에서 구했는지 기억은 나지 않지만, Macintosh Plus용 ROM을 가지고 있으며 여기에 저장해 둔다.
Mac_Plus_ROM.zip
압축을 풀면 vMac.ROM 이름의 파일이 나온다. 이 이름 그대로 사용하면 된다.
어디에서 구했는지 기억은 나지 않지만, Macintosh Plus용 ROM을 가지고 있으며 여기에 저장해 둔다.
Mac_Plus_ROM.zip
압축을 풀면 vMac.ROM 이름의 파일이 나온다. 이 이름 그대로 사용하면 된다.
3. System 6 OS
위의 Mini vMac 사이트에서 설명한대로라면 Apple 사이트에서 이 오래된 OS의 디스크 이미지를 받을 수 있어야 하는데, 어찌된 일인지 지금은 링크가 사라진 듯 보인다.
그래서 이것도 여기에 보관해 두었다.
SSW_6.0.8_Disk 1 of 2
SSW_6.0.8_Disk 2 of 2
위의 Mini vMac 사이트에서 설명한대로라면 Apple 사이트에서 이 오래된 OS의 디스크 이미지를 받을 수 있어야 하는데, 어찌된 일인지 지금은 링크가 사라진 듯 보인다.
그래서 이것도 여기에 보관해 두었다.
SSW_6.0.8_Disk 1 of 2
SSW_6.0.8_Disk 2 of 2
4. Stuff-it Expander
위의 디스크 이미지를 그대로 사용하려고 하면 작동하지 않는다는 것을 알게 된다.
확장자도 .bin이라서 더 이상 뭐가 있겠나 싶었는데, Macintosh에서 사용되는 Stuff-it이라는 압축 프로그램으로 압축이 되어 있으니 이걸 풀어야 한다고 한다.
그런데 이게 뭐 유명하지도 않고 Macintosh에서나 사용되는 프로그램이라 구하기가 녹녹하지는 않아 보인다.
일단은 Linux용의 Stuff-it 압축 프로그램을 찾아냈다.
혹시 모르니 이것도 보관.
Stuffit520.611linux.tar.gz
위의 디스크 이미지를 그대로 사용하려고 하면 작동하지 않는다는 것을 알게 된다.
확장자도 .bin이라서 더 이상 뭐가 있겠나 싶었는데, Macintosh에서 사용되는 Stuff-it이라는 압축 프로그램으로 압축이 되어 있으니 이걸 풀어야 한다고 한다.
그런데 이게 뭐 유명하지도 않고 Macintosh에서나 사용되는 프로그램이라 구하기가 녹녹하지는 않아 보인다.
일단은 Linux용의 Stuff-it 압축 프로그램을 찾아냈다.
혹시 모르니 이것도 보관.
Stuffit520.611linux.tar.gz
5. System 6 디스크 이미지 풀어내기
4번의 Stuff-it으로 3번의 System 6 디스크 이미지를 풀면 되지 않는가?
그것만으로는 안되더라는....ㅠㅠ
먼저 디스크 1번의 압축을 풀어보면, *.info, *.rsrc, *.data 세개의 파일이 나온다.
여기에서 *.data 파일을 다시 압축을 풀면 System Startup이라는 파일이 나온다.
이 파일이 1.44MB의 디스크 이미지이고, Mini vMac에서 인식할 수 있는 파일이다.
혹시 모르니 이것도 여기에 보관.
System Startup
디스크 2의 압축을 풀어서 나온 이미지도 여기에 보관.
System Additions
4번의 Stuff-it으로 3번의 System 6 디스크 이미지를 풀면 되지 않는가?
그것만으로는 안되더라는....ㅠㅠ
먼저 디스크 1번의 압축을 풀어보면, *.info, *.rsrc, *.data 세개의 파일이 나온다.
여기에서 *.data 파일을 다시 압축을 풀면 System Startup이라는 파일이 나온다.
이 파일이 1.44MB의 디스크 이미지이고, Mini vMac에서 인식할 수 있는 파일이다.
혹시 모르니 이것도 여기에 보관.
System Startup
디스크 2의 압축을 풀어서 나온 이미지도 여기에 보관.
System Additions
2014년 11월 11일 화요일
Ubuntu 10.04에 Java 설치하기
Ubuntu 10.04의 소프트웨어 센터에는 구글의 크롬도 없고, 오라클의 자바도 없다.
대신 Chromium이라는 크롬 호환 브라우저가 있고, OpenJDK라는 자바 호환 플랫폼이 제공된다.
아마도 Ubuntu의 버전이 오래되다 보니, 캐노니컬에서 정식으로 지원하지 않는 것인지, 혹은 개별 소프트웨어 업체가 워낙에 막강하다보니 굳이 Ubuntu의 소프트웨어 센터에 등록하지 않아도 된다 생각한건지...
하지만 Ubuntu의 소프트웨어 센터가 매우 편리하고, 이것이 아니라도 apt-get으로 간단히 설치가 가능해 진 이 시점에... 개별적 설치는 이래저래 번거로운 문제가 되어 버렸다.
그리고 캐노니컬에서 지원하지 않는 소프트웨어 패키지 가운데에는 설치가 아얘 불가능해 보이는 것들도 종종 마주치게 되고, 설치해도 여러가지로 찜찜한 경우는 더 자주 발생한다.
크롬 브라우저도 Ubuntu 10.04에서는 이런 경우에 속하는 패키지라 Chromium을 사용하고 있는데, 여기에 Java가 필요한 상황에 부딪히게 되었다.
편리한대로 OpenJDK를 설치해 보았는데, 이게 무슨 일인지 Java Application 실행에도 문제가 있고 브라우저에서 Java Applet을 실행하는 데에도 문제가 생겼다. 아니, 문제가 아니라 아얘 설치전과 마찬가지로 작동하지 않는 것...
OpenJDK라서 그런가도 싶고, OpenJDK는 버전 업데이트가 어찌 되는지도 의심스럽고 해서 번거롭지만 Oracle Java를 설치하기로 했다.
다음 사이트에서 Java(JRE)를 다운로드 한다. Ubuntu 10.04의 경우는 Linux 링크를 클릭하면 된다.
http://java.com/ko/download/manual.jsp?locale=ko
위의 화면에서 "지침"을 클릭하면 다음과 같은 화면이 나오지만, 링크가 따로 있으니 이걸 클릭.
위의 링크따라 이동하면 처음엔 OpenJDK에 관한 설명이 나오는데, 스크롤해서 내려가면 Oracle Java 부분이 나온다.
위의 화면에서 "2. How do I install Oracle JRE 7?"을 클릭하면 다음과 같은 화면이 나온다.
JDK 기준으로 설명하지만 JRE도 비슷하다.
Java(JRE) 설치에 대한 설명 계속. 플러그인 부분은 따르지 말고 다음에 나오는 화면을 따라하자.
더 아래로 스크롤하면 JRE에 대한 설명이 따로 나온다.
그리고 여기에 브라우저 plugin 설정하는 방법이 나온다.
파이어폭스와 Chromium 모두 동일하게 다음의 방법으로 설정이 가능하다.
브라우저 플러그인 설정 과정. 내 경우에는 mkdir과 ln 두가지 명령만으로 끝.
Chromium에서 Java 설치 확인
FireFox에서도 Java 설치 확인
대신 Chromium이라는 크롬 호환 브라우저가 있고, OpenJDK라는 자바 호환 플랫폼이 제공된다.
아마도 Ubuntu의 버전이 오래되다 보니, 캐노니컬에서 정식으로 지원하지 않는 것인지, 혹은 개별 소프트웨어 업체가 워낙에 막강하다보니 굳이 Ubuntu의 소프트웨어 센터에 등록하지 않아도 된다 생각한건지...
하지만 Ubuntu의 소프트웨어 센터가 매우 편리하고, 이것이 아니라도 apt-get으로 간단히 설치가 가능해 진 이 시점에... 개별적 설치는 이래저래 번거로운 문제가 되어 버렸다.
그리고 캐노니컬에서 지원하지 않는 소프트웨어 패키지 가운데에는 설치가 아얘 불가능해 보이는 것들도 종종 마주치게 되고, 설치해도 여러가지로 찜찜한 경우는 더 자주 발생한다.
크롬 브라우저도 Ubuntu 10.04에서는 이런 경우에 속하는 패키지라 Chromium을 사용하고 있는데, 여기에 Java가 필요한 상황에 부딪히게 되었다.
편리한대로 OpenJDK를 설치해 보았는데, 이게 무슨 일인지 Java Application 실행에도 문제가 있고 브라우저에서 Java Applet을 실행하는 데에도 문제가 생겼다. 아니, 문제가 아니라 아얘 설치전과 마찬가지로 작동하지 않는 것...
OpenJDK라서 그런가도 싶고, OpenJDK는 버전 업데이트가 어찌 되는지도 의심스럽고 해서 번거롭지만 Oracle Java를 설치하기로 했다.
다음 사이트에서 Java(JRE)를 다운로드 한다. Ubuntu 10.04의 경우는 Linux 링크를 클릭하면 된다.
http://java.com/ko/download/manual.jsp?locale=ko
![]() |
Java Download |
위의 화면에서 "지침"을 클릭하면 다음과 같은 화면이 나오지만,
![]() |
설치 지침 - Ubuntu용 Java로 이동하자 |
위의 링크따라 이동하면 처음엔 OpenJDK에 관한 설명이 나오는데, 스크롤해서 내려가면 Oracle Java 부분이 나온다.
![]() |
Ubuntu용 Java 설치 지침 가운데 Oracle Java |
위의 화면에서 "2. How do I install Oracle JRE 7?"을 클릭하면 다음과 같은 화면이 나온다.
JDK 기준으로 설명하지만 JRE도 비슷하다.
![]() |
Oracle Java 설치 과정 |
![]() |
설치 과정 |
Java(JRE) 설치에 대한 설명 계속. 플러그인 부분은 따르지 말고 다음에 나오는 화면을 따라하자.
![]() |
Oracle Java 설치 과정(계속) |
더 아래로 스크롤하면 JRE에 대한 설명이 따로 나온다.
그리고 여기에 브라우저 plugin 설정하는 방법이 나온다.
파이어폭스와 Chromium 모두 동일하게 다음의 방법으로 설정이 가능하다.
![]() |
브라우저 플러그인 설정 |
브라우저 플러그인 설정 과정. 내 경우에는 mkdir과 ln 두가지 명령만으로 끝.
![]() |
브라우저 플러그인 설정 |
Chromium에서 Java 설치 확인
![]() |
Chromium에서 Java 설치 확인 |
FireFox에서도 Java 설치 확인
![]() |
FireFox에서 Java 설치 확인 |
2014년 11월 5일 수요일
Vim 파일 저장 오류 __ 10
최종 오류의 원인으로 등장한 stat() 함수.
하지만 DOSBox에서는 실패한 이 함수의 결과가 시험용을 작성한 코드에서는 성공했다.
어째서 다른 결과가 나온 걸까?
gdb를 이용해서 어셈블리 코드 레벨의 실행 절차마저 세세하게 따져봐야 할 지경에 이르게 되었다.
하지만 Linux gdb에서의 어셈블리 코드의 표기가 MS-Windows 계열에서 사용하는 표기와 너무 달라서 해독이 난감해 하던 터였다.
일단, 지난 번에 만든 stat() 함수를 사용하는 테스트용 C program의 Assembly code를 생성해 보았다.
실행 결과야 이미 알고 있으니 최대한 단순하게 만들어서 Assembly code도 간단하도록 간략화 시켰다.
gcc에서 -S 옵션을 사용하면 Assembly Code를 출력한다.
그렇게 만들어진 Assembly Code는...
역시나 뭔가 참 어색하다.
상수값에 $를 쓴다거나 레지스터 이름에 %를 붙인다는 걸 알 수 있지만, 오퍼랜드의 순서가 바뀌어 있고, %gs:20 ?? 156(%esp) ??? 이건 대체 뭘까?
Linux용 Assembly 공부를 해야 하나 하고 관련 서적과 자료들을 인터넷에서 검색을 했다.
헌데... CPU는 동일한 인텔 계열인데 굳이 Assembly 공부를 다시 해야 하나?
OS에 관련된 부분을 제외하면 단순히 표기법만 다른 것 아닌가?
그렇다면 gcc에서 Assembly Code를 출력할 때 이 표기법을 바꿀 수 있지 않을까?
전에 어디에선가 본 기억으로는 Assembly Code의 표기법은 AT&T와 Intel의 방식으로 나뉘어져 있으며, AT&T 표기법은 Unix 계열에서, Intel 표기법은 MS-Windows 계열에서 주로 사용한다고 했던 것 같다.
gcc는 MS-Windows용으로도 porting되어 있으니 양쪽 표기법을 모두 지원할 것이라 생각이 들어 gcc 매뉴얼을 다시 살펴 보았다.
그래서 찾아낸 옵션, -masm=intel로 지정해주면 된다.
그렇게 만들어진 Assembly Code,
이제야 조금 익숙해진 모양새.
그렇다면 gdb에서도 Assembly Code룰 보여줄 때 표기법을 바꿀 수 있지 않을까?
그래서 gdb 매뉴얼을 찾아 본 결과,
하지만 DOSBox에서는 실패한 이 함수의 결과가 시험용을 작성한 코드에서는 성공했다.
어째서 다른 결과가 나온 걸까?
gdb를 이용해서 어셈블리 코드 레벨의 실행 절차마저 세세하게 따져봐야 할 지경에 이르게 되었다.
하지만 Linux gdb에서의 어셈블리 코드의 표기가 MS-Windows 계열에서 사용하는 표기와 너무 달라서 해독이 난감해 하던 터였다.
일단, 지난 번에 만든 stat() 함수를 사용하는 테스트용 C program의 Assembly code를 생성해 보았다.
실행 결과야 이미 알고 있으니 최대한 단순하게 만들어서 Assembly code도 간단하도록 간략화 시켰다.
![]() |
stat() 테스트 프로그램 |
gcc에서 -S 옵션을 사용하면 Assembly Code를 출력한다.
![]() |
gcc -S 옵션 |
![]() |
테스트 프로그램의 Assembly Code |
상수값에 $를 쓴다거나 레지스터 이름에 %를 붙인다는 걸 알 수 있지만, 오퍼랜드의 순서가 바뀌어 있고, %gs:20 ?? 156(%esp) ??? 이건 대체 뭘까?
Linux용 Assembly 공부를 해야 하나 하고 관련 서적과 자료들을 인터넷에서 검색을 했다.
헌데... CPU는 동일한 인텔 계열인데 굳이 Assembly 공부를 다시 해야 하나?
OS에 관련된 부분을 제외하면 단순히 표기법만 다른 것 아닌가?
그렇다면 gcc에서 Assembly Code를 출력할 때 이 표기법을 바꿀 수 있지 않을까?
전에 어디에선가 본 기억으로는 Assembly Code의 표기법은 AT&T와 Intel의 방식으로 나뉘어져 있으며, AT&T 표기법은 Unix 계열에서, Intel 표기법은 MS-Windows 계열에서 주로 사용한다고 했던 것 같다.
gcc는 MS-Windows용으로도 porting되어 있으니 양쪽 표기법을 모두 지원할 것이라 생각이 들어 gcc 매뉴얼을 다시 살펴 보았다.
그래서 찾아낸 옵션, -masm=intel로 지정해주면 된다.
![]() |
-masm 옵션 |
![]() |
테스트 프로그램의 Assembly Code. Intel 표기법 |
그렇다면 gdb에서도 Assembly Code룰 보여줄 때 표기법을 바꿀 수 있지 않을까?
그래서 gdb 매뉴얼을 찾아 본 결과,
![]() |
gdb의 disassemble 옵션 |
피드 구독하기:
글 (Atom)