직장인 이라고 한다면 매주 주간 보고와 같은 반복적인 문서를 작성하게 되실 겁니다. 회사에 따라서 다르겠지만 저는 매주 금요일에 되면 윗분들에게 보고를 하기위한 주간 보고를 작성하는데 ~ 양식은 동일하기 때문에 이전 문서를 복사하는 작업들을 윈도우 예약 작업으로 설정 해 놓고 사용하고 있습니다. 이런 파일 작업들은 주로 Powershell 을 사용하지만 오늘은 Autohotkey 를 사용하여 폴더 내 최신 파일을 찾는 방법에 대해서 간단하게 소개하려 합니다.

코드는 아래와 같습니다~




딱 보면 아시겠지만 최신 파일의 Fullpath 가 File 이라는 변수에 저장이 됩니다. 그래도 코드에 대해서 간단하게 설명 드리면~ 코드의 수정 시간을 비교해서 최신 파일을 찾는 방법입니다. 저는 A_LoopFileTimeModified 변수를 사용하여 수정 시간을 비교했지만 A_LoopFileTimeCreated 를 사용하여 생성 시간을 비교 하는 방법도 사용할 수 있을 것입니다. 각자 상황에 맞게 사용하시면 될 것 같습니다.



아주 예전에 아래 포스팅에서 MATLAB 에서 movie, getframe 등을 사용하여 움직이는 그래프를 그리는 방법에 대해서 소개를 한 적이 있습니다.

https://iamaman.tistory.com/27

그런데 최근에 입사파 반사파 그리는 방법에 대해서 질문이 있어서 애니메이션 그래프를 그리는 방법에 대해서 다시 한번 찾아 보게 되었습니다.

위 포스팅이 2010년도에 쓴 글이라… 매트랩 몇 버전인지 기억도 안 하네요. 찾아보니 최근에는 animatedline 을 사용해서 그릴수 있는 것 같더군요.

h = animatedline; 라고 하는 애니메이션 선 핸들을 하나 만들어 주고~ addpoints() 함수를 사용하여 점들을 추가 해 주거나 clearpoints() 함수를 사용하여 해당 핸들의 점들을 지울 수가 있었습니다.

코드는 아래와 같습니다.

해당 코드를 실행하면 아래와 같이 사인 커브가 정방향으로 갔다가 역방향으로 다시 그려지는 것을 확인할 수 있습니다.




Autohotkey 를 사용하여 정말 다양한 편리한 것들을 만들어서 쓸 수 있는데~ 계속 만들다 보면 오히려 아이디어가 부족해서 못 만드는 경우가 많습니다. 개발을 하면서 정말 다양한 프로그램들을 사용하게 되고 메모장이나 브라우저를 여러개를 열고 사용하는 경우가 많이 있습니다.

아래 포스팅에서 다양한 방법으로 프로그램을 닫는 방법에 대해서 소개를 했었는데~

https://iamaman.tistory.com/1180

https://iamaman.tistory.com/2027

오늘은 제목에서 밝힌 바와 같이 현재 프로그램만 남기고 같은 프로세스 다 닫는 방법에 대해서 소개를 하려고 합니다. 일단 오토핫키 코드는 아래와 같고 단축키는 win + F5 로 설정했습니다.


위 Autohotkey 코드를 실행하고 ~~ 많은 수의 메모장을 열어 보겠습니다. 그리고 그 중에서 하나의 활성화된 메모장을 사용하고 있는 중 나머지 메모장들이 너무 많아서 끄고 싶은 경우를 가정해 보겠습니다.

win + F5 단축키를 눌러 보면 현재 프로세스만 남기고 다른 메모장들은 다 꺼지는 것을 확인할 수 있습니다.





정확히 어떤 때라고 말씀드리기는 어렵지만 코딩을 하다 보니 가끔씩 알파벳 인덱스가 필요한 경우가 종종 있었습니다. 그래서 오늘은 Powershell 을 사용하여 알파벳 대소문자를 찍는 방법에 대해서 소개를 해 보려고 합니다.

