그래픽카드에 HDMI 케이블로 모니터를 연결했을 때 화면은 흐릿하게 보이고 테두리는 잘려서 원래 모니터 크기보다 작게 화면이 출력되는 경우가 있다.


모니터 크기보다 화면이 작게 나오는 이런 경우를 언더스캔이라고 한다.

(반대로 모니터 크기보다 화면 출력이 커서 잘리는 경우를 오버스캔이라고 한다.)




그림으로 그리면 뭐 이정도? (파워포인트로 그림그리는 게 왜이렇게 재미있을까...)


이 글에서는 AMD 그래픽카드에 HDMI로 모니터 출력할 때 생기는 언더스캔을 해결하는 방법을 소개한다.




1. (기본사항) AMD 그래픽카드 드라이버를 설치한다.


http://support.amd.com/ko-kr/download


여기서 본인의 그래픽카드에 맞는 드라이버 및 AMD Catalyst Control Center 프로그램을 설치한다.




2. AMD Catalyst Control Center 프로그램을 실행한다.


바탕화면에서 오른쪽 클릭을 한 후 나오는 컨텍스트 메뉴에서 눌러서 실행해도 되고, 작업표시줄의 트레이에서 아이콘을 오른쪽 클릭을 해서 나오는 컨텍스트 메뉴에서 눌러서 실행해도 된다. 여튼 실행시키자.




3. HDMI니까, 디지털 패널이다.


왼쪽 메뉴에서 '내 디지털 평면 패널'을 선택해서 나오는 하위 메뉴 중에서 '크기 조정 옵션(디지털 평면 패널)'을 선택한다.


언더스캔 상태였다면 아마도 슬라이드바의 막대기가 20% 정도로 치우쳐있을 것이다.


막대기를 옮겨가면서 모니터 크기에 잘 맞고 화면이 흐릿하게 보이지 않도록 설정을 바꿔준다.


그리고 적용을 누른 후 닫으면 모니터 설정이 끝난다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

내가 궁금해서 찾아보는 대로 추가해나갈 예정 ㅇㅇ.. 우분투 위주로.


1. 설치된 리눅스 32비트/64비트 확인


http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_32%EB%B9%84%ED%8A%B8_64%EB%B9%84%ED%8A%B8_%ED%99%95%EC%9D%B8


> $ getconf LONG_BIT



2. 심볼릭 링크 생성

매번 응용프로그램이나 디렉토리 경로 찾아헤매기 귀찮을 때.


http://stackoverflow.com/questions/1951742/how-to-symlink-a-file-in-linux


> $ ln -s /path/to/file /path/to/symlink



3. 작업중인 프로세스 종료, 일시정지, 되돌리기

아예 종료하는 건 Ctrl + C

일시정지하는 건 Ctrl + Z


http://superuser.com/questions/268230/how-can-i-resume-a-stopped-job-in-linux

  • jobs : 현재 처리중인 일들을 출력
  • fg : 다음에 처리할 일을 다시 시작 (foreground)
  • fg %[숫자] : 숫자로 지정된 일을 다시 시작
  • bg : 다음에 처리할 일을 백그라운드로 (background)
  • bg %[숫자] : 숫자로 지정된 일을 백그라운드로



4. apt-get 명령어 설명


http://blog.outsider.ne.kr/346



5. make 문법

이건 뭐 리눅스 팁은 아닌 거 같긴 하지만.....


http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/minzkn_make



6. 리눅스 커널 버전 확인

(사실 putty로 로그인 할 때도 옆에 출력되는 것 같다.)


http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EC%BB%A4%EB%84%90_%EB%B2%84%EC%A0%84_%ED%99%95%EC%9D%B8



7. usb 연결 정보 확인


http://www.myservlab.com/206



8. 계정생성 useradd / adduser 비교


http://mintnlatte.tistory.com/257



9. grep 명령어

파일 내에서 특정 패턴/문자열을 찾아준다.


http://ra2kstar.tistory.com/100



10. 프로세서 정보 확인 & hyperthreading disabling

그냥 'cat /proc/cpuinfo' 써서 확인해도 되지만,


http://unix.stackexchange.com/questions/33450/checking-if-hyperthreading-is-enabled-or-not

위 링크에서 Nils가 쓴 댓글의 스크립트를 복사해서 실행하면 physical core, logical core 부분만 디코딩해서 hyperthreading 정보 뽑아낼 수 있다.


http://serverfault.com/questions/235825/disable-hyperthreading-from-within-linux-no-access-to-bios

http://www.absolutelytech.com/2011/08/01/how-to-disable-cpu-cores-in-linux/

여기 참조하면 core 죽이는 방법이 있다. physical core 하나마다 logical core 하나씩 죽이면 bios 설정 안건드리고도 hyperthreading 안쓸 수 있을 것.



11. su 권한 부여

