반응형

git 서버가 내부망인 관계로 내가 공부하느라 만든 내용도 밖에서 쓸 수가 없어서 찾아 봄..

우선은 내부망에 접근이 가능한 상태에서 한번은 bare(서버 형태)로 받아야함 (1에서만 내부망 접속 필요)


1. 기존 소스 git을 서버 형태로 받는다.

 $ git clone --bare 내부망_저장소_주소

예) $ git clone --bare git@192.168.0.2:repo/Tistory.git


2. github나 Bitbucket 등에 새로운 git 저장소(B)를 하나 만든다.

 (B) 저장소에 (A)의 이력과 소스를 계속해서 보고싶어 시작한 일이니 

 내부망이 아닌 외부망 git 서버로 갈아타는 것


3. (A)에는 소스코드가 안보이지만 git log 명령은 먹는다.

 기존 사용하던 소스에서 반영이 안된 것은 없는지, 수정 중인 내용은 없는지 확인한다.


4. 최신으로 업데이트 및 반영이 확인되었다면 (A) 저장소 위치로 가서 다음 명령 실행

 $ git push --mirror 사용할_저장소_주소

 예) $ git push --mirror https://asgawa.bitbucket.org/tistroy


5. 새로운 저장소와 무슨 문제가 있다면 아무 파일이나 새로운 저장소 홈페이지에서 commit 했다가 지워보자

  새로운 저장소를 하나 더 clone 해보고 로그에 이력이 잘 남았는지 확인해보자.


6. 올리는 곳이 외국 서버라 좀 느린것 같았다. 본인은 push가 잘 되었다.

fatal: HttpRequestException encountered. 이런 오류가 보였지만 무시하고 그냥 진행하고 있다.

잘 되는데 찾아보기 귀찮아..


7. BitBucket에 접속해서 확인해보니 지난 이력을 모두 확인할 수 있었다.

이제 BitBucket의 프로젝트를 다시 clone해보니 잘 되었다.


8. 새로운 서버를 얻었으니 bare 형태인 폴더를 지우고 마무으리


마치며..


콘솔 명령어로 쓰긴 했으나 TortoiseGIT 에서도 bare 체크박스가 확인되니 문제 없을 것 같다.


github는 private 저장소를 쓰려면 업그레이드해야 한다. (유료) 기본적으로 public, 공개해야 한다.

https://github.com/


그래서 본인은 BitBucket에 만들었다. (여기도 근데 1개만 되는듯)

https://bitbucket.org


'Software > Git' 카테고리의 다른 글

Git 정리  (0) 2013.09.12
Git 작업 취소 관련 명령  (0) 2013.09.09
Posted by 독뽀
,
반응형


GPS 정보를 사용할 일이 있어서 찾아봄.

아래 정보는 외우기 편하려고 기록하는 것이므로 명칭 등 정확한 정보가 목적이라면

위키를 참조할 것.


지리좌표계: https://ko.wikipedia.org/wiki/...

위도(latitude): https://ko.wikipedia.org/wiki/...

경도(longitude): https://ko.wikipedia.org/wik/...


적도: 북극과 남극 사이. 북반구와 남반구를 나누는 기준. 지구에서 가장 긴 원둘레


위도: 적도를 기준으로 남/북으로 얼마나 떨어져있는지

독도의 경우 북위 37 이라 함은 적도에서 북쪽으로 37도만큼 떨어져있다는 뜻


경도: 그리니치 천문대(영국)를 기준으로 서/동으로 얼마나 떨어져있는지

독도의 경우 동경 132 이라 함은 그리니치 천문대로부터 동쪽으로 132도 떨어져있다는 뜻


위도와 경도는 소수점을 가진 값 하나로 표현하거나 도/분/초로 표현한다.

독도를 예로 들면


