요즘은 학생들도 학교에서도 스크래치나 파이썬과 같은 프로그램을 배운다고 하고~ 어찌 보면 프로그래밍이 필수인 시대가 다가오고 있습니다. 물론 Python이나 스크래치같은 프로그램을 배우는 것도 좋지만~ 개인적으로는 모든 사람들이 프로그래머가 될게 아니기 때문에~ 바로 쓸모 있는 것을 만들 수 있는 실용적이고 재밌는 컴퓨터 언어를 배우는게 좋다고 생각합니다.

그래서 저는 항상 오토핫키를 추천을 드립니다. 물론 Autohotkey 는 윈도우 전용 프로그램이고 리눅스나 맥에서는 사용 할 수가 없기 때문에~ 해당 OS를 사용하시는 분들에게는 추천을 드릴 수가 없지만… 어쨌든 우리나라에서는 Windows 를 가장 많이 사용하기 때문에 오토핫키를 추천드리는 편입니다.

Autohotkey 를 사용하면 Windows 에서 정말 다양한 어찌 보면 대부분의 작업들을 자동화 할 수가 있는데~ 그 중에서 오늘은 오토핫키를 사용해서 메모장을 열고 해당 메모장을 현재 마우스 위치로 이동시키는 방법에 대해서 소개하려고 합니다. 일단 메모장을 여는 가장 기본적인 방법은 아래와 같습니다.

1. Win 버튼 누르고 메모장 검색 후 실행

2. Win + R 눌러서 실행 창 연 후에 notepad 명령어로 실행

3. launchy 를 통해 note 정도만 쳐서~ 메모장 실행

launchy 에 대해서 모르시는 분들은 아래 포스팅들 참조하시기 바랍니다.

https://iamaman.tistory.com/911

https://iamaman.tistory.com/1421

https://iamaman.tistory.com/2054

그냥 머리 속에 생각나는 방법은 위 세 가지 정도가 다네요~ 그런데 Windows 에서 이렇게 프로그램을 실행하면 창이 열리는 위치가 대부분이 제멋대로입니다. 그래서 저는 이런 부분이 조금 불편하더군요.

그래서 Autohotkey 를 사용하여 메모장을 실행 시킨 후에 마우스 위치로 이동시키는 방법에 대해서 소개 하려는 것입니다. 일단 코드는 아래와 같습니다.

코드에 주석을 달아 놨으니 이해 하시는데 큰 무리는 없을 거라고 생각을 합니다. Win + N 단축키를 누르면 메모장이 실행되고 위에 소개한 대로 마우스 위치로 이동하는 것을 보실 수가 있습니다.


간단하게 메모장을 여는 방법에 대해서 소개를 했지만~ 다른 프로그램들에도 응용을 해 보실 수 있을 겁니다.



회사에서 사용하는 제 컴퓨터에는 MATLAB 이 설치가 되어 있지만, MATLAB이 설치가 안 된 PC에서는 OCTAVE 를 주로 사용하고 있습니다. OCTAVE 는 MATLAB 과 거의 유사한 문법을 사용하고 있어서 MATLAB 에서 사용하던 코드의 대부분을 재사용 할 수 있습니다.

저는 최근에는 주로 실험 데이터에 대해 분석하는 용도로 MATLAB, OCTAVE 를 사용하고 있고 데이터는 장비에서 주로 CSV 파일 형태로 로깅을 하고 있습니다. CSV 형태로 로깅된 파일을 분석하기 위해서는 OCTAVE 에 해당 csv 파일의 경로를 알려줘야 합니다. 그래야 읽을 수 있을 테니까요~

매번 경로를 m 파일에 적어 주는 것도 가능 하지만 파일을 매번 열어서 적는것도 굉장히 귀찮은 일인 것 같습니다. 이럴 때 주로 아규먼트를 사용하고~ 오늘은 Command Line 에서 OCTAVE 아규먼트 사용 방법에 대해서 소개하려 합니다.

일단 커맨드라인에서 옥타브를 실행하기 위해서 OCTAVE 실행 명령을 알아야 될 겁니다. 아래 그림과 같이 옥타브 바로가기 아이콘에 오른쪽 클릭을 하고 속성을 확인해 보면~ 명령어가 나옵니다.

OCTAVE CLI 를 실행하는 명령어는 아래와 같고~

%SYSTEMROOT%\system32\wscript.exe "C:\Octave\Octave-5.1.0.0\octave.vbs" --no-gui

OCTAVE GUI 를 실행하는 명령어는 아래와 같습니다.

%SYSTEMROOT%\system32\wscript.exe "C:\Octave\Octave-5.1.0.0\octave.vbs" --force-gui

제 컴퓨터에서 실행을 해보니 앞에 붙어 있는 wscript.exe 까지의 구문은 없어도 실행이 되더군요~ 따라서 아래와 같이 실행할 수 있었습니다.

CLI : "C:\Octave\Octave-5.1.0.0\octave.vbs" --no-gui

GUI : "C:\Octave\Octave-5.1.0.0\octave.vbs" --force-gui

OCTAVE Command Line Options 관련 문서는 아래 주소에서 확인할 수 있습니다.

http://octave.org/doc/interpreter/Command-Line-Options.html

다른 것들은 필요할 때마다 검색을 해 보시면 될 거 같고~ 커맨드 라인에서 m 파일을 실행하기 위해서는 위 옥타브 실행명령어 뒤에 m 파일의 path 를 넣으면 되고~ m 파일에서 받고 싶은 아규먼트는 또 그 뒤에 적어 주면 됩니다. 따라서 아래와 같은 명령 형태가 됩니다. 아규먼트는 공백을 구분자로 하기 때문에~ 추가적인 아규먼트가 있다면~ 한 칸 띄고 계속 써 주면 됩니다. 혹시 path 에 공백이 있는 경우에는 전체 path 를 쌍따옴표로 감싸서 넣어 주면 됩니다.

"C:\Octave\Octave-5.1.0.0\octave.vbs" --no-gui mFILEPATH csvFILEPATH

m 파일에서 argument 는 argv() 를 통해 받을 수 있습니다. argv() 는 Cell 타입을 리턴합니다.

저는 아래와 같이 간단하게 test.m 파일을 만들어 봤고~

argvsV= argv()

class(argvsV)

csvPath=argv(){1}

pause(5)

Windows CMD 창에서 아래와 같은 명령어로 실행해 봤습니다.

"C:\Octave\Octave-5.1.0.0\octave.vbs" --no-gui test.m test.csv

그럼 새로운 CMD 창이 뜨면서 아래와 같이 옥타브 실행 결과를 볼 수가 있습니다.

커맨드 라인에서 위와 같은 명령어를 계속 타이핑 하는 것은 불편하므로 아래 포스팅을 참조하여 배치 파일을 만들어서 사용하는게 훨씬 더 간편 할 것입니다.

https://iamaman.tistory.com/988

많은 분들이 모르시는 것 같은데… 배치 파일 또는 실행 파일에 파일을 drag & drop 하면 해당 실행 파일의 아규먼트로 들어가게 됩니다.



Windows Powershell 사용시 regular expression 을 사용하면 텍스트 처리시 정말 다양한 것들을 자동화 할 수가 있습니다.

Powershell regular expression 관련하여 검색을 하다 보니, 아래 주소에서 Powershell regular expression 관련 좋은 글을 발견 할 수 있었습니다.

https://powershellexplained.com/2017-07-31-Powershell-regex-regular-expression/#regex-matches

그 중에서 Powershell 에서만 사용할 수 있는 굉장히 특이한 사용법에 대해서 소개하려 합니다. 보통의 다른 언어에서 switch case 를 사용하는 경우 정확하게 매칭이 되는 경우에만 사용됩니다. 그런데 Powershell 에서는 특이하게도 switch case 에서 regular expression 을 사용할 수 있더군요. Powershell 에서 get-help about_Switch 명령을 통해 메뉴얼을 살펴보면 Regex 옵션을 주면 switch 의 입력에 대해 정규 표현식 매칭을 하고 그에 따른 동작을 하게 된다는 것을 알 수 있습니다.

위 주소의 글에 있는 예제를 실행해 보면~ 아래와 같이 정규 표현식을 사용하여 숫자 형식에 따른 구분을 할 수 있다는 것을 알 수 있습니다.



프로그래밍 언어를 사용하여 파일의 path 를 다루는 경우 path 를 합치고 분리하고 하는 과정은 매우 흔한 일입니다.

일단 Autohotkey 를 사용하여 path를 나누는 경우는 SplitPath 라는 명령어를 사용하면 됩니다.