사용자 추가 후에 su 권한 쓸 수 있게 추가.


http://thinkpro.tistory.com/16



12. 환경변수 확인

시스템에 등록되어있는 환경변수 목록/값 등을 확인하는 방법과 환경변수 값 지정하는 방법.


http://akaseon.tistory.com/50



13. top 명령어로 CPU 사용률 보기

http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EC%BD%94%EC%96%B4%EB%B3%84_CPU_%EC%82%AC%EC%9A%A9%EB%A5%A0_%ED%99%95%EC%9D%B8



14. find 명령어로 파일 검색

http://mwultong.blogspot.com/2006/10/find-linux-file-find-command.html



15. kill 명령어로 프로세스 죽이기

http://ngee.tistory.com/132



16. du 명령어로 디렉토리 용량 확인

https://www.linux.co.kr/home/lecture/index.php?cateNo=&secNo=&theNo=&leccode=224



WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

참조: http://stackoverflow.com/questions/2219756/how-to-move-some-changeset-to-a-new-branch-in-mercurial


질문자:


현재 상황은

A -> B -> C -> D # default branch

이렇게 되어있는데, 이것을

A # default branch
 \-> B -> C -> D # some_new_branch

이런 구조로 바꾸고 싶다.

그런데 아직 새 브랜치가 없는 상태에서 새 브랜치를 만들어서 기존 커밋 내용을 옮기고 싶다.



가장 많이 추천을 받은 답변의 내용은 브랜치를 바꿀 B, C, D 커밋을 패치로 내보낸 다음에 새 브랜치를 만들어서 새 브랜치에서 패치를 가져오고 기존 브랜치에서는 B, C, D 커밋을 삭제하는 것.


1.

해당 디렉토리의 커맨드 창을 연다.


1-1. 이미 버전관리를 쓰는 사람이라면 개발자일테니 기본 터미널 열어서 디렉토리 이동하는 법은 설명하지 않는다.

1-2. TortoiseHg를 주로 이용하는 개발자라면 프로젝트 이름에서 오른쪽 클릭해서 Terminal 선택하면 손쉽게 선택 가능하다.


2. 

옮길 리비전을 patch로 내보낸다.

hg export -o patch B C D

(B C D에 들어갈 값은 리비전 번호를 쓰면 된다)


3.

브랜치가 갈라지는 곳으로 돌아간다.

hg update A


4.

새 브랜치를 생성한다.

hg branch branchname


5.

패치로 내보낸 리비전 내용을 새 브랜치로 가져온다.

hg import patch


+

새 브랜치로 옮긴 커밋 리비전들이 기존 브랜치에 남아있는 게 보기 싫다면 MQ를 이용해서 커밋 내용을 삭제하면 된다.


2015/02/17 - TortoiseHg 상에서 잘못된 커밋 삭제하기 이 게시물 참조


++ 원래 브랜치로 돌아오고 싶다면 다시

hg update A



그림으로 표현하면 대략 이런 과정이 되지 않을까 한다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

참조한 곳: http://stackoverflow.com/questions/5084915/how-do-you-delete-a-commit-in-mercurial


1. TortoiseHg 프로그램에서 메뉴 > File > Settings > Extensions 을 선택한다.


2. Extensions에서 mq 항목에 체크를 하고 TortoiseHg GUI를 다시 시작한다. (사실 체크하고 OK 누르면 알아서 재시작한다)


3. 지우고 싶은 commit 버전 위에서 오른쪽 클릭을 해서 ModifyHistory > Strip 선택하면 된다.


+ 아마 변경내용 버리기 위해서 discard 옵션을 선택해야 할 수도.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

작년쯤부터 크롬에서 글자 간격이 이상하게 나오는데 아직도 해결이 제대로 안됐나보다.

연구실 컴퓨터와 노트북 사이에서 왔다갔다하거나 포맷할 때마다 다시 검색하기 귀찮으니 여기에도 적어두기로.


1. 

chrome://flags/

이곳에 접속하면 크롬에서 개발중인 실험실 기능을 켜고 끄는 플래그를 설정할 수 있다.


2.

DirectWrite 기능을 '사용'에서 '사용 중지'로 변경한다.



눌러서...



바꾼다.


3.

기능 적용을 위해 크롬을 다시 시작한다.

왼쪽 아래에서 '지금 다시 시작' 버튼을 찾아 누르면 자동으로 크롬을 다시 시작한다.




WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

- 윈도우에서 Xmimg로 우분투 GUI 접근 :

http://2ry53.tistory.com/entry/Xming-%EC%82%AC%EC%9A%A9%EB%B2%95


- 우분투에서 이클립스 설치 :

http://thinkubuntu.tistory.com/6


ㅇㅇ


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,
스트링이나 뭐 이런저런거 콘솔로 찍어보는 것보다 파일로 출력해야 할 때.

