Installing pptpd on Ubuntu

Recently I had to set up VPN server on my Ubuntu server 10.04.

Yes, Ubuntu 10.04 is old but the following guide  will also work for latest  Ubuntu systems as well.

pptpd is the VPN server that provides microsoft VPN protocol, which will mostly work fine with any vpn connection from Windows, OSX, or iOS systems.

Anyway, here are the steps for installing and configuring pptpd:

1. Install pptpd

sudo apt-get install pptpd

2. Configure your IP

sudo vi /etc/pptpd

(Use nano if you are not familiar with vi/vim)

At the last two bottom lines, pptpd would already have configured localip and remoteip according to your system. If not, you should modify it.

For example, if your server’s IP is 192.168.0.20, then you may configure as follows:

localip 192.168.0.20
remoteip 192.168.0.230-239

It will make pptpd to use server ip address as 192.168.0.20 while vpn clients that access to this server will use remove ip range from 192.168.0.230 – 192.168.0.239. It also means, you will allow only 10 multiple vpn client connections at a time. You can increase it if you want, but make sure remoteip range doesn’t overlap with localip.

3. Configure ppp options

In your /etc/pptpd/conf file, there may be options file location. It probably will be /etc/ppp/pptpd-options. Let’s open it and make sure we have right encryption level.

sudo vi /etc/ppp/pptpd-options

Do not allow pap, chap, and mschap.

refuse-pap
refuse-chap
refuse-mschap

Allow ms-chapv2 (which is more secure) and mppe-128.

require-mschap-v2
require-mpp3-128

I think those are already default option. If so, you don’t need to make any change.

Also, you need to configure DNS.  Check /etc/resolve.conf if your server already have configured DNS. If that address is 22.22.22.22 and 22.22.22.23 configure ms-dns as

ms-dns 22.22.22.22
ms-dns 22.22.22.23

Otherwise you may use Google’s DNS server.

ms-dns 8.8.8.8
ms-dns 8.8.4.4

4. Configure account for user

Lastly, you should configure user account for the VPN connection.

sudo vi /etc/ppp/chap-secrets

And add

testuser pptpd testpassword *

Then you may be able to connect to VPN with ID=testuser PW=testpassword.

Note that if you use special characters like “#” in the password, that will cause trouble. I recommend to use just alphanumeric for your password. Also, make sure your chap-secrets file in unix CRLF format. (I spent couple of hours to find the problem that pptpd didn’t let me log in–it was due to chap-secrets file)

5. Restart pptpd

You can simply

sudo server pptpd start

to start the pptpd server or

sudo server pptpd restart

to restart pptpd.

6. Check what’s going on with syslog

If VPN doesn’t work, you may want to check out what’s going on under the hood. All the message will be recorded through syslog. So

sudo tail -f /var/log/messages

will show you any log associated with pptpd.

I hope this helps whom wants to run VPN server on Ubuntu.

Cheers,

문제로 풀어보는 알고리즘 0.3 생각해보기 풀이 – Ruby version

연구실에서 실험 중에 facebook 에 링크가 하나 올라왔길래 풀어봅니다. ㅎㅎ 자꾸 딴 짓 하면 안되는데…;;

원본 문제는 http://www.insightbook.co.kr/post/3814 에 게제되어 있습니다.

배열 arr[]과 위치 s, t가 있을 때,
arr[s], arr[s+1], … , arr[t-1]을 오른쪽으로 한 칸씩 이동하고,
arr[t]는 arr[s]로 복사하는 것을 ’1만큼 오른쪽으로 회전시켰다’고 한다.

예를 들어 길이가 8인 배열에서 s=2, t=6이면 다음 그림처럼 바뀐다.

길이가 n인 배열의 위치는 0, 1, 2, … , n-1이다.

문제 :
k를 인자로 받아서 k만큼 오른쪽으로 회전시키는 함수를 작성하라.
단, 1만큼 오른쪽으로 이동시키는 과정을 k번 반복해서는 안 된다.

