토요일 해질녘 만큼이나 행복한 여유로움은 없어.

멍하니 자전거 타고 나가서 벤치에 앉아있으면,

아무리 즐거운 볼거리를 보고 그리운 서울 거리를 다시 돌아다녀도

바다로 부터 가까운 이곳.

이제 이 여유로움이 그리워질거 같다.

뭐 아직 그래도 기약없는 세월이 남았으니까,

지겨운 일상속에, 아직 생각할 필요 없는 미래의 그리움은 접어두자.




Posted by WebPeace

일상

일상 2014. 3. 19. 20:42

 하루 종일 먼지 낀 하루였다. 눈을 떠서 커튼을 젖혀도 동텄는지 알 수도 없을 무렵, 하늘을 보니 오늘도 기분이 꿀꿀할지 싶었다. 문득, 침대 옆 자전거를 치우고 자리에 멍하니 앉으니, 어젯밤 구내 술집에서 한잔한 기억이 떠올랐다. 한밤에 좋은 추억을 곱씹고, 좋은 미래를 꿈꾸는 것을 안주삼는 것 만큼이나  기분 좋은 일은 없다. 아침의 일과 미팅도 미래지향적인 좋은 말들이 오갔다. 무언가 중요한 일을 할 수 있을거 같고, 지금일을 빨리 마무리 지으면 더 앞으로 나간다는 희망적인 느낌이 차올랐다. 왠일일까? 근래에 보통 날씨랑 기분이 같이 흘러가는 느낌인데 오늘 오전은 좋은 느낌으로 흘러갔다. 


 평상시 오전과 오후엔, 감정의 흐름은 바쁜 의식 밑에 짓눌려 있다 해가 짐과 동시에 스멀스멀 기어오른다. 그날 좋지 않은 일이 있거나, 뭔가 맘에 불편한 사건들이 생기거나, 중요한 일들이 다가오면, 해가 짐과 동시에 올라와 생각의 집중을 방해할 때가 많다. 그냥 둘 수 밖에 없겠지? 참을 수 없을 땐 냉장고에서 맥주 한 캔을 꺼내 비운다. 친한 친구와의 긴 전화 한 통, 치킨 한 마리 등이 또 다른 처방전이 될 수 있겠다.


 저녁 여섯시부터 아홉시까지는 쏜살같이 지나가기 일쑤고, 내가 제일 집중하는 골든 타임이기도 하다. 내가 무언가를 할 수 있는 시간이다. 코드 몇 조각이 될 수도 있고, 글 몇쪼가리 등등이다. 가끔은, "내가 생산적인 사람인가?"을 고민하는 비생산적인 행동을 하기도 한다. 뭐 어떨까? 무엇이라도 좋다. 밤잠까지 이어서 푹 잘 수도 있다. 그냥, 내가 남한테 구애받지 않고 쓸 수 있는 시간이 있다는 데 있어 아늑함과 편안함을 느끼는 것이다. 마치 토요일 밤 처럼.


 다음 날까지 해야 할 일이 있으면 고민을 시작한다. 지금 끝내야 할 것인가? 아니면 지금 자고 일찍 일어날 것인가? 난 이미 안다. 내일 아침에는 똑같은 시간에 눈을 뜨고, 출근해서 바로 미팅에 들어가야 될 것이다. 무거운 몸을 움직여 일을 시작한다. 일과 시간중에 했던 일들의 연속이다. 일거리를 일과시간 이후까지 가져와선 안되겠지만, 쉽사리 예정된 시간에 끝나지 않는다. 어떤 날은 집중해서 배이상의 성과를 내기도 한다. 하지만 아주 드문 일이고, 보통은 예상보다 적은 일을 하고 잠자리에 든다. 결국 평균을 내보면, 예상되는 만큼의 일을 할 것이다.


 자 이제 잠자리에 누웠다. 보통 밤에 꿈을 꾸진 않는다. 아마 8년째 똑같은 모양의 침대와 똑같은 높이의 천장,불을 끄면 창문을 통해 비치는 똑같은 가로등 빛, 그리고 똑같은 일상은 나에게 새로운 꿈 거리를 제공하진 않나보다. 가끔, 연달아 행복한 꿈을 꾸거나 불행한 꿈을 꿀 수 있겠지만, 대부분은 기억나지 않는다. 꿈 거리가 나오면 뭔가 다른 할 말이 있겠지. 오늘의 일상은 이제 끝.

Posted by WebPeace

<시작>

간단한 WebTool들의 Automation을 위해 cPAMIE를 통한 Internet Explorer의 Control을 많이 이용함

하지만, Internet Explorer의 Automation을 도와주는 cPAMIE는 다음 문제를 가지고 있다.

- 하위 호환성 문제 (cPAMIE for Python 2.4와 2.6의 문법 및 동작이 다름)
- COM(Component Object Model)을 통해 Internet Explorer과 통신하기 때문에 Windows 환경에 종속적
- 고급적인 Browser Control을 위해서는 COM에서 사용하는 함수를 알아야 함

이를 해결하기 위해 다양한 Platform에서 동작하는 WebBrowser Control (Automation) Tool인 Selenium을 이용

<Firefox 3.0.x 설치>

 Firefox 공식페이지

<Selenium-Core XPCom 및 Selenium-Core Server의 설치>

 Selenium-CoreXPI : (Firefox Module이므로 Firefox에서 설치) 
 Selenium-RC : 해당 파일을 다운 받아 selenium-server-1.0-beta-2 폴더만을 압축을 풀어 특정 폴더에 복사