여기서 가져왔다.


BufferedWriter writer = null;
try
{
    writer = new BufferedWriter( new FileWriter( yourfilename));
    writer.write( yourstring);

}
catch ( IOException e)
{
}
finally
{
    try
    {
        if ( writer != null)
        writer.close( );
    }
    catch ( IOException e)
    {
    }
}


'엥그니어링 > 도움글' 카테고리의 다른 글

크롬 글자 간격 문제 해결  (0) 2015.02.16
우분투 서버에 이클립스 설치  (0) 2015.02.16
Java 시간 측정  (0) 2014.09.02
자주 쓰는 프로그램 바로가기 키 설정  (0) 2014.08.24
Day One 타임라인 관리  (0) 2014.07.22

WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

// start time

long start_time = System.currentTimeMillis();


// main program source code


// end time

long end_time = System.currentTimeMillis();


// compute elapsed time and send to console

System.out.println("경과 시간: " + (end_time - start_time) + " ms");



1. 함수 이름에서 알 수 있듯이 millisecond 단위로 측정하는 것이기 때문에 초 단위로 보고싶다면 다음과 같은 방법으로 계산한다.


System.out.println("경과 시간: " + (end_time - start_time)/1000.0 );



2. 원래부터 있었는지, 언젠가부터 추가된 건지는 모르겠지만 nano단위로도 측정이 가능하니까 좀 더 자세히 측정하고 싶다면 써보자.


long start_time = System.nanoTime();

long end_time = System.nanoTime();



3. nanosecond 단위로 측정했을 때도 적당히 나눗셈을 잘 해주면 보고싶은 단위로 출력이 가능하니까 잘 활용하자.


// micro

long start_time = System.nanoTime();

long end_time = System.nanoTime();

System.out.println("경과 시간: " + (end_time - start_time)/1000.0 );

// milli

long start_time = System.nanoTime();

long end_time = System.nanoTime();

System.out.println("경과 시간: " + (end_time - start_time)/1000000.0 );


...


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

연구실에서 쓰는 컴퓨터에서는 주로 마크다운패드2로 이런저런 문서작업을 하고 있는데, 혹여나 포맷하더라도 스타일시트는 보존해두고자.



pigeon.css


pigeon_bigletter.css


pigeon.css는 미리보기 화면이나, html 화면으로 볼 때 적합.




pigeon_bigletter.css는 말그대로 색깔 같은건 그대로, 글씨만 키운 거라 pdf 파일에서 글씨크기 너무 작을 때 쓰기 적합.





WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

사소한 기능이지만 알면 유용한 기능.

자주 쓰는 프로그램의 경우 키보드 바로 가기 키를 설정해 놓으면 일일이 마우스 클릭질을 하지 않고도 실행할 수 있다.


바로가기키를 설정하고 싶은 프로그램의 아이콘에 오른쪽 클릭을 해서 속성 창을 연다.

(윈도 7의 경우 작업표시줄에 고정해놓은 아이콘에 오른쪽 클릭했을 때는 나오지 않는다. 윈도 메뉴에서 프로그램을 검색해서 찾도록 한다.)



속성 창에서 바로 가기 키 라고 써진 곳의 입력창에 한번 클릭한 후 원하는 키를 눌러주면 된다.

초기에는 바로가기 키가 설정되어있지 않으므로 '없음'이라고 써있지만 저렇게 키를 설정해주고 적용을 누르면 해당 키를 눌렀을 때 프로그램이 실행되는 것을 확인할 수 있다.


그런데 몇번 쓰다보니 불러오는 속도가 좀 느리긴 하다. 평소에 돌리는 프로그램이 많아서 알트탭으로 찾기 힘들거나 한 경우에는 유용하게 쓰일 수 있을 것 같다.

'엥그니어링 > 도움글' 카테고리의 다른 글

Java: String to File write  (0) 2015.01.06
Java 시간 측정  (0) 2014.09.02
Day One 타임라인 관리  (0) 2014.07.22
구글 데이터 백업하기  (0) 2014.07.15
Inline Caching (인라인 캐싱)  (0) 2014.07.01

WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

나는 일기나 각종 기록용 저널 어플로서 Day One 어플을 유용하게 사용하고 있고, 지난번에 리뷰도 한 번 올린 적이 있다. (iOS 전용 어플, 정가 $4.99)


2013/12/24 - 어플 소개: Day One

여기서는 마크다운 기능 위주로 어플을 소개했었다. 이번에는 일반적인 기능 위주로, 특히 타임라인과 관련된 리뷰를 해보고자 한다.

스크린샷은 아이폰 위주로 올렸지만 아이패드 버전에서도 화면 크기에 따른 배치만 다르지 기능상의 차이는 없다. (OS X에서는 확인하지 못했다.... ㅜㅜ 맥북도 없을 뿐더러 OS X에서는 결제를 또 따로 해야한다)


