오늘 오토핫키 사이트에 가보니 정말 오랜만에 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 는 정말 사용하면 사용할수록 무궁무진한 가능성을 가지고 있는 것 같습니다.



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 의 입력에 대해 정규 표현식 매칭을 하고 그에 따른 동작을 하게 된다는 것을 알 수 있습니다.

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



Windows 에서 폴더 및 파일 관리시 비어 있는 폴더를 삭제 하고 싶은 경우가 있습니다.

 

그래서 저는 간단하게 빈폴더를 삭제하는 Powershell script 를 만들어서 사용하곤 합니다.

 

아래 소개한 powershell profile 에 작성해서 사용하면 조금더 편리하게 사용 할 수 있습니다.

 

http://iamaman.tistory.com/1017

 

스크립트는 아래와 같습니다. 그냥 하위 폴더는 그냥 두고 현재 폴더만 확인하고 싶은 경우와 빈 폴더만 확인하고 싶은 경우를 위해 recurse 와 Delete 를 옵션으로 줬습니다.

 

function emptyFolderFind

{

    param

    (

        $folder,

        [Switch]$Recurse,

        [Switch]$Delete

    )

 

    if($Recurse)

    {

        $a = Get-ChildItem $folder -Recurse | Where-Object {$_.PSIsContainer -eq $True}    

    }

    else

    {

        $a = Get-ChildItem $folder | Where-Object {$_.PSIsContainer -eq $True}

    }

    

    $b = $a | Where-Object {($_.GetFiles().Count -eq 0) -and ($_.GetDirectories().Count -eq 0)}

    $b | Select-Object FullName    

      

        

    if ($Delete -and $b)

    {

        $b | Remove-Item -Force

        Write-Host "Empty folder Deleted!!"

    }    

}

 

E:\workspace 하위의 폴더 중 빈폴더를 삭제 하기 위해서는 아래와 같은 명령어를 사용합니다. 

emptyFolderFind "E:\workspace" -Delete

 

하위 폴더도 검색하기 위해서는 Recurse 옵션을 주고 아래와 같이 Recurse 하게 검색 및 삭제 할 수 있습니다. 

emptyFolderFind "E:\workspace" -Delete -Recurse


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

 

해당 언어의 이름은 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