인스톨쉴드... 설치작업의 단상.

enzoy : 쇠털나날/기계X꼬 - 개발자느낌 : 2007/04/30 11:03

설치 작업중에 "Abort, Retry, Ignore, Fail?" 이라는 에러 메시지가 친숙하던 때가 있었다 ^^;;;
그 옛날 그 시절에도 뭔가 프로그램을 설치(혹은 복사)하던 중에 오류상황을 만나면, 그래도 계속 해나갈 수 있는 유드리(ignore)가 있었다.

얼마전 오버버닝을 위하여 네로 (Buring ROM(e?) - 불타는 로마의 황제) 를 설치하다가 만난 인스톨쉴드 설치 프로그램의 오류 화면...

요즘은 이런 화면을 만나면 일단 포기하게 된다. 아주 사소한 파일 하나일지라도 설치과정에 실패하게되면 프로그램 전체의 설치과정이 취소되어 사용 불가능하게 되기 때문이다. 위에서 만난 예처럼, 그것이 시디굽는 네로 프로그램에 부속으로 들어가 있는 (별로 쓸일이 없는) 시디커버 디자이너 프로그램의, 게다가 단한번 실행해볼리 없는 도움말 파일의 영어판 chm 파일이라 하더라도 말이다. 결국 설치작업은 취소가 되고, 저 쓸떼없는 파일을 무시하고 넘어가며 설치할 재간이 없다.

옛날 설치 프로그램들이 제공해주던 "Ignore" 혹은 "건너뛰기"같은 버튼이 실로 그리워진다.
아무리, 소프트웨어 제공회사가 의도하지 않는대로 설치되어 유저 문의 등 서로간의 여러가지 불편함을 제공하는 상황이 꺼려진다 하더라도 말이지... 나는 서브 프로그램의 영문판 헬프 파일같은 존재들 때문에 설치 작업에 방해를 받고 싶지는 않단 말이다. 이러한 기조는 분명 "인스톨쉴드"사와 MS가 주도했음을, 그 과정을 나는 정확히 알고 있다. IT 회사에서 프로그래머로 일하던 당시, 설치판을 위한 인스톨쉴드 작업도 내가 했었기 때문이다.

가만히 생각해보면 더더욱 옛날로 거슬러 올라가진다.
도스 시절, 여러가지 소프트웨어를 설치하다보면 setup, config, install 이 세가지 용어가 복잡하게 섞이곤 했다.

그중에 config 라는 단어(혹은 실행파일이름)는 비교적 명확했다. 프로그램을 설치한 직후 혹은 나중에 언제라도 그 프로그램을 위한 설정작업을 할 때에는 config로 들어가곤 했었다.

또한, install이라는 단어도 명확했다. 프로그램을 설치하는 작업이 install이었고, 사전적인 의미도 일치한다. 간혹 설치프로그램과 설정프로그램이 겹쳐서 install이라는 단어를 함께 사용하기도 했지만, 뭐 암튼 대부분의 개념잡힌 좋은 프로그램들이 설치프로그램 이름을 install로 가지는 성향이 있었다.

자... setup으로 넘어가보자. 일단 사전적인 의미는 "조직, 구성, 설정"등을 가지며, "시나리오대로 되가도록 짜여진"이라는 뜻으로, 영화 등에서는 음모론에 휘말린 주인공들이 "조작에 휘말렸어. 나는 억울해"라고 외칠때 자주 쓰는 관용어구이다.
솔직히, 프로그램에서 setup이라고 한다면, 그것이 "설치"를 뜻할지 "설정"을 뜻할지 잘 모르겠다. 애매해지는 것이다. 그렇다면, 설치프로그램에서 setup이라는 단어를 애용한 회사는 어디인가? 바로 MS와 인스톨실드이다. 도스시절부터 거스르며 기억해보건데, MS진영의 모든 회사들은 setup이라는 단어를 채택했고, 그외의 모든 회사들이 install을 선택해왔었다.

지금에 와서는, 설치프로그램은 당연히 setup인 세상이 된 것이다 ^^;

Tags (관련 유사 이야기거리들) :

Trackback Address :: http://blog.enzoy.pe.kr/trackback/679


    Comment(s) :

Write a comment


 

배치 파일(.BAT)로 별다른 툴 없이 게시판 글퍼오기...

