파일:Ada Lovelace 1838.jpg

 

프론트엔드와 백엔드 (1)

 

- 에이다 러브레이스 혹은 이 양반이 특허만 냈어도 지금쯤 블로깅은 주판으로 하고 있겠지

 

새삼스러운 이야기지만 컴퓨터는 많은 일은 한다. 물론 결정적인 일들1 해주지 않지만 그래도 시키는 일은 데꺽데꺽 잘하는 편이다. 예민한 감성을 가지고 있거나 컴퓨터와 장시간 대화를 나눠본 사람이라면 쉽게 알 수 있겠지만 컴퓨터는 사실 사람의 말을 이해하지 못한다. 컴퓨터의 내면은 상당히 하드보일드한 편인데 그 속에는 수많은 집적 회로들 사이로 깜박거리는 전기 신호만이 있을 뿐이다. 전기가 흐르지 않는 상태와 흐르는 상태, 이른바 0과 1의 세계-바로 디지털-가 그것이다. 이 0과 1의 삭막한 세계와 꽃이 피고 눈이 내리는 현실의 세계를 이어주는 것이 프로그래밍 언어이다.

 

프로그래밍 언어의 알파와 오메가를 정립한 사람은 에이다 러브레이스 백작 부인으로 알려져 있다. 에이다는 찰스 베비지란 사람과 친했는데 그 양반은 오늘날 컴퓨터의 조상이라고 할 수 있는 해석 기관이란 걸 구상하고 있었다. 확실히 천재적인 발상이긴한데 아쉬운 점은 당시 기술로 이 해석 기관을 구현하는 것은 불가능했다는 것이고 그래서 이 해석 기관이란 걸 이해할 수 있는 혹은 관심이 있는 사람 역시 거의 없었다는 것. 하지만 수학과 과학에 관심이 많고 딱히 할 일이 없었던 에이다는 이 해석기관에 관심을 가지고 베비지의 연구를 이해하고 더 나아가 이 해석기관과 인간을 이어주는 언어 체계의 기초를 잡기에 이른다.

 

그 내용인즉 소위 프로그래밍의 알파와 오메가인 분기문,  반복문, 서브루틴 등의 개념을 정립한 것인데, 이를 간단히 설명하기 위해 또 컴퓨터가 사람의 명령을 이해하기 위해 어떠한 과정을 겪게 되는지 다음과 같은 예제를 보도록 하자.

 

 

1. 프로그래머의 애인이 프로그래머에게 명령을 내린다.

 

“시장에 가서 사과 1개를 사고 달걀 있으면 6개 사와.”

 

2. 프로그래머가 명령을 프로그래밍 언어로 재구성한다.

 

(시장에 간다)

 

(사과를 1개 고른다)

 

[가게에 달걀이 있는가?]

 

         > 있을 경우

 

         *(사과를 1개 더 고른다)

 

          [사과가 모두 6개 인가?]

 

                         > 그렇다

 

                         계산을 하고 집에 간다

 

                         > 아니다

 

                         *로 돌아간다

 

           > 없을 경우

 

           계산을 하고 집에 간다

 

// 여기에서 달걀이 있는가 이 부분이 분기문이며, 특정 조건을 충족하느냐의 여부로 다음 행동을 결정하게 된다. 그리고 달걀이 있을 경우 사과를 5개 더 사는 과정이 반복되는데 이것이 바로 반복문이다.  

 

3. 코딩을 한다.

 

go(market);

get(apple, 1);

if(egg!=null){

         while(ihave(apple)<6){

                     get(apple, 1);

          }

}

buy();

 

// 대충 이런 느낌이라고 표현하기 위한 코드이다. 위 아래와 비교해보면 이 중간적인 언어의 존재 이유를 알 수 있다. 사람이 보기에도 대충 어떤 뜻인지 알거 같으면서도 컴퓨터가 알아듣기 쉽게도 간결하고 명확하달까. 여담이지만 가게가 없거나, 가게에 사과가 없거나, 돈이 없거나 하는 경우에는 어떻게 될까? 사람이라면 변명하거나 다른 가게에 가거나 훔치거나 하겠지만 컴퓨터는 소위 말하는 에러 메시지를 띄우며 프로그램은 뻗게 된다. (...)

 

4. 프로그램 코드가 기계어로 변환된다.

 

001001 11101 11101 1111111111111000
001000 00001 00000 0000000000001010
001000 00001 00001 0000000000000010
101011 11101 00001 0000000000000000
001000 00010 00001 0000000000000100
101011 11101 00010 0000000000000100
001001 11101 11101 0000000000001000

