임베디드 프로그래밍을 하다 보면 레지스터 등의 설정을 2의 보수로 해야 하는 경우가 많이 있습니다. int 값을 2의 보수 헥사값으로 표현하거나 또는 2의 보수 헥사 값으로부터 int 값을 구하는 경우 저는 주로 Python bitstring 모듈을 사용하곤 합니다.

대부분의 파이썬 모듈이 그렇듯이 bitstring 모듈 역시도 pip를 통해 아래와 같이 설치할 수 있습니다.

pip install bitstring

사용은 아래와 같이 bitstring 모듈을 import 를 하고~

from bitstring import Bits

헥사값을 넣어 줍니다.

num = Bits(hex="FFD856")

int 값을 구하기 위해서는 int 멤버 변수 값을 확인하면 되고 아래 예를 보면 -10154 임을 알 수 있습니다.

hex 값을 구하기 위해서는 hex 멤버 변수 값을 확인하면 ffd856 임을 알 수 있고~ bin 값을 구하기 위해서는 bin 멤버 변수 값을 확인하면 "111111111101100001010110' 임을 알 수 있습니다.



요즘 대부분의 컴퓨터는 64비트 OS를 사용하고 있습니다. 저는 시스템 트레이딩을 하기 위해서 파이썬을 사용하고 있습니다. 제가 사용하는 이베스트 증권사에서는 xingAPI라고 하는 시스템 트레이딩 API를 제공해 주고 해당 프로그램을 사용하기 위해서는 파이썬 32비트 버전을 사용해야 합니다.

시스템 트레이딩에 32비트 파이썬이 필요하다고 해서 32비트 파이썬을 따로 설치하는 것은 조금 불편할 것입니다. 딥러닝 등에도 사용을 하므로 64bit 파이썬을 설치하고 추가로 32비트 환경도 설치하는 것이 바람직한 것으로 보입니다.

아래 포스팅에서 구글 텐서플로우 라이브러리를 사용하기 위하여 다른 파이썬 버전을 설치하는 방법을 소개한 적이 있습니다.

https://iamaman.tistory.com/2018

저는 주로 아나콘다를 설치해서 사용하고 있고 아나콘다를 사용하면 64비트 파이썬이 설치된 환경에서 다른 버전 또는 다른 비트의 파이썬 환경을 만들 수가 있습니다.

현재 제 컴퓨터는 윈도우 64비트이고 파이썬은 3.6, 64비트 버전이 설치가 되어 있습니다. 관리자 권한으로 cmd 또는 파워쉘을 실행한 이후에 아래와 같이 명령어를 작성해주면 32bit 파이썬이 추가로 설치가 됩니다.

set CONDA_FORCE_32BIT=1

conda create -n py36_32 python=3.6 anaconda

activate py36_32

새롭게 설치된 32비트 파이썬은 아나콘다가 설치된 파이썬 폴더 아래의 envs 폴더 이하에 설치 됩니다.

C:\Anaconda3\envs\py36_32\python.exe

향후 32비트 파이썬을 다시 사용하기 위해서는 이 주소의 실행 파일을 사용하시면 됩니다.



회사에서 사용하는 MATLAB에 설치된 툴박스를 확인해 보니 Symbolic Math Toolbox 가 없어서 이에 대한 대체 프로그램으로 octave 를 사용하게 되었습니다. 물론 아래 포스팅에서 얘기했던 Python 의 sympy 와 같은 라이브러리를 사용해도 됩니다.

http://iamaman.tistory.com/1460

octave 는 아래 주소에서 다운로드 가능합니다. 사용하시는 운영체제에 맞는 설치 파일을 다운로드 해서 설치하시면 되겠습니다.

https://www.gnu.org/software/octave/download.html

octave command window 에서 아래와 같이 타이핑 하면 symbolic package 가 설치 됩니다.

pkg install -forge symbolic

설치 후에는 ver 라고 타이핑 해보면 아래와 같이 symbolic package 가 설치된것을 확인 할 수 있습니다.

symbolic package 를 사용할때는 아래와 같이 load 를 하고 사용하면 됩니다.

pkg load symbolic;

간단한 예제로 아래 포스팅에서 소개했던 원의 방정식에 대한 자코비안(jacobian) 매트릭스를 계산하는 방법에 대해 소개해 보려 합니다.

http://iamaman.tistory.com/2759

syms X Y % X Y symbolic 으로 정의

x = sym('x', [3,1]) % x = [a, b, r] 에 대한 symbolic 변수 정의

f= sqrt((X-x(1))^2+(Y-x(2))^2) - x(3) % 원의 방정식

jF = simplify(jacobian(f, [x(1), x(2), x(3)])) % jacobian 계산 및 simplify

결과는 아래와 같습니다.


nonlinear regression 등을 할때 jacobian 등을 많이 활용하게 되는데 octave 에 symbolic package 가 있어서 수식 계산할때 너무 편리한것 같네요.

이렇게 만들어진 수식은 아래 포스팅에서 소개했던 matlabFunction 함수를 사용하면 코드로도 변경이 됩니다. 그런데 MATLAB 에서는 다양한 옵션을 통해 코드 생성 결과를 다르게 할 수 있었지만 octave 에서는 function handle 의 형태로 나오는 것을 확인 할 수 있었습니다.

http://iamaman.tistory.com/202

jFFunc = matlabFunction(jF)

jFFunc =

@(X, Y, x11, x21) [(-X + x11) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), (-Y + x21) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), -1]

위 jacobian matrix 는 가장 마지막에 있는 -1 값이 고정 길이라 X, Y 가 벡터 입력인 경우 정상적으로 동작하지 않습니다. 따라서 아래와 같이 약간 수정해서 사용하면 되겠습니다.

jFFunc = @(X, Y, x11, x21) [(-X + x11) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), (-Y + x21) ./ sqrt((X - x11) .^ 2 + (Y - x21) .^ 2), -ones(size(X))];



Binary 파일에 대해 파싱을 해야 하는 일이 있어서 Python 을 사용하여 binary 파일을 읽고 ~ 해당 값을 hex 형태로 나타내는 코드입니다.

기존에 대부분 텍스트 파일 처리만 주로 했었고 binary 파일을 다룰 일은 별로 없었는데 … 역시 파이썬은 정말 간편한듯 하네요. 너무 좋아~


if __name__ == '__main__':

with open('data.elf', mode='rb') as file:

binaryData = file.read()

binaryDataString = ["{:02x}".format(x) for x in binaryData]

print(binaryDataString)


다행히도 바이너리 파일이 그리 크지 않아서 한번에 읽어들여서 간단하게 처리되는데 아래와 같이 hex 값이 나오네~



많은 공학도 분들이 MATLAB 의 사용법에 대해서 공부하실 거라고 생각합니다. MATLAB 은 아시는 바와 같이 매우 비싼 툴이고 업데이트를 위한 라이센스 유지비용 역시도 1년에 20~30 % 정도를 내는 걸로 알고 있습니다. 저는 학교에서 MATLAB 수업 과목의 조교를 했었고~ 이런 경험을 바탕으로 MATLAB 사용 방법을 소개하기 위해서 본 블로그를 만들었습니다. 개인적으로도 회사에서 MATLAB 을 사용한 업무를 하지만, 일반적으로 학생들이 학교에서 배우는 MATLAB 을 사용한 알고리즘 개발까지는 사실 MATLAB을 사용할 필요가 없다고 생각합니다.

