2022년 9월 7일 수요일

cmake try_compile / try_run

 CMakeLists.txt 에서 컴파일 옵션이나 지원하는 기능을 확인할 때 try_compile 이나 try_run 을 쓰는 경우가 있다. 이때 실제 이 명령에서 어떻게 확인했는가를 알고 싶을 때 OUTPUT_VARIABLE 을 설정하면 된다.

예)

try_run(RUN_${FEATURE} COMPILE_${FEATURE}
${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${FILE}.cpp
CMAKE_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS}
LINK_LIBRARIES ${BENCHMARK_CXX_LIBRARIES}
OUTPUT_VARIABLE TRY_OUT)
message("TRY_OUT: ${TRY_OUT}")

위 예에서는 실제 실행했던 명령이나 결과값을 TRY_OUT 이란 변수에 저장하고, 이 내용을 message 를 통해서 출력해 준다. 이렇게 하면 실제 어떤 컴파일러와 옵션으로 컴파일 및 링킹을 했고 결과를 어떻게 확인했는지 알수 있다.


2020년 1월 12일 일요일

쌍갑포차


쌍갑포차는 각 에피소드 별 등장 인물들이 얽혀있다. 너무 복잡해서 여기 정리해 보려 한다.
  1. 돼지뒷고기 숯불구이
    • 박미란
      • 마트 시식 코너에서 일하다가 자살 시도
  2. 간고등어 연탄구이
    • 은수
      • 박미란이 쌍갑포차를 만난 빌딩에서 일하는 직원
    • 최금옥 (안동댁)
      • 춘천에서 간고등어 연탄구이 운영
      • 은수의 친엄마는 아니고 키워준 엄마
    • 이순화 (울산댁)
      • 춘천에서 간고등어 연탄구이 동업자
      • 은수의 친엄마, 고동길의 아이 임신
      • 고동길과 말다툼 후 교통사고로 사망
    • 고동길
      • 덤프트럭 기사, 이순화와 아이 임신
  3. 광어회와 묵은지
    • 공승희
      • 고양이와 강아지 주인
    • 리스
      • 고양이
      • 은수가 안동댁 만나러 가는 길에 차에 치일 뻔함
    • 석일
      • 강아지
  4. 박속낙지탕
    • 최석판
      • 최민수 조상 (고조할아버지), 복권 당첨권 소유자
    • 최민수
      • 리스가 데리고 가서 석일을 구해준 남자
      • 고향으로 내려간 박미란과 나중에 결혼
    • 이끝순
      • 남편 전사 통지서 받음, 실제론 나중에 살아서 돌아옴
      • 총알 섞인 나무 떼다가 한쪽 눈 실명
      • 김수오 하사가 병원으로 데려다 줌
    • 월례
      • 이끝순 동생, 최민수의 할머니
  5. 숯불꼬치구이
    • 고유미
      • 안면도 바람 쐬러 갈 때 최민수 옆에 탐
  6. 생굴
    • 김석철
      • 옥희가 씨내리로 가진 딸
    • 감나무집 할머니
    • 크며느리 영지
      • 종상과 아이를 가져서 도망감
    • 손자 수오
      • 월례 와 끝순을 병원에 데려다 준 군인
    • 손자며느리 옥희
      • 씨내리를 받고 아이를 가짐
    • 대무당 (희영)
      • 딸이라는 이유로 무당짐에 버림 받고 무당이 되어 찾아옴
    • 종상
      • 영지와 아이를 가져서 도망감
  7. 짬뽕국물
    • 명덕
      • SF 영화 만드는 것이 꿈인 감독
      • 우물에서 족자를 찾아냄
      • 최소립에게 빈 족자를 팜
    • 지훈
      • 어렸을 때 장비 사고로 한쪽 발 잃음
      • 나중에 명덕이 찍는 영화 주연으로 발탁
    • 수린
      • 최감독이 다른 배우와 간통 들통 후 이혼
      • 명덕과 결혼, 영화사 같이 차림
    • 미리 (미자)
      • 배우
  8. 불낙지와 콩나물
    • 최강배
      • 영화관에서 귀신을 봄
      • 신목의 환생
    • 이여린
      • 빨간 립스틱 바르면 귀신이 도망감
      • 경면주사 환생
  9. 달걀말이
    • 김준우 (주영)
      • 어렸을 때 실종, 미국으로 입양
    • 에이미
      • 김준우 애인
    • 차현옥
      • 김준우 엄마
    • 임미희 (제인)
      • 김준우 아빠랑 연애하는 사이
      • 알렉스 엄마
  10. 문어숙회
    • 최소립
      • 학당 선생님
      • 신병에 걸려 목소리를 잃음
      • 대무당에게 도움을 받음
      • 나중에 대무당 부탁으로 씨내리를 해 줌
    • 백목련
      • 최소립의 학생, 나중에 최소립과 결혼
      • 스님 도움으로 신병을 낫는 법을 배움
      • 빈 족자에 헛그림을 그리는 도중 전쟁이 남
      • 피난 도중 박희상, 이명옥 부부를 만남
      • 이 부부는 나중에 간첩으로 밝혀짐
      • 경찰서에 풀려나서 끝순, 월례에게 보육원에서 도움 받음
    • 배해수
      • 보육원 아이, 애로물을 좋아해서 나중에 에로 영화 시나리오 만듬