enzoy : 쇠털나날/기계X꼬 - 개발자느낌 : 2007/04/14 02:05

가끔 가는 어떤 게시판은... 게시판의 내부 검색 기능이 죽어버렸다.
그래서 그 게시판의 옛날 글들에서 뭔가 찾고 싶을때에는... 환장한다. (-_ㅡ );;

생각해보면, 간혹 어떤 게시판들은 내가 만족할만한 검색툴을 제공해주지 않아서 열을 받곤 한다.
그래서 오늘은 결국 수박이를 국톡으로 불러서 토론을 해가며 아래와 같은 말초적인 해결책을 만들어내기에 이른것이다.

wget배치파일. (참고로 GNU의 wget은 이런데 대충 찾으면 나옴...)

결국, 반복적인 숫자 바꿔치기 우아렐에서 내용을 가지고 와서 내 하드에 일일히 쌓아버리고... 탐색기에서 그 폴더에 검색을 걸어서 "이 텍스트를 포함하는 파일 찾기"로 찾아버리겠다는 똥꼬!!

일단, wget을 받아서 해당 게시판의 말초 우아렐에 대해 제대로 동작하는지 확인을 해보니.. 오오케이. 잘된다.

이단, 도스 5.0 시절 이후로 많이 향상되었다던 배치파일(.BAT)의 advanced 구문을 익혀보니.. set 명령어의 /p 옵션으로 변수를 입력 받아서 저장하는 것이 가능해졌음을 알게 되었다.

삼단, 마찬가지로 강산이 변하는 세월이 지나면서 많이 발전한 for구문도 연구를 해보니.. 괄호싼 그룹으로만 돌아가던 for 구문이... /L 옵션으로 숫자 스탭 운영이 가능해졌음을 알게 되면서 쾌제를 불렀다.
이 게시판은, view.cgi? 뒤에 게시물 번호를 지정하는데, 한번 지정하면 10개의 글이 보인다. 따라서 숫자를 10씩 건너 뛰면서 cgi에 쿼리하여 결과를 긁어와야겠다.. - -;;;

__일단 간단히 짜본 배치 파일____ (아, 이 얼마만의 배치 파일 스크립팅이더냐..ㅜ.T);;;
@echo off
set /p brd="Board URL? : "
set /p from="From where?: "
set /p upto="To where?  : "
set /p step="[for]step?  : "
for /L %%i in (%from% %step% %upto%) do wget %brd%?%%i
_____________________________________


오홀홀.. 훌륭히 돌아간다!! 테스트런을 돌리니, 내 하드 안에 사부작사부작 쌓인 각 페이지의 http 프로토콜 결과물들.. 므흣해진다. ^^; 하지만 복병이 기다리고 있었으니, wget이 기본으로 생성하는 파일이름은 우아렐의 끝 파일 부분에 번호를 붙여서 저장해주기 때문에 결국 확장자가 없는 이름의 파일들이 수북히 쌓이게 된다.

상세 설명을 요청하시는 분이 있어서 예를 들어가며 다시 덧붙이자면...

1. set 명령어로 환경변수에 내가 사용할 변수를 선언한다. set 명령어는 일반적인 도스 명령어이므로 변수 이름앞뒤에 %를 붙여서는 안된다. 선언한 변수를 사용할때에만 %를 붙인다고 생각하면 쉽다. /p 옵션으로 위 그림의 붉은상자 1번처럼 화면에 메세지를 출력하면 커서가 붉은숫자 2번 위치에 나타나 사용자로부터 값을 입력받아 변수에 담는 것이 가능하다. 긁어올 게시판 주소의 예는 http://www.kaka.kak/board/view.cgi로 입력했다. (그래서 예제화면에서 "그런 URL은 없으니 퍼올수 없다"는 문장이 반복되고 있다)

2. 마찬가지의 방법으로 set 명령어로 나머지 변수들을 선언한다. 붉은 숫자 3 4 5의 과정에서 어느번호에서부터 어느번호 이하까지 숫자를 얼마씩 올려가며 처리할지 사용자로부터 입력받고 있다.

3. for문을 돌려서 반복 실행할 명령문을 처리한다. 결국 가장 중요한 본체 한줄이다. (솔직히, 배치파일의 인자처리, 즉 %1 %2 %3 같은거 써서 해버리면 변수 입력부위도 필요없고 for문 하나로 끝나는 일이긴 하다 ^^;;; )