...

 

// 역시 대충 이런 느낌이라고 표현하기 위한 야메 기계어. 이 명령은 컴퓨터가 알아들을 수 있고 컴퓨터는 상점에서 사과를 몇개 사올 것이다.  그리고 프로그램은 정상적으로 종료된다. 물론 애인이 원하는 것은 사과 6개가 아니라 사과 1개와 달걀 6개일지도 모른다는 느낌이 들지만 뭐 역시 대충 이런 느낌의 사례는 현실에도 많으니까.

 

 

여튼 에이다 선생은 위의 개념2들만 있다면 이 해석기관과 그 자손들이 모든 계산을 할 수 있을 뿐 아니라 그림을 그리거나 작곡을 하는 것 역시 가능할 수 있을 것이라고 예견했다. 그리고 그것은 현실이 되었다. 그리고 인간의 언어와 점차로 더 닮은 프로그래밍 언어들은 수많은 개발자들이 더 수많은 사람들의 욕망을 충족시켜주는 프로그램을 만들도록 인도하고 있다. 여담이지만 에이다 자신도 경마 확률3을 계산하는 프로그램을 만들어 인류에 공헌도 하고 살림도 좀 펼려고 하였으나4 안타깝게 실패하고 실의 속에 세상을 떳다. 지금 잡스나 게이츠의 무리들을 본다면 아마 저승에서 특허나 낼 걸 생각할지도 모르겠지만:) 그랬다면 아마 잡스나 게이츠의 무리들은 커녕 업계 자체가 남아있으려나..

 

프론트엔드와 백엔드에 대한 이야기를 하려다-진짜 했었다-이야기가 좀 샌 감이 있지만, 프로그램에 대한 이야기를 했다. 다음 기회가 있다면 프론트엔드와 백엔드에 대한 이야기를 하게 될 것이다.

 

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
  1. 가령 돈을 벌어 온다거나텍스트로 돌아가기
  2. 분기나 반복텍스트로 돌아가기
  3. 지금도 어디선가 많은 컴퓨터들은 로또 등의 통계/예측을 위해 오늘도 돌아가고 있다. 읭읭.텍스트로 돌아가기
  4. 도박 중독 덕에 말년에 궁핍했다고도텍스트로 돌아가기
2010/11/30 16:50 2010/11/30 16:50
Tag //

아무거나 깔아쓰기

from 리눅스 2010/11/29 16:37

  가끔 설정을 하기 위해서 컴퓨터를 하는 사람도 있지만1 대부분의 경우업무건 취미건 어떠한 작업을 수행하기 위해 컴퓨터를 사용한다. 거의 대부분의 이 작업들은 어플, 즉 응용 프로그램을 통해서 이루어진다. 가령 가계부를 작성하기 위해 우리는 스프레드쉬트(가령 엑셀)을 사용하고, 일기를 작성하기 위해 워드 프로세서를 쓰고, 특별한 용무는 없지만 와우에 접속하고, 또 인터넷에 접속하기 위해 브라우저를 열고, 사진을 편집하기 위해 ...

 

  결국 일반적인 pc사용자에 있어 자기의 필요에 적합한 프로그램을 찾는 것이 컴퓨팅의 알파요, 사용하는 것이 오메가가 될 것이다. 리눅스에서의 프로그램 설치는 웹 등에서 설치 파일을 구해서 다운 받는 경우도 있지만 많은 경우 소프트웨어 관리 툴2을 통해서 이루어진다. 설치 파일(dev이나 rpm)을 통해서건 툴을 통해서건 설치된 프로그램들은 툴을 통해 삭제하거나 할 수 있고 통합적으로 시시때때로 업데이트 관리도 해준다.

 

  다음은 웹서핑을 하다가 우연히 마음에 드는 색깔을 발견하고 html색상 코드를 추출하기 위해 프로그램을 설치/사용하는 예제이다.

 

 

  사실 많은 경우 리눅스는 쉽지 않다. 적어도 윈도우만큼은 어렵고 그보다 더 낯설다. 하지만 프로그램을 찾고 설치하는 것만큼은 직관적이며 단순하다. 또한 자유/오픈소스 소프트웨어가 보통 그러하듯이 많은 프로그램은 무료3이다. 대개 검색하고 설치하고 삭제하고 다시 검색하는 시도들을 통해 사용자는 점차로 컴퓨터를 사용하는 것에 익숙하게 된다. 그런 의미에서 리눅스는 쉽지 않지만 그닥 어렵지도 않다.

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
  1. 의외로 설정 매니아들은 우리 주위에 쉽게 찾아볼 수 있다.텍스트로 돌아가기
  2. 우분투의 소프트웨어 센터나 시냅틱, 수세의 yast와 같은.텍스트로 돌아가기
  3. 즉 결재나 크랙에서 자유로울 수 있다는 것.텍스트로 돌아가기
