1단계: 수정 대상 앱 또는 시스템 프레임워크 확보

특정 앱을 수정하고 싶다면,

  • 앱 파일 획득

    • 기기에서 직접 추출
      요즘 파일 탐색기에 다들 앱 추출 기능이 있죠. 아니면 Send Anywhere 앱도 있고요.

    • APK 공유 사이트 이용
      저는 APKMirrorAPKPure를 이용하는데요, APKPure 사이트는 왜인지 모르게 중국 풍이 느껴지기는 하지만 한국 개발사 포함해서 각종 앱이 다 있습니다. 혹 변조되었을지 두려운 마음 조금 있지만, 디지털 서명을 믿을 수밖에요. (서명 v1은 뚫릴 수 있다던데... 설마...)

한편 휴대폰 UI를 바꾸고 싶다면,

  • 시스템 프레임워크 파일 획득: 보통 아래 파일을 획득하면 되는 것 같습니다.
    • /system/framework/framework-res.apk : 안드로이드 OS 공통
    • /system/priv-apps/SystemUI.apk : 상태바, 내비게이션 버튼 등 시스템 요소 그리는 애
    • 또한 /system/framework 디렉토리에 제조사별 커스텀 리소스도 있으니 함께 확보해야 합니다.

그 외에 프레임워크 소스 파일, Settings.apk도 확보하셔서 소스를 들여다보면 이 리소스가 어디에 쓰이는지 아는 데 도움이 됩니다. 문제는 안드로이드 OS 5.0부터 ART를 도입하고, 그 후로 갖가지 최적화가 적용되면서 소스 파일이 점점 숨어들어갔습니다. 디컴파일해서 소스 들여다보기가 쉽지는 않습니다.

2단계: 역컴파일 툴 통해 코드 및 리소스 분석

최근 저는 JADX 즐겨 쓰고 있습니다. 별다른 복잡한 조작 없이 달빅 바이트코드를 자바 코드로 바꿔 보여주고, 전체 코드 검색 가능한 점이 좋습니다. 리소스 대상으로는 키워드 검색 안 되는 점은 아쉬워요.

JADX 개발자님들께 이 자리를 빌어 감사드립니다. 물론 의미없죠..
JADX 프로젝트 홈페이지

팁은... 잘 모르겠고... 감으로 때려맞추고 이래저래 하다보면 답이 나옵니다...

한편, 시스템 프레임워크를 수정한다면 제조사 또는 서드파티 테마 파일을 열어보는 것도 좋습니다. 어디를 건드려야 할 지 가이드가 되거든요.

RRO 또는 runtime resource overlay

개념

안드로이드 앱 패키지의 주요 구성 요소는 코드, 리소스라 할 수 있습니다. 이 중 리소스에는 색상, 문자열 같은 단순 값부터, 그림 (drawable), 그리고 (XML) 레이아웃 등이 들어있는데요.

(런타임) 리소스 오버레이는 앱 패키지를 불러올 때, 원래 앱의 리소스를 사용자가 설치한 오버레이 패키지의 리소스로 덮어씌워주는 도구입니다.

소니 모바일 팀에서 개발했고 6.0 - 7.0 시절에 AOSP에 기부했다고 하고요, 8.0부터 본격적으로 도입이 된 것 같아요. 삼성, LG를 포함해서 많은 제조사들이 이 리소스 오버레이 기능을 바탕으로, 휴대폰 테마 기능을 개발하여 적용했습니다. substratum 테마 앱도 리소스 오버레이를 기반으로 작동하죠.

한계

  • 소스 코드를 고칠 수 없습니다. 당연하죠.
  • 새 버전이 나올 때마다 변경 사항이 있는지 보고 반영해야 합니다. 못할 짓이죠.
  • 앱 오류, 또는 시스템 전체에 오류를 일으킬 수 있습니다
    • 단순한 값 변경도 경우에 따라 코드에서 부작용을 일으킬 수 있습니다
    • 레이아웃처럼, 코드에서 리소스 내부 구성요소에 (예. 레이아웃 내 뷰) ID로 접근한다던지 하면, 없어진 요소를 프로그램에서 찾지 못하고 NullPointerException 예외를 일으킬 수 있는 등 예기치 못할 위험이 있습니다