제 블로그에서 소개했었던 Python, Scilab, Octave 를 비롯해서 매틀랩을 대신하여 알고리즘을 개발해 볼 수 있는 오픈소스 또는 프리웨어 소프트웨어들은 정말 많이 있습니다. 그렇다면 매틀랩을 쓸 수 밖에 없는 경우는 무엇이냐라고 한다면 제가 경험한 바로는 C, RTL 등의 코드 생성 분야와 Simulink 나 Stateflow 를 사용한 MBD(Model Based Design) 분야라고 볼 수 있을 것 같습니다. 학교에서는 Python, Octave 를 비롯한 오픈소스 소프트웨어들을 주로 사용하다가 회사에 와서 MATLAB 을 사용해도 늦지 않다고 생각합니다. 또한 MATLAB 만 잘하는 것 보다는 Python 과 같은 언어를 먼저 잘하는게 범용성과 실용주의적인 관점에서 더 낫다고도 생각합니다.

저는 요즘 아래 주소의 인프런(inflearn) 이라는 사이트에서 딥러닝 관련된 강좌를 보고 있는데 최근에 들어가보니 MATLAB 강좌도 있더군요.

https://www.inflearn.com

‘MATLAB으로 시작하는 프로그래밍’ 이라는 강좌이고 MATLAB 을 처음 접하시는 분들에게 유용할 강좌인것 같습니다. 비용도 무료이므로 부담없이 수강하실 수 있을 것 같습니다.

https://www.inflearn.com/course/matlab-%EC%8B%9C%EC%9E%91-programming/

다음으로 아래 주소의 tutorialspoint 사이트에서도 MATLAB 관련 Tutorial 들이 있더군요.

https://www.tutorialspoint.com/matlab/index.htm

영어 자료이긴 하지만 예제들도 굉장히 잘 정리가 되어 있어서 MATLAB 공부하는데 굉장히 좋은 자료로 보입니다. 공부하시는데 참조하시기 바랍니다.



기존에 저는 파이썬에서 selenium 을 사용하여 제가 필요한 웹관련 자동화를 해 왔습니다. 제 블로그에 일주일에 한 번씩 올라가는 로또 관련한 포스팅이나 매일 하고 있는 종목 검색 포스팅 등은 파이썬을 사용하여 Tistory Open API 로 포스팅이 되고 있습니다. 최근에 아래 포스팅에서 Autohotkey 에서 selenium 사용에 대해 소개 한 적이 있었는데, 파이썬에서 사용하던 method 이름과 조금 다르더군요.

http://iamaman.tistory.com/2021

그래서 오늘은 COM 객체 사용시 사용 가능한 함수 및 속성을 알아내는 방법에 대해서 소개하려합니다. 현재 자신의 컴퓨터에서 사용 가능한 COM 객체를 알고 싶은 분들은 아래 주소의 글을 참조해 보시기 바랍니다.

http://iamaman.tistory.com/2215

COM 객체 사용시 사용 가능한 함수 및 속성은 COM Object 의 멤버를 찾으면 되는 것입니다. 저는 현재 Autohotkey 에서 selenium 을 사용하여 chrome 을 자동화하고 있습니다. 그래서 selenium 의 함수 및 속성 을 찾아보려 합니다.

간단하게 Powershell 에서 아래와 같이 코딩하고 실행하면

$se = New-Object -ComObject Selenium.CHROMEDriver

$se | Get-Member

다음과 같이 사용 가능한 멤버 함수 및 속성의 목록을 확인할 수 있습니다.

확인을 해보니 Python 에서 selenium 을 사용할때는 멤버 함수 명이 소문자였고 언더바(_) 로 구분되는 형태였는데 Autohotkey 에서 selenium 을 사용할때는 그렇지가 않군요. 예를 들면 Python 에서는 find_element_by_id() 였다면 Autohotkey 에서는 FindElementById() 의 형태네요.



최근에 시간이 조금 있어서 julia 언어를 공부하고 있습니다. Julia 를 공부하면서 드는 생각은 문법적으로 MATLAB 과 Python을 섞어 놓은 거 같다는 것입니다.

아래 포스팅에서 매트랩을 사용한 연립방정식 계산 방식에 대해서 소개 한 적이 있습니다.

http://iamaman.tistory.com/246

오늘은 위 포스팅에서 사용했던 예제에 대해 julia 를 사용하여 똑같이 계산해 보려고 합니다.

줄리아 역시 MATLAB과 마찬가지로 매트릭스 연산이 기본입니다. 인자간의 계산을 하기 위해서는 .(점) 을 붙여야 하는 것이죠.

MATLAB 에서 연립방정식의 해를 구하기 위해 \ 또는 / 를 사용했는데 Julia 에서도 완벽하게 똑같습니다.

위 코드를 실행해 보면 다음과 같은 결과를 확인할 수 있습니다.

Julia 홈페이지의 벤치마크 결과를 보면 MATLAB 이나 Python 보다 속도가 월등히 빠른것을 볼 수가 있는데… 앞으로 계속해서 사용을 해 봐야 될 거 같습니다.

https://julialang.org/

일단 조금만 접해봐도 MATLAB 이나 Python 을 다루어본 사람에게는 그냥 알고 있던 언어 같다는 느낌을 주고 배열 인덱스가 1부터 시작한다는 것과 slicing, for, if 등의 문법, 그리고 수치 연산과 관련된 것들은 MATLAB 과 유사한데 …. filter(), map() 등과 같은 함수나 리스트 내장 등과 같은 것들은 마치 Python 을 다루고 있는 듯한 느낌을 많이 받습니다. 참~~ 재미 있는 언어네요.



  1. 프로그래머 2019.04.14 15:17

    안녕하세요!
    저는 독일 금융회사에서 줄리아 프로그래머로 일하고있어요
    줄리아는 신생언어인제 한국 포스팅을 본 반갑내요!

    종종 좋은 글 돌려주시기 기대합니다 ^^

    • 남성 2019.04.14 15:48 신고

      아 독일금융회사에서는 벌써 줄리아를 도입해서 사용 중이군요~ 줄리아가 신생 언어라 아직 실무에서는 적용이 많이 안 됐을 거라 생각했는데 이렇게 적용이 된다는 걸 보니 반갑네요 ^^ MATLAB 을 주로 사용하는 사람이라 julia 가 참 매력 있는 언어라는 생각이 들더라구요~ 공부 좀 많이 해봐야 겠네요!!

프로그래밍시 데이터들로부터 빈도를 측정하는 것은 매우 자주 있는 일 입니다. 이런 경우 프로그래밍언어에 따라서 다르 긴 하지만 hash 또는 dictionary 형태의 변수를 활용하여 데이터에 따른 빈도를 Count 할 수 있습니다.

저는 요즘 증권사 API를 사용해 보고 있고 주로 Python 을 많이 활용하는데 아래 주소에서 Counter() 에 대한 설명이 자세히 나와 있더군요.

https://data-flair.training/blogs/python-counter/

아래 코드와 같이 너무나 간단하게 데이터의 빈도를 세고 빈도 횟수에 따라 정렬하는 등의 작업을 할 수 있습니다. for 문 등을 사용하여 iteration 을 하고 싶은 경우 dict() 를 통해 dictionary 로 만든 후에 사용 할 수 있더군요. 아무튼 굉장히 편리 할 것 같습니다.

from collections import Counter


c=Counter(['a','b','c','a','b','a'])

print(c)

print(c['a'])

print(c.most_common())

for key,val in dict(c).items():

    print(key, val)

위 코드의 실행 결과는 아래와 같습니다.

Counter({'a': 3, 'b': 2, 'c': 1})

3

[('a', 3), ('b', 2), ('c', 1)]

('a', 3)

('b', 2)

('c', 1)



저는 시스템 트레이딩에 관심이 있어서 이베스트증권의 xingAPI 를사용해 보고 있습니다. 아직 제대로 된 로직을 완성한 것은 아니지만 생각나는 아이디어들을 코딩 해 보고 있습니다. 시스템 트레이딩을 이용하여 주식 투자를 하기 위해서는 호가를 계산할 수 있어야 합니다. 아래는 미래에셋증권 홈페이지에서 가져온 우리나라 주식 시장의 호가 가격 단위 입니다.

https://www.miraeassetdaewoo.com/hki/hki3061/n65.do