2010/11/29 16:37 2010/11/29 16:37
Tag //

  w3m은 텍스트 기반 웹 브라우저이다. lynx와 비슷한 느낌이지만 lynx보다는 프레임 등 근대적 홈페이지를 잘 해석하는 편이다. 다만 플래시는 물론이고 스크립트나 css마저도 지원이 안되기 때문에 주력 브라우저 혹은 일상적으로 사용하기에는 무리가 따른다. 뭐랄까 그림 파일 하나 제대로 못 보는1 괴이한 이 물건의 진가는 터미널상에서 돌아간다는 것 (과 극단적인 페이지 해석으로 패킷과 로딩 시간이 절약된다는 것도) 정도이다. 사실 터미널에서 브라우징이 필요할 일은 거의 없지만, 서브 컴퓨터 없이 서버와 상담 중에 웹에 있는 참고 자료를 보고 싶다거나, x윈도가 날아간 상태에서 구글링해서 해답을 찾고 싶을 때(!) 상당히 유용하게 쓰일 수 있다. 덤으로 textarea를 vi 등으로 대체할 수 있기 때문에 이쪽 계열 매니아들에게도 유용할 지도 모르겠다.

 

  당연하게도 제대로 볼 수 없거나 로그인이나 글쓰기에서 막히는 사이트들도 많지만 텍스트 위주의 사이트-가령 위키나 구글, kldp를 사용하기에 충분하다. 사실 서버 앞에서나 x 날아간 상황에 가장 유용한 사이트들이기도 하다. 웹서핑 하면서도 일하는 것처럼 보이는 효과도 있지만 쇼핑몰은 잘 안되는지라..

  허접해 보여도 북마크나 탭 브라우징도 지원하는 등 기본적인 건 거의 다 지원하는 편. 일반적인 이동키나 vi혹은 emacs의 이동 스타일을 지원하고 엔터로 하이퍼 링크를 탈 수 있다. 나머지 단축키는 대문자H로 확인 가능.

 

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
  1. 다운 받거나 다른 프로그램으로 열 수는 있다만텍스트로 돌아가기
2010/11/16 14:54 2010/11/16 14:54
Tag //

// 많은 경우 적어두지 않으면 다시 검색해야 한다:(

 

 

#!/bin/bash
echo "input >>"
read INPUT
echo "output >>"
read OUTPUT
echo "1. low qual 2. high qual >>"
read QUAL
 
case "$QUAL" in
1)
mencoder -idx $INPUT -ovc lavc -oac mp3lame -o $OUTPUT
exit;;
2)
mencoder $INPUT -ovc xvid -oac mp3lame -xvidencopts pass=1 -o $OUTPUT
exit;;
*)
exit;;
esac
 

 

// ogv 포맷의 동영상을 avi로 변환하기 위한 스크립트.

 

#!/usr/bin/perl
use strict;
use Encode;
use Archive::Zip;
my $zip = Archive::Zip->new();
$zip->read($ARGV[0]) == 0 or
   die "$0: couldn't read $ARGV[0]\n";
foreach my $mref ($zip->members) {
    my $n = decode("cp949",$mref->fileName);
    print "Extracting $n\n";
    $zip->extractMember($mref,$n) == 0 or
   die "$0: couldn't extract $n\n";
}

 

// 윈도우에서 압축한 한글 이름 파일들을 파일 이름 안깨지게 푸는 스크립트.

 

#! /bin/bash
echo -n "rdp desktop address >"
        read _goal
rdesktop -u administrator -r disk:down=(공유폴더경로) -g 1248x700 $_goal

 

// 해상도와 공유폴더를 고정시켜둔 상태에서 윈도우 머신으로 원격 접속하는 스크립트.

 

// 사용상 편의를 위해 /usr/local/bin/에 작성하고 chmod +x로 실행 권한 부여.

진보블로그 공감 버튼트위터로 리트윗하기페이스북에 공유하기딜리셔스에 북마크
2010/11/11 12:18 2010/11/11 12:18