컴퓨터/윈도우2011. 11. 26. 18:58


> FOR 명령 사용법

   FOR /F %i IN ('dir /b *.txt') DO type %i 현재 디렉토리의 모든 텍스트 파일(*.txt)의 내용을 출력한다.

   FOR /F %i IN ('dir /b *.txt') DO (
       type %i
   )


> 리다이렉션(Redirection)

   command > file  명령의 표준 출력을 파일로 저장한다.

   command >> file  명령의 표준 출력을 파일에 덧붙여 저장한다.

   command < file  명령의 표준 입력을 파일로 읽는다.

   command1 | command2  명령1의 표준 출력을 명령2의 표준 입력으로 연결한다.(Pipe)

   command 1> file  명령의 표준 출력을 파일로 저장한다.

   command 2> file  명령의 표준 에러 출력을 파일로 저장한다.

   command 2>&1  명령의 표준 에러 출력과 표준 출력을 하나로 연결한다.


참고> https://technet.microsoft.com/en-us/library/bb490982.aspx


> 다중 명령 실행(Running multiple commands)

   command1 & command2  명령1을 실행 후 명령2를 실행한다.

   command1 && command2  명령1을 실행 후 오류가 없으면 명령2를 실행한다.

   command1 || command2  명령1을 실행 후 오류가 있으면 명령2를 실행한다.

   (command1 & command2)  다중 명령 그룹으로 실행한다.

   command1 parameter1;parameter2  명령의 매개변수를 구분한다(구분기호: ; or ,).


참고> https://technet.microsoft.com/en-us/library/bb490954.aspx


Posted by jungtae17
컴퓨터/유틸리티2011. 11. 7. 20:45
Posted by jungtae17
컴퓨터/우분투2011. 10. 2. 20:38


1. 패키지 설치

$ sudo apt-get install {패키지}

   참고> 패키지 의존성이 깨졌을 경우 복구 처리

$ sudo apt-get -f install


2. 패키지 삭제 (설정 파일 및 관련 패키지 삭제)

$ sudo apt-get --purge autoremove {패키지}


3. 패키지 업데이트 & 업그레이드
   a. 전체 패키지 업그레이드

$ sudo apt-get update && sudo apt-get -y upgrade

   b. 특정 패키지 업그레이드

$ sudo apt-get update && sudo apt-get install --only-upgrade {패키지}

   c. 업그레이드 가능한 패키지 목록 보기

$ sudo apt-get update && sudo apt-get -u upgrade


4. 패키지 재설치

$ sudo apt-get --reinstall install {패키지 이름}


5. 패키지 검색 (설치 가능)

$ apt-cache search {패키지 이름}


6. 패키지 정보 보기
   a. 패키지 정보 보기 (설치 가능, 설치된)

$ apt-cache show {패키지 이름}

   b. 패키지 파일(*.deb) 정보 보기

$ dpkg -I {패키지 파일명}


7. 설치된 패키지 목록 & 검색
   a. 설치된 패키지 찾기

$ dpkg -l {검색 패턴}

   b. 특정 파일(또는 디렉토리)로 설치된 패키지 찾기

$ dpkg -S {파일명 또는 디렉토리명}


8. 패키지 내의 파일 목록 보기
   a. 설치된 패키지 내의 파일 목록 보기

$ dpkg -L {패키지 이름}

   b. 패키지 파일(*.deb) 내의 파일 목록 보기

$ dpkg -c {패키지 파일명}



Posted by jungtae17
컴퓨터/우분투2011. 10. 2. 02:59


리눅스에서 거추장스러운 GUI 클라이언트 없이 토렌트를 손쉽게 다운로드 하는 방법이 있다. Transmission-daemon 을 설치하고 Web Interface 을 통하여 원격 제어 할 수 있다.

그리고 요즘 많이 나오는 보급형 NAS 장비들도 바로 Transmission-daemon 을 사용하여 토렌트 다운로드 기능을 지원하고 있다.