호가 가격 단위를 알아야 거래 하고자 하는 가격을 지정할 수 있고 주문을 넣을 수 있습니다. 물론 시장가로 주문을 한다면 거래 수량만 정하면 되기 때문에 이때는 필요 없을 겁니다. 호가 가격은 지정가 주문 거래시 꼭 필요한 정보입니다. 위에 표를 보시면 아시겠지만 거래소인지 코스닥인지, 기존가에 따라 호가 가격 단위가 달라집니다.

저는 현재 파이썬을 이용하고 있고, 호가를 계산하는 코드는 아래와 같습니다.

사용 방법은 위에 코드에 나와 있는 것처럼 다음과 같이 입력하면 됩니다.

hogaPriceReturn(기준가, 원하는 것과, 'kosdaq' or ‘kospi’)

ex) 코스닥, 현재가가 1만원인데 -2 호가의 가격, hogaPriceReturn(10000, -2, 'kosdaq')

위 코드를 돌려 보면 9980 이라는 결과를 얻을 수 있습니다.



저는 증권사 API를 사용하여 매일 기관 외국인 10억이상 순매수 종목에 대해서 검색을 수행하고 있습니다. 프로그래밍 언어로 Python 을 사용하고 있고, API 로 부터 추출된 종목 리스트를 전일비 상하락율에 따라 정렬을 해서 포스팅을 합니다.

이에 대한 예제는 아래와 같습니다. 예로 든 category 데이터에서 3 번째 인덱스 값이 전일 대비 상하락율입니다. 해당 인덱스에 따라서 전체 데이터가 정렬 되도록 하기 위해서 operator 모듈의 itemgetter를 사용합니다. itemgetter 에 3 이라는 정렬의 기준이 되는 인덱스 값을 넣어 줍니다. 기본 정열은 오름차순입니다.




내림차순으로 정열을 하고 싶은 경우에는 reverse 옵션을 True 로 설정하면 됩니다.

3 번째 인덱스가 첫 번째 정렬 조건이고 4 번째 인덱스가 두 번째 정렬 조건이라고 한다면 itemgetter(3, 4) 와 같이 순서대로 기준이 되는 인덱스를 넣어 주면 됩니다.

위 코드를 실행해 보면 아래와 같은 결과를 확인할 수 있습니다.



요즘은 굉장히 다양한 오픈소스 프로그램들이 있습니다. 


수치 분석에 주로 MATLAB 을 사용하곤 했지만 요즘은 MATLAB 을 꼭 써야 하는 것들이 아니라면 Python 을 주로 사용하고 있습니다.


회사에서는 차량용 MBD(Model Based Development) 개발을 위해 Simulink 환경에서 Stateflow 툴박스를 주로 활용하는데


모델링의 일부는 Stateflow API 를 사용하여 MATLAB 스크립트를 통해 자동으로 모델을 구성하는 작업을 하곤 합니다.


모델링 구성후에는 당연히 simulation 을 수행하고 simulation 을 마치면 Embedded Coder 를 사용하여 MATLAB 알고리즘/Simulink 모델에 대해 C 코드 생성후 타겟 보드에서 테스트를 진행 합니다.


위와 같은 작업들은 MATLAB/simulink 를 꼭 써야 하는 작업이므로 사용을 하지만, 제어기 로직 설계 하는 것 이외의 다른 분야들에서는 주로 Python 을 사용하고 있습니다.


Python과 같은 프로그램들은 오픈소스 프로그램이라 누구나 사용할 수 있으니 협업시에도 편한것 같네요.


Python 에서도 MATLAB 과 같이 예쁜 그래프들을 표현 할 수 있는데 matplotlib 모듈을 사용하시면 됩니다.


matplotlib 모듈의 홈페이지는 아래와 같습니다. 


https://matplotlib.org/gallery/index.html


위 주소에 들어가 보시면 다양한 그래프 예제들이 있습니다.


하니씩 실행해 보시는것도 재미 있을 겁니다. MATLAB 에 익숙하신 분들은 코드를 이해하는것도 조금더 편할 것 같네요.


matplotlib 는 Anaconda 를 설치하면 기본적으로 설치가 됩니다. 예전에 아래 포스팅에서는 각 모듈들을 하나하나 찾아가며 설치 했었는데


http://iamaman.tistory.com/377


그냥 간편하게 Anaconda 를 설치해서 사용하시는게 정신건강에 이롭더군요.


저도 그래프 하나 그려 봤는데~~ 다음과 같이 코딩을 하면 그래프를 쉽게 그릴수 있습니다.


MATLAB 에서 그래프 그리는것과 유사하죠~ savefig() 함수를 사용하면 아래와 같이 그림으로 저장도 할 수 있습니다. 

matplotlib 의 메뉴얼은 아래 주소에서 확인 할 수 있습니다. 


https://matplotlib.org/tutorials/index.html


아래 포스팅에서도 밝힌 바와 같이 티스토리 Open API 의 파일 첨부 API 는 이미지만 업로드 가능 합니다. 


http://iamaman.tistory.com/2077


저는 스크립트 언어로 주로 Python 을 활용하는데 Python으로 티스토리 Open API 의 파일 첨부 API 를 사용하여 이미지를 업로드 하는 방법에 대해 소개하려 합니다. 


위 링크의 글에서도 언급한 바와 같이 로또 포스팅의 텍스트는 Tistory Open API 를 활용하여 자동으로 업로드 하고 있고 Python 을 사용하고 있습니다. 


매번 반복되는 것들은 항상 자동화 하는게 좋죠.


파일 첨부 API 사용 코드는 아래와 같습니다. 아래 코드의 blogName, token, filepath 변수에 자신의 블로그에 맞게 원하는 파일을 설정하면 끝입니다.



위 코드를 실행해 보니 아래 가이드에서 확인한대로  status, url, replacer 값이 응답으로 오더군요. 

http://www.tistory.com/guide/api/post


status 는 응답코드로 200이 오면 정상으로 파일이 업로드 됐다는 뜻입니다. 정상이 아닐경우 400 이 뜹니다. url 은 말그래도 웹에서 접근할때의 그림 주소입니다. replacer 는 우리가 티스토리 글쓰기를 할때 해당 텍스트를 넣어주면 그림이 들어가는 겁니다. 

아래 그림과 같이 replacer 텍스트를 티스토리 에디터에서 붙여넣기하고

미리보기를 해보니 이렇게 그냥 그림이 나오더군요. 말그대로 텍스트로 해당 값을 넣어주면 그림으로 바뀌는 기능이더군요. 포스팅 작성시에 편리할것 같네요.


Autohotkey에서 DTW(Dynamic Time Warping) 를 사용한 글자 매칭


Autohotkey 는 간단한 단축키 활용에 쓰기 좋지만 복잡한 알고리즘 들도 만들어 사용하기 편리 합니다. 

우리가 프로그래밍 시에 사용하는 웬만한 데이터 타입들은 대부분 제공을 해 주고 Class 등도 만들 수도 있으니

프로그래밍 언어로 사용하지 않을 이유가 없는거죠.


요즘 저는 영어 단어에서 틀린 글자가 있는지 찾는 작업을 하고 있습니다. 


예를 들어 Autohotkey 라는 단어가 맞는 표현인데 Autuhotkey, autohutky 와 같이 잘못 씌여진 경우에 대해 찾아보는 작업 입니다.


Autohotkey, Autoit, Python, Powershell, Ruby 와 같은 단어가 정상적인 단어의 세트라고 할때


위 단어 셋트 중에 Autuhotkey 라고 잘못 쓴 단어가 어떤 단어와 얼마나 유사한지를 확인해 보고 싶은 겁니다.


이를 위해 패턴인식 책에 있는 알고리즘 중 DTW(Dynamic Time Warping)을 적용해 봐야 겠다고 생각 했습니다.


DTW(Dynamic Time Warping) 는 시계열 데이터 즉, 순서가 있는 데이터의 유사성을 측정하는 알고리즘입니다. 


