Friday, September 27, 2013

XML Types

http://markchensblog.blogspot.kr/2011/03/simple-type-vs-complex-type-simple.html?showComment=1380283243046#c6961064122157163970

모든 사용자 정의 simple type은 다른 simple type들의 restriction 아니면 list이다.[1]

반대로 complexType은 애트리뷰트 또는 엘리먼트 (또는 둘 다)를 반드시 가져야 한다.

Simple Content와 Complext Content는 Complex Type의 content가 어떠한지를 가리키는 말이다. 따라서 이들은 simpleType과는 아무 관계가 없다.




[1]
 - 보충: Visual studio에서 xsd 파일을 편집해 보면, <simpleType>에서 선택할 수 있는 것은 restriction, list, union이다.
  • 이 중 restriction은 기존에 있던 type을 제한해서 만든다. 제한하기 전의 원본은 XML built-in type일 수도 있고 사용자가 정의한 다른 simpleType일 수도 있다. 전형적인 예는 xsd:string을 제한해서 문자열의 enumeration을 만드는 것이다(주관식을 객관식으로 만드는 것)
  • list는, "whitespace-separated" list이다. 즉 list이긴 list이되, 구분자가 고작 공백문자 하나이기 때문에 원소 속에 공백문자가 있어서는 안 된다. 따라서 complexType은 원소가 될 수 없고, simpleType만을 원소로 가질 수 있다.
  • union은 C의 공용체와 마찬가지로 여렷 중 하나를 고를 수 있는 것이다. 애트리뷰트 memberTypes에다 whitespace-separated list로 타입 목록을 넣으면 된다.

Saturday, September 21, 2013

XML 네임스페이스 어떤 새끼가 설계했는지

XML namespace 설계한 새끼 죽이고 싶다.

(흐콰한다 흐흐흐...)

일단 이게 한 가지 방법인데, abc가 선언되기 전부터 abc를 알고 있다. (뭐임마?)

다른 방법은 namespace를(더 정확히는 namespace를 가리키는 prefix 'abc')를 계속 쓰기 귀찮으니까
이렇게 쓴다: 이래도 namespace 선언이 마치 attribute처럼 보여서 별로 안 좋아 보인다는 점은 첫 번째 방법과 같다.


Thursday, September 12, 2013

csc x 적분 integral cosecant

적분표(integral table)를 보면

\(\int \! \csc x\, \mathrm {d} x = -\ln | \csc x + \cot x | + C\)로 나오는데,

csc, cot를 피하려고 sin, cos 등으로 고치다 보면 답이 잘 안 나온다.
즉,

\(
\begin{equation}
\begin{split}
\int \! \csc x\, \mathrm {d} x &=\int \! { 1 \over \sin x } \mathrm {d} x
=\int \! { \sin x \over \sin^2 x } \mathrm {d} x
=\int \! { \sin x \over 1-\cos^2 x } \mathrm {d} x \\
&=\int \! { \mathrm {d} u \over u^2 - 1 } \cdots\cdots\cdots (u=\cos x, \mathrm {d} u = -\sin x \mathrm{d} x) \\
&={1 \over 2} \int \! \left( {1 \over u-1} - {1 \over u+1} \right) \mathrm {d} u
={1 \over 2} \ln \left| { 1 - \cos x \over 1 + \cos x }\right|
={1 \over 2} \ln \left( \tan^2 {x \over 2} \right)
\cdots ( \tan^2 {x \over 2} = {1 - \cos x \over 1 + \cos x} ) \\
&=\ln \left| \tan {x \over 2} \right|
\end{split}
\end{equation}
\)

적분표에 있는 것보다 더 간단한 공식이 나왔는데(사실 이것도 적분표에 있는 것이지만)

\(u=\csc x + \cot x\) 또는,
\(u=\csc x - \cot x\)를 분모, 분자에 곱한 후 치환적분하면 된다.
\(u=\csc x + \cot x\), \(u=\csc x - \cot x\) 모두 아래 그림(링크)과 같이 (불연속인 점을 제외하면) 단조증가하거나 단조감소한다.
plot: csc(x)-cot(x)
plot: csc(x)+cot(x)
위에걸 쓰면 \(\ln\|\csc x - \cot x \|\)
아래 걸 쓰면 \(-\ln\|\csc x + \cot x\|\)

답이 여러 가지가 되는 것 같지만 단조증가/감소하는 구간에 맞게 잘 선택해서 써야 할 듯.


Friday, September 6, 2013

MathML Word에 붙이기

MathJax èWord

