[카테고리:] 컴퓨터

  • 스마트폰이 시각장애인의 인터넷 활용에 조금 기여하는 바

    우리나라 인터넷에서 유행하는 웹 디자인의 특징은 “아름다움”이다. 웹 디자이너가 추구하는 아름다움을 살리기 위해서 모든 글자가 그림으로 박혀서 들어가 있고, 그 그림의 img태그에는 alt속성이 지정되어 있지 않다. 뿐만 아니라, 어떤 경우에는 플래시로 메뉴와 내용을 작성하여 동적이고 아름다운 시각적 표현을 보여주고 있는 곳도 있다. 하지만 그것이 전혀 아름답지 않은 사람들이 있는데, 바로 시각 장애인들이다. 그들은 인터넷을 사용하기 위해서 전적으로 음성합성장치에 의존해야 하는데, 그림이나 플래시로 되어 있는 경우에는 음성합성장치가 전혀 도움이 되지 않는다. 어떤 경우에는 시각장애인 전용 페이지를 만들어서 나름의 배려를 하는 곳도 있지만, 그 시각장애인 전용 페이지로 들어가기 위한 메뉴를 그림이나 플래시로 만드는 멍청한 짓을 하는 웹 디자이너 및 개발자도 있기 때문에 도움이 되지 않는 경우도 많다.

    최근 스마트폰 열풍이 불면서, 우리나라에서도 스마트폰을 배려하는 인터넷 사이트들이 늘어나고 있다. 스마트폰 전용 페이지를 디자인 할 때 가장 중요한 것은 용량이다. 스마트폰 요금제의 데이터 전송량은 한정되어 있고, 무제한이라 하더라도 느리기 때문에 용량이 크면 페이지를 불러오는데 시간이 많이 걸린다. 따라서 스마트폰 전용 페이지의 미덕은 그림을 줄이고 텍스트를 늘리는 것이다. 한가지 더 있는데, 스마트폰에서는 페이지의 확대-축소가 자유롭다. 모든 스마트폰이 자랑하고 있는 멀티터치(또는 더블터치) 기능으로 손가락 두개를 화면에 대고 쫙 벌리면 화면이 확대된다. 이 경우, 텍스트로 된 부분은 스마트폰에서 적절히 처리하여 깔끔하게 확대가 되지만 그림으로 된 부분은 픽셀이 도드라지게 보이는 현상이 나타난다.(어쩔 수 없음.) 따라서 스마트폰에서 더 아름답게 보이는 웹 페이지를 만들기 위해서는 텍스트를 많이 사용하고 그림으로 된 글자의 사용을 줄여야 한다. 플래시로 된 메뉴도, 어떤 스마트폰은 플래시를 지원하지 않는 경우가 있고, 지원하더라도 플래시는 배터리를 빨리 소모시키는 경향이 있기 때문에 플래시로 된 웹 페이지 역시 선호받을 수 없다.

    앞서 말했듯이 시각 장애인들은 그림과 플래시로 된 내용을 읽거나 이해하기 어려운데, 스마트폰 덕분에 그런 웹 페이지들이 줄어들고 있다. 적어도, 스마트폰 전용 웹 페이지는 저절로 시각장애인들에게도 사용이 편리한 웹 페이지가 되어가고 있다. 따라서 스마트폰의 보급은 시각장애인의 인터넷 활용에 어느정도 기여하는 부분이 있다.

    애초에 웹 표준 지켰으면 스마트폰 열풍이 불 때 추가비용 안 들여도 되는걸…-_-

  • 무료 오픈소스 강의


    http://www.olccenter.or.kr/

    오픈소스에 대한 강의다. 리눅스와 여러가지 프로그래밍에 대한 강의가 있다.

    장점 : 무료

    단점 : 윈도우 전용.

    리눅스 강의도 있는데 윈도우 전용인 희한한 서비스. 이 강의를 리눅스에서 수강할 수 있을 수준의 실력자는 강의를 들을 필요가 없다. 정말 진정한 한국형 서비스라고 해야 하는 걸까…..

  • 계산이 언제 끝나려나?

    500메가바이트 분량의 3차원 행렬 6개를 더하고 나누고 하는 삽질을 해야 하는데 시간이 얼마나 걸릴까 추정해 보려고 실험을 해 봤다.

    #include

    int main(void){

    int i=2000000000;

    double sum = 1.0;

    double a = 1.0000001;

    while(i–){

    sum*=a;

    }

    printf(“Answer = %lf\n”, sum);

    return 1;

    }

    1.0000001을 20억번 곱하는 프로그램이다. 약 12초 걸렸다.

    저기서 *=을 +=으로 바꾸면 20억번 더하는 프로그램이 되는데, 그 경우에는 약 10초정도 걸렸다. 즉, 곱셈이 20%정도 더 연산량이 많다는 뜻이다.

    3차원 행렬에 있는 숫자들이 대략 500만개 정도 있고, 그거 6개를 더해야 하니까 덧셈은 3천만번. 그걸 평균을 내기로 했으니까 곱셈은 500만번정도. 오차를 계산해야 하니까 다시 덧셈 500만번 추가. 이 계산을 100번 반복하면 약 4억번 정도의 덧셈과 5천만번 정도의 곱셈이 필요하다. 단순히 위의 수치대로만 계산이 된다면 3초에 끝난다는 뜻인데…

    만약 진짜 3초만에 끝나는 계산이라면, 500만개는 부족하니까 계산양을 좀 더 늘려야겠다.

    —-

    추가.

    곱셈과 덧셈의 차이를 발견하기 위해서 좀 더 실험을 해봤다.

    #include

    #include

    int main(int argc, char **argv){

    int i=atoi(argv[1]);

    double sum = 1.0;

    double a = 1.0000001;

    while(i–){

    sum+=a;

    }

    printf(“Answer = %lf\n”, sum);

    return 1;

    }

    입력받은 수 만큼 더하거나 곱하는 프로그램이다. +=과 *=을 바꿔서 한번씩 해봤다.

    그 결과를 보면 쥐꼬리만큼 차이가 나는 것을 발견할 수 있다. 이 그래프의 가로축은 연산 횟수, 세로축은 걸린 시간이다. 걸린 시간을 측정하는데에는 리눅스의 time 명령어를 사용하였다. 로그-로그 그래프인데도 지수함수적인 증가인 것 처럼 보이는 걸 보면, 로그로그-로그로그 그래프를 그려야 할지도 모른다는 생각이 든다. 아무튼, 연산 횟수가 늘어날수록 그 차이도 더 벌어지고 있다는 걸 볼 때, 아마 수천경 번 정도 연산해야 하는 계산은 엄청난 차이가 날 것이다. 지수함수보다 더 빨리 커지는 함수가 지수지수 함수이기 때문이다.(지수함수의 지수가 지수함수로 커지므로.)

  • XML

    XML이 나를 괴롭히고 있다. 아…아아아아아

    이번학기 내내 XML만 공부했었어야 했다는 후회가 든다. 이건 100% 암기과목이다. 생각할 필요도 없고 따질 필요도 없는, 100% 암기과목이다. 유일하게 F가 걱정되는 과목이기도 하며, 이 과목때문에 졸업을 못할 수도 있는 과목이다. 집중해야겠다.

    —-

    시험은 끝났는데 D와 F의 경계선에 서 있다. 따라서 성적이 발표되는 수요일날 졸업 가능성이 확정된다.

  • apt-cacher

    우분투를 쓰는데, 외부와 인터넷 연결이 단절된 컴퓨터에 업데이트를 시켜줘야 할 일이 생겼다. 젠장. 외부와 연결되는 통로는 마스터 노드가 있는데, 이걸 통해서 인터넷을 공유하면 안되고 그냥 업데이트만 시켜줘야 한다. 그래서 나온게 apt-cacher이다. apt-cacher는 우분투 업데이트 서버를 미러링하지 않고 서버의 역할만 하며, 클라이언트에서 요청을 받은 패키지들만 받아서 전달해주는 역할을 한다. 미러링하려고 했더니 우분투 서버가 60GB가 넘어서 포기했다.

    다음과 같이 apt-cacher를 설치한다.

    sudo apt-get install apt-cacher

    아파치 웹서버가 설치되어 있지 않다면 그것도 설치한다.

    sudo apt-get install apache2

    그리고

    sudo vi /etc/default/apt-cacher

    이 파일의 설정을 바꿔준다. 여기서 autostart를 0으로 하면 부팅할 때 시작을 안하고, 1로 하면 부팅할 때 자동으로 시작한다. 대부분의 경우 자동으로 시작해야 하는데, 내 경우에는 자동 시작을 끄고 필요할 때만 쓰는 것이라 0으로 해야 했다.

    이제 apt-cacher를 재시작 해주면 된다.

    sudo /etc/init.d/apt-cacher restart

    아니면, 위에서 자동실행을 1로 했다면 껐다 켜도 된다. 이것으로 서버 세팅은 끝.

    서버의 IP를 192.168.1.1이라고 하자. 그럼 apt-cacher의 기본 포트는 3142번이다. 3142가 맘에 들지 않는다면 위에서 apt-cacher 파일의 설정을 바꾸는 부분에서 포트를 바꿔주면 된다.

    이제 클라이언트 세팅을 하자. 우분투 소프트웨어 업데이트 프로그램에 들어가든가 아니면

    sudo vi /etc/apt/sources.list

    위와 같은 명령어로 소스 목록을 직접 고치거나 하면 된다.

    거기에 보면

    deb http://kr.archive.ubuntu.com/ubuntu main lucid

    이렇게 생긴 줄이 있는데 그중에 kr.archive.ubuntu.com 같이 생긴 서버 주소를 전부

    192.168.1.1:3142 로 고쳐주면 된다. 서버 주소는 방금 직접 세팅한 서버의 주소이므로 굳이 192.168.1.1이 아니라 적당한 주소를 넣어주면 된다.

    vi초보를 위한 팁을 알려주자면, “찾아 바꾸기” 기능을 쓰면 편하다.

    콜론(:)모드에서

    1,$s/kr.archive.ubuntu.com/192.168.1.1:3142

    라는 명령을 쓰면 싹 바뀐다.

    이제 apt-get update를 해주면 다 된다. 참고로, 데비안도 된다.

    참조 :

    http://www.debuntu.org/how-to-set-up-a-repository-cache-with-apt-cacher

  • 퍼지 논리

    인공지능 시험공부하다가 퍼지 논리를 좀 제대로 알아야 해서 정리해 둔다.

    그냥 논리 – P이다.

    퍼지 논리 – P인 것 같다.

    현대를 살아가는 청소년들이 “난 빨간색이 좋은 것 같아요”라고 말하는건 퍼지의 세계가 왔기 때문인 것 같다고 생각하고 싶을 것 같다.

    거짓 = 0

    참 = 1

    이렇게 했을 때, 어떤 명제 함수 P(x)가 x에 따라서 참인지 거짓인지 따져보자. x가 키라고 하고, P가 키가 큰가 아닌가를 뜻한다고 하면. P(160cm)는 참인가 거짓인가. P(200cm)는 참인가 거짓인가. 적당히 100cm를 기준으로 하면 P(160)도 P(200)도 참이다. 물론 P(10)은 거짓이다. P(100)은 참이라고 하자. P(99.9)는 거짓이다.

    이렇게 생각해보면 좀 억울하다는 게 퍼지논리다. 0.1차이로 참과 거짓이 갈린다면 너무 건조하고 심심한 세상이 아닌가. 그래서.

    P(x) = ax+b

    a = 1/200

    b = 0

    대충 이래놓으면, P(100) = 0.5이고 P(150) = 0.75다.

    P가 0.75라는 건 0.75정도만 참이라는 뜻이다. 참은 1이지만, 0.75도 그럭저럭 참이다.

    Q(x) = -ax+200

    이렇다고 해 보자. 여기서 Q는 그냥 그런게 있는 그렇고 그런 명제 함수다.

    P와 Q가 둘 다 참이 되는 함수는?

    (P and Q)(x) = ???

    일단은 여기까지. 공부좀 더 하고 쓰거나, 재미없어지면 안쓸듯. -_-;

  • Pidgin으로 트위터 하기

    Pidgin으로 트위터를 해 보자.

    일단 받는다.


    http://www.pidgin.im

    찾아들어가기 귀찮으면, 윈도우용 버전은 아래 링크에서 받을 수 있다.


    http://sourceforge.net/projects/pidgin/files/Pidgin/2.7.5/pidgin-2.7.5.exe/download

    당신이 리눅스 사용자라면, 저장소에 Microblog plugin for pidgin이 있을 것이다. 받아서 설치하자. 그런게 없으면, 어딘가 있을테니 찾아보자.

    윈도우즈 사용자라면, 일단 받는다.



    http://developer.pidgin.im/

    역시, 찾아가기 귀찮으면


    http://code.google.com/p/prpltwtr/downloads/detail?name=prpltwtr-0.5.2.exe

    일단 받는다.

    Pidgin을 먼저 설치하고, Microblog plugin을 나중에 설치한다.

    그 다음.

    TwitterIM을 고른다. 그리고 자연스럽게 Username, Password등을 잘 채워넣으면 된다.

    그렇게 해서 계정을 만들고 OK를 누르면 된다.

    그 다음, 접속을 시도하면 트위터 계정이 연결되면서 “진짜 너 맞냐?”면서 뭘 물어본다. 그냥 인증 코드를 입력하는 건데, 그냥 받은 대로 복사해서 입력해주면 된다. 귀찮으므로 스크린샷은 생략.

    참고로, Pidgin에는 창을 반투명하게 만들 수 있는 기능이 있다.

    몰래 써먹고 싶은 사람은 잘 써먹자. ㅋ

    기본적으로 대화창이 타임라인이 되고, 리플/리트윗/별표/트위터 페이지 열기 등등이 다 된다. 한번 쓱 보면 뭔지 다 알 수 있으므로 자세한 설명은 생략한다.

  • 플래시 속이기

    알만한 사람은 다 아는데 이걸 설마 여기에 써먹을거라고 생각한 사람은 없었을 것이다.

    플래시 플레이 중에, 플래시 영역의 안에서 클릭되는 부분에 클릭을 해서 클릭한 상태로 마우스를 플래시 영역 밖으로 꺼내면 마우스가 다시 그 플래시 영역의 안으로 들어가기 전 까지는 그 위치에 클릭이 된 것으로 인식한다.

    그래서 그걸 “굳이 마우스 커서를 특정 영역에 올려놔야 강의가 진행되는 온라인 강의”를 듣는데 사용하고 있다.

    그래도 들으면서 인터넷은 할 수 있으니까 -_-;

  • Mac os X의 이름들

    최근 맥북 에어가 새로 나오면서 맥OS의 새로운 버전이 출시되었다. 그이름 “사자(Lion)”

    맥OS X에서는 각 버전마다 식육목 고양이과 이름을 붙이고 있는데, 그 순서는 다음과 같다.

    * Public Beta: “Kodiak”

    * Version 10.0: “Cheetah”

    * Version 10.1: “Puma”

    * Version 10.2: “Jaguar”

    * Version 10.3: “Panther”

    * Version 10.4: “Tiger”

    * Version 10.5: “Leopard”

    * Version 10.6: “Snow Leopard”

    * Version 10.7: “Lion”

    출처 : 위키백과

    http://en.wikipedia.org/wiki/Mac_OS_X

    물론 고양이과 동물은 아주 많다.


    http://en.wikipedia.org/wiki/Felidae

    과연 Lion의 다음 버전은 이름이 어떻게 붙을까?


    http://forums.macrumors.com/showthread.php?t=192287


    궁금해 하는 사람도 많다. 그러나 정답은 없다.

    음…내 생각엔 체셔 고양이(Cheshire Cat)이 어떨까 싶다. – 설마 슈뢰딩거의 고양이(Schroedinger’s cat)는 아니겠지.

  • 변수는 왜 사용되기 전에 선언되어야 하나?

    많은 프로그램 언어에서, 변수는 사용되기 전에 선언되어야 한다.

    선언이란, “난 이것을 사용하겠어!”라고 선언하는 과정이다. 왜 선언을 해야 할까?

    변수를 선언하는 이유는 변수를 어떤 방법으로 사용할 것인지 컴퓨터에게 알려주는 과정이기 때문이다. 컴퓨터의 메모리 공간에 기록되어 있는 숫자들은 각각 어떤 의미를 갖고 있는데, 그게 어떤 의미인지 알려주지 않으면 컴퓨터는 그 숫자를 읽어도 처리할 수가 없다. 그 의미를 알려주는 것이 선언이다. 이게 변수인지 프로그램인지, 이게 2바이트 기준인지 4바이트 기준인지, 이게 한번 쓰고 버릴 건지 계속 사용할 건지, 이걸 혼자 쓸건지 같이 쓸건지 등등을 알려줘야 한다.

    만약, 변수가 1가지 종류(type)만 있었다면 선언이 필요 없을지도 모른다. 가령, 2바이트 부호있는 정수형 변수만 사용된다면, 선언을 하지 않아도 괜찮을 수 있다. 물론 그런 경우에도 변수의 다른 특징들을 컴퓨터에게 알려주려면 선언을 해야 할 수도 있다.

    물론 선언하지 않아도 되는 프로그램 언어도 있다. 그런 경우에는, 변수가 처음 사용되는 시점에서 그 변수에 대입되는 값이 뭔지 따져서 변수의 종류와 처리방법을 결정하는 언어도 있다. 편리하기는 하지만 그런 언어는 쓰다보면 헷갈리는 부분도 있어서, 개인적으로는 별로 좋아하지 않는다. (쓰라면 쓰겠지만. -_-;)

    변수를 사용하기 전에 선언하는 이유는 컴파일러의 처리 방식때문이다. 컴파일러는 앞에서부터 읽어가면서 기계어로 번역을 하는데, 변수가 어떻게 사용하는건지 모르고서 쓰라고 하면 짜증내면서 컴파일을 관둔다.



    [각주:

    1

    ]



    물론, 뒤에 선언이 되어 있더라도 컴파일러의 처리 방식에 따라서 프로그램을 두번 읽어서 번역할 수 있는 것들도 있다. 이건 편하긴 한데, 두번 읽어야 하니까 당연히 컴파일 시간이 거의 두배 걸린다.

    1. 이건 사람의 언어를 읽을 때도 대명사가 나왔을 때 앞에 나온 어떤 명사를 지칭하는 것인지 알 수 없으면 글이 도저히 읽혀지지 않는 것과 같다.

      [본문으로]