webapi 구현 작업을 하다보니 테스트를 curl 로 하는 경우가 많다. body 만 보고 디버깅할 때는 괜찮은데 가끔 http status code 까지 봐야하는 경우가 있다. 이 때는 -w "%{http_code}\n"옵션을 사용하면 된다.
curl -L -k -s -o /dev/null -w "%{http_code}\n" http://www.example.com/yy.html
참고 : curl 설치 및 사용법
webapi 구현 작업을 하다보니 테스트를 curl 로 하는 경우가 많다. body 만 보고 디버깅할 때는 괜찮은데 가끔 http status code 까지 봐야하는 경우가 있다. 이 때는 -w "%{http_code}\n"옵션을 사용하면 된다.
curl -L -k -s -o /dev/null -w "%{http_code}\n" http://www.example.com/yy.html
참고 : curl 설치 및 사용법
구조체를 return 하거나 function parameter 로 전달해야할 때 brace( {... } ) 를 이용한 리스트 형태 초기화를 많이 사용하고 있다.
struct Object
{
float first;
int second;
}Object returnSample()
{
return { 0.43f, 10 };
}void append(Object o) {}
void testCode(){Object oldO; oldO.first = 0.43f; oldO.second = 10;
Object newO = { 0.43f, 10 };Object a [] = { , , { 5.934f, 17} };
append( { 0.43f, 10 } );
}
보통 작업할 때는 TSubclassOf<UUserWidget> 멤버를 만들어서 BP 에서 위젯 경로를 지정하고 그걸 바탕으로 위젯을 생성했다. 테스트 코드라 BP 를 만들 생각이 없어서 코드에서 경로를 지정해서 위젯을 생성하는 방법을 검색했다.
/NewWidgetBlueprint 에 위젯이 있다면 '/Game/NewWidgetBlueprint.NewWidgetBlueprint_C' 형태로 경로를 써줘야 한다.
해당 경로에서 Class 로드는 FStringClassReference::TryLoadClass<T>() 를 사용한다. (현재는 FSoftClassPath 로 이름이 바뀌었다. )
위젯 생성은 CreateWidget<T>(...) 을 사용한다.
FStringClassReference MyWidgetClassRef(TEXT("/Game/NewWidgetBlueprint.NewWidgetBlueprint_C"));
if ( UClass* MyWidgetClass = MyWidgetClassRef.TryLoadClass<UUserWidget>() )
{
UUserWidget* MyWidget = CreateWidget<UUserWidget>(World / GameInstance / PlayerController, MyWidgetClass);
// Do stuff with MyWidget
}
우리 팀 git workflow 는 feature 나 hotfix branch 에서 작업 후 push 를 하고 main branch 에 merge request 를 하는 방식을 취하고 있다. work branch 에 여러번 나눠서 commit 된 내용들을 합쳐서 올릴 때 squash 를 사용한다.
최근 N 개의 commit 을 합침, 제거, 메시지 수정을 하고 싶을 때 rebase 를 사용하게 된다.
> git rebase -i HEAD~N
아래와 같은 내용이 출력된다.
pick 004644d first commit
pick ae53bdf second commit
# Rebase f42adb4..ae53bdf onto f42adb4 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
합치고 싶은 commit 을 squash (or s) 로 바꿔주고 저장하면 된다.
pick 004644d first commit
squash ae53bdf second commit
로그를 수정할 수 있는 화면이 출력된다.
# This is a combination of 2 commits.
# This is the 1st commit message:
first commit
# This is the commit message #2:
second commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Tue Mar 14 21:50:01 2017 +0900
#
# interactive rebase in progress; onto f42adb4
# Last commands done (2 commands done):
# pick 004644d first commit
# s ae53bdf second commit
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'f42adb4'.
#
# Changes to be committed:
# modified: test.txt
#
현재 팀 규칙은 feature 브랜치를 만들어서 작업하고 dev 라는 branch 에 merge request 를 하는 방식으로 작업하고 있다. 여러 브랜치에서 작업하다 보면 이름이 생각나지 않는 경우가 많다.
로컬에 있는 목록을 보고 싶은 경우
git branch -l <pattern>...
리모트에 있는 목록을 보고 싶은 경우
git branch -r -l <pattern>...
참고
* Git 브랜치
윈도우즈 레지스트리 값을 읽어서 처리하고 싶은 경우가 있다. 이 때 사용하는 명령어가 'reg query' 다.
REG QUERY KeyName [/v [ValueName] | /ve] [/s]
[/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator]
[/reg:32 | /reg:64]
KeyName [\\Machine\]FullKey
Machine - 원격 컴퓨터 이름. 생략하면 기본값이
현재 컴퓨터가 됩니다. 원격 컴퓨터에서는 HKLM과 HKU를
사용할 수 있습니다.
FullKey - ROOTKEY\SubKey 이름 형식
ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey - 선택한 ROOTKEY 아래에 있는
레지스트리 키의 전체 이름
/v 특정 레지스트리 키 값을 쿼리합니다.
생략되면 키의 모든 값을 쿼리합니다.
이 스위치로의 인수는 /f 스위치와 함께 지정되면
옵션일 수 있습니다. 이것은 값 이름만 찾기 위한 것입니다.
/ve 기본값 또는 비어 있는 값 이름(기본값)을 쿼리합니다.
/s 모든 하위 키와 값을 반복적으로 쿼리합니다(dir /s의 경우처럼)
/se REG_MULTI_SZ에 대한 데이터 문자열에서 구분 기호(1문자의 길이만)를
지정합니다. 기본값으로 "\0"을 구분 기호로 지정합니다.
/f 검색할 문자열을 지정합니다.
문자열에 빈 칸이 들어 있으면 큰 따옴표로 묶습니다. 기본값은 "*"입니다.
/k 키 이름만 검색합니다.
/d 검색할 데이터를 지정합니다.
/c 검색할 때 대/소문자를 구분합니다.
기본적으로, 검색할 때 대/소문자를 구분하지 않습니다.
/e 정확하게 일치하는 것만 반환합니다.
기본적으로, 일치하는 것 모두를 반환합니다.
/t 레지스트리 값 데이터 형식을 지정합니다.
유효한 형식:
REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ,
REG_DWORD, REG_QWORD, REG_BINARY, REG_NONE
기본값은 모든 유형입니다.
/z 세부 정보: 값 이름의 유형에 대응하는 숫자 값을 보여 줍니다.
/reg:32 32비트 레지스트리 보기를 사용하여 키에 액세스해야 함을 지정합니다.
/reg:64 64비트 레지스트리 보기를 사용하여 키에 액세스해야 함을 지정합니다.
레지스트리에서 읽은 값을 파싱해서 처리하려면 for 문을 사용하면 된다.
for /f "tokens=3" %%a in ('reg query "HKCU\Control Panel\Colors" /V Background ^|findstr /ri "REG_SZ"') do echo %%a
출처 : https://superuser.com/questions/995591/how-to-get-a-registry-value-and-set-into-a-variable-in-batch
작업 중인 파일들을 커밋하지 않고 잠시 저장 후 다시 돌아와서 작업할 때 사용하는 명령어이다. 예를 들어 로컬에만 사용하는 수정된 설정 파일들을 임시로 저장할 때 많이 사용한다.
하던 일을 Stash 하기
$ git stash
다른 작업 후 다시 돌아가기
$ git stash pop
참고 : https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning
배치 스크립트에서 일정 시간 대기(Sleep) 하고 싶을 때가 있는데 이 때는 ping 이나 timeout 을 이용하면 된다.
ping -n [sec] 127.0.0.1 > nul
TIMEOUT [/T] timeout [/NOBREAK]
설명:
이 유틸리티는 지정한 시간(초) 동안 또는 아무 키나 누를 때까지
기다리게 하는 timeout 매개 변수를 받습니다. 또한 키 누름을
무시하게 하는 매개 변수도 받습니다.매개 변수 목록:
/T timeout 기다릴 시간(초)을 지정합니다.
유효한 범위는 -1에서 99999초까지입니다./NOBREAK 키 누름을 무시하고 지정된 시간을 기다립니다.
/? 이 도움말 메시지를 표시합니다.
참고: -1 timeout 값을 지정하면 시간 제한 없이 아무 키나 누를 때까지 기다립니다.
예:
TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1
git 으로 회사 소스 버전 관리 시스템이 변경되었다. 아직 익숙하지 않아 이런 저런 문제가 겪고있다.
윈도우에서는 CR, LF 를 개행 문자로 사용하고 Unix 나 Mac OS 에서는 LF 만 사용한다. git for windows 설치할 때 개행문자 옵션을 잘못 설정했더니 실제 코드 변경과 관계없이 전체 라인이 변경된 것으로 인식되었다.
윈도우 사용자는 git for windows 설치할 때 개행문자(line ending) 설정을 'Checkout Windows-style, commit Unix-style'을 선택하자. 이는 git 설정 중 'core.autocrlf' 를 true 로 설정한다. CRLF 로 checkout 되서 작업하고 LF 로 커밋하는 방식이다.
만약 설치 후 이 문제를 알았다면 core.autocrlf 설정을 true로 변경하자.
git config --global core.autocrlf true
출처 : https://www.lesstif.com/pages/viewpage.action?pageId=20776404
aws 결과물을 필터링할 때 --query 옵션을 이용할 수 있다. 이 때 사용하는 문법이 JMESPATH 라는 문법이다.
json : {"a": {"b": {"c": {"d": "value"}}}}
query : a.b.c.d
result : "value"
Python, Javascript, Java 등 다양한 언어 library 가 지원된다.
홈페이지 : JMESPATH
aws cli 결과물을 json 형태로 저장해서 처리하려고 하는데 python 이나 powershell 을 쓰기 싫었다. 윈도우즈 명령줄에서 처리하려고 하니 cli 형태의 jp 라는 프로그램이 있었다.
$ echo '{"key": "value"}' | jp key
"value"
$ echo '{"foo": {"bar": ["a", "b", "c"]}}' | jp foo.bar[1]
"b"
$ echo '{"foo": {"bar": "baz"}}' > /tmp/input.json
$ jp -f /tmp/input.json foo.bar
"baz"
$ export JP_UNQUOTED=true
$ curl -s https://api.github.com/repos/golang/go/events | jp --unquoted [0].actor.url
https://api.github.com/users/robpike
다운로드 : https://github.com/jmespath/jp/releases
윈도우즈용은 다운로드 받아서 exe 확장자를 붙이면 사용 가능하다.