'COMPUTING'에 해당되는 글 17건

  1. 2009/06/15 귀천 Simple
  2. 2009/04/27 귀천 아파치-Basic authentication
  3. 2009/03/27 귀천 우분투-Mplayer 셋팅
  4. 2009/03/27 귀천 우분투-트루타입글꼴설치
  5. 2009/02/09 귀천 유니코드 urldecode php
  6. 2009/01/29 귀천 우분투 바탕화면 아이콘 숨기기 (2)
  7. 2009/01/24 귀천 우분투 init.d 등록하기
  8. 2009/01/22 귀천 웹 인코딩 문제와 삽질들
  9. 2009/01/15 귀천 gnome 바탕화면 나사 이미지로 갱신하기
  10. 2008/12/14 귀천 네이트온 봇 활용

Simple

COMPUTING/Programming 2009/06/15 05:16 귀천

Number n ::= d | nd       (d in Digit)

Symbol s ::= c | sc | sd   (c in Char)

Atom   a ::= n | s

Expr   e ::= a | (e … e)

2009/06/15 05:16 2009/06/15 05:16
TAG
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/45

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/45

  종종, 개인 웹페이지의 일부를 외부에서 못 보게 하고싶을 때가 있습니다.
내 홈페이지 중에서도 어떤 페이지는 나만 보고 싶다거나,
홈페이지에 자료를 넣어두고 나중에 꺼내 쓰려는데, 역시 남이 접근 안되도록 하고 싶을때가 있지요.

apache 에서는 아주 간단한 인증을 제공 합니다.


Apache 의 Basic authentication 이 그것인데, 아주 손쉽게 인증을 걸수 있지요.
보통 아파치에서 제공하는 사용자의 웹 경로는 ~/public_html 입니다.
예를들면 ~/public_html/mypage 라는 폴더에 인증을 걸고 싶다고 하죠.
우선 웹 경로 말고 다른 위치에 인증파일을 하나 만들어야 합니다.

ex) ~/auth 라는 폴더를 하나 생성하고, 저 폴더안에 인증 파일을 만듭니다.

폴더 안에서

htpasswd -c passwdfile username

와 같은 형식으로 파일을 생성합니다.
예를들면 maya 라는 사용자로 인증을 할 것이고, 인증 파일은 maya 라는 이름으로 만든다면

htpasswd -c maya maya

이렇게 하면 패스워드를 물어 봅니다. 그럼 패스워드를 입력해 주면 maya 라는 인증 파일이 생기죠.
이제 인증 파일이 생겼으니, 인증을 걸면 됩니다.
~/public_html/mypage 에 인증을 걸려고 했으니 저 폴더 안에다가

.htaccess
라는 파일을 하나 생성합니다.

그 파일의 내용은 아래와 같이 작성해 줍니다.

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /home/maya/auth/maya
Require user maya


아까 만들어둔 인증파일 maya 의 절대 경로를 써 줍니다.
마지막 줄은 maya 라는 사용자로 인증을 하겠다는 소리고요..

이렇게 되면, 저 폴더안에 있는 어떤 데이터라도 요청을 하면 처음에 인증을 해야 합니다.
물론 세션이 살아 있다면, 그 인증도 역시 살아 있겠지요.

끝~
2009/04/27 15:26 2009/04/27 15:26
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/43

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/43

우분투-Mplayer 셋팅

COMPUTING/Linux 2009/03/27 14:38 귀천

리눅스에서 동영상 플레이어가 무쟈게 많습니다.
우선 기본으로 Totem 이 깔려있지요.

동영상을 재생하고 코덱이 없으면 우분투의 경우 알아서 찾아서 깔아줍니다.
Totem 의 경우 자막도 무난하게 잘 나오고요.

하지만 영상을 보면 작은 블록들로 보여서 조금 눈에 거슬립니다.
Anti aliasing 을 먹여주면 부드럽게 나올텐데 말이죠.

다른 플레이어의 대안은 xine 이나 mplayer 가 있는데요
mplayer 가 자막셋팅 같은 것 하기에 무난한 것 같습니다.

1. 일단 mplayer 을 인스톨 합니다.
apt-get install mplayer

2. 인스톨 하고 나면 홈폴더에 .mplayer 라는 폴더가 생깁니다.
~/.mplayer/config 이 파일에 우리가 필요한 설정을 몇가지 넣어 줍니다.

zoom=yes
vf=expand=0:-100:50:50

