py2exe - setup.py

from distutils.core import setup import py2exe import glob from distutils.core import setup import py2exe setup(     name='LogCleaner',     console=['LogCleaner.py'],     options = { 'py2exe': {                             "packages": ["utils"] #import 패키지 추가                             ,'compressed':1                             ,'optimize':2                              ,'bundle_files':1 #library.zip으로 압축해 주지만 64비트에선 현재일자 기준으로 지원안함                             }},     zipfile = None,     version='1',     url='',     license='',     au...

모듈

모듈 모듈은 임포트시에도 공유된다. 모듈은 문자열로도 임포트 가능하다. re = __import__("module") 모듈은 기본적으로 메모리에 한번 적재되면 그 상태로 유지 되고 원한다면 재적재할수 있다. reload(module) 파이선 해당파일 실행시 해당 __name__ = "__main__" 이란 이름을 가진다. 이를 이용하여 다음과 같이 정의하면 if __name__ == '__main__': #실행 명령 최상위 모듈일때만 실행명령을 작동시키고 임포트 시에는 작동하지 않도록 처리가능하다. 모듈별로 독립적으로도 수행가능하고 다름 모듈에 호출되어서도 사용가능한것이 파이선의 좋은 특징중 하나이다. 패키지 __init__.py 해당 패키지의 모든 초기값을 설정하고 __all_=[module01, module02..] 를 통해 import* 선별적으로 모듈임포트를 가능하게 할수있다.

함수

내부값 변경이 가능한 리스트 타입일 경우를 제외하고는 모든 함수에 전달된 인수값은 레퍼런스 값으로 함수 내부에서 변경은 인수에 적용되지 않는다. return 되지 않는 함수의 반환값은 언제나 NONE이다. return 문은 어떤 객체라도 반환할수 있다. lambda *args : 튜플형식으로 인수를 받는다. **args : 사전(map)형식으로 인수를 받는다. map 함수 쌍으로 이루어진 인수를 매핑한다. zip 함수 쌍으로 이루어진 인수를 매핑하는데 짧은쪽기준으로 매핑하고 나머진 버린다. filter 함수 연산자와 튜플 또는 리스트 인자를 받아 연산자로 필터링 후 남는 값을 받는다. reduce 함수 누적연산을 실행한다.

python eval/exec/compile

eval a=1 a=eval('a+4') print a >>> a : 5 exec a=1 exec 'a=a+4' print a >>> a : 5 compile eval/ exec 문자열 실행 함수를 컴파일 해서 사용한다.

패턴정리

전략패턴 팩토리메소드패턴 템플릿메소드 패턴 옵져버패턴 - 자주 변화하는 클래스에서 변화가 이러날 때 변화를 출력하거나 그 변화를 이용해야 할 메소드를 호출 시키는 것이다. 데코레이터패턴 http://warmz.tistory.com/757 아답터패턴 이터레이터패턴 - iterator 구현체를 사용한 아답터 패턴 파사드패턴 프록시 패턴 플라이웨이트패턴 - 객체 지향 언어는 객체를 생성함으로써 비객체지향 언어에서 할 수 없는 많은 것들을 할 수 있었습니다만, 그 객체라는게 발목을 잡기도 합니다. 바로 성능에서죠. 객체는 메모리도 많이 잡아먹고 생성하는데 많은 비용이 들어갑니다. Flyweight 패턴은 작은 공간(pool)을 만들어 객체를 공유할 수 있게해 객체 생성을 최대한 줄여줍니다. 이 패턴은 대체로 FlyweightFactory에서 객체를 생성합니다. 예를 들어 흰색 선과 파란 선을 그린다고 할 때 각각의 색을 가진 선 객체는 FlyweightFactory에서 만들어져 흰색 선과 파란 선을 그릴때 언제든지 재사용 할 수 있습니다. 따라서 1000개의 흰색 선과 6000개의 파란 선을 그린다고 할 때 7000개의 객체를 생성하는 대신 두 개의 인스턴스만 만들 것입니다. 그런데 어떻게 객체를 재사용 할까요? 분명히 선을 표시할 때는 그 위치나 길이가 달라지는데 우리가 생각하는 '객체'는 다른 상태는 곧 다른 객체를 의미하지 않습니까? Flyweight 패턴은 이 부분을 내부(intrinsic, 선의 색) 상태와 외부(extrinsic, 위치나 길이) 상태로 나눠서 해결하고 있습니다. Flyweight 패턴은 내부 상태는 유지하는 반면에, 외부 상태는 Flyweight 객체가 실행 되는 동안만 유지합니다. 따라서 Flyweight 객체를 손쉽게 변화시켜 재사용 할 수 있습니다. 자바에서 플라이웨이트 패턴을 사용한 가장 대표적인 예는 String 클래스입니다. 같은 내용의 String 객체를 2개 생성한...

DBCP, C3PO 커넥션 유지 하기

JDBC 커넥션 풀을 지원하는 대표적인 오픈소스 중에 아파치  DBCP 와  C3P0 가 있다. 이들은 Spring, Hibernate 등과 통합되어 DB 커넥션 풀을 제공하는 DataSource를 구성하여 자주 쓰인다. 오라클이나 MySQL 등 DBMS들은 기본적으로 특정 시간동안 실행이 없으면 해당 세션을 종료하게 된다. 이렇게 종료된 커넥션은 어플리케이션에서 오류를 발생시키게 되므로 커넥션을 유지하기 위한 별도 설정을 필요로 하게 된다. 커넥션을 얻어올 때 커넥션 테스트를 수행하고 실패하면 새로운 커넥션을 생성할 수 있다. 또한 idle 타임에 주기적으로 커넥션 테스트를 수행할 수도 있다. 아래는 dbcp를 이용하여 구성한 스프링 DataSource 설정의 예이다. <bean id="dataSource" class=" org.apache.commons.dbcp.BasicDataSource " destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="defaultAutoCommit" value="true"/> <property na...

You don't have permission to access / on this server

아파치 설정후 해당 도메인으로 접근 하려하니... You don't have permission to access / on this server. 오류가 나오는 경우가 있습니다. httpd.conf or vhosts 파일 설정 <Directory />     Options FollowSymLinks     AllowOverride None     Order deny,allow     Allow from all </Directory> 만약 webtree 유저 홈드렉토리에 넣었다면  chmod 711 /home/webtree chmod 775 /home/webtree/webRoot