조건 1 : 작성하는 언어에는 제한이 없습니다.
조건 2 : 답안으로 작성하신 글 제목에는 ‘문제로 풀어보는 알고리즘 0.3 생각해보기 풀이’라는 문장이 들어가야 합니다. (저희 블로그에도 트랙백을 걸어주세요.)

(주의: 이 코딩 인터뷰는 인사이트 입사와는 무관합니다. ㅡㅁㅡ /)

shift(array, k)를 어떻게 구현하냐는 것인데요,

일반적으로 생각하기 쉬운 알고리즘은 2가지 정도가 있습니다.

첫째는 array를 하나 더 만들어서 각 element를 새로운 배열의 (element+k) MOD n 위치로 복사하는 방법이 있습니다. 가장 일반적인 방법이지만, 창의적이지는 않지요.

둘째는, 해답이라기 보다도 트릭이겠지만, 위의 (element_k) MOD n 을 함수처럼 제공하는 방법이 있습니다. 즉 shift(array, k, i)를 억세스하면 shift 된 array를 반환시키는 방법이죠. 하지만 이것은 문제에서 요구하는 방법은 아니니까 패스…

스크립팅 언어를 사용하면 코딩량을 줄일 수 있는 다른 괜찮은 트릭이 나오겠지만, 문제에서 코딩량 보다는 O(n) 알고리즘을 어떻게 효율적으로 구현하느냐의 트릭을 요구하는 것 같아서 한 번 reverse 를 3번 구현해서 shift를 구현하는 방법을 사용해 보았습니다. 예전 고등학생 때 올림피아드 준비하면서 알아뒀던 알고리즘인데, 여기서 다시 볼 줄은 몰랐네요. ㅎㅎ

ruby 로 된 답을 한번 제시해봅니다.

#!/usr/bin/ruby

# Reverse the array
def rev(a,s,e)
    for i in 0..(e-s-1)/2 do
        tmp=a[s+i]
        a[s+i]=a[e-i]
        a[e-i]=tmp
    end
end

# Shift the array with size of k with three reverses
def func(a,k)
    rev(a,0,a.length-1)
    rev(a,0,k-1)
    rev(a,k,a.length-1)
end

arr = Array.new
arr = [1, 2, 3, 4, 5, 6]

puts "Original = " + arr.inspect

func(arr,3)

puts "Shifted  = " + arr.inspect

rev()를 3번 이용해서 Shift 시키게 됩니다. rev()는 주어진 array의 주어진 범위 내에 있는 원소들의 위치를 반대 방향으로 만들어주는 함수입니다.

하나씩 뜯어보면

    rev(a,0,a.length-1)

를 실행하면

a = [6, 5, 4, 3, 2, 1]

이 됩니다. 그 상태에서

    rev(a,0,k-1)

를 실행하면

a = [4, 5, 6, 3, 2, 1]

이 되고, 마지막으로

    rev(a,k,a.length-1)

를 실행하면

a = [4, 5, 6, 1, 2, 3]

이 되어서 shift 연산을 완료하게 됩니다.

실제로 shift를 구현할 때 위 방법이 많이 쓰이는지는 모르겠군요. 메모리 가격이 중요했던 예전에는 array 하나로 해결할 수 있는 저런 알고리즘이 각광을 받았는데, 요즘은 뭐… 그냥 알아보기 쉬운 코드가 제일이 아닌가 싶습니다.

array가 정수라고 가정해서 덧셈을 이용한 swap을 하면 tmp 변수도 필요없이 swap 하는 트릭도 있습니다만, 대신 속도가 느려서 요즘은 쓸 일 없겠죠.

HTML5+CSS web application building blocks

HTML5+CSS web application building blocks.

<fundamentals>
    □ jQuery.js : simplifies selecting and modifying selecting DOM objects.
    □ Prototype.js : Javascript framework
    □ backbone.js : enables rich web applications(like Gmail) on front-end side with MVC model.
    □ underscore.js : adds functional programming language features.
    □ LAB.js : on-demand javascript loader.

<template>
    □ handlebars.js : template engine
    □ mustach.js : template engine

<server-side script>
    □ node.js : server-side javascript.
    □ phantomJS : webkit console program

