2012년 4월 12일 목요일

XML 1.0을 써야하는 이유

참고 : http://www.cafeconleche.org/books/effectivexml/chapters/03.html , http://en.wikipedia.org/wiki/C0_and_C1_control_codes

XML을 쓰다보면 1.1버전이 존재하는데 왜 1.0만을 쓰는걸까 라는 의문이 들었던게 생각나서 정리해 봅니다.

XML 1.1에 대해 알아야 할 모든것은 다음 두가지로 요약될 수 있다.
  1. 사용하지 마시오.
  2. (전문가 한정)혹시 몽고어, 일본 메이지 시대에 사용되다 없어진 Yi음절, 캄보디아어, 암하라어, 몰디브어, 버마어 또는 일부 다른 소수언어로 이야기 하고 있거나 이런 언어를 이용해서 마크업(일반 텍스트가 아닌 마크업임)을 표기하길 원한다면 XML 버전 선언부 속성을 1.1로 설정할 수 있다. 만약 그게 아니라면 첫번째 규칙으로 돌아가시오.
XML 1.1은 다음에 나오는 여러가지를 행하며 이들 중 극히 제한적으로 몇몇 개발자들에게 유용한 것도 있겠지만 대부분의 경우 사용하는것에 있어 유익하지 않다.
  • 네임 문자열(예를 들면 엘리먼트명, 어트리뷰트명, 엔티티명 등등)에 대해 문자열 셋을 확장할 수 있게 한다. 이는 잠재적으로 문서를 이해하기 힘들게 한다.
 
<?xml version="1.0" encoding="UTF-8"?>
<book>
<title>የማቴዎሰ  ወንጌል</title>
<chapter number="">
<title>የኢየሱሰ የትው ልድ ሐረግ</title>
<verse number="">
  የዳዊት  ልጅ፣ የአከርሃም ልጅ የሁ ነው የኢየሱሰ ከርሰቶሰ የትው ልድ ሐረግ የሚከተለው  ነው፤
</verse>
<verse number="">
አከርሃም ይሰሐቅነ ወለደ፤
ይሰሐቅ ያዕቆብነ ወለደ፤
ያዕቆብ ይሁዳነና ወነድሞቹነ ወለደ፤
</verse>
</chapter>
</book>

 
이랬던 것이

 
<?xml version="1.1" encoding="UTF-8"?>
<መጽሐፋ>
<አርእስት>የማቴዎሰ  ወንጌል</አርእስት>
<ምዕራፋ  ዌጥር="፩">
<አርእስት>የኢየሱሰ የትው ልድ ሐረግ</አርእስት>
<ቤት  ዌጥር="፩">
  የዳዊት  ልጅ፣ የአከርሃም ልጅ የሁ ነው የኢየሱሰ ከርሰቶሰ የትው ልድ ሐረግ የሚከተለው  ነው፤
</ቤት>
<ቤት  ዌጥር="፪">
አከርሃም ይሰሐቅነ ወለደ፤
ይሰሐቅ ያዕቆብነ ወለደ፤
ያዕቆብ ይሁዳነና ወነድሞቹነ ወለደ፤
</ቤት>
</ምዕራፋ>
</መጽሐፋ>

이렇게도 쓸 수 있게됨 -_-;
  • 폼피드, 수직탭, BEL 그리고 DC1에서 DC4의 C0 제어 문자들(NUL 제외)들이 XML 문서 상에서 일반 문자 처럼 이스케이프 되어 인식된다. 하지만 정말 의미 없는 기능중 하나다.
  • C1 제어 문자들(NEL 제외)은 반드시 이스케이프 된 문자이어야 한다. XML 1.1이 상위셋이 아닌데다가 XML 1.0과 상호 호환성 또한 유지되지 않는 문제가 있음 (원문의 예시 참고)
  • NEL(2바이트의 CR LF를 단일바이트로 대체하는 문자)을 XML 문서에서 사용할 수 있지만 LF로 파싱됨. IBM의 메인프레임에서나 사용하던 문자로 일반적인 다른 시스템의 에디터에서 열 경우 엉망진창인 문서를 볼 수 있게된다. (원문의 예시 참고)
  • 파서는 아마도(꼭 그럴 필요가 있는건 아니지만) 유니코드 데이터가 정규화 되지 않았다고 클라이언트 어플리케이션에 알릴것이다. 유니코드에서는 동일한 문자가 다른코드 에서도 제공되는 케이스가 있는데 이럴 경우 XML1.1에선 더블케릭터가 아닌 싱글케릭터를 사용해야만 한다.
  • 네임스페이스 접두어가 불명확 할 수 있다. 실제로 사용할 일이 거의 없을 뿐더러 XML1.1과의 호환성을 유지하기 위한 부대비용이 많이 들게된다. (원문의 예시 참고)

