jiwon-hwang / all-about-programming Goto Github PK
View Code? Open in Web Editor NEWCuriosity Collection (Grammar, Configuration, CS..)
Curiosity Collection (Grammar, Configuration, CS..)
이 명령어를 실행하면 "수정을 시작할 커밋의 이전 커밋" ~ "현재 커밋(HEAD)" 범위에 있는 모든 커밋들의 리스트가 출력된다. 예를 들어 git rebase -i HEAD~3
를 실행하면 HEAD ~ 2, HEAD ~ 1, HEAD 커밋들이 출력된다.
pick
을 reword
로 바꾸기
reword
로 수정하고 esc
+ :wq
(write and quit)하고 나오면 이렇게 commit message 수정 창이 이어서 뜬다. 이 때 수정해주고 다시 :wq
remote 저장소와 local 저장소의 내용이 다르므로, 강제로 remote로 push해준다.
이렇게 하면 끝!
※주의※
수정할 시작할 커밋의 이전 커밋 ~ 현재 커밋(HEAD) 범위의 모든 커밋 리스트들을 다 출력한 것이므로, 강제로 push하게 되면 수정하지 않은 커밋 메세지들까지 싹 다 그대로 push 된다. (시간만 update될 뿐 영향은 x)
따라서 웬만하면 사용하지말자... 모든 커밋 기록들 싹 다 건드리므로 conflict날 확률 큼(remote와 local)
https://medium.com/@stargt/github%EC%97%90-100mb-%EC%9D%B4%EC%83%81%EC%9D%98-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%98%AC%EB%A6%AC%EB%8A%94-%EB%B0%A9%EB%B2%95-9d9e6e3b94ef
BFG Repo-Cleaner로 대용량 파일들 commit log들 삭제했음에도 불구하고 똑같은 exceed error 난다면?
=> .exe가 아니라, track 할 대용량 파일들의 확장자들을 모두 track해줘야 함!
c++에서는 이걸 쓰면 됨!
c_strI()
, length()
, copy()
, compare()
, begin()
, end()
, operator + 등 지원char *
문자열과 달리, 문자열 끝에 '\0' 과 같은 null이 들어가 있지 않음// 방법 1
string str1("Hello");
// 방법 2
string str1;
str1 = "Hello";
// 방법 3
string str2(str1);
C : 문자열을 배열에 저장하고, 마지막에 문자열의 끝이라는 신호로 널문자 삽입됨. 따라서 배열 사이즈가 실제 문자열 사이즈보다 1이 큼.
git config user.name
git config user.email
을 하면 기존의 계정 정보가 각각 출력된다.
있으면 새로운 내 계정으로 바꿔주고, 없다면 계속 진행한다.
git staus
, git log
등을 통해 이전 작업 기록들을 그대로 확인할 수 있다.
만약 비번 까먹어서 로그인 실패하면 위와 같이 실패 메세지와 계정 이름 재입력 칸이 뜨고,
이렇게 다시 입력하면 된다..
그럼 바로 성공! 끝!
2차원 배열을 동적 할당으로 열었을 경우엔 다음과 같이 "초기화" 및 "할당"!! 시켜주자!
// 메모리 할당
short** ppsImage = new short*[nHeight];
for (int row = 0; row < nHeight; row++){
ppsImage[row] = new short[nWidth]; // 각 행의 열 값들도 동적 할당 (메모리 열기)
memset(ppsImage[row], 0, sizeof(short)*nWidth); // 메모리 공간을 0으로 채우기
}
// 메모리 해제 sol1
for (int row = 0; row < nHeight; row++){
delete [] ppsImage[i];
}
// 메모리 해제 sol2
SAFE_DELETE_ARRAY(pusImage); // 1차원 배열일 때
SAFE_DELETE_VOLUME(ppsImage , nHeight); // 2차원 배열일 때 (배열명, 1차원 배열 수)
https://felixblog.tistory.com/72
https://grandstayner.tistory.com/entry/C-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%EB%8F%99%EC%A0%81%ED%95%A0%EB%8B%B9
local에 아무것도 없는 상태에서 원격 저장소의 데이터를 가져오는 것
local에 이미 있고 원격 저장소의 수정 상태를 반영하기 위해 가져오는 것.
- cf.
git clone {url}
==git init + git remote add origin {url} + git pull origin master
- 즉, git 프로젝트를 시작 + url을 원격 저장소로 지정 + 원격 저장소를 현재 로컬 master에 병합
cf. 생성자와 소멸자 모두 자동으로 호출되는 함수, 모두 return 값이 없고 void도 사용할 수 없다!
cf. 포인터를 사용하지 않는다면, for loop 등 한 블록이 끝나는 동시에 자동으로 소멸됨! (소멸자에 따로 정의 안해도)
ClassEx::ClassEx()
형태ClassEx::ClassEX(int a, int b)
: A(a), B(b) => 이런식으로 인자가 있는 생성자는 A, B 각각을 a, b로 초기화하는 역할을 함public
접근지정자로 지정해야 객체 생성 가능!ClassEx::~ClassEx()
형태class ClassEx{void 함수명() ...]
이런식으로 하지만, 안에 포함되는 멤버 함수들에 대한 정의는 클래스 선언 안이 아닌 밖에서도 가능void ClassEx::함수명()
python 개발 시, 다양한 패키지나 모듈들(ex. tensorflow, keras, numpy, python 등)을 설치하고 import하게 됨. python과 다양한 패키지들의 버전 충돌 문제를 방지하기 위해서, 각 프로젝트들 마다 가상 환경을 만들어서 각각 독립적인 버전을 이용 가능하다!
conda create -n tutorial python=3.5 numpy scipy matplotlib ...
: tutorial 이라는 이름의 개발 환경을, python 3.5 버전으로 만들고, 이 가상환경에서는 numpy, scipy, matplotlib 등의 파이썬 라이브러리들을 import 해서 사용할 수 있다.
activate tutorial
: tutorial이라는 이름의 가상 환경을 활성화.
conda deactivate
: 현재 개발 환경을 종료하고, 기본 환경(base)로 돌아가기
conda env list
: 생성되어있는 가상환경 리스트 확인
conda env remove -n tutorial
: 가상환경 제거하기. 자동으로 해당 가상환경 내의 전체 라이브러리들을 지워준다. (다른 가상환경에는 영향 x)
내부 링크
static
키워드를 반드시 사용해야 함외부 링크
extern
키워드로 변수를 선언해야 함// 전역 변수 사용 ex (외부 링크 시)
int g_value; // 본문 내 선언
extern int g_value; // 다른 파일에서 extern으로 선언 후 외부에서 사용
cf.
extern
의 의미 : 다른 파일에서 이미 이름이 같은 전역 변수가 선언되었다는 의미 (공유)
"멀티 플랫폼을 위한 빌드 지원 시스템"
- lib : 프로그램 실행 직전에 호출됨 (컴파일 시 호출, 링크)
- dll : 프로그램 실행될 때 호출됨 (컴파일 할 때가 아닌 실제 exe 실행될 때) => 해당 프로그램(exe)와 같은 경로상에 존재해야 함
cf. 빌드 : cpp 파일 -> obj(.o) 바이너리 파일로 변환(컴파일) -> 링크 -> 실행가능한 바이너리 파일(.exe)로 만드는 과정
gitignore에 다양한 경로에 포함된 모든 특정 캐시 파일들을 설정해주었으나 github에 그대로 남아있을 때,
여기에 정리해둔대로 하면 해결!
git rm -r --cached .
git clone --mirror
: 기존 원격 repo를 로컬로 복제해오기
: 기존원격레포명.git 폴더 생성
cd ~.git
: 복제된 git 폴더로 이동
git remote set-url --push origin [new remote repo url]
: 새로운 원격 repo의 url 주소 연결
git push --mirror
& git remote -v
: mirror 한 내용 로컬에서 원격으로 push 후 정상적으로 복사 되었는지 전, 후 주소 확인
cf. issue
, wiki
등은 git의 요소가 아니므로, mirror
시에 같이 옮겨지지 않으므로 수동으로 옮겨줘야 함!
https://yoshikixdrum.tistory.com/200
clone
받아와서 .git 폴더를 포함한 모든 파일들 삭제 후git init
& add
& commit
& push
https://www.devhak.com/blog/git-submodule
- local-main에는 remote-sub repo들에 반영된 내용들을 받아오도록 되어있고, local-sub과는 별개!
- 그리고 각 submodule들은 서로 수정사항들을 알 수 없는 독립적인 관계!
[ 순서 : submodule update 내용 remote push
-> local main update
-> remote main push
]
git submodule update --remote
: local-main에서 remote-sub 수정사항 updategit add
& git commit
& git push
: remote-main으로 수정사항 pushcf. 중간에
git config status.submodulesummary
후git status
해보면 수정 사항에 대한 commit message 확인 가능!
&
도 /
처럼 연산자!즉, 일반 배열과 동적할당한 배열의 자료형이 다르므로, 같은 배열이어도 &연산 결과는 다름!
int myarr[10]; // type : int []
int *newarr = new int[10]; // type : int *
arr
vs &arr
- arr : 배열의 첫번째 요소(arr[0])를 가리키고 있는 포인터
- &arr : 전체 배열 자체의 포인터
arr+1
과 &arr+1
의 값은 다르다!include 폴더
경로 (.h 헤더 파일들을 포함)lib 폴더
경로 (.lib 파일들 포함)위의 [ VC++ 디렉터리 ] > [ 포함 디렉터리 ] 와 같음 (.h 들어있는 폴더 경로)
.lib 파일들
리스트 (실제로 사용하는)환경변수에 dll이 들어있는 bin 폴더를 추가해줘야 visual studio에서 어느 경로에 실제 dll 파일이 있는지 인식 가능
빌드 : 코드 -> 컴파일(기계어(.o => binary)로 번역) -> 링킹 -> 실행파일(.exe) 만듦
- 즉, F5(디버깅) 실행 시 : 컴파일 + 빌드 + 실행
float
이나 double
형으로 표현되는 부동소수점 값이 컴퓨터가 허용하는 범위를 넘을 때 출력-nan(ind)
로 출력됨<math.h>
의 isnan()
함수를 통해서 NAN인지 아닌지 판별 가능! (NAN 자체로 판별 X)https://gmlwjd9405.github.io/2017/10/06/make-gitignore-file.html
너무 용량이 큰 파일이거나, 프로젝트 생성 시 1회만 필요한 설정 파일 등
remote repository에 올릴 필요 없는, 즉 Git 버전 관리에서 제외할 파일 목록을
.gitignore이라는 txt 파일에 추가해 commit, push하면 된다.
local에서는 삭제되지 않지만, remote (github)에서는 나타나지 않는다!
A 클래스가 a.h라는 헤더파일에 있고, B 클래스가 b.h라는 헤더파일에 있는데
A에서도 B를 사용하고, B에서도 A를 사용할 때..
서로 #include를 둘 다 해서 헤더 꼬임 현상이 발생하면 무한 루프에 빠지게 되는데, (컴파일 속도도 저하됨)
이 때 전방 선언 사용!
한 파일에서 #include "a.h"
대신,
class Player;
라고 선언!
가비지 : 포인터(p1)에 다른 포인터(p2)에 담긴 주소값을 옮겨 담아서 p1이 다른 곳을 가리키면, 원래 가리키던 메모리는 아무도 사용하지 않고 아무도 가리킬 수 없는 상태가 되는데, 이때 이 아무도 사용하지 않는 쓰레기 메모리가 가비지!
가비지 컬렉션 : 시스템 상에서 가비지 컬렉터가 이 가비지를 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것 (수동으로 직접 해제해주지 않아도 됨)
cf. 댕글링 포인터 : 이미 동적 할당된 메모리를 해제했는데 여전히 가리키고 있는 포인터. p1과 p2가 한 메모리를 동시에 가리키고 있다가 그 중 한 포인터에 의해 메모리를 해제한 경우!
short* psImage = NULL;
m_ciData.copyImage(9, psImage, nWidth, nHeight); // psImage -> m_ciData 가리킴
// Gaussian Filtering (smoothing)
Mat img(nWidth, nHeight, CV_16SC1, psImage); // convert Arr(short) to Mat(short)
Mat img_filtered;
GaussianBlur(img, img_filtered, Size(7, 7), 0); // 깊은 복사
psImage = (short*)img_filtered.data; // 얕은 복사 => "주소 변경!"
//SAFE_DELETE_ARRAY(psImage); // 안해줘도 됨! => "가비지 컬렉션"
cf. Mat은 내부적으로 메모리 동적 할당과 해제를 자동으로 해줌! (해당 블록 단위로)
short* psImage;
Mat psImage_mat(nWidth, nHeight, CV_16SC1, psImage);
short* psImage_arr = (short*)psImage_mat.data;
normalization
Mat img(row, col, CV_16SC1); // 16bit(short)
Mat img_8UC1 = img.clone();
// get min, max
double minVal;
double maxVal;
Point minLoc;
Point maxLoc;
minMaxLoc(img, &minVal, &maxVal, &minLoc, &maxLoc);
// normalization
img_8UC1 -= minVal;
img_8UC1.convertTo(img_8UC1, CV_8U, 255.0 / (maxVal - minVal)); // 8bit(uchar)
system("pause");
를 추가하여 종료 직전에 잠깐 멈춘다.#define
과 마찬가지로 모든 파일에 적용// IH.h
class IH
{
public:
enum FEATURE
{
MEAN, // 0
VARIANCE, // 1
...
}
}
// main.cpp
cout << IH::MEAN<< endl;
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.