[리눅스] Bash Shell에서 파일 존재 여부 검사 시 -e와 -f 옵션의 차이

 

Bash Shell에서 파일 존재 여부 검사 시 -e와 -f 옵션을 사용할 수 있는데, -e는 단순히 파일이 존재하는지만 검사하고 -f는 해당 경로에 있는 것이 디렉토리나 마운트 된 기기 등이 아니라 정말로 파일인지까지 검사해줍니다. 보통 if문 안에서 다음과 같이 사용하게 되지요.

 

# 해당 운영체제가 우분투인지를 검사하는 코드입니다.
if [[ -f /etc/lsb-release ]];

 

참조한 곳: https://linuxize.com/post/bash-check-if-file-exists/

LNK2019 _main"int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 함수에서 참조되는 확인할 수 없는 외부 기호

이 에러는 대부분의 경우 현재 프로젝트에 main() 함수가 없어서 생깁니다. 아무 메인 함수나 만들어주면 잘 실행됩니다. 예를 들어 int main() { return 0; } 과 같은 빈 메인 함수 하나만 넣어 주셔도 됩니다.

[안드로이드] You need to use a Theme.AppCompat theme (or descendant) with this activity.

 

AlertDialog.Builder를 사용할 때에 발생할 수 있는 에러입니다.

new AlertDialog.Builder(getApplicationContext())new AlertDialog.Builder(this) 로 바꾸시면 해결됩니다.

[파이토치 (PyTorch)] IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number

 

0.5 이전 버전의 파이토치에서 작성된 코드를 0.5 이후 버전에서 돌리다 보면 위와 같은 에러가 날 때가 있습니다. 파이토치의 데이터 자료 구조가 바뀌어서 그렇습니다.

 

코드에서 변수.data[0] 인 부분을 변수.data 로 바꾸어주시면 해결됩니다.

 

참고한 곳: https://github.com/NVIDIA/flownet2-pytorch/issues/113#issuecomment-450802359

[안드로이드] SDK Validation ANDROID_SDK_HOME is set to the root of your SDK

 

안드로이드 스튜디오에서 다음과 같은 에러가 날 때가 있습니다.

SDK Validation
ANDROID_SDK_HOME is set to the root of your SDK: C:\Users\username\AppData\Local\Android\Sdk
This is the path of the preference folder expected by the Android tools.
It should NOT be set to the same as the root of your SDK.
Please set it to a different folder or do not set it at all.
If this is not set we default to: C:\Users\username

 

이것은 ANDROID_SDK_HOME 이라는 시스템 변수가 C:\Users\사용자명\AppData\Local\Android\Sdk 로 되어 있어서 나타나는 문제입니다. 이럴 때에는 제어판의 시스템 항목에 있는 환경 변수 목록에서 ANDROID_SDK_HOME 을 찾아서 지워주시면 문제가 해결됩니다. ANDROID_SDK_HOME 항목을 지워주시면 안드로이드 스튜디오가 알아서 자동으로 적당한 경로를 찾게 됩니다.

 

[VI, VIM] 윈도용 gVim에서 Ctrl+C등 윈도 단축키 사용하기

 

_vimrc 파일에 다음 줄을 넣어주면 됩니다.

 

source $VIMRUNTIME/mswin.vim

 

[안드로이드] 일정 시간동안 멈춘 후 작업하기 (postDelayed 사용)


안드로이드 개발을 하다 보면 몇 초 동안 기다린 후에 작업을 해야 할 경우가 있습니다. 일반 자바 프로그래밍에서라면 Thread.sleep(3000); 등을 사용하면 되겠지만 안드로이드에서는 앱이 그 시간동안 먹통이 되기 때문에 위와 같은 코드를 사용할 수 없습니다. 안드로이드에서는 다음과 같은 코드를 사용하면 됩니다.


new Handler().postDelayed(new Runnable() {

        @Override

        public void run() {

          someFunction(); // 일정 시간 기다린 후에 실행될 코드를 이곳에 씁니다.

        }

    }, 3000); // ms 단위라서 1000이 1초입니다.


( 참조한 사이트: https://stackoverflow.com/a/31041945/1125721 )

[자바] JNI에서 jboolean을 bool로 바꾸기


자바에서 JNI를 사용하다 보면 인자로 받은 jboolean을 bool형으로 바꾸어야 할 일이 생깁니다.

그럴 때에는 아래 코드와 같이 하면 됩니다.

JNI_FALSE와 다른지를 검사하는 것이 JNI_TRUE와 같은지를 검사하는 것보다 좀 더 안전합니다.


jboolean foo;

bool bar;


// foo가 JNI_FALSE와 다른지를 검사하기 때문에 foo와 bar이 같은 논리값을 갖게 됩니다.

bar = (bool) (foo != JNI_FALSE);


( 참조한 곳: https://stackoverflow.com/a/10192690/1125721 )

[코틀린] 물음표(?)의 기능


코틀린에서 변수형에 물음표가 붙어 있으면 그 변수의 값이 null이 될 수 있다는 뜻입니다. 반대로 물음표가 없다면 그 변수는 null이 될 수 없습니다. null이 될 있는 변수형을 nullable이라고 하고 null이 될 수 없는 변수형은 non-null 이라고 합니다. 다음은 간단한 예제입니다.


fun goodMorning(data: Intent?) // data가 null이어도 괜찮습니다.

fun goodAfternoon(data: Intent) // data가 null이면 안 됩니다.


[안드로이드] 화면 녹화하기


개발자 옵션에서 USB 디버깅이 활성화되어 있는 상태라면 adb를 사용해서 쉽게 안드로이드 화면을 녹화할 수 있습니다.


adb shell screenrecord /sdcard/file_name.mp4

// 녹화를 끝낼 때에는 Ctrl + C


이렇게 하면 저장소에 file_name.mp4 라는 이름으로 녹화 파일이 저장됩니다.


( 참조한 곳: https://mytalkhome.tistory.com/610 , https://www.androidpub.com/2579669 )

+ Recent posts