MINERVA/Python 2022. 5. 12. 14:38
반응형

1.기본적 오브젝트 분류

출처: https://www.geeksforgeeks.org/

 

2. 객체 종류

- 파이썬의 모든 변수는 객체의 인스턴스다. 그리고, 객체는 2종류로 구분(1. Mutable, 2. Immutable)된다.

- 객체가 인스턴스화될 때마다 고유한 개체 ID가 할당되고, 객체 유형은 런타임에 정의되며 이후에는 변경할 수 없습니다. 그러나 변경 가능한(mutable) 객체인 경우 상태가 변경될 수 있습니다.

- 변경 가능한 객체는 상태나 내용을 변경할 수 있고, 변경할 수 없는 객체는 상태나 내용을 변경할 수 없습니다.

 

3. WHY?

- 호기심? 파이썬을 만든 사람들은 왜? 객체 2가지로 분류를 하였을까? 답: 속도와 비용 때문이다.

  (이 부분에 대해 기술적으로 좀더 깊게 보고자 한다면, 얕은 복사(shallow copy) 와 깊은 복사(deep copy)에 대해서 보면 더 이해가 잘 됩니다.)

- 가변(mutable) 객체와 불변(immutable) 객체는 파이썬에서 다르게 처리됩니다. 
  변경할 수 없는 개체는 액세스가 더 빠르고 복사본을 생성해야 하기 때문에 변경 하는 데 비용이 많이 듭니다.
  반면 가변 객체는 변경하기 쉽습니다.

 

4, 예제

5. 정리

- 개체의 크기 또는 내용을 변경해야 하는 경우 가변 개체를 사용하는 것이 좋습니다.

 

반응형
posted by choiwonwoo
:
MINERVA/Java Script 2022. 4. 21. 04:39
반응형

윈도우 환경에서 Visual studio code에 Code Runner를 설치 후, js 파일을 실행시키면, 아래와 같은 에러가 발생하는 경우가 있습니다.

희한하게 Mac에서는 괜찮고, 윈도우에서만 발생함

 

[원인]

Code Runner가 자바스크립트 코드를 실행 시, Node.js command실행하기 때문에 발생

 

[해결방법]

https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

최신의 LTS 버젼을 설치 후 Visual studio code 재실행

반응형
posted by choiwonwoo
:
MINERVA/Git 2022. 4. 20. 21:52
반응형

앞에서 기본적은 Git의 동작 방법에 대해서 설명을 하였습니다.

그런데, 저의 경우 visual studio, pycharm, android studio, atom 등을 사용하면서, console에서 git을 사용하기 보다는 visual환경을 사용하는 것이 생산성과 편의성이 높아 GitHub Desktop을 사용합니다.

 

그래서, 해당 내용을 간단히 정리하고자 합니다.

 

1.Download:  https://desktop.github.com/

 

GitHub Desktop

Simple collaboration from your desktop

desktop.github.com

2. Github 로그인

다운받은 파일을 실행(GitHubDesktopSetup-x64.exe)후 Github에 로그인(계정이 없으면 생성후 로그인)

이름과 이메일 등록후 로그인

3. 로그인후 tutorial repository 만들기

1) crate a tutorial repository 클릭

- 앞에서 local repository를 만들고, remote repository를 각각 설명했지만,

   아래의 글을 보면, 동시 생성된다는 것을 확인할수 있고, 해당 저장소가 private하게 만들어짐을 확인

로긴 성공화면

3. 확인

 

1) Default 생성된 로컬 저장소

2) 원격 저장소(remote repository)

 

확실히 console에서 git init, git add, git commit, git push 등등하는 것보다 월등히 편하다.

그리고 실무적으로 visual 하게 작업하는것이 잔실수를 줄이기도 합니다.

동작 개념만 명확히 이해하고 있다면, GUI환경에서 작업하는 것이 좋을 듯합니다.

 

감사합니다.

 

반응형
posted by choiwonwoo
:
MINERVA/Git 2022. 4. 20. 19:28
반응형