이 두줄을 입력해 주고 저장합니다.

첫번째 것은, 동영상 재생시에 f 를 눌러서 full screen 으로 볼때에 영상 크기는
늘어나지 않습니다. 그래서 저 옵션으로 해결 할 수 있고,

두번째 것은, 자막이 나올때 영상 위에 뿌려져 버립니다. 플레이어의 옵션에서는
영상범위 내에서만 자막 위치가 조정이 가능합니다. 그러나 저렇게 써 주면
영상의 아래에 있는 검은 영역에다가 자막을 뿌려 줍니다.

3. gmplayer(mplayer 의 GUI 버젼) 를 구동합니다.
오른쪽 버튼을 눌러보면 옵션이 많이 나옵니다. 거기에서 Preferences 에 들어 갑니다.
여러가지 탭과 옵션들이 있는데 그중에

ㄴ 1.Subtitles & OSD 탭으로 들어 갑니다.
      (1). Subtitle 의 Encoding 을 Korean charset (CP949) 로 변경 합니다.
      (2). Unicode subtitle 체크 박스에도 체크해 줍니다.
ㄴ 2. Font 탭으로 들어 갑니다.
     (1). Font 를 Browse 를 하거나, 경로를 입력해서 트루타입 폰트를 골라 줍니다.
           여기서 폰트는 한글 폰트여야 하고 보통 /usr/share/fonts/truetype 아래에 보면
           트루타입 폰트를 고를 수 있습니다. 적절한 폰트가 없다면 네이버 나눔글꼴 등을 설치 합니다.
           설치 방법은 우분투-트루타입글꼴설치 를 참고 하세요.
     (2). 여기 인코딩은 Unicode 입니다. (기본값 이지만 확인 해 주세요)

   3. Video 탭으로 들어 갑니다.
      ㄴ 여기에 보면 여러가지 비디오 드라이버가 있는걸 볼 수 있습니다. X11, gl 등등 선택해 보고 플레이 해 보면서
           적절히 잘 나오는 것을 선택합니다.

여기까지 하면 한글 자막이 잘 나옵니다.
아까 Font 셋팅에서 Text Scale 이라는 옵션이 있습니다.
영상을 전체화면 으로 보면서 자막 크기를 적절한 크기로 조절해주면 됩니다.

끝~


2009/03/27 14:38 2009/03/27 14:38
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/40

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/40

트루타입 글꼴(ttf) 을 가지고 있을경우에 이를 설치하는 방법은 매우 간단합니다.
적절한 글꼴을 찾으신다면 무료 글꼴 네이버 나눔글꼴 을 추천합니다.

일단 다운로드 하셨다면 글꼴을 넣을 적절한 폴더를 생성합니다.
우분투에는

/usr/share/fonts/truetype

이라는 폴더가 있습니다.
만약에 설치하고자 하는 폰트가 네이버라면

/usr/share/fonts/truetype/naver


라는 식으로 폴더를 생성하고
저 폴더안에 다운로드한 폰트들(나눔 고딕.ttf, 등등)을 넣습니다.
물론 super user 권한으로 해야겠지요.

다 되고 나면 다음 명령어를 실행해 줍니다.

sudo fc-cache


그놈의 글꼴 설정에 가보면 새로 복사한 글꼴들을 볼 수 있습니다.

끝.

2009/03/27 14:25 2009/03/27 14:25
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/41

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/41

뭐 다들 아시겠지만. IE 의 경우 한글 같은 데이터를(no ascii)
서버측으로 날릴때(form에서 get 이나 post)
겁나 깨져서 날라 갑니다.
불여우에서는 잘 인코딩 되서 가지요.. 그래서 보통 submit 하기 전에
onsubmit 등의 이벤트를 걸어서 자바스크립에서 encodeURI 등으로

인코딩을 해주고 날립니다. 그리고 서버측에서 decode 해서 쓰지요.

Java 에서 decodeURI 의 역할을
하는 메소드가 있어서 잘 하면 되고,
 PHP 에서는 urldecode 라는 함수가 있습니다. 그런데, PHP 에서 받아가지고
저 urldecode 로 했드만 잘 안되더군요. 알고보니 utf-8 이라서 !!

즉, 유니코드를 encodeURI 해서 받은것을, php 의 urldecode 녀석은
제대로 decode 하지 못 합니다.


그래서 찾아봤더니, 유니코드용으로 누가 작성을 해 놨네요.. 링크 참고 하시길

unicode_urldecode