2012년 4월 3일 화요일

EBNF(Extended Backus-Naur Form)

참고 : http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form , http://www.w3.org/TR/REC-xml/#sec-notation

1. 정의

컴퓨터 과학에서 Extended Backus-Naur Form(EBNF)는 메타구문 표기법 중에 하나로 context-free grammar(컴퓨터 프로그래밍 언어나 다른 포멀랭귀지를 정식으로 설명하는 방법)를 표현하는데 사용되어진다. Backus-Naur Form(BNF) 메타구문 기술법의 확장형이다.

  • ISO는 EBNF를 표준으로 채택함(ISO/IEC 14977)

2. 기초

EBNF는 컴퓨터 언어의 문법을 설명하는 코드로 터미널심볼과 넌터미널 생성 규칙(어떤 방식으로 터미널심볼이 규칙에 맞는 순서로 조합될 수 있는지를 통제하는 제약사항)으로 구성되어 있다. 터미널심볼의 예로 알파누메릭 문자, 문장 부호 그리고 공백 문자들을 들 수 있다.

EBNF는 생성 규칙에 있어 심볼의 시퀀스 각각을 넌터미널에 할당하는 것으로 정의하고 있다.

digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
digit = "0" | digit excluding zero ;


식의 왼편에 할당된 digit은 넌터미널로 정의 되고 수직바는 선택적임을 나타내며 터미널심볼은 인용부호로 감싸지며 뒤를잇는 세미콜론은 종료문자를 나타낸다. 그러므로 digit은 0이거나 1 또는 2 또는 3.... 또는 9까지의 수가 될 수 있는 digit excluding zero이다

생성 규칙은 연속되는 터미널 또는 넌터미널을 포함하며 각각은 콤마로 구분된다.

twelve = "1" , "2" ;
two hundred one = "2" , "0" , "1" ;
three hundred twelve = "3" , twelve ;
twelve thousand two hundred one = twelve , two hundred one ;


생략되거나 반복되는 것에 대한 표현은 중괄호를 통해 나타낼 수 있다 {.....}

natural number = digit excluding zero , { digit } ;


이경우는 첫째 자리는 1-9중 하나 뒷 자리는 없을 수도 혹은 중괄호의 값(0-9의 숫자)이 임의의 자릿수 만큼 반복될 수 있는것을 나타낸다.

임의 선택은 대괄호를 통해 나타낼 수 있다 [.....] 이는 대괄호 안의 값이 단 한번 혹은 없을 수도 있다는 것을 나타낸다.

integer = "0" | [ "-" ] , natural number ;


그렇기 때문에 integer는 0이거나 -부호가 있거나 없는 natural number가 된다.

3. 심볼 테이블
 
용법                    표기법
definition          =
concatenation     ,
termination       ;
alternation         |
option               [...]
repetition          {...}
grouping             (...)
terminal string   ...
terminal string   '...'
comment            (*...*)
special sequence   ?...?
exception           -

4. simple EBNF