https://en.wikipedia.org/wiki/Dynamic_time_warping


우리가 사용하는 단어도 사실은 순서가 매우 중요하죠. 


Autohotkey 라는 단어와 Atuoohtkey 라는 단어는 글자수나 그 구성된 알파벳은 같지만 엄밀히 다른 단어라고 볼 수 있습니다. Atuoohtkey 는 Autohotkey 를 잘못 타이핑 했을 가능성이 높은 단어인 거죠.


인간이 타이핑을 하다보면 이렇게 오타를 내는 경우는 비일 비재 하고 이런 오타들을 DTW와 같은 알고리즘을 이용해서 찾을 수 있을 거라고 생각 했습니다. 


이 이외에도 언듯 생각할 수 있는 분야는 다운로드 받은 드라마를 폴더 별로 정리한다던지 하는 등의 분류 작업 들입니다.


DTW 에 대한 공부를 위해 아래 웹 페이지들을 참조했고, 


http://www.speech.zone/exercises/dtw-in-python/


https://nipunbatra.github.io/blog/2014/dtw.html


http://www.smallake.kr/?p=17918


https://jeremykun.com/2012/07/25/dynamic-time-warping/


유사한 단어를 찾는 것이므로 dtw 의 Backtracking  과정은 생각 했습니다.


결과적으로 다음과 같은 dtw(ByRef testV) 함수를 만들 수 있었고 코드는 아래와  같습니다. 

reference 로 할 단어의 셋은 아래와 같이 설정했고~ 

refArray := ["Autohotkey", "Autoit", "Python", "Powershell", "Ruby"]


각 단어들을 dtw 알고리즘을 사용하여 어떤 단어와 가장 유사한가를 추천 받을 수 있습니다. 

아래와 같이 실행하면 

dtw("Autuhotkey")

dtw("autohutky")

dtw("Pithon")


각 단어들이 다음과 같이 어떤 reference 단어 셋과 일치하는 지를 확인 할 수 있습니다. 


이번주 EBS 미래강연 Q에서는 "4차 산업혁명 시대 어떻게 살 것인가" 라는 주제로 한양대학교 과학기술정책학과 김창경 교수님이 강의했습니다. 

요즘 4차 산업 혁명이라는 단어는 메스컴에 너무 많이 나와서 다들 들어보셨을텐데 기술에 대해 별로 관심이 없는 많은 분들은 잘 이해가 되지 않을 것이라고 생각 합니다. 아직까지는 실제로 우리 실 생활에서 4차 산업 혁명이라고 할만한 것들이 그리 많지 않아서 그럴 것도 같네요.

바둑 마스터가 되어 버린 알파고는 근 몇년만에 인간을 뛰어 넘었고 이를 본 우리는 경악을 금치 못했는데~ 알파고의 아버지 데미스 하사비스는 다음과 같이 얘기 했다고 합니다.

방송에서 교수님은 아래 그림과 같이  해석 하더군요. 사실 4차 산업 혁명 시기에 인간의 일자리 문제는 끊임 없는 이슈일 거라고 생각하고 사람에 따라 일자리가 늘 것이다 줄 것이다 의견이 분분한데... 

제 개인적인 의견은 능력만으로만 봤을때는 아마 정말 많은 사람들이 일자리를 잃게 될 것이고 이에 대한 해결은 결국 정치나 복지적인 측면에서의 접근 방법 밖에는 없을 것이라고 다소 부정적으로 생각합니다.

4차 산업 혁명의 특징은 무엇일까에 대해 설명하는데 첫번째로는 연결이라고 하더군요. 

또한 다가오는 미래에는 원유와 같은 화석 연료가 아닌 데이터가 가장 중요한 자원이다고 설명하면서 이런 데이터를 선점하기 위해서는 플랫폼을 장악하는게 중요하다고 말씀하십니다. 

이런 플랫폼 회사로 미국의 FANG 과 중국의 BAT 의 사례를 드는데 이해가 쉽게 되더군요. 

아래 장면의 사람은 앤드류 응이라는 AI 전문가인데 인공지능을 전기와 같이 써야 한다고 말했다고 하더군요.

요즘 저는 Deep learning 관련 책을 좀 보고 있고 Python 을 사용하여 TensorFlow 사용 법에 대해 공부 중인데... 그냥 수식으로만 봤으면 이해를 못했을텐데 어떤 식으로 접근해야 하는지 조금씩 감이 오더군요. 나도 이해가 될 정도면 Deep learning 기술들이 앞으로는 굉장히 범용적인 기술이 되겠구나 라는 생각이 들었습니다.

우리 나라의 전통적인 제조기업 중에도 인공지능을 접목하는 회사들이 생기고있는데 현대제철의 사례를 들더군요. 음....  과거 거래를 했던 회사라 괜시리 반갑더군요.  미국발 악재가 빨리 지나가야 할텐데... 쿨럭 ㅡㅡ;

아래 내용은 Nvidia 의 CEO 가 얘기 했다고 합니다. 

최근의 인공지능 적용 사례입니다. 아마 왓슨이 길병원 등에서 암진단을 한다는 건 많이들 들어보셨을텐데~ 

제가 생각하는 4차 산업 혁명의 가장 중요한 문제는 아래 내용인데 바로 속도 입니다. 정말 준비 없이 어~어~어~ 하다가 휩쓸려 가는 시대가 되지 않을까 합니다.

아래의 클라우스 슈밥이라는 분은 Fast Fish 라는 얘기를 했다고 하는데~

과거에는 큰 물고기가 작은 물고기를 잡아 먹는 시대였다면 미래에는 빠른 물고기가 큰 물고기를 잡아 먹는 시대가 될 거라고 하더군요.

우리나라는 4차 산업 혁명이 진행 되지 못하고 있다고 하는데... 기하급수 적으로 바뀔 세상의 쓰나미에 우리나라가 쓸려가진 않을까 걱정입니다.

미래 교육에 대한 하먼 박사라는 분의 시나리오도 얘기를 하는데 아래와 같다고 하네요. 뭐 요즘 유행하고 있는 MOOC(Massive Open Online Course) 을 생각하면 될것 같네요. 프랑스 같은 나라에서는 자체적으로 교육도 변하고 있던데... 우리나라의 학생들은 아직도 영어/수학 입시 학원에 목 메고 있으니 참 안타깝네요. 

요즘은 정말 인터넷만 있으면 공부하기 너무 좋은 세상이라 앞으로 학위라는건 정말 중요하지 않을것 같네요. 

미래에는 무언가에 대해 빨리 배울 수 있는 능력이 정말 중요해 질것이라는 말을 들은 적이 있는데 여기서도 비슷하게 얘기하네요.

4차 산업 혁명 시대를 대비하기 위한 학습을 위해서 온라인 공개 강의를 들으라고 얘기하더군요. 저도 처음에 Deep learning 공부 할때 www.inflearn.com 이라는 사이트에서 모두를 위한 "딥러닝 – 기본적인 머신러닝과 딥러닝 강좌" 를 들어봤는데... 아... 이거 참.... 이런 유익한 강의가 공짜라니 하고 생각한적이 있습니다. 

이런 온라인 강의 중에는 나노학위를 주는 곳도 있다고 합니다. 인터넷 강의긴 하지만 수강이 그리 쉽지는 않다고 합니다. 학습에 관심 있는 분들은 한번쯤 도전해 보시는것도 좋을것 같습니다.

개인적으로는 보고 나면 미래에 대해 약간 두려움이 생기지만 그래도 좋은 내용의 강의라고 생각이 듭니다. 한번쯤 보고 자극을 받아 보시는것도 좋을 듯 합니다. 마지막에 보니 시리즈로 강연이 이루어지는것 같더군요. 다음 편도 기대가 됩니다.