아시는 바와 같이 알파벳 대문자 A는 아스키코드로 65고~ 소문자 a는 97 부터 시작을 하게 됩니다. A부터 Z까지 전체 알파벳은 26 개 이므로 시작하는 숫자로 부터 26개를 찍어주면 될 것입니다.



코드는 아래와 같고~

Powershell 에서 실행해 보면 아래와 같이 알파벳 대소문자가 찍히는 것을 확인할 수 있습니다.



저는 MATLAB을 비롯하여 다양한 컴퓨터 언어들을 사용하는 것을 좋아하는데 ~ 최근에는 회사에서 실험 데이터를 다루는 과정에서 파이썬을 많이 사용하고 있고 그 중에서 많은 분들이 아실 만한 pandas 라이브러리를 사용하고 있습니다 . 파이썬은 공짜이기도 하지만 pandas 를 비롯한 정말 좋은 라이브러리들이 많아서 앞으로도 꾸준히 사용하게 될 것 같습니다.

실험 데이터들은 많은 경우 엑셀이나 csv 파일 형태로 저장을 하게 되는데, MATLAB에서 xlsread, csvread 와 같은 함수를 통해 이런 데이터들을 불러오게 되고 MATLAB cell 타입에 대해서 다루어야 되는 경우가 종종 있습니다.

셀 타입으로 된 데이터 중 중복되는 내용을 제거하거나~ 유일한 데이터만 추려해야 되는 경우가 종종 발생하게 되는데 오늘은 이에 대해서 소개를 해 보려 합니다.

셀 데이터 중에서 유일한 데이터만 선택하는 것은 정말 간단한데 ~ 아래 포스팅에서도 소개했던 unique() 함수를 사용하시면 되겠습니다.

https://iamaman.tistory.com/269

그리고 위 포스팅에서 사용한 unique, setdiff 함수를 사용하면 ~ 중복되는 내용 역시도 추려 낼 수가 있습니다.

아래와 같이 A 라고 하는 중복되는 내용을 가지고 있는 셀을 준비하고 uniqueDup 함수에 넣어보면~ 유니크한 값이 들어있는 uniqueCell 와 중복된 값이 들어있는 dups 변수를 얻을 수 있습니다.



  1. 오리입니다 2019.11.08 14:07

    매트랩 과제하다가 코드를 잘짠거같은데 움직이질않네요
    한번봐주실수잇아요??
    답을알려드리라는게아니라.. 어떤게잘못됫다라고 짚어주는쪽으로요..가능할까요??
    되신다면. xodls1125-_-@nate.com 메일한번만주세요!!

사인 코사인을 비롯해서 많은 주기 함수들이 있고 가끔씩은 MATLAB 을 사용하여 사용자 지정 주기 함수를 만들어야 되는 경우도 있습니다.

이러한 경우 주기를 만들기 위해서 MATLAB 함수중 나머지를 계산하는 mod(), rem() 과 같은 함수를 사용하게 되는데~ 둘 다 나머지를 계산하는 함수이지만 음수에 있어서 약간 계산이 다르게 됩니다.

다음 예를 보면 차이점을 정확히 알 수 있는데~ mod() 함수는 modulo 연산을 하기 때문에 음수 부분에서도 주기적으로 나오는 반면에 rem() 함수는 플러스 방향끼리 그리고 마이너스 방향 끼리만 주기적인 것을 확인할 수 있습니다.


f = @(t) mod(t, 4);

figure

fplot(f, [-10 10])

title('mod')

figure

f2 = @(t) rem(t, 4);

fplot(f2, [-10 10])

title('rem')

따라서 전체 x 구간에 대해서 주기적인 함수를 만들기 위해서는 mod() 함수를 사용해야 함을 알 수 있습니다.

물론 mod(t, P) 함수의 경우 0 부터 P 까지에 대해 주기성을 나타내는 함수를 만드는 것이므로 만약 함수의 정의가 -2 ~ +2 등과 같이 음수 축을 포함하는 주기함수의 경우 축을 0~4 의 범위로 변한 해 준 후에 사용하시면 될 것입니다.



오늘 오토핫키 사이트에 가보니 정말 오랜만에 Autohotkey 업데이트를 했더군요.