아이폰에서 데이원 어플을 실행하면 나오는 목록이다. 타임라인을 살펴볼 거니까 당연하게도 타임라인 메뉴를 선택한다.


그동안 썼던 저널들이 시간순서대로 정렬되어 나온다.

오른쪽 위의 + 버튼을 누르면 새로운 저널을 쓸 수 있고, 이미 쓴 저널을 관리하고 싶을 때는 각 엔트리를 좌우로 밀어넘기면 메뉴가 나타난다.


왼쪽에서부터 순서대로, 별모양 아이콘은 그 저널을 중요한 기록으로 표시하는 것이다. 활성화하고나면 다시 좌우로 쓸어넘겨서 날짜가 보이게 했을 때 날짜가 노란색으로 보인다.


두번째 꼬리표모양 아이콘은 태그를 다는 것이다. 태그만 잘 달아줘도 관리하기가 한결 편해진다. 만약 여행기록을 남겼을 때 다녀온 지명을 태그에 적어둔다면 나중에 그 여행지의 추억을 되새기고 싶을 때 손아프게 목록을 아래로 내릴 필요 없이 태그 검색만으로 쉽게 접근이 가능하겠지. 

PDF 내보내기를 할 때도 특정 기간 설정이 가능하고 특정 태그가 달린 저널만 내보내는 것도 가능하기 때문에 특별한 의미가 있는 저널이라면 태그를 잘 써보자.


세번째 메모장모양 아이콘은 수정.


네번째 휴지통모양 아이콘은 삭제하는 것이다. 이 때 주의할 점이, 아이클라우드에 백업하는 옵션을 켜두었다면 지우고나서 실제로 타임라인과 아이클라우드, 다른 기기에서의 타임라인에 반영되는 것에 시간이 걸릴 수 있다.


다섯번째 아이콘은 그 저널을 업로드 하기 위한 것이다. 저널 내용을 pdf 파일로 변환시켜서 이메일에 첨부해서 보낼 수도 있고, 드랍박스 같은 곳에 저장을 할 수도 있다.


저널 내용을 수정하는 것에 대해 첨언하자면, 이게 보니까 저널 내용이 길어지면 길어질수록 반응속도가 점점 느려지더라. 블루투스 키보드 먹이고 다다다 적다보면 내용이 길어져서 점차 반응속도가 느려지는 것이 짜증난다면 기본 메모어플에다가 작성한 후 복사해서 옮기는 것도 한 방법이다.

어플 하나 안에서 해결이 안되고 왔다갔다 하는 게 참 맘에 안드는 구석이긴 하지만, 마크다운 기능을 활용할 줄 안다면 기본 메모어플보다야 시각적으로 낫고 다양한 기능을 제공하는 데이원 어플을 포기할 수가 없다.


그래도 데이원 어플을 더이상 쓰기 싫다거나(...) 아이클라우드에 백업된 내용을 삭제하고 싶을 때는 이렇게 하면 된다.


설정에 들어가서 iCloud 메뉴 선택.


저장 공간 및 백업 선택.


저장 공간 관리 선택.


Day One 어플 선택.


각 저널들이 파일명은 암호화된 채로 업로드되어있다. 확인은 아직 안해봤는데 아마도 시간 순으로 정렬되어 있겠지. '편집' 버튼을 눌러서 지우고 싶은 저널을 삭제하면 된다.


* 주의. 아이클라우드에 백업된 내용을 지우면 각 기기에서도 동기화되면서 사라진다.


아예 아이클라우드 기능을 쓰고싶지 않다면 어플 내의 설정에서 Sync -> iCloud 옵션을 해제하면 된다.

'엥그니어링 > 도움글' 카테고리의 다른 글

Java 시간 측정  (0) 2014.09.02
자주 쓰는 프로그램 바로가기 키 설정  (0) 2014.08.24
구글 데이터 백업하기  (0) 2014.07.15
Inline Caching (인라인 캐싱)  (0) 2014.07.01
합주시간표 설치하기  (2) 2014.06.02

WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

요즘은 개인용이든 업무용이든 구글의 서비스를 이용하는 일이 많다. 안드로이드 폰은 구글 계정이 없으면 사용하기가 불가능에 가깝고, 지메일이나 구글드라이브는 한번쯤 써본 사람이 많을 것이다.


별도의 요금을 지불하지 않으면 구글이 제공하는 기본 스토리지 용량은 15G다. 이것을 지메일, 구글드라이브, 구글포토가 나눠서 사용하게 된다.


용량이 부족해서 비워야 하거나, 안 쓰는 계정을 정리하거나, 다른 계정으로 데이터를 옮겨야 할 때 데이터 백업이 필요하다. (예전에는 안됐던 것 같은데) 아주 간단한 방법으로 이 데이터들을 백업할 수 있다.

