5: Floating Point Numbers, Successive Refinement, Finding Roots

def squareRootBi(x, epsilon):
    “””Return y s.t. y*y is within epsilon of x”””
    assert epsilon > 0, ‘epsilon must be positive, no ‘ + str(epsilon)
    low = 0
    high = max(x, 1)
    guess = (low + high) / 2.0
    ctr = 1
    while abs(guess ** 2 – x) > epsilon and ctr <= 100:
        #print ‘low:’, low, ‘high:’, high, ‘guess:’, guess
        if guess ** 2 < x:
            low = guess
        else:
            high = guess
        guess = (low + high) / 2.0
        ctr += 1
    assert ctr <= 100, ‘Iteration count exceeded’
    print ‘Bi method. Num. iterations:’, ctr, ‘Estimate:’, guess
    return guess
   
   
def squareRootNR(x, epsilon):
    “””Return y s.t. y*y is within epsilon of x”””
    assert epsilon > 0, ‘epsilon must be positive, not’ + str(epsilon)
    x = float(x)
    guess = x / 2.0
    guess = 0.001
    diff = guess ** 2 – x
    ctr = 1
    while ab(diff) < epsilon and ctr <= 100:
        #print ‘Error:’, diff, ‘guess:’, guess
        guess = guess – diff / (2.0 * guess)
        diff = guess ** 2 – x
        ctr += 1
    assert ctr <= 100, ‘Iteration count exceeded’
    print ‘NR method. Num. iterations:’, ctr, ‘Estimate:’, guess
    return guess
   
   
a = squareRootBi(2, 0.01)
print a
a = squareRootNR(2, 0.01)
print a

왜 에러가 뜰까…. 이해가 필요하다..

Tags: ,

 SYBASE에서 원격 서버 접속 방법.

 Linux(Ubuntu-10.04_Desktop) 버전 기준으로 작성하였다.
 SYBASE-ase-15.5 버전을 설치하였다고 가정한다.

1. SYBASE 홈디렉토리로 이동한다.

$ cd $SYBASE

2. interface 파일을 수정한다.

$vi ./interface

3. interface 파일안에는 기본적으로 자신의 호스트에 대한 내용들이 적혀있는데 이곳에 새로이 만들 DB의 alias 와 내용들을 입력하면된다.

[master/query] [tcp/udp] [ether] [IP/host] [port] 의 순서로 수정을 하면 된다.

JONATHANLAPTOP
        master tcp ether 192.168.100.1 5000
        query tcp ether jonathan-laptop 5000

 
4. 접속 TEST

 $ isql -U(username) -P(password) -S(aliasname)

jonathan@jonathan-laptop:/opt/sybase$ isql -Usa -P -SJONATHANLAPTOP
Msg 4017, Level 16, State 1:
Server ‘JONATHANLAPTOP’:
Neither language name in login record ‘korean’ nor language name in syslogins
‘<NULL>’ is an official language name on this ASE. Using server-wide default
‘us_english’ instead.
1>

Tags: , ,

pchero on November 3rd, 2010

Tags: , ,

pchero on November 3rd, 2010

SYBASE 에서 다음의 init 스크립트를 사용중 stop시 locale 에러가 나타나는 것을 확인했다.

jonathan@jonathan-laptop:/opt/sybase/ASE-15_0/install$ cat /etc/init.d/sybase
#!/bin/sh
#
# Startup script for Sybase ASE
#
# description: Sybase Adaptive Server Enterprise
# is a SQL database server.
# processname: dataserver
 

SYBASE=/opt/sybase
SERVER=JONATHANLAPTOP
LANG=ko_KR.euckr
export LANG
 

# Source environment variables.
. $SYBASE/SYBASE.sh
 

# Find the name of the script
NAME=`basename $0`
 

# For SELinux we need to use ‘runuser’ not ‘su’
if [ -x /sbin/runuser ]
then
    SU=runuser
else
    SU=su
fi
 

start() {
    SYBASE_START=$”Starting ${NAME} service: “
    $SU root -c “. $SYBASE/SYBASE.sh; $SYBASE/$SYBASE_ASE/install/startserver
-f $SYBASE/$SYBASE_ASE/install/RUN_${SERVER} > /dev/null”
    ret=$?
    if [ $ret -eq 0 ]
    then
        echo “$SYBASE_START Success.”
    else
        echo “$SYBASE_START Failed!”
              exit 1
    fi
}
 

stop() {
    echo -n $”Stopping ${NAME} service: “
    $SU root -c “. $SYBASE/SYBASE.sh; isql -S $SERVER -U sa -P ” <
$SYBASE/$SYBASE_ASE/upgrade/shutdown.sql > /dev/null”
    ret=$?
    if [ $ret -eq 0 ]
    then
        echo “Success.”
    else
        echo “Failed!”
        exit 1
    fi
}
 

restart() {
    stop
    start
}
 

case “$1” in
 

    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    *)
        echo $”Usage: $0 {start|stop|restart}”
        exit 1
esac
exit 0

 에러메시지의 내용은 다음과 같다.

jonathan@jonathan-laptop:/opt/sybase/ASE-15_0/install$ sudo /etc/init.d/sybase stop
$Stopping sybase service:

The context allocation routine failed when it tried to load localization files!!
One or more following problems may caused the failure

Your sybase home directory is /opt/sybase. Check the environment variable SYBASE if it is not the one you want!
Using locale name “ko_KR.UTF-8” defined in environment variable LANG
Locale name “ko_KR.UTF-8” doesn’t exist in your /opt/sybase/locales/locales.dat file
Success.

 제일 마지막 메시지에는 Success 라고 나와있지만 ps -ef|grep sybase 명령어로 확인해본 결과 대부분의 프로세스들이 그대로 돌고있는 것을 확인할 수 있었다.

 무엇이 문제일까.

 에러 메시지에서 해답을 찾았다. 내가 사용하는 “ko_KR.UTF-8” locale을 정의(찾을 수)없다는 메시지였다.

 먼저 내가 사용하는 리눅스에서의 로케일을 변경하려고 했으나 생각되로 잘 되지 않았다. 왜냐하면 SYBASE에서 어떤 로케일들을 지원하는지 아직 몰랐기 때문이다.

 SYBASE에서 지원하는 locale 하는 로케일은 다음의 파일에서 찾을 수 있다.

/opt/sybase/locales/locales.dat

 방법은 두가지가 있다. SYBASE에서 지원하는 로케일에 맞추거나 위의 파일에 자신이 사용하는 로케일을 추가하거나.

 필자는 로케일을 추가하는 방법을 선택하였다.

/opt/sybase/locales/locales.dat

 파일을 열어 자신의 OS를 찾아 아래쪽에 양식에 맞게 추가하도록 하자.

[linux]
        locale = ko_KR.UTF-8, korean, eucksc
        locale = ko_KR.949, korean, cp949
        locale = korean.euc, korean, eucksc

위쪽 굵게 표시한 부분이 필자가 추가한 부분이다.

이후, 아무런 에러 메시지 없이 정상적으로 종료가 되는 것을 확인할 수 있었다.

jonathan@jonathan-laptop:/opt/sybase/ASE-15_0/install$ sudo /etc/init.d/sybase stop
$Stopping sybase service: Success.

테스트 OS : UbuntuLinux_Desktop-10.04

Tags: , , , ,

 “이 우주에 우리만이 존재한다면 그건 엄청난 공간의 낭비일꺼야. – 콘텍트”

 영상을 보는 내내 이 대사가 생각났다.

Tags: , ,