화요일, 12월 04, 2007

HPUX 11.11 open_mib g++ error Unsatisfied symbols

sys/mib.h 에 선언되어있는 함수들이 open_mib 관련 함수들이 extern "C" 형태로 선언되지 않아서 생기는 문제입니다.

g++를 사용하는 경우 문제가 생기지만 gcc로 object를 생성하고 g++ 로 링크하는 경우에는 문제가 없네요. 그냥 sys/mib.h를 수정하고 싶지만 사용시스템이라 수정할 수 없어서 c형태 코드를 작성하고 gcc로 컴파일 후 g++로 컴파일 했습니다.

 

환경: gcc 4.1.1, HPUX 11.11, gnu make

 

덧붙임: HPUX 11.23에서는 이런 문제가 없네요..

목요일, 10월 18, 2007

freeze time.strptime문제 해결하기.

freeze로 배포하는 경우 time.strptime을 사용하는 코드가 있는 경우에

함수를 호출하면 _strptime을 모듈을 못 찾아서 종료되는 문제가 발생합니다.

이 문제를 해결하기 위해서... freeze.py에 추가하는 코드를 수정했습니다.

참고하세요

 

#time이 호출되는경우에 time.strptime을 못찾는 문제를 해결함.

    # modules that are imported by the Python runtime
    implicits = []
    for module in ('site', 'warnings', '_strptime'):   #  <-- 추가한 코드
        if module not in exclude:
            implicits.append(module)

python 실행파일 만들기(freeze.py)

win32에서는 py2exe를 사용해서 잘 사용하는 중에 unix배포판을 만들 필요가 있어서

조사중에 freeze 와 cx_Freeze가 있더군요. 하지만 cx_Freeze는 실행파일이 있는 경로에 so파일이 있어야만 동작해서 freeze를 선택했습니다.

배포를 위해서는 freeze.py 후 python 설치된 경로에 lib/lib-dynload 디렉토리에 있는 so파일들을 모두 배포하고 그위치를 PYTHONPATH 환경변수에 추가해야함.

 

간단 사용법

freeze.py -o dist test1.py

cd dist

make

./test1 <-- 실행파일

 

덧붙임: freeze는 python사이트에서 소스코드를 받으면 Tools 디렉토리에 있습니다.

월요일, 10월 15, 2007

Windows Live Writer로 blogging하기.^^

Windows Live Writer로 Blogging하니깐 좋네요...

 

P1010206 (WinCE)

이미지까지 upload까지 ㅠㅠ  완전 편한하군요.

기존에 Zoundry Blog Writer를 사용했는데 무겁고 이미지 업로드가 문제가 있었는데

이건 좋군요^^  ㅎㅎ

 

다시 블로깅 시작해야하는건가...

금요일, 10월 12, 2007

Oracle 사용중에 접속이 끊어진것 확인하는 방법


ORA-03114 코드를 처리해서 재 접속하는 코드를 추가하면됩니다.


import re,cx_Oracle


ser = re.search('ORA-(\d+):\s+', sys.exc_value.__str__())
# DatabaseError: ORA-03114: not connected to ORACLE
if ser and (ser.group(1) == '03114'):
self.close()
self.connectOracle(self.dbId, self.dbPasswd, self.dbTnsName )


else:


__LOG__.Exception()
__LOG__.Trace( "OracleDao(PS_BTS_CLASS) execute error: ", sys.exc_info() )


return None

cx_Oracle에서 prepare하여 사용하기 예제




python 에서 Oracle 사용하는 모듈









cx_Oracle에서 prepare하여 사용하기 예제









>>> ts = datetime.datetime.now()


>>> print ts


2007-03-10 20:12:02.109000


>>> cursor.prepare("INSERT INTO python_tstamps VALUES(:t_val)")


>>> cursor.setinputsizes(t_val=cx_Oracle.TIMESTAMP)


cursor.setinputsizes(t_val=cx_Oracle.TIMESTAMP)


>>> cursor.execute(None, {'t_val':ts}) <-- 이부분이 중요 포인트


>>> db.commit()









링크: http://www.oracle.com/technology/pub/articles/prez-python-timesanddates.html


수요일, 10월 10, 2007

flash로 플레이되는 동영상 저장방법 요약 ^^;


도구 > 인터넷 옵션 > 검색 기록 > 설정(S) > 임시 인터넷 파일 > 파일 보기


새로운 창이 열리면 ... C:\Documents and Settings\...\Local Settings\Temporary Internet Files


보기 > 아이콘 정렬 순서 > 유형


파일중 오늘날짜에 flv파일을 찾으시면 그 파일이 현재 보고있는 동영상 파일입니다.


이파일을 PMP디빅해결사로 avi로 전환이 가능합니다.