데이터 내려받기 기능을 사용하면 지메일이나 구글드라이브 외에도 캘린더, 북마크, 블로거 등 구글이 제공하는 다양한 서비스들의 데이터를 입맛대로 받을 수 있다.


일단 구글에 접속하여 데이터를 백업할 계정으로 로그인한다.

(크롬 브라우저를 쓰는 경우 홈 화면에서도 볼 수 있다.)


로그인하면 오른쪽 상단에서 구글계정 프로필 사진을 눌러서 '계정' 메뉴를 클릭해서 계정 설정 페이지로 들어간다.


나오는 관리 화면에서 '데이터 도구' 메뉴를 클릭한다.


오른쪽에서 '다운로드할 데이터 선택' 메뉴를 클릭한다.


간단한 안내화면이니까 그냥 '보관 파일 만들기' 버튼을 누르자.


구글이 제공하는 서비스 목록이 나온다. 원하는 서비스를 선택하자. 나는 별다른 건 사용하지 않으니까 다 선택 해제한 후에 메일만 선택했다. 

각 서비스마다 오른쪽의 'Edit'을 선택하면, 전체 내용을 다 백업할 것인지 서비스 내에서도 특정 부분(지메일이라면 라벨별로 선택한다든가)만을 따로 백업하게 설정할 수도 있다. 보관파일 설정도 기본은 .zip 형식인데 리눅스라면 .tgz 형식으로 바꿀 수도 있다.

설정을 다 완료했으면 '보관 파일 만들기' 버튼을 클릭한다.


그러면 선택한 서비스에 대해서 보관 파일을 열심히 만든다.


보관파일 세부정보 표시를 누르면 어떤 서비스를 백업하고 있는지도 보여준다.


열심히 보관파일을 만들 때까지 기다리자.... 나는 지메일 사용용량이 총 1.3G 정도였는데 약 한시간 정도 걸렸던 것 같으니 참고하시길.


화면에도 써있듯이 준비가 다 되면 사용중인 지메일로 준비가 다 되었다고 알림 메일이 온다.



메일에서 '사용 가능한 보관 파일 보기' 버튼을 눌러도 되고, 아까 보관파일 만들던 화면을 닫지 않았다면 거기에도 그대로 뜰 것이다.



따라가서 나타난 페이지에서 보관 파일을 다운받으면 된다. 끗.


보관파일은 압축된 형태로 제공되기 때문에 다운받은 후에 압축을 해제해서 내용물을 볼 수 있다. 생성된 보관 파일은 일주일간 다운로드 가능하며 총 5회까지 다운로드 되는 것 같다. 다섯번을 다 받았거나 일주일 기한이 지나고나면 다시 한시간을 기다려서 보관 파일을 생성해야 하는듯.


* 지메일을 백업했다면 아마 압축을 풀었을 때 .mbox 형식으로 된 백업파일이 있을 것이다. .mbox 확장자는 아웃룩 등의 프로그램에서 사용할 수 있다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

합주 시간을 잡을 때, 정기적으로 시간 잡고 하는 팀도 있겠지만 공연을 앞두고 한두번 시간을 잡고서 바짝 연습하는 경우도 종종 생길 것이다.

그래서 정기적인 시간과 임시 시간을 구분하기 위해서 합주시간표 코드를 수정하였다.


사실 수정해서 쓴지는 오래됐지만 실제 우리 동아리에서 한번 사용을 계속 해보고 혹시나 버그 있나 살펴볼 시간이 필요해서 이제야 업로드 하게 됐다.


이전에 올린 글: 

2014/05/31 - 밴드동아리를 위한 합주시간표

2014/06/02 - 합주시간표 설치하기




이 스크린샷에서 하늘색으로 표시되는 셀은 기존 합주시간표에서 지원하던 정기팀이고, 분홍색으로 표시되는 셀이 임시팀. 뭐 사용 용도에 따라 다른 목적으로 쓸 수 있겠지.



1. 기존 합주시간표에서 업데이트


index.php, make.php, make_ok.php, modify_ok.php, remove_ok.php, search.php 파일이 수정되었다.

편하게 다 덮어씌워도 되고 수정된 파일만 업로드해서 덮어씌워도 된다.


initialize_temp.php를 업로드 후 한 번 실행한다. 기존 테이블들 중 팀 정보를 저장하는 테이블을 임시팀 여부를 저장할 수 있게 확장하고, 임시팀만 저장하는 타임테이블을 새로 만든다.


유의사항: 임시팀은 생성 이후에 수정이 안되고 삭제만 된다. 임시팀 주제에 수정해서 버그 만들지 말라고....

clear_temp.php는 임시팀을 한꺼번에 싹쓸이할 때 쓰는 파일이다. 일주일에 한번씩 써서 청소하는 데 쓰던가 하면 된다.



2. 신규 설치


