미래에셋증권의 로보어드바이저 추가 매수하기

최근 미래에셋증권에 연금저축펀드 계좌를 하나 더 열어서 로보어드바이저를 신청해보았다. 문제는 은근히 어렵다는 것.

MY 로보어드바이저 가입신청하고 투자성향 설정을 진행하다가 중간에 앱을 닫고 다시 투자성향을 설정하여 완료하였는데, ‘포트폴리오 변경이 진행중입니다.’라는 문구가 상단에 떠있었다. 진행하다가 앱을 닫은것 때문에 아직 진행중인 프로세스 알림인 줄 알고 취소했었다. 다음날 주문되고있나 확인해보니 전부 주문 취소가 되어 있었다.

아직 로보어드바이저 설정이 진행중이라는 의미인 줄 알았는데 내가 생각이 다른건가? ‘포트폴리오가 적용되었습니다.’로 문구가 바뀌는게 더 명확할거같다.

메시지를 누르면 뜨는 안내 메시지도

[포트폴리오가 적용되었습니다.]
로보어드바이저로 설정한 주문을 취소하시려면 주문취소 버튼을 눌러주세요. 이미 매매되었거나 취소가 불가능한 주문을 제외하고 취소합니다.
[닫기] [주문취소]

이런식으로 되면 더 나을거같은데. 암튼 펀드 매수가 전부 완료되면 아래와같이 해당 메시지는 사라진다.

[연금] – [연금포트폴리오] – [MY 로보어드바이저(연금)] 또는 [상품] – [로보어드바이저] – [MY 로보어드바이저] 화면

문제는 현금을 입금하면 알아서 추가매수되는지 직접 주문을 실행해야하는지, 어떻게 추가 주문을 진행할 수 있는지 설명이 없다. 하루 기다려봐도 앱을 다시 열어봐도 로보어드바이저를 신청한 계좌에 현금이 추가입금되었으니 매수를 진행할건지 물어보는것도 없다.

스크롤하면 ‘내 계좌 맞춤설계’ 버튼만 있을 뿐. 이걸 눌러서 진행하면 펀드가 전부 매도되고 다시 구성되는건가? 도저히 알 수 없었다. 기존 펀드가 전부 매도되면 그냥 서비스 해지하고 직접 주문해야겠다는 생각으로 진행.

Continue reading 미래에셋증권의 로보어드바이저 추가 매수하기

GDI의 SelectObject 함수

요즘은 GDI를 사용할 일이 없겠지만 간혹 사용할 일이 생긴다. 최근 uxtheme를 파고들다보니 다시 접하게 되었는데 GDI 정보가 생각보다 일관성이 없다.

일단 내가 오래전에 봤던 내용 중 기억에 남아있고 하던 코딩 방식은 아래와같았다.

static void TestDC()
{
    HDC hdc = GetDC(NULL);
    HDC memDC = CreateCompatibleDC(hdc);
    HBITMAP memBitmap = CreateCompatibleBitmap(hdc, 100, 100);
    HBITMAP oldBitmap = (HBITMAP)SelectObject(memDC, memBitmap);

    // ...

    SelectObject(memDC, oldBitmap);

    DeleteObject(memBitmap);
    DeleteDC(memDC);
    ReleaseDC(NULL, hdc);
}

DC 객체를 생성하고 처음 SelectObject하면 반환되는 기본 객체는 DC를 지우기 전 다시 SelectObject로 기본 객체를 선택하여 DC를 지워야한다는 것이였다.

GDI 오브젝트 개수를 확인하는 코드를 구글링하니 GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS) 이러한 코드가 나왔다(참조 링크). 이걸 참조하여 아래와같이 수정하여 실행해보았다.

Continue reading GDI의 SelectObject 함수

SQLite3 MSVC로 빌드시 주의사항

소스파일의 기준은 https://www.sqlite.org/download.html 이곳에서 sqlite-autoconf-VERSION.tar.gz 기준. (현재는 3380200)

소스파일 압축본 내 README.txt 파일과 https://www.sqlite.org/howtocompile.html 이곳을 참조하여 nmake "OPTS=-DSQLITE_ENABLE_STAT4=1 -DSQLITE_OMIT_JSON=1" /f Makefile.msc 이렇게 빌드하였다.

이후 sqlite3.lib 파일로 링크하면 링크 오류가 발생하고 lib 파일을 열어다보니 export된 함수가 없다는것을 알 수 있었다. make 중 dumpbin /all sqlite3.lo 명령으로 sqlite3.def 파일을 생성하는 부분이 눈에 보이는데 단순히 버그인지 아니면 MSVC의 버전이 올라가면서 컴파일러 전처리기에 차이가 발생하는건지 sqlite3.def 파일에 export될 함수들이 없어 발생하는 문제인거같다.