정리 방향은 Git 역사, 철학등은 모두 스킵하고, 클라이언트(개발자) 측면에서 필수적인 부분만 정리하고자 합니다.

(참고: Git 이전에는 cvs, svn 등이 있었지만, 현재는 Git이 천하통일(?))

 

1. What?(Git 이란?)

- 소스코드/리소스를 효과적으로 관리하기 위해 리누스 토르발스가 개발한  분산형 버전 관리 시스템(VSC)이다.

 

2. How to use?(어떻게 사용)

- "작업 공간에서 작업한 내용을 스테이지에 올려서 로컬 저장소에 커밋하고, 이를 푸시해서 원격 저장소로 보낸다"

 

1) 작업공간(working space)

- 개인 PC에서 작업내용(코드, 이미지 편집)을 담고 있는 프로젝트 폴더를 말함

 

2) 스테이지(stage)

- 작업한 내용이 올라가는 임시 영역을 말함 --> 매우 학문적인 표현 ㅠㅠㅠㅠ

- 직관적으로 표현하면, 작업 공간에서 생성/변경이 발생한 파일을 다음 커밋에 반영하기 위해 추적하는 것을 말함

- 스페이지하는 것을 인덱스(index)한다고 표현하기도 함

- 추적되는 파일은 스테이지 영역(stage area)에 넣는다고 함.

cf) 언스페이지(unsatge): 추적을 해제, 즉 스테이지 영역(stage area)에서 제외시킴

 

[명령어]

- git add : 작업내용을 추적(stage)시키는 명령어입니다.

ex) git add . //현재 폴더의 모든 파일과 디렉토리, 하위 디렉토리에 든 전부를 staging area에 추가한다. 

     git add 파일 //  파일을 staging area에 추가한다.

 

- git rm  : 작업 내용을 추적해제(unstage)시키는 명령어입니다.

 

3) 커밋(commit)

- 작업한 내용을 로컬 저장소에 저장하는 과정

- 스테이지(추적) 내용을 하나로 묶는 것을 말함

- commit과 동시에 로컬 저장소에 저장됨

- 직관적으로 표현:  작업공간(working space)의 스페이지(stage, index)내용을 커밋(변경, 추적내용)해서 저장소에 저장

ex) git commit -m "메시지" //메시지는 어떤 내용을 반영했는지를 나타냅

     git log     // 로컬 저장소(local repository)에서 commit된 이력을 확인

     git status // 마지막 commit 이후 작업 공간(work space)에서 변경이 있는 모든 파일을 보여줌

 

cf) 태그(tag)란? 커밋의 임의 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표를 태그

3) 로컬 저장소(local repository)

-  PC에 작업내용이 저장되는 개인 전용 저장소

ex) git init  DAS // 로컬 저장소 생성

or

GitHub 사용

위와 같이 console or GUI를 통해서 작업공간(working space)를 생성하면,

.git 폴더가 생성되는되데, 이곳이 commit된 내용이 들어가는 로컬 저장소(local repository)입니다.

4) 원격 저장소(remote repository)

- 로컬 저장소에 있는 내용을 원격 서버에 여러사람과 공유 또는 공동작업을 위한 저장소

- Push/ Pull

Push/Pull

- Push: 로컬 저장소의 내용 중 원격 저장소에 반영되지 않은 커밋을 원격 저장소로 보내는 과정
- Pull: 푸시와 반대로 원격 저장소에 있는 내용 중 로컬 저장소에 반영되지 않은 내용을 가져와서 로컬 저장소에 저장하는 과정을 의미합니다. 이를 통해 다른 팀원이 변경하고 푸시한 내용을 로컬 저장소로 가져올 수 있습니다.

푸시 과정에서 충돌(Collision)이 일어나서 푸시가 거절된 경우, 풀을 통해 원격 저장소의 변경 내용을 반영한 뒤 다시 푸시를 시도해야 합니다.

 

// NEXT: 실제 실무중심에서 사용하는 명령어 정리

// 예: 원격 저장소에서 로컬 저장소로 소스코드를 복사 --> git clone 

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2022. 4. 19. 15:03
반응형

