'2009/01'에 해당되는 글 6건

  1. 2009/01/29 귀천 우분투 바탕화면 아이콘 숨기기 (2)
  2. 2009/01/26 귀천 지킬앤하이드 - 홍광호 - 지금 이 순간
  3. 2009/01/24 귀천 우분투 init.d 등록하기
  4. 2009/01/22 귀천 웹 인코딩 문제와 삽질들
  5. 2009/01/15 귀천 gnome 바탕화면 나사 이미지로 갱신하기
  6. 2009/01/08 귀천 명세

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

그래서 뒤지던중 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



지킬앤하이드 - 지금 이 순간. 홍광호 version

아...... 이럴수가.
2009/01/26 23:46 2009/01/26 23:46
받은 트랙백이 없고, 댓글이 없습니다.

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

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

데비안 계열의 운영체제에 /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

명세

생각 2009/01/08 12:54 귀천
가끔 프로그래밍 관련해서 의뢰를 받으면 일단 그 순간은 우리 모두가 하늘위로 붕 뜬다. -.-
정말 무서운건, 고객이 뭘 원하는지 알 수가 없다. 그런데 물어보면 자신도 모른다. 그러니까..... 우리 모두 모른다.(헉);

게다가 프로그래밍 실력은 둘째치고, 좌우간 컴퓨터랑 연관된 분야가 워낙 많다보니
막상 의뢰를 받으면 그쪽 관련해서 알아봐야 할 사항들도 뭉탱이로 딸려 온다.
각종 이메일 문의 부터 전화까지 여기저기 알아보면서 -_-......

결론적으로 고객은 "뭔가 멋지게 해주세요".
우리는 "이런 기능이 있으면 좋겠군요? 이 기능도 있어야 하겠고요, 그리고 알아 봤는데 이건 이렇다는군요."

뭐 이런식 이랄까.
상황이 이렇다 보니, 초기에 견적을 내서 보내주고 일을 시작하고...... 일이 끝나고 나면 깨닫는다.

"아, 일을 곱빼기로 했구나..........." ㅜ_ㅜ

프로그래머에게는 자료구조, 운영체제, 알고리즘, 컴파일러, 프로그래밍 언어, 네트워크, 어쩌고 어쩌고
뭐 이런 매우 중요한 기초 지식부터
버전 컨트롤, 각종 방법론, 각종 패러다임, 각종 프로토콜, 웹, 그외에 수많은 추상적인 개념과 스킬들 어쩌고 저쩌고 이 필요함은 물론인데......

어찌보면, 궁극에 필요한 것은 "대화법" "문제 정의" "추상에서 구체화" 등등
정확한 명세를 만드는게 아닐까......

우리는 컴퓨터를 가지고 무언가 하지만, 컴퓨터를 상대로 일을 하지는 않는다.
결국 사람에게 필요한 무언가를.... 그러니까 사람을 상대로 한다는 것.
어떠한 문제가 다가오면 계속해서 토론하고 문제에 대해 정확하게 정의를 하다보면 대개 구체적인 명세와
그 명세에 따른 구체적인 해법(코드조각, 프로토타입) 까지도 나오게 된다.
그런데 그 과정이 빈약했거나 생략을 했을경우, 방황하게 될지도 모른다..

그런데 대학에서는, 보통 추상적 이론과 약간의 스킬들만을 가르치는 것이 보통이다.
상황이 이렇다 보니, 대학교의 교육과정에만 충실하고 안심하고 있다가는 현업의 무대에서
culture shock 를 받을수도 있겠다.

겨울에 뜨뜻한 방안에서 뭔가 흥미롭고 재미난 프로그램을 만들기만 한다면 얼마나 좋겠냐마는...
현실또한 그렇지만은 않다는 것들을 조금씩 배워가고 있다.

2009/01/08 12:54 2009/01/08 12:54
TAG
받은 트랙백이 없고, 댓글이 없습니다.

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

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