2018년 12월 23일 일요일

mi band 3 korean

mi band 3 comes as Chinese, but can be configured as English. How about Korean? It is a little bit more complicated, but fortunately we have this site: https://geekdoing.com/

You also need AmzeTool app to install firmware, resource and fonts.

2018년 10월 10일 수요일

vi options (vim)

.exrc (for vi & vim)

set autoindent
set autowrite
set number
set shiftwidth=2

.vimrc (for vim only)

set autoread
set autowriteall
set binary
set cindent
set expandtab
set smartindent
set syntax

2018년 7월 5일 목요일

MCU Drama Order


  • 데어데블 시즌 1
  • 제시카 존스 시즌 1
  • 데어데블 시즌 2
  • 루크 케이지 시즌 1
  • 아이언피스트 시즌 1
  • 디펜더스
  • 퍼니셔
  • 제시카 존스 시즌 2
  • 루크 케이지 시즌 2

2018년 4월 15일 일요일

Bookmarks

The bookmark sync is broken on chrome, and it produces duplicated bookmarks reordering aside from my intention. So instead of using chrome's bookmark, I'm using this page for keeping each bookmarks.

2016년 9월 27일 화요일

iterative depth-first traversal post-order

depth-first traveral 은 크게 pre-order / in-order / post-order tranversal 로 나누어 진다. 이 중 in-order 는 children 의 개수에 따라 정의가 애매하므로 pre-order 와 post-order 만 정리해 보도록 한다.
pre-order depth-first traversal

recursive algorithm:

do_explorer
  set node visited
  do something
  for each children of the node
    call do_explorer


iterative algorithm:

do_explorer
  create a stack
  push node
  while stack is not empty
    pop node
    set node visited
    do something
    for each children of the node
      push child into stack if child is not visited


post-order depth-first traversal

recursive algorithm:

do_explorer
  set node visited
  for each children of the node
    call do_explorer
  do something


iterative algorithm:

do_explorer
  create a stack
  push node
  while stack is not empty
    peek a node
    if all children of the node is processed
       pop the node
       do something
    else 
       process next sibling of the node (push stack if not visited yet)

2016년 3월 8일 화요일

윈도우 개발 환경

cross platform 개발 환경을 추구하는 상태에서 기존에 mingw32 를 써 왔었는데, 최근에 보니 마지막 업데이트가 2013년 정도이고 이후 변한게 없었다. 왜 그런가 봤더니 64bits 가 나오면서 mingw64 로 넘어가서 사람들이 주로 쓰는 것은 이것인 것 같았다. 이에 따라 전체적인 윈도우에서의 컴파일러 / 개발 환경을 다음과 같이 바꾸기로 했다.

  • 컴파일러: mingw64 (x84_64, posix)
  • 환경: msys2
cygwin 도 고려 대상이었지만 DLL 의존성 때문에 cygwin 은 버리기로 했다.

P.S.
그나저나 .bashrc 는 어디로 사라진 걸까.

2016년 1월 15일 금요일

Windows 10 시작메뉴 복구

어느 순간부터 시작 메뉴 버튼을 눌러도 윈도우 키를 눌러도 나오는 것이 없어지는 경우가 생긴다. 이를 복구하기 위한 방법을 찾아봤지만 제대로 되는 방법은 하나도 없었다. 간신히 제대로 된 방법을 찾은 것은 바로 아래 링크이다.

  • http://www.urtech.ca/2015/09/solved-fix-windows-10-start-button-does-nothing-in-10-minutes/
원리는 간단하다. 시작 메뉴의 database 가 깨졌기 때문에 다른 계정을 만들어서 새로 만든 깨끗한 database 를 복사해서 사용하는 것이다.