<javascript compiler>
    □ coffeescript : little language that compiles into JavaScript

<css>
    □ SASS : extendable and hierarchical css sheet.

<mobile support>
    □ iscroll : enables ipad/iphone ready scroll interface to web.
    □ zepto.js

<unit testing>
    □ jslint : javascript code quality tool
    □ Qunit : javascript test suite
    □ Ready.js : tool to prepare your javascript files for production

<Ruby integrated>
    □ Jammit : asset packaging library for Rails

Holstee Manifesto

Holstee 의 기업 사명문(Manifesto) :

이것은 당신의 인생이다.
사랑하는 것을 하고, 자주 하라.

무언가 마음에 들지 않는다면, 바꿔라.
직업이 마음에 들지 않는다면, 그만 둬라.
충분한 시간이 없다면, TV를 그만 봐라.

당신 삶 속에서 사랑을 찾는다면, 멈춰라.
사랑하기 시작한다면,
당신을 기다리는 누군가를 발견할 수 있을 것이다.

더 이상 분석하려 들지 마라. 삶은 간단하다.
모든 감정은 아름답다.
무언가를 먹는다면, 마지막 한입까지 즐겨라.

새로운 것과 사람들에게 당신의 정신과, 양팔과, 마음을 열라.
우리 모두는 다양함 가운데 하나되어 있다.

자주 여행하라. 길을 잃으면 자기 자신을 찾을 수 있을 것이다.
어떤 기회들은 오직 한번만 찾아오니, 꼭 붙잡아라.

삶은 곧 당신과 만나는 사람들이자, 그들과 함께 창조하는 것이다.
그러니 나가서 만들기를 시작하라.

인생은 짧다.
당신의 꿈을 좇아 살고, 당신의 열정을 나누라.

원본 주소 : http://shop.holstee.com/pages/about

이렇게 간지나는 기업 사명문도 흔치 않은 것 같다.. 나의 삶은 무엇일까?

내가 사용하는 bash prompt

bash prompt 를 어떻게 꾸미느냐는 사람 취향에 따라 다르겠지만, 나는 아래와 같이 사용한다.