/L옵션을 (반드시 대문자로) 지정하면 in (어쩌구) 괄호안에 지정하는 3개의 숫자가 C언어처럼 [시작 스텝 끝]의 의미로 처리된다는 것이 포인트이다.
배치파일의 구문에서는 for /L %%i in (%from% %step% %upto%) do wget %brd%?%%i라고 되어 있다.

%%i는 for문의 반복처리를 위한 인덱스 변수가 실시간선언된 것이다. (굳이 i가 아닌 keke라든지 다른 이름을 지어도 무방하다.) %%i 자리의 내용이 바뀌면서 여러번 명령어가 실행되게 된다. 커맨드라인에서 바로 for문을 수행할 때에는 %를 한번만 붙여 사용하면 되지만, 배치파일 내부에서 사용할 때에는 %를 두번 붙여야 한다. 배치파일에서의 변수는 마치 C언어의 preprocessor처럼 단순 문자열 대치라는 점을 참고하면 왜 2개를 붙이는지 짐작이 가능하다.

fromstepupto는 방금 환경변수공간에 선언한 변수를 사용하기 위해 앞뒤에 %를 붙인 형상이므로 (1 10 50)으로 내용이 대치될 것이다. 결국 for문에 의해 1, 11, 21, 31, 41 이렇게 다섯번의 실행으로 풀어진다는 얘기다.
결과적으로 for문은 다음과 같이 풀어져서 실행되게되고... (그림의 붉은숫자 6번)
for /L %i in (1 10 50) do wget http://www.kaka.kak/board/view.cgi?%i
%i 변수가 (1, 11, 21, 31, 41)로 처리되어 do 뒤에 있는 명령문이 다음과 같이 반복 실행된다. (그림의 붉은숫자 7 8 9번)
wget http://www.kaka.kak/board/view.cgi?1
wget http://www.kaka.kak/board/view.cgi?11
wget http://www.kaka.kak/board/view.cgi?21
wget http://www.kaka.kak/board/view.cgi?31
wget http://www.kaka.kak/board/view.cgi?41

__상세 설명 끝_____

그런데 아직 문제가 있었다. 나는 윈도우즈 탐색기의 검색기능을 활용하여 "이 텍스트가 파일 내부에 포함된 것까지 검색"해야 하는데... 이것이 제대로 돌아가 주지 않는다. 확장자에 의해 판단하는 파일의 형식이 "알수없음" 파일이기 때문에 텍스트 파일로서 인식이 안되어, 내부 내용 검색이 이루어지지 않는 것이다.

결국 이렇게 나로 하여금 wget의 옵션을 뒤적거리게 만들어준다.. - -;;;
오오.. -O옵션!! 출력 파일 이름을 지정하게 해주는군... 음.. 출력 파일 이름을 어떻게 처리해야할까.... 잠시 고민하다가 그냥 for의 리피트 변수를 그대로 써서 확장자 .txt만 붙여주기로... 다시 완성!
__batch file 다시 짜기____
@echo off
set /p brd="Board URL? : "
set /p from="From where?: "
set /p upto="To where?  : "
set /p step="[for]step?  : "
echo on
for /L %%i in (%from% %step% %upto%) do wget -O%%i.txt %brd%?%%i
___________________(echo on을 한 이유는, 그 이후 차라리 명령어 실행과정이 보이는 것이 좋을것 같아서)

오오.. 대충 잘 돌아가 준다. 결과 불펌 파일들은 텍스트 파일이 되어 탐색기 검색에서도 검색이 절절절 잘된다 ^^;
행복하다... 흐음.. 마지막으로 가비지 컬렉션에 관한 고민을 조금 더 해보다가. 말초적 파라노이아를 벗어나지 못하고 다음과 같이 몇줄을 추가해준다. - -;;; (성격 문제 있다 증말 - -)
__batch file 최종판____
@echo off
set /p brd="Board URL? : "
set /p from="From where?: "
set /p upto="To where?  : "
set /p step="[for]step?  : "
echo on
for /L %%i in (%from% %step% %upto%) do wget -O%%i.txt %brd%?%%i
@echo off
set brd=
set from=
set upto=
________________________________________________