2009/02/09 15:33 2009/02/09 15:33
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/30

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/30

우분투를 쓰고 있는데 종종 바탕 화면에 아이콘들이 너무 많아서
지저분 해 보일때가 있습니다.

그래서 뒤지던중 nautilus 의 gconf 값중에 show_desktop 이란 녀석을 봤네요.
이 값을 체크해주면 바탕화면에 아이콘들이 보이고 다시 체크를 없애주면
바탕화면의 모든 아이콘들이 사라 집니다. 그래서 이걸 간단하게 스크립으로
짜뒀습니다. 키 바인딩 해두고 토글 처럼 쓰면 편하네요.

단 문제점은 사라지는 것은 바로 사라지는데 다시 나타나게 토글을 하면
바로 나오지가 않고, nautilus 를 한번 실행해 줘야 다시 바탕화면에 나타납니다.

바탕화면 icon redraw 매카니즘이 어떻게 되는지 모르겠어서 일단은 그냥
쓰고 있습니다. :)


#!/bin/sh
SHOW_DESKTOP='/apps/nautilus/preferences/show_desktop'
GCONF_GET='gconftool --get'
GCONF_SET='gconftool --set'
ARGS='--type boolean'

if [ `$GCONF_GET $SHOW_DESKTOP` = "true" ] ; then
    $GCONF_SET $SHOW_DESKTOP $ARGS false
else
    $GCONF_SET $SHOW_DESKTOP $ARGS true
fi



2009/01/29 01:37 2009/01/29 01:37
받은 트랙백이 없고, 댓글 2개가 달렸습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/29

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/29

데비안 계열의 운영체제에 /etc/init.d 에 보면 각종 스크립들이 있습니다.
이 스크립들은 /etc/rc(런레벨번호).d 등에 링크되어서 시스템이 어떠한 run level 아래
구동될때 실행되게 됩니다.  웹 서버라면 mysql, apache 등이 들어 있겠지요. 보통 이 스크립들은 우분투 패키지 설치시에 자동으로 생성됩니다.

그런데 기존에 이 스크립이 없고, 관리자가 어떤 서비스를 시스템 구동시에
자동으로 시작하고 싶다면,
이 스크립을 추가해 줘야 합니다. 스크립의 실행은
스크립이름 start

스크립이름 stop

스크립이름 restart

스크립이름 force-reload

.

.

이런 식으로 시작이 되도록 해야 하고,

스크립이 작성되면
update-rc.d 스크립이름 defaults
라는 명령으로 등록을 해줘야 합니다.

그렇게 되면, 차후에 시스템이 재 구동 되어도 스크립이 자동 실행 되기 때문에

원하는 서비스를 자동으로 구동 할 수 있습니다.
이 스크립의 기본 템플릿은 다음과 같습니다.


#!/bin/bash

case "$1" in
  start)
           # Describe start commands here
        ;;
  stop)
           # Describe stop commands here
        ;;
  restart)
           # Describe restart commands here
        ;;
  *)      # No parameter specified
        echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
        exit 1
        ;;
esac

exit 0







이런 양식으로 /etc/init.d 에 작성해 주고, update-rc.d 로 등록을 해주면 됩니다.
이 스크립들이 무슨 특별한 동작을 한다기 보다는, 데비안 계열 시스템 내에서
약속된 어떤 양식에 따라서 스크립을 작성해 주고 이 스크립 안에서 원하는 프로그램을

구동시켜주거나 중지 시키거나 하는등의 명령만 짜두면
시스템이 구동 될때 자동 실행 됩니다.

아니면 관리자가 그냥 실행 할 수도 있죠.
기존에 있는 /etc/init.d 의 스크립들을 참고하는 것도 좋은 방법 입니다.

run level 에 따라 등록하거나 자세한 옵션은 man update-rc.d 를 참고하세요.

2009/01/24 19:24 2009/01/24 19:24
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/27

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/27

보통 웹 어플리케이션을 개발할때 누구나 겪는 encoding 문제 및 삽질.
그중에 제가 겪은 몇가지를 추려 봤습니다.

1. 클라이언트에서 서버측으로 쿼리를 날릴때
아스키 코드는 문제가 없이 잘 갑니다.
하지만, 아스키 코드가 아닌 한글이나 다른 나라의 언어들은 웹 브라우져가
퍼센트 인코딩(% 와 아스키 등으로 이루어진) 을 해서 서버측으로 전송을 합니다.