안드로이드 9.0 파이 제한 사항 및 우회 방안

다만 안드로이드 9.0부터는 구글이 보안 개선을 이유로 제조사 서명이 되지 않은 리소스 오버레이는 설치할 수 없도록 제한했습니다. 보안 위협 시나리오가 어떤 것이 있을지..., 소설을 써 보겠습니다만 실현 가능성이 없어 보이네요.

  • 사악한 DLC 앱: 스토어에는 검수하기에 멀쩡해 보이는 앱을 게시하고, 사용자를 속여 리소스 오버레이가 설치되면 오버레이에 정의된 플래그 값을 읽어서 숨겨진 사악한 기능이 활성화되는 앱. 구글 검수를 퍽이나 통과할 수 있겠죠?
  • 앱 기능 망치기: 특정 상수값을 고쳐서 앱 동작을 방해한 뒤, 기밀 정보를 빼돌리기. 참 쉽겠죠?

삼성 기기의 경우 S9/노트9 빼고는 설치 제한이 걸린 것으로 보입니다. 만, 플레이스토어에 파이 OS용 리소스 오버레이 기반 테마 제작 앱이 있습니다. 대단합니다.
LG 기기는 사용자 테마를 만들고 그 안에 직접 만든 리소스 오버레이를 넣어둘 수 있습니다. 안 막히기를 바랍니다.

제작 절차

  • 수정하려는 앱 및 시스템 프레임워크 파일을 획득
  • 역컴파일 툴 (JADX 추천) 통해 코드 및 리소스 분석
  • 리소스 오버레이 프로젝트 폴더 준비: AndroidManifest.xml 파일, res 폴더
  • 수정할 리소스 만들어 넣기
  • aapt 툴 통해 프로젝트를 APK 파일로 생성, 서명 후 기기에 설치

국내 스마트폰은 플레이스토어, 제조사 스토어에서 원하는 폰트를 유·무료로 구입해서 쓸 수 있습니다.

아이폰에는 탈옥 않으면 절대 바랄 수 없고, 외산폰은 루트 권한 있어야 하는 것 같은데...

그런데 스토어에 없는 (수정도 허용되는 라이선스 또는 개인 소장) 폰트를 쓰고 싶으면.. 폰트 패키지를 직접 만들어 써야겠죠. 국내 두 제조사는 각기 다른 패키지 형식을 쓰는데요.

"플립폰트"를 쓰는 듯한 (아직 그대로죠?) 삼성폰은 방법이 여러가지 마련되어 있죠.
예를 들어 파이 OS 즈음부터 (S9/노트9 빼고) 사용자 폰트 추가가 차단된 듯 하나, 테마 무료체험 기능을 오용하는 꼼수가 마련되어 있습니다. https://tali.tistory.com/378
역시 사용자 많고 봐야 합니다. 저도 끼워주세요... 곧 아이폰11 나오니 기대하겠습니다.. 지금도 잘 팔리니 그런 일은 없을 것..
지금은 없는... 팬텍도 플립폰트였네요.

 

그럼 LG는...? "HY폰트"라는데 한양에서 만든 폰트 시스템인가봐요.
문제는 이 집은 해독하기 어려운 폰트 패키지 형식을 쓰는 바람에 사용자가 비공식 폰트 패키지를 만들기가 쉽지 않습니다. 조금 더 자세히는 패키지 내의 "/asset/font.dat" 바이너리 파일이 도대체 무슨 형식인지 알 수가 없습니다.

HY폰트 형식이 나온지가 매우 오래되었기 때문에 비공식 패키지 제작법이 나올만 한데, 저는 아직까지는 찾지 못했습니다. 미국, 아니면 베트남 커뮤니티에서 뚫어줄 만 한데, 굳이 고생할 유인이 없는 듯 합니다. 폰트 판매자 입장에서는 다행이지요.

 

방법이 완전히 없는 건 아니라고 합니다. 다른 폰트 패키지를 하나 받아서, 패키지 내의 폰트 파일을 원하는 폰트로 바꿔치기하는 방식이 있다고 하네요. "font.dat"를 수정하지 않겠다는 의도가 되겠습니다. 이미 수 년 된 방법입니다.

폰트 파일만 교체
폰트 수정 (FontCreator 사용) + 파일 교체

  1. 쓰지는 않을 폰트 패키지를 하나 다운로드하거나 구입하고, PC로 추출해 둡니다.
  2. 패키지를 반디집 같은 압축 프로그램으로 열어서, 폰트 이름, 폰트 파일 이름을 확인합니다.
  3. (필수 아님?) 사용하려는 폰트를 FontForge(무료!) 같은 프로그램으로 열어서 폰트 이름을 패키지의 것으로 바꿉니다.
  4. 사용하려는 폰트 파일 이름을 패키지의 폰트 파일 이름으로 바꾼 뒤, 패키지에 넣어줍시다.
  5. 패키지를 다시 서명한 후, 기기에 설치하고 적용합시다. 기기에서 폰트 이름은 패키지의 것으로 표시되겠습니다.

...뭔가 자괴감 드는 방법이죠.. 그냥 스토어에 있는 폰트 씁시다.

참고: Enable Windows 10 Fluent Design Acrylic Effects in VirtualBox

Windows 10 1903 (19년 5월 업데이트) 즈음부터 'Fluent Design', 특히 아크릴 느낌 배경 효과가 본격 적용되고 있습니다.

그러나 PC 성능이 부족하다던지 하면 알아서 효과가 해제되는데요, 설정 앱에서 "투명 효과"를 아무리 껐다켰다 해도 소용이 없습니다.

위 링크를 보시면 가상PC인 경우 안 되는 모양이고요, 저 같은 경우에는 사용중인 PC가 저성능 PC로 인식이 되었습니다.

이 경우 위의 링크를 참조해서 레지스트리 편집 하나 해 주면 고급 꾸밈 효과를 강제로 동작시킬 수 있다고 합니다.

  • 레지스트리 편집기를 열고
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Dwm까지 찾아 들어가서
  • 새 32-bit DWORD 값을 만들고, 이름은 ForceEffectMode로, 값은 2로 지어주세요. (왜 2일까...)
  • PC를 재부팅하면 끝!

한편, 창이 비활성화될 때 아크릴 효과가 꺼지고 단색 배경으로 대체되는 건 원래 그렇게 설계된 거랍니다. 안 쓰는 창에도 아크릴 배경을 그리는 불필요한 연산을 줄이기 위해서래요. 고성능 PC에서는 다 돌려도 괜찮은데 말이죠.

레딧에 항상 아크릴 배경을 그리게 만든 분이 계시네요. 링크

TL; DR