Autohotkey 를 사용하여 웹 자동화를 하는 경우 컴포넌트 오브젝트 모델(Component Object Model, COM) 을 사용하여 internet explorer 를 자동화 하곤 했는데~
 
최근에는 Chrome 을 주로 사용하기도 하고~ Python 에서 selenium 사용을 익히다 보니 Autohotkey 를 통한 웹 자동화에 소홀해 졌었습니다. 

그런데 최근 아래 포스팅을 보고 Autohotkey  에서 selenium 을 자동화 할 수 있다는 것을 알게 됐습니다. 


간단하게 정리한 과정은 다음과 같습니다.

1.  아래 주소에서 SeleniumBasic 을 다운로드 받고 설치 합니다.

2.  SeleniumBasic 설치시 WebDriver 도 설치가 되는데~  자신의 브라우저 버전과 안 맞아서 정상적으로 동작하지 않는다면 아래 주소에서 Third party software 부분에서 사용하고자 하는 브라우져의 WebDriver 를 설치 합니다. 


저는 현재 chrome 을 주로 사용하는데 ~ 과거 버전을 사용하고 있습니다. 그래서 최신 버전의  WebDriver 를 설치하니 정상적으로 동작하지 않더군요. 그래서 아래 주소에서 제 브라우저 버전에 맞는 WebDriver 의 버전이 무엇인지를 확인한 후에~  Chrome WebDriver 를 다운로드 받아서 설치 했습니다. 


chrome 의 버전을 확인하고 싶으시면 chrome 의 주소 표시 창에 chrome://help/  또는 chrome://version/ 이라고 치고 들어가 보시면 확인 할 수 있습니다.  저는 버전 54.0.2840.71 이어서~  ChromeDriver 2.25 버전을 아래 주소에서 다운로드 받았습니다.

 
다운로드 받고 압축을 푼 후에 SeleniumBasic이 설치된 폴더(Windows 7 : C:\Program Files\SeleniumBasic, Windows 10 : C:\Users\자신의계정\AppData\Local\SeleniumBasic ) 에 chromedriver.exe 파일을 붙여넣기 합니다. 

Autohotkey 에서 selenium 을 사용하는 예제 등은 첫 번째 링크의 예제를 확인해 보시기 바랍니다.

저는 다음과 같은 예제를 똑같이 따라 해 보니~ 

driver:= ComObjCreate("Selenium.CHROMEDriver") ;Chrome driver
driver.Get("http://the-automator.com/")
driver.findElementsByName("s").item[2].SendKeys("hello world")
MsgBox here

다음과 같이 정상적으로 동작하더군요. 


Autohotkey 에서 Selenium 사용시의 함수 이름 관련 글 : http://iamaman.tistory.com/2307 


  1. 김동민 2018.09.04 08:47

    안녕하세요 작성자님
    질문이 있어 글을 남겨봅니다

    위 스크립트 종료후에 바로 제어되고 있는 크롬창이 종료 되는데
    혹시 크롬창 유지 시켜주는 방법은 없을까요 ?

    • 남성 2018.09.04 13:09 신고

      프로그램이 종료 되기 때문에 크롬창이 꺼지는 것이므로 프로그램이 종료 되지 않게 해 주시면 되지 않을까요?

      아래와 같이 해 주니 프로그램이 종료되지 않고 따라서 브라우저도 살아 있네요.

      #Persistent
      ------Autohotkey 스크립트 ------
      return

  2. 김동민 2018.09.05 08:28

    감사합니다.
    막힌가슴히 뻥 뚤리네요!
    즐거운 하루 되세요 ^^

    • 남성 2018.09.05 13:45 신고

      도움되었다니 다행이네요. 방문해 주셔서 감사합니다. ^^

  3. 김동민 2018.09.05 20:01

    안녕하세요 작성자님
    염치 불구하고 질문좀 드리고자 또 방문드렸습니다..
    기존 파이썬으로 Selenium 을 이용하여 웹 자동화를 구성하다가
    오토핫키로 다시 해보고 있는데요

    driver.find_element_by_link_text("Expand All").click()
    위와 같은 파이썬 소스를
    driver.find_elementbylinktext("단계별A/S진행등록").click()
    위와같이 수정해보았는데 적용이 안되네요..
    혹시 방법이 있을까요 ??

    파이썬에선 잘 작동했는데 오토핫키는 뭔가 다른가보네요...ㅎ

    • 남성 2018.09.05 21:27 신고

      파이썬이랑 비교하면 함수 이름이 조금씩 다릅니다.

      아래 주소글 확인하면 Autohotkey 사용할때의 함수이름을 알 수 있을 거에요.

      http://iamaman.tistory.com/2307

      Python selenium 은 _(underscore) 로 구분된 함수 이름으로 만들었던데 Autohotkey 에서는 그렇지 않습니다. 예를 들어 질문하신 find_element_by_link_text 함수는 Autohotkey 에서는 FindElementsByLinkText 를 사용하시면 될겁니다.

      위 주소의 글 참조하면 다른 함수들 이름에 대해서도 어떻게 쓰는게 맞는건지 확인 할 수 있을 거에요.

  4. 징글징글벨라 2018.09.06 00:16 신고

    코드가 회사 컴에 있어서 지금은 확인이 안되고..

    사이트 들어가보니 잘못된 주소이거나 비공개 또는 삭제된 글이라네요 ~

    티스토리 계정 있어서 로그인 해봐도 안나오네여 ㅎㅎ

    • 남성 2018.09.06 01:28 신고

      어떤게 삭제 됐다는 건지....? 2307 글 삭제 안 됐는데 ...

  5. 김동민 2018.09.06 17:51

    ㅎㅎ 죄송합니다
    잠결에 쳐서 오타가 있었나봐요
    분명 다시 확인했었는데...ㅎ

    알려주신대로 일단 해결했습니다.

    2307 게시물에서도 참고 하고 공부해보고
    잘 모르겠으면 다시 찾아뵙겠습니다

    도움 정말 감사합니다!

  6. 셀레늄 2018.09.09 15:46

    셀레늄과 오토핫키를 어떤 경우에 같이 쓰게 되는건가요?

    • 남성 2018.09.09 18:35 신고

      웹 자동화를 하고 싶은 경우 셀레늄 라이브러리를 주로 사용하는데 언어 선택을 Autohotkey 로 한것 뿐입니다. Python 이든 C# 이든 자바든 편하신 언어 사용하시면 됩니다.

  7. named7 2019.03.07 17:15

    안녕하세요 작성자님
    게시글 올리신지 오래되서 답변을 해주실지는 모르겠지만
    질문이 있어서 댓글남겨요

    driver.findElementsByName("s").item[2].sendkeys(hello world) 와같이

    웹사이트 내 에있는 editbox에 키입력을하는건 성공을했는데 byname이 없고
    Classname&TagName 만 확인되는 버튼은 어떻게 클릭하는지 궁금합니다.

    driver.findElementsByClassName("btn").item[1].click() 이런식으로 작성을했는데 안되더군요..

    • 남성 2019.03.07 18:58 신고

      아래 주소 글 확인해보시면 사용가능한 함수 이름을 알수 있는데 FindElementByClass 라는함수를 사용해 보시는게 좋을것 같네요.

      https://iamaman.tistory.com/2307

아래 포스팅에서 MATLAB, Powershell, Python 에서 Outlook  을 사용하여 자동으로 메일 보내는 방법에 대해 알아봤는데요.




오늘은 Autohotkey 에서 아웃룩을 사용하여 자동으로 메일 보내는 방법에 대해 알아보려 합니다.

코드는 아래와 같습니다.

textBody =

(

안녕하세요. 남성입니다.


메일 보냅니다.

)


tempAttach =C:\Attach.jpg


obj := ComObjCreate("Outlook.Application")

newMail := obj.CreateItem(0)

newMail.Subject := "메일 제목"

newMail.Body := textBody

newMail.To := "받는 사람 메일 주소"