Transmission http://www.transmissionbt.com/

몇가지 설정해줘야 원격 접속이 가능하지만 이 부분은 다음에 정리하고 아래의 링크를 참조하기 바란다 (웹검색 추천).

Editing Configuration Files(wiki) https://trac.transmissionbt.com/wiki/EditConfigFiles

원격 제어 프로그램이 필요하다면 Transmission-Remote-GUI 를 이용하면 된다. µTorrent 와 비슷한 인터페이스로 사용하기 편리하고 친숙한 인터페이스라서 좋다.

Transmisson-remote-gui http://code.google.com/p/transmisson-remote-gui/

Posted by jungtae17
컴퓨터/프로그래밍2011. 9. 25. 02:49


관련 링크


관련 다운로드(Microsoft SQL Server Compact 3.5)


관련 다운로드(Microsoft SQL Server Compact 4.0)

Posted by jungtae17
컴퓨터/프로그래밍2011. 9. 23. 18:41


예전에 빠르고 가벼운 DB 를 찾다가 메모리 DB 도 만들 수 있는 SQLite 를 접하게 되었습니다. 하지만 영어권에서 만들어서 인지 UTF-8 방식으로 처리되어 불편한 점이 한두가지가 아니었습니다. 그래서 쉽게 사용하지 못하고 한동안 잊고 지냈습니다.

그리고 요즘들어서 다시 필요하게 되어 찾아봤지만 여전히 Unicode 사용이 너무 불편하고 제대로 안되서 고민하다가 해결 방법을 찾게되어 올려봅니다.

함수 하나를 추가하는 것으로 해결 가능한데 아래의 링크에서 SQLite 를 수정하는 방법을 찾을 수 있습니다.

http://greenfishblog.tistory.com/78

아래의 압축 파일은 위의 링크를 참조하여 수정한 것으로 SQLite 3.7.8 버전에 최소한의 코드만 수정했습니다. Unicode 를 사용하는 함수의 인자나 반환값을 wchar_t 형으로 수정했으며 DLL 에서도 사용 가능하도록 수정했습니다.

그리고 SQLITE_OMIT_DEPRECATED 전처리기를 정의하여 SQLite 에서 사용을 제한하는 함수들은 제외시켰습니다.

컴파일 환경은 Visual C++ 9.064비트 이며 DLL(동적 링크 라이브러리)LIB(정적 라이브러리) 로 컴파일 가능하도록 VC프로젝트 파일을 별도로 나누었습니다.


Posted by jungtae17
컴퓨터/프로그래밍2011. 8. 10. 21:01


책이나 교육을 통하여 학습되거나 선대(?) 프로그래머들에게서 전해져 오는 것들 중에서 아무 생각없이 받아들여져 사용되고 있는 것들이 많을 것입니다. "이런 것은 꼭 이렇게 해야되고, 저렇게 하는 것은 절대로 안된다."라는 것과 같이 프로그래머로써의 불문율이 존재합니다. 하지만 실제로 맞닥뜨리게 되는 문제들에서 책이나 학교에서 배운 원칙(?)이 무조건 옳은가라는 의문이 드는 경우가 많습니다. 결국 시간이 흐르고 경험이 쌓이면서 그 원칙이라는 것들에 대하여 무조건 맞는가 라는 생각이 들기 시작했습니다. 그럼, 이런 불문율들은 무엇이 문제일까요, 나름 비판적인 생각들을 정리해 봤습니다.

1. 완벽한(?) 설계
  • 환상은 완벽한 설계를 통해서 완벽한 프로그램을 만든다.
  • 현실은 완벽한 설계란 있을 수 없습니다. 있다고 해도 현실적인 문제(구현하기 위한 스킬, 변덕스러운 요구사항 등)로 인하여 완벽하게 설계된 것과는 동떨어진 프로그램이 만들어지게 됩니다. 그리고 시간이 흐르면 흐를수록 코드들이 걸레가 되어 가는 것을 지켜볼 수 밖에 없습니다.