그런데 합치는 경우에는 딱히 전용 함수가 없어서 그냥 string 을 붙여서 만들어야 합니다. 물론 string 을 붙여넣는것도 괜찮지만 잡스러운 처리가 필요한 경우들이 종종 있습니다.

예를 들어 아래 두개의 path 를 그냥 붙이게 된다면~


base := A_WinDir . "\System32\"

rel := "..\Media\test.wav"

fullpath := base . rel ; string 붙이기

아래와 같이 표시가 될 것 입니다. 보시다시피 그냥 문자 붙이기 이므로 .. (점점) 등이 그대로 표시가 됩니다. 위 path 중 rel 변수의 ..(점점) 은 상위 폴더를 의미 하므로 path 를 붙이기 전에 그에 맞게 처리를 해 줘야 합니다.

이런 문제를 쉽게 해결하기 위해서 Windows 내부의 함수를 사용할 수 있고 path 를 붙여 주는 함수로 PathCombine 이라는 함수가 있습니다. 해당 함수는 Shlwapi.dll 파일에 들어 있으므로 DllCall 명령을 통해 사용할 수 있습니다. 해당 함수를 아래와 같이 함수로 만들어서 사용하면 편리할 것입니다.

PathCombine(abs, rel) {

VarSetCapacity(dest, (A_IsUnicode ? 2 : 1) * 300, 1) ; MAX PATH

DllCall("Shlwapi.dll\PathCombine", "UInt", &dest, "UInt", &abs, "UInt", &rel)

Return, dest

}

위 함수를 사용하여 아래와 같이 path 를 join 해 보면~

MsgBox, % PathCombine(base, rel)

아래와 같이 알아서 상위 폴더로 설정하고 path 를 붙여 주는 것을 확인 할 수 있습니다.

Autohotkey DllCall 사용 방법에 대해서는 아래 주소에 메뉴얼이 있으니 확인해 보시기 바랍니다.

https://www.autohotkey.com/docs/commands/DllCall.htm



Autohotkey 사용시 scite4autohotkey 를 사용하여 주로 편집을 하는데~ scite4autohotkey 는 너무나 좋지만 한가지 단점이 있습니다. 프로그램이 한 개만 실행되서 다른 Autohotkey 파일을 동시에 보거나 할수가 없다는 것입니다.

이런 문제들은 제 경험상 검색을 해보면 누군가는 항상 해결방법을 올려 놓더군요~ 그래서 검색을 해보니 아래 주소에서 답을 찾을 수 있었습니다.

https://www.autohotkey.com/boards/viewtopic.php?f=6&t=62&start=180#p24690

Joe Glines 라는 유저가 답변을 달아 놓은 것인데 Joe Glines 님은 Autohotkey 관련 유투브 채널도 있는것 같더군요. Autohotkey 유저들과의 인터뷰 내용이나 강좌 내용들을 볼 수 있습니다. 관심있는 분들은 한번쯤 방문해 보시기 바랍니다.

https://www.youtube.com/user/JoeGlines

scite4autohotkey 가 두 개 이상 실행되도록 설정하는 방법은 다음과 같습니다.

※ SciTEUser.properties 파일에 아래 내용을 추가 해 주면 scite4autohotkey 를 두 개이상 열 수 있습니다.

# Open multiple instances

command.name.17.*=Open in New Window

command.mode.17.*=subsystem:2

command.shortcut.17.*=Ctrl+Shift+N

command.17.*="$(SciteDefaultHome)\SciTE.exe" -check.if.already.open=0 -save.session=0 "$(FilePath)"

저는 “# Add here your own settings” 라고 된 부분 아래에 아래와 같이 코드를 넣었습니다.

위 코드에서 보시는 바와 같이 단축키는 Ctrl+Shift+N 으로 설정 되어 있으므로 Ctrl+Shift+N 을 누르면 새로운 scite4autohotkey 창이 나오는 것을 확인 할 수 있습니다. 단축키를 변경하고 싶으면 원하는 내용으로 변경하시면 될 겁니다.

scite4autohotkey 에서 위에서 소개한 단축키를 눌러보니 아래와 같이 scite4autohotkey 새로운 창이 열리는 것을 확인할 수 있었습니다.

※ SciTEUser.properties 파일의 위치는 컴퓨터에 따라서 조금씩 달랐는데 제가 사용하는 윈도우 컴퓨터들은 아래 주소에 있었습니다.

Windows 10

D:\Documents\AutoHotkey\SciTE\SciTEUser.properties

Windows 7

C:\Users\계정\Documents\AutoHotkey\SciTE\SciTEUser.properties



최근에 매트랩 브러시 기능을 자주 사용하고 있습니다. 그래프를 그리고 유효한 데이터를 선택하기 위해서 아래 포스팅에서 소개를 했었던 브러시, 데이터 커서 기능을 굉장히 많이 사용하고 있고 브러시 된 데이터들을 변수를 저장하여 MATLAB 워크스페이스에서 가공을 하고 유효한 데이터들을 얻는 작업들을 수행하곤 합니다.

https://iamaman.tistory.com/2830

위 포스팅에서 브러쉬 된 데이터들을 “변수 만들기” 를 통해서 변수로 저장할 수 있다는 것을 소개한 적이 있었는데~ MATLAB 에서는 조금 더 다양한 방법으로 brush 된 데이터들에 접근할 수 있었습니다.

일단 아래와 같이 그래프를 하나 그리고~ brush on 을 해 줍니다~

x=1:10

p = plot(x)

brush on

Figure 창에서 데이터들을 선택한 후에~ 보통은 오른쪽 클릭을 해서 “변수 만들기” 를 하지만 아래와 같은 명령을 통해서도 brush 된 데이터를 변수로 만들 수 있습니다.

일단 브러시 된 데이터들의 인덱스는 아래 명령어를 통해서 확인할 수 있습니다.

ind = find(get(p, 'BrushData'));

다음으로 인덱스에 따른 X, Y 좌표의 값들은 아래와 같은 명령어를 통해 변수로 만들 수 있습니다.

brush = logical(get(p, 'BrushData'))

xd = get(p, 'XData')

yd = get(p, 'YData')

brushed_x = xd(brush)

brushed_y = yd(brush)

brushed_x, brushed_y 변수를 확인해 보면 브러쉬 된 데이터가 저장 된 것을 확인할 수 있고~ 만약 3차원 그래프라면 z 축의 값도 동일한 방식으로 구할 수 있습니다.

위 코드에서 plot 핸들을 p 라는 변수로 받아서 사용을 했는데~ plot 은 axes 의 Children 입니다. 따라서 아래와 같이 gca 의 ‘Children’ 속성을 통해서도 똑같이 plot 핸들을 구할 수 있습니다.

p = get(gca, 'Children')

gca 키워드에 대해서는 아래 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/174

추가적으로~ 제가 많이 참고 하는 사이트로 “Undocumented Matlab” 이라는 사이트가 있는데~ MATLAB 을 조금 더 파워풀하게 사용하고자 하시는 분들은 아래 사이트에 방문해 보시기 바랍니다.

https://undocumentedmatlab.com

MATLAB brush 데이터에 접근하는 다양한 방법들은 아래 포스팅을 통해서도 확인할 수 있습니다.

https://undocumentedmatlab.com/blog/accessing-plot-brushed-data

그리고 위 포스팅 내용 중 uiinspect 라고 하는 괜찮은 유틸을 확인할 수 있었는데~ 해당 유틸은 아래 주소의 File Exchange 사이트를 통해 다운로드 받을 수 있습니다.

https://kr.mathworks.com/matlabcentral/fileexchange/17935-uiinspect-display-methods-properties-callbacks-of-an-object



MATLAB 을 사용하여 알고리즘을 개발하고 분석하면서 MATLAB 의 다양한 그래프 기능을 사용하실 것이라고 생각합니다. 10 년도 전에 MATLAB 을 학부 시절에 접하고, MATLAB 의 그래프 기능들이 정말 유용하다는 생각을 했던 기억이 있습니다.

오늘은 MATLAB 을 사용하여 그래프의 영역을 나타내는 방법에 대해서 조금 소개를 하려 합니다.

예를 들어 아래 두 그래프로 둘러싸인 영역을 표시하고 싶을 때 MATLAB으로 어떻게 표현해야 되는지에 대해서 소개를 하려 합니다.

y = x+3

y = 2*x-6

