Lua를 연습해볼 겸 이전에 PacMan에 사용했던 유전 프로그래밍을 약간 변형해서 적용해봤다. 너무 단순한 방법이라 그런가 성능이 좋은 편은 아니지만, Lua의 coroutine을 연습해보는 정도로 만족. 애초에 더 좋은 알고리즘을 만들려면 이전 상태를 고려하고 탄막의 속도를 계산할 줄 아는 알고리즘을 생각해야겠지(일단 지금 드는 생각은, 사람이 직접 이런 feature를 만드는건 귀찮고 재미도 없을 것 같으니 (귀찮아서 안 할듯 하지만)만약 시도한다면 NEAT나 변형된 Deep Q-Learning을 구현할 생각).

GitHub Link: https://github.com/kcy1019/strikersii_ai (forked from https://github.com/aikorea/strikersii_ai)


토익 성적표가 필요한데 난 프린터가 없어서.. 이걸 PDF로 소장하기 위해 삽질한 기록을 남겨둔다.

인터넷에 여러가지 팁이 있지만, 어째서인지 그게 Windows 7에선 잘 되는데 Windows 8에서는 안 먹히더라 -_- SPL파일 형식이 열어보니 ZIP + XML형식.. 아무래도 OXPS랑 비슷한 구조를 가지고 있어서 그런듯 한데... 어쨌든 의외의 방법으로 성공했다.

일단 준비물:

  • http://lerup.com/printfile/ (SPL Viewer는 "No PCL and Postscript file! Load anyway" 라고 하면서 안 열리지만 이걸로는 잘 된다)
  • 증명서 발급이 가능한 가짜 프린터(대충 고급 프린터 설정(검색에서 찾으세요) -> 원하는 프린터가 없습니다 -> HP나 Canon에서 아무거나 골라 설치하면 된다).

이제 없는 프린터로 TOEIC 성적표를 출력하려고 하면 오류가 나서 당연히 출력이 되지 않는다. 이 때 C:\Windows\System32\Spool\Printers 에 들어가면 XXXXX.SPL과 같은 SPL파일이 있을텐데, 이걸 아무데나 복사해두고, 인쇄를 취소한 다음 토익 성적표 출력 창을 끄자(이 창이 켜져있는 동안엔 ActiveX가 컴퓨터에 큰 장애를 안겨주어 정상적인 작업이 불가능하다).

그 다음에는 PrintFile을 실행하고 Print File을 클릭한 다음 아까의 SPL파일을 클릭하면 출력 대화 상자가 나타나는데, 이 때 한컴의 PDF프린터가 있다면 그걸로 뽑으면 바로 PDF가 되고, 아니라면 MS XPS 프린터로 XPS/OXPS로 뽑은 다음 적당한 인터넷 사이트나 앱(이를테면 맥의 XPS-to-PDF-Lite라든가)을 찾아서 변환하면 된다(XPS로 갖고있어도 뭐.. 윈도우즈에서만 쓸거라면 상관 없고).

개인적으로 맥북 키보드의 기본 키맵은 꽤나 괜찮다고 생각한다. 하지만.. 키 배열이 다른 외장키보드를 연결할 경우 매우 불편해진다.

이를테면 보통 사용되는 한글 키보드의 경우 스페이스 키 왼쪽에는 CONTROL-COMMAND-OPTION 순서로 키가 매핑되는데, 이게 맥북 기본 키보드의 (FN-)CONTROL-OPTION-COMMAND와 다른 점과, 맥북 키보드의 FN키를 외장 키보드에서 누를 방법이 없는 점이 그렇다(Page up/down이야 직접 키를 누르면 된다고 하자, 화면 밝기 조절이나 볼륨 조절 등은?).

이를 해결할 방법을 찾아보니 거의 모든 답변이 키를 리매핑하는 소프트웨어를 이용하는 것이었는데, 직접 해보니 확실히 편리해지긴 했지만, 그 과정에서 약간의 삽질을 했기 때문에 -_-; 다시 헤매는 일이 없도록 내가 사용한 설정법을 간단하게 적어본다.

