Talk about GPL v3

IT / FOSS / 웹
"엽기 애니"에 꽂혀 어제도 새벽3시까지 불꺼놓고 식구들 안깨우려고 속으로 흐흐흐흐히히히히크크크크 그러다 쓰러져 잤습니다. 일어나보니 또 11시.
어제랑 달라진게 없잖아!! _-_;;

이불 개고, 밥을 차려 먹습니다. 먹다보니 음악 들으며 먹고 싶어 컴퓨터를 켰습니다. 멜 확인하고 블로그 덧글 확인하고, 음악 틀어놓고 보니 어제 본 애니가 다시 생각나 한 편 더 봅니다. 밥먹으면서 이런 저런 딴짓 계속 합니다. 시간을 보니 아침을 1시간 넘게 먹고 있습니다. -_-

컴퓨터를 끄려다가 문득 KLDP에 들어가니, 이런 배너가 있습니다.



잉? 당연히 지각생의 관심을 화악~ 붙잡습니다. 클릭해보니 6/29일에 공식 발표된 GPL(GNU General Public License) 세번째 버전에 대한 공개 세미나가 오늘(7/13) 열린답니다. 시간은 오후 1시 반부터. 정신이 번쩍 들어 1시간을 끌던 아침(겸 점심) 식사를 단 삼 합에 끝을 내고는 (와구와구 밀어넣었다는 ^^;) 불타는 설거징 후 씻고 집을 나왔습니다.

장소는 잠실역에 있는 L호텔 3층. 자료집은 선착순이었는데, 1시간 정도 늦었는데 다행히 하나 얻어 들어갈 수 있었습니다.


첫번째로 이철남 충남대학교 교수가 "F/OSS Licenses, GPLv3" 라는 제목으로 오픈소스 소프트웨어 라이센스, GPL에 대해 설명했습니다. 제가 늦은 탓에 앞부분을 못들었지만 -_- 들은 부분은, GPL 3.0 의 배경으로서 GPL 2.0과 특허, 다른 오픈소스 라이센스와의 호환성 등을 얘기하고, GPL 3.0의 주요 내용으로서 새로운 용어 선택 (propagate, convey 등), DRM, 특허 관련된 내용을 소개했습니다.

새로운 용어를 선택한것은, 이제 GPL이 국제적으로 널리 적용되고 있으니, 미국 저작권법에서 쓰이는 derivative 같은 말을 쓰지 않기 위한 것으로.. 알고 있는데 확실친 않고요. DRM, tivo 등의 사례에서 GPL소프트웨어를 쓰지만 사용자가 직접 수정후 사용할때 제재가 가해지는 것을 금지하는 내용이 있고, 특허 분쟁의 범위를 명확히 해서 사용자가 부담없이 쓸 수 있게 하는데 목적을 둔 것 같습니다. 그 외에 명문화되지 않아 해석을 두고 문제가 됐던 것을 이번에 명시했다고 합니다.

그 덕에 GPLv3가 v2 보다 조금 더 복잡해지고 골치아파졌다는 게 사람들의 인식인 것 같은데.. 세월이 흐르며 변화된 상황을 반영하고(신기술등) 소프트웨어 사용자의 자유를 적극적으로 보장하기 위한 거라니.. 그저 좋지 아니한가.


두번째 세션은 일본의 IPA/OSS center legal TG Leader 라는 -_- Toshiaki Ebata 씨가 "일본 IT산업의 GPLv3에 대한 법적 이슈(?)" 라는 주제로 강연을 했습니다. 첫번째 세션과 중복되는 내용이 많았지만 산업적 측면에서 얘기를 한 것이 달랐고, 발표 자료에 그림을 많이 사용해서 좀 더 알기 쉽게 다가오긴 하더군요. 그런데 자료를 먼저 볼때는 앞 세션 내용이 잘 이해되는것 같다가 실제로 발표하는 걸 들으니 (동시 통역 노동에 힘입었습니다) 점점 헷갈리고 지겨워지더라는.. -_-



세번째 마지막 세션은 CCL Korea 의 윤종수 판사가 "GPL 및 SW특허 사례연구"에 대해 발표했습니다. 컴퓨터프로그램이 보호되는 세가지 축 - 특허, 저작권, 영업비밀 각각에 대한 설명으로 시작해서, 간접적이지만 GPL이 이슈화된 법정 분쟁 사례(지금도 진행중)를 소개했습니다. GPL이 실제 법정에서 적용된 경우가 전세계에 많지 않은데 이렇게 실제 한 사례를 통해 다양한 쟁점을 살펴보니 흥미롭더군요. 특허와 라이센스가 어떻게 다른지도 확실하게 이해하게 됐습니다.


