레이블이 도구인 게시물을 표시합니다. 모든 게시물 표시
레이블이 도구인 게시물을 표시합니다. 모든 게시물 표시

2016년 6월 9일 목요일

맥북에서 80 포트 포워딩

맥에서 주요 포트들은 보안으로 잠겨 있어서, 필요 시에 다음과 같이 패킷 포워딩 기법을 사용한다.

패킷 포워딩을 위해서 pfctl 도구 사용 예제이다.


명세한 포트 포워딩 적용하기
echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 5000
" | sudo pfctl -ef -

**
웹 접근의 기본 포트인 80 포트로 들어오는 모든(any) 패킷을 로컬의 5000번 포트로 던진다.

모든 포트 포워딩 제거하기
sudo pfctl -F all -f /etc/pf.conf

포트 포워딩 룰 확인 하기
sudo pfctl -s nat

정적으로 사용하는 방법
1. /etc/pf.anchors/ 위치에 설정 파일 구문 추가
2. /etc/pf.conf 에 추가한 설정 파일 로드 구문 추가

참조


pfctl
: control the packet filter (PF) and network address translation (NAT) device.
The pfctl utility communicates with the packet filter device. It allows ruleset and parameter configuration and retrieval of status information from the packet filter.

Mac pfctl Port Forwarding

2016년 6월 3일 금요일

Pycharm에서 Golang 사용 환경 구성하기

파이참(PyCharm) 사용자가 맥에서 Go 언어에 대한 환경 구성하는 과정이다.

설치


홈페이지 주소 : https://golang.org

가. Golang을 다운로드 및 설치 한다.
 => 기본 경로은 /usr/local/go 이다.
 => 도구 설정 시 사용 될 “Go SDK 경로”가 된다.

도구 설정 ( Pycharm )


가. “설정” / “플러그 인” 에서 “Go”를 추가한다.
 => 재 시작 하면 “Go” 플러그인 관련 UI가 생성된다.

나. “설정”에서 “Go SDK 경로”를 설정 한다.
 => Go가 있는 위치를 지정하면, “버전” 정보가 표시된다.

다. “Run”에서 “go run <file_name>” 형태로 실행된다.

2016년 2월 25일 목요일

piwik 데이터 모델 요약

오픈 소스 기반의 웹분석 도구인 PIWIK의 데이터 모델을 요약한다.

1. 데이터 생성 과정을 다룬다.
2. 테이블의 용도 및 필드명을 설명한다.
3. 테이블 명세서 시트를 기록한다.

첫번째 데이터 생성 과정이다.

가. 로그 데이터 수집 (Log Data)
나. 보관 처리 (Archiving Process)
다. 보관 데이터 생성 (Archive Data)

**
데이터 수집 대상은 4가지로 요약할 수 있다.
 - visits(방문), action types(행위), conversions(전환), ecommerce items(전자상거래)
조회 효율을 높이기 위해서 패턴 질의에 대한 보관(요약:summary) 데이터를 만든다.

2016년 1월 20일 수요일

자바 사용 시 궁금한 내용 메모하기

본문은 자바 프로그래밍 언어를 접하면서 궁금한 내용들을 정리한다.

자바 로컬 환경 구성하기

1. 통합 도구 설치
    1. 통합 개발툴 이클립스 설치