1. Karabiner 다운로드 및 설치(https://pqrs.org/osx/karabiner/index.html.en).

2. private.xml 위치 찾기

3. 단순한 키 변환 문법(자세히:https://pqrs.org/osx/karabiner/xml.html.en#autogen-syntax)

키를 다른 키로 바꾸기: 

<autogen>__KeyToKey__ KeyCode::CONTROL_L, KeyCode::OPTION_L</autogen>

(왼쪽 CONTROL키를 왼쪽 ALT키로 바꾼다)

키를 다른 키 조합으로 바꾸기: 

<autogen>__KeyToKey__

    KeyCode::OPTION_R,

    KeyCode::SPACE, ModifierFlag::COMMAND_L

</autogen>

(오른쪽 OPTION키를 왼쪽 COMMAND + 스페이스 키로 바꾼다)

키 조합을 다른 키로 바꾸기: 

<!-- LCTRL+LSHIFT+ARROW(R/L) ==> VOLUME UP/DOWN -->

<autogen>__KeyToConsumer__

    KeyCode::CURSOR_RIGHT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

    ConsumerKeyCode::VOLUME_UP

</autogen>

<autogen>__KeyToConsumer__

    KeyCode::CURSOR_LEFT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

    ConsumerKeyCode::VOLUME_DOWN

</autogen>

  *3개 이상의 키 조합의 경우에는 pipe(|)를 이용한다.

키 조합을 다른 키 조합으로 바꾸기: 

<autogen>__KeyToKey__

    KeyCode::SPACE, ModifierFlag::SHIFT_L,

    KeyCode::SPACE, ModifierFlag::COMMAND_L

</autogen>


4. 디바이스 한정 문법

외장 키보드의 키 리맵이 내장 키보드에까지 영향을 주면 불편하기 때문에 키 리맵을 외장 키보드로 입력하는 경우만으로 제한하면 편리하다.

우선 메뉴 바의 사과마크를 클릭, "이 Mac에 관해서"를 선택한 다음, "시스템 리포트"를 눌러 외장 키보드를 찾는다.

<devicevendordef>

    <vendorname>LEOPOLD</vendorname>

    <vendorid>0x0853</vendorid>

</devicevendordef>

<deviceproductdef>

    <productname>FC660C</productname>

    <productid>0x0134</productid>

</deviceproductdef>

그 다음엔 위와 같이 디바이스와 제조사의 정보를 정의한 다음, 아이템에 device_only를 추가하면 된다.

<item>

        <name>FC660C</name>

        <identifier>private.fc660c</identifier>

        <device_only>DeviceVendor::LEOPOLD,DeviceProduct::FC660C</device_only>

 

        ... (키 리맵 정보들)


</item>

5. 예시

<?xml version="1.0"?>

<root>

 

    <devicevendordef>

        <vendorname>LEOPOLD</vendorname>

        <vendorid>0x0853</vendorid>

    </devicevendordef>

 

    <devicevendordef>

        <vendorname>APPLE</vendorname>

        <vendorid>0x05ac</vendorid>

    </devicevendordef>

 

    <deviceproductdef>

        <productname>FC660C</productname>

        <productid>0x0134</productid>

    </deviceproductdef>

 

    <deviceproductdef>

        <productname>AppleInternal</productname>

        <productid>0x0273</productid>

    </deviceproductdef>

 

    <item>

        <name>FC660C</name>

        <identifier>private.fc660c</identifier>

        <device_only>DeviceVendor::LEOPOLD,DeviceProduct::FC660C</device_only>

 

        <!-- CTRL+SHIFT+ARROW ==> VOLUME UP/DOWN -->

        <autogen>__KeyToConsumer__

            KeyCode::CURSOR_RIGHT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

            ConsumerKeyCode::VOLUME_UP

        </autogen>

 

        <autogen>__KeyToConsumer__

            KeyCode::CURSOR_LEFT, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,

            ConsumerKeyCode::VOLUME_DOWN

        </autogen>

 

        <autogen>__KeyToKey__

            KeyCode::OPTION_R,

            KeyCode::SPACE, ModifierFlag::COMMAND_L

        </autogen><!-- Right Option ==> Kor./Eng. Change -->

 

        <autogen>__KeyToKey__ KeyCode::CONTROL_L, KeyCode::OPTION_L</autogen>

        <autogen>__KeyToKey__ KeyCode::OPTION_L, KeyCode::COMMAND_L</autogen>

        <autogen>__KeyToKey__ KeyCode::COMMAND_L, KeyCode::CONTROL_L</autogen>

 

    </item>

 

    <item>

        <name>Apple::Alt.To.Lang.Chng</name>

        <identifier>private.AppleLangChng</identifier>

        <device_only>DeviceVendor::APPLE,DeviceProduct::AppleInternal</device_only>

        <autogen>__KeyToKey__

            KeyCode::OPTION_R,

            KeyCode::SPACE, ModifierFlag::COMMAND_L

        </autogen><!-- Right Option ==> Kor./Eng. Change -->

    </item>

 

</root> 

*여담인데, 문법이 include를 지원하기 때문에 이 설정 역시 dotfile과 함께 git으로 관리해도 편할 것 같다.

'Computer' 카테고리의 다른 글

Strikers 1945 II AI  (2) 2016.03.24
Windows 8에서 TOEIC 성적표 PDF로 뽑기  (5) 2016.03.16
PacMan for Terminal  (0) 2015.06.16
SQL Injection  (0) 2015.05.18
Windows8 / Windows Server 2012에서 Apache+MySQL 속도 문제 해결  (0) 2015.05.07