2015년 11월 10일 화요일

wxWidgets configure options

C++11 을 지원하기 위해 옵션을 변경하였다. (mac 은 이미 C++11 을 지원하고 있었던 듯)
  • Windows Option
    • --enable-monolithic --disable-shared --enable-optimise --enable-accel --enable-dccache CXXFLAGS="-std=c++11 -D__NO_INLINE__" OBJCXXFLAGS="-std=c++11 -D__NO_INLINE__"
  • Mac Option
    • --enable-monolithic --disable-shared --enable-optimise --enable-accel --enable-dccache CXXFLAGS="-stdlib=libc++ -std=c++11" OBJCXXFLAGS="-stdlib=libc++ -std=c++11" LDFLAGS="-stdlib=libc++"
Windows Option 중 -D__NO_INLINE__ 은 mingw 의 헤더 파일 버그 때문에 넣었다.

C++11 은 개뿔. 특정 플랫폼, 특정 컴파일러에서만 돌아가는 소스 코드를 만들지 않기 위해서는 C++11 을 쓰지 않는 것이 좋겠다는 결정을 내렸다. 예전부터 느꼈던 것이긴 하지만 C++ 은 참 애매한 녀석인 것 같다.

  • Windows Option
    • --enable-monolithic --disable-shared --enable-optimise --enable-accel --enable-dccache 
  • Mac Option
    • --enable-monolithic --disable-shared --enable-optimise --enable-accel --enable-dccache --with-macosx-version-min=10.7 CXXFLAGS="-stdlib=libc++ -std=c++11" OBJCXXFLAGS="-stdlib=libc++ -std=c++11" LDFLAGS="-stdlib=libc++"
참고로 아래 설명을 보면 GCC 에서 C++11 의 지원은 아직 실험적인 것 같다.

Important: GCC's support for C++11 is still experimental. Some features were implemented based on early proposals, and no attempt will be made to maintain backward compatibility when they are updated to match the final C++11 standard.

2015년 10월 19일 월요일

Champions of Conte

If you save up your units, yes you can have willpower and double edge. I haven't bothered....

Good setup:

Offense: (+10.5% crit rate, +52% crit dmg)
5 - precision
5 - Cruelty
1 - in all prereqs