위 두개의 그래프로 둘러싸인 영역을 표시하는 간단한 코드는 아래와 같습니다. 아래 코드에서 설명할 부분은 x_, y_ 를 설정하는 부분과 fill() 이라는 함수에 대한 부분이 될 거 같은데~ fill 함수는 이름에서도 알 수 있듯이 다각형 내부의 색을 채워주는 함수입니다. fill 함수가 다각형의 좌표값을 필요로 하다 보니 x_, y_ 값을 아래와 같이 표현해서 닫힌 형태의 다각형으로 만들어 준 것이고 마지막 인자인 ‘r’ 은 red 즉 빨간색으로 표시하라는 뜻입니다.

x=linspace(-10,30,1001);

y1 = x+3;

y2 = 2*x-6;

x_=[x fliplr(x)];

y_= [y1 fliplr(y2)];

figure

fill(x_, y_, 'r')

grid on

그래프는 아래와 같이 표현됩니다.

fill 함수와 유사한 함수로 patch 함수가 있고~ patch 함수는 하나 이상의 채워진 다각형을 만들어 주는 함수입니다. 다각형 한개를 그릴때는 사실 동일하다고 볼 수도 있을 것 같네요. 위 코드에서 fill 을 patch 로 바꿔도 동일한 결과를 얻을 수 있습니다.

fill, patch 함수가 다각형 내부의 색을 채워주는 함수이다 보니 x_, y_ 와 같은 변수들을 만들어서 사용했는데~ 조금 더 쉽게 영역을 표시하는 함수로 area 함수를 사용할 수가 있습니다. 아래 메뉴얼에도 나와 있지만 2차원 그래프에서 그래프 선과 basevalue 로 둘러싸인 부분의 영역을 표시해주는 함수입니다. basevalue 의 디폴트 값은 0 입니다.

https://kr.mathworks.com/help/matlab/ref/area.html?searchHighlight=area&s_tid=doc_srchtitle

area 함수를 사용한 코드는 아래와 같습니다.

x=linspace(-10,30,1001);

y1 = x+3;

y2 = 2*x-6;

x=x(:);

y=[y1(:) y2(:)];

figure

h = area(x, y);

grid on

코드를 표현하는 것은 조금 더 쉬운 듯한데…. 그래프를 확인해 보면 의도와는 뭔가 조금 다른 것 같습니다. 즉 원하지 않는 파란색 영역도 나타낸 것을 확인할 수 있습니다.

파란색 영역을 없애기 위해서 조금 더 코드를 추가해야 될 것입니다. 파란색 영역을 투명하게 만들기 위해서 해당 부분의 색깔을 흰색으로 만들어 준 후에~ alpha 함수를 사용하여 투명도를 조절해 줬습니다~

h(2).FaceColor = [1 0 0];

h(1).FaceColor = [1 1 1];

alpha(h(1),0.1)

이렇게 해서 나타나는 그래프를 보면~ 아래와 같이 원하는 영역만 표시된 그래프를 얻을 수가 있습니다~



Windows 를 사용하면서 많은 사람들이 Powershell 이라는 툴이 있는지 조차도 모르는 것 같더군요. 계속해서 말씀을 드리지만 Windows 에서 Powershell 을 사용하면 정말 다양한 작업들을 자동화 할 수가 있고~ 그만큼 생산성 향상 되는 것을 느끼실 수가 있을 겁니다.

저는 집에서 Windows 7 PC 한대와 Windows 10 PC 를 한대 사용하고 있는데~ Windows 7 PC Powershell 에서 아래와 같이 타이핑 해서 버전을 확인해 보니~ 2.0 버전이었습니다.

$PSVersionTable

그래서 Windows 7 Powershell 을 업데이트 하는 방법에 대해서 검색을 해 보니 오늘 아래 주소에서 확인할 수가 있었습니다.

https://www.microsoft.com/en-us/download/details.aspx?id=54616

Download 버튼을 누르고~ 아래와 같이 다운로드할 프로그램을 선택하고 설치해 주시면 됩니다.

다 설치를 했으면 윈도우를 재부팅하고~ Powershell 을 다시 실행 시키면 아래와 같이 5.1 버전으로 업데이트가 된 것을 확인할 수 있습니다.

아래 포스팅에서 Windows cmd 창과 관련된 다양한 명령어들에 대해서 소개한 적이 있는데~

https://iamaman.tistory.com/1241

https://iamaman.tistory.com/831

Windows command 창의 내용을 클립보드에 복사 하기 위해서 clip 이라는 명령어를 사용하곤 했습니다. 그런데 Powershell 5.1 버전으로 업데이트 하고 나서 Powershell 에서 clipboard 의 내용을 가져 올 때는 Get-Clipboard 클립보드에 Powershell 의 내용을 복사 할 때는 Set-Clipboard 라는 명령어를 사용할 수가 있었습니다.

Windows Powershell 이 계속해서 발전하는 모습이 정말 보기 좋네요~ 앞으로 세상은 극단적인 생산성 향상의 시대가 될 것이라고 생각을 합니다. Windows Powershell 과 함께 생산성에 있어서 앞서 나가시기 바랍니다.



요즘 나오는 대부분의 컴퓨터 언어가 그렇지만 패키지 관리자가 있어서 굉장히 쉽게 라이브러리를 설치하거나 삭제할 수 있습니다. 요즘 뜨고 있는 Julia 역시 마찬가지로 패키지 관리자가 있고~ Pkg.add(), Pkg.init(), Pkg.build() 와 같은 명령어를 제공해 줍니다.

julia 설치와 관련해서는 아래 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/2655

최근에 julia 의 그래프 기능을 사용해 보기 위해서 Plots 를 설치하려고 Pkg.add(“Plots”) 을 타이핑 해보니 뭐라 뭐라 에러가 나오더군요. 위 포스팅에서 소개한대로 최신의 JuliaPro 를 설치했는데…. 뭔가 시작부터 안 되는 느낌이라서 조금 짜증이 났습니다. 그래도 궁금한 건 못 참는 성격이기에 검색을 조금 해 보니 업데이트가 안 돼서 그런 것이더군요. 줄리아를 처음 설치했다면 아래 명령어로 일단 업데이트부터 해주는게 좋을 것 같습니다.

Pkg.update()

위 명령으로 패키지를 업데이트 해주고 나니 이후에는 plots package 를 설치할 수 있었습니다.

plots package 를 설치하고 아래 주소에 있는 plots 예제를 실행해 봤습니다.

https://julialang.org/downloads/plotting.html

using Plots

plotly() # Choose the Plotly.jl backend for web interactivity

plot(rand(5,5), linewidth=2, title="My Plot")

처음에는 package 를 로드하는데 시간이 걸리더군요.

pyplot 을 사용하는 예제들은 아직도 동작이 안되는 경우가 있었는데~ 위 코드는 정상적으로 동작을 하더군요~

아래와 같이 브라우저에서 그래프가 나오는 것을 확인할 수 있었습니다.

추가적으로 아직은 julia 초심자이다보니 cheatsheet 가 필요했는데 아래 링크에서 cheatsheet 를 찾을 수 있었습니다.

http://math.mit.edu/~stevenj/Julia-cheatsheet.pdf

아래 포스팅에서 소개했던 Launchy 등에 cheatsheet 를 등록해 놓고 사용한다면 필요할 때마다 편리하게 이용할 수 있을 것 같네요.

https://iamaman.tistory.com/911



Windows 환경에서 Powershell 을 사용하면 정말 다양한 PC 작업들을 자동 할 수 있습니다. 저는 업무를 비롯해 집에서 영화나 음악 파일 관리를 할 때도 Powershell 스크립트를 자주 사용합니다.

그런데 오래 걸리는 작업이 있다면 Powershell 스크립트가 실행되는 시간을 알고 싶은 경우가 종종 있습니다. 그래서 오늘은 Powershell 다른 스크립트 실행 시간을 측정하는 방법에 대해서 소개하려 합니다.

코드는 아래와 같이 굉장히 간단하고 측정하고자하는 스크립트 위아래에 Get-Date commandlets 을 넣어서 그 차이를 계산 하는 방법입니다.



위 Powershell 코드에서 시간 차이를 담고 있는 $timeSpan 변수를 찍어 보면 아래와 같이 다양한 시간 간격에 대해서 표시할 수 있습니다. 위 코드에서는 TotalSeconds 변수를 사용하여 초 단위로 표시를 했습니다.




개발을 하면서 소프트웨어 버전과 같은 특수한 목적으로 Ascii Code 를 많이들 사용하곤 합니다. 오늘은 Powershell 을 이용하여 Ascii Code 를 알아내는 방법에 대해서 소개하려 합니다

Powershell 에서 문자열을 char 배열로 바꾸기 위해서 ToCharArray() 멤버 함수를 사용합니다. 전체 코드는 아래와 같고~





위 코드에서 {0:X2} 부분은 두 자리 헥사값을 얻기 위한 과정이고~ [byte][char] 는 Ascii Code 를 얻기 위한 과정입니다.