해당 에러가 발생시 해결방법

 

[예제]

void main(){

     char *pszBuff = NULL;

     return;

}

 

Error C2065 'NULL': undeclared identifier

 

[에러원인]

' NULL' 이 내장(build-in) 상수(constant)가 아니기 때문이다.

 

[해결]

1. Assign 0

 

void main(){

     char *pszBuff = 0;

     return;

}

 

2. include <stddef.h> or <iostream>

 

#include <stddef.h>

#include <iostream> // for C++

 

void main(){

     char *pszBuff = NULL;

     return;

}

 

3. #define NULL 0

 

#define NULL 0

 

void main(){

     char *pszBuff = NULL;

     return;

}

 

4. In newer C++(C++11 and higher):: nullptr

 

#include <iostream> // for C++

void main(){

     char *pszBuff = nullptr

     return;

}

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2022. 4. 18. 17:31
반응형

아주 오래전에 이와 유사한 이슈가 있었는데, 깜빡하고 똑같은 실수를 했음

개인적으로는 msdn에 해당 내용이 좀더 친절하게 되어있으면 좋겠다.

 

https://social.msdn.microsoft.com/Forums/vstudio/en-US/5da5dbcf-05e7-49a3-bf0d-d91dcb0f358a/strtok-dilemma-and-working-problem?forum=vcgeneral 

 

Strtok Dilemma and Working Problem

The difference is about whether the memory containing the string value is writable or read-only.  In the first case, an array of char is being initialized with the content of the string, and because the array is on the stack it is writeable. In the second

social.msdn.microsoft.com

https://stackoverflow.com/questions/40034176/strtok-s-crashes-program-when-string-is-of-char

 

strtok_s crashes program when string is of char *

I am trying to get a token from a string that is delimited by space(" "). But the following code crashes the application when the string is of char * type. #include <stdio.h> #include <st...

stackoverflow.com

해당 이유는 아래와 같이 정리가 되어있음.

" strtok() changes the memory pointed to by the argument str, so what it points at must be writeable - i.e. a char * and not a const char *.  Since in the second case this condition is not satisfied, when it attempts to write a NUL to the read-only memory it crashes."

 

간단하게 정리하면, strtok_s(strtok)함수의 첫번째 인자에 상수포인터(pointer to const)가 들어가면 않됨

즉, 포인터가 가르키는 address가 read-only이면 않됨

[참조]

https://choiwonwoo.tistory.com/entry/cc-const-%ED%82%A4%EC%9B%8C%EB%93%9C-%EC%9D%B4%ED%95%B4

 

[c/c++] const 키워드 이해

const 키워드는 개발중에는 자연스럽게(?)사용하다가, 질문을 받고 설명하려고 하면 은근히 까다롭게 느껴져정리를 하고자 합니다. 개발자마다 설명하는 방법이 여러가지 있을 수 있지만, 저의

choiwonwoo.tistory.com

 

 

 

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2022. 4. 18. 15:37
반응형

const 키워드는 개발중에는 자연스럽게(?)사용하다가, 질문을 받고 설명하려고 하면 은근히 까다롭게 느껴져정리를 하고자 합니다. 개발자마다 설명하는 방법이 여러가지 있을 수 있지만, 저의 경우는 아래 개념으로 이해를 하고 있습니다.

 

1. const(constant) 키워드란?

- 상수로 만든다, 변경할수 없게 만든다.

- 변수 또는 포인터 변수를 상수로 만든다. --> 변수의 상수화

- const를 사용한 변수는 반드시 초기화 되어야 함(생각해 보면 당연함!)

 

2. 어디에 위치하는가?

- https://www.geeksforgeeks.org/memory-layout-of-c-program/

 

Memory Layout of C Programs - GeeksforGeeks

Memory Layout of C Programs

www.geeksforgeeks.org

[memory layout]

- const 키워드를 가진 변수는 반드시 초기화 되어야함

- Data Segment(아래 3가지 형태로 분류)에 저장됨: 

1) .DATA 영역: 변수를 초기화한 상태 저장