Defense: (50% to resist block break)
5 - Stand your ground
1 or 4 - Perfect block
1 - in all pre-reqs
Optional: 3 salve, 3 recovery. (I haven't bothered yet)

Utility:
2 or 3 - dexterity (+20-33% increase in next attacks crit rate)
3 - pretrify
3 - pacify
3 - stupify
2 - Parry (stun duration increases with perfect block chance)
1 - pre-reqs


Do the offense first and use the stony cores for that. I did it without spending $0.01. Just save units from arena milestones, arena crystals, and completion/exploration awards.
FYI - always open arena crystals in batches of 10,20, or 30. If you open 10 at a time (20K battle chips), and press the open button, you will always get 15-75 units.

2015년 10월 17일 토요일

codelite v.s. code::blocks

지금까지 code::blocks 가 가장 나은 cross platform ide 라고 생각했는데, 버전 업데이트가 늦고 아마도 codelite 로 분화하여 계속 발전해 온 것 같다. 이에 맞춰 앞으로 code::blocks 에서 codelite 로 ide 환경을 바꿔서 개발하도록 할까 한다.

2015년 10월 16일 금요일

Mac 에서 wxWidgets 빌드하기


  • 일단 3.0.2 stable 버전에서는 문제가 있어 github 에서 받은 버전으로 컴파일해서 사용한다
  • 윈도우 때 사용했던 configure 옵션
    • --enable-monolithic --disable-shared --enable-optimise --enable-accel --enable-dccache 
  • libc++ 버전 문제로 다음 옵션이 추가되어야 한다
    • --with-macosx-version-min=10.7 CXXFLAGS="-stdlib=libc++ -std=c++11" OBJCXXFLAGS="-stdlib=libc++ -std=c++11" LDFLAGS="-stdlib=libc++"

2015년 9월 20일 일요일

gmp compile

gmp 를 mingw32 에서 컴파일 할 때 64bit 환경에서 assembly 를 제대로 인식하지 못하는 경우가 있다. 이런 경우 configure 할 때 configure --disable-assembly 로 configure 를 하면 된다.
최종 적용된 옵션은 다음과 같다.

  • configure --disable-assembly --enable-cxx

2015년 8월 6일 목요일

2015년 7월 20일 월요일

libstdc++ conflict

mingw 에서 g++ 로 컴파일 한 프로그램을 실행시키다 보면 "the procedure entry point __gxx_personality_v0 could not be located" 같은 메시지가 나오면서 실행이 안되는 경우가 있다. 이는 libstdc++ 이 mingw 가 깔려 있는 곳 외에도 Windows/System32 와 같은 곳에 다른 버전의 libstdc++ 이 있기 때문이므로 mingw 버전의 libstdc++ DLL 을 먼저 찾을 수 있도록 PATH 를 조정해 주면 해결할 수 있다.

2015년 7월 19일 일요일

C / C++ 개발 환경

Code::Blocks 에서 wxWidgets 개발 환경 설정

프로젝트 생성 시 wxWidgets Wizard 가 생성해 주는 것이 제대로 설정이 안되는 것 같다. http://wiki.codeblocks.org/index.php?title=WxWindowsQuickRef 내용을 참고하여 Include 디렉토리와 Library 들을 제대로 설정해 줘야 한다.

우선 wxWidgets 설치는 source installer 를 이용해서 설치한 다음 --enable-monolithic --disable-shared --enable-optimise --enable-accel --enable-dccache 옵션을 줘서 컴파일한다.

(모든 라이브러리는 개발물 배포의 용이성을 위해 static library 로 빌드하도록 한다.)

Include path 에 빌드된 라이브러리의 include 파일을 추가한다.


이후 library path 에 빌드된 라이브러리를 찾을 수 있도록 추가한다.


라이브러리 목록을 추가해 주어야 한다. (monolithic 라이브러리로 만들었는데 왜 다 링크해야 하는지는 모르겠다.) 추가로 windows 라이브러리도 참조해야 하기 때문에 필요한 것들은 다 추가해 준다.


2015년 3월 17일 화요일

C / C++ 개발 환경

자바 언어가 사용하기엔 좋지만 항상 걸리는 점들이 있다. 첫번째는 자바는 JRE 환경이 필요하다는 저과 두번째는 오라클과 구글의 관계이다. 최근에 구글이 자바 관련 소송에서 졌기 때문에 자바의 입지가 그만큼 좁아졌다. 이에 따라 다시 한 번 C / C++ 개발 환경을 주 개발 환경으로 꾸며 보려고 한다.
이전에 정리한 것과 달라지는 것은 eclipse 에서 Code::Block 으로 바꾼 점이다. eclipse 역시 자바 기반으로 만들어진 툴이라 자바에 대한 의존성이 생기기 때문에 Code::Block 으로 바꾸기로 했다. GTK 를 GUI designer 없이 쓰는 것이 쉽지는 않아 보이나 성능 이슈도 있고 GUI designer 의 의존성을 버리기 위해 이렇게 하기로 했다.

GTK 와 wxWidgets 사이에선 wxWidgets 가 여러모로 우수한 것으로 보인다. 또한 GUI 프로그래밍을 C 로 한다는 것이 의외로 많은 문제를 가져오는 것 같다. 그래서 wxWidgets 를 C++ 환경으로 만들어 보는 것이 어떨까 싶다.

아마도 이런 환경에 익숙해지려면 좀 많은 시간이 필요할 것 같다.

2015년 2월 26일 목요일

winmail.dat / TNEF 포멧 제거 방법

Disabling TNEF in Outlook

The sender can avoid sending TNEF attachments by by turning off TNEF in Outlook. When Outlook is configured to send e-mail in "Outlook Rich Text Format", it may use TNEF. When it sends in "HTML" or "Plain Text", it uses standard, compatible formats. There are two options for disbling TNEF:
In at least Outlook 2002 (a.k.a. Outlook XP) and Outlook 2003, if it's being used at a business, the following is recommended to ensure compatibility with corporate mail systems:
  1. On the "Tools" menu, click "Options", then click the "Mail Format" tab, and then the "Internet Format" button.
  2. Set "When sending Outlook Rich Text messages to Internet ..." to either "Convert to HTML format" or "Convert to Plain Text format".

In all versions of Outlook, you can disable TNEF completely:
  1. On the "Tools" menu, click "Options", and then click the "Mail Format" tab.
  2. In the "Send in this message format" list, click "Plain Text" or "HTML", and then click "OK". 

원문은 위를 확인하면 되고, 아래와 같이 안내하도록 하자.

아래와 같이 Outlook 의 "도구" 메뉴에서 "메일" 메뉴에서 "작성할 메시지 형식" 을 HTML 로 설정해 주세요.