세 번째 줄은 해도 되고 안 되지만 얻어진 헥사값의 순서를 뒤집기 위한 과정입니다.

다른 스크립트 언어도 그렇지만 Windows 환경에서 Powershell 은 정말 다양한 기능이 있는 것 같고~ Powershell 을 사용하느냐 하지 않느냐에 따라서 생산성이 극단적으로 갈리게 되는 거 같습니다. 많은 분들이 Powershell 을 업무에 적극적으로 활용해 보셨으면 합니다.



이 포스팅을 보시는 분들이라면 다들 아시겠지만 MATLAB 의 그래픽 표현 능력은 정말 뛰어난 편입니다. 신호 처리를 비롯해서 많은 분야에서 그래프를 사용하고 있고~ 그런 의미에서 MATLAB 은 정말 큰 장점이 있는 툴 인 것 같습니다.

MATLAB 에서 하나의 Figure 창에 다양한 그래프를 나타내기 위해서 아래 포스팅에서 소개했던~ subplot 과 같은 함수를 사용하곤 하는데~

https://iamaman.tistory.com/101

오늘은 axis 를 사용하여 그래프 안에 조그맣게 또 다른 그래프를 그리는 방법에 대해서 소개를 하려 합니다.

샘플 코드는 아래와 같습니다.

그래프 안에 조그만 또 다른 그래프를 그리기 위해서~ axes() 함수를 사용하여 작은 그래프가 들어갈 위치를 잡아주고~ 바깥에 있는 큰 그래프와 구분해 주기위해 box on 을 했습니다.

이후에 그래프를 그리면 아래 그림과 같이 그래프 안에 또 다른 작은 그래프가 들어가는 것을 확인할 수가 있습니다.



Powershell 을 사용하여 빌드 스크립트를 만들다 보니 쌍을 이루는 구조체를 만들어야 하는 경우가 종종 있었습니다. 그래서 Powershell struct 를 찾아보다가 Python 에서 사용하는것 처럼 tuple 을 사용 하는게 편하겠다는 생각이 들어서 검색을 해 봤습니다.

Powershell 에서 역시 Python 과 마찬가지로 tuple 타입을 사용할 수 있었고 아래 포스팅에서 그 사용법을 알 수가 있었습니다.

https://devblogs.microsoft.com/scripting/using-a-tuple-in-powershell/

간단하게 정리하면 아래와 같이 [System.Tuple] 이라고 써주고 정의하면 되는 것이었습니다.

[System.Tuple]::Create("Flintstone", "Rubble", "Dino")

Powershell 에서 대괄호[] 를 사용하는 경우는 .NET Framework class를 사용하는 것입니다. 즉 Powershell 에서 System.Tuple .NET Framework class 를 사용하여 tuple 타입을 사용할 수 있는 것입니다.



MATLAB 을 사용하다 보면 struct 타입을 종종 사용하곤 합니다. 그리고 struct 타입을 모아서 배열로도 사용하곤 하는데 MATLAB 기본 함수중에 struct 타입 배열을 정렬하는 기능의 함수는 없는것 같더군요.

그냥 만들어 사용해도 되겠지만 검색을 조금 해보니 비슷한 코드를 발견했고 해당 코드를 정리해서 아래와 같은 함수로 만들었습니다.




이제 함수를 만들었으니 한번 사용해 보죠.

a = struct('id',1, 'data', [1:10])

b = struct('id',2, 'data', [2:11])

beforeVec= [b a]; % 두 struct 를 사용하여 배열로 만듬

sortedVec = struct_sort_by_field(beforeVec,1,1); % 첫번째 field 의 첫번째 인덱스 값에 대해 정렬

beforeVec.id % 기존 배열의 인덱스 확인

sortedVec.id % 정렬된 배열의 인덱스 확인

위 결과를 보면~ sortedVec 는 id 값에 따라 오름차순으로 정렬 된 것을 확인 할 수 있습니다.



많은 분들이 많이 사용하고 있을 것 같은데~ Windows 탐색기에는 미리보기 기능이 있습니다. 파일을 열기 전에 미리 보기를 해서 자신이 원하는 파일을 확인하는 방법이죠.

굉장히 많은 파일 내에서 자신이 원하는 컨텐츠가 들어 있는 파일을 눈으로 확인하고 찾고 싶을 때 꼭 필요한 기능이라고 할 수 있습니다. 텍스트 파일을 비롯해서 이미지, 마이크로소프트 오피스 파일등 다양한 파일 형식에 대해서 미리 보기를 할 수가 있는데~ 이상하게 Windows Powershell 파일에 대해서는 미리 보기가 되지 않더군요. 그래서 검색을 조금 해보니 저와 같은 의구심을 가지고 있는 사람들이 많이 있었고 해결 방법 역시도 있었습니다.

Powershell 관련 파일 확장자는 ps1, psm1, psd1 이렇게 세 개인데~ 해당 파일들을 윈도우 미리보기가 되게 하기 위해서는 아래 주소의 레지스트리에 확장자 별로 키를 추가해야 되더군요.

HKEY_CURRENT_USER\Software\Classe

저한테는 너무 귀찮은 일이기 때문에 한 번에 해 주는 스크립트를 찾아 보니 역시나 있었습니다. 해당 스크립트는 제 gist 에 올려놨고~ 아래 스크립트를 다운로드 받아서 사용하면 됩니다.

git 을 사용 하시는 분이라면 아래 명령어를 통해서 다운로드 받을 수 있습니다.

git clone https://gist.github.com/ssgkd/06a57d14eeceaa28e0e1c9a8cab13a71

Powershell 을 관리자 권한으로 실행한 후에 다운로드 받은 Powershell 파일을 실행해 주면 아래와 같이 Powershell 파일에 미리보기가 가능한 것을 확인할 수 있습니다.



많은 분들이 MATLAB을 사용하여 데이터 처리를 할 것이라고 생각을 합니다. 사실 MATLAB을 사용할 수 있는 분야는 너무나 무궁무진해서 저도 다 알지는 못 하고 저는 회사에서 신호 처리를 하고 있는데 데이터를 가공하기 위해서 MATLAB 을 주로 사용하는 편입니다.

아래 포스팅에서 소개를 했었지만 매트랩 그래프를 보면서 데이터를 선택하고 값을 읽고 텍스트를 입력하거나 다양한 효과를 줄 수가 있습니다.

https://iamaman.tistory.com/204

오늘은 그 중에서 데이터 커서를 사용하여 그래프에서 값을 읽거나 브러시 기능을 사용하여 많은 데이터들을 선택하는 방법에 대해서 살펴보려 합니다.

다음과 같은 코드를 준비하고 그래프를 하나 드려 보겠습니다.

x=[ones(1,100)*2 ones(1,100)*10 ones(1,100)*20];

xx=x+rand(size(x));

plot(xx), grid on

위 코드를 실행하면 아래와 같은 그래프 하나가 뜨게 될 겁니다.

그래프에서 데이터 커서 기능 사용하기

그래프를 보면서 특정 부분의 데이터를 알고 싶은 경우가 있습니다. 그런 경우에는 Figure 창의 데이터 커서 기능을 사용 합니다.

데이터의 값을 보고 싶은 경우에는 아래와 같이 십자가 모양 버튼의 아이콘을 클릭해 줘도 되고 ~ 메뉴에서 “툴(T) -> 데이터 커서(A)” 를 선택해도 됩니다.

데이터 커서를 눌러준 후에 커서가 십자가 모양으로 변하고 원하는 데이터 지점을 선택하면 아래와 같이 해당 부분의 데이터값이 나타나게 됩니다. 여러 데이터를 찍고 싶으면 Shift 를 누른 상태에서 왼쪽 클릭을 해 주면 아래와 같이 복수의 데이터를 선택할 수도 있습니다. 이렇게 선택을 한 후에 오른쪽 클릭을 하면 해당 데이터와 관련된 툴팁 메뉴가 나오고 원하는 기능을 선택 할 수가 있습니다.

저는 주로 데이터를 삭제하거나 새 데이터를 만들기보다는 “커서 데이터를 작업 공간으로 내보내기” 기능을 주로 사용합니다. “커서 데이터를 작업 공간으로 내보내기” 버튼을 누르면 변수 이름을 입력할 수 있는 창이 하나 뜨게 되고 데이터 커서를 사용하여 선택한 데이터들을 MATLAB 워크스페이스에 저장 하고 다양한 계산에 활용할 수 있습니다.

그래프에서 브러시 기능 사용하기