전부다 업로드한 후에 initialize.php와 initialize_temp.php를 각각 한번씩 접속해서 실행해준다. 화면에 아무 것도 안뜨고 흰 화면만 나오는 게 정상이다. 아무 에러도 안떴다는 거니까.



우리 동아리에서 필수적으로 필요한 기능은 다 구현을 해놓은거라 당분간 업데이트가 따로 있을까 싶긴 하다.. 뭐 언젠가 또 업데이트하면 열심히 테스트 해보고 다시 돌아와봄.


미리보기: http://chaz.hol.es/timetable/index.php


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

원본 출처: http://en.wikipedia.org/wiki/Inline_caching

메세지, 메세지 셀렉터, 리시버 부분에서는 나도 무슨 말인지 잘 모르겠지만 대략의 개념만 파악했다. 어쨌든 함수 호출하는 부분에다가 함수 위치를 알 수 있게 저장해서 룩업 생략하겠다는 거 아닌가?

잘못 옮긴 부분 있다면 지적 부탁드립니다.

Inline caching

최적화 테크닉의 한 종류로, 랭귀지 실행시간에 사용이 되며 Smalltalk을 위해서 처음으로 개발되었다. 인라인 캐싱의 목표는 호출 지점1에서 직접적으로 이전의 메소드 검색의 결과를 기억해서 런타임 메소드 바인딩의 성능을 높이는 것이다. 인라인 캐싱은 대부분의 메소드 바인딩이 런타임에 일어나고 가상 메소드 테이블을 사용할 수 없는 동적 언어에서 특히 유용하다.

Runtime method binding

동적언어에서는 오브젝트의 타입이 명시되지 않고 메소드 오버로딩의 가능성이 존재하기 때문에, 메소드를 호출할 때 구체적으로 어떤 구현 함수가 적용될지 미리 결정할 수 없다. 캐싱을 사용하지 않는 런타임에, 이러한 검색은 하나의 메소드가 불릴 때마다 매번 실행된다. 메소드들이 상속 체인을 따라내려가서 여러 단계로 정의될 수도 있기 때문에, 동적 검색은 시간이 많이 소모될 수 있다.


퍼포먼스를 향상시키기 위해, 많은 언어들은 연관 데이터 구조 안에 제한된 숫자의 메소드 검색 결과를 저장해놓은 모종의 non-inline 캐싱을 사용한다. 이것은 실행되는 프로그램들이 "cache friendly" 할 때(제한된 숫자의 메소드가 자주 불릴 때) 성능을 크게 향상시킬 수 있다. 이러한 데이터 구조는 일반적으로 first-level method lookup cache라고 불린다.

Inline caching

인라인 캐싱의 개념은 특정 호출지점에서 발생하는 오브젝트들은 주로 같은 타입이라는 경험적 관찰에 기반한다. 그런 경우에 메소드 검색의 결과를 "inline"으로, 즉 호출 지점에 직접 저장해놓으면 성능이 크게 증가할 수 있다. 이 과정을 가능하게 하려고, 호출 지점들에 서로 다른 상태를 부여한다. 처음에는 각 호출지점은 "uninitialized" 상태이다. 일단 런타임이 특정한 uninitialized 호출 지점에 도달하면, 동적 검색을 수행하고, 호출 지점에 결과를 저장하고 호출 지점의 상태를 "monomorphic"(단형성)으로 바꾼다. 언어 런타임이 똑같은 호출 지점에 다시 도달한다면, callee를 (inline cache로부터) 다시 가져와서 더이상의 검색을 수행하지 않고 곧바로 불러온다. 같은 호출 지점에서 서로 다른 타입의 오브젝트가 존재할 수도 있기 때문에, 언어 런타임은 코드 안에 gaurd condition도 삽입을 해야만 한다. 흔히 garud condition들을 호출 지점보다는 callee의 프리앰블에 삽입한다. 브랜치 프리딕션을 더 잘 이용할 수 있고, 프리앰블에 하나의 카피만 있는 것이 각 호출 지점마다 여러 카피가 있는 것에 비해 공간을 절약할 수 있기 때문이다. "monomorphic" 상태에 있는 호출 지점이 예상치 못했던 다른 타입을 만나게되면 호출 지점은 "uninitialized" 상태로 돌아가서 완전한 동적 검색을 다시 수행해야 한다.


