iTerm2 커스텀 세팅

|

iTerm2 커스텀 설정

지극히 개인적인 설정입니다. iTerm2여기에서 받을 수 있습니다.


테마 설정

많은 종류의 테마가 있지만 저에게는 Oceanic-Next 테마가 가장 무난한 듯 싶습니다. 여기에서 다운로드한 다음 Finder에서 Oceanic-Next.itermcolors 파일을 실행하면 iTerm2의 색상 preset에 자동으로 추가됩니다.

맥북 터치바 버전에서는 터치바에 있는 칼라 원형 버튼을 누르면 테마를 선택할 수 있습니다. 만약 메뉴에서 선택하려면, Profiles > Colors > Color Presets에서 선택할 수 있습니다.

저는 전체 테마는 Oceanic Next를 선택하되, backgroud 색은 좀 더 어두운 색으로 설정합니다.


Preferences 설정

Apperance 메뉴로 들어가서 다음 항목들을 변경해줍니다.

  • TabsThemeDark로 변경
  • WindowsShow line under title bar when tab bar is not visible 항목을 체크 해제

Profile 메뉴에서는 다음 항목을 변경합니다.

  • Text에서 FontPowerline으로 설정, 폰트 크기는 14
  • Window에서 Columns를 120으로(폰트 크기가 14일 경우는 100으로), Rows는 28로 세팅
  • Terminal에서 Unlimited Scrollback 체크

유용한 탐색 프로그램 fzf 사용하기

|

fzf 사용하기

Fuzzy Finder의 약어로, 터미널상에서 find 명령어를 대신할 수 있는 명령어입니다. 사용 방법이 쉬우며 아주 강력해서 많이 애용하고 있습니다.


설치 방법

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

설치한 다음 터미널에서 fzf를 입력해보면 어떤 프로그램인지 바로 알 수 있을 것입니다.


타 프로그램과 연동

fzf의 강력한 점은 단독 실행보다 타 프로그램과의 연동에서 발휘됩니다. 다음과 같이 fzf의 결과값을 받아서 다른 프로그램과 연동해서 사용할 수 있습니다.

vim $(fzf)
nano $(fzf)

vim $(fzf --height 60%)
vim $(fzf --height 30% --reverse)

# Default 옵션 설정도 가능합니다.
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'

fzf의 Finder 내에서는 커서나 마우스로 파일을 선택하거나 스크롤을 할 수 있습니다. 여러 항목을 선택하고 싶은 경우에는 -m 옵션을 이용해서 실행하면 되며, TabShift + Tab 키를 이용해서 여러 파일을 선택할 수 있습니다.


자동완성

fzf의 강점 중 자동완성 기능이 있는데, 아주 강력합니다. 사용법은 [명령어] [경로][패턴]**[TAB 키]이며, 사용 예제는 다음과 같습니다.

nano **<TAB>
vim **<TAB>
nano text**<TAB>
ls ./s**<TAB>

그 외에도

kill -9 <TAB>

ssh <TAB>

등과 같이 활용할 수도 있습니다.


preview 기능

fzf는 파일 내용을 미리 볼 수 있는 preview 기능을 제공합니다. 다음 함수를 .zshrc에 추가합시다. 터미널에서 fzfv를 입력하면 실행할 수 있습니다.

function fzfv()
{
    fzf --preview '[[ $(file --mime {}) =~ binary ]] &&
                 echo {} is a binary file ||
                 (cat {}) 2> /dev/null | head -500'
}

IP 목적지에 따라 다른 네트워크 인터페이스 사용하는 방법

|

IP 목적지별로 다른 route table 사용하는 방법

두 개(내부망/외부망)의 네트워크 인터페이스를 사용할 경우 다음과 같은 명령어를 이용해서 목적지 주소에 따라 routing을 다르게 할 수 있습니다.

# 설정: Destination IP Address가 10.XXX.XXX.XX 인 경우, en7 인터페이스 사용
sudo route -nv add -net 10 -interface en7
sudo route -nv add -net 112 -interface en7

# 삭제
sudo route delete -net 10 -interface en7

JAVA_HOME 환경 변수 설정 (Java 버전 여러 개 설치된 경우)

|

JAVA_HOME 환경 변수 설정

개발을 하다보면 환경 변수 JAVA_HOME에 값을 설정해야 할 일이 자주 발생합니다. 먼저 /usr/libexec/java_home -V 명령어를 이용하여 Mac에 설치된 Java 버전을 확인합니다. 만약 별도로 Java를 설치하지 않았으면 다음과 같은 결과가 출력됩니다.

$ /usr/libexec/java_home -V

Matching Java Virtual Machines (1):
    11.0.1, x86_64:	"OpenJDK 11.0.1"	/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home


맥 OS에 설치된 Java 버전이 2 가지 이상인 경우에도 동일한 방법으로 확인할 수 있습니다. 저같은 경우는 특정 프레임워크 빌드를 위해 JDK 1.8을 추가로 설치했더니 다음과 같이 출력되었습니다.