myAttachments := newMail.Attachments

myAttachments.Add(tempAttach)


newMail.Send()

ObjRelease(newMail)

ObjRelease(obj)

위 코드에 대해 간단히 소개하면

tempAttach 에는 첨부파일의 path 를 넣습니다. 다수의 파일을 첨부하고 싶다면 세미콜론(;)으로 구분합니다.

newMail.Subject 에는 메일 제목을 넣고 

newMail.Body 에는 본문의 텍스트를 넣습니다. 보통 본문은 여러 줄로 작성하니 위 예와 같이 textBody 라는 변수를 하나 만들어서 여러 줄로 텍스트를 넣을 수 있습니다.

newMail.To 에는 받는 사람의 주소를 넣습니다. 받는 사람이 여럿일 때는 마찮가지로 세미콜론으로 구분합니다.

추가로 참조를 넣고 싶다면 newMail.Cc 에 참조자의 메일 주소를 넣으면 됩니다.

저는 Autohotkey 를 사용하여 시간이 걸리는 작업을 진행시 작업이 끝났다는걸 알리기 위해 아웃룩 메일을 자동화 하곤 합니다.


Python 사용시 jupyter 를 많이 사용하곤 하는데~

jupyter 를 사용하여 R, Julia 도 코딩 할 수 있더군요.

그래서 오늘은 Julia 를 jupyter notebook 에서 사용하기 위한 방법에 대해 알아보려 합니다.

일단 저 컴퓨터는 Windows 7 64 비트 이고 현재 anaconda 가 설치된 상태 입니다.

anaconda 를 설치하면 Python 과 함께 jupyter 가 설치 됩니다.

다음으로 아래 주소에서 julia 를 설치 합니다. 개발 OS 에 맞게 설치하시면 됩니다.


다음으로 jupyter 에서 julia 를 사용하기 위한 모듈인 IJulia 를 설치합니다. IJulia 설치 방법은 아래 주소 있더군요.


위 조수의 설치 방법 대로 julia 를 실행하고 아래 명령어를 타이핑 합니다.

Pkg.add("IJulia")

IJulia package 가 설치 완료 되면 아래 명령을 통해 IJulia 를 실행 할 수 있습니다.

using IJulia
notebook()

그런데 우리는 jupyter 를 사용할 것이므로 Windows Command Line 에서 jupyter notebook 이라는 명령어를 써 줍니다.


그럼 이렇게 브라우저가 뜨면서 jupyter가 실행 되고 Julia 를 선택 할 수 있습니다.


이런 설치가 부담 스러운 분들은 julia 홈페이지에서 소개하는대로 juliabox 를 사용 할 수도 있으니 참고하시기 바랍니다.


이제 간단하게 사용해 보죠~ 아래 주소에 julia 를 사용하여 그래프 그리는 예제들이 나와 있습니다.


아래 명령어를 통해 PyPlot package 를 설치하고~

Pkg.add("PyPlot") # Install a different backend

다음과 같이 코딩하고 Shift + Enter 를 눌러서 실행하면~

using Plots
plot(rand(5,5),linewidth=2,title="My Plot") # The same plotting command works

이런 결과가 나옵니다.



Synology nas를 구매하고 이것저것 만지작 거려 보고 있습니다. 

이제 좀 익숙해져서 SSH 를 통해 접속해서 명령어들을 좀 만지작 거리고 있는데 

Python pip 가 없더군요.

일단 python -V 명령을 통해 파이썬 버전을 확인해보면 

2.7 버전이 기본으로 깔려 있더군요.

  • pip 설치는 매우 간단한데 다음과 같습니다.
  • ssh 를 통해 nas 에 터미널로 접속
  • root 로 로긴 (명령어 : sudo su -  )
  • wget https://bootstrap.pypa.io/get-pip.py
  • python get-pip.py

마지막으로 pip 라고 타이핑해서 다음과 같이 나오면 pip 가 정상적으로 깔린 겁니다.




  1. 조현진 2018.12.30 17:50

    질문좀 드립니다.
    써주신대로 pip 설치시 에러가 납니다.
    "Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/pip-18.1.dist-info'
    Consider using the `--user` option or check the permissions."
    이경우 어찌해야 하나요?

    • 남성 2018.12.30 18:27 신고

      에러를 보면 관리자 권한때문에 그런것 같은데 관리자 root 권한으로 변경후 설치해 보시는게 좋을것 같네요. root 권한으로 변경하는 방법은 sudo -i 라고 하면 될 겁니다.


어떤 컴퓨터 언어든 개발을 하기 위해서는 개발 환경을 갖추어야 되겠죠. 

저는 Python 코딩시 Anaconda 를 설치하고 아래 소개했던 Eclipse + Pydev IDE(Integrated Development Environment) 를 사용 합니다.


요즘은 Eclipse 환경 말고도 PyCharm 도 많이들 사용하는것 같더군요. 

그런데 이런 환경을 구성하는게 여의치 않은 경우에는 Cloud IDE 를 사용 하실 수도 있습니다. 

인터넷이 가능한 브라우저만 있다면 이러한 IDE 를 사용하여 Python 개발을 할 수 있습니다.

물론 Python 코드를 테스트 할때도 유용하게 사용 할 수 있습니다.

파이썬을 웹에서 실행하는 사이트는 아래 두 사이트가 검색 되더군요. 

  • 첫번째로 소개해 드릴 사이트는 pythonfiddle 인데 주소는 아래와 같습니다.


아래 그림과 같이 왼쪽에 Examples 가 있어서 예제를 확인해 가면서 코딩 할 수 있는게 장점인것 같습니다. 

Share 버튼을 통해 SNS, Email 등에 공유도 가능 합니다.



  • 다음으로 execute_python_online 이라는 사이트 입니다. 주소는 아래와 같구요. 


Project 버튼을 통해 여러 프로젝트를 관리도 가능 하고~ 오른쪽에 tutorial 링크가 있어서 문법을 참조하면서 코딩 할 수가 있습니다. 

물론 웹에서 코딩을 한 다음에 파일로 PC 에 다운로드도 가능하고 SNS 등을 통한 공유도 가능 합니다.


요즘 Python 을 사용하여 수치 연산을 많이들 하실 텐데 이런 경우 numpy 모듈을 주로 사용합니다.

execute_python_online 에서는 numpy 모듈도 설치가 되어 있더군요.

다음과 같은 numpy 코드를 실행 해 보면 정상적인 결과가 나옵니다. 위에 소개한 pythonfiddle 사이트에서는 numpy 모듈 사용시 에러가 나더군요.

import numpy as np

x = np.array([1.0,2.0,3.0])
print(x)

----------------------- Result ----------------------- 
sh-4.3$ python main.py
[ 1. 2. 3.]



Autohotkey 에서 정규표현식을 사용할 때 NeedleRegEx , Replacement 부분에 변수를 사용하고 싶은 경우가 있습니다. 

Python 등에서는 escape() 함수등을 제공해 줘서 이런 함수가 있나 했는데 Autohotkey에 이런 함수는 없더군요. 

그래서 검색을 좀 해보니 불가능 한게 아니었습니다.

어쩌면 Python 의 예보다 더 단순한게 할 수 있더군요. 

아래와 같은 텍스트가 있는 경우~ 

Var =
(
Line 1 of the text.
Line 2 of the text. By default, a linefeed
is present between lines.
)

Line 1,  Line 2  부분을 바꿔 보도록 하죠. 물론 이 경우는 변수를 안 쓰는게 맞지만 그냥... 예니까 변수를 써보죠.

NeedleRegEx 부분에 단순하게 변수  NeedleRegExVar 와 정규 표현식을 붙여서 NeedleRegExVar "\s+(\d+)"  를 쓰면 됩니다.

NeedleRegExVar=Line
Var2 := RegExReplace(Var,  NeedleRegExVar "\s+(\d+)","replaceText")

MsgBox % Var2