북위 37도 14분 29.403초 (37° 14' 29.403")

동경 131도 51분 44.0028초 (131° 51' 44.0028")


소수점을 가진 하나의 값으로 변환하는 것은 의외로 간단하다.

1. 도는 시간으로 계산

2. 시/분/초를 시간 단위로 통일하여 합산 (1분 = 1/60시간, 1초=1/3600시간)


위의 예에서 북위를 변환한다고 하면

N 37 (37은 시간이므로 그대로)

+ 0.2333333 (= 14/60)

+ 0.0081675 (= 29.403/3600)

= N 37.241500 (소수점 아래 6자리까지만 → 37.2415008 에서 마지막 자리 버림, N (북위)는 당연 그대로)


이를 간단히 엑셀에서 사용하게 만들어 봄. (첨부파일 참조)


깨알 상식


지구의 자전축이 기울어진 것은 알 것임.

지구가 엄청난 속도로 자전을 하다보니 (시속 1600~1700키로)

회전에 의해 강함 원심력을 받다보니 살짝 타원형이 됨.


아래 그림을 보면 북극(북위90도)과 남극(남위90도)이 보이고

가운데 큰 둘레가 바로 적도인데 (위도 0도) 지구 둘레를 잴 때 가장 김.

원심력이 가장 크게 작용하는 곳이다 보니 로켓 발사에 유리함.

원심력을 이용하면 지구 탈출에 필요한 로켓의 속도를 줄일 수 있음

하지만 원료를 줄이는 것은 적도에 위치한 국가가 많이 없다보니

발사대를 구축하거나 빌리는데 드는 돈이나 아낄 수 있는 연료비나 그게 그거인건 함정

(로켓 운송, 인건비 등등의 금액도 추가 발생)


earth spin에 대한 이미지 검색결과



이미지 출처: https://www.tes.com/lessons/hgaBw0cbvQOe5w/8-7a-rotation-revolution

'Software > Common sense' 카테고리의 다른 글

프로그래밍 격언  (0) 2010.12.30
Posted by 독뽀
,

5.10.1 static build error

QT 2018. 3. 23. 15:07
반응형

5.7.1 에서는 안그랬다.


5.10.1 소스 다운 받아서 압축 풀고 configure 해주고 빌드를 시작하니

아래와 같은 에러가 뜨면서 qmake.exe 가 죽었다는 에러 창이 떴다.


ASSERT: "isAbsolutePath(baseDir)" in file C:/Qt/5.10.1/qtbase/qmake/library/ioutils.cpp, line 106


구글링 결과 configure 후에 생기는 qtbase/bin/qt.conf 파일의 path 들이

내 시스템(windows)에 맞게 되지 않고 linux 기준으로 작성되어 생기는 문제였다.


참고로 내 qt.conf 파일 내용은 아래와 같다.


[EffectivePaths]

Prefix=..

[DevicePaths]

Prefix=/usr/local/Qt-5.10.1

[Paths]

Prefix=/usr/local/Qt-5.10.1

HostPrefix=/usr/local/Qt-5.10.1

Sysroot=

SysrootifyPrefix=false

TargetSpec=win32-g++

HostSpec=win32-g++


굵게 표기된 3군데 경로를 아래와 같이 내 경로로 수정하였다.


[EffectivePaths]

Prefix=..

[DevicePaths]

Prefix=C:/Qt/5.10.1

[Paths]

Prefix=C:/Qt/5.10.1

HostPrefix=C:/Qt/5.10.1

Sysroot=

SysrootifyPrefix=false

TargetSpec=win32-g++

HostSpec=win32-g++


저장하고 다시 빌드를 하니 잘 돌아간다.


참고: http://www.qtcentre.org/threads/69198-ASSERT-quot-isAbsolutePath(baseDir)-quot-error-when-trying-to-build

'QT' 카테고리의 다른 글

버전 정보 넣기  (0) 2016.09.26
undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
Posted by 독뽀
,

vim 기본 설정

Linux/General 2017. 11. 1. 16:24
반응형

내가 자주 쓰는거.. 타이핑이 귀찮으므로 여기 써둠

이름에서 뜻을 유추할 수 있으므로 설명은 생략

expandtab 은 아래 설정한 4칸의 탭 크기를 탭 대신 공백으로 삽입하게 해준다.


$ vi ~/.vimrc


set encoding=utf-8

set fileencodings=ucs-bom,utf-8,korea
set background=dark
set smartcase
set smartindent
set incsearch
set tabstop=4
set shiftwidth=4
set number!

set expandtab



'Linux > General' 카테고리의 다른 글

ssh / samba 설정하기  (0) 2014.11.10
디스크 추가 하기  (0) 2013.11.15
Posted by 독뽀
,

버전 정보 넣기

QT 2016. 9. 26. 17:00
반응형

<QT 4.8>


QCoreApplication 클래스에는 applicationVersion() 라는 static 메서드가 있습니다.

QString을 반환하는데요.. setApplicationVersion(QString) 을 해주지 않으면

빈 문자열을 반환합니다.


버전 정보를 직접 넣어줘야 한다는 이야기 인데요..

버전 정보를 *.h나 *.cpp에 넣으면 버전만 수정할 때 리비전이 보기 싫게 되는 경우가 생깁니다.


이럴 때를 위해서 코드에서 수정하기보다는..


*.pro 파일에서 DEFINES 키워드를 사용해서 추가하는 것을 권장합니다.

DEFINES 에 추가할 때는 그냥 따옴표를 붙여서는 안됩니다.

그냥 해보니 숫자로 인식하더군요..


ex) DEFINES += APP_VERSION="0.0.1"


위의 경우 아래와 같이 10진수에 소수점 표기가 너무 많다고 빌드 에러가 날겁니다.

-1: error: too many decimal points in number


이를 해결하기 위해서는 아래와 같이 하시면 됩니다.


ex) DEFINES += APP_VERSION=\\\"0.0.1\\\"


