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 설치 및 사용법

728x90

구조체를 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 } );

}

참고 : [C++11] Initializer list

728x90

보통 작업할 때는 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
}

출처 : UE4 Forums - Opening a Widget Blueprint from C++ Code

728x90

우리 팀 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
#

참고 : git rebase 로 commit 합치기

728x90

현재 팀 규칙은 feature 브랜치를 만들어서 작업하고 dev 라는 branch 에 merge request 를 하는 방식으로 작업하고 있다. 여러 브랜치에서 작업하다 보면 이름이 생각나지 않는 경우가 많다.

로컬에 있는 목록을 보고 싶은 경우

git branch -l <pattern>...

리모트에 있는 목록을 보고 싶은 경우

git branch -r -l <pattern>...

참고

* Git 브랜치

* git-branch help

728x90

윈도우즈 레지스트리 값을 읽어서 처리하고 싶은 경우가 있다. 이 때 사용하는 명령어가 '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

728x90

작업 중인 파일들을 커밋하지 않고 잠시 저장 후 다시 돌아와서 작업할 때 사용하는 명령어이다. 예를 들어 로컬에만 사용하는 수정된 설정 파일들을 임시로 저장할 때 많이 사용한다.

하던 일을 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

728x90

배치 스크립트에서 일정 시간 대기(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

출처 : http://blog.dasomoli.org/380/

728x90

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

728x90

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 확장자를 붙이면 사용 가능하다.

728x90

+ Recent posts