므흙.. 옛날로 돌아가 하늘소의 통신애뮬 "이야기"의 스크립트도 다시 한번 짜보고 싶어졌다.
15년전엔 대화방 만원 시간대에 대화방을 열기 위해서, 또는 10년전엔 학교에서 인기과목의 수강신청을 하기위해서 별라별 스크립트를 다 짰었는데.. ^^;;;;

[07/04/18 업데이트]
문의가 들어왔다. 이 배치파일을 조금 더 범용적으로 사용할 수 있게 해달라는. ^^;;

배치파일 구문 감각이 있다면, for문에서 wget 이후 내용을 하드코딩 바꿔가며 사용하면 대략 원하는 상황에 맞춰 쓸수 있을 것이지만, 위에 작성한 소스의 경우, "view.cgi?숫자"로 끝나는 형식이 하드코딩되어 있어서 범용성이 떨어지는 것은 사실이다. 그래서 다시 한번 작성해본다.
__batch file 범용판____
@echo off
set /p
brd="Board URL? : "
set /p
from="From where?: "
set /p
upto="To where?  : "
set /p
step="[for]step?  : "
echo on
for /L
%%i in (%from% %step% %upto%) do wget -O%%i.txt %brd%
@echo off
set brd=
set from=
set upto=
________________________________________________

간단하다 ^^; for문에서 ?%%i를 없애고, 사용자가 URL을 지정할 때에 직접 %i를 적절한 위치에 쓰도록 하는 것이다.
예를 들어보자. 구글에서 "된장녀"를 검색해보니 결과페이지의 URL은 다음과 같다.
http://www.google.co.kr/search?q=%EB%90%9C%EC%9E%A5%EB%85%80&hl=ko&lr=&newwindow=1&start=10&sa=N
뭔가 쓸떼없는 인자들이 마구마구 있는 것 같아서 없애보면.. 다음과 같다.
http://www.google.co.kr/search?q=%EB%90%9C%EC%9E%A5%EB%85%80&start=10&sa=N
따라서, 구글의 경우 10개씩 묵인 검색결과가 첫페이지, 둘째페이지, 셋째페이지 차례대로 다음과 같은 URL이 된다.
http://www.google.co.kr/search?q=%EB%90%9C%EC%9E%A5%EB%85%80&start=10&sa=N
http://www.google.co.kr/search?q=%EB%90%9C%EC%9E%A5%EB%85%80&start=20&sa=N
http://www.google.co.kr/search?q=%EB%90%9C%EC%9E%A5%EB%85%80&start=30&sa=N

for문의 %i 변수가 적용되어야할 변수 위치가 URL의 중간에 있기 때문에 먼저 위에서 짰던 배치파일로는 처리가 불가능하다. 새로 짠 (짰다기보다는, 몇글자 지워줬을뿐인) 배치로는 가능하다.
이 검색결과중 7번째까지를 이 배치파일로 가져오려면... 실행하고선 이렇게 지정하면 된다 ::
__실행화면_________________________________
Board URL? :

http://www.google.co.kr/search?q=%EB%90%9C%EC%9E%A5%EB%85%80%26start=%i%26sa=N
From where?: 10
To where?  : 70
[for]step?  : 10
____________________________________________
주의해야할 것이 두가지 있다.
첫째, for문의 순환변수가 될 %i를 적절한 위치에 직접 쳐넣어서 지정해야한다는점. (변수 입력 받는 커서에서 for문의 변수를 또 입력해도 되느냐고? 꼬이지 않느냐고? 꼬이지 않는다. 단순 문자열 대치 처리될 뿐이니까. 하지만 %를 두개붙이면 안되고 하나만 붙여야 한다는점 주의.)
둘째, &와 같은 글자들은 %HEX로 변환하여 입력해줘야 한다는 점. & | > < + 이런 문자들 모두 도스프롬프트에서 연산자 및 파이프라인들이기 때문에 그냥 넣었다가는 명령행이 꼬여버린다. 따라서 URL표준안의 %HEX로 인코딩해서 넣어줘야 한다. 이 예제에서는 &를 %26으로 인코딩해서 넣었다. (하필, 변수도 %이고 인코딩도 %이고 이거 원 헷갈려 죽겠다 - -;;; )

돌려보니 잘 돈다 ^^;;;

Tags (관련 유사 이야기거리들) :

