0. 요약
macOS에서 쓸만한 IPA 키보드 깍는 노인 연구자 이야기입니다.
실제 macOS 앱은 섹션 5에서 받을 수 있고, 나머지는 만들었던 동기와 과정에 대해 설명합니다.
목차
1. 좀이 쑤셔서
며칠 전 이런 글을 올렸다. macOS에서 사용하기 적절한 IPA 입력수단을 못찾아서 직접 만들어 쓴다는 내용.
https://linguisting.tistory.com/233
막상 블로그에 글을 올려놓으니 좀이 쑤시더라. 이름을 안 붙인 원시적 CLI를 쓰긴 했지만 버그도 많고 그래서 아주 본격적으로 논문쓸때나 쓰지 일상생활(?)에서는 안 썼다.
그래서 진짜 내가 매일 쓸 수 있을 것같은 IPA 입력기 앱을 구현했다.
2. 앱이름이 "굳이 또 이렇게"?
세상에는 IPA 입력하는 방법이 참 많은데 내가 "굳이 또 이렇게 IPA 키보드"(Just another IPA keyboard)를 만들었다.
그래서 이름은 Just another IPA keyboard - Simplified ("굳이 또 이렇게 IPA 키보드, 그런데 간편한") 줄여서 yikes [jaɪks]다.
이 앱 이름은 노래에서 따온 것이다. 요조가 "세상에는 이렇게 부를 노래가 많은데 내가 굳이 또 이렇게 음표들을 엮고 있어요"라고 노래한 데에서 따온 것이다.
3. 나는 무엇을 원하는가
니가 진짜로 원하는 게 뭐야.
어짜피 내가 편하고자 만드는 거니까 철저히 "내가 진짜로 뭔하는 거"에 맞춘다.
3.1 마우스 클릭하기 싫음
macOS에서 IPA 기호를 마우스 클릭 없이 키보드만으로 입력할 수 있어야 한다. 막 t= 누르면 θ 튀어나오고 그런거. keyman의 IPA키보드가 모델이다. 시중에 IPA picker들이 많은데, 그건 너무 입력 속도가 느리다. 하나하나 언제 다 누르고 있어😂
애초에 난 음운론 석사과정생때부터 IPA입력을 keyman으로 해왔기 때문에 매핑을 그냥 keymap 것을 그대로 구현하면 된다. 개인적으로 생각하기에 지구상에서 가장 완벽한 입력법이라고 생각함.ㅋㅋ
3.2 키보드 레이아웃 추가 없이
IPA 입력을 가끔 하자고 아예 키보드 레이아웃을 추가하는 건 못할 짓이다. 그냥 keyman 쓰지 그러냐 할 수 있는데, keyman을 사용하면 IPA 키보드 레이아웃을 아예 추가해서 상당히 불편하다. 키보드 레이아웃이 많으면 전환할 때마다 걸리적거린다.
난 이미 키보드 레이아웃이 많다. 한글, 영어, 그리고 몰타어까지 총 3개다. 4개는 감당할 수 없다. 상상만해도 끔찍하다. 영어입력하다 한글 입력하고 싶은데 후딱 전환 못함ㅋㅋㅋㅋ 난 IPA 입력 잘 안한다. 곰곰이 생각해봤는데, 아무리 내가 24시간 논문을 쓰는 기계더라도 IPA키보드 쓸 일은 많이 없을 것이다. 다만, IPA를 입력해야 할 순간에는 아주 집중적으로 많이 입력해야 한다.
3.3 가볍고 단순하게
필요할 때 딱 나와야 한다. 지우가 "피카츄 너로 정했다" 했는데 피카츄가 나오는 데 하세월 걸린다면, 늘상 피카츄를 몬스터볼 밖에 꺼내놓을 수밖에 없다. 그런데 3.2에서 이미 기술했듯이 난 항상 피카츄가 필요한 게 아닌걸? 그니까 몬스터볼에 들어가있다가 후딱후딱 나오면 좋겠다.
내가 주력으로 실행가능한 파일(executable)을 만드는 콤비네이션은 pyqt5 + pyinstaller인데, 이 구성으로는 "피카츄 너로 정했다" 한다면 피카츄가 나오기까지 수십초에서 심하면 1분가까이 걸린다. 그래서 pyqt5로 코딩하고 nuitka로 compile했다. 1
3.4 변환 안하는 거도 선택지
부가기능(bells and whistles) 필요없다. 그냥 입력창만 딱 있으면 된다. 다만, Esc 누르면 일반모드랑 IPA 모드를 왔다갔다해야 한다. 왜 일반모드도 가능해야하냐면, 어떤 키 매핑이 IPA로 변환되지 않고 그대로 들어가야 할 일이 있기 때문이다.
예를들어 모종의 이유로 IPA 입력하다가 잠깐 <r>을 입력해야 한다고 치자. IPA모드일 때는 항상 <ɾ로 변환된다. 만약 변환을 원하지 않을 때 앱 밖으로 나가는 거 귀찮다. 그니까 일반모드랑 IPA 모드 전환하자.
3.5 결론
약간 이런거다. IPA 입력해야 할 상황이 되면 앱을 켠다. 앱이 막 순식간에 뜬다. 그리고 그 안에서 IPA와 일반텍스트를 전환해가며 입력 막 한다. IPA랑 일반텍스트 조합해서 막 엄청 쓴다음, 다 했으면 그 앱을 꺼버린다. 이후엔 IPA 신경 안쓰고 살아간다. 그러다가 또 IPA 쓸 일이 생기면 그 앱을 켠다.
4. 코딩: 그냥 하면 재미없으니까
4.1 약간 정신나간 Python 구현
코딩의 방식은 인간의 창의성과 앱의 목적에 합하는 방식으로 한다. 즉, 변수명을 다 IPA로 쓴다. 🤪
이러한 코딩 방식은 ChatGPT라면 고개를 도리도리 저을 인간적 비효율성의 표현이자 IPA키보드라는 앱의 목적의 합하는 방식이다. (미학 수업 어깨넘어 들었다고 코딩으로 현대예술 하고 있네)
(사실 "그냥 하면 시시하니까"가 더 큰 이유 🤪)
이 미친 소스코드는 앱 릴리즈 한 깃헙 리포에서 같이 배포한다.
그리고 3.3에서 적었듯이, nuitka로 compile했다. 사용한 command는 아래와 같음.
nuitka --standalone --enable-plugin=pyqt5 --macos-create-app-bundle --onefile --output-dir=build --macos-app-icon=icon.icns --macos-app-name=YIKES YIKES.py
뭔 문제인지 nuitka로 compile해서 나온 .app파일에 아이콘을 지정할 수가 없어서 아이콘은 수작업으로 입혔다. 방법은 간단하다. 해당 .app파일에 Get Info 한다음 내가 만든 icon.icns을 끌어다 놓으면 된다. icon.icns 파일도 깃헙 리포에 있다.
4.2 Swift로 포팅하기
(2024-12-08 추가)
아무래도 런칭속도가 너무 답답하다. 아주 간단한 앱인데 딱 하면 딱 하고 떠야 하는데, 한 2-3초 있다가 뜬다. 이건 싫다.
그래서 맥의 언어인 Swift로 포팅해보기로 했다. Swift는 처음이다. 로직은 동일한데, 키 처리하는 방식이 약간 곤란하다.
아직 진행중이다. 깃헙의 Swift라는 브랜치에 소스가 올라가있다. 다 구현되었는데, 아직 syllabic symbol ([m̩ n̩ ŋ̩] 따위)이 구현되지 않았다.
5. 배포
macOS 11.1 (arm64) 혹은 그 이상에서 구동될 수 있는 바이너리를 아래에 배포한다. dmg파일을 다운로드받은 후, 그걸 더블클릭하면 맥 사용자들에겐 익숙한 '설치'창이 나온다. 설치에 따옴표를 친 이유는 그냥 앱 파일을 Applications 폴더에 옮기는 것이지 실제로 거창한 설치가 아니기 때문이다.
좋아할 것 같아서 다른 글도 준비했어요 |
- 글이 유익했다면 후원해주세요 (최소100원). 투네이션 || BuyMeACoffee (해외카드필요)
- 아래 댓글창이 열려있습니다. 로그인 없이도 댓글 다실 수 있습니다.
- 글과 관련된 것, 혹은 글을 읽고 궁금한 것이라면 무엇이든 댓글을 달아주세요.
- 반박이나 오류 수정을 특히 환영합니다.
- 로그인 없이 비밀글을 다시면, 거기에 답변이 달려도 보실 수 없습니다. 답변을 받기 원하시는 이메일 주소 등을 비밀글로 남겨주시면 이메일로 답변드리겠습니다.
- C++같은걸로 짜서 compile하면 되지 않냐 할텐데, 해보려고 시도해봤음. 근데 한계에 부딪쳐서 못했다. 스킬이슈 맞다. 근데 ChatGPT 할아버지가 와서 도와줘도 해결못할 스킬이슈라서 어쩔수없음. 그리고 무엇보다 외국어(?) 구사하면서까지 노력을 들일 것도 아니고. 어디까지나 사이드 프로젝트다. [본문으로]
'Bouncing ideas 생각 작업실 > exp sharing 경험.실험 나누기' 카테고리의 다른 글
macOS에서 음성기호 IPA 사용하기 (Yikes 쓰세요) (0) | 2024.11.27 |
---|---|
2페이지씩 스캔한 이미지 여러 개 단번에 반갈죽 (0) | 2024.10.26 |
Hangul to IPA 업데이트 중 (완료함) (3) | 2024.06.10 |
ChatGPT는 Praat Script 짤줄 몰라 (0) | 2024.05.27 |
음성 데이터만 있어도 분석해버리기 (0) | 2024.05.14 |