PS1=”\n\[\e[30;1m\](\`if [ \$? = 0 ]; then echo \[\e[32m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`\[\e[30;1m\])-(\[\e[37;1m\]\u@\h\[\e[30;1m\])-(\[\e[37;1m\]jobs:\j\[\e[30;1m\])-(\[\e[37;1m\]cpus:\`ps u | grep `whoami` | awk ‘{ SUM += \$3 } END {print SUM}’\`%\[\e[30;1m\])-(\[\e[33;1m\]\w\[\e[30;1m\])\n(\[\[\e[37;1m\]! \!\[\e[30;1m\])-> \[\e[0m\]”

이하는 스크린샷:

사용자 삽입 이미지

2개의 라인에 걸쳐 이전 커맨드의 성공 여부, 자신의 whoami 및 hostname, job 개수, cpu 점유율, 그리고 현재 디렉토리를 차례로 표시하기 때문에 보다 편하게 사용할 수 있다. 짧은 프롬프트를 원하는 분들에게는 비추.

다른 괜찮은 bash prompt 를 참조하려면 아래 사이트를 방문하면 된다:

http://maketecheasier.com/8-useful-and-interesting-bash-prompts/2009/09/04

110511 From hobby to business

개인적으로 2011년은 여러모로 나에게 많은 변화가 있는 해이다.

연구 쪽에서도 큰 트랙을 잡아가고 있는 중이고, 또한 high worship 프로젝트의 일정 성과물들을 내고자 하는 해이기도 하다.

high worship 프로젝트와 관련된 가장 큰 변화라면, 이제는 취미 생활을 사업으로 변환시키는 과정이라고 볼 수 있다.

악보 프로젝트는 사실 내 개인 취미로부터 시작한 것이다. 다만 그 쌓인 컨텐츠가 방대해지고, 또한 거기에 더해 찬양인도자로서의 몇 가지 아쉬운 점들에 대해 직접 웹 서비스로 해결하고자 하면서 나름대로 의미있는 성과가 나오고 있는 중이다.

이에 대해 드는 생각은, public 하게 만든다는 것은 생각보다 많은 것들을 고려해야 한다는 것이다. 개인 서비스였을 때는 단순히 “쓰기 싫으면 쓰지 마”라고 할 수 있지만, public 한 서비스는 그렇지 않기 때문이다.

그렇기 때문에 마케팅, 펀딩, 홍보, 인력 고용, … 이 모든 것 하나하나가 꽤나 큰 이슈들이 될 수 밖에 없다.

여하튼 사업화 관련해서도 2011년에는 의미있는 성과들이 나왔으면 한다. 그리고 찬양 인도자 커뮤니티에 의미있는 툴이 되었으면 좋겠다.

[작곡] You Complete Me

사용자 삽입 이미지

이번주(2010/11/29)는 추수감사절이었다.

1년 반 전에 만들어두었던 찬양인데, 후렴 부분이 마음에 안들어서 묵혀두고 있었던 것을 이번 기회에 수정해보았다. 추수감사절을 맞아, 내가 무언가 잘 되고 잘 해나가서가 아니라, 어떠한 환경 때문이 아니라, 그냥 하나님께 감사의 고백을 올려드리고 싶었다.

하나님께 더 많이 감사드릴 수 있는 내년이 되었으면 좋겠다.
좋은 일이 있던, 나쁜 일이 있던, 기쁜 일이건 슬픈 일이건,
더 하나님께 귀하게 드릴 수 있는 한 해가 되었으면 좋겠다.

삶이 하나님께 드리는 예배가 되고, 찬양이 되는 한 해가 되었으면 좋겠다.
존재로서 감사의 고백이 되는 삶을 살았으면 좋겠다.
앞으로 한발짝 더 나아가는 내 자신이 되었으면 좋겠다.

You Complete Me

1.공중의 나는 새 들판의 백합화
산천의 나무와 들풀을 보라
수고도 않으며 길쌈도 않지만
네 아버지께서 기르는도다

2.무엇을 먹을까 무엇을 마실까
무엇을 입을까 염려치 말라
필요한 모든 것 부족함 없도록
네 아버지께서 채우시리라

후렴) 주는 나의 하나님 변치 않는 선한 목자
나를 귀하다 여겨 그 아들 생명 주셨네
결코 채울 수 없던 내 맘 속의 빈 자리를
기름 부어주셔서 내 삶을 완전케 하네

You Complete Me by shyoo

8310890703.pdf
Composed/arranged by Sunghwan Yoo
Guitar, Vocal, Piano, E-Piano, Pad, Cello by Sunghwan Yoo
Violin by Dongbin Cho

2011.1.31 – 새로이 음원 녹음하고, 멜로디 및 가사를 약간 수정하였습니다. 바이올린 녹음을 도와준 조동빈 군에게 다시 한 번 감사의 말을 드립니다. ^^

20110101

인생을 다시 산다면

“다음 번에는 더 많은 실수를 저지르리라.
긴장을 풀고 몸을 부드럽게 하리라.
이번 인생보다 더 우둔해지리라.

가능한 한 매사를 심각하게 생각하지 않을 것이며
보다 많은 기회를 붙잡으리라.”

– 나딘 스테어
[류시화 시집/지금 알고있는 걸 그때도 알았더라면] 중에서

2011년을 맞아 20대를 넘어 30대가 되었다.

성공을 위해서, 이기기 위해서, 남들이 가고 싶어하는 길들을 위해서

많이 노력해왔고 또 땀흘려왔던 지난 시간들을 뒤돌아보면서,

내가 앞으로 남은 인생을 어떻게 살아야 할지 다시 한 번 생각해본다.

인생의 황혼기에서 지난 세월을 반추해본다면,

그때 왜 더 좋은 성적을 받지 못했을까,

그때 왜 더 많이 인정받지 못했을까,

그때 왜 더 많이 벌지 못했을까를 후회할 사람이 있을까.

있다 하면 얼마나 될까.

반면

그때 왜 내가 더 사랑하지 못했을까,

그때 왜 내가 용서하지 못했을까,

그때 왜 내가 더 섬기지 못했을까를 후회할 사람은 더 많지 않을까.

더 높은 것을 향하여 달려가는 것도 좋지만,

언제나 인생의 중요한 목적, 방향, 자세를 잃지 않는,

그러한 30대를 맞고, 또 그렇게 살고 싶다.

그것이 2011년 1월 신년을 맞이하는 나의 다짐이며 바람이다.

101115

한국인으로서 미국에서 유학 생활을 하며 느낀 차이점 가운데 하나는,

양국민들이 바라보는 바람직한 역할 모델(role model)에 대한 차이가 있다는 것이다.

한국에서 “너 존경하는 사람이 누구니?” 라고 묻는다면,

열에 아홉은 “세종대왕”이나 “이순신 장군”, “광개토대왕” 같은 분을 든다.

반면 미국에서 “너 존경하는 사람이 누구냐?” 라고 묻는다면,

과거의 위인들도 물론 많이 포함되지만, “빌 게이츠”, “버락 오바마” 같은 현존하는 인물들도 의외로 많이 포함된다.

물론 현존하는 사람의 공과를 동시대의 사람이 모두 파악하기에는 무리가 있다. 교차 검증되지 않은 부분들이 있기 때문이다.

어쩌면 이는 미국이라는 나라의 역사가 짧고, 그만큼 한국의 역사가 길다는 측면을 반증하고 있을지도 모른다.

하지만, 나는 한편으로는 그러한 미국인들이 부럽기도 하다.

왜냐하면 그것은, 이 시대를 살아가는 한국인에게 있어,

누군가 믿고 따를만한 역할 모델, 멘토, 존경할만한 선배가 이 시대에 부족하기 때문에,

몇백년도 더 지난 과거의 인물에게서 역할 모델을 찾고 있다는 뜻이기도 하기 때문이다.

기성세대들은 젊은이들을 바라보며 “패기가 없다, 도전정신이 없다”고 말한다.

반면 젊은이들은 기성세대를 바라보며 “믿고 따를만한 모델이 없다”고 외친다.

동시대의 젊은이들은 실패한 기성세대들을 향해 멘토가 없고, 믿고 따라갈만한 사람이 없다고 외친다.

어떻게든 성공하기만 하면 된다는 기성세대의 성공 지상주의는 IMF를 거치면서 이미 바닥을 드러내었다.

풍요 속의 빈곤은 더욱 커져만 갔고, 무한 경쟁 속에서 너도나도 내 자식만큼은 이렇게 살 수 없다고 하며 사교육 시장은 점점 더 커져만 가고 있다.

한 세대가 다음 세대에게 물려줄 철학이 없는 것이다.

알맹이 없는 껍데기 뿐의 금자탑을 쌓아올렸기 때문이다.

그래서 많은 젊은이들은 동시대의 어른들이 아닌, 대물과 같은 드라마를 바라보면서 열광하며 거기에서 자신의 역할 모델을 찾고 있는 것은 아닌가?

[강좌] 나를 지으신 주님

안녕하세요,

워십 기타 바이블 추가 강의 “나를 지으신 주님” 업로드합니다.

[새 창에서 열기 – 네이버]

[새 창에서 열기 – Vimeo]

일단은 조용한 핑거링 곡입니다. ^^ 중간 중간에 틀리거나 어색한 부분이 있는데, 한큐에 그냥 찍다보니 실수가 좀 있네요.. 양해해주시기 바랍니다. ^^a

악보도 함께 첨부했는데, 악보대로 할 때도 있고 즉흥적으로 갈 때도 있습니다. 일단은 악보대로 익히는 것을 중점적으로 하시기 바랍니다.

기타 멜로디가 보컬 멜로디라인이랑 충돌하는 부분들도 있는데, 양해 부탁드릴께요. ^^ 실제 세션과 함께 연주할 때에는 멜로디라인을 빼고 아르페지오로 연주하는 것이 더 나을 겁니다.
1247396146.pdf