고전적인 구현방법은 레지스터에 상수를 불러온 뒤에 콜 명령어가 오는 것이다. "uninitialized" 상태는 "unlinked"로 불리는 것이 낫다. 레지스터에 message selector(주로 어떤 오브젝트의 주소)를 채우고, (함수의) 호출은 위에서 말한 first-level method lookup cache를 사용해서 현재 리시버의 클래스(분류?) 안에 있는 메세지를 탐색하는 런타임 루틴이 된다. 그렇게 되면 런타임 루틴은 로드 명령어를 레지스터에 현재 리시버의 타입을 채우는 것으로 바꾸고, call 명령어를 바꿔서 타겟 메소드의 프리앰블을 부르도록 바꿔서 명령어를 다시 쓴다. 그러면 호출 지점과 타겟 메소드를 "연결(linking)"하는 것이다. (함수의) 실행은 이제 프리앰블을 곧장 따라가면서 이어진다. 다음 번의 실행에서는 (linking 없이) 프리앰블을 직접적으로 호출할 수 있을 것이다. 그러면 프리앰블은 현재 리시버의 타입을 가져와서 레지스터 안에 있는 값과 비교할 것이다. 만약 맞아떨어진다면 리시버는 같은 타입이므로 메소드를 계속해서 실행한다. 다르다면 프리앰블은 다양한 전략들을 시도해볼 수 있다. 호출 지점과 새로운 리시버 타입을 재연결하는 것이 한 방법이 될 수 있다.


성능의 이득은 최소 한번의 타입 비교와 셀렉터 비교를 하는 first-level method lookup cache에 비해 한번의 타입 비교만 하는 것과, method-lookup이나 vtable 방식을 썼을 때의 간접 호출에 대비되는 직접 호출(명령어 prefetch와 pipelining으로 이득을 얻을 수 있다)을 통해서 얻게 된다.



요약

  • 어떤 함수를 호출할 때 같은 call site에서는 계속해서 같은 함수를 불러올 가능성이 높다는 관찰에 기반한다.
  • 최초로 call site에 도달했을 때는 어떤 함수를 불러와야 할 지 알 수 없으므로 완전한 메소드 검색을 해야만 한다.
  • 불러올 함수가 결정이 되었으면 다음번에 call site에 도달했을 때는 방금 전에 찾아온 메소드를 바로 찾아갈 수 있도록 call site에 찾아갈 대상이 되는 위치를 기록해둠.
  • 함수 오버로딩 같은 경우가 있을 수 있으므로, 불러올 함수의 유형이 달라질 것에 대비해 guard instruction을 삽입해야 한다. (맞는지 틀린지 확인하기 위해)
    • 만약 call site마다 guard instruction을 삽입하게 되면 여러 call site에서 똑같은 함수를 불러올 때 여러 번 guard instruction 삽입해야 하므로 낭비가 생긴다.
    • 따라서 불러올 대상이 되는 함수의 맨 앞에 guard instruction을 삽입해서 중복삽입을 피한다.
  • 만약 guard instruction을 실행했을 때 원래 예측했던 타입과 다르다면 다시 돌아가서 메소드 검색부터 다시 실행한다.

http://jayconrod.com/posts/44/polymorphic-inline-caches-explained 이쪽의 내용을 참고해도 좋을 것 같다.


  1. call site: 함수나 서브루틴이 호출되는 위치(코드의 라인). 호출 지점은 0개 이상의 argument가 함수에 넘겨지고, 0개 이상의 리턴값을 넘겨받는 위치이다. 


'엥그니어링 > 도움글' 카테고리의 다른 글

Day One 타임라인 관리  (0) 2014.07.22
구글 데이터 백업하기  (0) 2014.07.15
합주시간표 설치하기  (2) 2014.06.02
무료 웹호스팅 얻기 / 관리  (2) 2014.06.01
Favicon / 즐겨찾기 아이콘 등록  (3) 2014.06.01

WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,

전국의 밴드동아리들에게 조금이라도 보탬이 되고자 하는 거창한 마음으로 만든 것은 당연히 아니고, 비싼 등록금 주고 배운 거 써먹어봐야지 하는 소소한 마음으로 동아리 후배들을 위해 선물로 만들었던 합주시간표다.


설치파일 다운로드는 이쪽

2014/05/31 - 밴드동아리를 위한 합주시간표


무료 웹호스팅 얻기는 이쪽

2014/06/01 - 무료 웹호스팅 얻기 / 관리


다시 한번 말하지만 합주시간표는 웹페이지 설치형이기 때문에 웹호스팅이 필수이다. 동아리컴퓨터에 자체적으로 서버 설치할 수도 있겠지만 그렇게 하느니 그냥 무료 웹호스팅 얻고 말겠다 나같으면.


** 아래 설명 및 그림파일은 hostinger.kr의 무료 웹호스팅을 기준으로 설명했다. 다른 업체의 호스팅을 사용한다면 환경이 달라질 수 있음에 유의.


웹호스팅을 얻었다면 설치파일을 다운로드 받아 압축을 풀어놓고, 웹호스팅 관리 페이지에 들어가자.


+++ 데이터베이스 생성을 할 줄 알거나 이미 했다면 넘어가도 되는 부분이다.

(찾기 메뉴로 +++ 찾아가면 빠르게 넘어갈 수 있다)