/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.1, x86_64:	"OpenJDK 11.0.1"	/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home
    1.8.0_192, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home

이 중 원하는 버전으로 JAVA_HOME으로 설정하면 됩니다.

또는 아래의 명령어를 수행하면 보다 편리하게 설정 가능합니다.

# Java 10
export JAVA_HOME=$(/usr/libexec/java_home -v 10)

# Java 9
export JAVA_HOME=$(/usr/libexec/java_home -v 9)

# Java 1.8
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

# Java 1.7
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

# Java 1.6
export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

MAC OS에 ROS2 for Android 설치하는 방법

|

MAC OS에 ROS2 for Android 설치하는 방법

ROS 2.0 설치 방법은 자주 업데이트되거나 변경되기 때문에 아래 방법이 잘 되지 않으면 Esteve github를 참고하는 편이 좋습니다. 2018년 11월 6일 기준 제가 직접 설치하면서 검증한 방법입니다.


JAVA 8 설치

ROS 2 for Android는 Java 8 버전에서만 제대로 동작합니다. 저같은 경우는 그보다 높은 버전이 설치되어 있어서 하위 버전의 JDK를 추가로 설치해줬습니다. JDK 1.8은 여기에서 다운로드 할 수 있습니다.

다음 명령어를 이용해서 JAVA_HOME 설정을 해주고 gradle도 설치합니다.

$ brew tap caskroom/versions
$ brew cask install java8
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

$ brew cask install java

$ brew install gradle

맥 OS에는 vcstool도 기본적으로 설치되어 있지 않기 때문에 설치해줍니다.

pip3 install vcstool


ament_ws 설치

mkdir ament_ws/src
cd ament_ws
curl -skL https://raw.githubusercontent.com/esteve/ament_java/master/ament_java.repos -o ament_java.repos
vcs import src < ament_java.repos
src/ament/ament_tools/scripts/ament.py build --symlink-install --isolated


Anroid Studio 및 NDK 설치

Android NDK를 다운로드해서 설치합니다. 여기에서 다운로드 가능하며 버전은 16b 이상이면 가능합니다. 저는 17b 버전으로 설치했습니다. 물론 Android Studio나 Android SDK도 비슷한 방법으로 다 설치가 되어 있어야 합니다.

그 이후 환경 변수를 아래와 같이 설정합니다.

export ANDROID_PATH=/Users/snowdeer/Library/Android
export ANDROID_SDK=${ANDROID_PATH}/sdk
export ANDROID_NDK=${ANDROID_PATH}/ndk/android-ndk-r17b
export ANDROID_NDK_HOME=${ANDROID_NDK}
export ANDROID_HOME=${ANDROID_SDK}
export ANDROID_TOOLS=${ANDROID_SDK}/platform-tools
export PATH=$PATH:$ANDROID_SDK:$ANDROID_TOOLS:$ANDROID_NDK

ROOT_DIR=${HOME} AMENT_WORKSPACE=${ROOT_DIR}/ament_ws ROS2_ANDROID_WORKSPACE=${ROOT_DIR}/ros2_android_ws export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

export PYTHON3_EXEC=”$( which python3 )” export ANDROID_ABI=armeabi-v7a export ANDROID_NATIVE_API_LEVEL=android-21 export ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang

ROS 2 for Android 소스 다운로드

mkdir -p ${ROS2_ANDROID_WORKSPACE}/src
cd ${ROS2_ANDROID_WORKSPACE}
wget https://raw.githubusercontent.com/esteve/ros2_java/master/ros2_java_android.repos
vcs import ${ROS2_ANDROID_WORKSPACE}/src < ros2_java_android.repos
source ${AMENT_WORKSPACE}/install_isolated/local_setup.sh


빌드

rcl_lifecycle 패키지 같은 경우 최근에 ROS 2에 추가되었는데 아직 ROS 2 for Android에서는 지원하지 않는 것 같아서 제외했습니다.

ament build --isolated --skip-packages test_msgs rcl_lifecycle \
  --cmake-args \
  -DPYTHON_EXECUTABLE=${PYTHON3_EXEC} \
  -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
  -DANDROID_FUNCTION_LEVEL_LINKING=OFF \
  -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \
  -DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME} \
  -DANDROID_STL=gnustl_shared \
  -DANDROID_ABI=${ANDROID_ABI} \
  -DANDROID_NDK=${ANDROID_NDK} \
  -DTHIRDPARTY=ON \
  -DCOMPILE_EXAMPLES=OFF \
  -DCMAKE_FIND_ROOT_PATH="$AMENT_WORKSPACE/install_isolated;$ROS2_ANDROID_WORKSPACE/install_isolated" \
  -- \
  --parallel \
  --ament-gradle-args \
  -Pament.android_stl=gnustl_shared -Pament.android_abi=$ANDROID_ABI -Pament.android_ndk=$ANDROID_NDK --