'분류 전체보기'에 해당되는 글 152건

  1. 2015.09.28 fsutil
  2. 2015.07.19 youtube에서 특정 종류 영상/채널 차단하기
  3. 2015.04.06 아일랜 DIGITAL 자동 결제
  4. 2015.03.16 ShellShock Live
  5. 2015.02.01 히어로즈 오브 마이트 앤 매직 3(Heroes of Might and Magic III) HD 버전 리뷰 2
  6. 2015.01.16 밟아밟아 Version 2.0 Release 15.01.16.금.
  7. 2014.12.21 마비노기 영웅전 퀘스트 대화 스킵 툴
  8. 2014.12.15 SourceTree와 함께하는 svn에서 git으로 이전하기 Windows편 2
  9. 2014.12.10 히어로즈 오브 마이트 앤 매직 3(Heroes of Might and Magic III) HD 버전 스팀 출시
  10. 2014.12.08 BlogAPI 테스트
  11. 2014.12.08 윈도우 제어판 도구 등 프로그램 실행 파일명
  12. 2014.12.06 커맨드라인으로 엑셀 매크로 실행하기 2
  13. 2014.12.01 C/C++ if 구문과 switch 구문의 효율성
  14. 2014.11.01 커맨드라인으로 엑셀 매크로 실행하기
  15. 2014.10.06 [TFSVN] TFS 를 SVN 처럼 - 2. 매핑(Mapping)
  16. 2014.09.19 LINQ & SP
  17. 2014.09.17 [TFSVN] TFS 를 SVN 처럼 - 1. 작업영역(workspace)
  18. 2014.09.03 [TFSVN] TFS 를 SVN 처럼 - 0
  19. 2014.08.23 데이터 직렬화Data Serialization
  20. 2014.08.17 C# 함수 속성 (Function Attribute)
  21. 2014.08.08 [마비노기] 대농장 지주 만들기 일지 8/8
  22. 2014.07.17 크롬 브라우저를 트레이 아이콘에 띄우고 싶을 때 minimize chrome to tray
  23. 2014.06.01 무료 Resource Editor 1
  24. 2014.04.24 php 에서 mysql 연동하기
  25. 2014.04.23 버튼 CSS 스타일 위지윅
  26. 2014.04.22 윈도우 단축키 설명 모음
  27. 2014.04.16 이젠 플래시 플레이어마저
  28. 2014.03.22 과거 웹페이지 역사
  29. 2014.03.09 UML 사이트
  30. 2014.02.21 오늘의 일기

fsutil

개발 2015. 9. 28. 00:44

파일명을 자꾸 까먹어서 기록해둠 –.-

Posted by OOJJRS
,

티비플 영상들은 화면에 참가자들의 채팅 내용이 올라와서 지저분하다고 느끼는데다 영상 자체도 원본 영상을 재방하면서 원저작자의 권리가 침해되는 경우가 많아 가끔 자체 필터링에 실패해서 영상을 틀었을 때 기분이 많이 상하곤 했다.

youtube 내에서 차단할 수 있는 기능을 기웃거리다가 영 신통치 않아 확장 프로그램을 기웃거리던 중 Video Blocker 라는 좋은 녀석을 찾아서 소개해본다.

설치 후 옵션에서 채널/와일드카드/키워드 등으로 youtube 컨텐츠 중 차단할 대상을 선택할 수 있다. 메인 화면에서 맞춤 추천에서조차 차단되므로 편하게 사용할 수 있다.

Posted by OOJJRS
,

는 포토샵

연관 좀 되는 걸로 써라 크르릉

 

10달러 짜리 결제 문자를 보고 고작 만원 때문에 이걸 추적해야하나 말아야하나 고민할 사람들을 위한 공유

Posted by OOJJRS
,

http://store.steampowered.com/app/326460

이번 3월 11일에 스팀으로 발매된 ShellShock Live

 

어린 시절 본인은 탱크 게임이라고만 불렀던 Scorched Earth(Link)를 열심히 했던 게이머라면 이 게임이 뭔지 단박에 알아차릴 수 있다. 다만 게임 제목이 내용을 온전히 반영한다고 보기는 어려울 듯 싶다. 항상 나중에라도 Scorched Earth를 최신판으로 만들어보고 싶었는데 그 마음을 곱게 접고 즐기기만 해도 될 듯. 이런 류의 게임이 지금까지도 여럿 있었지만 이번만큼 Scorched Earth를 떠올리게 하는 게임이 있었나 싶다.

 

어린 시절에 즐겨했던 Scorched Earth

 

정말 놀라울 정도로 똑같은 발전형인데다 멀티 플레이가 되기 때문에 더 바랄 나위가 없다. 찜하기와 팔로우로 스팀 할인(…)을 맞이할 준비는 끝났다.

Posted by OOJJRS
,

1월 29일에 HD 버전이 나온지도 3일 가량이 흘렀다. (참고로 이번에 발매된 스팀의 HD 버전은 원본 에라시아의 부흥만을 포함하고 있다) 약간 플레이해본 결과 그래픽 부분과 별개로 원본과 차이점이 좀 있었다. 테스트 목적이 아니었으므로 아래 내용이 전부가 아님을 미리 밝힌다. 다만 데이터/밸런스는 1.3 패치 이후, 코드 기능적인 부분은 1.3 패치 이전의 것을 그대로 사용했을 것이라고 추측할 수 있었다.

 

1. 선술집에서 등장하는 영웅이 3번째부터 유닛을 1마리씩 갖고 나옴 (1.2v 멀티플레이 밸런스 패치 적용 내용)

2. 스페이스 키로 현재 장소 재방문 기능 없음 (1.3v 패치 내용 미적용)

3. 리저드맨 공격력이 1.3v 멀티플레이 밸런스 패치 내용을 따름 (공격력, 데미지 등)

4. 드래곤플라이 특수능력(공격 시 약화) 1.3v 멀티플레이 밸런스 패치 내용을 따름

5. 키 입력의 경우 넘버패드로 이동할 수 있는 기능이 사라짐. 이동력 낭비를 줄이기 위해 키보드 이동으로 상세하게 조절하던 사람들은 상당히 불편함을 느낄 수 있다. 특히 남동, 남서, 북동, 북서를 이동할 방법이 마우스 뿐임.