다른 freeware나 다른 몇가지를 시도해보았지만 잘되지 않더군요.. 국산 소프트웨어 show인가는 코덱문제 때문에 동작하지 않았습니다.



---
덧붙임: firefox에 add-on으로 다운받아 주는 Extensions(DownloadHelper)이 있지만 firefox가 10분이상 flush로 플레이되는 것은 오동작으로 실행되지 않더군요..


이상입니다...




월요일, 10월 08, 2007

ncftpget ftp접속없이 가지고오는 방법^^

linux에서는 기본적으로 사용가능합니다.^^

ncftpget -u $아이디 -p $비번 -A ftp://아이피/경로/a.txt

oracle query trace

쿼리를 실행하고 실행시간과 index정책을 확인 할 수 있는 방법입니다.
sqlplus로 실행하면 확인 할 수 있습니다. ^^


SQL> set timing on
SQL> set autotrace traceonly

화요일, 7월 10, 2007

UNIX Code Migration Guide

http://msdn2.microsoft.com/ko-kr/library/ms811903.aspx


msdn 자료: unix로 만들어진 프로그램을 win32로 포팅해야하는 경우 읽어보면 좋은 자료입니다.
대충 개념을 잡을 수 있는 좋은 문서입니다.

목요일, 6월 14, 2007

fcntl win32/posix

# portalocker.py - Cross-platform (posix/nt) API for flock-style file locking.
# Requires python 1.5.2 or better.

"""Cross-platform (posix/nt) API for flock-style file locking.

Synopsis:

import portalocker
file = open("somefile", "r+")
portalocker.lock(file, portalocker.LOCK_EX)
file.seek(12)
file.write("foo")
file.close()

If you know what you're doing, you may choose to

portalocker.unlock(file)

before closing the file, but why?

Methods:

lock( file, flags )
unlock( file )

Constants:

LOCK_EX
LOCK_SH
LOCK_NB

I learned the win32 technique for locking files from sample code
provided by John Nielsen in the documentation
that accompanies the win32 modules.

Author: Jonathan Feinberg
Version: $Id: portalocker.py,v 1.3 2001/05/29 18:47:55 Administrator Exp $
"""

import os

if os.name == 'nt':
import win32con
import win32file
import pywintypes
LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK
LOCK_SH = 0 # the default
LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY
# is there any reason not to reuse the following structure?
__overlapped = pywintypes.OVERLAPPED()
elif os.name == 'posix':
import fcntl
LOCK_EX = fcntl.LOCK_EX
LOCK_SH = fcntl.LOCK_SH
LOCK_NB = fcntl.LOCK_NB
else:
raise RuntimeError("PortaLocker only defined for nt and posix platforms")

if os.name == 'nt':
def lock(file, flags):
hfile = win32file._get_osfhandle(file.fileno())
win32file.LockFileEx(hfile, flags, 0, 0xffff0000, __overlapped)

def unlock(file):
hfile = win32file._get_osfhandle(file.fileno())
win32file.UnlockFileEx(hfile, 0, 0xffff0000, __overlapped)

elif os.name =='posix':
def lock(file, flags):
fcntl.flock(file.fileno(), flags)

def unlock(file):
fcntl.flock(file.fileno(), fcntl.LOCK_UN)

if __name__ == '__main__':
from time import time, strftime, localtime
import sys
import portalocker

log = open('log.txt', "a+")
portalocker.lock(log, portalocker.LOCK_EX)

timestamp = strftime("%m/%d/%Y %H:%M:%S\n", localtime(time()))
log.write( timestamp )

print "Wrote lines. Hit enter to release lock."
dummy = sys.stdin.readline()

log.close()

수요일, 5월 23, 2007

python dict value sort

count = 0
for i in sorted( MAP.items(), \
lambda x, y: cmp(x[1], y[1]), reverse=True):
print "k[%s] value[%s]" % ( i[0], i[1]);
count += 1;
if count > 10: # 10 상위 열개만 출력함.
break;

월요일, 5월 21, 2007

디버깅 이야기: strace, truss, tusc

디버깅의 시작은 과감히 툴을 먼저 배우는 것이라고 해도 과언이 아닐정도로 툴에
익숙해야합니다. 디버깅 툴은 어떻게 보면, 크게 구분이 되어 있는 것은 아니지만
사뭇 심도있는 분석을 위해서는 해킹에 사용되는 것과 크게 다르지 않습니다.
디버깅과 해킹은 같은 맥락에 있는 것이지요.

먼저 쉽고 재밌게 접근할 수 있는 것이 system call tracer입니다.

linux: strace
solaris: truss
hpux: trace(10.x), tusc(11.x)

로 알려져 있는 것들이지요. 위 프로그램들의 option 들이 대개 비슷합니다.

strace ls