stack overflow의 글(https://stackoverflow.com/a/71106434)을 참조하면 식별자 SQLITE_API로 dllexport를 지정하면 된다고 되어있으며 Makefile.msc 파일을 확인해본 결과 DYNAMIC_SHELL=1을 nmake 실행 시 지정하면 되는것으로 파악되었다.

결론: nmake "OPTS=-DSQLITE_ENABLE_STAT4=1 -DSQLITE_OMIT_JSON=1" DYNAMIC_SHELL=1 /f Makefile.msc 이렇게 빌드하면 된다. sqlite3.h, sqlite3.lib, sqlite3.dll 파일들을 적당히 복사하여 사용하면 끗.

ARM 타겟 PHP 빌드 오류 해결

라즈베리파이에 올릴 용도로 buildroot의 LTS판 최신버전(2020.02.8)을 php 포함하여 빌드하는 중 아레와같은 빌드 에러가 발생하였다.

ext/standard/crc32.c:48:10: error: ‘armv8-a’ does not support feature ‘nothing’
 # pragma GCC target ("+nothing+crc")
          ^~~
ext/standard/crc32.c:48:10: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:48:10: error: ‘armv8-a’ does not support feature ‘nothing’
ext/standard/crc32.c:48:10: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:49:1: error: ‘armv8-a’ does not support feature ‘nothing’
 static uint32_t crc32_aarch64(uint32_t crc, char *p, size_t nr) {
 ^~~~~~
ext/standard/crc32.c:49:1: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:49:1: error: ‘armv8-a’ does not support feature ‘nothing’
ext/standard/crc32.c:49:1: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c: In function ‘crc32_aarch64’:
ext/standard/crc32.c:49:1: error: ‘armv8-a’ does not support feature ‘nothing’
ext/standard/crc32.c:49:1: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:49:17: error: ‘armv8-a’ does not support feature ‘nothing’
 static uint32_t crc32_aarch64(uint32_t crc, char *p, size_t nr) {
                 ^~~~~~~~~~~~~
ext/standard/crc32.c:49:17: note: valid feature names are: crc simd crypto nocrypto nofp
make[1]: *** [Makefile:967: ext/standard/crc32.lo] Error 1

구글링해보니 해당 파일의 위 에러가 발생하는 “+nothing+crc” 부분을 “arch=armv8-a+crc”로 바꾸니 해결되었다. 일부러 +nothing을 넣은건지 알수없고… 에러 내용도 보면 armv8-a에선 nothing을 지원하지 않는다. 이정도로 해석된다.

저런식으로 일단 빌드 안되게 해둔것이 빌드 대상 아키텍쳐가 crc 명령을 지원하는지 유무를 빌드 된 바이너리 레벨에서 확인이 안되어서 인가? 명령이 지원 안하면 실행 시 에러가 발생할것이니 빌드 레벨에서 대상 타겟이 무엇인지 명시적으로 정의를 하는것 같기도하고 음… 나중에 생각이 나고 기회가 되면 파고들어봐야겠다.

윈도 저장소 폴(저장소 공간)의 성능

저장소 공간은 이미 나온지가 꽤 지난 기술이지만 의외로 정보가 없다. 일단 이 글은 저장소 공간을 설정하는걸 설명하는게 목적이 아니기때문에 설정은 패스. 부실하지만 간략한 방법 및 설명은 [이곳 페이지]에서 확인가능.

그래도 저장소 공간을 만들 때 중요한 부분을 설명하자면

  • 단순(복원 없음) – RAID 0에 해당. 디스크 두개 이상이 모두 이어저 하나로 연결된 형태(1테라 + 1테라 => 2테라). 단점은 하드 중 하나라도 고장나면 모든 데이터가 소실된다.
  • 양방향 미러 – RAID 1에 해당. 모든 디스크에 동일하게 데이터를 기록하는 형태(1테라 + 1테라 => 1테라). 두개 이상의 하드에 동일하게 기록하기때문에 구성 된 하드 중 하나만 정상이고 나머지는 망가져도 데이터는 보존된다.
  • 패리티 – RAID 5에 해당. 이건 좀 복잡하다. 단순하게 생각하면 디스크 세개이상을 두개의 용량으로 사용하면서(1테라 + 1테라 + 1테라 => 2테라) 하나의 디스크가 문제있어도 해당 디스크 교채 후 재구성이 가능하다.

그 외 3방향 미러가있지만 패스. HDD가 다섯개 이상 필요하기도하고 이정도로 구성할 사용자가 개념을 알기위해 이걸 볼 이유가 없을것이기때문(…). 첨언을 하자면 저장소 공간은 기본 할당 가능한 용량보다 높게 설정가능하지만 그 용량 을 넘어서 기록 된 데이터 안정성 보장이 안되므로 추천하고싶지않다.

목적이 아닌 서론은 이정도에서 끝. (참고로 아래 내용은 일부 OS의 환경이나 하드웨어에 따라 다를 수 있으니 모든 사용자에 해당하지 않을 수 있다고 본다.) Continue reading 윈도 저장소 폴(저장소 공간)의 성능