*.pro 파일에 대한 키워드 도움말을 보시면 VERSION 이라는 키워드가 있는데요,

이 키워드는 윈도우에서 파일 등록 정보를 볼 때 나타나는 버전 정보를 나타내는 문자열입니다.

결국 아래처럼 수정이 필요 했습니다.


ex) VERSION = 1.0.0 # 이 키워드는 1.0.0 을 그대로 인식하고 있습니다.

DEFINES += APP_VERSION=\\\"$$VERSION\\\" # \\\" 를 붙이지 않으면 역시 숫자로 인식


이후 main.cpp 의 main() 에 QCoreApplication::setApplicationVersion(APP_VERSION); 을 추가하면

QCoreApplication::applicationVersion() 으로 *.pro에 입력한 버전 정보를 가져올 수 있습니다.


VERSION 을 추가한 효과로 아래처럼 윈도우 등록 정보에서 버전 정보가 나타나게 됩니다.


덧붙여서 가능하면 qmake 클린 빌드를 해주세요.

*.pro 의 갱신이 제대로 안되는 경우가 발견이 되었습니다.


참고:

http://www.openguru.com/2009/11/qt-best-way-to-set-application-version.html



'QT' 카테고리의 다른 글

5.10.1 static build error  (2) 2018.03.23
undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
Posted by 독뽀
,
반응형

undefined reference to 'vtable for...'


이런 에러가 뜨는 경우 두 가지를 먼저 살펴보시면 문제 해결을 빨리 할 수도 있습니다.


1. virtual 키워드 사용한 곳 찾기

 - 구현을 강제하려고 순수 가상 함수로 만들어 놓은 인터페이스가 있다면,

 1.1. 해당 인터페이스를 구현 하였는지

 1.2 순수 가상 함수가 아니라 virtual 키워드만 추가한 것은 아닌지

   - 참고: 순수 가상함수 원형

     virtual void slotPendingProcess() = 0;

     virtual void slotPendingProcess() { } // 이렇게 해도 무방


2. QT에서는 목적 파일(*.o) 외에 QT에서 제공하는 특수한

moc_*.o/moc_*.cpp (Meta-object compiler) 파일이 생성됩니다.


자세한 내용은 http://doc.qt.io/qt-5/moc.html 이 곳과

https://kldp.org/node/123913 의 답변을 참고해주세요.


의심 되는 부분을 수정 하였음에도 (항목 1이나 그 외 문법상 이상이 없다고 판단)

에러가 나는 경우에는 위에서 언급한 moc_*.o/moc_*.cpp 파일을 의심해 봐야합니다.

위 파일은 컴파일 단계에서 갱신이 안되거나, (F5를 통해 실행하려고 할 때)

파일 이름이나 클래스 이름이 바뀌었는데 moc 가 갱신이 안되었거나 하기도 합니다.


이런 경우 Makefile 를 갱신해 주어야 하는데요,

qt에서는 Makefile을 직접 작성하지 않죠, qmake 를 한 번 해주고

클린 빌드를 통해서 이를 해결 할 수 있습니다.


'QT' 카테고리의 다른 글

5.10.1 static build error  (2) 2018.03.23
버전 정보 넣기  (0) 2016.09.26
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
Posted by 독뽀
,
반응형

안드로이드에서 파티션 정보를 보려고 하니 커널 메세지(dmesg)에서는 확인이 불가하였습니다.