결과는 다음과 같습니다.


다음으로 위에서 바꿨던 replaceText 부분을 ' 로 감싸 보죠~ 이에 대한 코드는 아래와 같습니다. ' 로 감싸줘야 되니까  replaceVar "$1" replaceVar 로 처리 했고~ 

replaceVar='
Var3 := RegExReplace(Var2,"(replaceText)", replaceVar "$1" replaceVar )

MsgBox % Var3

결과는 다음과 같습니다.



Regular Expression 을 사용하는 경우 항상 테스트가 필요 합니다.

정규 표현식을 잘못 사용하면 돌이킬 수 없는 문제들이 발생 할 수도 있기 때문이죠.

그래서 오늘은 정규 표현식 테스트 사이트들에 대해 간단히소개 하려 합니다.

제가 구글링 해 본 바로는 Python 정규표현식 테스트 사이트로 아래 3개의 사이트가 나오더군요.




나머지 두 사이트는 파이썬 정규 표현식을 테스트만 할 수 있었습니다.

Cheat Sheet 가 있어서 정규표현식 문법이 생각 안날 때 참조하며 할 수 있다는 측면에서는 좋아 보였습니다. 

그런데 첫번째 링크인  https://regex101.com/ 의 경우 테스트 뿐만 아니라 코드 생성도 해 주더군요. 

모든 워드에 _postfix 라는 글자를 넣고 싶다고 해보죠~ 

다음과 같이 정규 표현식을 입력해서 테스트 해보면 모든 워드에 _postfix 를 넣을 수 있습니다.



다음으로 밑에 있는 code generator 버튼을 눌러 보면~ 방금 작성한 정규 표현식에 대해 Python 코드가 나옵니다. 


위 사이트에서 보시면 javascript, php, python, csharp, java, ruby, rust, golang, perl 에 대해 코드 생성을 해주네요~

정규 표현식 사용시 필수 사이트가 될 것 같습니다.



Python 에서 변수 내의 텍스트를 정규표현식에 사용하고자 하는 경우 re.escape 함수를 사용한다.

아래에는 tempText 라는 문자열 중에서  'Save','expressions', 'the' 라는 변수에 저장된 string 을 변경하는 예이다.





import re

tempText = '''
Save Favorites & Share expressions with friends or the Community.
'''
tempText2 = tempText

variables =['Save', 'expressions', 'the']

for var in variables:
  regStr = re.escape(var)
  tempText = re.sub(regStr, '', tempText, flags=re.I | re.MULTILINE)

print "-"*30 + "Before Change" + "-"*30
print tempText2

print "-"*30 + "After Change" + "-"*30
print tempText

위 예제 코드를 돌려 보면 다음과 같은 결과를 얻을 수 있다. variables 라는 변수내의 string 들이 정규표현식에 의해 정상적으로 치환 되는 것을 확인 할 수 있다. 

------------------------------Before Change------------------------------

Save Favorites & Share expressions with friends or the Community.

------------------------------After Change------------------------------

 Favorites & Share  with friends or  Community.




Python 사용시 다차원 배열 또는 튜플을 많이 사용 하곤 합니다.

이렇게 다차원으로 구성된 배열의 일부 Column 만을 뽑아 내고 싶은 경우가 종종 있습니다. 

이런 경우에는 zip() 함수를 사용하면 편리 합니다 .

아래 코드는 그 예제이며 tuple 이나 list 에서 똑같이 동작 합니다. 

print "-"*30 + "Tuple" + "-"*30

Multidimensional_tuple=((1,2,3),(4,5,6),(7,8,9))
print Multidimensional_tuple

Col1, Col2, Col3 = zip(*Multidimensional_tuple)

print Col1
print Col2
print Col3

# -------------------------

print "-"*30 + "Array" + "-"*30
Multidimensional_array=[[1,2,3],[4,5,6],[7,8,9]]
print Multidimensional_array

Col1, Col2, Col3 = zip(*Multidimensional_array)

print Col1
print Col2
print Col3

 위 코드에 따른 결과는 아래와 같습니다. 


각각의 모든 column 이 아니라 특정 column 만 추출하고 싶다면 다음과 같이 안 쓰는 부분들을 _(underscore) 로 처리 하면 됩니다. 

아래 예는 2 번째 column 만 추출 하는 경우의 코드 입니다.

_, Col2, _ = zip(*Multidimensional_array)


간만에 Python을 사용하여 C 확장 모듈을 만들어서 사용하기 위해 책을 펼쳐 들었습니다.

 

저는 열혈강의 파이썬이라는 책을 참조했고

 

아래 주소에서 열혈강의 파이썬 소스코드를 다운로드 받을 수 있습니다. 25장에 있는 C 확장 모듈 예제를 사용했습니다.

 

https://freelec.co.kr/bbs/read.asp?BBSName=LECPDS&SORTUID=53&page=1&id=18333

 

책에 있는 소스코드가 간단하길래 윈도우에서도 그냥 쉽게 될 줄 알았는데… 컴파일러가 뭔가 안 맞는 것 같더군요.

 

다음과 같이 작성한 setup.py 파일을 빌드 하는데… 어쩌구 저쩌구 에러가 쭉~

 

python setup.py build

 

구글링을 해도 그닥 잘 모르겠어서…

 

Virtualbox 에 Mint Linux 64 bits 를 설치하고 터미널에서 다음과 같이 해보니 간단하게 되더군요.

 

sudo apt-get install python-dev -y   # Python.h 를 설치하기 위함

python setup.py build

sudo chmod -R ugo+rX /usr/local/lib/python2.7/dist-packages/   # 파이썬 라이브러리 권한 설정

 

다음으로 아래와 같이 명령을 하니 firefox 가 정상적으로 뜨더군요.

 

역시 개발은 linux 인가 봅니다.


UUID(Universally Unique Identifier) 는 개체를 식별하기 위한 고유 번호이다. 사람의 주민 번호와 비슷하다고 생각하면 될 것 같다.

 

UUID 에 대한 자세한 설명은 아래 주소에서 확인해 보자.

 

https://ko.wikipedia.org/wiki/%EB%B2%94%EC%9A%A9_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90

 

오라클 데이터베이스나 마이크로소프트 등에서는 GUID (Globally Unique Identifier) 라는 이름으로 사용한다고 한다.

 

https://ko.wikipedia.org/wiki/%EC%A0%84%EC%97%AD_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90

 

어쨌든 이런 UUID 는 다양한 프로그램에서 생성할 수 있는데~ 오늘은 내가 주로 사용하는 Powershell, Autohotkey, Python 에서 생성하는 방법에 대해 간단히 소개하려 한다.

 

Powershell 에서는 아래와 같은 명령어를 통해 GUID 를 생성 할 수 있다.

 

[guid]::NewGuid()

 

ToString() Method 를 통해 string 으로 표현할 수 있는데~ 아래와 같이 여러 개의 GUID 를 만들 수 있다.

 

1..10 | foreach { [guid]::NewGuid().ToString()}  


 

다음으로 Autohotkey 에서는 아래 명령으로 GUID 를 생성할 수 있다.

 

TypeLib := ComObjCreate("Scriptlet.TypeLib")

NewGUID := TypeLib.Guid

MsgBox %NewGUID%

 

이런 결과가 나오는 것을 확인 할 수 있다.

 

 

Python 등에서는 uuid 라는 모듈이 있으며~ 아래와 같이 간단하게 random 한 uuid 를 생성 할 수 있다.

 

import uuid

uuid.uuid4()


 

uuid 모듈에 대한 자세한 설명은 아래 매뉴얼을 참조하기 바란다.

 

https://docs.python.org/2/library/uuid.html

요즘 데이터 처리 관련 내용을 좀 보다가 R 의 함수들을 python 에서 사용 할 수 있다는 것을 알게 되었습니다.

 

바로 rpy2 라는 모듈을 설치하면 되는데~

 

