분명 numpy를 설치했는데 파이썬에서 numpy를 사용하려 하면 다음과 같이 AttributeError: module 'numpy' has no attribute ... 하는 에러가 뜰 때가 있습니다.

import numpy as np

print(np.__version__)
# AttributeError: module 'numpy' has no attribute '__version__'

 

이는 numpy가 설치는 되었지만 시스템에서 파이썬 라이브러리로 제대로 연결이 안 되어서 그렇습니다. 이럴 경우 맥에서 homebrew를 사용할 때를 기준으로

brew link --overwrite numpy

 

를 실행해주면 문제가 해결됩니다.

 

참조한 곳: https://github.com/Homebrew/homebrew-core/issues/15698#issuecomment-315730732

파이썬에서 상속을 통해 클래스를 만들 경우 생성자 안에서 상위 클래스의 생성자를 호출해야 할 때가 있습니다. 그럴 때 아래 두 종류의 코드가 사용되곤 하는데요, 간단한 코드는 파이썬 3에서부터 지원되는 문법이고 복잡한 코드는 파이썬 2와 3에서 모두 지원됩니다. 기능은 동일합니다.

 

1. 간단한 코드

# 파이썬 3에서부터 지원됩니다.
super().__init__()

 

2. 복잡한 코드

# 파이썬 2와 3에서 모두 지원됩니다.
super(__class__, self).__init__()

 

참조: https://stackoverflow.com/a/61288819/1125721

Julia를 apt-get 으로 설치하면 옛날 버전이 설치됩니다. 최신 버전을 설치하려면 직접 홈페이지에서 다운받아야 합니다.

 

1. 줄리아 다운로드 페이지로 갑니다.

https://julialang.org/downloads/

 

2. 컴퓨터 사양에 맞는 버전을 다운로드합니다. 제 경우는 Generic Linux on x86 64-bit (glibc) 용 1.8.0 버전으로 진행하였습니다.

wget https://julialang-s3.julialang.org/bin/linux/x64/1.8/julia-1.8.0-linux-x86_64.tar.gz

 

3. tar로 압축을 풉니다.

tar -xvzf julia-1.8.0-linux-x86_64.tar.gz

 

4. /opt/로 복사함으로써 설치를 합니다. /opt/는 apt-get이 아닌 다른 방법으로 설치된 프로그램들이 있는 곳입니다. 관리자 권한이 필요합니다.

sudo mv ./julia-1.8.0 /opt/

 

5. /usr/local/에  symbolic link를 만들어서 어디서나 편하게 사용하도록 합니다.

sudo ln -s /opt/julia-1.8.0/bin/julia /usr/local/bin/julia

 

6. 이제 터미널 환경에서 julia만 입력하면 julia를 실행할 수 있습니다.

$ julia

 

참조한 곳: https://medium.com/coffee-in-a-klein-bottle/install-julia-1-5-on-ubuntu-bb8be4b2571d

[리눅스] 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) 로 바꾸시면 해결됩니다.

[안드로이드] 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 )

+ Recent posts