<Selenium-Core Server의 실행>

 Windows나 리눅스/Mac의 Terminal을 열어 selenium-server의 압축을 푼 폴더로 이동하여 해당 명령을 실행함으로써 Server를 가동한다.

Prompt> java -jar selenium-server.jar -interactive

<Python-SeleniumRC Module의 설치>

- easy_install을 통해 SeleniumRC Client-Driver Python Module를 설치한다.

Prompt> easy_install selenium


<Script Test 예제 (Google 검색)>

- 다음 스크립트 파일을 Python에서 Test 해보도록 한다.

import selenium
# Selenium Connection 인스턴스 생성
a = selenium.selenium("localhost", 4444, "*firefox", "http://www.google.com")

# 해당 인스턴스 정보에 따라 Firefox에 창을 생성
a.start()

# http://www.google.com을 기준으로 /의 위치의 문서 열기 -> http://www.google.com/
a.open("/")

# q라는 form input 개체안에 SearchKeyword라는 단어를 입력한다
a.type("q", "SearchKeyword")

# BtnG 이름을 가진 버튼 클릭 (Google의 폼 전송 버튼이 BtnG)
a.click("btnG")

# 검색결과창의 HTML 소스를 긁어온다.
source = a.get_html_source()

# 창 닫기
a.close()

# 인스턴스 해제 및 Firefox의 종료
a.stop()
Posted by WebPeace

<시작>

shell 접속을 자동화하기 위해 Python에서 SSH를 접속하는 모듈을 필요로 함
해당 모듈이 paramiko이며 pycrypto에 대한 Dependency가 있어 먼저 pycrypto를 설치해야 함

(easy_install를 이용한 설치가 보통 쉬우나 win32에서는 pycrypto의 소스코드 컴파일에 따른 스크립트 수정이 필요하므로 각개격파로 설치)

(1) pycrypto 설치

  • 정식 배포본은 소스코드로만 배포되는데 소스코드의 컴파일을 위해서는 Cygwin의 MingW나 VS.NET 2003을 필요로 하므로 미리 컴파일된 파일을 첨부했음

    Pycrypto Win32 Binary for Python 2.4: pycrypto-2.0.1.win32-py2.4.zip
    Pycrypto Win32 Binary for Python 2.5: pycrypto-2.0.1.win32-py2.5.zip

    각자 자신의 컴퓨터에 맞는 Python 버전을 선택하여 바이너리를 설치하도록 한다. (Windows Installer이므로 쉽게 설치 가능함)

(2) Paramiko 설치

  • 정식 배포본 : paramiko-1.7.4.zip

    다운로드 후 압축을 푼다.
    시작 -> 실행 -> cmd (명령 프롬프트 열기)
    아래처럼 커맨드 창이 뜨면 python setup.py install이라 입력하고 엔터

C:\paramiko-1.7.4> python setup.py install

(3) 테스트

  • IDLE나 Python Command에서 다음과 같이 입력한다.

>> import paramiko
  • 아무런 에러없이 import가 진행되면 설치 완료


<Paramiko DEMO Test>

para_demo.zip

(1) 위의 demo파일을 다운로드 받아 특정 폴더에 압축을 푼다.
(2) demo.py 실행

C:\para_demo> python demo.py

<타 프로그램에 이용하기 위한 간단한 예제>

import paramiko import sys import socket import os # SSHClient 인스턴스 생성 client = paramiko.SSHClient() # 저장된 Host 키값이 없으면 Policy에 따라 자동적으로 Host 키값 추가 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # SSH 접속 정보 입력 client.connect(hostname='ipaddress', username='ID', password='PW') # 실행할 커맨드 입력 stdin, stdout, stderr = client.exec_command("ls -al") # 접속 종료 client.close() # SSH에서 결과로 뿌려주는 output 출력 (stdout) for line in stdout: print line.strip('\n')
주의) 이 프로그램은 cd나 pwd와 같은 명령어를 통한 폴더 이동 후 interactive한 path의 유지가 불가능함
둘 이상의 interactive한 명령어를 실행하려면 Thread를 통해 SSH의 Channel Session을 유지시켜줘야 함. 
이는 위의 para_demo.zip의 interactive.py 코드의 windows_shell()이나 posix_shell() 참조 
관련문서 : http://www.lag.net/pipermail/paramiko/2007-December/000582.html 

팁) 확인 해 본 결과 아래식으로 몇가지의 명령어를 동시 실행 가능하다 
(원래 터미널에서 ;로 여러 명령어를 한 줄에 쓸 수 있음)

# 명령어 리스트
cmd_list = ['cd target', 'ls -al', 'quelist']

# ;로 붙이기
req = ';'.join(cmd_list)

# 커맨드 실행
stdin, stdout, stderr = client.exec_command(req)
Posted by WebPeace

Python에서는 일반적인 형식의 데이터가 아닌 형태를 포함하고 있는 list를 정렬 할 때 key를 통한 효율적인 sort가 가능함

Key에 입력되는 Argument는 Variable이 아니라 Function 이름 (Pointer)임

# Sort를 하는 기준인 Key를 반환하는 Function : input된 list의 두번째 value를 반환
def sortrule_selection(item):
    return item[1]

# 위에서 정의한 Method
a = [[1, 5], [3, 4], [4, 7], [2, 6]]
a.sort(key=sortrule_selection)

# 또는 lambda를 이용하여 직접적으로 함수의 정의가 가능함, 위와 같은 기능을 하는 코드
a.sort(key=lambda item:item[1])
Posted by WebPeace

사이드바 열기