기존에 Autohotkey 에서는 일반적으로 다른 컴퓨터 언어들에는 있는 switch case 문이 없었는데~ 이번에 업데이트가 되면서 Switch case, InputHook 기능이 추가 된 것을 확인할 수 있었습니다.

https://github.com/Lexikos/AutoHotkey_L/releases

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

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

InputHook 관련 메뉴얼의 예문을 보다 보니 auto-complete 기능도 어느 정도 구현을 할 수 있더군요.

아래 포스팅에서 Autohotkey를 사용한 auto-complete 기능에 대해서 포스팅한 적이 있었는데~ InputHook 를 사용하여 구현을 한번 해 봐야 되겠네요~

https://iamaman.tistory.com/1142

https://iamaman.tistory.com/1318

Autohotkey 는 정말 사용하면 사용할수록 무궁무진한 가능성을 가지고 있는 것 같습니다.



아래 포스팅에서 Autohotkey를 사용하여 윈도우 환경변수를 여는 방법에 대해서 소개를 한 적이 있습니다.

https://iamaman.tistory.com/404

물론 저는 요즘은 직접 환경변수 창을 열어서 환경변수를 설정하기 보다는 아래의 포스팅에서 소개 했었던 Rapid Environment Editor 를 사용하여 환경 변수를 설정하는 편입니다.

https://iamaman.tistory.com/1213

윈도우를 사용하면서 정말 많은 설정들을 자주 바꾸게 되는데~ 그중에 하나가 “작업표시줄 자동 숨기기” 기능입니다. Autohotkey를 사용하는 분들은 아시겠지만 Autohotkey 를 사용하면 윈도우 사용의 대부분을 자동화 할 수가 있고~ 오늘은 “작업표시줄 자동 숨기기”를 Autohotkey 로 toggle 시키는 방법에 대해서 소개해 보려 합니다.

현재 제가 사용하는 컴퓨터의 운영체제는 윈도우 7 이고 “작업표시줄 자동 숨기기” 기능을 설정하기 위해서는 “작업 표시줄 및 시작 메뉴 속성” 창을 열어야 합니다. 해당 창은 아래 명령어를 통해서 열 수가 있습니다.

RunDLL32.EXE shell32.dll, Options_RunDLL 1

위 그림과 같이 Win + R 을 눌러서 실행 창을 열고 위 명령어를 실행시키면~ 아래와 같이 “작업 표시줄 및 시작 메뉴 속성” 창이 열립니다.

Autohotkey 에서 위 명령어를 실행하는 방법은 다음과 같습니다. 아래 명령어에서 주의할 부분은 중간에 있는 쉼표를 ` 를 사용하여 escaping 해 줬다는 것입니다.

Run, RunDLL32.EXE shell32.dll`, Options_RunDLL 1

“작업 표시줄 및 시작 메뉴 속성” 창이 열린 후 “작업표시줄 자동 숨기기” 를 toggle 시키기 위해서는 “작업표시줄 자동 숨기기” 가 현재 체크가 됐는지 안 됐는지를 확인해야 합니다. 해당 명령어는 아래와 같습니다.

ControlGet, autohide_unhide, Checked, , Button2, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770

체크가 되어 있으면 autohide_unhide 변수가 1 이 되고 ~ 체크가 안 되어 있으면 해당 변수가 0 이 됩니다. 따라서 autohide_unhide 변수가 1 이면 체크를 해제 해주고 autohide_unhide 변수가 0 이면 체크를 해주면 되겠죠.

해당 코드는 아래와 같습니다.

If autohide_unhide = 1

{

Control, Uncheck, , Button2, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770

}

Else

{

Control, Check, , Button2, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770

}

이제 설정을 다했으면 “작업 표시줄 및 시작 메뉴 속성” 창의 확인을 눌러 줘야 할 것입니다. 현재 제 컴퓨터에서 확인 버튼은 Button9 이고 확인을 눌러 주는 Autohotkey 코드는 다음과 같습니다.

ControlClick, Button9, 작업 표시줄 및 시작 메뉴 속성 ahk_class #32770, , Left, 1, NA

이제 중요한 코딩은 다 끝난 것 같습니다. 코드 사이에 적절히 Sleep 명령을 넣어 주기만 하면 완성 됩니다.