Trackback Address :: http://blog.enzoy.pe.kr/trackback/582


    Comment(s) :

Write a comment


 

컴퓨터 사용자 세대 측정

enzoy : 쇠털나날/기계X꼬 - 개발자느낌 : 2005/01/12 02:01

[청어 선배 글 퍼옴]

컴퓨터 주제를 이용한 나이 측정이라는군요.
디스켓 뒷면을 쓰기 위해 손톱깎이를 써본적이 있는 가라는 질문이 0번이었으면 더 좋을텐데요...

청어
---
0. SPC 1500이란 컴을 아시나여? ( Y / N )
1. 실제 사용해본 적이 있나요? ( Y / N )
2. 테이프 레코더로 15분간 로딩해서 겜 해본적 있나요? ( Y/N )
3. MSX1은 TV에 바로 연결하여 사용할 수 있다는 사실을 아시나요? ( Y/N )
4. MSX2에 FM롬펙을 꽂아 '화음!!!'을 연주해 보신적이 있나요? ( Y/N )
5. X2는 비디오와 연결하여 자막을 달 수 있다는 걸 아시나요? ( Y/N )
6. 실제 자막잡억을 해본적이 있나요? ( Y/N )
7. basic 으로도 시리얼 제어를 통한 통신프로그램을 짤 수 있다는 걸 아시나요? (Y/N)
8. 마이컴 100호 특집호를 가지고 있나요? ( Y/N )
9. '디스크 스테이션'을 아시나요? ( Y/N )
10. 한글 모아쓰기가 되지 않는 텍스트 에디터를 사용해 본적이 있습니까? ( Y/N )
11. 512KB 메인메모리를 가진 PC를 사용해 보았나요? ( Y/N )
12. 도께비 한글 카드와 램상주 도께비 폰트를 사용해 보았나요? ( Y/N )
13. dos = high, umb 의 의미를 압니까? ( Y/N )
14. dos memory를 615KB 이상 잡을수 있습니까? ( Y/N )
15. FOX dbase에서 files=40 이상이 필요합니다란 에러를 보았을때 해결할 수 있습니까? ( Y/N )
16. M$-DOS 3.2는 20MB 이상의 HDD를 access할 수 없다는걸 압니까? ( Y/N )
17. 이야기 5.XX, 아래아한글 1.5*, Implay 2.* 를 써 본적이 있습니까? ( Y/N )
18. 전화가 '도수제(한통화당 무조건 20원)'일때 전화를 이용한 통신을 해 본적이 있습니까? ( Y/N )
19. 허큘리스를 압니까? ( Y/N )
20. simcga의 용도를 압니까? ( Y/N )
21. EGA 를 사용해 본 적이 있습니까? ( Y/N )
22. 모뎀기반의 사설비비를 운영해 본적이 있습니까? ( Y/N )
23. 닥터 할로, 보석글 V, pctools 을 사용해 본 적이 있습니까? ( Y/N )
24. *.ims, *.iss, *.rol 가 무슨 화일을 의미하는지 압니까? ( Y/N )
25. 360KB의 5.25인치 FDD를 사용해 본 적이 있습니까? ( Y/N )
26. 2400bps 모뎀을 사용해 본 적이 있습니까? ( Y/N )
27. 애들립 카드를 사용해 본적이 있습니까? ( Y/N )
28. 조합형 한글과 안성형 한글의 차이를 압니까? ( Y/N )
29. 조합형 한글을 써 본 적이 있습니까? ( Y/N )
30. SX 와 DX 의 차이를 압니까? ( Y/N )
31. 코프로세서란 말을 압니까? ( Y/N )
32. 1배속 cd-rom을 써 본적이 있습니까? ( Y/N )
33. VESA slot의 용도를 압니까? ( Y/N )
34. VESA 그래픽 카드를 써본적이 있습니까? ( Y/N )
35. ansi를 사용해본 적이 있다. ( Y/N )
36. 파일을 찾기위해 '아키 서버'를 사용해본 적이 있다. ( Y/N )
37. windows 3.1에서 winsock 세팅을 할 줄 안다. ( Y/N )
38. 동서게임체널 bbs 우수 이용자에게 보내준 SEK 무료 티켓을 받은적이 있다. ( Y/N )
39. 케텔 회원이었다.(Y/N)
40. 코텔 회원이었다.(Y/N)
41. 한국전력공사 비비에스 회원이었다. (Y/N)
42. Wing를 설치해본 적이 있다. ( Y/N )
43. e-ide hdd 사용을 위해 IO 카드를 산 적이 있다. ( Y/N )
44. 25핀 시리얼 마우스를 사용해 본적이 있다. ( Y/N )
45. 패러럴 포트로 파일을 전송해 본 적이 있다. ( Y/N )
46. 9핀 도트 프린터를 사용해 본 적이 있다. ( Y/N )
47. '공병우'씨에게 스티커를 받아본적이 있다. ( Y/N )
48. arj a -r -va a:\barabogi.arj *.* 에서 -va의 의미를 아나요? ( Y/N )
49. 삼국지 1, 수호지1, 대항해시대1 을 해본적이 있나요? ( Y/N )
50. 게임을 하기위해 디스켓을 깔아 끼워 본 적이 있습니까? ( Y/N )
51. copy con 의 의미를 압니까? ( Y/N )
52. mdir을 사용해 본적이 있습니까? ( Y/N )

