221017 아이패드 한영전환 이슈

최근 아이패드를 맥북 대체용으로 가지고 다니는 실험을 하고 있다. 키보드 케이스에 펜슬을 붙여서 들고 다니는데 마우스의 부재와 이를 충분히 커버해주지 못하는 iPadOS의 한계가 항상 아쉽다.

그나마 키보드라도 멀쩡해야 하는데 한영전환을 해도 입력기가 바뀌지 않는 이슈가 발생했다. 영어로는 못 찾고 한국어로 된 포럼 글 중에 이런 내용이 있었다. 서로 다른 키보드가 페어링된 서로 다른 두 기기에서 발생한 것으로 미루어 보아 OS 이슈일 가능성이 크다는 이야기, 그리고 전체 키보드 접근 옵션을 해제함으로써 이슈가 해결되었다는 이야기, 그리고 역시 애플 서비스 센터는 쓰레 몹쓸 물건이라는 이야기가 주된 내용이었다. 같은 내용은 아니지만 유니버셜 컨트롤 상태에서 입력기 전환이 요상한 동작을 보인다는 레딧 글도 있었다. 둘 다 비슷한 시기(22년 10월으로부터 7개월 전)에 등록된 글인 걸로 보아 역시 애플의 운영체제는 쓰레 몹쓸 물건이다.


정방향이 불가능하므로, 중지합니다

이리저리 짜깁기 한 코드를 깃헙에 띄우려고 리포 파고 리모트 설정해서 날리려는데

정방향이 불가능하므로, 중지합니다.

라는 에러가 떴다. 검색해도 딱히 유용한 게 없고, 난감하려는 찰나에 영어 원문 을 발견했다.

Not possible to fast-forward, aborting.

Fast-forward가 어떻게 정방향 으로 해석되는지는 차치하고, 해결법을 검색해보았다.

git pull --rebase

그러니까 git pull 을 하려면 현재 로컬 디렉터리에 있는 모든 내용이 리모트 디렉터리에도 있어야 하는데 그렇지 못하니까 Fast-forward가 안 된다는 거였다. Stackoverflow

Your branch is no longer directly based off of the branch you're trying to merge it into - e.g. another commit was added to the destination branch that isn't in your branch. Thus, you can't fast-forward into it (because fast-forward requires your branch to completely contain the destination branch).

You can rebase your branch on top of the destination branch (git rebase <destination branch>) to rework the commits such that they will fast forward into it, or you can do a regular merge.

입력언어 자동으로 바꾸기

터미널이라든지 어도비 제품들을 쓸 때처럼 입력기가 영문이 편한(또는 입력기가 영문이어야하는) 경우가 있다. 앱을 변경해서 이런 앱에 포커스가 맞춰졌을 때 자동으로 입력기가 바뀌면 편하겠다는 생각에 이런저런 방법들을 강구했던 적이 있다. 스크립트 폴더를 정리하다보니 그 흔적들이 남아있어 지우기 전에 적어두면 좋겠다는 생각이 들었다.

저 기능은 두 부분으로 나눌 수 있다. 앱 포커스가 바뀌었는지 확인하는 부분과 포커스된 윈도우가 조건에 일치할 경우 사전에 설정한 입력기로 입력기를 변경하는 부분. 이번에 정리한 코드들은 후자에 해당하는 부분이었다.

swim, keyboardSwitcher 두 가지 정도가 있었는데 기억이 맞다면 swim은 빌드된 바이너리가 없었고, keyboardSwitcher의 경우에는 homebrew로 설치할 수 있었던 걸로 기억한다. swim은 빌드에 실패했고 keyboardSwitcher는 설치하고 ks로 단축어를 설정해서 사용할 수 있었다.

비슷한 기능으로 kawa라는 패키지가 있었는데 이건 사전 설정한 키보드 단축키를 눌러서 중간 과정 없이 입력언어를 변경하는 것으로 내가 필요로 하는 기능과는 살짝 달랐다. 하지만 많은 사람들이 필요로 하는 기능이라고 생각한다.