데이터 커서는 데이터의 값을 보는데 주로 사용을 하지만 브러시 기능은 마우스로 다량의 데이터를 선택해서 편집하는데 주로 사용하곤 합니다. 브러시 기능 역시 마찬가지로 아이콘을 클릭하거나 메뉴에서 “툴(T) -> 브러시(B)” 를 선택하면 됩니다.

브러시는 기본적으로 빨간색이 선택되어 있는데 브러시 아이콘 옆에 있는 아래쪽 화살표를 누르면 브러시 색깔을 선택할 수 있습니다.

브러시 기능을 실행 하고 아래와 같이 원하는 부분을 드래그해서 선택해주면 ~ 원하는 데이터 부분들을 선택할 수 있습니다. 데이터 커서 기능과 마찬가지로 오른쪽 버튼 클릭하면 추가적인 기능을 사용할 수 있고 “변수 만들기” 버튼을 누르면 데이터 커서에서와 마찬가지로 MATLAB 워크스페이스에 데이터를 저장할 수도 있습니다.

위 메뉴에서 확인할 수 있는 바와 같이 선택된 데이터들에 대하여 일괄적으로 특정값으로 바꾸거나 제거하는 등 편리하게 데이터를 조작할 수 있습니다.

아래 포스팅들에서 소개를 했었던 tiobe 에 접속을 해 보니 요즘도 계속해서 MATLAB 의 인기가 상승 중이더군요~ 요즘은 11위 까지 올라갔네요~

https://iamaman.tistory.com/85

https://iamaman.tistory.com/1479

https://iamaman.tistory.com/1590

아시는 바와 같이 MATLAB 은 일년에 두번씩 업데이트를 하고 있고 지금도 계속해서 발전하고 있는 프로그램입니다. 많은 분들이 현명하게 MATLAB 을 활용하셨으면 하는 바람입니다.



여러분들은 컴퓨터를 사용하면서 어떤 작업을 가장 많이 하시나요? 저는 개인적으로 생각하기에 복사 붙여넣기라고 생각을 합니다. 그래서 복사 붙여넣기를 잘 하는 것만으로도 컴퓨터 사용의 효율성은 분명히 올라간다고 생각합니다. 그래서 저는 아래 포스팅에서 소개를 했던 ditto 라는 복사 붙여넣기 툴과 Windows 10 에 들어있는 복사 붙여넣기 기능들을 적극적으로 사용하는 편입니다. 아래는 제가 지금까지 복사 붙여넣기와 관련된 포스팅을 한 것들인데 위에서 얘기했던 ditto 이외에도 Clipjump 와 같은 Autohotkey 로 만들어진 툴에 대해서도 소개를 하니 한번쯤 읽어 보시기 바랍니다.

https://iamaman.tistory.com/737

https://iamaman.tistory.com/2693

https://iamaman.tistory.com/1026

https://iamaman.tistory.com/948

https://iamaman.tistory.com/2566

오늘은 Autohotkey 를 사용하여 복사 붙여넣기를 하는 3 가지 방법에 대해서 소개를 하려고 합니다.

일단 Autohotkey 를 사용하는 대부분의 분들이 아시겠지만 send 명령을 사용하여 복사 붙여넣기를 할 수가 있습니다. 실험 결과로 부터 원하는 계산을 한 후에 결과를 메모장에 붙여넣기하는 경우 아래와 같이 단축키를 만들어서 메모장에 자동으로 붙여넣기 할 수가 있습니다.

1. send 명령을 사용하는 방법

#!v:: ; shortcut Win + Alt + v

WinActivate, 제목 없음 - 메모장 ahk_class Notepad,

Send, ^v{Enter}

return

위 단축키는 Win + Alt + v 를 눌렀을 때 “제목 없음 - 메모장” 타이틀을 가진 메모장 프로그램에 ctrl + v 를 누르고 Enter 를 눌러서 줄 바꿈을 해주는 단축키입니다. 보시는 바와 같이 굉장히 간단하게 메모장에 붙여넣기를 할 수가 있습니다.

2. controlsend 를 사용하는 방법

#!c:: ; shortcut Win + Alt + c