maro (2005/1/12,13:46)

    좋은 질문들이긴 하지만 매우 PC 쪽에 치우쳐 있단 생각이 든다. 60~70년대에는 컴퓨터가 없었던 것도 아니고...

멍게 (2005/1/12,13:53)

    Y/N = 43:9
    ============
    38. 동서게임체널 bbs 우수 이용자에게 보내준 SEK 무료 티켓을 받은적이 있다. ( Y/N )
    39. 케텔 회원이었다.(Y/N)
    40. 코텔 회원이었다.(Y/N)
    41. 한국전력공사 비비에스 회원이었다. (Y/N)
    =============
    처럼 돈들어가는거 빼고 거의 다 Y 군요. (모뎀 살 돈이 없었어요 ㅡ,.ㅡ;;;;; 모뎀빌려 들어가본적은.... )
    설마 나이측정이라는것이 Y의 갯수인가요?

소누스 (2005/1/12,14:36)

    딴거보다 "공병우 박사... 스티커..." 있어요있어... 그덕에 나부터 동생까지 모두 3벌식...

청어 (2005/1/12,18:30)

    그러면 우리 50살 정도 측정할 수 있게 각 연대별로 중요한 사건들을 적어볼까요? 1955년부터 한 항목씩. ^^

카월 (2005/1/12,22:7)

    전 심지어 코프로세서를 사서 쓴적도 있습니다. -.-

스크문 (2005/1/12,23:18)

    몇번 부터 Y 인가를 묻는 것이 맞는 물음 같은데요.

예인아빠 (2005/1/13,9:57)

    코프로세서... 난 2개나 샀어. 287, 387

진도르 (2005/1/13,11:52)

    근데 왜 1번에 나온 기종이 SPC-1000이 아니고 SPC-1500일까? 1500은 1000의 후속모델이고 황건순씨가 워드프로세서를 만들어 제법 쓰인것을 빼면, 1000이 더 장수했고 더 대표적인 기종일 것 같은데.

청어 (2005/1/13,13:16)

    저는 SPC-1100을 더 오랫동안 썼습니다. 학교나 학원에 제공되는 것으로 SPC-1000보다 좀 더 튼튼했던 것 같더군요.

enzoy (2005/1/14,0:20)

    안타깝게도 다섯개정도가 걸리는데, ^^ 몇개는 다소 편파적인 질문이다 싶기도 하고,
    arj -va 같은 것은 너무 디테일한 질문 같기도 하고 (multi-auto였던가요)
    다소 (별것아닌) 잘난척을 하고싶어 작성한 느낌도 슬금믈류몰하게 나네요 ^^;

체이서 (2005/1/17,13:17)

    예전에 486SX에다 코프로세서 에뮬레이터를 띄운 후에 3DS R4를 구동시켰던 기억이 나네요-.-
    마우스 한번 움직이면 포인터가 다시 나타나는데 10초정도 걸렸던 걸로 기억됩니다^^;;
Tags (관련 유사 이야기거리들) : ,

Trackback Address :: http://blog.enzoy.pe.kr/trackback/207


    Comment(s) :

Write a comment


<< : [1] : [2] : [3] : [4] : [5] : >>

광고란