MS Word 2007부터는 MathML을 문서에 바로 붙여넣을 수 있다.

이 블로그의 거의 대부분의 수식은 MathJax로 작성되어 있는데,
오른쪽 버튼 클릭하고 메뉴에서 MathML 또는 TeX 형식으로 export할 수 있다(폰에서는 못 한다는 얘긴가...).

MathML 형식을 선택하면, 코드가 담긴 창이 열린다. 거기서 코드를 전부 복사한다.

  • 코드가 길어서 마우스로는 선택하기 어려울 테니 ctrl-A, ctrl-C 연타를 추천한다.



그리고 Word에 붙여넣기 하면 안 된다(...) [1]

선택하여 붙여넣기(ctrl-alt-v)를 한 후, 서식 없는 텍스트를 고른다.
아니면 한 번 메모장에 붙여넣어서 html 태그를 제거한 후에, MathML 코드만 붙여넣어도 된다.
잘 붙은 모습[2]

Word èMathJax 

이제 반대로, Word 수식을 MathML 코드로 변환해 보자. 그냥 복사, 붙여넣기를 하면 코드가 아니라 눈으로 읽을 수 있는 것만 텍스트로 저장된다. 예를 들어 \(sin^2x\)는 sin2x로 나타나는 식이다(...)
이는 기본값이 "1차원 형식을 일반 텍스트로 클립보드에 복사"이기 때문이다. 수식 도구에서 저 작은 버튼을 눌러서 옵션을 변경해 주어야 한다.
MathML을 클립보드에 복사하는 것이 우리의 목표이므로
"MathML을 일반 텍스트로 클립보드에 복사"에 체크하고 확인한다.
그 결과는 다음과 같이 엄청나게 긴 코드이다(...)

MathJax도 MathML을 지원하긴 하지만 MathML 코드를 블로그에 붙이기에는 xml 형식의 MathML은 가독성도 떨어지고 손으로 쓰는 게 사실상 불가능하다. 그나마 TeX이니까 느릿느릿 손으로 쓰는 게 가능하지...
이런 제품이 있다: http://www.grindeq.com/


MathML 코드를 붙여넣은 모습[3]:

cos3x=cos(2x+x)=cos2xcosx-sin2xsinx=(2cos2x-1)cosx-2sin2xcosx=2cos3x-cosx-2cosx+2cos3x=4cos3x-3cosx(16)

으아니 이거 왜 정렬이 또 가운데로 되는 거야...
워드에 붙였을 때랑 같은 이유겠지 뭐.
그렇다면 MathML을 TeX으로 변환해주는 사이트를 이용한다:
http://www.orcca.on.ca/MathML/texmml/mmltotex.html (근데 안 된다)








[1] 아니 왜! 분명히 Word 2007에서 MathML 지원한댔는데! Google에서 word 2007 mathML 검색해봤자 그냥 붙여넣으면 된다는 말밖에 없고, 반대로 Word 수식을 MathML로 변환하는 것에 관한 문서만 주르륵 나온다.
이유는 뭐 당연히...MathJax에서 생성해 준 MathML 코드 페이지가 plain text가 아니고 html이기 때문.

[2] 사실 위 식 같이 \begin{equation}\begin{split} \\으로 행을 나누고 정렬한 식은 붙여넣은 직후에는 Word에서 정렬이 흐트러져서 나온다.
이렇게-_-
수식에 오른쪽 버튼을 눌러 컨텍스트메뉴에서 열맞춤을 왼쪽으로 변경해 줘야 한다.

* 이건 수식 전체의 [양쪽맞춤]과는 다르다. 양쪽맞춤은 왼쪽 버튼을 눌렀을 때 나오는 메뉴에 있다.

[3] 이게 제대로 보이기 위해서는 구글 Blogger 템플릿 코드를 수정해야 한다.
<html xmlns:mml="http://www.w3.org/1998/Math/MathML">
이 코드를 삽입해야 하는데, 아마도 <html 태그는 이미 존재할 테니
<html xmlns:abcdefg="xyzwo" xmlns:kmlqpr="12345">
여기에 '추가'를 해야 한다. 즉
<html xmlns:abcdefg="xyzwo" xmlns:kmlqpr="12345" xmlns:mml="http://www.w3.org/1998/Math/MathML">
이런 식이 될 것이다.

창 핸들을 만드는 동안 오류가 발생했습니다

System.ComponentModel.Win32Exception was unhandled   MyForm w = new MyForm IntPtr handle = wnd.Handle;   // Exception occurs here class MyFo...