2. 재사용 가능한 만능 코드
  • 환상은 어디에서든 사용 가능한 만능 코드를 만든다.
  • 현실은 모든 조건, 모든 상황에 만족하는 코드는 있을 수 없습니다. 따라서 기존의 코드를 수정하면서 개선하는 것이 효율적이며 최선의 선택이 될 수 밖에 없습니다.

3. goto 문은 절대악(惡)
  • 편견은 goto문은 프로그램 코드에 있어서 절대악이다. goto문을 사용하는 프로그래머는 하수(下手)다.
  • goto문 한 줄로 간단하게 해결할 수 있는 것을 굳이 싫다면 복잡해지는 코드를 어떻게 할 것인가? goto문은 절대로 쓰면 안되는 것이 아니라 남발해서 사용하면 안되는 것입니다. 독(毒)도 적절히 사용하면 약(藥)이 될 때가 있습니다.

4. 매크로는 위험한 물건
  • 편견은 매크로는 코드를 읽기 어렵게 만들고 버그를 만들낼 소지가 많다.
  • 반복되는 코드를 장황하게 코딩하는 것 보다 간단하게 한 줄로 코딩할 수 있다면 더 좋지 않을까요? 길고 복잡한 코드를 매크로로 만드는 것이 아니라 한두줄의 코드를 짧고 간단하게 만드는 것이 목적입니다. 특히, 짧지만 실수가 많이 발생할 수 있는 코드, 사용 설명이 필요한 함수나 코드를 짧고 간단한 매크로로 설명을 대신할 수 있습니다.

5. 꼼꼼한 주석은 필수
  • 상식은 내가 만든 코드를 이해하기 쉽도록 주석을 다는 것은 필수다.
  • 잘 만들어진 코드는 주석이 필요 없습니다. 쉽게 이해할 수 없는 코드에 주석을 많이 단다고 이해가 쉬워지는 것은 아닙니다. 오히려 명확한 함수명이나 변수명이 더 도움이 됩니다.

6. 모든 컴파일러와 운영체제에서 가능한 호환성
  • 환상은 C/C++ 표준을 만족하면서 모든 컴파일러에서 컴파일 가능하고 모든 운영체제에서 실행가능한 코드를 만든다.
  • 현실은 대부분은 회사에서는 내부적으로 개발환경이 정해져 있습니다. 다양한 개발환경이 있다고 해도 각각 담당자가 따로 있게 마련입니다.

저만의 개똥철학일지 모르겠지만 앞으로 이런 것들을 시간나는데로 차근차근 정리해 보겠습니다. 다른 의견이 있다면 댓글 주셔도 좋습니다. 일리 있는 의견이라면 저도 참고하겠습니다.

Posted by jungtae17
컴퓨터/프로그래밍2011. 8. 3. 15:39


※ 윈도우즈 비스타(윈도우즈 서버 2008) 이상에서만 실행 가능합니다.

@ECHO OFF

REM 변수 선언
SET _RULE_NAME="예제 프로그램"
SET _PROGRAM_PATH=%CD%\Example.exe
SET _DESC="예제 프로그램 입니다.(경로: %_PROGRAM_PATH%)"

REM 방화벽 등록
IF "%1"=="reg" (
  netsh advfirewall firewall add rule name=%_RULE_NAME% dir=in action=allow program="%_PROGRAM_PATH%" enable=yes description=%_DESC% profile=any > NUL
)

REM 방화벽 삭제
IF "%1"=="unreg" (
  netsh advfirewall firewall delete rule name=%_RULE_NAME% program="%_PROGRAM_PATH%" > NUL
)

REM 방화벽 정보 보기
IF "%1"=="show" (
  netsh advfirewall firewall show rule name=%_RULE_NAME% verbose
)

Posted by jungtae17