XML의 정규문법은 simple EBNF표기법을 사용한다. 문법상 각 규칙은 형식상 하나의 심볼로 정의 되어진다.
    symbol ::= expression

      심볼은 정규 언어의 시작 기호인 경우 대문자 머릿글로 그렇지 않은 경우는 소문자 머릿글로 쓰여진다. 문자열이 표기된 그대로를 사용해야 할 경우 인용부호로 감싸서 표현한다. 오른 편에 표기된 식(expression)의 내부 아래에 소개될 규칙을 이용하여 단일 혹은 복수의 문자로 구성된 문자열과 매칭시키는데 사용되어진다.

      #xN
      N은 진수 정수이며 ISO/IEC 10646에서 정의 된 코드 포인트(예를 들자면 ASCII는 128 코드포인트로 구성되어 있고 범위는 0에서 7F까지이다)를 의미하며 식에서 표현하는 것은 N에서 정의된 문자와 일치한다.

      [a-zA-Z], [#xN-#xN]
      표기된 범위 내의 어떠한 문자도 포함 된다.

      [abc], [#xN#xN#xN]
      열거된 문자들 중 어떠한 문자라도 될 수 있고 열거형과 범위는 하나의 괄호셋으로 조합 될 수 있다.

      [^a-z], [^#xN-#xN]
      표기된 범위 이외의 어떠한 문자도 포함 된다.

      [^abc], [^#xN#xN#xN]
      열거된 문자가 아닌 어떠한 문자라도 될 수 있고 사용할 수 없는 값의 열거형과 범위는 하나의 괄호셋으로 조합 될 수 있다.

      "string"
      큰따옴표 안에 표기된 그대로의 문자열이 포함된다.

      'string'
      작은따옴표 안에 표기된 그대로의 문자열이 포함된다.

      이 심볼들은 다음의 좀더 복잡한 패턴들로 조합될 수 있다. A와 B는 간단한 식들을 나타낸다.
      (expression)
      expression은 단위로 취급 되며 다음 리스트에 설명된 것과 같이 조합될 수 있다.

      A?
      A이거나 혹은 없거나; 선택적 A

      A B
      A에 연이어 B가 따라옴. 이 연산자는 |(alternation) 연산자보다 상위 우선순위를 갖는다; 예를 들면 A B | C D 는 (A B) | (C D)로 볼 수 있다.

      A | B
      A이거나 혹은 B이거나

      A - B
      B를 제외한 A에 해당하는 어떠한 문자

      A+
      단일 혹은 복수개의 A. 이 연산자(concatenation)는 |(alternation) 연산자보다 상위 우선순위를 갖는다; 예를 들면 A+ | B+는 (A+) | (B+)로 볼 수 있다.

      A*
      0개 이거나 혹은 복수개의 A. 이 연산자(concatenation)는 |(alternation) 연산자보다 상위 우선순위를 갖는다; 예를 들면 A* | B*는 (A*) | (B*)로 볼 수 있다.

      문서 생성시 사용되는 또다른 표기법은 다음과 같다.
      /* ... */
      코멘트
      [ wfc: ... ]
      적격성 제약; XML문서의 생성과 연관된 적격의 문서(wel-formed documents)에 대한 제약 사항을 이름을 통해 판별한다. (well-formedness constraint : XML 기본 문법을 위반하지 않았는지 여부에 대한 제약)

      [ vc: ...]
      유효성 제약; XML문서의 생성과 연관된 유효한 문서(valid documents)에 대한 제약 사항을 이름을 통해 판별한다. (validity constraint : XML문서는 DTD에 문서에 대해 정의 되어 있는데 이것에 대한 위반 여부를 판단하는 제약)

      2012년 3월 25일 일요일

      Logitech Wireless Gaming Mouse G700

      고양이 두마리를 키우다보니.. 녀석들이 책상을 점거하는 일이 잦아서 무선 마우스가 필요하게 됐는데 그렇다고 매번 배터리를 교체하는 것은 귀찮고 유선으로 쓰다가 필요할때만 무선으로 쓸 녀석을 찾다보니 로지텍의 G700과 레이저의 맘바4G가 눈에 띄었는데..

      맘바4G의 가격과 단점들이 너무 컸고 고속휠기능이 필요했기 때문에 결국 맘바4G 출시시기 즈음에 G700을 구매하게 됐고 몇달 사용하면서 느꼈던 점을 적어보도록 하겠습니다.

      제품 정보와 스펙은 Logitech의 홈페이지를 참고하시기 바랍니다.

      먼저 박스와 제품 사진입니다.


      패키지 구성은 매우 단순하며 드라이버도 로지텍 홈페이지 가서 받으라는 녀석이고 -.- 배터리는 산요의 에네루프 1900mAh용량 제품 그리고 수신기, 수신기 연장 케이블, 마우스 케이블로 구성되어 있습니다.

      수신기 연장 케이블에 마우스를 연결할 수는 없고 유선 사용시 반드시 마우스 케이블로 PC와 연결 하여야 합니다. 전원 버튼을 OFF 상태로 두면 유선, 무선 모두 동작하지 않게 됩니다.. 배터리는 그렇게 오래가는 편은 아니라고 하는데 원래 기본 유선 사용에 필요할때만 무선으로 사용하는지라 방전이 될때까지 사용해본적은 없습니다.

      기존에 사용하던 G9x와 비교했을때 감도나 그립감은 개인적으로 G9x쪽이 좋다고 생각합니다. 원래 무거운 마우스를 선호하는 편인데(G9x도 최대 무게 세팅) 좀 가벼운 느낌이고 손에 감기는 느낌이 없다고 해야하나.. 버튼 클릭감도 G9x쪽이 좀더 편하더군요.. 측면 버튼이 몇개더 추가된 걸로 봐서 MMORPG 게이머를 타겟으로 해서 나온 제품 같은데 확실히 FPS용은 아닌듯 싶습니다. 그리고 유무선 감도와 관련해서는 거의 차이를 느끼지 못했습니다.

      무난한 유무선 마우스에 굳이 장점이라고 꼽자면 배터리가 산요 에네루프 제품이기 때문에 필요하면 시중에서 쉽게 구할 수 있다는 정도일듯 싶군요 : )

      마지막으로..


      제품 포장지에 있던 이미지 인데.. 왠지 웃겨서..

      p.s 그러고보니 혹시 패드써클을 생각하시는 분이 계실까 싶어서.. 이 제품용 패드써클은 따로 없습니다;

      2012년 3월 19일 월요일

      Intel Centrino 카드를 데스크탑에서 사용하기..

      이 글은 팁이라고 하기도 그렇고 뭔가 광고성 글이 될듯한 느낌이..-_-;

      노트북에 보통 사용되는 Intel의 센트리노 카드를 데스크탑용 아답터를 이용해서 설치할 수 있습니다. 센트리노 카드의 경우 노트북에서 사용하는 m-PCIe 인터페이스 이고 데스크탑은 일반 PCIe 인터페이스를 사용하기 때문에 이를 변환해주는 아답터가 필요한데 대만의 Bplus라는 회사의 제품에 대해 이야기 해보도록 하겠습니다.



      PCIe 1x 슬롯에 장착되는 타입이며 인텔의 Centrino Ultimate-N 6300을 장착하고 있습니다. 제품명은 MP2W-6300H이며 설치후 드라이버는 인텔 웹사이트에서 받아서 설치하면 정상 작동하게 됩니다. 노트북을 사용하면 볼 수 있었던 익숙한 제어판 화면을 데스크탑에서도 볼 수 있게 되는 것이죠.. : )


      아답터의 경우는 기본 장착 된 인텔 센트리노 카드 이외에 다른 카드들도 장착이 가능합니다.. 일부는 아답터의 USB 포트를 이용해서 노트북에 연결이 가능하기도 합니다(홈페이지의 호환성과 관련한 스펙시트 참고) . 물론 장착된 m-PCIe카드를 노트북에 직접 설치 하는 것 또한 가능 합니다.

      일단 이 제품을 구매하게 된 이유가 기존에 사용하던 USB 타입 제품의 드라이버 문제로 시스템 행이 자주 걸렸던 것과 유선을 사용할 수 없는 문제(아무래도 이게 제일 컸던 --;) 때문에 구매하게 되었는데 가격은 꽤 비쌌지만(배송비 포함 배추14장 정도 들었습니다..) 만족스럽게 사용하고 있습니다.

      혹시 제품을 구매하길 원하는 분을 위한 팁을 몇가지 알려드리자면 일단 결제 가능한 페이팔 계정이 있어야 합니다. 계정의 개인 정보 또한 정확히 입력이 되어 있어야 하며(해당 페이팔 계정 정보의 이메일로 배송 정보를 알려오며 배송지 또한 계정에 입력한 주소로 발송이 됩니다..) 발송이 되면 DHL 특송으로 발송되기 때문에 수도권 기준으로 다음날이면 받아 보실 수 있습니다.

      제품의 장단점을 몇가지 짚어보자면 다음과 같습니다.

      +요소 :
      드라이버가 안정적인 편이며 인텔의 업데이트를 받을 수 있다.
      아답터와 장착된 카드의 개별 활용이 가능하다.
      기존에 사용하던 일반적인 USB타입의 제품에 비해 안정적인 속도를 제공한다(공유기 제한 150Mbps에 144Mbps 정도 나오는군요..).

      -요소:
      가격이 비싸다.
      6300N의 경우 블루투스 기능이 포함되어 있지만 사용할 수 없다(드라이버 문제인지 해당 아답터로는 지원이 불가능한건지 확인해보지 않았습니다..)
      간혹 제품이 인식이 안되는 경우가 있다.(최초 설치 할때 인식이 안되는 문제를 겪었습니다. 메인보드의 슬롯에서 뽑았다 다시 설치했더니 인식을 하더군요.. 보드와의 호환성 문제인건지 모르겠지만 PC전원을 완전히 셧다운 한적이 있었는데 동일 증상이 발생해서 같은 방법으로 해결 했습니다.)

      ** 참고로 Windows 7에서 AMD의 bulldozer혹은 piledriver 코어의 Microcode 업데이트를 적용한 시스템에서 인텔 Wifi 드라이버와 충돌로 인해 블루스크린이 발생하는 문제가 있어 현재는 사용하지 않고 있습니다.

      2012년 3월 18일 일요일

      USB 저장장치로 Windows 7을 설치해보자!

      ODD가 없을경우 OS를 설치하기 위해서 USB 저장 장치를 이용하고자 할때 기본적으로 USB 저장 장치는 부팅이 불가능한 상태이기 때문에 약간의 작업이 필요합니다.


      커맨드 라인에서 diskpart를 실행합니다.


      list disk 명령어를 이용하여 크기를 확인 후 연결된 USB 저장장치를 확인합니다. 여기에서는 disk 3 입니다.(잘못 선택하면 엉뚱한 디스크가 날아가니 주의 요망!)


      select 명령어를 이용해서 disk를 선택한 뒤 clean 명령어를 이용하여 디스크를 초기화 하고 create partition primary명령어를 이용해서 주 파티션을 생성합니다. list partition 명령어를 이용하여 파티션이 생성된 것을 확인합니다.


      select partition 명령어를 이용하여 생성된 1번 파티션을 선택하고 active 명령어로 활성 상태로 설정합니다. 마지막으로 NTFS 파일 시스템으로 빠른 포멧을 진행합니다.

      이제 USB 저장 장치에 OS 설치 디스크를 통째로 복사하시면 USB 저장장치로 부팅해서 설치가 가능합니다.

      이 방법은 USB인터페이스를 갖는 HDD, 플래시메모리 모두 가능한 방법입니다 : )

      2012년 3월 16일 금요일

      작업관리자의 프로세스 우선순위를 기억시켜보자!

      윈도 기본 탑제의 작업관리자에서 특정 어플리케이션 퍼포먼스를 위해서 프로세서 우선순위를 변경할 수 있지만 기억시켜주는 기능은 존재하지 않는다. 하지만 이를 해결할 방법이 있으니..

      Prio(개인 사용시 프리웨어)라는 어플리케이션을 설치하면 다음과 같은 화면을 볼 수 있다.



      Ctrl + Shift + Esc 키를 누르면 TCP/IP라는 탭이 상단에 추가되어 있고 프로세스 정보를 보면 Save Priority라는 항목이 존재하는 것을 확인 할 수있다.. 그렇다 이제 설정한 값이 기억이 되는 것이다..

      물론 설정을 변경하게되면 시스템 크래쉬를 야기할 수 있다는 경고문구는 그대로 뜨며 --; 최적의 설정값은 직접 테스트 해보는 방법밖에는 없다는 숙제가 남겨지게 된다..

      p.s Silent Elevation옵션은 UAC가 활성화 되어 있을때 해당 프로세스를 관리자 권한으로 실행하게 해주는 옵션임..