만 해도 나오는 내용이 어떻다는 것을 보실 수 있을텐데요.
이들은 모두 kernel level의 함수들입니다. 즉 system call이라는 것이지요.

직관적으로 이용할 수 있는 방법은 다음과 같은 것들입니다.

1. 어떤 shared library가 사용되는지 알수 있음.
2. 1번과 비슷하지만 어떤 파일을 열다가 실패하는지,
대개 configuration file을 global, home.. 순으로 찾지요.
3. process가 잠시 멈출때, 어떤것을 대기하고 있는지.
4. 전송되고 들어오는 내용은 무엇인지 (-s 1024 option)
5. 어떤 signal을 받는지.
6. ipc 객체들은 어떤것들이 이용되는지.

등등...

system call은 기본적으로 OS를 다루는 방법에 대한 것이므로, 많은 hint를 얻을 수
있습니다.

option 들중에 중요한 것 몇가지만 소개하자면, system call의 가장 대표적인 것중의
하나는 실행되고 있는 daemon의 현재 작업내용을 살펴볼수 있는 것이 있습니다.

strace -p

형태로 실행중인 process를 살펴보는 것이지요. 더불어 daemon의 경우 fork가
일어나는 경우가 많은데,

strace -f -p

-f option을 주어 fork되어 나오는 process까지 trace 하라는 것입니다. fork외에
vfork도 추적할 수 있어야하므로 대개 f를 쓸때는 다음과 같이 사용합니다.

strace -fF -p

더 줄여서

strace -fFp

로 사용하지요.

이것들을 종합하여 다음과 같은 용도로 사용할 수 있습니다.

1. daemon 이 갑자기 멈추었는데, debug 용 printf를 집어 넣지 않았을 때, 알고싶은
경우.
2. socket server가 과연 process가 connection을 접수한 뒤 제대로 fork 되는지.
3. telnet 서버에 접속하였는데, prompt가 떨어지지 않는 경우 inetd가 무슨일을
하는지. (대개 tcp_wrapper에 의해 DNS IP resolve 하는 경우가 많죠.)

지금까지 한 것은 일부분에 지나지 않습니다. 남의 program을 추적할때 system call
trace를 하는 것만으로 process가 하는 일을 상상할 수 있다면, 프로그램을
만든사람은 어느 code를 지나가고 있는지 알 수 있을 것입니다.


----

출처: http://kldp.org/node/900

금요일, 2월 09, 2007

scriptable install system

간단한 스크립트 형태로 setup파일을 만들 수 있는 프로그램

샘플을 보면 여러 형태로 쉽게 만들 수 있어서 배포하기 쉽다.

http://nsis.sourceforge.net/Main_Page

perl2exe - 실행파일 만들기

* 파이션을 이용해서 실행파일을 만든경우
소스가 있는 위치에 setup.py파일을 만들고 실행시키면 dist디렉토리가 생성되면서 실행파일이 생성됨.
실행파일과 MSVCR71.dll을 배포하면됩니다.


* sample - console부분에 작성한 py파일을 입력한다.

from distutils.core import setup
import py2exe
import sys

# If run without args, build executables, in quiet mode.
if len(sys.argv) == 1:
sys.argv.append("py2exe")
sys.argv.append("-q")



setup(
# The first three parameters are not required, if at least a
# 'version' is given, then a versioninfo resource is built from
# them and added to the executables.
version = "0.0.1",
description = "py2exe hello world !!!",
name = "hello world samples",
options = {"py2exe": {"compressed": 1,
"optimize": 2,
"ascii": 1,
"bundle_files": 1}},
zipfile = None,
console = ["a.py"],
)

토요일, 2월 03, 2007

svn diff a.c 를 하면 vimdiff로 바로 보이게 하려면

svn diff a.c
를 하면 vimdiff로 바로 보이게 하려면.

$ more ~/bin/vimdiff.sh
#!/bin/sh
while test $# -gt 2; do shift; done
vimdiff $@


$cat ~/.subversion/config | grep diff-cmd
diff-cmd = vimdiff.sh

PATH에 ~/bin 을 넣어 두면 됩니다.



힛.. 좋네요^^변경하셔가지공 보시면 좋습니다



출처: http://kldp.org/comment/reply/52160/200691

화요일, 1월 02, 2007

pychecker - 문법검사 & 버그 찾기

pychecker - pychecker homepage

python용 버그를 찾아 주는 tool입니다.

perl에 있는 perl -cw의 강력한 기능에 perl에 미련을 못 버리고 있었는데

python에도 이런 기능이 있군요. ㅎㅎ

일단 문법 검사 기능이 있으니깐 좋네요.

간단 사용법: pychecker fileName.py

자세한 설명은 pychecker homepage에서 참고하세요.