위에서 소개한 전체 코드는 아래 코드를 사용하시면 되겠습니다. 저는 해당 기능을 하는 단축키를 Ctrl + Win + H 로 설정을 했습니다. 원하시는 단축키로 적절히 바꿔서 사용해 보시기 바랍니다.

위 코드를 실행하고 단축키를 눌러보면 아래와 같이 동작하는 것을 확인할 수 있습니다. 재밌지 않나요? ㅎㅎㅎ




아래 포스팅에서 Autohotkey 의 argument 를 사용하는 방법에 대해 소개한 적이 있습니다. Autohotkey 에서 기존의 방법으로 argument 처리를 해 본 분들은 아시겠지만 %0%, %1% 등으로 표현이 되서 약간 이해가 쉽지 않았던게 사실 입니다.

https://iamaman.tistory.com/1635

그런데 최근에 아래 주소의 Autohotkey 문서를 다시 보다보니~ 1.1.27 버전 부터 A_Args 라는 키워드가 생긴것을 확인 할 수 있었습니다.

https://www.autohotkey.com/docs/Scripts.htm#cmd

이렇게 보니 이제 다른 프로그래밍 언어들과 그 사용방법이 거의 차이가 없는것 같네요~

Autohotkey help 문서에 있는 아래와 같은 예제를 한번 돌려보면 그냥 바로 이해가 되실 겁니다.

arg1 := A_Args[1] ; 첫번째 parameter

arglen := A_Args.Length() ; parameter 길이

MsgBox arg length : %arglen%

MsgBox arg1 : %arg1%

for n, param in A_Args ; For each parameter:

{

MsgBox Parameter number %n% is %param%.

}

위 코드에서 보시는 바와 같이 대괄호 인덱스를 사용하여 각 parameter 값을 얻을 수 있고~ Length() 함수를 통해 argument 의 갯수를 알 수 있습니다.

위 코드를 실행하기 위해서는 cmd 창이나 Powershell 과 같은 터미널에서 argument 를 줘야하는데~ 아래 그림과 같이 argument 들은 공백으로 구분을 하고 argument 에 공백이 포함된 경우에는 따옴표(“) 로 묶어 줘야 합니다.

그런데 이렇게 CMD 창에 실행하는건 불편하니까~ argument 가 있는 Autohotkey 코드를 개발 할 때는 scite4autohotkey 에서 View -> Parameters (Shift + F8)창을 열어서 사용하면 편리합니다. 


아래 화면은 보시는 바와 같이 3개의 argument 를 설정한 예입니다. Set 을 누르면 Parameters 창은 사라지고 scite4autohotkey 에디터에서 Run 을 눌러주면 해당 Parameters 들이 순서대로 입력 되게 됩니다.

argument 는 보통 Drag & Drop 을 통해서도 입력 할 수 있는데 위 링크의 문서를 보면 ~ NTFS 파일 시스템에서 8-dot-3 이름이 해제된 경우에는 Drag & Drop 이 실패 할수 있다고 하더군요. 이런 경우에는 해당 Autohotkey 파일을 compile 해서 실행파일(exe) 로 만들면 된다고 합니다.

8-dot-3 (short) name 이 뭔가 해서 검색을 조금 해 보니 오래된 도스 버전에서 사용하던 이름 규칙이라고 하네요.

https://ko.wikipedia.org/wiki/8.3_파일_이름

뭐 그럴일은 별로 없겠지만~ 아래 문서를 보니 fsutil.exe 를 사용하여 8-dot-3 (short) name 기능을 Enable, Disable 할 수 있다고 합니다.

https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name-creation-on-ntfs-partitions



저는 현재 오토핫키를 사용하여 정말 다양한 단축키를 사용하고 있습니다. 오토핫키를 사용한지는 대략 8~9년 정도 된 거 같고~ 계속해서 오토핫키 코드가 누적 되다 보니 사용하는 코드 라인이 적어도 만 줄 이상은 되는 거 같네요. 자주 사용하는 단축키들은 손이 기억을 하지만 자주 사용하지 않는 단축키 같은 경우 시간이 오래되면 기억이 나지 않는 경우가 많이 있습니다.