mount 나 busybox df -h 로는 마운트 정보만 나오기 때문에 이 또한 무용지물이라 찾아보던 중..


/proc 폴더에는 여러 유용한 정보들이 숨어 있죠,

안드로이드에서는 /proc/partitions 에 파티션 정보가 있었습니다.


다만 한가지, 제가 쓰는 보드 특성인지 모르겠지만 시리얼 로그에서 보이는 파티션 정보에서는

partition count: 12 라고 떴지만 아래에 나오는 파티션은 총 14개가 나왔습니다.


계산을 해보니 첫 번째 필드는 전체 합으로 확인이 되었습니다. (딱 떨어지지는 않습니다. 159 KB 가 빔)

따라서 첫 번쨰 ndda 와 1블럭짜리 ndda4 를 빼면 총 12개라고 확인하면 될것 같습니다.

(제가 파티션을 나눌 때 1KB 짜리는 나눈 적이 없거든요)


참고로 아래 나온 blocks 는 KB 단위를 표시하는 것으로 확인이 됩니다.

파티션 나눌 때 ndda1~ndda12 까지는 제가 딱 저 값들을 입력 하였습니다.

(ndda13 은 나머지 공간이 자동으로 잡히게 됨)


# cat /proc/partitions

major minor  #blocks  name


 240        0    4037632 ndda

 240        1      15360 ndda1

 240        2     665600 ndda2

 240        3    1048576 ndda3

 240        4          1 ndda4

 240        5     153600 ndda5

 240        6      15360 ndda6

 240        7      20480 ndda7

 240        8      20480 ndda8

 240        9      20480 ndda9

 240       10      20480 ndda10

 240       11     524288 ndda11

 240       12    1048576 ndda12

 240       13     484192 ndda13

'Android' 카테고리의 다른 글

app 재실행 하기  (0) 2013.10.24
빨간 테두리 나오는 현상  (0) 2013.10.23
Ethernet 사용을 위한 Kernel 설정  (0) 2013.08.07
Android 빌드 시스템 (Make file 관련)  (0) 2013.08.05
System app 구분  (0) 2013.08.05
Posted by 독뽀
,
반응형

환경: QtCreator3.4.2 / mingw4.9.2 / Qt 4.8.6 static


반투명 배경을 가진 글자가 흐르는 자막 기능이 필요해서 구현 해 보았습니다.


간단히 쓰려는 글자의 크기를 알아내어 (QFontMetrics 참조)

그 크기에 맞게 QPixmap (mBuffer) 을 하나 생성해서


mBuffer = QPixmap(QFontMetrics(mFont).boundingRect(message).width() + 14, height()); // 14는 여백


QPainter를 이용해 글자를 쓰고,

QPainter painter(&mBuffer);

if (painter.isActive()) {

    painter.end();

}

painter.begin(&mBuffer);

painter.setFont(mFont);

painter.setRenderHint(QPainter::Antialiasing);


QRect bufferRect = mBuffer.rect();

painter.setPen(mTextColor);

painter.setBrush(Qt::NoBrush);


bufferRect.setY(bufferRect.y() + 20);

painter.drawText(bufferRect, Qt::AlignCenter, msg);

painter.end();

raise();

show();


startCaptionThread();  // 쓰레드 호출


QThread (혹은 QTimer) 등을 이용해서 그릴 위치인 QPoint 좌표의 x축만 이동 시킨 후 update() 를 호출하고,

const int textWidth = mBuffer.width();

if (-textWidth < mPos.x()) {

    mPos.setX(mPos.x() - 1);

    update();

} else {

    // 자막이 화면에서 완전히 사라진 상태, 자막 초기화

}


paintEvent 에서는 글자가 써진 QPixmap 을 그릴 위치인 QPoint 좌표대로 그리기만 합니다.

QPainter p(this);

if (p.isActive()) {

    p.end();

}

p.begin(this);

QRect r = mBuffer.rect();

r.setX(mPos.x());

p.drawPixmap(r.x(), r.y(), mBuffer);


p.end();


그런데 자막이 화면에서 사라지기 전에 자막을 다시 그리도록 재시작을 했더니

자막 배경에 이전에 보이던 글자들의 잔상이 남아있었습니다.


해결 방법은 간단했습니다.


QPixmap 에 글자를 쓰기 직전에 QPixmap 을 fill 메서드를 통해 투명으로 칠해 주었더니 해결되었습니다.