일단 아래 포스팅에서 소개한 바와 같이 R 을 설치 합니다.


http://iamaman.tistory.com/1517

 

R 을 설치한 후에는 위 포스팅에서 소개한 대로 R_HOME, R_USER 환경 변수를 설정합니다.

 

다음으로 Windows Rpy2를 설치 합니다. 아래 링크를 통해 자신의 파이썬, 윈도우 버전에 맞는 rpy2 whl 파일을 다운로드 받고~

 

http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2

 

Python package 설치 하듯이 아래와 같은 형식으로 설치 할 수 있습니다.

 

pip install rpy2-2.7.6-cp27-none-win32.whl

 


이제 rpy2 모듈을 사용하는 일만 남았네요~


엑셀을 사용하면 아래 포스팅에서 소개한 바와 같이

 

http://mwultong.blogspot.com/2006/10/numberstring.html

 

숫자를 글자로 읽게 만들 수 있습니다.

 

NUMBERSTRING() 이라는 함수를 사용해서 아래와 같이 처리가 가능 한거죠~

 

 

그런데 이런 비슷한 경우가 파이썬을 사용해도 가능 하더군요.

 

http://stackoverflow.com/questions/8982163/how-do-i-tell-python-to-convert-integers-into-words

 

 

위 주소를 보니 숫자를 글자로 읽게 만드는 모듈들로 inflect, pynum2word 모듈이 소개 되더군요.

 

현재 윈도우 7 64 비트를 사용 중인데 pynum2word 모듈은 pip 로 설치가 안되는 듯 해서 일단 inflect 을 사용해 봤습니다.

 

위 주소에 나와 있는 것과 같이 다음과 같이 pip 로 설치 가능 합니다.

 

pip install inflect

 

다음으로는 다음과 같이 샘플을 돌려 봤습니다.

 

 

마지막 숫자는 125948963 인데 다음과 같이 표현됩니다…. 읽기도 힘드네요~

 

one hundred and twenty-five million, nine hundred and forty-eight thousand, nine hundred and sixty-three


리눅스 사용자들은 홈 폴더에 대한 개념이 명확 하지만 윈도우 사용자들은 홈 폴더에 대한 개념이 명확하지 않은 경우가 많이 있습니다.

 

요즘 나오는 컴퓨터 운영체제들은 멀티유저용인 만큼 사용자에 따른 홈 폴더 사용은 필수 입니다.

 

Python 사용시 현재 사용자의 home 폴더에 접근 하는 방법에 대해 소개하려 합니다.

 

현재 제 컴퓨터는 Windows 7 64비트 입니다. 그리고 계정은 Administrator 입니다.

 

현재 사용자의 홈 폴더를 확인 하는 방법은 CMD 창에서 다음과 같이 echo %userprofile% 이라고 타이핑 하면 나옵니다.

 


 

컴퓨터가 달라지면 달라지면 당연히 홈 폴더 역시 바뀌게 될 겁니다.

 

따라서 홈 폴더에 대한 접근은 하드 코딩이 아닌 다음과 같은 코딩을 통해 접근 하는 게 좋다고 생각됩니다.

 

from os.path import expanduser

if __name__ == '__main__':

    home = expanduser("~")

    print home

 

위 코드를 실행해보면~ 다음과 같이 자신의 홈 폴더에 접근 할 수 있습니다.

 


아시는 바와 같이 Microsoft Office 제품군에서는 VBA를 활용하여 자동화가 가능 합니다.

 

http://iamaman.tistory.com/592


http://iamaman.tistory.com/1643


 

그런데 Visual Basic뿐만 아니라 다른 언어를 활용해서도 Office 자동화가 가능 합니다. 오늘은 Python 을 이용한 visio 그리기를 해보려 합니다.

 

구글을 좀 뒤져 보니 다음과 같이 좋은 예가 있더군요.



 

저는 현재 Windows 7 64비트를 사용 중인데~ Python 은 32비트를 사용 중입니다. 몇가지 package 들을 사용하기 위해 아래에서도 소개했던 Anaconda 를 사용하는데요~ Anaconda 를 설치하니 win32com 모듈을 그냥 사용 할 수 있더군요.

http://iamaman.tistory.com/1610


http://iamaman.tistory.com/1001


http://iamaman.tistory.com/1648


 

위 코드의 결과 아래와 같은 Visio 다이어그램이 나오게 됩니다.

 

 

좀만 공부해서 응용해 보면 다양한 다이어 그림들을 자동화 할 수 있을 것 같네요.



오늘은 좀 독특한 언어에 대해 소개해 드리려 합니다.

 

해당 언어의 이름은 DRAKON editor 라고 하고 홈페이지는 아래 주소와 같습니다.

 

http://drakon-editor.sourceforge.net/

 

DRAKON editor는 아래 그림과 같이 그래프를 사용해서 코딩을 하는 툴이라 할 수 있습니다.

 

홈페이지에서도 visual language 라고 되어 있네요. 홈페이지에는 러시아 우주 프로그램에 사용되었다고 하는데~ 요즘 자동차 쪽에서 이슈인 MBD(Model Based Design)와 비슷한 컨셉으로 보였습니다.

 

그런데 약간 사용을 해보니 완전 그렇지는 않은 게 MBD의 경우 MATLAB Simulink 등을 통해 그래프를 그리면 코드가 나오는 형태임에 반해 DRAKON editor 는 그래프를 그리고 해당 부분에 코드를 넣어줘야 하는 형태였습니다.

 

그래도 그래프를 통해 코드를 작성하니 코드의 흐름이 굉장히 명확해 져서 좋은 것 같다고 생각했습니다. DRAKON editor 에서는 C/C++, C#, Java, Erlang, Python, Tcl, Lua 에 대한 코드 생성이 가능했습니다.

 

아래 주소를 통해 다운로드 후에 설치 가능합니다.

 

http://drakon-editor.sourceforge.net/editor.html#downloads

 

DRAKON editor는 Tcl 로 만들어 졌고 Windows, Mac, Linux 에서 동작하는 Cross Platform 툴 입니다.

 

저는 현재 Windows 64비트를 사용하고 있는데 아래 그림에서와 같이 Active Tcl 을 다운로드 받아서 설치를 하고 drakon_editor1.26.zip 를 다운로드 받아서 압축을 푼 후에 drakon_editor.tcl 파일을 실행했습니다.

 

압축을 풀면 examples 폴더에 다양한 언어에 대한 예가 나와 있습니다.

 

DRAKON editor 를 실행해보면 다음과 같은 창이 나타납니다.

 

위 그림에 나와 있는 바와 같이 DRAKON editor 는 Save 버튼이 없습니다. 그래서 무조건 파일부터 만들고 실행을 해야 합니다. 파일에 수정 되는 부분들은 자동으로 저장이 됩니다.

 

저는 업무상 C 로직을 주로 구성하므로 아래 페이지의 tutorial 을 봤습니다.


http://drakon-editor.sourceforge.net/cpp/c.html

 

C 언어에서 흔히 사용하는 if, switch, 반복 문 등에 대해 구성이 가능 하고~

 

CTRL + B 를 누르거나 Generate Code 을 눌러서 코드를 생성 할 수 있습니다.

 

위 루프 문에 대해 PrintStringsFrom.c, PrintStringsFrom.h 파일이 생성됩니다. 생성된 파일을 열어 보면~~

 

for 문으로 구성 될 거라 생각했었는데~ 다음과 같이 goto 문으로 반복문이 구성되더군요.

 

지금까지 C 코딩을 하면서 이런 식으로 루프를 구성해 본적은 없었던 터라 첨에는 이게 뭔가 했었는데

 

이렇게도 할 수 있구나 생각하니 재미 있더군요. 글쎄…… For 로 구성하는 것과 goto 로 구성하는 것 중 어떤게 더 좋은 코딩 방식인지는 잘 모르겠네요.

 

+ Recent posts