6. 광산에 유닛을 넣을 수 없음. 역시 이동력 관리 상에 상당히 불편함. (1.3v 패치 내용 미적용)

7. 업그레이드 건물을 짓고 나면 업그레이드 안 된 유닛은 생산할 수 없음. (1.3v 패치 내용 미적용)

8. 처음 인트로 영상에서 깃발 나부낄 때 3초 쯤 삐걱~ 튀던 부분을 잡았음.

9. 네크로맨시 스킬이 뭔가 좀 이상함. 1.3 패치 이전에는 무조건 체력 기반으로, 1.3 패치 이후에는 스켈레톤의 체력보다 높으면 숫자, 낮으면 체력 기반으로 계산을 해야 하는데 밸런스 문제인지 무조건 숫자 기반으로 하는 것 같은 병크를 목격함. 추가 확인이 필요한 부분.

10. 시나리오를 재시작하는 R버튼이 작동을 안 함…

11. 그렘린을 30~40대로 들고 나옴. (1.2v 멀티플레이 밸런스 패치 적용 내용)

12. 천사/대천사 고용 시 보석을 소모함. (1.3v 멀티플레이 밸런스 패치 적용 내용 –_-)

 

멀티플레이를 할 상대가 없어서 멀티플레이 시 버그들이 고쳐졌는가에 대해서는 확인하지 못했다.

가벼운 카페 홍보 한 번… 슥 : http://cafe.daum.net/mm3 물론 유령된 지 오래지만…

정신 못 차리고 플레이하다가 문득 생각나서 정리해보았다. 테스트를 위해 한 것이 아니므로 기억나지 않는 많은 내용이 누락되어 있음을 양해바란다.

Posted by OOJJRS
,

https://play.google.com/store/apps/details?id=com.OOJJRS.Mines2