mBuffer.fill(Qt::transparent);


'QT' 카테고리의 다른 글

버전 정보 넣기  (0) 2016.09.26
undefined reference to 'vtable for...'  (0) 2016.05.19
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
QByteArray 의 reserve() vs resize()  (0) 2016.03.18
Posted by 독뽀
,
반응형

환경: QtCreator3.4.2 / mingw4.9.2 / Qt 4.8.6 static


QThread 를 사용하고 정적 빌드를 하려니 libwinpthread 에 대한 의존성이 생겼나보다.


구글링을 해보니


http://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw


요약) -static -lpthread 붙여라


이 답변을 확인하게 되었는데,

막상 위 옵션을 QtCreator의 빌드 옵션에서 컴파일러 옵션에 넣어봤는데 도무지 동작하지가 않았다.

위 링크가 또 다른 여러 곳에서 링크되어 있는 것으로 봐서는 아마도 맞는 답변이지 싶은데 말이다.


컴파일 로그를 살펴보니 다음과 같았다.


...

g++ -static-libgcc -static-libstdc++ -Wl,-s -Wl,-subsystem,windows -o release\sample.exe object_script.trainer.Release  -L"c:\Qt\4.8.6_static\lib" -lmingw32 -lqtmain -lQtXml -lQtGui -lQtNetwork -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32


어라..? 내가 추가 한 -static -lpthread가 보이지 않았다.


여러가지 찾아 보다 알아낸 결과는 아래와 같다.


*.pro 파일 내에 사용할 라이브러리를 추가 한다.

LIBS += -static -lwinpthread


나같은 경우 위와 같이 추가하고 빌드한 결과 컴파일 로그에 다음과 같이 추가된 것을 확인할 수 있었다.


g++ -static-libgcc -static-libstdc++ -Wl,-s -Wl,-subsystem,windows -o release\sample.exe object_script.trainer.Release -L"c:\Qt\4.8.6_static\lib" -lmingw32 -lqtmain -static -lwinpthread -lQtXml -lQtGui -lQtNetwork -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32


release 시에만 추가하고 싶다면

release {

LIBS += -static -lwinpthread

}

요렇게 해주면 release 시에만 정적으로 추가하게 된다.

'QT' 카테고리의 다른 글

undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
디버깅 매크로  (0) 2016.04.19
QByteArray 의 reserve() vs resize()  (0) 2016.03.18
QT static build with mingw32  (0) 2015.09.17
Posted by 독뽀
,

디버깅 매크로

QT 2016. 4. 19. 15:42
반응형

[파일 명][함수:라인] 내용


이런 형식이 필요하여 만들었음.


2018.12.27 수정, 이전 버전은 UTF8 지원이 불가함 (한글 출력 안됨)

수정 버전 사용할 것을 추천..


#ifndef DEFINE_MACRO_H

#define DEFINE_MACRO_H


#include <QDebug>


#define ENTIRE_DEBUG_ON     1

#define DEBUG_VERBOSE       1


#if ENTIRE_DEBUG_ON

#if DEBUG_VERBOSE

#define VERBOSE() qDebug("[%s][%s:%d]", __FILE__, __func__, __LINE__)

#endif

#define DEBUG(MESSAGE) qDebug("[%s][%s:%d] %s", __FILE__, __func__, __LINE__, (MESSAGE))

#define SDEBUG(...) { \

    QString arg; \

    arg.sprintf(__VA_ARGS__); \

    qDebug() << QString("[%1][%2:%3]").arg(__FILE__).arg(__func__).arg(__LINE__) << arg.toUtf8(); \

}

#else

#define VERBOSE() ;

#define DEBUG(MESSAGE) ;

#define SDEBUG(...) ;

#endif


#endif // DEFINE_MACRO_H


ex)

VERBOSE(); // 현재 위치 로그 출력

DEBUG("Something is wrong here"); // 현재 위치에 문자열과 함께 로그 출력

SDEBUG("Something is wrong with value [%d]", wrongValue); // 현채 위치에 printf 포맷 형태로 로그 출력


보면 알겠지만 ENTIRE_DEBUG_ON 을 0으로 바꾸면 모든 디버그 메시지 출력을 끈다.

DEBUG_VERBOSE 를 0으로 바꾸면 VERBOSE만 끈다. 이건 응용해서 디버그 레벨을 조절하면 될듯.



Posted by 독뽀
,