2. 웹 어플리케이션 서버 환경 구성
    1. 톰켓 설치
        1. 바이너리 다운로드
        2. bin/*.sh 실행권한 주기
    2. 이클립스 서버 환경에 톰켓 위치 등록
        1. 프로젝트 구동시에 호출됨
3. 프로젝트 생성하기
    1. 빌드 도구를 통한 자동 관리
    2. 빌드 설정은 매우 난해함
4. 프로젝트 구동하기
    1. 서버(톰켓) 설정에 프로젝트 지정
    2. 서버 구동
5. 브라우저에서 접속
    1. 기본 8080

자바 구문 이해하기

Extends
구문 : A extends B
A는 B 객체를 확장 표현한다.

접근 제어자 (modifier)
(default) 동일 패키지 클래스
public 모든 클래스
protected 동일 패키지 클래스 + 하위 클래스
private 클래스 내

super
생성자는 상속 안되는 이유로 사용한다.
부모 클래스 생성자를 호출한다.

final
최종 상속 객체 선언한다.
클래스나 매소드의 재정의(Overriding)를 막는다.
초기화 이후에 변수의 변경을 막는다.

Implements
구문 : A implements B
A는 B 인터페이스들의 수행 로직을 표현한다.

이클립스 유용한 단축키 (for Mac)

본문 사용 라이브러리 등록하기
 - 시프트 + 커맨드 + O
소스코드 정리 하기
 - 시프트 + 커맨드 + F
클래스 찾아 다니기
 - 커맨드 + 마우스 클릭
 - 앞/뒤 : 알트 + 커맨드 + 좌/우 키
컨텐츠 이름 완성 돕기
 - 알트 + 스페이스 (추가 설정)
리소스 검색
 - 시프트 + 커맨드 + R


커버 사진


2015년 12월 5일 토요일

python을 위한 IDE 도구 Pycharm 소개

맥북(Mac)을 사용하고, 데이터 분석을 위해 Python을 접했다면, 보통의 경우 vim과 ipython notebook을 자주 사용한다.
Django나 Flask 같은 복잡한 (웹) 어플리케이션 개발의 길로 들어 선다면, IDE 도구가 필요하다.
* IDE (Integrated Development Environment : 통합 개발 환경 )

본문에서는 Pycharm 이라는 IDE 도구가 주는 즐거움을 소개한다.

1. xml과 xsd 사용 편의
xml 을 작성 할때, xsd를 기반으로 요소 목록 제공 및 규칙 검사를 자동 수행한다.

2. 손쉬운 virtualenv 환경 구성
python의 버전이 복잡한 경우에도 직관적으로 가상화 환경 관리를 할 수 있다.
프로젝트 별로 가상화 환경을 손쉽게 연결한다.

3. 다양한 프로젝트 지원
Flask, Django, Google Web Engine 등과 같은 프로젝트 생성시에 기본 구조를 만들어 준다.

4. 리팩토링(Refactoring) 지원
함수, 변수 같은 참조되는 객체(Object)의 이름을 일괄 변경해 준다.

5. 코드 정렬(reformat code) 기능
코드의 포맷에 따라 Beauty 코드로 자동 정렬 해준다.

6. 데이터베이스(DB) 연동 기능
다양한 DB 클라이언트 기능을 제공한다.

7. 다양한 플러그인 지원
IDE 도구 사용을 필수로 만드는 중요 요소이다.
All in one을 가능하게 하는 확장 영역이다.


에디터(Editor)와 개발자 vs 자동차와 운전자 is very similar.

스스로에게 질문해 보자.
당신은 베스트 드라이버 인가? 좋은 차를 가지고 있는가?


이 글을 본 당신은 좋은 차를 가지게 될 베스트 드라이버다.

2015년 12월 2일 수요일

미들웨어 소프트웨어 RabbitMQ 요약

AMQP (Advanced Message Queuing Protocol)는 메세지 기반의 미들웨어(Middleware)를 위한 표준 어플리케이션 레이어 프로토콜이다.
RabbitMQ는 AMQP를 수행하는 오픈소스 미들웨어 소프트웨어이다.

본문은 RabbitMQ 가이드를 기반으로 AMQP의 이해와 설치 팁을 다룬다.


AMQP의 주요 요소


브로커(Broker)

생산자(Publishers/Producers)로 부터 메세지를 받아서, 소비자(Consumers/Subscriber)에게 전달 한다.
큐에서 메세지 삭제를 위해서는 다음의 두 가지 선택 사항이 있다.
 - 브로커가 어플로 메세지를 보낸 후 : 성능 이점
 - 어플에서 응답을 받은 후 : 안정성 이점
브로커로의 연결(Connection) 후 채널(Channel)을 열어 반복적인 TCP 연결을 막는다.

선언 영역

Exchange는 다음과 같은 타입을 선언할 수 있다.

Default
기본적으로 큐와 동일한 이름의 경로키(routing key)를 암묵적으로 사용한다.
Direct
경로키와 일치하는 큐로 메세지를 보낸다.
소비자가 여럿 일 경우, RR(Round Robin)과 같은 분배 알고리즘을 사용한다.
Fanout
모든 큐로 복제 메세지를 보낸다.
Topic
다양한 publish/subscribe 패턴으로 정의 가능하다.
Headers
헤더에 해당되는 큐로 메세지를 보낸다.

Queue는 다음과 같은 속성과 함께 선언될 수 있다.

Name : 큐의 이름
Durable : 브로커 재시작 시에도 살아남
Exclusive : 단지 하나의 연결만 사용됨, 연결을 닫으면 삭제
Auto-delete : 소비자가 한개도 없으면 삭제됨
* 속성은 큐가 생성되기 전 선언

수행 영역

Bind는 Exchange와 Queue를 연결한다.

Exchange가 수단(방법)이고 Queue를 목적지라고 할때, Binding은 경로를 말한다.

Consume은 다음 두가지 방법으로 수행 할 수 있다.

Push API : 등록된 소비자에게 메세지가 배송됨
Pull API : 필요할때 메세지를 당겨옴




RabbitMQ 설치 시 유의 사항


관리(management) 플러그인 설치

rabbitmq-plugins enable rabbitmq_management

관리 Web UI 접속 (기본 접속 포트 : 15672)

기본으로 제공되는 Guest 계정은 원격 접속을 허용하지 않는 이유로, rabbitmqctl (cli 관리 명령어)로 관리 계정을 만들어 접속한다.
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

2015년 8월 18일 화요일

프로그래밍 언어의 필요성과 코드 관리 방법

데이터를 가공하고 관리하는 툴들은 정말 많다. 용도에 따라 다양하고 강력한 툴들이 존재한다.
하지만, 툴로만 해결 하기에는 제약으로 인한 비효율적인 상황이 자주 발생된다.

UI적으로 해결이 안되는 부분에 대한 고민은 "액셀의 VB 매크로"가 대표적이다.
최근에 블로깅한 나임(KNIME)에서도 외부 확장 프로그램 언어 노드를 통해서, 데이터를 다루기 위한 만능 툴을 만들었다.

데이터를 다루는 사람이라면 어떤 식으로든 프로그래밍 언어에 대한 깊은 이해가 필요하다고 예기하고 싶다.

생각 (THINK) => 프로그램 언어 (LANGUAGE) => 응용 프로그램 (APP) => 데이터 다루기 (DATA)

* 자연 속에 현상을 유심히 관찰한 그 경험들이 프로그래밍에 반영된다.
* 프로그래밍 경험을 통해서 응용 프로그램들을 더 잘 이해하고 다룰 수 있다.
* 만들어진 프로그램에는 제약이 발생하고, 해결을 위해서는 프로그램을 만들 필요가 있다.

KNIME에서 프로그래밍 언어를 사용한 것과 UI만을 이용한 것,두 가지 방식을 통해서 부연 설명을 한다.
작은 단위로 모듈화 된 것은 복잡한 프로젝트에서 장점이 될 수 있지만, 논지는 구현해야할 새로운 기능(예제, 피봇팅)에 있다.
UI 기능을 통해서 피봇(PIVOT)을 하면, PIVOT에 대한 UI 용어를 이해해야 하고, 귀찮을 만큼의 마우스 클릭이 필요하다.
반면, 프로그래밍 언어를 사용하면, 익숙한 언어를 통해 PIVOT 부분을 한 줄로 표현할 수 있다.
CODE# out = df.pivot_table(index='time',columns=['server_ip','item'],values='temp')
심플한 예제지만, 이 것이 말하는 편의성에 대해서는 각자의 상상에 맡겨 본다.
그리고, 툴에서 제공되지 않는 기능이 필요할 때는 이 것이 툴의 봉인을 불어 줄 것이다.

프로그램 언어를 한다는 것은 코드를 관리해야 한다는 필연을 끌어내고, 코드 관리를 위한 툴을 익힐 필요가 있다.

리누스 토발즈에 의해 고안된 GIT라는 툴이 있다.  개발자들은 누구나 아는 툴이지만, 데이터를 다루는 사람에게는 생소할 수도 있다.
GIT의 대표적인 온라인 서버인  GITHUB와 BITBUCKET를 활용해 보자.

* 개인적인 코드는 무료로 개별(PRIVATE)적인 저장소 (REPOSITORY)를 제공하는 BITBUCKET을 사용한다.
* 많은 유저에게 오픈하고 공동 작업을 진행 할때는 더 다양한 기능과 많은 사용자들이 있는 GITHUB를 사용한다.

모두 GIT을 기반으로 함으로, 사용 방법은 동일하다.

2015년 8월 13일 목요일

셀레니움(selenium)을 통한 인스타그램 자동 로그인 예제

편리한 웹 어플리케이션 테스팅 프레임워크(framework)인 셀레니움(selenium)을 통해서,
인스타그램 페이지에 자동 로그인 하는 예제를 다룬다.

일반적으로 크라울링(수집) 할때, 주소(url)에 의한 질의(Request)와 응답(Response) 이라는 단순한 패턴을 통해서 이루어진다. 하지만, 로그인과 같은 정보 제출(submit) 패턴을 만나면 난감해 진다.
이때, 셀레니움은 어려움에 처한 당신에게 구원에 손길을 제공할 것이고, 겸허한 마음으로 그 손길을 잡으면, 신세계를 경험할 수 있을 것이다.

예제는 인스타그램에 로그인 하는 패턴의 코드와 호출하는 과정을 담았다.
그리고, 수행 및 구동하는 화면을 캡처링 해 보았다.

참고 : http://www.seleniumhq.org

인스타그램 로그인 클래스 작성

In [2]:
from selenium import webdriver
#from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time

class instagram():
    def __init__(self):
        self.drv = webdriver.Firefox()
        self.drv.get('https://instagram.com')
    
    def login(self):
        drv = self.drv
        
        # 로그인 화면으로 전환하기,
        lo_login_button = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//a[contains(@href,'/login')]"))
        lo_login_button.click()
        time.sleep(3)
        
        # 로그인 정보 입력하기,
        lo_user = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//input[@name='username']"))
        lo_user.send_keys(g_username)
        lo_pass = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//input[@name='password']"))
        lo_pass.send_keys(g_password)
        time.sleep(3)
        
        # 로그인 하기,
        lo_login_submit = WebDriverWait(driver=drv,timeout=10) \
            .until(lambda drv: drv.find_element_by_xpath("//button[@tabindex='3']"))
        lo_login_submit.click()
        
        time.sleep(5)

수행하기

In [3]:
# 클래스 로딩
firefox = instagram()
# 로그인 액션 수행
firefox.login()
In [4]:
# 종료
firefox.drv.quit()

수행 화면 보기


코드 중에 g_username과 g_password는 (짐작하는 바와 같이) 본인의 개인 계정을 입력하면 된다.

자료 작성 중에 문득 이런 생각이 들었다.
프락시와 셀레니움 조합으로 광고 클릭 수를 늘릴 수 있을까? 구글은 어떤 방식으로 봇을 막고 있을까?

2015년 8월 12일 수요일

오픈소스 통합 분석툴 나임(KNIME) 소개

강호의 고수에게 소개 받은 분석 끝판왕 툴을 소개 하고자 합니다.

툴 이름은 KNIME
* 사이트 : https://www.knime.org

간략히 한 줄로 표현하자면,
데이터 분석 전과정(수집,전처리,분석,시각화,리포트)이 단위 기능(함수)으로 세분화(노드) 되고,
파이프라인을 통해, 멀티 데이터 플로우(Data Flow)를 시각적으로 표현하고 수행합니다.

기본적으로 Weka의 기계학습, R의 통계 패키지들이 제공되고, 파이톤/펄과 같은 코드를 노드에 담을 수 있습니다.
무한한 확장 가능성과 한 눈에 들어오는 데이터 플로우, 그리고 사용자 경험은 입가에 미소를 머금게 할 것이라 확신 합니다.

전에 블로깅한 "판다곰(Pandas) 주식 시세 확인"을 KNIME으로 구현한 예제 화면 입니다.
* 전번 블로깅 : http://data-rider.blogspot.kr/2015/07/pandas.html

파이톤 노드의 경우 판다곰의 데이터프레임(DataFrame)으로 인아웃(In/Out)을 처리 할 수 있으니, 판다곰 중독자들에게는 축복과도 같은 종합 선물 세트로 봐도 무방할 듯 합니다.

맥용 용량이 1.6G로 다운로드 시간이 꽤 걸리지만, 참는 자에게 복이 있으리....