ControlSend, Edit1, %Clipboard%`n, 제목 없음 - 메모장 ahk_class Notepad,

return

위 단축키는 Win + Alt + c 를 눌렀을 때 “제목 없음 - 메모장” 타이틀을 가진 메모장 프로그램의 Edit1 Control 에 클립보드의 내용과 줄바꿈을 넣는 단축키입니다.

3. PostMessage / SendMessage를 사용하는 방법

#!p:: ; shortcut Win + Alt + p

postmessage, 0x302, 1, 0, Edit1, 제목 없음 - 메모장 ahk_class Notepad,

return

마지막으로 설명드릴 내용은 PostMessage / SendMessage 를 사용하는 방법입니다. 윈도우 메시지를 전달하는 방법인데 위에서 소개했던 ControlSend 명령이나 PostMessage / SendMessage 명령은 비활성창에도 명령을 실행시킬 수 있기 때문에 send 명령보다 조금 더 편리할 수 있습니다. 하지만 그만큼 조금 더 공부할 거리들이 있는 것은 사실입니다. 어쨌든 위에서 소개한 스크립트는 Win + Alt + p 단축키를 누르면 마찬가지로 클립보드의 내용을 메모장에 붙여넣기하는 스크립트입니다.

추가로 PostMessage / SendMessage 를 사용하여 잘라내기와 복사하기를 하는 명령어는 아래와 같으니 참조하시기 바랍니다.

잘라내기 : postmessage, 0x300, 1, 0, Edit1, 제목 없음 - 메모장

복사 : postmessage, 0x301, 1, 0, Edit1, 제목 없음 - 메모장

오늘은 Autohotkey 를 사용하여 복사 / 붙여넣기를 하는 세 가지 방법에 대해서 소개를 했습니다. 서두에서 말씀드린 바와 같이 복사 / 붙여넣기만 잘 해도 정말 큰 업무 효율 향상을 볼 수가 있다고 생각합니다. 요즘은 4차 산업 혁명 시대라고 합니다. 저는 개인적으로 4차 산업 혁명 시대에는 극단적 효율성 향상의 시대이기 때문에 그 어느 때보다 효율성이 중요시 되는 시대라고 생각합니다. Autohotkey 와 함께 Windows PC 사용의 극단적 효율성 향상을 맛 보시기 바랍니다.

그리고 마지막으로 제가 최근에 찾은 블로그 중 아래 포스팅에서도 소개를 했던~

https://iamaman.tistory.com/2021

아래 블로그에도 한번 방문해 보시기 바랍니다. Autohotkey 구루라고 하시는데~ 정말 좋은 코드들을 많이 볼 수가 있고~

http://the-automator.com/

요즘에는 유튜브에서 방송도 하시더군요. Autohotkey 에 관심 있으신 분들은 Joe Glines 님의 유튜브 채널도 한번 구독해 보시기 바랍니다. 세계의 다양한 Autohotkey 유저분들과 인터뷰 도 하는데 배울 점이 많이 있는 것 같습니다.

https://www.youtube.com/channel/UCR0Hs-Bgz1SgGCq_0kbzjjg

저도 Autohotkey 는 어느 정도 사용한다고 생각을 했었는데~ 정말 세상에는 많은 실력자들이 있는 거 같네요. 지금보다 더 열심히 공부해 봐야 되겠습니다.

그럼 즐거운 Autohotkey 코딩하시고~ 굿 밤 되시기 바랍니다 ^^



임베디드 프로그래밍을 하다 보면 레지스터 등의 설정을 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' 임을 알 수 있습니다.



Autohotkey 를 사용하여 처음에는 현재 활성화된 창에 대해서만 자동화를 주로 하지만 Autohotkey 에 어느 정도 익숙해지고 나면 비활성화 된 프로그램에 대해서 자동화를 하고 싶다는 생각이 들곤 합니다.

이런 목적으로 사용하는 Autohotkey 명령어는 ControlSend, ControlGet, ControlMove, PostMessage, SendMessage, ControlGetText 등이 있고 저는 주로 ControlSend 를 사용하여 비활성 창에 명령어를 던져 보고 ControlSend 로 되지 않는 경우 PostMessage/SendMessage 를 사용하곤 합니다.

PostMessage/SendMessage 명령어를 사용하기 위해서는 Windows 메시지를 알아야 되고 PostMessage/SendMessage 에 대한 사용법은 Autohotkey 메뉴얼을 보면 아래와 같이 튜토리얼도 확인할 수 있습니다.

https://autohotkey.com/docs/misc/SendMessage.htm

아래 페이지를 보니 한글로 된 자료도 있더군요. 사람이 번역을 한 건지 구글 번역과 같은 번역 프로그램을 사용한 건지는 잘 모르겠습니다. 영어가 부담스러운 분들은 한 번쯤 읽어보시기 바랍니다.

http://autohotkeykr.sourceforge.net/docs/misc/SendMessage.htm

어쨌든 위 튜토리얼에서는 Windows Spy 프로그램으로 Winspector Spy 를 알려주고 아래 주소에서 다운로드 받아서 사용할 수가 있습니다.

https://www.softpedia.com/get/Security/Security-Related/Winspector.shtml

뭐 정확하게 기억은 안 나지만 예전 경험으로는 Winspector Spy 를 사용하다가 뭔가 잘 안되서 사용을 안 하게 됐었는데~ 저는 요즘은 Winspector Spy 대신에 Window Detective 를 사용하고 있습니다. Window Detective 는 아래 주소에서 다운로드 받을 수 있고~ 설치 방법은 다운로드 받은 후에 실행 파일을 실행 하고 다음~ 다음만 누르면 되므로 굳이 설명 드리지 않겠습니다.

http://windowdetective.sourceforge.net/

오픈소스 프로그램을 검색하는 AlternativeTo 에서 Windows spy 프로그램들을 검색 해보니

Window Detective 가 조금 더 인기가 좋은 거 같아서~ 요즘은 Window Detective 를 주로 사용하게 되었습니다. AlternativeTo 는 유용한 프로그램들을 찾을 수 있는 굉장히 좋은 사이트로 AlternativeTo 에 대해 알고 싶은 분들은 아래 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/2123

Window Detective 를 설치한 후에 실행하면 아래와 같이 프로그램이 실행되는 것을 확인할 수 있고~ 특정 프로그램의 메시지를 확인하기 위해서는 “Pick window” 버튼을 드래그해서 메시지를 확인하고 싶은 창에 드랍하면 됩니다.

아래 그림은 PotPlayer 에 대해 Window Detective 를 사용하여 메시지를 확인하는 장면이고~ Window Detective 에서 오른쪽 클릭 한 후에 message 메뉴를 선택하면 PotPlayer 에 대한 메시지를 확인할 수 있게 됩니다.

아시다시피 윈도우 프로그램에는 정말 많은 메시지들이 있기 때문에 내가 원하는 메시지를 확인하는 것이 중요합니다. 위 그림에서 깔데기 모양을 선택하면 원하는 메시지들만 선택적으로 확인할 수 있습니다.

그럼 즐거운 Autohotkey 코딩 Life 되시기 바랍니다. ^^



무슨 바람이 불어서 그런 건지는 모르겠지만 최근에 영어 공부를 다시 시작 했습니다. 과거에는 영어 공부하기 정말 싫었는데 요즘은 영어 공부하기 정말 편해진 세상이 된 것 같습니다. 요즘 저는 영어 공부를 위해서 수업도 듣고 영어로 쓰여진 책도 읽고 여러가지 다양한 영어 유튜브 방송도 보고 있고 영어로 된 드라마도 보면서 영어 공부를 하고 있습니다. 예전에 미드를 많이 보다가 한동안은 미드를 많이 보지 않았었는데 최근에 다시 영어 공부를 위해서 미드를 보고 있습니다. 생활영어를 배우고 싶어서 판타지나 어려운 전문분야의 드라마가 아니라 생활 드라마를 찾아봤고, 그중에서 최근 매우 인기가 높다는 캐나다 드라마인 킴스 컨비니언스를 보고 있습니다.

미드를 보면서 영어 공부를 하기 위한 준비 사항은 다음과 같습니다.

1. 영어 드라마

당연한 얘기지만 영어 드라마를 준비 해야 되겠고 보통의 경우 생활 영어를 학습하는 것이 목표이므로 생활 드라마를 선택하는 것이 좋을 것 같습니다. 드라마와 함께 영어로 된 자막을 받아 놓으면 됩니다.

2. 카카오 팟플레이어

어떤 동영상 플레이어를 사용해도 상관이 없지만 저는 카카오 팟플레이어를 사용하면서 드라마를 통한 영어 공부가 쉬워졌습니다. 드라마를 보다가 모르는 단어가 있으면 스페이스바를 눌러서 드라마를 잠깐 멈춰 놓고 모르는 단어를 클릭하면~

다음 사전을 통해서 단어를 찾아줍니다. 요즘 다음을 비롯해 인터넷 사전들은 단어장 기능이 있어서 찾은 단어들을 클릭 한번으로 저장해 놓을 수가 있습니다. 이렇게 드라마를 보다가 모르는 단어들은 바로 바로 찾고 바로 바로 저장해 놓을 수 있는 굉장히 좋은 동영상 플레이어라는 생각이 들었습니다.

카카오 팟플레이어에서 F5를 누르고 카카오 팟플레이어 설정에 들어가 보면 다양한 옵션들이 있는데 기본적으로 단어를 찾을 때 인터넷 익스플로러를 사용하도록 설정되어 있습니다. 저는 주로 크롬 브라우저를 사용하기 때문에 크롬 브라우저를 기본 브라우저로 설정을 해 놓고 사용하는 상태이며, 그래서 시스템 브라우저는 크롬 브라우저로 되어 있습니다. 그래서 제가 사용하는 크롬 브라우저에서 단어장을 열게 하기 위해서 아래와 같이 설정을 변경해 놓고 사용하고 있습니다.

카카오 팟플레이어에서 네이버 사전 검색

그리고 많은 분들이 다음 사전 뿐만 아니라 네이버 사전을 사용하실텐데~ 카카오 팟플레이어에서는 사전을 등록 할 수 있습니다. 클릭한 자막의 단어는 %%SS 에 들어가기 때문에 네이버 사전을 사용하고자 한다면 아래와 같이 설정하면 될 거라고 생각을 했습니다.

http://dic.naver.com/search.nhn?query=%%SS

그런데 역시나… 경쟁사라 그런지 카카오 팟플레이어에서 네이버 사전으로는 검색이 안되더군요. 검색을 조금 해 보니 어떤 분들은 redirect 서버를 만들어서 사용하시는 분들도 있던데~~ 저는 Autohotkey 를 사용하여 카카오 팟플레이어 에서 네이버 사전을 사용하도록 설정했습니다.

일단 Autohotkey 코드를 하나 작성합니다. Autohotkey 의 argument 를 사용하는 방법으로 해당 내용에 대해서는 아래 주소의 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/1635

카카오 팟플레이어에서 네이버 사전으로 단어 검색을 위한 Autohotkey 코드는 아래와 같습니다. naverSearch.ahk 라는 이름으로 만들었고 내용은 아래와 같습니다.

Loop, %0%

{

param := %A_Index%

Run http://dic.naver.com/search.nhn?query=%param%

}

다음으로 카카오 팟플레이어에서 아래와 같이 설정을 합니다.

제목은 “네이버 사전” 으로 했는데 아무렇게나 편한대로 적어주면 됩니다.

항목에 위에서 만든 naverSearch.ahk 코드의 fullpath 를 적어주고 argument 로 "%%SS" 를 적어줍니다. 결과적으로 아래와 같은 형태로 적어 주면 됩니다.

C:\AHK\naverSearch.ahk "%%SS"

이것으로 카카오 팟플레이어에서 네이버 사전으로 단어 검색하기 위한 설정은 끝났네요. 클릭을 했을 때 네이버 사전으로 검색이 되게 하기 위해서 “네이버 사전” 항목을 제일 위로 뒀습니다.

이제 미드를 보다가 모르는 단어를 클릭해보면 아래와 같이 네이버 사전으로 검색이 되는 것을 확인 할 수 있습니다.

카카오 팟플레이에어서는 구글 번역 기능도 제공을 해 줘서 요즘은 영어 자막만 있으면 실시간으로 한글로 번역이 되더군요. 가끔 안될때도 있긴 하던데 영어 공부 목적으로 보는데 그리 큰 불편은 없는것 같네요~

카카오 팟플레이어에서 파파고 검색

요즘은 많은 분들이 파파고 검색도 많이 이용을 하실 텐데 ~ 파파고 검색 역시 마찬가지로 아래와 같이 Autohotkey 스크립트(papagoSearch.ahk)를 만들어 준 후에~

Loop, %0%

{

param := %A_Index%

Run, https://papago.naver.com/?sk=auto&tk=ko&st=%param%

}

팟플레이어에서 파파고 검색을 할 수 있도록 아래와 같이 설정을 해 주면 됩니다.

검색을 할 때는 모르는 단어에 오른쪽 클릭을 해 보면 자막 단어 검색 설정했던 내용들이 나오고 위에서 설정했던 파파고 검색을 클릭하면 검색이 이루어 집니다.

이렇게 파파고 검색이 되는 것을 확인할 수 있습니다.

그럼 다들 미드 보면서 즐겁게 영어 공부 해 보시기 바랍니다.



  1. jenn 2019.07.14 21:11

    안드로이드탭 이용중인데, window환경에서만 다운받을수 있는게 아쉬워요 ㅜ ㅜ
    안드 마켓에서 미플레이어라는 프로그램이 있긴한데, 카카오플레이어보다 못하네요 ㅠㅠ

    혹시 안드탭중에 비슷한앱(내가 설정한 사전으로 바로 검색) 추천받을수 있을까요?

    • 남성 2019.07.14 23:04 신고

      저도 안드로이드 미디어 플레이어 중에 자막이 바로 검색되는 프로그램은 모르겠네요~ 암튼 방문해 주셔서 감사합니다.

요즘 대부분의 컴퓨터는 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 을 사용하여 신호 처리를 하다 보면 필터를 설계하는 경우가 있고 필터의 게인을 조절해야 되는 경우가 있습니다. 보통 디지털 필터 설계를 할 때는 pass band 의 게인을 1 (0 dB) 로 맞춰 주게 되는데 오늘은 이 방법에 대해서 소개를 하려 합니다.

MATLAB 을 사용하여 필터 설계하고 코드를 생성하거나 모델을 만들때는 fdatool (Filter Design & Analysis Tool) 을 주로 사용하게 되고 필터를 확인하고 싶을때는 fvtool(Filter Visualization Tool) 을 주로 사용합니다.

FIR 필터 계수가 CoeffV 인 경우 MATLAB 명령창에 fvtool(CoeffV,1) 라고 명령하면 아래와 같은 Filter Visualization Tool 이 실행되고 해당 필터 계수에 대한 정보들을 확인 할 수 있습니다.

또한 Analysis -> Analysis Parameters 를 선택하면

아래와 같이 Analysis Parameters 창이 나타나고 “Normalize Magnitude to 1 (0 dB)” 를 체크하고 적용하면

아래와 같이 pass band 의 게인이 1 로 설정이 되는 것을 확인 할 수 있습니다.

그런데 이러한 설정은 실제 값이 바뀌는 것이 아닌 그래프의 형태만 바뀌는 것입니다. 따라서 실제 필터의 게인을 1 (0 dB) 로 설정하기 위해서는 필터의 게인을 알아낸 후 scaling factor 값을 구해서 해당 값으로 필터 Coefficient 를 scaling 해 줘야 합니다. 이러한 작업을 하는 코드는 아래와 같습니다.

[h, w] = freqz(num, den); % frequency response of (num, den)

scale = 1/max(abs(h)); % scaling factor

numScaled = num*scale;

fvtool(numScaled, den) 명령을 통해 해당 필터의 magnitude response 를 확인해 보면 pass band 의 게인이 1 (0 dB) 로 맞춰진 것을 확인 할 수 있습니다.



아래 포스팅에 가우스-뉴턴 방법을 사용하여 원의 방정식의 파라미터들을 찾는 실험을 수행한 적이 있었습니다.

https://iamaman.tistory.com/2759

가우스-뉴턴 방법을 적용한 결과 수렴이 되긴 하지만 초기값 설정에 따라 발산하는 경우가 너무나 많은 걸 확인 할 수 있었습니다. 그래서 이번에는 같은 문제에 대해 Gradient Descent 방법을 적용해 보았습니다. Gradient Descent 방법 적용을 위한 수식은 위 주소의 포스팅과 아래 포스팅을 참조하시기 바라고 원의 방정식에 대한 MATLAB 코드 역시 마찮가지로 위 주소의 포스팅을 참조하시기 바랍니다.

https://iamaman.tistory.com/2760?category=422993

원의 방정식에 대해 Gradient Descent 방식을 적용하여 파라미터를 찾는 코드는 아래와 같습니다.

%% Gradient Descent

XX=X(:);

YY=Y(:);

ramda = 0.05;

x = [-20;-20;-2]; % 초기값

maxIndex = length(XX)-10;


k1=1;

while 1

nn = randi(maxIndex); % random index

Y=YY(nn:(nn+3));

X=XX(nn:(nn+3));

F = sqrt((X-x(1)).^2 + (Y-x(2)).^2)-x(3);

J = [(x(1)-X)./sqrt((X-x(1)).^2 + (Y-x(2)).^2) (x(2)-Y)./sqrt((X-x(1)).^2 + (Y-x(2)).^2) -ones(size(X))];

errV = J'*F;

x = x-2*ramda*J'*F;

if mean(abs(errV))<0.00002

    disp(k1)

break

end

k1=k1+1;

end

k1

x

X 의 초기값은 [-20;-20;-2] 으로 설정했고, Gradient Descent 알고리즘을 위한 step 값은 0.05 로 설정했습니다. error 의 절대값이 0.00002 이하일때 알고리즘을 멈추도록 했고 learning 횟수를 display 하도록 설정했습니다.

learning 횟수는 그때 그때 다르지만 초기값 설정에 따른 발산 정도는 Gauss-Newton 방식에 비해 확실히 덜 한것 같다는 느낌이 들었고 아래 결과와 같이 15698 회 정도 learning 이 된 후에 정상적인 X 값을 찾는 것을 확인 할 수 있었습니다.

k1 =

15698

x =

1.0000

3.0000

3.0000



Powershell 에서 XML 파일을 파싱하는 경우 아래와 같이 두가지 방법을 사용할 수 있습니다. 첫번째는 System.Xml.XmlDocument 타입을 사용하는 방법이고 두번째는 Select-Xml commandlets 을 사용하는 방법입니다.

1. System.Xml.XmlDocument 을 사용하는 방법

[xml]$cn = Get-Content "XML_PATH"

$links = $cn.SelectNodes('//linkedResources/link')

2. Select-Xml 을 사용하는 방법

$links2 = Select-Xml -path "XML_PATH" -XPath '//linkedResources/link' | Select-Object -ExpandProperty Node

Select-Xml 에 대한 자세한 사용방법을 확인하기 위해서는 아래 메뉴얼을 참조하시거나 Powershell 에 Get-Help Select-Xml -Detailed 라고 명령하면 메뉴얼을 확인 할 수 있습니다.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-xml?view=powershell-6

두 가지 방법 모두 XML_PATH 파일에 대해 XPath 의 형태로 각 node 에 접근 할 수 있고 $links, $links2 를 확인해 보면 같은 결과라는 것을 확인 할 수 있습니다.



Autohotkey 를 사용한지는 꽤 오래 된것 같고 저는 보통 Autohotkey 를 설치할때 recommend 버전인 unicode 32 비트를 설치하곤 합니다. 그런데 최근에 Autohotkey dllcall 을 사용하여 msvcrt.dll 의 _i64toa 함수를 사용하다 보니 제가 설치한 unicode 32-bits Autohotkey 에서는 정상적으로 동작을 하지 않더군요. _i64toa 함수는 radix 를 변환하는 함수이고 보통 2 진수, 8 진수, 16 진수 등으로 변환하는데 사용하곤 합니다.

_i64toa 함수의 사용 예는 아래와 같습니다. 아래 예는 숫자 15를 16진수(Hexa) 값으로 변환하는 예인데~



decNumber := 15

radix := 16

VarSetCapacity(kk,65,0)

DllCall("msvcrt\_i64toa", "Int64", decNumber, "Str", kk, "Int", radix)

msgbox %kk%

실행을 해보면 아래와 같이 정상적으로 f 라는 값이 나오게 됩니다.

그런데 decNumber := 16 으로 하게 되면 아래와 같이 뭔지 알 수 없는 값이 나오게 되더군요.

여러가지 방법들을 시도하다 알게 된게~ Autohotkey 가 설치된 폴더(C:\Program Files\AutoHotkey)에 같이 들어있는 AutoHotkeyA32.exe 즉 ANSI 32-bit 를 사용하면 정상적으로 동작을 하더군요. decNumber := 16 인 경우에 대해 AutoHotkeyA32.exe 를 사용하여 실행해보면 아래와 같이 정상적인 Hexa 값을 얻을 수 있습니다.

Autohotkey 를 설치 할때 보면 아래와 같이 ANSI 32-bit 의 경우 legacy scripts 와의 호환성이 좋다고 나오고 따라서 기존 DLL 과 같이 좀 오래된 라이브러리를 사용하는 경우에는 ANSI 32-bit Autohotkey 를 사용하는게 적절할 듯 보입니다.

그런데 우리는 한글을 주로 사용하고 한글 정규 표현식 등을 사용한다면 unicode 버전을 사용하는게 좋으므로 제가 내린 결론은 unicode 32 비트 버전을 default 로 설치하고~ legacy scripts 를 사용할때만 선택적으로 ANSI 32-bit Autohotkey 를 사용하는게 적절할것 같습니다.



예전에 학부생 때는 회로이론 과목을 굉장히 좋아했던 기억이 있는데 오랜만에 저항을 보니 적응이 잘 안되더군요. 역시나 간단한 것이라고 해도 배운 것들은 그때그때 기록을 해놓는게 좋은것 같습니다.

오늘 기록하려고 하는 내용은 병렬저항 계산 공식인데 아시는 바와 같이 저항은 직렬 연결 됐을 경우에는 그냥 더하면 되고 병렬로 연결된 경우 아래와 같이 계산이 됩니다.

R1, R2 병렬 연결

R1, R2, R3 병렬 연결

R1, R2, R3, R4 병렬 연결

R1, R2, R3, R4, R5 병렬 연결

MATLAB 에서 병렬 저항을 조금더 편리하게 계산하기 위해 병렬 저항을 계산하는 MATLAB 코드를 작성했고 아래와 같습니다. 임의의 숫자의 아규먼트에 대해서 처리하기 위하여 아래의 포스팅에서 소개를 했던 varargin 을 사용했습니다.

http://iamaman.tistory.com/372

병렬저항 값을 계산하는 ParallelResistance 함수는 MATLAB 명령창에서 아래와 같이 사용하면 됩니다.

>> ParallelResistance(1,2,7,8)

ans =

0.5657



회사에서 사용하는 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))];



최근에 개인적인 필요에 의해 nonlinear regression 을 접하고 있는데 아래 포스팅을 보면서 개념을 잡아가고 있습니다.

http://darkpgmr.tistory.com/58

nonlinear regression 알고리즘 중 유명한 것이 Levenberg-Marquardt 라고 하는데 Levenberg-Marquardt 알고리즘은 gradient descent 와 Gauss–Newton 방법이 합쳐진 형태라고 하더군요. 그래서 일단 gradient descent 는 아니까 Gauss–Newton 방법이 무엇인지에 대해 공부를 하기 위해 검색을 하던 중 위 블로그를 발견하게 되었고 백문이 불여일타라고 일단 코딩해 봐야 이해가 되니까 위 포스팅에서 맨 아래 있던 예제를 MATLAB 으로 돌려 봤습니다.

예제는 원 방정식에 대해 가우스-뉴턴 방법을 적용해서 파라미터를 찾는 것입니다.

원의 중심과 반지름을 a, b, r 이라고 하고 이를 벡터로 표현하면 x=[a; b; r] 입니다.

원의 방정식(F)는 아시는 바와 같이 아래 수식과 같고~ 아래 수식에서 대문자 X 와 소문자 x 가 다르다는것을 염두에 두시기 바랍니다…. 다른 문자로 쓸걸 그랬나…. ??

위 수식에 대하여 변수 a, b, r 에 대한 자코비안(J)는 아래와 같습니다.

Gauss–Newton 업데이트 수식은 아래와 같습니다. 아래 수식에서 ‘ 는 Transpose 를 의미 하고 inv() 함수는 matrix inverse 함수입니다.

x = x - inv(J(x)' * J(x))*J(x)'*F(x)

MATLAB 에서 inv 함수를 사용하는것 보다는 역슬래쉬(\) 를 사용하는게 더 추천하는 방식이기 때문에 위 수식은 아래와 같이 구현 했습니다.

x = x - (J(x)' * J(x))\J(x)'*F(x)


반지름이 3 이고 중심이 (x,y) = (1,3) 인 원의 방정식을 하나 만들었고 제가 작성한 MATLAB 코드는 아래와 같습니다.

NOP = 100;

center = [1,3];

radius = 3;

style='b-';

THETA=linspace(0,2*pi,NOP);

RHO=ones(1,NOP)*radius;

[X,Y] = pol2cart(THETA,RHO);

X=X+center(1);

Y=Y+center(2);

H=plot(X,Y,style);

grid on

axis square;

axis equal;

다음으로 해당 원의 방정식에 대해 Gauss–Newton 방정식을 적용하는 코드는 아래와 같습니다.

XX=X(:);

YY=Y(:);

x = [0;1;15];

% 원의 방정식에 대한 가우스-뉴턴 방법

for n=1:60

Y=YY(n:(n+10));

X=XX(n:(n+10));

F = sqrt((X-x(1)).^2 + (Y-x(2)).^2)-x(3);

J = [(x(1)-X)./sqrt((X-x(1)).^2 + (Y-x(2)).^2) (x(2)-Y)./sqrt((X-x(1)).^2 + (Y-x(2)).^2) -ones(size(X))];

x = x - (J' * J)\J'*F;

end

x

위 코드에서는 초기값은 0, 1, 15 로 했고 돌려보니 아래와 같이 원의 중심과 반지름을 정확히 추정함을 확인 할 수 있었습니다.

x =

1.0000

3.0000

3.0000

그런데 다들 아시겠지만 Gauss–Newton 방식은 초기값에 따라 발산의 우려가 있다고 합니다. 저도 실험을 해보니 초기값을 다른 값들로 해서 실험을 많이 하다 보니(ex x = [0;8;15];) 로 한 경우에는 추정값이 발산하더군요.



MATLAB 의 format 명령을 사용하면 명령 창의 출력 표시 형식을 rat, hex, short, long 등으로 변경할 수 있습니다. 공학을 하다보면 숫자를 표현할때 단위에 따라 kilo, giga, mega 등과 같은 단위를 사용하곤 하고 이런 형식으로 바꾸기 위한 방법을 찾아보니 아래 주소에서 괜찮은 코드를 발견해서 소개합니다.

https://kr.mathworks.com/matlabcentral/fileexchange/53886-scientific-prefix-to-number

위 주소에서 다운로드 버튼을 누르면 num2sci.zip 파일을 다운로드 할 수 있고~

num2sci.zip 파일을 압축 해제 한 후에 해당 폴더를 path 에 추가하면 MATLAB 의 아무 디렉토리에서나 사용할 수 있습니다. 폴더를 MATLAB path 에 추가하는 방법은 아래 주소의 글들을 참조하시기 바랍니다.

http://iamaman.tistory.com/1829

http://iamaman.tistory.com/569

http://iamaman.tistory.com/2629

num2sip.m, num2bip.m 함수를 사용할 수 있고 각각 doc num2sip, doc num2bip 이라고 하면 해당 함수에 대한 내용을 보실 수 있습니다.

num2sip 함수는 숫자를 metric prefixed string 으로 변경하는 함수인데 ~ 예를 들어 1000 이라는 숫자를 표현할때는 아시다시피 1 kilo 라고 표현하고 아래와 같이 MATLAB 명령창에 타이핑 하면 됩니다.

>> num2sip(1000)

ans =

1 k

>> num2sip(1e6)

ans =

1 M

num2sip 함수에 대한 설명을 보시면 아시겠지만 아래와 같이 4개 까지 인자를 받을 수 있습니다.

str = num2sip(num, sgf, pfx, trz)

num 은 숫자, sgf 는 표현할 숫자의 자리수, pfx 는 단위의 Full name 으로 할지 Symbol 로 할지 trz 는 자리수를 맞추기 위한 0을 넣을지 말지에 대한 결정입니다.

아래와 같은 예로 사용하시면 됩니다.

>> a=128e6

a =

128000000

>> num2sip(a, [], true, true)

ans =

128.00 mega



Simulink 를 사용하면서 shift register 가 필요한 경우가 종종 있는데 개인적으로는 unit delay 를 사용하여 shift register 를 구성하곤 합니다. 그런데 shift register 의 사이즈가 얼마 안된다면 그냥 노가다로도 만들수 있지만 그 사이즈가 커 진다면 이렇게 일일이 만들어서 사용하는것이 힘들더군요. 그래서 오늘은 unit delay 를 사용한 shift register 를 자동으로 만들어주는 스크립트를 소개하려 합니다.


shiftRegisterGeneration 함수를 만들었고 코드는 아래와 같습니다.



아래 명령어는 shiftRegisterGeneration 함수를 사용하여 15 사이즈의 shift register 를 만드는 명령어 입니다. MATLAB Command Window 에서 아래 명령을 실행하면

shiftRegisterGeneration(15)

아래와 같이 ShiftRegister15 라는 이름의 subsystem 이 만들어 지고~

해당 subsystem 을 들어가 보면 아래와 같이 unit delay 로 구성된 shift register 가 만들어 집니다.



+ Recent posts