관리 페이지에서 MySQL 데이터베이스 메뉴를 누르면 이 창으로 넘어온다.

보통 무료웹호스팅 서비스에서 제공받는 데이터베이스 명에는 유저명이 앞에 무조건 붙고, 식별용으로 그 뒤에 다섯 글자 제한으로 이름을 정할 수 있다. 저 상태라면 실제 접속을 위한 데이터베이스 이름은 u921204636_time 이 된다.

비슷하게 MySQL 계정 이름도 접두사는 고정이고 거기에다가 다섯글자까지 추가로 적을 수 있다. 실제 이 데이터베이스 접속을 위한 계정 이름은 u921204636_chaz 가 되는 것이다. 비밀번호까지 적고 나면 데이터베이스 생성이 완료된다.

+++ 여기까지 데이터베이스 생성 설명


다운로드한 설치파일 중에 수정을 해야 하는 부분이 있다.

db_info.php 파일을 메모장이나 기타 텍스트 에디터를 통해서 열어준다.



아래쪽은 손댈 필요 없고, 위쪽 네개의 변수만 큰따옴표 사이에 들어갈 내용들을 바꿔준다.

위쪽에서 캡쳐했던 내용대로 내가 만들어줬다면

$mysql_host = "mysql.hostinger.kr";

$mysql_database = "u921204636_time";

$mysql_user = "u921204636_chaz";

$mysql_password = "tester";

이렇게 수정을 해야 한다. 각자의 웹호스팅 설정에 따라 바뀌는 내용이기 때문에 일부러 별도의 파일로 뺀 거다.


+++ 여기서부터는 FTP 프로그램 다룰 줄 아는 사람이라면 넘어가도 되는 부분이다.

hostinger.kr에서 무료 웹호스팅을 받았다면, 관리 페이지에서 파일 관리자 메뉴를 선택해도 된다.

주의할 점은 그냥 파일 관리자를 선택했을 때는 상관없지만, 파일 관리자 2를 선택해서 들어갔을 때는 실제 파일은 항상 public_html 폴더 안에 넣어야 한다. 이게 기본 폴더다.


FileZilla 같은 별도의 FTP 프로그램을 쓴다면 (이쪽을 추천하며, 밑에서 나오는 캡쳐도 이걸 기준으로 한다) 호스트에는 도메인이나 아예 직접적으로 서버의 IP 주소를 적고, 

사용자명에는 관리 페이지 왼쪽에 나오는 저걸 적어야 한다. 비밀번호는 호스팅어 가입할 때 썼던 비밀번호 적으면 되고.


아무짓도 안했으면 기본 디렉토리 안에는 default.php 밖에 없을 것이다. 이건 설치 잘 됐다고 보여주는 파일이니까 그냥 지워도 된다.



로컬 사이트 라는 게 내 컴퓨터 안의 디렉토리들을 말하는 거고, 리모트 사이트란 게 내가 접속한 서버를 말한다. 아까도 말했듯이 public_html 이라는 폴더가 기본이기 때문에 그 안에 접속을 한다.  

접속을 한 후에 timetable.zip 압축을 푼 폴더를 왼쪽 창에서 찾아서 들어간다. 그리고 거기 들어있는 파일들을 몽땅 선택해서 오른쪽으로 드래그를 하면 업로드가 된다.

(혹은 보통 파일 탐색창에서도 파일들 선택해서 드래그해도 상관 없다)

+++ 여기까지 파일 업로드 설명


이제 최종적으로 설치만 남았다.

설치는 간단하다. initialize.php를 한번 실행하기만 하면 된다.


http://파일 업로드 주소/initialize.php


실행 하고 화면에 아무런 에러 창이 뜨지 않고 흰 화면만 뜬다면 성ㅋ공ㅋ이다.

그러면 http://파일 업로드 주소/ 만 치거나, http://파일 업로드 주소/index.php 를 쳐보자.

합주시간표에는 아무 것도 없을 테니까 그냥 깨끗한 합주시간표만 보인다. 그렇지만 데이터베이스에는 합주시간표를 위한 세팅이 완료되어 있으므로 phpMyAdmin으로 확인해보면 새로 생긴 테이블들이 보인다.


실제 설치 예제 주소

http://chaz.hol.es/timetable/index.php


직접 들어가서 어떤 식으로 쓸 수 있는지 확인해보시면 좋을듯 합니다.


어쨌든 나름대로 자세한 설명 완료 :)

'엥그니어링 > 도움글' 카테고리의 다른 글

구글 데이터 백업하기  (0) 2014.07.15
Inline Caching (인라인 캐싱)  (0) 2014.07.01
무료 웹호스팅 얻기 / 관리  (2) 2014.06.01
Favicon / 즐겨찾기 아이콘 등록  (3) 2014.06.01
JavaScriptCore  (0) 2014.04.24

WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

,