2) .BSS 영역: 변수를 초기화하지 않은 상태 저장

2) .RODATA 영역 : 읽기 전용 데이타 (예: const char* string="hello") 

--> 참고: 세크먼트 분류: CODE(TEXT), DATA, HEAP, STACK)

 

3. 용례

1) const int 과 int const 는 같은 의미

- 상수 int := int 상수

- const int a;  // 에러 발생: const는 반드시 초기화 되어야 함

- cont int a = 10;

  a = 11; // 에러발생: 상수화된 변수 내용은 변경 불가

 

2) const vs 포인터 변수: 4가지 조합이 가능함

- 이 문법은 아차하면 헷갈림

 

a) const int *pointer: 상수 포인터

- int형 상수에 대한 포인터(pointer to int const)

- 포인터 대상 or 내용을 상수화시킴

- 포인터 변수 주소 변경가능, 포인터 대상/내용 변경 불가

- const int *pointer 해석(?): int가 const이다. 그래서 내용이 변경 불가이고, 포인터 자체는 변경이 가능합 

- 예:

int nValue1 = 100;
int nValue2 = 200;

const int *pnVar1 = &nValue1;
pnVar1 = &nValue2; // 성공
*pnVar1 = 500; // 에러발생:const인 변수에 할당할 수 없습니다. 

 

b) int const * pointer: 

- int형 상수에 대한 포인터(pointer to const int)

- const int *piointer와 같은 표현

 

c) int * const pointer: 포인터 상수

- (주소를 가지는) 포인터 그 자체를 상수화 시킴

- int형에 대한 포인터 상수(const pointer to int)

- 주소는 변경 불가, 그러나, 포인터 변수가 가르키는 내용은 변경이 가능

- int * const pointer 해석(?): pointer가 상수이므로 변겨이 불가, 그러나, 포인터가 가르키는 내용은 변경가능

 

-예:

int nValue1 = 100;
int nValue2 = 200;

int *const pnVar1 = &nValue1;
pnVar1 = &nValue2; // 에러
*pnVar1 = 500; // 성공. 

 

d) const int const *pointer

- 상수를 가리키는 상수 포인터

- int 형 상수에 대한 포인터 상수(const pointer to const int)

- 주소, 값 모두 변경 불가

- int const * const pointer는 같은 표현

 

int nValue1 = 100;
int nValue2 = 200;

int *const pnVar1 = &nValue1;
pnVar1 = &nValue2; // 에러
*pnVar1 = 500; // 에러 

 

 

[직관적으로 정리]

# const 다음에 오늘 타입/내용은 변경 불가

# 예: int function(const char* list);

-->  함수의 경우 call by reference를 통해 값은변경하지 않고, 연결되는 주소만 바꾸어서 사용하기 위함이다.

 

 

반응형
posted by choiwonwoo
:
MINERVA/ETC 2022. 3. 5. 10:49
반응형

최근 Python을 주 언어로 하는 프로젝트를 완료하고, 진행 중 정리를 해야겠다는 내용을 오늘에서야 정리합니다.

 

개인적으로 약 20년 넘게 개발을 하면서, 프로젝트의 특성에 따라 적절한 개발 언어, 기술, 그리고 툴을 선택 또는 학습하고 진행하고 있습니다.(C/C++,C#, JAVA, Javascript, Python, PHP, Solidity etc)

 

하지만, 언제 부터인지는 기억이 나지 않지만(개인적인 경험에는 java가 처음이었던 것 기억됨), 최근 언어마다 다양한 pakage manager가 지원되고 있어, 협업을 위해서 패키지 관리자 부분도 프로젝트 초기에 가볍게(?) 이야기 되고 있습니다. 그래서, 간단하게 해당 내용을 정리하였습니다.

 

1. Pakage manager란?

- 프로그래밍 언어적인 측면에서는 프로젝트(개발)의 환경을 쉽게 만들어주고, 편리하게 관리하기 위한 도구라고 보면됩니다. (이러한 도구(?)가 없다면, 프로젝트 시작전에 각 모듈의 유효한 dependecy등을 수작업으로 해주어야 함)

- 시스템 어드민 측면에서는 시스템에 패키지(소프트웨어)의 다운로드, 설치 그리고 관리를 의미하였습니다.

 

2. 각 언어별 Pakage manager

1) Java - Maven, Gradle 이 있지만, 현재는 Maven이 주를 이루고 있음