그런데 IE 6.0~ IE7.0 beta 2 까지는 저 퍼센트 인코딩이 제대로 안되는 버그가 있습니다.
물론 Firefox 등에서는 문제가 없이 전송이 되지요.

따라서 해결책은 데이터를 전송하기 전에 encodeURIComponent 라는 javascript 함수로
 자체적으로 미리 퍼센트 인코딩을 해서 서버측에 넘겨주어야 합니다.
서버 측에서는 decodeURIComponent 등의 디코드 함수를 통해 디코딩을 해서 이용하면 됩니다.

 2. ajax 로 개발을 하던중에, get 방식으로 계속 데이터를 전송해서 DB에 까지 갱신을 했는데
이상하게 웹 브라우저에서는 갱신이 안됩니다.  알고보니 GET 방식의 데이터 전송의 경우
가능한 어떤방식으로든(웹 브라우저 혹은 웹서버 측에서도..) 캐쉬된 데이터를 가져오게 되어 있습니다.
그래서 방법은, POST 방식을 쓰면 되는데 어쩔수 없이 GET 방식을 써야 한다면 쿼리를 날릴때
쿼리에 변형을 주면 됩니다. 어떤 데이터를 요청 하는데 계속 같은 URL 로 요청을 한다면
서버측에서 갱신된 데이터를 주지 않고 cache 된 데이터를 줄 것 입니다.

따라서 URL 을 변형해 줍니다. 그래서 의미없는 값을 뒤에다가 같이 보내주곤 합니다.
그래서 보통 javascript 의 Date().getTime() 함수로 시간을 얻어서 이 값을 url 과 함께 보내주면
갱신된 결과를 가지고 올 수 있습니다.

3. 종종 디자이너가 작업한 Flash 결과물과, javascript 을 연동해야 할 일이 생깁니다.
플래시 이벤트 발생시 페이지를 변경 한다던가 하는 등의 일이 필요하죠. 그런데 이전까지 사용해 오던
getURL("javascript:function()"); 방식으로는 더이상 javascript call 을 할 수 없게 됐습니다.
이 문제로 기존에 있던 수많은 flash 들이 문제를 일으켜서 Adobe 가 욕을 좀 먹었죠..

이는 Flash 의 보안 관련 변경사항 때문입니다.
그래서 이제는 저런 방식으로는 javascript call 이 안되고 external 모듈을 이용해야 합니다.
사용법은 다음과 같습니다.

import flash.external.*; // 모듈을 import 하고
ExternalInterface.call("javascript_function_name" , parameters ... ); // 여기서 call

인자는 자바스크립 함수가 필요한 만큼 가변적으로 그냥 넘기면 됩니다.
그리고 이 flash 파일을 html 페이지에 embed 할때는 다음과 같은 markup 이 있어야 합니다.

<param value="always" name="allowScriptAccess"/>
<embed src = ~~~ 여기에 속성 allowscriptaccess="always" >

이렇게 추가 해주거나 기존의 것을 수정해주면 됩니다.



2009/01/22 14:45 2009/01/22 14:45
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/25

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/25

나사에서 주기적으로, Image of the day 를 올리는걸 보고
종종 이미지가 맘에 들길래 스크립을 짜 봤습니다. cron 으로 돌려주면, 새로운 이미지가 있는지 확인하고 있으면 다운로드 해서 배경화면을 변경 합니다.
gnome 에서 동작하고, gconftool 을 이용해서 배경화면을 변경 합니다.

#!/bin/bash

#### Check the "Image of the Day Gallery" of NASA
#### If there's a new gallery in it download it and change the background
### working on tmp directory ###
cd /tmp

### Global variables
LOCAL_FILE_PATH="/home/maya/Desktop/DATA/media/Pictures/" # Image download path

BASE_URL="http://www.nasa.gov/"
RETURN_VAL=       # For big return values

### uncomment one image size
## image size suffix
# SIZE=600 # 800x600
# SIZE=768 # 1024x768
#SIZE=1200 # 1600x1200
SIZE=full # full high resolution

function get_latest_image_number () {
    local temp_file=`tempfile`
    local temp_file2=`tempfile`
    local gallery_url="http://www.nasa.gov/multimedia/imagegallery/" # nasa image gallery page
    wget -o $temp_file $gallery_url -O $temp_file2 # try downlaod and logging

    ## Find latest image number
    img_number=`grep -o "multimedia/imagegallery/image.*.html" $temp_file2 | \
    awk -F"[_ .]" 'BEGIN {max=0} {if($3>max) max=$3} END{print max}'`

    ## remove temporary file
    rm $temp_file
    rm $temp_file2
    RETURN_VAL=$img_number
}