갑자기 가게된 탓에 GPL내용에 대해 한번이라도 더 못보고 가서 아쉽긴 했지만 그래도 GPL과 소프트웨어 라이센스 전반에 대한 이해를 조금이나마 높이게 된 것 같아 좋았습니다. 언젠가 GPL에 대한 내용을 찬찬히 보고 정리할 수 있으면 해보려고 합니다.

혹시 GPL v3에 대해 관심 있으신 분은 다음 링크들을 참고하삼

http://www.gnu.org/licenses/gpl.html  GPL v3 (영문)

http://kldp.org/node/83839
[번역] GPL v3, the Q&A: 1부 - 라이선스

http://kldp.org/node/83859
[번역] GPL v3, the Q&A: 2부 - 개발자

http://kldp.org/node/84145
[번역] GPL v3, the Q&A: 3부 - 회사


http://kldp.org/node/84260
[번역] GPL v3, the Q&A: 4부 - 기타
진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
2007/07/13 23:09 2007/07/13 23:09
Trackback Address :: http://blog.jinbo.net/h2dj/trackback/478
envia 2007/07/14 01:22 URL EDIT REPLY
못가서 아쉬웠는데, 이렇게 정리해서 올려 주시니 고맙습니다.
지각생 2007/07/14 02:11 URL EDIT REPLY
envia// 다음에 이런 행사 있으면 같이 가시죠 :)
꼬마군단 2007/07/14 10:10 URL EDIT REPLY
어제 갔다가 일본분꺼까지 듣다가 갔는데...ㅎㅎ 진짜로 법밖에 안하더군요..ㅋ
지각생 2007/07/14 16:10 URL EDIT REPLY
꼬마군단// 마지막 질답 시간때 제일 많이 질문을 받더군요. 예상외로 ㅋ
Name
Password
Homepage
Secret

스크립트 만들어 게을리 살자 (3)

매뉴얼
자, 2편에서 우리는 img_resize 라는 스크립트를 만들었다. 이걸 좀 더 우리의 욕망을 충실히 담도록 진보시키자.
하지만 그전에, 도대체 우리가 뭘 하고 있는지 실제로 확인해야 좀 더 신이 날 것 같다. 저렇게 만든 스크립트를 어떻게 실행하고, 활용할지 보자.

우선, 리눅스는 보안을 위해 적절한 권한이 없으면 말을 안듣는다.
img_resize 가 실행하려면 먼저 이 파일에 "실행권한"을 줘야 한다. 그냥 여기서 이해하던 못하던 아래처럼 하자.

$ chmod +x img_resize

1, 2 편에서 설명 안했지만, "$"로 시작하는 줄은 실제로 그렇게 타이핑하라는 것인데, 리눅스에서 터미널을 열면


그림의 맨 아래보면 커서(cursor)가 깜박이고 있다. 이 상태에서 타이핑을 하면 된다. $ 뒤의 내용만 치시라.
혼동을 막기 위해 위의 예를 충실히 반영하면,

mediaction:~/Desktop/images$
mediaction:~/Desktop/images$ chmod +x img_resize

자, 이제 img_resize 를 실행할 수 있다. 아래처럼 한다.

mediaction:~/Desktop/images$ ./img_resize

일단은 많은 거 생각 말고 그냥 그렇게 하자.

자, 이제 파일 관리자(GUI)를 열어 이미지를 열어보자. 지금 디렉토리(~/Desktop/images)에 있는 모든 이미지 크기가 640 x 480으로 되어 있을 것이다.

그럼 어떻게 해야 잘 썼다고 소문이 날까? 집에서 윈도우를 쓰고 있다가 이미지 작업을 할 일이 생겼다고 하자. 디카로 찍은 사진을 어디 올리거나 하려고 파일 크기를 줄이려는데 그게 백마흔아홉장이다.
우선 주변에 리눅스를 쓰는 사람이 있는지 섭외한다. 그리고 그 사람의 컴퓨터에 FTP등의 방법으로(USB로 옮겨도 되고 여튼 어떻게든 해서) 이미지와 이 스크립트 파일(텍스트)을 보낸다. 그리고 그 사람이 스크립트를 한번 실행해 준다음, 다시 이미지 파일들을 가져오거나, 거기서 바로 올리면 되겠다.

