Languages & Frameworks
프로그래밍 언어는 그냥 도구인가? 에 대한 견해
프로그래밍 언어는 그냥 도구인가? 에 대한 견해
2021.05.01이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[Python] 파이썬 버전, 패키지 관리
[Python] 파이썬 버전, 패키지 관리
2020.10.10뭘 쓰든 한가지 방법으로 통일해서 관리하는게 좋음. pyenv / venv / virtualenv / conda 비교 pyenv windows는 지원 안함. python 버전 관리를 위해 쓰는거라. 특정 버전에 종속적인게 아니다. brew install ... python 자체 버전 관리를 위해 사용. 따라서 패키지 관리는 virtualenv 등과 연계해서 사용해야 한다. pyenv 하위로 virtualenv를 사용할 수 있다. (이게 좀 더 낫다.) pyenv-virtualenv를 사용하는 방법이 에러로 불가한 경우? python 버전은 pyenv로 관리하고, 해당 python 버전의 venv 모듈로 가상환경 만들면서 [python + 패키지]를 가상환경으로 묶는 방법을 사용해도 된다. venv pyt..
Qt 로 빌드한 바이너리 배포하기
Qt 로 빌드한 바이너리 배포하기
2019.02.22Qt 자체를 static build하는건, 1. Qt 설치할 때 Source 선택해서 받은 다음 직접 빌드해야 하는데 nmake에러뜨고 빌드하는데 몇 시간 씩 걸리고 이래서 할 짓이 못됨.2. 오픈소스 버전은 static 배포를 금지하고 있다고 함(?) 그냥 같은 디렉터리에 dll 같이 넣어서 배포해주면 됨. release로 빌드하는 것 잊지 말고, *d.dll은 debug로 빌드했을 때 사용. sysinternals에서 ListDlls 받아가지고 어느 dll을 참조하는지 알아낸 다음 그냥 .exe가 위치한 디렉터리로 복붙하면 된다. 그리고 아마 Qt\.....\plugins에 있는 것들은 복사 해도 안될텐데, 이건 따로 설정파일을 두어야 함. .exe가 위치한 디렉터리에 qt.conf로 파일 하나 생성..
[python] 사용하면 좋은 패턴들
[python] 사용하면 좋은 패턴들
2019.02.11데이터 클래스는? @dataclass docs.python.org/ko/3/library/dataclasses.html 다형성을 쓰고 싶다면? abc 클래스 python에 interface는 없지만 abstract base class가 있다. https://docs.python.org/ko/3/library/abc.html 근데 메서드 명만 같으면 되고, 파라미터는 강제하지 않음. 근데 어차피 다형성 쓸거라면 파라미터도 맞춰주어야 한다. Python Singleton https://stackoverflow.com/questions/6760685/creating-a-singleton-in-python wikidocs.net/3693 doctest : docstring에 간단히 명시해서 로직 테스트 가능 h..
[python] 헷갈리는 모듈 스코프 변수, 전역 변수처럼 쓸 수 있을까? - 아니. class level 변수를 쓰자.
[python] 헷갈리는 모듈 스코프 변수, 전역 변수처럼 쓸 수 있을까? - 아니. class level 변수를 쓰자.
2019.02.04요약 : 전역 변수, 모듈 스코프 변수 보다는 class level 변수를 사용하자. main.py```pythonfrom g_val import *print("1 ", a)print(id(a))a = Falsedelay()print("3 ", a)print(id(a))```g_val.py```pythonimport timea = Truedef delay(): print("2 ", a) print(id(a))``````pythonλ python main.py1 main True1407342495522082 g_val True # False로 변경되어야 할 것 같지만, 그렇지 않다.1407342495522083 main False140734249552240```처음에는 main.py에서 a라는 변수에 접근..
[C/C++] print를 하거나 문자열을 리턴하는 함수. 어떻게 구성하는게 좋은가? : string을 리턴하자.
[C/C++] print를 하거나 문자열을 리턴하는 함수. 어떻게 구성하는게 좋은가? : string을 리턴하자.
2019.01.25보통 "input은 인자, output은 리턴"으로 작성하는 편이 알아보기 쉽기 때문에 함수 인자로 포인터를 넘겨 이 포인터에 쓰는 방식으로 간접적으로 값을 되돌려 주는 것 보다, 명확하게 어떤 값을 리턴하도록 작성하는 편이다. 그러나 C같이 garbage collection이 안되는 언어에서는 어떤 값을 리턴하도록 작성하면 여러가지 이슈를 겪는 경우가 있다. *** 또한 GC가 안되는 언어에서는 in/output을 명확히 작성한다 해도 반드시 순수 함수라고는 볼 수 없다. 함수 내부에서 ``c malloc()`` 등을 호출하면 side-effect이 생기기 때문. 예를 들면 다음과 같은 상황이다. malloc() : 문제점 - 바깥에서 free()```cchar* parse_something(const..
Effective Modern C++
Effective Modern C++
2019.01.221장 형식 연역항목 1: 템플릿 형식 연역 규칙을 숙지하라항목 2: auto의 형식 연역 규칙을 숙지하라항목 3: decltype의 작동 방식을 숙지하라항목 4: 연역된 형식을 파악하는 방법을 알아두라 2장 auto항목 5: 명시적 형식 선언보다는 auto를 선호하라항목 6: auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라 3장 현대적 C++에 적응하기항목 7: 객체 생성 시 괄호(())와 중괄호({})를 구분하라항목 8: 0과 NULL보다 nullptr를 선호하라항목 9: typedef보다 별칭 선언(using)을 선호하라항목 10: 범위 없는 enum보다 범위 있는 enum을 선호하라항목 11: 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라항목 12: 재정의 함수들..
More Effective C++
More Effective C++
2019.01.22Chpater 1 기본 개념들항목 1 :포인터(pointer)와 참조자(reference)를 구분하자항목 2 : 가능한 C++ 스타일의 캐스트를 즐겨 쓰자 항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다항목 4 : 쓸데 없는 기본 생성자는 그냥 두지 말자 Chpater 2 연산자(Operators)항목 5 : 사용자 정의 타입변환 함수에 대한 주의를 놓지 말자항목 6 : 증가 및 감소 연산자의 전위(prefix)/후위(postfix) 형태를 반드시 구분하자항목 7 : &&, ||, 혹은 . 연산자는 오버로딩 대상이 절대로 아니다 항목 8 : new와 delete의 의미를 정확히 구분하고 이해하자 Chpater 3 예외(Exceptions)항목 9 : 리소스 누수를 피하는 방법의 정공(正攻..
Effective C++
Effective C++
2019.01.22Chapter 1 C++에 왔으면 C++의 법을 따릅시다항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자항목 3: 낌새만 보이면 const를 들이대 보자!항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 Chapter 2 생성자, 소멸자 및 대입 연산자항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하..
[C++] operator overloading
[C++] operator overloading
2019.01.22toString 같은, 문자열 반환 오퍼레이터두 가지가 있고, 두개 모두 오버로딩하는게 좋다.1. string cast operator캐스트 연산자를 이용한 한 방법이다.다음과 같은 상황에서 자동으로 string으로 캐스팅해서 반환해준다.```cppstd::string mac_str = src_mac_addr.toString()```C스타일의 출력(printf)을 사용하는 경우에도 이걸 이용해서 string으로 반환 받은 다음 .c_str()을 써서 변환해서 사용하는 식으로도 쓰인다. ```cppclass Foo {public: operator std::string() const { return "member to string!"; }}; Foo foo;std::cout
[C++] 구조체와 클래스의 차이 ( struct / class )
[C++] 구조체와 클래스의 차이 ( struct / class )
2019.01.22구조체와 클래스의 차이 : 기본 접근 지정자 말고는 없음.class는 기본적으로 `` private``struct는 기본적으로 `` public`` 생성한 객체의 위치는, 클래스냐 구조체냐가 결정하는게 아니라, new로 만들었느냐 그냥 선언했느냐가 결정.```cpp#include struct ST { int a;}; class CL {public: int a;}; int main(void) { struct ST s; s.a = 1; CL c; c.a = 1; printf("struct : %p\n", &s.a); printf("class : %p\n", &c.a); return 0;}``````struct : 0x7ffee9e09a50class : 0x7ffee9e09a54```보다시피 둘 다 지역변수로..
Google Protocol Buffer
Google Protocol Buffer
2019.01.13https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1 여기서 protobuf-all-3.6.1.zip 다운로드하고protoc-3.6.1-win32.zip 다운로드 한 다음에튜토리얼 참고해서 example에 있는 addressbook.proto를 protoc로 컴파일하면 addressbook_pb2.py가 만들어진다. 단 이 때, 만들어진 addressbook_pb2.py를 사용하려면 protobuf 라이브러리가 필요함. serialization같은걸 처리해주는 함수가 여기에 있다.```pythonpip install protobuf``` C++ 같은 언어도 마찬가지로 protoc로 컴파일하는데 인자를 다르게 주면 .cpp가 만들어진다. * pi..