2) JavaScript - npm

3) C# - nuget

4) C/C++ - vcpkg(https://choiwonwoo.tistory.com/entry/vcpkg-Please-install-the-English-language-pack?category=267468)

5) PHP - Composer

6) Python - pip, pypi, poetry

 

3. OS 별 Pakage manager

1) Mac: Homebrew

2) Debian: dbpkg, apt

3) Redhat: rpm, yum

4) Window: winget(https://docs.microsoft.com/ko-kr/windows/package-manager/winget/)

 

4. 정리

- 아주 초기에는 일일이 라이브러리를 다운받아 설치를 하여, 테스트하고 패스등의 설정을 하였지만, 근래 개발에서는 가능한 패키지 관리자를 통해서, 일관되게 관리 하여 생산성과 효율을 높이고자 합니다. 하지만, 너무 편해지다 보면 기초적인 라이브러리의 설정을 어려워하는 쥬니어 개발자를 가끔 보게 되면서 놀라곤 합니다. 아주 가끔은 한땀, 한땀 설정및 빌드를 하면서 테스트 코드 및 library version dependency 문제등을 경험하다 보면, 예상치 못한 가치와 경험이 쌓이곤합니다.

 

반응형
posted by choiwonwoo
:
MINERVA/TechInfo 2022. 2. 18. 09:56
반응형

제 기억이 분명히 유료였던것으로 기억하는데, 공짜로 풀렸네요.

꼭 설치해서 사용해보세요. 정말로 소리가 다른것을 느끼실수 있어요.

 

https://www.fxsound.com/

 

Boost Volume and Sound Quality on Your PC - FxSound

This new software boosts sound quality, volume, clarity and bass on your PC. FxSound will make your audio jump out of your speakers.

www.fxsound.com

# 절대강추 #무료

반응형
posted by choiwonwoo
:
블럭체인 2022. 1. 26. 16:48
반응형

# 초기에는 '코인(암호화폐) vs 토큰(Token)'는 구분이 나에게 힘들었습니다.

그래서, 해당 내용을 정리한 메모내용이 발견(?)되어 기록으로 남기고자 합니다.

[차이 설명]
1. 기술적으로 독자적인 블럭체인 메인넷(네트워크)을 가지고 있으면 "코인", 없으면 "토큰"

2. 독자적인 메인넷 코인은 채굴(mining)되어 생산되고, 토큰은 미리 발행되어 뿌려짐

3. 토큰 발행을 ICO라고 하는데, 이더리움 메인넷을 기반으로 하는 경우는 전세계 표준인 

      ERC-20(Ethereum Request for Comment)을 기반으로 함
     이 기준을 준수한다는 것은 DAPP(Decentralized Application, 탈중앙화 응용 프로그램)에서 사용할 수 있는

        토큰을  의미하게 됨

4. 블럭체인 메인넷 코인: BTC, ETH, EOS, TRX, QTUM, STEEM, NEM등

5. 메인넷의 존재는 자체적인 생태계(예:독자적인 사업성), 기술력 그리고 자본력을 의미함
그래서, 처음부터 코인으로 존재하기는 어렵고, 처음에는 토큰에서 코인으로 진화(?)함


6. 진화: 토큰에서 코인으로
1) 기존 메인넷을 기반으로 토큰 제작(DApp을 활용해 개발)과  ICO를 진행(White paper 발행)
2) 블럭체인 네트워크 개발, 그리고 테스트넷 진행(Coin으로 발전할수 있는지 테스트 하는 것)
3) 테스트넷이 성공하면, 메인넷을 출시: 독자적인 생태계와 독립적인 지갑을 생성이 가능
4) 메인넷성공하면, 토큰에서 코인으로 전환됨.

반응형
posted by choiwonwoo
: