Mac OSX에서 numpy 설치할 때 빌드 실패 문제

Intel Mac에서 pip로 numpy(ver1.22)를 설치하려고 했더니 설치에 실패하면서 아주 아주 긴 오류가 나오는데 Clang compiler option의 architecture flag가 좀 이상하다.

% python3 -m pip install numpy
...
 clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 ...
  clang: error: the clang compiler does not support '-march=native'
...

“-arch arm64 -arch x86_64” 라는 건 Apple silicon과 Intel architecture를 모두 지원해 보겠다는 뜻인가? 혹시나 해서 환경 변수로 ARCHFLAGS=”-arch x86_64″를 주고 재 실행해 봤더니 이전에 있던 -march=native 플래그가 지원되지 않는다는 에러가 없어지면 잘 설치가 되었다.

% ARCHFLAGS="-arch x86_64" python3 -m pip install numpy

좀 더 일반적으로 적용될 수 있는 다른 방법으로 “–only-binary” 옵션을 주어서 wheel package file build를 안 하도록 하는 방법도 고려해 볼 수 있겠다.

% pip install numpy --only-binary numpy
Collecting numpy
  Downloading numpy-1.22.4-cp38-cp38-macosx_10_15_x86_64.whl (17.6 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17.6/17.6 MB 30.0 MB/s eta 0:00:00
Installing collected packages: numpy
Successfully installed numpy-1.22.4

Visual Studio Code test explorer에서 explorer로 변경되는 문제

최근 업데이트(1.65.2) 이후 부터 였던 것 같은데 VSCode의 test explorer에서 테스트를 실행하면 자꾸만 explorer로 자동 변경되는 문제가 생겼다.

이 문제는 새롭게 생긴 설정인 testing.openTesting을 neverOpen으로 변경해 주면 해결된다.

{ // settings.json
   ...
    "testing.openTesting": "neverOpen"
}

또는

Setings -> Features -> Testing -> Testing: Open Testing

왜 이런 짓을??

정보의 바다에서 이와 관련해 의견을 나눈 기록을 찾았는데 Switching to test explorer when users clicks ‘run tests’에 따르면 커스터머 인터뷰 중에 IntelliJ에 구현된 이와 관련된 유사한 기능이 요청된 모양이다. 다행히도 이 기능이 VSCode에서는 오히려 불편하기만 할꺼라는 의견을 가진 사람 덕분에 option으로 빠지게 되었는데 default 값은 이 기능이 동작하는 openOnTestStart로 되어 버렸다. 변경 사항에 관련된 ticket은 여기에서 찾을 수 있다.

말레이시아의 핸드폰 선불 요금제(Celcom)

Celcom의 후불 요금제는 한국의 것과 거의 유사하다. 요금제 마다 다른 양의 데이터가 제공되고 매달 요금을 지불한다. 다만 외국인들에게는 보증금(deposit) 500링깃을 추가로 요구하는데 이 돈은 후불 요금제를 종료하면 60일 이내에 수표나 계좌이체로 돌려준다. 이 때 번호를 유지한 채 요금제만 후불로 변경하는 것을 불가능하고 새로운 선불제 번호를 사야한다. 꼭 번호를 유지하고 싶다면 다른 통신사로 옮겼다가 다시 돌아오는 방법이 있다고 하는데, 시도해 보진 않았다.

반면 선불 요금제에는 보증금이 없다. 전화번호를 유지하기 위해 유효일을 구매하는데 하루에 RM1이다. 예를 들어 30일간 전화번호를 유지하고 싶다고 하면 RM30을 들여서 유효일을 구매하면 되고, 연장하고 싶으면 추가로 구매하면 된다. 연장하지 않으면 번호는 회수되어 추후에 재 판매된다.

선불 폰 번호들은 나쁜 짓에 쓰이다가 회수된 것들이 많아서 자칫 blacklsit에 오른 번호가 걸리면 내가 하지도 않은 짓들 때문에 제한을 받을 수 있다. 일전에 샀던 선불 번호가 Grab에 무슨 짓을 했는지 회원가입이 되질 않아서 한참 CS랑 메세지를 주고 받다가 결국 새 번호를 사야 했었더랬다.

선불 요금제 30일치를 한 번에 결제하면 무제한 인터넷과 3GB의 핫스팟 용량을 주는데, 주의할 점은 여기서 말하는 무제한 인터넷은 속도 제한 걸린 최대속도 2.5Mbps 짜리라는 점이다. 4G안테나 뜨고 2.5Mbps라니… 반면, 용량제한이 있는 3GB짜리 핫스팟은 이보다는 빠른 6Mbps 정도 속도이다. 핸드폰은 느려터지지만 핫스팟으로 연결한 랩탑은 2배이상 빠른 아이러니다.

2.5Mbps는 느려터진 저속이지만 추가로 1일 3일 5일 등 특정 기간동안 속도를 정상으로 풀어주는 유료 아이템(add-on)들이 있어서 추가 현질을 하면 약간 더 빠른 인터넷을 사용할 수 있다.

Android recovery image 빌드 설정

1. BoardConfig.mk 수정
TARGET_NO_KERNEL과 TARGET_NO_RECOVERY가 true로 설정되어 있다면 설정한다.

2. device.mk 수정
TARGET_PREBUILT_KERNEL관련 설정을 삭제한다.

3. AndroidBoard.mk 추가
Kernel build 될 때 참고되는 파일이므로 추가해 주고 KERNEL_DEFCONFIG등의 설정을 자신에 맞게 변경해 준다.

4. AndroidKernel.mk 추가
AndroidKernel.mk는 kernel build를 위한 makefile script이다.

5. defconfig file 경로변경
defconfig file이 참조될 수 있도록 kernel/$(ARCH)/configs 아래에 옮겨준다.

6. 상대경로 참조로 인한 compile error 수정
Android build에 포함된 kernel build는 상대 경로를 참조하는 경우 build error를 발생할 수 있다. 절대 경로 path를 주기 위해 절대 경로를 얻고 make command line에 이를 넘겨주는 부분을 추가해 준다.

Windows DLL loading 실패 디버깅

Windows programming 중에 DLL loading을 실패해서 오류가 발생하면 문제가 생겼다는 에러코드(0xc0000135)만 출력되고 어떤 것이 실패했는지 또 어느 곳을 찾아 봤는지에 대한 정보는 자세히 알려주지 않는다.

Windows SDK에 포함된 gflags.exe(Global Flags)를 이용하면 DLL loading에 대한 세부정보를 볼 수 있다. gflags.exe가 실행하는데 admin권한을 필요로 하기 때문에 관리자 권한으로 터미널을 띄우고 Windows SDK안에 포함되어 있는 gflags.exe를 다음과 같이 실행해서 세부 내역을 보고 싶은 실행파일의 이름과 sls(Show Loader Snaps) option을 명시 해준다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe -i <프로그램이름.exe> +sls
Current Registry Settings for <프로그램이름.exe> executable are: 00000002
    sls - Show Loader Snaps

다시 Visual studio로 돌아와서 프로그램을 실행하면 Output window에 DLL loading에 실패한 라이브러리의 이름과 시도해본 path들에 대한 세부정보가 표시된다.

8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: <실패하는 라이브러리>.dll
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: vccorlib140d_app.DLL
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - ENTER: DLL name: MSVCP140D_APP.dll
8e9c:55d4 @ 621281687 - LdrpFindKnownDll - RETURN: Status: 0xc0000135

이전 상태로 되돌리려면 옵션을 `-sls`로 변경해서 다시 한 번 gflgas.exe를 실행해 주면 된다.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\gflags.exe -i ieproxytest.exe -sls
Current Registry Settings for ieproxytest.exe executable are: 00000000