물론 기억이 안 날 때는 코드를 확인하면 되겠지만 어떤 단축키가 있는지만 확인하고 싶을 때는 사실 일일이 코드를 확인할 필요가 없습니다. 오토핫키가 실행된 상태에서 아래 그림과 같이 마우스 오른쪽 버튼을 눌러서 open 버튼을 누르면 ~ 현재 실행된 오토핫키 프로그램에 대한 다양한 정보가 나타나는 새로운 창이 뜨게 됩니다.

해당 창의 View 메뉴에서 Hotkeys and their methods 또는 Ctrl + H 단축키를 통해 현재 스크립트에 설정된 단축키를 확인할 수 있습니다.

그런데 이러한 방식은 위에 설명한 바와 같이 몇 단계를 거치게 되므로 간단하게 단축키로 Hotkeys and their methods 창이 나타나도록 할 수가 있습니다.

Hotkeys and their methods 창은 ListHotkeys 라는 명령어를 통해서 접근 가능합니다.

오토핫키 스크립트 내에 아래와 같이 코딩을 한 후에~

F7:: ; shortcut F7

ListHotkeys

return

현재 설정된 단축키인 F7 을 누르면~ 아래와 같이 현재 스크립트 내에 단축키를 확인할 수 있는 Hotkeys and their methods 창이 나타나게 됩니다.



요즘은 학생들도 학교에서도 스크래치나 파이썬과 같은 프로그램을 배운다고 하고~ 어찌 보면 프로그래밍이 필수인 시대가 다가오고 있습니다. 물론 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 단축키를 누르면 메모장이 실행되고 위에 소개한 대로 마우스 위치로 이동하는 것을 보실 수가 있습니다.


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



  1. 잣나무 2019.08.27 19:48

    좋은 내용 감사합니다. ^^

회사에서 사용하는 제 컴퓨터에는 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 신고

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

  2. Questioner 2019.08.29 19:39

    안녕하세요. ahk 파일에는

    Loop, %0%
    {
    param :=%A_Index%
    Run http://dict.naver.com/search.nhn?query=%param%
    }

    이것말고 다른 내용이 없나요?

    위 과정 완료해도 저는 왜 홈페이지가 안뜨고 ahk파일이 scite4hotkey로 실행이 되는걸까요? ㅜㅜ

    compile 할 필욘 없는거지요?? 문제가뭘까요...

  3. Questioner 2019.08.29 19:55

    아 찾았습니다^^

    ahk를 scite4hotkey로 연결프로그램해놨기에...

    compile해서 .exe로 실행시키니 되는군요. 좋은 정보 감사합니다^^

    그런데 댓글달때마다 그림문자쓰는게 조금 번거롭긴하네요 ㅎㅎ

    • 남성 2019.08.29 23:05 신고

      아 댓글을 달 때 그림 문자를 쓰게 되어 있는지 처음 알았습니다. 그림 문자를 안 쓰게 하는 설정이 있는지 확인해 봐야겠네요
      ~ 방문해 주셔서 감사합니다. ^^

    • 남성 2019.08.29 23:34 신고

      로그인을 안 한 상태로 댓글을 다는 경우 그림문자는 항상 쓰도록 되어 있네요.

  4. Questioner 2019.08.29 20:31

    덧붙여서 써주신 주소는 사전홈의 주소라서 독일어 국어 베트남어 등등 다 나오는데 영어사전으로 들어가고 싶은 분은 아래 주소 쓰시면 되겠네요

    Loop, %0%
    {
    param :=%A_Index%
    Run https://en.dict.naver.com/#/search?range=all&query=%param%
    }

    • 남성 2019.08.29 23:14 신고

      네 맞습니다. ^^ 참고로 위 포스팅에서의 argument 설정 부분은 Autohotkey 예전 문법 방식인데 최신의 Autohotkey 를 사용하신다면 다음과 같이 조금더 간단하게도 할 수 있습니다.

      param := A_Args[1]
      Run https://en.dict.naver.com/#/search?range=all&query=%param%

      최근의 Autohotkey argument 관련해서는 아래 포스팅을 참조하시기 바랍니다.

      https://iamaman.tistory.com/3002

+ Recent posts