밟아밟아 Version 1.0 은 이쪽에... ( http://oojjrs.tistory.com/12 )


유니티 엔진을 사용하도록 포팅하면서 몇 가지 기능도 추가해보았다.


1. 단순한 캐릭터 이미지 추가 (상황에 따른 변경)

2. 턴 타이머 (각자에게 최대 12초가 주어짐)

3. 1인용 플레이



원래 1인용 플레이는 혼자서 두 개 다 하는 거였는데 시간을 투자하여 AI를 만들어보았다.


지뢰찾기 AI가 생각보다 만들기 까다로웠음을 고백한다.


지뢰찾기 AI는 어떠한 치트도 사용하지 않고 순수하게 인간처럼 열린 타일의 정보를 갖고 계산하여 행동한다.




다음은 전체적인 포스트 모템.


모바일 개발을 처음 해보고 있기 때문에 전체적인 흐름을 파악하기 위해 출시까지 진행해보았다.


이것저것 알아야할 것들(게임 심의라든지...)이 제법 있었지만 이미 어느 정도 성숙해있는 환경인 것인지 생각보다 훨씬 수월하게 진행되었다.


총 개발 시간은 5일(초기 기능 테스트 버전 1 + 네트워크 1 + 인공지능 1 + UX 1 + 광고 부착 1), 1.0 버전의 리소스가 있었기에(그것도 리소스라고 말하기엔 부끄럽지만) 기타 리소스 작업 시간은 많이 생략할 수 있었다.


유니티 엔진 사용법도 많이 미숙하기 때문에 1.0 버전이 있었음에도 이쪽으로 다시 포팅(이라고 쓰고 다시 제작이라고 읽는다)하고 나서 기능을 테스트하는데 하루 정도 걸렸다.


광고 부착 작업에서도 생각보다 삽질을 많이 하여 꽤나 시간이 걸렸다. 유니티 네트워크와 광고 작업이 내 생각보다 시간을 많이 잡아먹게 한 주범! 다 해본 지금에 와서 다시 한다면 저 둘은 2시간이면 끝낼 사이즈인데 2일을 잡아먹는 바람에 다른 작업에 시간을 많이 투자하지 못하였다.



이번 사이드 프로젝트는 이것으로 마치고 다음엔 뭘 만들까...

Posted by OOJJRS
,


MHTool.exe



2015/11/30 윈10 버전

MHTool.exe



마비노기 영웅전에 최근에 복귀했는데 UX가 너무 불편해서 게임을 못할 지경이었다.


퀘스트 대화라도 자동으로 넘기면 편하겠지 싶어 만들었다.


앞으로 다른 기능들도 추가할 일이 있을지도.



※ 사용법


마비노기 영웅전을 실행한 상태에서 툴을 실행하면 창 하나가 뜨고 끝이다.


NPC와 대화를 시작한 다음, 단축키인 `(숫자 1 왼쪽에 있는) 키를 누르면 자동으로 대화가 넘어간다.


실행할 때 실행 파일에서 우클릭한 다음 "관리자 권한으로 실행"을 해야 정상 작동한다.



하지만 다른 것들이 불편한 게 많아 곧 접을 것 같다는 게 함정



------------

윈도우 10 버전으로 빌드해서 올린다. 접어서 확인은 못 해보지만 윈10에서 빌드했으니 윈8에서도 돌아가겠지 싶음...

Posted by OOJJRS
,

※ 이 글은 SourceTree, svn, git의 기본적인 사용법을 알고 있다고 가정합니다.

svn에서 git으로의 이전Migration은 git 자체적으로 지원하고 있다. 모든 로그와 브랜치, 태그 등을 보존하면서 자연스럽게 git으로 갈 수 있을 뿐 아니라 git 클라이언트Client 및 지역 저장소Local Repository만 git을 사용하고 원격 저장소Remote Repository는 기존의 svn 서버를 그대로 사용하게 할 수도 있다. 하지만 이전 작업을 처음 해본다면 생각보다 구멍이 몇 개 생길 수 있어 이 글로 정리해보았다. 윈도우즈 환경에서 git 클라이언트로 소스트리SourceTree를 사용했다.

git이 자체적으로 이전 기능을 지원하지만 자주 사용되는 기능이 아니므로 소스트리도 메뉴를 통해 해당 기능을 지원하지는 않는다. 대신 이런 기능들을 터미널을 통해 직접 실행할 수 있다.

image

터미널을 띄우면 현재 디렉토리 위치를 잘 봐두어야 한다. 나중에 이전이 끝난 결과물이 전혀 엉뚱한 폴더에 들어있다면 현재 디렉토리 위치를 몰라서 그랬을 가능성이 높다.

image

내장 기능은 다음과 같이 사용한다. (git-svn 사용법 참고 링크) 역슬래시는 제대로 처리하지 못하므로 디렉토리 구분은 슬러시로 해준다. 그리고 절대경로를 사용하는 것이 나중에 헤매지 않는 방법이다.

image

git svn clone {svn src url} {destination path} [Option]

여기서 위에 예제로 사용한 저장소는 svn 서버가 기본적으로 생성해주는 trunk, branches, tags 폴더가 없는 녀석들이다. 만약 해당 폴더가 있는 저장소라면 다음과 같은 옵션이 추가로 필요하다. (위의 사용법 링크를 참고하면 좋다)

git svn clone {svn src url} {destination path} –T trunk –b branches –t tags
(-T trunk –b branches –t tags 옵션은 –s 옵션 하나로 대체 가능)

수행한 화면은 다음과 같다.

image

소스트리에서 생성된 지역 저장소를 열어 잘 되어 있는지 확인해보았다.

image

원격 저장소 정보에 Subversion이 자동으로 설정되어 있고 로그들도 아주 잘 살아있음을 볼 수 있다. 하지만 우리는 svn을 버리고 git으로 가는 중이므로 원격 정보에서 Subversion을 지우고 새 원격 저장소를 설정하고 싶을 것이다. 새 원격 저장소는 위의 GUI 중 원격에서 우클릭을 하면 새 원격 저장소에 대해 정보를 설정할 수 있다. 하지만 기존 Subversion 원격 정보를 제거하는 것은, 아래와 같이 생각보다 잘 안 될 수가 있는데,

image

이를 수동으로 지워주려면 설정 파일을 직접 편집해주어야 한다. (새 원격… 메뉴에서 설정 파일 편집을 누르거나 지역 저장소 폴더의 git 설정 폴더로 들어가 config 파일을 메모장 등으로 열어주면 된다. (여기서는 C:\Test\.git\config)

다음과 같은 내용을 보았다면 무엇을 지워줘야 하는지는 명확할 것이다. 아래 내용 말고도 추가로 지워줘야할 것이 몇 개 더 있다. (실제 [svn-remote… 부분을 제거하더라도 소스트리는 여전히 Subversion 원격 저장소를 표시한다)

image

지역 저장소의 git 설정 폴더(여기서는 C:\Test\.git)로 들어가 svn 폴더를 지워준다. 또한 refs\remotes 폴더로 들어가면 git-svn 이라는 파일도 있는데 이것도 지워준다.

image

image

그럼 이제 소스트리의 원격 정보는 깨끗해졌다.

image

그런데 아직 끝나지 않았다. 다음과 같이 원격을 추가하고 푸시를 통해 지역 저장소에 있던 내용을 원격 저장소로 올렸는데, 우리가 평소에 보던 HEAD 브랜치가 없다! HEAD는 일반적인 브랜치와는 달리 (보통) master 브랜치에 대한 참조 브랜치라서 별도 조작이 필요하다. 다음과 같이 원격이 설정되었다면 git 설정 폴더 밑에 refs\remotes 폴더로 가보면 origin 폴더가 생기고 그 밑에 master 파일이 생겼음을 볼 수 있다.

image

image

새 파일을 생성해서 파일명을 HEAD로 해주고 다음과 같이 내용을 입력한다.

image

아마도 모든 설정은 완료되었을 것이다.

image

Posted by OOJJRS
,

뉴스 원문은 다음에…

http://might-and-magic.ubi.com/universe/en-gb/games/all-games/might-and-magic-heroes-3-hd/index.aspx

요약하자면 개발사의 도산으로 판권을 사들인 UBI Soft에서 드디어 히어로즈3의 HD 버전을 출시하겠다는 소리다. 별 언급은 없었으나 당연히 자기네 플랫폼인 유플레이에 올릴테고, 내용을 보면 스팀도 지원하겠다고 한다. (아마 히어로즈6과 비슷하게 스팀에서 유플레이를 실행시키는 방식이 아닐까 싶다) 스팀에서 바로 실행된다.

또한 iOS와 안드로이드의 타블렛 버전으로도 내겠다고 하니 (UX가 약간 걱정되는 기능이 몇 개 있긴 하지만) 좀 더 많은 플랫폼에서 만나볼 수 있겠다. 멀티를 위한 로비 서버도 지원하므로 기존 멀티플레이 기능이 더욱 강화될 것으로 기대한다. (멀티플레이 시에 발생하는 버그를 그대로 가져올 것인가가 개인적으로는 궁금하다)

2015년 1월 29일 출시 예정이다.

Posted by OOJJRS
,

버틸 수가 없다.

 

Consolas for Code

아니 이것은

left right

void main()

{

    return;

}

def main():

    return

 

수정 테스트

Posted by OOJJRS
,

윈도우 UI가 달라져도 파일명은 대개 같기 때문에 유용하게 사용한다.


문제라면 사용자의 기억력이 금붕어 수준이면 안 된다는 것 정도.


윈도우가 설치된 설정에 따라 없는 파일이 있을 수도 있다.


대부분의 명령어는 제어판 실행(control)을 붙이지 않아도 되지만 붙여야 동작하는 녀석들도 있다.

(특정 옵션을 주고 싶을 때 붙이기도 하지만, 그 쯤 되면 이미 가벼운 실행보다는 커맨드라인 툴을 위한 것이므로 하단 링크를 참고)



Active Directory 사용자 및 컴퓨터           dsa.msc

IIS 관리자IIS Manager                       inetmgr.exe

iSCSI 초기자                                iscsicpl.exe

Microsoft Exchange                          control mlcfg32.cpl

Microsoft Mail Post Office                  control wgpocpl.cpl

게임 컨트롤러Joystick Properties            joy.cpl

국가 및 언어Regional Settings               intl.cpl

날짜 및 시간Date/Time Properties            timedate.cpl

네트워크 연결Network Properties             ncpa.cpl 또는 netcpl.cpl

디스크 관리                                 diskmgmt.msc

로컬 사용자 및 그룹                         lusrmgr.msc

마우스 속성                                 main.cpl

모뎀 속성Modem Properties                   control modem.cpl

사용자 계정 관리                            netplwiz.exe

서비스                                      services.msc

성능 모니터                                 perfmon.msc

소리Multimedia Properties                   mmsys.cpl

스캐너 및 카메라Scanners and Cameras        control sticpl.cpl

시스템 속성System Properties                sysdm.cpl

원격 데스크톱 연결                          mstsc.exe

윈도우 방화벽 고급 설정                     wf.msc

윈도우 방화벽Windows Firewall               firewall.cpl

이벤트 뷰어                                 eventvwr.msc

익스플로러 인터넷 속성Internet Properties   inetcpl.cpl

장치 관리자                                 devmgmt.msc

장치 및 프린터Printers Folder               control printers

전원 옵션Power Management                   powercfg.cpl

접근성 센터Accessibility Options            control access.cpl

컴퓨터 관리                                 compmgmt.msc

폰트 폴더Fonts Folder                       fonts

프로그램 및 기능Add/Remove Programs         appwiz.cpl

화면 해상도Display Properties               desk.cpl



보기 좋게 정리하려다 무료 블로그 문서 편집 기능의 편의성의 한계를 깨닫고 귀찮아서 관뒀다.



※ 링크

http://support.microsoft.com/KB/192806

http://ss64.com/nt/run.html


Posted by OOJJRS
,


VbaLauncher.exe



올려야지 해놓고 포스트만 빼먹은 듯.


전에 올렸던 커맨드라인으로 엑셀 매크로 실행하기는 결국 원하는 걸 하는 것에 무리가 있었다.

(엑셀 창이 꼭 떠야만 했다)


이래저래 옵션이 없는 것을 보고 결국 코드로 툴을 만들었다.


실행 파일은 첨부 파일에, 소스는 다음 경로에.



https://github.com/oojjrs/vbalauncher.git



엑셀 버전은 설치된 것 중 최신 버전으로 자동 선택되며 인자 없이 실행할 경우 help가 출력된다.



Posted by OOJJRS
,

※ 아래 어셈블리 구문들은 Intel 64 bit, Visual Studio 2013 Community 버전에서 컴파일되었습니다.


switch-case 구문은 C/C++에서 조건문이 상수인 경우에 사용할 수 있는 조건 분기문이다. 조건문에 변수도 사용할 수 있는 if 구문의 특수한 형태라고 할 수 있는데 대개 처음 C/C++을 배울 때 특정 조건에서 switch 구문의 우월함을 같이 접하곤 한다. 정말인지 다음 코드를 보자.



양쪽 모두 n이 3으로 시작하며 1일 때, 2일 때를 거쳐 종료하는 로직이다. 이 코드를 기본 릴리즈 환경으로 빌드하면 대개 속도 최적화가 적용된 어셈블리 코드가 나오는데 먼저 if 구문의 코드부터 살펴보자.




처음 보는 사람은 약간 복잡해보일 수 있지만 우리가 이미 원래의 코드를 알고 있으므로 더듬더듬 추적해볼 수 있을 것이다. 위 코드를 흐름 그대로 따라간다면 다음과 같다.



1. eax 레지스터에 3을 대입한다.

2. eax 레지스터와 1을 비교한다. (=eax 레지스터에서 1을 뺀다)

3. (그 결과값이 0과) 같지 않으므로 0x00BB1026 주소로 점프한다.

4. eax 레지스터와 2를 비교한다. (=eax 레지스터에서 2를 뺀다)

5. (그 결과값이 0과) 같지 않으므로 0x00BB103C 주소로 점프한다.

6. eax 레지스터와 3을 비교한다. (=eax 레지스터에서 3을 뺀다)

7. (그 결과값이 0과) 같으므로 printf("echo 3")를 수행한다.

8. eax 레지스터에 1을 대입한다.

9. 무조건 0x00BB1010 주소로 점프한다.

10. eax 레지스터와 1을 비교한다.

11. 같으므로 printf("echo 1")을 수행한다.

12. eax 레지스터에 2를 대입한다.

13. 무조건 0x00BB1010 주소로 점프한다.

14. eax 레지스터와 1을 비교한다.

15. 같지 않으므로 0x00BB1026 주소로 점프한다.

16. eax 레지스터와 2를 비교한다.

17. 같으므로 printf("echo 2")를 수행한다.

18. eax 레지스터에 4를 대입한다.

19. 무조건 0x00BB1010 주소로 점프한다.

20. eax 레지스터와 1을 비교한다.

21. 같지 않으므로 0x00BB1026 주소로 점프한다.

22. eax 레지스터와 2를 비교한다.

23. 같지 않으므로 0x00BB103C 주소로 점프한다.

24. eax 레지스터와 3을 비교한다.

25. 같지 않으므로 0x00BB1052 주소로 점프한다.

26. 끝.



점프의 횟수를 잘 봐두고 이제 다음 switch 구문의 코드를 보자.




위와 같은 방법으로 다시 한 번 추적해보자.



1. eax 레지스터에 3을 대입한다.

2. eax 레지스터에서 1을 뺀다. (2가 됨)

3. 그 결과값이 0과 같지 않으므로 점프하지 않는다.

4. eax 레지스터에서 1을 뺀다. (1이 됨)

5. 그 결과값이 0과 같지 않으므로 점프하지 않는다.

6. eax 레지스터에서 1을 뺀다. (0이 됨)

7. 그 결과값이 0과 같으므로 점프하지 않는다.

8. printf("echo 3")을 수행한다.

9. eax 레지스터에 1을 대입한다.

10. 무조건 0x00BB1070 주소로 점프한다.

11. eax 레지스터에서 1을 뺀다. (0이 됨)

12. 그 결과값이 0과 같으므로 0x00BB109B 주소로 점프한다.

13. printf("echo 1")을 수행한다.

14. eax 레지스터에 2를 대입한다.

15. 무조건 0x00BB1070 주소로 점프한다.

16. eax 레지스터에서 1을 뺀다. (1이 됨)

17. 그 결과값이 0과 같지 않으므로 점프하지 않는다.

18. eax 레지스터에서 1을 뺀다. (0이 됨)

19. 그 결과값이 0과 같으므로 0x00BB108A 주소로 점프한다.

20. printf("echo 2")를 수행한다.

21. eax 레지스터에 4를 대입한다.

22. 무조건 0x00BB1070 주소로 점프한다.

23. eax 레지스터에서 1을 뺀다. (3이 됨)

24. 그 결과값이 0과 같지 않으므로 점프하지 않는다.

25. eax 레지스터에서 1을 뺀다. (2가 됨)

26. 그 결과값이 0과 같지 않으므로 점프하지 않는다.

27. eax 레지스터에서 1을 뺀다. (1이 됨)

28. 그 결과값이 0과 같지 않으므로 0x00BB10AC 주소로 점프한다.

29. 끝.



수행되는 코드는 switch 구문이 조금 더 길어졌지만 점프 명령은 if 구문이 9개인 것에 반해 switch 구문이 6개로 1/3이나 적다. (보통 점프 구문이 많으면 성능 손실이 많아진다) 하지만 이 코드는 우리가 눈으로 보아도 최적화가 가능할 정도로 간단하면서 수행 순서의 예측도 가능한 코드이기 때문에 이견의 여지가 있다.
그럼 아래와 같은 코드는 어떨까?


이 코드들은 입력값에 따라 동작이 달라지므로 컴파일러가 임의로 수행 순서를 추측하여 최적화를 수행할 수 없다. 이 부분의 어셈블리 명령어는 다음과 같이 나오는데,




차분히 비교해보면 알겠지만 두 로직 간에는 거의 차이가 없다. if 구문은 같지 않으면 점프하고, switch 구문은 같으면 점프한다는 차이 뿐이다. 다만 if 구문의 경우는 코드의 수행이 예측 가능하건 말건 비슷한 모양새를 가진 것을 볼 수 있다.


결론적으로, 현대의 컴파일러는 일반적인 조건에서 if 구문의 최적화가 switch 구문과 맞먹을 정도로 좋아졌으며, 특정한 조건 하에서의 최적화는 여전히 switch 구문이 좋다는 것으로 요약할 수 있겠다. 그 특정한 조건은 위의 예에서와 같이 현업에서는 쉽게 볼 수 없고 눈으로도 최적화할 수 있는 경우가 많으므로, 이제는 성능을 위해 무조건 switch 구문을 써라! 같은 조언은 하지 않아도 될 것이다. (사실 '이제는' 이라는 말도 어폐가 있을만큼 if 구문의 최적화는 적용된 지 오래되었다)



-----------------------------------------------------------------------------------------

덧 : 글을 저지르고 읽다보니 여전히 이견이 있을 수 있어 내용을 추가한다. (친절함이 상당수 사라져 그림이 없다)

switch문의 경우 case의 개수가 일정 이상 커지면 지금 보는 모양과는 전혀 다른 모양을 갖는데(일명 점프 테이블이라고 한다) 대개 switch문이 if문보다 효율이 좋다고 말하는 근거에 해당한다. 기준이 되는 case의 개수는 컴파일러에 따라 다르다.

if문의 최적화 역시 마찬가지로 switch문처럼 일정 이상 커지면 점프 테이블을 구성해주기도 하는데 이 역시 컴파일러러에 의존적이다. 점프 테이블은 모르오 같은 컴파일러도 있다(안타깝게도 VS 컴파일러가 상당수 포함된다). 위에서는 jne 인스트럭션을 사용했지만 if문을 사용하더라도 switch문처럼 je 인스트럭션을 사용하도록 코드를 작성할 수도 있다(코드 유지보수상 권장하지는 않는다).

이도저도 복잡하고 잘 모르겠고 귀찮고 고민할 시간적 비용이 나오지 않는다면, 그냥 switch를 쓰는 것이 무방하다. 물론 굉장한 구형 컴파일러를 만난다면 switch 구문도 어마어마한 비효율 코드를 발생시키기도 하지만, 나처럼 이런 글까지 써놓고도 컴파일러를 크게 신뢰하지 않는 것도 하나의 방법이라 하겠다.

(좋은 시간 낭비의 사례)

Posted by OOJJRS
,

원하는대로 돌아가는 방식은 아니지만 커맨드라인을 통해 레지스트리 정보를 추출하거나 엑셀 버전을 골라 들고오는 로직을 매번 까먹고 다시 만드는 것도 일이라 기억난 김에 올려둔다.

(전에 만들어둔 로직들은 대체 다 어디 간 거지...)


@echo OFF

setlocal ENABLEEXTENSIONS


::설치된 엑셀 경로를 가져오기

set REGPATH=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application\CLSID

FOR /F "usebackq tokens=3" %%A IN (`REG QUERY %REGPATH% /ve`) DO (set CLSID=%%A)

if not defined CLSID (

    @echo 엑셀이 설치되어 있지 않습니다. 엑셀 설치 후 실행해주세요...

    pause

    goto error_end

)

set EXCELREGPATH=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\%CLSID%\LocalServer32

FOR /F "usebackq tokens=3" %%A IN (`REG QUERY %EXCELREGPATH% /ve`) DO (set EXCELPATH=%%A)

if not defined EXCELPATH (

    @echo 엑셀 경로가 올바르지 않습니다. 엑셀 설치 후 실행해주세요...

    pause

    goto error_end

)

if not exist %EXCELPATH% (

    @echo 엑셀 실행 파일이 존재하지 않습니다. 엑셀 설치 후 실행해주세요...

    pause

    goto error_end

)


::엑셀 매크로 직접 실행

%EXCELPATH% res\ObjectTemplates.xlsm /a ThisWorkbook.InsertToDb



Posted by OOJJRS
,

작업영역(Workspace) 편에서 매핑(Mapping)에 대한 내용을 일부 알아보았다. SVN의 Check-out에 해당하는데, TFS에서 Check-out은 조금 다른 의미로 사용되고 있으므로 용어를 명확히 가려야 한다.


테스트를 위해 작업영역을 새로 하나 만들고 현재 작업영역으로 선택했다. 메뉴에 보면 소스제어탐색기(Source Control Explorer)라는 녀석이 있는데 SVN의 Repository-Browser에 해당한다. TFS의 작업 대부분을 바로 이 창에서 찾아 하게 된다.




소스제어탐색기를 누르면 아래와 같은 창이 뜬다.




작업영역이 방금 작성한 것(여기서는 test)으로 잘 되어 있는지 확인하고, TFS에 접속이 잘 되어있는지도 확인한다. 별도의 설정 없이 생성하였기 때문에 매핑로컬 경로(Local Path)는 Not mapped라고 뜬 것을 볼 수 있다.

매핑은 크게 세 가지 방법으로 가능하다.


1. 위의 Not mapped라고 된 링크를 클릭

2. 좌측의 원하는 소스(여기서는 TFSVN) 위에서 우클릭 -> 고급설정(Advanced) -> 로컬폴더에매핑(Map to Local Folder)

3. 작업영역을 만들 때 바로 매핑 설정


세 가지 모두 결국은 동일한 과정을 거친다. 매핑하려는 경로가 새로 만들어져서 아무 내용도 없을 경우 다음과 같은 안내창과 함께 서버에서 파일을 내려받는다. 이를 동기화한다고 한다.




제대로 매핑이 완료되었다면 다음과 같이 경로가 설정된다.




매핑을 제거할 때에는 약간 헷갈릴 수 있는데, 매핑 방법 중 2번처럼 고급설정 메뉴에 가면 로컬폴더에매핑 메뉴가 매핑제거(Remove Mapping)로 변경되어 있음을 볼 수 있다. 메뉴를 선택해보면 무조건 제거하는 것이 아니라 변경 기능까지 겸하고 있음을 알 수 있다. 이때 매핑제거 메뉴는 사용자가 실제로 매핑을 수행한 폴더 위치에서 우클릭을 해야 나타난다. 위의 경우 TFSVN이 아닌 First 같은 곳에서 우클릭을 하면 매핑제거 메뉴는 나타나지 않는다.



숨겨진 기능을 찾아낸 기분.jpg




Posted by OOJJRS
,

LINQ & SP

개발 2014. 9. 19. 07:56

linq 는 sp 수행 결과 데이터를 select 로도 넘겨줄 수 있는 것에 반해,


스크립트에서 sp 를 호출했을 경우 결과 데이터는 출력변수로 줄 수밖에 없다는 점이


왠지 용납이 안 되는 기분


아악

Posted by OOJJRS
,

TFS를 제대로 사용하기 위해서는 먼저 작업 단위인 작업영역(Workspace)에 대해 알아야 한다.


작업영역소스제어폴더(Source Control Folder)[각주:1]와 사용자의 디스크에 있는 로컬폴더(Local Folder)[각주:2]에 대한 정보를 중심으로 구성되어 있다. 소스제어폴더로컬폴더를 연결해주는 과정을 매핑(Mapping)이라고 하는데 이 매핑은 1:1 밖에 성사되지 않는다. 동일한 URL 주소를 여러 로컬폴더에, 또는 그 반대의 짓을 하려고 하면 툴에서 가차없이 에러를 뱉어낸다.


작업영역의 현재 설정은 팀 탐색기의 Solutions에서 확인할 수 있다.


매핑이 1:1이라는 특성 때문에 SVN에 익숙했던 사용자는 종종 새로운 실수(?)를 저지른다. 여러 작업이 섞이지 않도록 로컬폴더를 복사 또는 checkout을 통해 분리해서 사용하는 것은 SVN에서는 일반적이지만, TFS 사용자는 함부로 로컬폴더의 복사본을 만들면 곤란해진다. SVN은 캐싱을 비롯한 여러 정보(버전 컨트롤 정보)를 작업 디렉토리리의 .svn 폴더에 담아서 관리하고[각주:3] TFS는 이런 정보들이 이 파일 저 파일에 흩어져있다.[각주:4] 추가로 중요한 것은 다음 이미지와 같은 설정이 있다고 할 때,


소스제어폴더의 TFSVN과 로컬폴더의 TFS 폴더(하위 폴더까지)만이 연결된 것처럼 보이지만 사실은 바로 위의 상위 폴더(Source)까지 정보를 갖고 있다. 다시 말해서 Source\TFS 폴더를 복사하여 Source\TFS2 를 만들면 Source\TFS\First.sln 파일을 열었을 때, 다음 이미지와 같은 모양이 되어버린다.


TFS에서는 별 생각 없이 로컬폴더를 복사하여 둘로 만들겠다고 복사하면 뒷처리가 복잡해질 수 있다.


이제 복사로 만들어진 Source\First2\First.sln 파일은, 매핑 정보에는 로컬폴더가 Source\First 로 되어 있는데 물리적인 위치가 변경된 것처럼 동작하여 실제 솔루션 파일을 열 때 아래와 같은 경고창을 띄워준다.

새로 연결을 시도하냐고 물어본 다음 뭘 하든 아래와 같이 거북한 에러를 뱉어낸다.




그렇다고 그 상위 폴더인 Source를 복사해서 Source2\TFS를 만들면, 위 이미지에 보이는 OOJJRS-PC라는 작업영역의 매핑 정보는 Source\TFS가 설정된 상태로 실제 경로가 Source2\TFS가 되어버려 프로젝트를 열 때 마찬가지로 위와 같은 에러들과 마주친다.

따라서 병렬 작업 등을 이유로 로컬폴더를 하나 더 생성하고 싶다면, 다음처럼 작업영역 관리창을 통해 새 작업영역을 생성해야 한다.


Add 버튼을 통해 작업영역을 추가할 수 있다.



현재 사용 중인 작업영역에서 방금 추가한 항목으로 변경하면, 새로운 매핑을 설정할 수 있다.


이제 OOJJRS-PC_1 이라는 작업영역은 별도의 매핑을 구성할 수 있게 되어, SVN에서 그랬던 것처럼 별도의 로컬폴더를 가질 수 있게 된다.

  1. Visual Studio 한글판 번역 단어. 소스의 URL 주소를 가리킨다. [본문으로]
  2. SVN에서는 보통 작업 디렉토리(Working Directory)로 부른다. [본문으로]
  3. Tortoise SVN Client의 이야기이며 1.7 버전을 기준으로 이전에는 각 폴더마다 .svn 폴더가 있고 1.7 버전 이후에는 작업 디렉토리의 최상위에만 .svn 폴더가 있다. [본문으로]
  4. 솔루션 파일(.sln), 프로젝트 파일(.vcxproj), .vssscc, .vspscc 등 직접 찾아보려면 귀찮을 정도로 잘게 나뉘어져 있다. [본문으로]
Posted by OOJJRS
,

※ 본 글은 SVN이나 GIT을 어느 정도 사용할 수 있고 TFS를 잘 모르는 사람을 대상으로 진행됩니다.



이번 글에서는 저장소를 만들고 연결한 뒤 최초 Check-In 까지, 앞으로 진행할 작업의 밑바탕을 준비하는 과정을 알아본다.


TFS (Team Foundation Server) 는 유료라서 SVN 이나 GIT 처럼 막 구해서 설치할 수는 없다.

대신 Visual Studio 2012 Express 부터는 무료 계정을 등록해서 TFS 서비스를 적당히 제공받을 수 있다.

(깃허브나 네이버 개발자센터에서 제공하는 저장소처럼)



다음의 주소로 들어가 자신의 Microsoft 계정으로 로그인하면 아래와 비슷한 화면을 볼 수 있다.


http://tfs.visualstudio.com/


아래 이미지에 표시해둔 'New' 링크를 클릭하여 쉽게 새 '팀 프로젝트'를 생성할 수 있다.

'팀 프로젝트'는 SVN 의 Repository 에 해당한다.





TFS 를 쓴다면 메인으로 활용될 팀 탐색기를 띄워주자.





메뉴 또는 팀 탐색기의 플러그 아이콘을 통해 접속해볼 수 있다.





혹시 위와 같은 메뉴가 보인다면 당황하지 말고 Select Team Projects... 를 살포시 눌러주자.






위의 웹페이지에서 미리 프로젝트를 생성하고 Visual Studio 를 실행할 때 계정 로그인을 해두었다면 다음 이미지처럼 선택할 수 있는 서버 목록에 자신의 서버 주소가 있고, 사용할 수 있는 프로젝트 목록이 나올 것이다.






SVN 에서 Checkout 이라고 부르는 행위는 TFS 에서 Mapping 이라고 부르는 기능을 통해 수행된다.

위에서 보는 것처럼 Configure your workspace 를 클릭하여 매핑할 경로를 지정해야 한다.

(TFS 에서의 Checkout 은 SVN 의 그것과 기능 면에서 약간 차이가 있으므로 주의해야 한다)






경로는 알아서 적절히 선택하고 Map & Get 을 눌러준다.

처음에는 별다른 소스가 없을 것이므로 왠지 아무 변화도 없는 것 같은 기분이 들면 제대로 찾아온 것이다.






이제 앞으로 사용할 연습용 프로젝트를 생성해야 하는데, 해당 '팀 프로젝트'에 추가할 솔루션 등을 만든다면 팀 탐색기에서 가장 하단의 Solutions 에서 New... 버튼을 통해 만드는 것이 파일 메뉴에서 생성하는 것보다 조금 더 편리하다. 두 방법의 차이점은 창을 띄워보면 금방 눈에 들어올 것이다.






나는 비뚤어진 성격이라서 테스트 프로젝트로 TFS 와 궁합이 좋은 닷넷 프레임워크 대신 C++ 프로젝트를 선택했다. First 라는 이름으로 솔루션을 추가한 모습이다. 이 작업은 SVN 으로 치자면 파일 추가까지만 완료된 상태다.






Pending Changes... 를 눌러 현재의 변경 사항을 볼 수 있다. Check In 은 SVN 의 Commit 과 동일한 기능이고 Comment 는 SVN 의 Log 와 같다.

이번 글에서는 단순한 준비 작업이므로 대충 로그를 적고 빠른 Check In 을 해버렸다.

솔루션 분석 결과 DB 인 SDF 파일이나 빌드 결과물들은 자동으로 체크인 항목에서 제거해주는 친절함을 발휘하는 모습이다. vspscc 파일이나 vssscc 파일은 이름에서 짐작할 수 있다시피 TFS 에 소속된 솔루션이나 프로젝트에서 사용하는 설정 파일이다. 무슨 내용인지 궁금하면 그냥 메모장 등을 통해 열어볼 수 있다.




Posted by OOJJRS
,

옛날부터 항상 프로그램을 만들 때마다 했던 고민이 바로 데이터의 저장과 불러오기에 대한 부분인데,

(확장하여 패킷 데이터를 주고받거나 DB에 집어넣을 때에도 같은 고민거리가 생긴다)


최근에 본격적으로 솔루션을 제작을 시작하면서 오늘 이리저리 리서칭했던 내용들을 정리해둔다.

(까먹으니까)


http://www.slideshare.net/AlexTumanoff/serialization-and-performance


http://kentonv.github.io/capnproto/

https://code.google.com/p/protobuf/

http://google.github.io/flatbuffers/

http://www.youtube.com/watch?v=Ssg_XyZlbvA


Posted by OOJJRS
,

귀찮음을 참고 버티며 알음알음 쓰다가 결국 정리가 필요함을 느꼈다.


하지만 귀찮아서 정리하지 않았다.



http://stackoverflow.com/questions/144833/most-useful-attributes


http://stackoverflow.com/questions/20346/net-what-are-attributes



그래도 내가 많이 쓰던 속성은 따로 써두는 친절함을 발휘!

(내가 까먹을 것 같아서)


[DebuggerDisplay()]

[Conditional()]

[DisplayName()]

[Description()]

[Flags] (이건 enum)

[DebuggerHidden]


Posted by OOJJRS
,

농장에서 딸기를 재배하려면 티르 코네일의 식료품점에서 아르바이트를 통해 딸기 씨앗을 얻어야한다고 한다.



나는 돈이 없으므로 현실에서도 하지 않는 아르바이트를 하기로 한다. (...?)


식료품점에 갈 때 어렵사리 마련한(사실은 공짜로 준) 말을 타고 히히힝



언덕이니까 걸어가면 다리가 아프다. 게다가 말이 엄청 빨라!!



식료품점 언니가 아르바이트를 준다. 오오, 보리를 수확해오라고 한다. 아까 거기 농장인가봐.


이제부터 남의 밭을 마구 서리하고 주인이 나타나면 낫으로 학살을 시작한다.


다음 제너레이션은 마비노기 GTA! 기대하시라!



는 개뿔 평온한 추수질. 주인없는 밭에 보리가 이렇게 잘 자라다니? 촌장님 여기 주인 없습니까



나를 추수 마스터라고 불러다오.



난 이거 보고 밀 20개랑 옥수수 20개도 다 해야 올라가는 줄 알았는데요. 보리만 하니까 올라가네요?



헐 쩔어 추수를 무려 두 배나 효율적으로 할 수 있다니. 당장 찍어주겠어.



추수를 하면 땅에 떨어진 보리를 룻해야한다는 사실을 몰라서(뭐 당최 보이질 않습니다) 뒤늦게 줍기 시작한지라 7개 뿐입니까. 의사 양반 이게 무슨 소리요 내가 고x라니


여기는 보리가루



근데 사실 아까 보리 수확 퀘스트를 받았기 때문에 시간 지나서 실패했더니 알바를 더 안 줌. 나쁜 언니네.


어쩔 수 없이 보릿가루만 만들고 내일을 기약하기로... 하하하. 벌써 대농장의 지주가 된 느낌이야.



훗, 상식적으로 풍차나 물레방앗간에서 곡식을 빻겠지. 나는 상식의 제왕. 그런데 가동중이 아니라니?


넌 누군데 마을의 공용 풍차를 점령하고 내 돈을 받아먹는거냐?


보리가 몇 개 없으니 1분이면 되겠지. 근데 설마 5개나 10개 단위로 하려나? 5개 단위면 좋겠다.



야!!! 내 100골드!!!


여기는 보릿가루



돈과 재료가 없어서 시작한 알바였는데 100골드 삥뜯긴 채 끝난 대농장 지주의 꿈




참고로 농장 이름은





100골드 때문에 잠이 안 올 것 같다.


Posted by OOJJRS
,

그냥 영어로 검색해도 금방 나오지만 주소를 찾아가기 귀찮으므로 블로깅해둔다.


https://chrome.google.com/webstore/detail/minimize-chrome-to-tray/ajedaeoideoipodoijpbpabhhadnniac



유투브에서 음악을 틀어놓거나 할 때 크롬 브라우저가 작업표시줄에 항상 떠 있으면 꽤 귀찮은데


해당 확장 프로그램을 설치하면 최소화 시 트레이 아이콘으로 들어가준다.


문제라면 확장 프로그램에서 순수하게 검색하면 결과가 잘 안 걸린다는 것.



아주 약간 불편한 점이 존재하지만 그 정도는 직접 만들어야하는 것에 비해 매우매우 사소하므로 관대하게 넘어가줄 수 있다. 하하하 :-D

Posted by OOJJRS
,

http://www.resedit.net/


Visual Studio 는 매우 훌륭한 툴이지만 비싸다. Express 버전도 어느 정도 활용할 만하나 조금만 편하게 작업하려고 하면 한계에 부딪히는데, 대표적으로 플러그인을 붙일 수 없고, 리소스 에디터를 사용할 수 없다는 점이 있다.


하지만 리소스 에디터는 어쨌든 리소스 스크립트가 텍스트로도 작성 가능하므로 (엄청 귀찮겠지만) 많이 부지런하다면 VS가 제공하는 것과 같은 툴을 만들 수도 있을 것이다.


물론 나는 전혀 부지런하지 않으므로 잘 만들어진 위 툴을 가져다 쓰고 있다.

Posted by OOJJRS
,

대부분 검색하면 설정을 어떻게 하라고 많이 나오지만 (게다가 리눅스 쪽이 많지만) 트러블슈팅 쪽은 내용이 적어서 추가해본다.



환경 : 윈도우, IIS 7.0, php 5.5.7



아무리 php.ini 를 제대로 설정한 것 같아도 기능이 동작하지 않을 때에는 다음의 명령어로 dll 들이 제대로 로딩되었는지 확인해볼 수 있다.


>php.exe -info


확인해보니 dll 들이 제대로 로딩되지 않아서 약간 테스트해보니,


extension_dir = "ext" 가 주석처리되어 있었다.


주석에 당당히 PHP 5버전부터는 기본값으로 ext/ 를 쓴다고 해놓고 별도로 추가 지식을 요구하는 이해하기 어려운 행위지만 그건 넘어갈 수 있다.


더 큰 문제는 저렇게 하니 ssh2 모듈 로드에 또 fail 하는 것.


귀찮아서 ssh2 모듈 로드는 꺼버렸다...



Posted by OOJJRS
,

http://www.bestcssbuttongenerator.com/


Posted by OOJJRS
,

http://www.guidingtech.com/4535/windows-7-keyboard-shortcut/


Posted by OOJJRS
,

폰트가 털리다니





앞으로 두어번 더 사건이 벌어진다면 진짜 귀찮음을 감수하면서 추적하고 싶은 생각이 들 것 같다.

Posted by OOJJRS
,

http://archive.org/web/


까먹기 전에 써놔야지 라고 생각한 걸 까먹어서 몇 달 지나고 써놓는 클래스


Posted by OOJJRS
,

UML 사이트

개발 2014. 3. 9. 18:25

http://www.gliffy.com/


까먹기 전에 써놔야지

Posted by OOJJRS
,

내 구두 서술을 글로 잘 옮겨 적어서 블로그질까지 해주는 현대판 대서소가 필요하다.


아니, 그렇다고 내가 한글을 모른다는 건 아니고.


Posted by OOJJRS
,