Bash Color Prompt

First

if [ “$WINDOW” != “” ]; then
    export PS1=’\nS:$WINDOW \e[1;32m\u\e[0m@\e[1;31m\h\e[0m:\e[1;33m\w\e[0m\n\$ ‘
else
    export PS1=’\n\e[1;32m\u\e[0m@\e[1;31m\h\e[0m:\e[1;33m\w\e[0m\n\$ ‘
fi
Second

DEFAULT=”[37;40m”

PINK=”[35;40m”

GREEN=”[32;40m”

ORANGE=”[33;40m”

hg_dirty() {

    hg status –no-color 2> /dev/null \

    | awk ‘$1 == “?” { unknown = 1 }

           $1 != “?” { changed = 1 }

           END {

             if (changed) printf “!”

             else if (unknown) printf “?”

           }’

}

hg_branch() {

    hg branch 2> /dev/null | \

        awk ‘{ printf “\033[37;0m on \033[35;40m” $1 }’

    hg bookmarks 2> /dev/null | \

        awk ‘/\*/ { printf “\033[37;0m at \033[33;40m” $2 }’

}

export PS1=’\n\e${PINK}\u \e${DEFAULT}at \e${ORANGE}\h \e${DEFAULT}in \e${GREEN}\w $(hg_branch)\e${GREEN}$(hg_dirty) \e${DEFAULT}\n$ ‘

LG넷하드(N1T1) SSH 활성화

LG넷하드(N1T1)의 SSH를 활성화하는 방법은 생각보다 간단합니다.

그러나 상당히 위험한 작업임에는 분명합니다. SSH 접근이 절실하신 분만 도전!

다음 웹문서를 참조하였습니다.

http://forum.nas-portal.org/archive/index.php/t-14744.html

New UI로 이미 업그레이드가 되어있는 N1T1에만 적용할 수 있습니다.

원리는 간단합니다. 펌웨어 업데이트 후 실행되는 script 파일에 다음 내용을 추가하는 방식입니다.

1. ssh 서버 패키지를 설치 (dropbear)

2. 부팅시 ssh 서버가 실행되도록  설정

3. root 권한을 가지는 계정을 하나 생성하고 비밀번호 설정 (lgroot:admin)

1. 다음 주소에서 9595 펌웨어 파일을 다운 받습니다.

http://www.lgservice.co.kr/cs_lg/download/SoftwareDownloadDetailCmd.laf?parentCode=1014,1017,1001

2. firmware-nt1_9595rfke.bin 파일을 7zip(http://www.7-zip.org)으로 열고, postinst.sh 파일을 에디터로 엽니다.

3. 파일 끝에 다음 내용을 붙이고 저장합니다. 저장하고 나오면 7zip이 압축파일을 업데이트합니다.

#install dropbear

apt-get update

apt-get -y install dropbear 

#change dropbear config

sed ‘s/^NO_START=1/NO_START=0/’ /etc/default/dropbear > /tmp/db.$$ 

mv /tmp/db.$$ /etc/default/dropbear

#modify startup

update-rc.d -f dropbear remove

update-rc.d dropbear start 20 S . stop 20 0 6

#add alternative root user

useradd -o -u 0 -g 0 -m lgroot

echo lgroot:admin | chpasswd

4. NAS 웹페이지에 관리자모드로 로그인 후, 수정한 펌웨어 파일로 펌웨어 업데이트를 수행합니다.

5. SSH로 접속해 봅니다. (아이디: lgroot, 비밀번호: admin)

<

p style=”text-align: left;”>

퀄컴(Qualcomm) 올조인(AllJoyn) 기술 소개

퀄컴(Qualcomm)의 올조인(AllJoyn) 기술에 대하여 설명드리고자 합니다. 피상적인 설명 보다는 개발자의 시각으로 이해한 바를 차분히 풀어 보겠습니다.

AllJoyn 사이트는 다음과 같습니다.

https://www.alljoyn.org/

사이트에 이런 문구가 있는데,

AllJoyn™ is a peer-to-peer technology that enables ad hoc, proximity-based, device-to-device communication without the use of an intermediary server.

AllJoyn 기술에 대하여 간결하게 설명하고 있는 듯 하네요. 중계서버 없이 device와 device가 direct로 통신할 수 있도록 도와주는 프레임워크 또는 라이브러리로 이해하시면 됩니다.

일단 데모를 한번 보겠습니다.

안드로이드 Device끼리 연결되어서 각 Device에 저장된 사진을 공유하는 시나리오와 PC용 게임을 안드로이드 Device로 제어하는 시나리오를 보여주고 있습니다.

이 시나리오를 직접 구현해야 한다면, AllJoyn과 같은 기기간 연동를 도와주는 기술을 한번 쯤은 관심있게 검토하게 되겠죠?

Q&A 형식을 빌려 AllJoyn 기술을 조금 더 깊이 들여다 보도록 하겠습니다.

AllJoyn을 활용할 수 있는 플랫폼은?

윈도우, 리눅스, 안드로이드에서 AllJoyn 기반의 애플리케이션을 개발 할 수 있습니다.

사용할 수 있는 프로그래밍 언어는?

현재는 Java와 C++ API를 제공하고 있습니다. 차후에는 Browser Plugin을 설치하는 방식으로 JavaScript API도 제공할 것으로 알고 있습니다.

각 Device들은 어떻게 연결되어 있을까요?

답은 Wi-Fi 입니다. 같은 AP에 Wi-Fi로 물려 있는 Device간에 통신이 가능하도록 도와주는 것이 AllJoyn 기술입니다. 사이트에서는 블루투스와 Wi-Fi Direct도 지원한다고 설명하고 있지만, Wi-Fi Direct는 아직 구현 중이고, 블루투스도 안드로이드 커널, 프레임워크 수정을 피할 수 없기 때문에 현재로서는 활용하지 못한다고 보는 것이 맞을 것 같습니다.

AllJoyn이 장점으로 내세우는 것 중에 하나가 애플리케이션 개발자가 네트워크 레이어에서 어떤 기술을 통신 사용하는지 신경쓰지 않아도 된다는 것입니다. 개념적으로는 AllJoyn 프레임워크가 알아서 Wi-Fi든 Bluetooth든 상황에 맞게 선택한다고 이해하시면 됩니다. 그러나 앞서 말씀드린 것 처럼 현실적으로는 동일 Network내에 있는 Device끼리 Wi-Fi로 통신하는 방법밖에 없습니다.

연결된 Device들은 어떤 방식으로 데이터를 전달할까요?

답은 Remote Method Invocation(RMI) 입니다. Annotation을 추가한 인터페이스 파일을 서로 공유하고, proxy를 통해 해당 인터페이스의 메서드를 호출하는 방식으로 데이터를 전달합니다. 소켓 프로그래밍처럼 주고 받을 데이터의 순서와 타입에 대한 약속을 하고 힘들게 예외처리 할 필요 없이 우아하게 메서드를 정의하고 호출하면 그만입니다.

각 Device는 서로를 어떻게 찾을 수 있을까요?

지금까지 AllJoyn 프레임워크라고 뭉뚱그려 설명했는데, 이제는 AllJoyn Daemon의 개념을 제대로 설명해 드려야 할 것 같습니다.

<

p style=”text-align: left; clear: none; float: none; “>

AllJoyn 기반의 애플리케이션이 정상적으로 다른 Device와 통신하기 위해서는 각 Device에 한개 이상의 AllJoyn Daemon이 동작하고 있어야 합니다. 애플리케이션 개발자는 AllJoyn 라이브러리를 링크하고 여기에 정의된 API를 호출하는 방식으로 Daemon에 Service를 등록하거나 Client로서 Service를 찾고 연결하여 메서드를 호출할 수 있습니다.

Daemon이 설치된 Device가 같은 네트워크안에 연결되면, Daemon끼리 서로의 존재를 인지하고 정보를 교환합니다.

  • 자신에게 어떤 Service가 연결되어 있는지
  • 자신에게 어떤 이름의 Service를 찾는 Client가 연결되어 있는지

개념적으로는 같은 네트워크 안에 연결된 Device가 하나로 연결되어 가상의 AllJoyn Bus가 만들어 진다고 이해할 수 있습니다. 자연스럽게 Device의 경계는 무너지는거죠. 가상의 AllJoyn Bus에 누가 어떤 이름의 Service를 하고 있고 누가 어떤 이름의 Service를 찾고 있는지만 중요하게 됩니다.

Service는 누군가 자신을 유일하게 구별할 수 있도록 이름(well-known name)을 광고(advertise)해야 합니다. 이 이름은 Java 세상에서 패키지 이름처럼 도메인을 거꾸로 쓰는 표기법을 사용합니다.

예를 들어 다음과 같은 채팅 애플리케이션이 만들어낸 Service의 이름에서,

org.alljoyn.sample.chat.bob

org.alljoyn.sample.chat.carol

특정 Service를 나타내는 prefix는 org.alljoyn.sample.chat이고 이를 Bus에서 유일하게(Unique) 만들어주는 suffix는 bob과 carol이 됩니다. Client는 prefix로 Service를 탐색합니다. 이 예제에서 Client는 org.alljoyn.sample.chat로 Service를 탐색하게 되고 탐색(discovery) API는 org.alljoyn.sample.chat.bob와 org.alljoyn.sample.chat.carol를 모두 반환합니다. bob이 만든 채팅방과 carol이 만든 채팅방을 모두 찾은 셈이죠. 사용자의 선택에 따라 선택된 특정 Service(채팅방)와 연결하고 Service가 제공하는 메서드를 호출하면 통신은 간단히 이루어 집니다.

제대로 공부해 보고 싶으신 분은 다음 문서를 차분히 읽어 보시면 되겠습니다.

https://www.alljoyn.org/content/introduction-alljoyn

우분투에서 EBS 라디오 예약 녹음하기

우분투 리눅스를 활용하여 EBS 라디오를 예약 녹음하는 방법을 소개합니다.
우선 다음과 같이 필요한 패키지를 설치합니다.
$ sudo apt-get install mimms
$ sudo apt-get install mplayer
$ sudo apt-get install lame 
EBS 라디오를 녹음하기 위한 스크립트를 생성합니다. 
다음 내용을 recEbsRadio.sh로 저장해 주세요.
#!/bin/bash
RADIO_ADDR=”mms://211.218.209.124/L-FM_300k”
RADIO_NAME=”ebs_radio”

PROGRAM_NAME=$1
RECORD_MINS=$2
DEST_DIR=$3

REC_DATE=`date +%m%d`
TEMP_ASX=`mktemp -u`
TEMP_WAV=`mktemp -u`
MP3_FILE_NAME=$PROGRAM_NAME”_”$REC_DATE.mp3

ID3_TITLE=$REC_DATE”_”$PROGRAM_NAME
ID3_ARTIST=$RADIO_NAME
ID3_ALBUM=$PROGRAM_NAME
ID3_YEAR=`date +%Y`

mimms -t $RECORD_MINS $RADIO_ADDR $TEMP_ASX
mplayer -ao pcm:file=$TEMP_WAV $TEMP_ASX
lame –preset voice –tt $ID3_TITLE –ta $ID3_ARTIST –tl $ID3_ALBUM –ty $ID3_YEAR $TEMP_WAV $MP3_FILE_NAME

rm $TEMP_WAV
rm $TEMP_ASX

mkdir -p $DEST_DIR
mv $MP3_FILE_NAME $DEST_DIR
다음과 같이 recEbsRadio.sh 파일에 실행 권한을 부여합니다. 
$ chmod a+x recEbsRadio.sh
첫번째 인자는 프로그램 이름 
두번째 인자는 녹음 시간(분)
세번째 인자는 mp3 파일 저장 디렉토리
사용 예제는 다음과 같습니다. 
$ ~/recEbsRadio.sh EarEng 30 ~/ebs 
지금부터 30분 동안 EBS 라디오를 녹음하여 ~/ebs/EarEng_0201.mp3로 저장하겠다는 의미입니다.
cron을 활용하여 월요일~토요일 오전 6시부터 30분 동안 귀트영을 녹음하는 설정을 해보겠습니다. 
cron에 스크립트 실행을 등록하기 위해 다음 명령어를 실행해 주세요.

$ crontab -e

에디터가 실행되면 다음 한 줄을 추가 후, 저장하고 나오시면 됩니다. 
00 06 * * 1-6 ~/recEbsRadio.sh EarEng 30 ~/ebs &> /dev/null
이는 월요일~토요일(1-6) 매일 오전 6시(06) 00분(00)에 recEbsRadio.sh를 실행하겠다는 의미입니다. 
귀트영, 운트영, 입트영을 모두 녹음하시려면 다음 3줄을 추가해 주세요. 
00 06 * * 1-6 ~/recEbsRadio.sh EarEng 30 ~/ebs &> /dev/null 2>&1
30 06 * * 1-6 ~/recEbsRadio.sh LuckEng 20 ~/ebs &> /dev/null 2>&1
00 07 * * 1-6 ~/recEbsRadio.sh MouthEng 20 ~/ebs &> /dev/null 2>&1
다음 명령을 통해 cron에 제대로 등록되었는지 확인할 수 있습니다. 
$ crontab -l

이 글은 다음 URL을 참조 및 보완하여 작성되었습니다.