일단 솔직히 원인을 잘 모릅니다. 다른 블로그 찾아보세요 :( ....

요기가 좋아 보이네요: https://www.tabida.pe.kr/58   
특히 검색 인덱싱 속도를 높이기 위해 "그룹 정책"에 들어가서 "PC를 사용 중이더라도 최고 속도 인덱싱" 옵션을 켜는 것이 인상적입니다. 저는 아직 못 써봤지만...

저의 경우는 PC 포맷 후 수많은 메일이 들어있는 메일 계정 로그인을 해 뒀을 때, 인덱싱이 매우 오래 걸릴 (이건 메일이 많으면 어쩔 수 없다네요.) 뿐더러 인덱싱 중인데 메일 검색을 시도했을 때 검색 결과로 최근 메일 일부만 뜨는 문제였습니다.

<Outlook 옵션 - 검색>에서 "가능한 경우 쿼리 입력시 결과 표시" 옵션꺼서, 인덱싱 결과를 쓰지 않고 검색하도록 하여(?) 문제를 우회했습니다.

아직 인덱싱 진행 중이라는 오류 메시지가 안 떴는데, 앞선 글처럼 비정상적인(?) 방법으로 계정 추가를 해서 그럴지 모르겠네요.

 

겪은 문제 증상

"인덱싱이 안 되었다"고 오류 메시지가 뜨지는 않으나, 결과 몇 개만 나오고 전체 결과는 안 나오는 상태였습니다. 인덱싱이 잘 안 되고 있는 상태였는데요.

  • 인덱싱 상태를 보면 수만 건 메일 항목이 인덱싱을 기다리고 있다고 나타났습니다. 어림짐작이지만 10초당 100건씩 줄어드는 것 같았어요.
* 인덱싱 상태 보기

아웃룩 프로그램에서 검색란을 클릭하면, 위의 리본 메뉴에 [검색] 탭이 생깁니다.
클릭한 뒤 [검색 도구] > [인덱싱 상태]를 차례로 누르면 현재 인덱싱 프로그램이 뭘 하고 있는지 나옵니다.

알아서 새로고침되지 않으니, 인덱싱이 되어서 갯수가 줄긴 하는지 보려면 조금 있다가 직접 인덱싱 상태 창을 다시 열어주어어 합니다...

[인덱싱 상태] 메뉴 위치
지금은 인덱싱이 끝났지만...

해결 아니고 우회 방법

파일 - 옵션 - 검색으로 들어가서 "가능한 경우 쿼리 입력시 결과 표시" 옵션껐습니다. 인덱싱 결과를 쓰지 않고 검색하도록 하는 것 같은데요, 요렇게 하니까 검색이 되기는 되더라구요.

다만 인덱싱 결과를 안 쓰니 검색 속도가 느려진다고는 하는데... 일단 검색 되는게 우선이죠.

 

실패한 도전

  • 메일함 파일 깨져서 색인이 안 되나 해서 MS오피스 프로그램 폴더에 있는 "ScanPST.exe" 프로그램을 돌려봤습니다. 항목 몇 개가 손상되었고 고쳤다고 했지만, 인덱싱 속도 개선에는 별 소용이 없더군요. 아니... 방금 로그인했는데 손상된 항목이 있다고요???
  • 아웃룩 검색 옵션에서 "표시되는 결과 수를 제한하여 검색 속도 높이기" 옵션을 먼저 꺼 봤지만 소용이 없었습니다.

 

가지 않은 길

  • 정 인덱싱이 안 되면 "인덱스 재생성", 또는 아예 윈도 인덱싱 서비스를 포기하라고도 하더군요. 아무리 그래도 그건...
  • 방금 찾아보니 PC 사용 중일 때 인덱싱 속도를 늦추지 않도록 하는 옵션이 있다고 하네요..

 

IMAP/SMTP 로그인할 때 메일 계정 전체 말고 메일 아이디만 써야 하는데,

2019 로그인 화면에서는 "로그인 아이디" 입력란이 없어졌어요 :(

Outlook 2019 로그인 화면 중 IMAP 상세 설정 화면... 로그인 계정 입력란 어디?

대신 이렇게 해 보세요.

# 아예 레지스트리 설정값을 고쳐서 예전 설정 창으로 되돌리는 방법이 있다고 합니다:

https://answers.microsoft.com/ko-kr/msoffice/forum/msoffice_outlook-mso_other-mso_2016/%ec%95%84%ec%9b%83%eb%a3%a9-2016/50a8a449-982b-42ad-814b-87b53d866bcb
https://support.microsoft.com/en-us/help/3189194/how-to-disable-simplified-account-creation-in-outlook

레지스트리 편집기에서 (시작 - 실행 - regedit),
* HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Setup\ 경로로 찾아 들어가서,
* (트리 오른쪽 빈 창에) 오른쪽 클릭 - [새로 만들기 - DWORD(32비트) 값] 클릭하고
* 항목 이름은 "DisableOffice365SimplifiedAccountCreation"으로, 1로 설정!

편집기를 끄고 Outlook을 다시 실행하면 예전 창으로 계정 생성이 가능하다고 하네요. 정말 됩니다.
  • 제어판 (윈도 10 설정 말고) > 사용자 계정 > Mail 로 들어가서

 

 

  • [전자 메일 계정] 버튼을 눌러 아웃룩 계정 설정 창을 띄우고

  • [전자 메일] 탭에서 [새로 만들기...] 버튼을 누르고 계정을 추가하세요.

예전 아웃룩 2016까지 쓰던 창이 나타나고요. IMAP 계정 상세 설정 창까지 가면 "로그인 계정" 입력란이 있습니다.

 

Outlook 2016까지 보던 상세 설정창이 반겨줍니다. 로그인 계정 입력란도 있네요!

 

 

아웃룩 프로그램 실행 중에, 위 방법으로 새 계정을 추가했는데 새 계정에서 메일 발송이 안 되면

아웃룩 프로그램을 껐다 켜 보세요.

아웃룩 프로그램이 떠 있는 상태에서 위 방법으로 새 계정을 추가했다면, 동기화할 폴더 목록에 새 계정의 폴더가 들어있지 않을 수 있습니다. 이 경우 [보내기/받기]를 백날 눌러봐야 소용이 없습니다.

 

이런 글 있는 줄 알았으면 삽질 덜 했지...

알아두면 쓸데없는 배경 설명

Let's Encrypt (이하 LE)웹서버를 위한 무료 SSL 인증서 서비스입니다. 무료니까 3개월마다 갱신해야 하고 (자동 갱신 툴 이용하면 괜찮...) 사고 났을 때 어떤 보상도 못 받지만, 무료니까...

그런데 지난 2018년 초에 서버 인증 방식 중 하나인 TLS-SNI-01 방식이 보안 취약점으로 인해 폐기 수순에 돌입했고, 2019년 2월 부로 LE 서비스에서도 완전히 지원 중단되었습니다.

문제는 TLS-SNI-01 방식이 당시 HTTPS 포트만으로 인증이 가능한 유일한 방식이었다는 점입니다. 만약 HTTPS 포트만 열려있고, 1. DNS 서버를 건드릴 수 없는데다, 2. HTTP(80번) 포트도 열 수 없는 상황이라면 답이 없죠.

그 대신 TLS-ALPN-01이라는 HTTPS 포트만으로 인증받는 새 표준이 작년 하반기에 준비되고, 각종 자동 인증 도구 및 LE에서 지원을 시작한 모양입니다. 문제는 가장 널리 쓰이는 Certbot 도구는 아직 지원을 안 한다는 것...

대신 Dehydrated 및 Nginx 최신 버전을 이용해 TLS-ALPN-01 방식으로 인증서를 받아와 보겠습니다.

목표는,

  • Certbot에서 Dehydrated로 인증 도구 갈아타기
  • 무중단 인증서 갱신을 위해, Nginx의 load balancer 이용하기로 함 (Dehydrated의 TLS-ALPN-01 + Nginx 설명 따름)

Nginx 설정 변경

  1. Nginx 공식 저장소의 mainline 버전으로 갈아타기

우분투 18.04 저장소의 nginx는 지원을 안 하는 것 같아서...

  • 공식 저장소 추가

  • 저장소 인증키 추가

  • 설치!

  • 프록시 설정

nginx.conf 하단에 한 줄 붙이고,

include /etc/nginx/tls_alpn_proxy.conf;

tls_alpn_proxy.conf 파일을 만들고 내용으로 아래와 같이...

stream {
  map $ssl_preread_alpn_protocols $tls_port {
    ~\bacme-tls/1\b 127.0.0.1:10443;
    default 127.0.0.1:4433;
  }

  server {
    listen 443;
    listen [::]:443;

    proxy_pass $tls_port;
    ssl_preread on;
  }
}

TODO 왜 127.0.0.1 붙여야 하지...

  1. 원래 서버 설정 고치기

원래 443 포트로 서빙하던 것을 4433 포트로 고쳐두고

  1. 설정 파일 문법 검사 후 적용

nginx -t
systemctl reload nginx

Dehydrated 설치 및 설정

  1. Dehydrated 설치

사실 그냥 셸스크립트라 설치라고 할 것이 없고...

GitHub 저장소 clone

그리고 저장소의 tls-alpn-01 지원 글 참고해서 응답기 역할하는 Python 스크립트도 준비!

  1. 설정 폴더 및 파일 생성

$ mkdir /etc/dehydrated
$ cp <path/to/tool>/docs/example/config /etc/dehydrated/config

복사한 설정 파일을 열어서

CA -- 일단 테스트용 staging 서버로 변경
CHALLENGETYPE -- tls-alpn-01로 설정

/etc/dehydrated/domains.txt 파일 만들고 그 안에 서버 도메인 주소 입력!

  1. Nginx 설정...은 아까 했고...

  2. 잘 돌아가는지 테스트!

등록키 받아오고

$ <path/to/tool>/dehydrated --register --accept-terms

응답기 역할을 할 Python 스크립트 실행시켜두고

$ python3 <path/to/responder>

인증서 생성!(-c 또는 --cron 하면 알아서 생성/관리 작업 수행)

$ <path/to/tool>/dehydrated -c

  1. 실제 인증서 받아오기

설정 파일을 다시 열어서 staging 서버에서 실제 서버 주소로 되돌려놓고,

$ <path/to/tool>/dehydrated --register --accept-terms
$ <path/to/tool>/dehydrated -c

한 번 더 해주면 /etc/dehydrated/certs/<domain>/에 인증서가 똭!

아까 띄워둔 Python 응답기는 이제 꺼도 되겠죠.

  1. Nginx 설정 고쳐서 새 인증서 쓰도록 변경

Certbot과 파일 이름은 같고, 경로가 /etc/letsencrypt/live/<site>/에서 /etc/dehydrated/certs/<site>/로 바뀌었습니다.

$ nginx -t
$ systemctl reload nginx

하면 마무리됩니다.

Cron 작업에 추가하기

아래와 같은 스크립트를 만들어서

#!/bin/bash

python3 <path/to/responder> &
PID_RESP=$!

<path/to/tool>/dehydrated -c | logger -t dehydrated

kill $PID_RESP
  • 위 스크립트에서 | logger -t dehydrated는 데비안/우분투 기준으로 시스템 로그에 메시지 남기려고 두었고, /etc/rsyslog.d/etc/logrotate.d/ 안의 파일을 수정해서 syslog 대신 별도 로그 파일에 기록되게 만들 수 있겠습니다.

그리고 Certbot과 마찬가지로 Cron 작업으로 만들면 되겠습니다.

$ crontab -e

0 4 * * 1 <path/to/cron_script> >/dev/null

끝!

곧 Certbot이 지원하게 되면 다 헛짓거리 되겠지만, 어쨌든 끝!

Apache는 다른 멋진 방법으로 잘 하실 수 있겠죠.

리눅스 컴퓨터에 로그 메일 설정했더니 아래와 같은 메시지가 날아온다면...

/etc/cron.daily/logrotate:
gzip: stdin: file size changed while zipping

요기를 참조해서 logrotate 설정에 delaycompress 옵션을 넣어둡시다.

(링크한 글에 안내된 절차, 아래 설명 및 경로는 데비안/우분투 기준)

  1. /var/lib/logrotate/status 파일을 열어서, 위 그림과 같은 메시지가 날아온 로그 발신자를 추적합니다. 내 경우는 apache2, sambad, rspamd.
  2. /etc/logrotate.d/에 있는 설정 중 위에서 찾은 발신자의 설정을 열어봅니다.
  3. 이 중 compress만 있고 delaycompress가 없는 설정 그룹을 찾아 delaycompress를 넣어줍니다. 끝.

delaycompress를 넣어주면 로그 파일을 먼저 보관 처리한 후에 압축을 진행하나 봅니다. 아래 설명에 따르면 보관 처리 중인 파일임에도 거기다 계속 쓰려는 대몬이 있다네요.

Postpone compression of the previous log file to the next rotation cycle. This only has effect when used in combination with compress. It can be used when some program cannot be told to close its logfile and thus might continue writing to the previous log file for some time.

MS 파워포인트 슬라이드쇼 화면에서,

  • 터치 되는 노트북을 갖고 계시면

    • 좌우로 스와이프해서 슬라이드를 넘길 수 있고 (살짝만 밀어도 넘어갑니다!)
  • 디지타이저 펜 (서피스 펜, 와콤 펜 (삼성 S펜 등)) 지원 노트북을 갖고 계시면

    • 슬라이드에 바로 펜 필기를 할 수 있습니다!

스와이프로 넘기기, 슬라이드에 바로 펜 필기하기 기능 각각은 참 좋은 기능인데요,

N-Trig 펜을 탑재한 서피스 프로 시리즈에서는 두 기능이 함께 쓰일 때 끔찍한 재앙이 됩니다.

서피스 프로 >= 3 문제

서피스 펜은 무슨 이유에서인지 호버링 거리(= 화면에서 얼마나 멀어질 때 펜 인식을 멈출 지)가 매우 짧습니다. (TODO 정확한 거리는 모르겠네요.)

펜이 멀어지면 그 때부터 화면 터치를 인식하여 처리하는데요, 문제는 펜 인식 거리가 워낙 짧은데 화면을 살짝만 밀어도 슬라이드를 넘길 수 있다 보니...

필기 중 펜 위치를 옮길 때 의도치 않은 슬라이드 넘김 동작이 일어나는 일이 심심치 않게 벌어집니다!!

의도치 않은 필기 획이 그려지는 문제는 거의 없는 듯 합니다. 팜 리젝션 (= 펜 필기 중 화면에 닿은 손을 터치 동작으로 인식하는 문제) 기능은 그럭저럭 잘 되는 듯 합니다. 대부분의 윈도 펜 필기 앱이 화면 터치로 필기 기능을 비활성화하고 있는 것도 한 가지 이유인 것 같습니다.

서피스로 멋진 발표 -- 절망 편

웹 검색을 해 보시면, MS 지원 포럼 및 각종 커뮤니티에서 위 동작으로 고통받는 사람들을 쉬이 찾아보실 수 있습니다. 다만 MS에서는 해결해 줄 생각이 없는 듯 하네요.

서피스 펜 호버링 길이를 조절할 수 있게 되거나 (서피스 프로 6에서는 나아지겠죠?),

파워포인트 슬라이드쇼 설정에서,

  • 스와이프로 슬라이드 넘김 동작 비활성화
  • 스와이프 인식 길이 사용자 지정 이 가능해야 할 것 같으나, 서피스 프로 3가 팔리던 2015년에도, 현재 2018년에도 변화는 없습니다.. 피드백 허브에 글을 한 번 써 보면... 안 들어주겠죠?

이 중 어떤 기능도 없습니다.

고심 끝에 터치 스크린을 해체...

현 상황에서 무식하지만 가장 완벽한 해결책은 바로 터치 스크린을 아예 꺼버리는 것이겠습니다.
How to disable the touch screen on your Windows 8.1 laptop

위 링크를 참조하셔서, 장치 관리자를 여신 뒤 휴먼 인터페이스 장치 범주 밑의 HID 규격 터치 스크린비활성화해주면 되겠습니다. (지우면 다음 재부팅 때 다시 살아납니다.) 나중에 다시 활성화하면 터치 기능이 돌아오겠고요.

펜으로 마우스 클릭/터치 입력을 대신할 수 있기 때문에 터치 스크린을 비활성화해도 노트북 사용은 여전히 가능합니다. 터치 기능 얻기 위해 들인 돈이 아까울 뿐.

Jupyter 노트북 파일은 무식하게 요약하면, 소스코드, 마크다운 문서, 그리고 실행 결과 출력들이 셀 단위로 묶인 XML류 파일이라고 할 수 있다.

이에 따라 버전관리 툴에서 일반적인 비교, 병합 툴로는 노트북 파일을 어떻게 효율적으로 저장할 지 알 길이 없다.

이를 해결하기 위해 nbdime 플러그인을 사용해볼 수 있다. 노트북 문서를 소스코드 (및 문서 셀) 위주로 비교, 병합하는 기능을 제공하는 플러그인이다. 다만 문제가 있다면,

  • 개발 진척도가 그리 빠르지는 않은 것 같고...
  • 비교, 병합 속도가 그리 빠르지 않으며...
  • 출력 셀 비교, 병합은 개발 목표가 아니라고 하며...
  • JupyterLab이라고 해서 다음 세대 버전 나온다는데, 걔는 이 플러그인이 지원하지 않겠지...

따라서, 각자 목적에 맞는지 시험 사용을 해 본 후 본격적으로 써 보시기 바란다.

GitHub 저장소
공식 문서

설치

설명서에 나와 있는 대로 pip install nbdime, 또는 Anaconda 환경이라면 conda install -c conda-forge nbdime하면 되겠다.

Git 연동

nbdime를 쓰려는 Git 저장소 디렉토리에서 nbdime config-git --enable 하면 된다.
.gitattributes 파일 및 git config -l 명령 결과에서 정상 적용 여부를 확인할 수 있다.

+ Recent posts