-------- 스크립트 업그레이드 하기 ---------
앞에서 만든 img_resize 스크립트 내용을 다시,

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         convert -resize 640x480 *.png
    fi
done

자, 이제 무엇을 할까? 이것만으로도 삶이 많이 윤택해질 수 있지만, 기왕 게을러지는거 조금 더 게을러지자. 이 스크립트는 폭이 640보다 넓은 걸 모두 640x480 크기로 바꿔주는데, 앞에서 일단 우리가 접었던 욕망을 떠올려보자. 이 스크립트는 위 아래로 길쭉한 파일도 640 x 480, 즉 옆으로 넓죽한 이미지로 만들어버린다. 이건 우리가 원하는게 아니다. 길쭉한 것은 손대지 않게 하자.

그럼 이 스크립트가 추가로 할 일은, 이 이미지가 넓죽이인지 길쭉이인지 알아내는 것, 이건 어떻게? 폭(width)이 크냐 높이(height)가 크냐를 비교해보면 되겠지. 위 스크립트는 이미지 폭만 알아냈는데, 높이를 알아내는 부분을 추가하자. 역시 일단 지금은 복사&붙이기(Copy&Paste).

imgheight=`identify -ping $img | cut -f 3 -d " " | cut -f 2 -d "x"`

스크립트를 이렇게 바꾼다.

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
    이미지높이를 알아내고,
    if [ $imgwidth -gt 640 ]; then
         이미지가 넓으면
              convert -resize 640x480 *.png
         한다.
    fi
done

컴퓨터 말로 바꾸기 시작.

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
   
imgheight=`identify -ping $img | cut -f 3 -d " " | cut -f 2 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         이미지가 넓으면
              convert -resize 640x480 *.png
         한다.
    fi
done

이미지가 넓다면 [ 폭 > 높이 ] 이다.
if [ 폭 -gt 높이 ]; then
    바꾸기.
fi

이번 단계의 최종 결과.

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
   
imgheight=`identify -ping $img | cut -f 3 -d " " | cut -f 2 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         if [ $imgwidth -gt $imgheight ]; then
              convert -resize 640x480 *.png
         fi
    fi
done

--------

이제 다음 단계 : 위아래로 길쭉한 모양일 경우, 폭은 640, 높이는 비율을 맞춰 크기 조정하기.

자, 이제 컴퓨터에게 계산을 좀 시키자. 2편에서 살짝 나왔지만, 위아래로 길쭉하고 폭이 640보다 큰 이미지를 640x???로 변형한다면, 새 높이는?

원래 높이 : 원래 폭 = 새 높이 : 640
새 높이 = 원래 높이 곱하기 640 나누기 원래 폭

새 높이를 계산해서 new_height 라는 곳(변수,variable)에 써놓기로 한다면, 코드는 아래처럼 된다.

new_height=$(( ($imgheight * $640) / $imgwidth ))

식이 저렇게 되는건 bash 라는 녀석이 까칠하기 때문이니 그냥 저런가보다 하세요. -_- 저대로 복사해 붙여넣길. 띄어쓰기도 중요하므로.

자, 스크립트 코드는 이렇게 바꾸자.

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
   
imgheight=`identify -ping $img | cut -f 3 -d " " | cut -f 2 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         이미지가 넓으면
              convert -resize 640x480 *.png
         하고, 안그러면
              새 높이를 계산한 후,
        
     convert -resize 640x새높이 *.png
         한다.
    fi
done

자, 새로운게 나올 타이밍. "~하면 ~한다." 가 if... then.. fi 라면, "~하면 ~하고, 아니면 ~한다."는 if... then... else... fi.

if [ 조건 ]; then
    참일때 할일
else
    거짓일때 할일
fi

스크립트 코드에 넣자

#! /bin/bash

for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
   
imgheight=`identify -ping $img | cut -f 3 -d " " | cut -f 2 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         if [ 이미지가 넓다 ]; then
              convert -resize 640x480 *.png
         else
              새높이를 계산한 후
        
     convert -resize 640x새높이 *.png
         fi
    fi
done

자, 이제 코드를 완성하자.

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
   
