Perforce 쓸 때 최신 버전 문제가 있을 때 svn 의 update to revision 같은 게 필요하다. P4V 하는 법은 못 찾았고 명령줄에서 p4 sync 를 이용하면 된다.

> p4 sync ...@21 # changelist 21 번 서밋 이후 버전으로 업데이트

참고 : P4 sync

728x90

git push 과정에서 아래와 같은 오류가 발생했다.

$ git push origin

Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 203 bytes | 203.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent
remote: with what you pushed, and will require 'git reset --hard' to match
remote: the work tree to HEAD.
remote:
remote: You can set the 'receive.denyCurrentBranch' configuration variable
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into
remote: its current branch; however, this is not recommended unless you
remote: arranged to update its work tree to match what you pushed in some
remote: other way.
remote:
remote: To squelch this message and still keep the default behaviour, set
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ssh://hostAddress/volume1/git/test
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://hostAddress/volume1/git/test'


저장소를 bare 로 생성하지 않아서 발생한 문제였다.

$ git init --bare

* 참고

- what's the -practical- difference between a Bare and non-Bare repository?

728x90

git branch 명령시에 아래와 같은 오류 메시지가 뜨는 경우가 있다.

$ git branch dev

fatal : Not a valid object name: 'master'

한번도 commit 되지 않은 저장소에서 이와 같은 오류 메시지가 발생한다.

최소 1번 이상 commit 을 진행하면 이 문제가 수정된다. 나 같은 경우에는 .gitignore 나 .gitattributes 파일을 add 하고 commit 했다.

참고 : [Git] fatal: Not a valid object name: 'master'. 해결방법

728x90

윈도우즈 콘솔 속성 중에 빠른 편집 모드라는게 있다. 활성화 하면 콘솔창에서 마우스로 드래그가 가능해지며 엔터를 누르면 클립보드로 복사가 된다. 개인적으로는 좋아하는 설정인데 드래그 상태에서는 콘솔창이 멈추고 프로그램 실행도 멈추게 되는 문제가 있다. 그래서 서버 프로그램의 경우 비활성화가 필요할 수도 있다. 강제 비활성화를 위해서는 아래와 같이 설정하면 된다.

DWORD prevMode = 0;
HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(handle, &prevMode);
SetConsoleMode(handle, prevMode & ~ENABLE_QUICK_EDIT_MODE);


출처 : 윈도우 콘솔창 빠른 편집 비활성화 방법
참고 : SetConsoleMode

728x90

애플워치에서 잘못 측정된 운동 데이터를 삭제하고 싶으면 건강 앱에서 삭제할 수 있다.

건강 앱에서 운동을 선택한다. 아래쪽 옵션에서 모든 데이터 보기를 선택한다. 편집을 눌러 잘못 기록된 데이터를 왼쪽에 있는 '-' 버튼을 눌러 삭제하면 된다.

728x90

준비

* 제어판 > 사용자 > 고급 항목에서 사용자 홈 서비스 활성화

키 생성

ssh-keygen 을 이용해서 key 를 생성한다. key 경로와 암호를 입력하면 id 파일과 key 파일이 생성된다. 기본 경로는 ~/.ssh/id_rsa, ~/.ssh/id_rsa.pub 다.

cf. ssh-keygen 은 git for windows 에 포함된 git-bash 에서 실행하면 된다.

키 복사

ssh-copy-id 를 이용하자.
$ ssh-copy-id -i [id_rsa.pub 파일 경로] [username]@hostname -p [portNum]

cf. synology 의 SSH 는 Administrators 그룹에 속한 계정으로 로그인만 지원한다. ssh-copy-id 를 사용하려면 Administrators 권한이 필요하다.

홈파일 권한 설정

복사된 사용자 계정으로 로그인해서 복사된 키에 접근 권한을 추가하자.
$ chmod 755 /var/services/homes/[username]
$ chmod 700 /var/services/homes/[username]/.ssh
$ chmod 600 /var/services/homes/[username]/.ssh/authorized_keys

설정파일 수정

ssh 설정을 변경한다.
$ vi /etc/ssh/sshd_config

아래 내용을 변경한다.

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

ssh 서비스를 재시작하자. 

$ synoservicectl --restart sshd

재시작이 안되는 것 같으면 DSM 제어판 ssh 서비스 사용을 체크해제하고 다시 체크하면 된다.

테스트

git 명령어 사용시 id / password 확인이 없으면 설정이 제대로 되었다고 본다.

ex)
$ git pull origin


728x90

git push 과정에서 아래와 같은 오류가 발생했다.

$ git push origin

Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 205 bytes | 205.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
error: remote unpack failed: unable to create temporary object directory
To ssh://hostaddr/volume1/git/test
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'ssh://hostaddr/volume1/git/test'