아이러니하게도 결국에는 Keyboard Pilot 으로 정착하게 되었다. 매 초 최전면 앱을 확인하는 건 리소스 점유율 측면에서도 좋지 않았고 최대 1초를 기다려야 하는 것도 사용성 측면에서 별로였기 때문이다.


터미널에서 날씨보기, wttr.in

터미널에서 날씨 정보를 확인할 수 있는 방법을 찾다보니 wttr.in라는 서비스가 있었다. 문서를 읽어보니 curl, wget, httpie 를 지원하고 터미널 텍스트 외에 png 파일로 받는 옵션도 존재한다. curl wttr.in처럼 쓰면 요청하는 곳의 ip를 기반으로 위치를 추정해서 날씨를 알려주고 특정한 지점의 날씨를 요청하는 옵션 또한 존재한다. 워낙 옵션이 많고 기능이 다양하니 깃헙 README를 반드시 읽어볼 필요가 있다.

날씨 정보이니 정확도 또한 중요한 요소이다. 깃헙 이슈에 보면 정보가 정확하지 않다는 지적이 많이 있는데 적어도 서울의 경우에는 기상청 데이터와 거의 근접한 결과를 보여준다. 정확도에 있어서도 어느 정도 믿을만 한 듯 하다.

사견으로는 기능이 많지만 각 기능에 대해 꽤 상세하게 설명하고 있기 때문에 curl을 한 번이라도 써 본 경험이 있으면 어렵지 않게 쓸 수 있을 것이다. 사용성 측면에서도 고민이 많이 들어간 것 같아 굉장히 편리하게 쓸 수 있을 듯 하다. 매우 추천할 만한 서비스다.


non-standard shell 오류

macOS 기본 셸이 /bin/zsh 로 바뀌었으나, 루프문이라든가의 이유로.. 다 필요없고 귀찮아서 계속 /bin/bash 를 쓰고 있었다. 문제라면 기본 탑재 bash의 버전이 3.x 대라는 거.

셸 스크립트에서 globstar 를 쓰려면 4.x 이상 버전이 필요하다. 기본 셸의 상태를 보자.

the-macbook-pro:~ canor$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.

Copyright (C) 2007 을 2021년에 보게 될 줄은 꿈에도 몰랐다. 이 정도면 믿고 쓰는 homebrew에 뭔가 있겠거니 싶다. 역시 믿고 쓰는 홈브류.

the-macbook-pro:~ canor$ brew info bash
bash: stable 5.1.4 (bottled), HEAD
Bourne-Again SHell, a UNIX command interpreter
https://www.gnu.org/software/bash/
/usr/local/Cellar/bash/5.1.4 (157 files, 10.9MB) *
  Poured from bottle on 2021-05-04 at 14:37:19
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/bash.rb
License: GPL-3.0-or-later
==> Options
--HEAD
        Install HEAD version
==> Analytics
install: 20,226 (30 days), 63,561 (90 days), 299,808 (365 days)
install-on-request: 16,879 (30 days), 53,945 (90 days), 254,611 (365 days)
build-error: 0 (30 days)

brew install bash 를 입력하고 chsh -s /usr/local/bin/bash 해서 기본 셸을 5.x 대 bash 로 변경할 수 있다. 원래대로라면 순조롭게 진행이 되어야하지만 문제가 생긴다.

chsh: /usr/local/bin/bash: non-standard shell

이건 뭔가 싶다. 어째서 non-standard shell이지.

해결책을 찾다 이 글의 댓글에서 해답을 발견했다. /etc/shells 에 셸 위치를 넣어주어야 변경이 가능하다나. 어째선지는 모르겠지만 sudo "/usr/local/bin/bash" >> /etc/shells 해도 권한이 없다고 안 써지길래 그냥 sudo vim /etc/shells 해서 직접 입력했다.

그리고 chsh -s /usr/local/bin/bash 하니 문제없이 진행된다.