## check if user gconf has "nasa_image_key"
function has_nasa_image_key () {
    local has_key=`gconftool -a /desktop/gnome/background | grep nasa_image_key`
    if [[ $has_key != "" ]];
    then
	RETURN_VAL=1
    else
	RETURN_VAL=0
    fi
}

## set nasa_image_key to image number
## args : $1 => image number
function set_nasa_image_key () {
    if [[ $1 = "" ]];
    then
	echo "Invalied argument"
    else
	gconftool --set --type integer /desktop/gnome/background/nasa_image_key $1
    fi
}

function get_nasa_image_key () {
    RETURN_VAL=`gconftool --get /desktop/gnome/background/nasa_image_key`
}

function set_background () {
    if [[ $1 == "" ]];
    then
	echo "Invalied argument"
    else
	local html_file_url="${BASE_URL}multimedia/imagegallery/image_feature_"${1}".html"
	local temp_file=`tempfile`
	local temp_file2=`tempfile`
	local url_prefix="images/content/"

	wget -o $temp_file $html_file_url -O $temp_file2 # try downlaod and logging

	local file_name=`grep -o "[^\/]*${SIZE}.jpg" $temp_file2` # full image download url
	local img_url=${BASE_URL}${url_prefix}${file_name}

	echo $img_url
	echo $file_name
	wget -o $temp_file ${img_url}

	mv $file_name $LOCAL_FILE_PATH
	gconftool --set --type string /desktop/gnome/background/picture_filename ${LOCAL_FILE_PATH}${file_name}

        ## remove temporary files
	rm $temp_file
	rm $temp_file2
    fi
}

function update () {
    has_nasa_image_key
    local has_key=$RETURN_VAL

    if [[ $has_key = 1 ]];
    then
	get_nasa_image_key
	local my_key=$RETURN_VAL

	get_latest_image_number
	local latest_key=$RETURN_VAL

	if [[ $my_key < $latest_key ]];
	then
	    set_background $latest_key
	    set_nasa_image_key $latest_key
	else
	    exit 0
	fi
    else
	get_latest_image_number
	local latest_key=$RETURN_VAL
	set_nasa_image_key $latest_key
	set_background $latest_key
    fi
}

update ## try update



2009/01/15 23:04 2009/01/15 23:04
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/26

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/26

 파이썬 네이트온 봇 디버깅에 기능 추가까지 완료.
이전에 딜레이 걸리던것 처리 됐고, 몇가지 자잘한 버그를 더 잡았다.
뭐, 또 다른 버그가 있을 수 있겠지만 일단 잘 돌아가는 것 같다.

지금 쓰는 기능들은 게시판 모니터링, 서버 모니터링(시스템 사용율, cpu 온도 등등, 서버 접속자 보기)
구글api를 이용한 날씨 보기. 수업 시간표 출력  등등... 아주 간단한 것들이다.

그리고 모듈 한가지, irc 채팅이다. 지하철에서 이동하다가 심심하면 irc 채팅을 할 수 있다 .
지하철 이동할때 참... 심심한데, irc 채팅방에 접속해서 눈팅만 하더라도 꽤나 재미있다.

몽땅 text 라서 조금 제한적이고 재미가 덜하다.
하지만, 이 네이트온 메신져는 서버측 사용자가 작성한 프로그램의 text user interface 로 사용할 수 있기때문에
텍스트 기반으로 어떠한 정보를 받아보고 싶다면, 유용할 수도 있겠다.

이번에 네이트온 봇을 작성하면서 파이썬의 파워를 다시금 느낄 수 있었다.
그리고 socket 을 가지고 놀고 프로토콜도 분석 했으니, 네트워크 공부가 조금 된 것 같다.

네이트온 프로토콜은 공개되지 않고 인증이 필요해서 이것 저것 복잡했는데
IRC 프로토콜은 너무나도 간단했다. 그냥 접속해서 명령 몇개 던지니까 바로 접속이 되더라.
그래서 만약에 누군가 봇을 만들어 보고 싶다면, irc 봇을 만들어 보는 것도 좋을 것 같다.


아래는 이전 네이트온 봇 링크, 다운로드 링크 수정했음
네이트온봇

2008/12/14 10:37 2008/12/14 10:37
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/22

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/22