저장소 용량이나 권한 문제인 것 같다. 저장소 디렉토리 소유자가 root(root) 라서 발생한 문제였다. chown 을 사용해서 사용자 id 로 접근 권한을 변경하였다.

$ chown -R [userid]:users test

* 참고

- Git, error: remote unpack failed: unable to create temporary object directory - By creating new Branch


728x90

준비

* 패키지 센터에서 Git Server 설치

* 제어판 > 터미널 및 SNMP 에서 SSH 서비스 활성화

사용자에게 Git 접근 권한 주기

* git 사용자를 추가한 후 (기존 계정을 사용할 예정이면 생략) Git Server 를 선택하여 사용자에게 접근 권한을 준다.

cf. 아래와 같이 사용자 목록이 보이지 않을 수 있다. administrator 그룹이더라도 안보이는 문제가 있었다. admin 계정으로 로그인하면 위와 같이 사용자 목록이 보인다.



Git 저장소 생성

* putty 같은 터미널을 이용해 ssh 로 synology 에 접속합니다.

> sudo -i         # ROOT 권한 획득

> cd /volume1  # volumeX 로 이동

> mkdir git       # 저장소로 사용할 디렉토리 생성. git/pp
> cd git
> mkdir pp

> cd pp
> git init --bare  # 저장소 초기화

> cd ..              # 디렉토리 권한 수정
> chown -R gitUser:users pp 


cf. ssh 를 사용하려면 해당 유저는 administrators 그룹에 속해 있어야 합니다.
cf. mkdir 로 만든 git 디렉토리는 하이퍼 백업 목록에서 보이지 않는다. 

clone 테스트

git clone ssh://[Git users]@[hostname]/[Git repository path]

ex) git clone ssh://[Git users]@[hostname]/volume1/git/pp


참고

- Synology - DiskStation Manager - Git Server

- 시놀로지 DSM 깃서버 쉽게 이용하기

728x90

언제부터인가 다운로드 폴더가 알파벳 그룹으로 보여서 짜증났는데 자주 보는 것도 아니라서 무시했다.

별 필요도 없어 보여서 검색해보니 오른쪽 마우스 '메뉴 > 분류 방법 > (없음)' 을 선택하면 된다.

출처 : https://sihloh4me.tistory.com/275

728x90

JSON type 중 number 형식이 있다. 스펙에는 제한이 없다고 한다. 

하지만 IEEE 754-2008 binary64( double precision ) number 로 구현되는 경우가 많다. 부동 소수점 오류나 int64 정수 크기의 문제가 있을 수 있어 int64 를 같이 저장공간으로 사용하기도 한다.

Unreal 도 FJsonValueNumber 를 보면 double 만 사용하고 있다. (4.23)

/** A Json Number Value. */
class JSON_API FJsonValueNumber : public FJsonValue
{

public:

FJsonValueNumber(double InNumber) : Value(InNumber) {Type = EJson::Number;}
virtual bool TryGetNumber(double& OutNumber) const override { OutNumber = Value; return true; }
virtual bool TryGetBool(bool& OutBool) const override { OutBool = (Value != 0.0); return true; }
virtual bool TryGetString(FString& OutString) const override { OutString = FString::SanitizeFloat(Value, 0); return true; }

protected:

double Value;

virtual FString GetType() const override {return TEXT("Number");}

};

부동소수점 오류가 생기는 상황을 피하기 위해서 FJsonValueNumberStrirng 이 추가되었다. (4.25)

/** A Json Number Value, stored internally as a string so as not to lose precision */

class JSON_API FJsonValueNumberString : public FJsonValue
{

public:

FJsonValueNumberString(const FString& InString) : Value(InString) { Type = EJson::Number; }


virtual bool TryGetString(FString& OutString) const override { OutString = Value; return true; }
virtual bool TryGetNumber(double& OutDouble) const override { return LexTryParseString(OutDouble, *Value); }
virtual bool TryGetNumber(float &OutDouble) const override { return LexTryParseString(OutDouble, *Value); }
virtual bool TryGetNumber(int8& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(int16& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(int32& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(int64& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(uint8& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(uint16& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(uint32& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetNumber(uint64& OutValue) const override { return LexTryParseString(OutValue, *Value); }
virtual bool TryGetBool(bool& OutBool) const override { OutBool = Value.ToBool(); return true; }

protected:

FString Value;

virtual FString GetType() const override { return TEXT("NumberString"); }

};

* 참고

Introduction JSON

JSON integers : limit on size

RFC 7159 : The JavaScript Object Notation (JSON) Data Interchange Format

728x90

+ Recent posts