imgheight=`identify -ping $img | cut -f 3 -d " " | cut -f 2 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         if [ $imgwidth -gt $imgheight ]; then
              convert -resize 640x480 *.png
         else
              new_height
=$(( ($imgheight * $640) / $imgwidth ))
              convert -resize 640x$new_height *.png
         fi
    fi
done

자, 이것으로 우리가 원하는 작업을 한번에 해결해주는 스크립트를 일단 완성했다. 앞으로 살면서 "이 디렉토리에 있는 모든 PNG이미지의 크기를 640x480 으로 바꾸고 싶어. 더 작은 건 냅두고, 위아래로 길쭉한 것은 폭만 640으로 하고." 이런 일이 생길때는? 그저 i m g _ r e s i z e 라고 10 글자 타이핑 후 엔터 치면 끝난다는 거~.

기쁘다. 이제 내가 해야 할 단순반복노동 중 한 가지가 줄었다. 하지만, 여기까지 내친김에 더 욕심이 난다. 이 스크립트는 현재,
1. PNG 이미지만 처리할 수 있다.
2. 원하는 폭이 640 x 480 이 아닌경우는 파일을 열어 수정하고, 다시 실행해야 한다. 바뀔 때마다.
3. 원본 파일을 따로 유지해두고 싶은데 그러려면 어딘가에 수동으로 파일들을 복사해줘야 한다.
4. 버그가 있(을 것이)다.

자, 4번을 빼고는 인정할 수 있을 것 같다. 그럼 그건 이 다음편에.
(근데 다른 일을 좀 해야 하니 다음편은 조금 더 늦을 듯 -_-)






진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
2007/07/13 22:13 2007/07/13 22:13
Trackback Address :: http://blog.jinbo.net/h2dj/trackback/477
Name
Password
Homepage
Secret

스크립트 만들어 게을리 살자 (2)

매뉴얼
컴퓨터는 인간이 원하는 것중 피곤하고 짜증나는 것을 대신해 주는게 큰 목적이다. 전에도 얘기했듯이 컴퓨터가 인간을 오히려 피곤하게 한다거나, 능히 쉽게 할 수 있는 것을 어렵게 계속 하고 있는 것은 바라던게 아니겠지.

컴퓨터는 열나 단순해서 하나부터 열까지 일일히 말해줘야 한다. 그리고 뭐든지 정확히 설명해줘야 한다.
"TV를 켜라!"는 말을 들으면 사람은 바로 이해하고 어케어케해서 티비를 켜겠지만, 컴퓨터가 알아듣기 위해서는,
"TV의 전원을 넣어라" -> "TV의 리모콘이 있다면, 거기에서 전원 버튼을 찾아서, 그것에 적당한 압력을 가해 눌러라. 리모콘이 없다면 TV본체에서 전원 버튼을 찾아서, 역시 적당한 압력을 가해 눌러라" 라고 말해줘야 한다.
즉, 컴퓨터에게 일을 시키기 위해서는 컴퓨터가 얼마나 단순무식한지 알고, 인간이 습관적으로 쉽게 하는 간단한 일이 사실은 어떤 중간 과정들이 있는건지 재발견할 필요가 있다.

프로그램을 짠다는 것은 컴퓨터에게 "이러저러해라"하는 지시문을 작성하는 것인데, 좋은 프로그램은 컴퓨터 기술에 대한 지식만으로 나오지 않는다. 내게 좋은 프로그램이란, 바로 지금 내가 원하는 걸 부담없이 해주는 프로그램일 것이다.

나와 컴퓨터, 그리고 환경에 대한 이해가 바탕이 되서, 실제 일이 어떻게 이루어질(지는)지에 대한 상상력이 풍부한 사람이 좋은 프로그램을 짤 수 있다. 엄청 복잡하고 덩치만 크지, 실제로 내가 많은 추가작업을 앞뒤로 해줘야 한다던지, 지금 당장 필요한데 쓸 수 없다던지 하는 것은 "내게 좋은" 프로그램은 아니다. 가장 "내게 좋은" 프로그램은 사실 자기 자신이 만들 수 있을 거라고 본다. 만일 가능하다면, 나는 모든 컴퓨터 사용자가 프로그래머가 되는 것이 가장 바람직하다고 생각한다. 프로그램을 짜는데 있어 컴퓨터 관련 지식의 비중은 생각보다 크지 않다는 걸 말하고 싶다.

자, 그럼 서론은 슬슬 접고,
프로그램을 짜는데 있어 제일 먼저 할일은,
"내 욕망을 정확히 표현하기"이다. 난 뭘하고자 하나, 그걸 위해 뭐가 필요한가?
앞의 글에서 든 예는, "내가 지정하는 이미지들이, 폭이 넓은 이미지가 640x480보다 크면, 그 크기를 640x480으로 조정하고, 위 아래로 길쭉한 이미지가 폭이 640보다 넓으면 640x??? 사이즈로 바꾼다. 더 작은 이미지는 그냥 내버려 둔다." 이다.

그 다음은 이것이 어떻게 실제로 이루어질지 생각해본다.
먼저 1. "내가 지정하는 이미지"가 어떤 것들인지 파악하고,
2. 그것들 각각의 이미지 사이즈를 알아낸다.
3. 이미지 사이즈를 주어진 요건에 비춰 판단한다.
4. 판단에 따라 적절한 작업을 수행한다.

이정도면 됐을까? 조금 더 나눠보자. 말했든 컴퓨터는 아주 아주 바부탱이다. 빠르기만 열나 빠르지, 0이야? 1이야? 이거 밖에 할 줄 모른다. 조금 더 자세히 할 일을 말해주자.

1. 내가 지정하는 이미지들이 어떤 것인지 따로 적어놓고,
1-1. 그런 이미지들 중 일단 하나를 선택한다.
2. 그 한 이미지의 사이즈를 알아낸다.
3. 이미지의 폭이 기준(640)보다 큰가 작은가
3-1. 작다면 그냥 내버려둔다. 더 할게 없다. 일단 이 이미지에 대해서는 끝.
3-2. 크다면, 그게 넓쭉한가 길쭉한가?
3-2-1. 넓쭉하다면, 그것의 크기는 640x480이 되어야 한다.
3-2-2. 길쭉하다면, 폭은 640이고,
  길이는 원래 길이가 A, 폭이 B 였다면, A : B = 새 길이 : 640 이 되어야 하니깐, 새 길이는 ( A 곱하기 640 ) 나누기 B이다.
4. 이 이미지의 크기를 계산한대로 조정한다. 이 이미지에 대해서 더 할게 없다. 끝.
5. 이제 이 이미지는 됐다. 다음 이미지를 불러오자. 1-1로 다시 간다.

쓰고 보니 그렇게 쉬운 예를 고른 건 아니라는 생각이 든다. 벌써 이 블로그를 떠나려는 마우스의 움직임이 그려진다.
잘못했어요. 미안. 가지 마세요 -_-


어쨌든 프로그램을 짠다는 것은 이렇게 컴퓨터의 동작 방식을 이해하고, 내가 원하는 작업이 실제로 어떤 세부적인 과정을 통해 이뤄지는지 파악한 다음, 그걸 컴퓨터가 알아들을 수 있는 언어로 번역해주는 작업이다.
지금까지 한 것이 바로 "사람이 이해할 수 있는 수준에서 작업을 세부 과정으로 쪼갠" 것이다.

하지만 모든 프로그램이 사실 이렇게 만들어지진 않는다. 아주 간단한 프로그램의 경우는, 무작정 컴퓨터와 직접 소통을 시도하며 쉬운 것부터 시키고, 점차 조금씩 많은 걸 시켜가면서 내가 원하는 것이 점점 반영되도록 계속 수정해서 만들기도 한다. 예를 들면, 일단 스크립트 파일을 하나 만들어 놓고, 거기에 한 두줄만 써넣는다. 내 욕망을 한번에 다 쏟아내는게 아니라 작은 것부터 하나씩 점차 이뤄지도록 한다. 단순한 작업을 하는 스크립트에서 출발해 점점 많은 일을 하고, 많은 것을 고려하는 똑똑한 스크립트로 발전시켜나가는 것이다.

일단 내가 처할 상황을 단순화한다. 보통 내가 디카로 사진을 찍을때 1600 x 1200 이상으로 찍으니 길쭉 넓쭉한 건 있어도 어쨌든 640x480보단 다 클것이다. 다른 경우에 쓸 일이 있으나 일단은 이런 경우를 가정한다. 그리고 이미지는 JPG, GIF등은 말고, PNG만 고치기로 한다.

먼저, 디렉토리를 따로 만들어 길쭉한 사진은 빼놓고(수동), 스크립트가 다음 작업만 하게 한다.
1. 내가 지정하는 이미지들이 어떤 것인지 알아차리고,
2. 다음 과정을 반복한다.
  - 이미지를 하나씩 선택한다. 모두 처리했다면 반복을 끝낸다.
  - 선택한 이미지의 크기를 640x480으로 조정한다.

코드로 옮겨본다. (일단은 그냥 편하게 보자) 파일 이름은 img_resize 정도로 하자. 그냥 텍스트 파일로 만들면 된다. 실행방법은 나중에.

#! /bin/bash
convert -resize 640x480 *.png

이렇게 한(두)줄 스크립트도 충분히 우리를 행복하게 할 수 있는데, "지금 디렉토리의 모든 PNG파일을 640x480크기로 바꿔라"는 말을 "convert -resize 640x480 *.png"라고 타이핑하다가, 이제는 "img_resize"라고 10글자만 타이핑해도 되니까. 스크립트가 별개 아니다. 평소에 복잡하고 긴 명령어를 매번 타이핑해주고 있다면 그냥 이렇게 텍스트 파일에 써놓고 앞으로 그 파일 이름만 타이핑하자. 그것만으로도 우리의 스트레스는 급감한다. 타이핑 양도 줄고, 오타도 줄고, 신경쓸 일도 준다.


이것과 정확히 같은 역할을 하는 코드인데, 앞으로를 위해 "반복 제어문"을 넣은 형태로 바꾸자.

#! /bin/bash
모든 PNG파일중 하나씩 선택해서
   convert -resize 640x480 선택한파일
한다.

컴퓨터가 알아들을 수 있게 바꾸면,

#! /bin/bash
for img in *.png
do
    convert -resize 640x480 $img
done

그냥, for... 문이 반복문인데, 반복할 명령어를 do ~ done 으로 묶어주는구나. 정도 이해해주고 패스.


그래놓고, 이게 잘 되면 조금씩 기능을 추가해간다.
1. 내가 지정하는 이미지들이 어떤 것인지 따로 적어놓고,
2. 다음 과정을 반복한다.
  - 처리 안한 이미지를 하나 선택한다. 모두 처리했다면 반복을 끝낸다.
  * 이미지 폭이 640 보다 큰지 작은지 판단한다.
  **  작으면, 할게 없다.
  **  크면, 선택한 이미지의 크기를 640x480으로 조정한다.


자, 코드는 아래처럼 변해야 한다.

#! /bin/bash
for img in *.png
do
    이미지 폭을 계산한다.
    이미지 폭이 640보다 크면,
         convert -resize 640x480 *.png
    한다
done

자, 사람의 말을 컴퓨터의 말로 바꾸자.
여기서는 아래 코드를 복사&붙여넣기(Copy&Paste)하기로 한다. 골치아프니 일단 생각하지 말고.
  imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
    이미지 폭이 640보다 크면
         convert -resize 640x480 *.png
    한다.
done

나머지 부분도 바꿔보자. bash 쉘(리눅스에서 기본으로 사용하는 CUI) 스크립트에서 판단은 if... 를 사용한다.

if [ 조건 ]; then
   할일.
fi

이래놓으면, "조건"이 참일때 "할일"을 수행한다. 본래 코드에 적용

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
    if [ 이미지 폭이 640보다 크다 ]; then
         convert -resize 640x480 *.png
    fi
done

이젠, 조건에 해당하는 부분을 컴퓨터말로 바꾸자. "~보다 크다"는 "-gt"를 사용한다.
이미지폭은 바로 윗줄에서 계산해서 imgwidth 라는 곳에 값을 적어놨다. "$"를 붙여 $imgwidth 라고 하면 거기에 적힌 값을 사용할 수 있다.
=> $imgwidth -gt 640

#! /bin/bash
for img in *.png
do
    imgwidth=`identify -ping $img | cut -f 3 -d " " | cut -f 1 -d "x"`
    if [ $imgwidth -gt 640 ]; then
         convert -resize 640x480 *.png
    fi
done

여기까지 잘 되면, 또 기능을 추가한다. To be continue...
진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
2007/07/13 20:50 2007/07/13 20:50
Trackback Address :: http://blog.jinbo.net/h2dj/trackback/476
Tracked from | 2007/07/13 22:13 | DEL
자, 2편에서 우리는 img_resize 라는 스크립트를 만들었다. 이걸 좀 더 우리의 욕망을 충실히 담도록 진보시키자. 하지만 그전에, 도대체 우리가 뭘 하고 있는지 실제로 확인해야 좀 더 신이 날 것 같다. 저렇게 만든 스크립트를 어떻게 실행하고, 활용할지 보자. 우선, 리눅스는 보안을 위해 적절한 권한이 없으면 말을 안듣는다. img_resize 가 실행하려면 먼저 이 파일에 "실행권한"을 줘야 한다. 그냥 여기서 이해하던 못하던
su 2007/07/15 19:01 URL EDIT REPLY
안녕하세요. 올블타고 왔어요. 히히,
지각생 2007/07/16 13:01 URL EDIT REPLY
어라? 추천받았네 ^^;;
Name
Password
Homepage
Secret