이 블로그 검색

2018년 11월 27일 화요일

HOMM3)축복마법과 저주마법에 의한 데미지 기대값 변화

고급 저주마법이 반올림인지 올림인지 내림인지를 몰라서 그냥 내림으로 계산했다. 확인해보고 아닐 수 도 있다. 정말 재미 있는 부분은 저주와 축복이 서로 상쇄 관계에 있다는 것이다. 
  축복마법의 효율이 매우 뛰어나다. LV1-3은 고급축복에 대해서 다 1.5를 넘는다. '슬레이어' 마법이 매우 한정적인 상황에서 공격력을 8을 올려줌으로 인해 최대 1.4의 변화율을 보일 수 있게 된다.  블러드러스트나 정확마법도 최대 1.3까지의 변화율을 가지므로, 공격적으로 사용할 때는 블레스만한 마법이 없다.  
  저주마법의 변화율을 보라. 쉴드마법의 변화율이 잘나가야 0.7이고, 에어쉴드마법은 그나마 0.5이지만, 저주마법만 걸리면 천사를 제외하고는 전부 쉴드보다 강력하다. 사실 지혜 없이 슬로우를 안배운 상황에서는, 불마법도 상대적으로 쓸만하다. 
  
블레스 마법의 효율이 매우 좋다.  물정령도 블레스가 걸린다. 다만 마법의 정령은 걸리지 않는다. 
  저주 마법의 효율이 매우 좋다. 다만 불정령은 이프리트 만들면서 코드를 공유했는지 공격마법을 뺀 나머지 마법도 안 걸린다.  걸리는 친구 기준으로는 고급쉴드보다 좋다. 다만 쉴드에 면역인 유닛은 별로 없어서...

공기의 정령은 고급 축복, 고급 저주를 서로 상쇄 했을 때 효율이 최고이다. 
저주에 걸려있는 상태에서 축복을 걸면 9배 강력해진다. 그 반대도 생각할 수 있다. 
축복은 초반 확장하는데 있어서 있으면 좋은 마법이다. 하지만 없을 확률이 높다. 

저주마법의 효율을 보라.  끝내준다. 왠만하면 방패보다 좋다. 블랙드래곤의 경우는 쉴드가 안걸리니, 드래곤을 아낀다면 저주마법이다. 
순서가 이상하다는 것을 지금에야 알았다. 업그레이드 까지 포함해서 하위 3유닛과 그다음 3유닛이 똑같은 데미지라 그래프가 재미있다. 인퍼노의 희망(?)  고르곤과 와이번 이 두 유닛은 축복의 효율이 그리 좋지 못하다. 어차피 와이번은 성벽에서 쏘는 화살 맞아 죽고 고르곤은 머리수로 싸우니 다른 유닛에게 좋은 마법이니 좋은 마법이다. 
  저주마법에 굉장히 허약하다. 저주마법으로 상대하기도 좋고, 쉴드로 내 방어력을 올리는 방식은 파리들이 날아다니면서 툭툭치는 상황에서는 좋지 못하므로, 둘다 고급이면 포트리스 상대로는 저주를 사용하자. 하지만 보통은 슬로우를 건다.


축복효율이 그리 좋지 못한 종족이다. 개는 빌드오더상 밀려 있고, 
임프는 체약체의 비싸고, 그리고 어차피 마법길드에서 안나온다. 
고레벨 유닛들에게 효율이 고만고만하다. 다만 공격력 상승마법의 최강자는 여전히 축복이다. 
  저주 마법이 최고의 공격력 감소 디퍼프마법이지만, 유난히 똥개에게는 강력한 마법이다. 고급 저주가 있다면 똥개는 바보가 된다. 

안 걸리지만 일괄적으로 해봤다. 걸리기만하면 참 쓸만한 마법이지만, 언데드가 축복을 받는다는것은 좀 이상하다. 
  그냥 상대방에게 저주나 걸자 저주나올 확률이 54%라고 한다. 
고레벨 유닛의 축복 효율이 떨어진다. 초반확장에 있어서 매우 쓸만한 마법이다. 초급으로 엘프에게 1.25 고급으로 1.5이다. 고급 기준으로 2발이 세발되는 것이다. 
   일단 저주마법에 걸린다면, 쉴드보다 효율이 좋은 편이다. 그랜드 엘프 기준으로는 공기방패마법보다 좋다. 초급이어도, 그랜드엘프를 저주하도록 하자. 
비슷한 형상이다. 오크랑 고블린이 축복의 혜택을 많이 받는데, 별론 좋은 구성은 아니다. 울프라이더도, 1.43까지 나오므로, 쓸만하다. 초급은 1.14로, 굉장히 효율이 떨어지는 편.

저주마법의 효율은 고급유닛에게는 대략 0.6 언저리, 초급유닛들은 고블린 빼고 0.3 언저리다. 슬로우걸고 하나씩 때려잡다가 하나남은 오우거 무시하고 정리하다 후회하지말고 걸 수 있으면 걸자. 

축복효율이 극히 떨어지는 편이다. 초반확장시에도 초급축복이 그램린에게 효율이 1.33밖에 안된다. (1.33이면 다른 마법으로는 범접할 수 없이 큰 수이긴하지만 ) 나가는 고급기준으로 1.05, 1.03 상승이다. 그래도 3궁수에게 2.0, 1.25, 1.22라는 좋은 비율의 기대값 상승이 있으니 걸 수 있으면 걸자, 
  저주마법이 공기방패마법보다 못하다. 메이지만 같은 효율이다. 나가말고는 옆에 보호유닛들에게는 그래도 쓸만한 효율이다. 나가에게도 0.75,0.77은 되므로 대전투시에는 쓸만한 마법이다. 3궁수 체제에서 근거리 원거리로 이 정도만 되어도 어디인가.



이전 글에 히어로즈의 전투에서 한스택의 데미지 계산방식을 올렸다. 10기까지는 각각 한개체에 대해서 모두 따로 균일한 분포로 최저에서 최대 데미지뽑기를 한다고 하였다. 그렇기에 가운데가 볼록해져, 데미지의 기대값이 중요하다. 기대값을 기준으로 축복마법의 효율과 저주마법의 효율을 살펴보았고, 축복마법의 강력함과 저주마법의 강력함을 보았다. 

  특별히 방어력 상승용 마법의 대안으로 저주를 자주 살펴보았는데, 왠만한 상황에서는 저주가 좋은 대안이 되는 것을 알 수 있다. 

2018년 11월 16일 금요일

Vim 정규표현식 패턴 이해하기.

패턴. (help pattern 하면 나오는 부분에 대한 해설을 할거다. )


2. The definition of a pattern 패턴의 정의.
초짜는 help usr_27.txt를 찾아보시라 :help usr_27.txt라고 하면 됨.



1. 패턴은 가지의 or 연산 결과를 합한다.
  (한국말로 여러가지패턴을 찾을 수 있다.
  사실 패턴간 연산 순서를 말하는건데 concat이니 branch니 이래서 어려움)

pattern ::= branchA \| branchB \|branchC

A를 만족하거나 B를 만족하거나 C를 만족하거나.

예 이철수 \| 김철수 \| 박철수
라고 하면 이철수 또는 김철수 또는 박철수를 말한다.

2. 접붙이기 (And연산) 이다.  (concat이 식물학에서 뭘 의미하는건가?)
이 번에는 순서가 중요하다.
  branch ::=       concat
               or  concat \& concat
               or  concat \& concat \& concat

foobeep\&...   -> 을 해석하면 foobeep이라는 글자에서 foo 글자를 말한다 .
.*Peter\&.*Bob 는 Peter와 Bob을 모두 포함하는 Line 을 가리킨다.

첫번째 검색은 줄 전체를 검색해서 모든 문자열에서 Peter로 끝나는 문자열을 가리킨다. vim help 문서내에서 테스트 해볼 수 있다.

그 다음, 그 문자열을  다시 두번째 concat으로 검색을 한다. 그러면 라인처음에서 Peter 사이에 Bob로 끝나는 문자열을 내뱉는다.

   sjdklfjaslkj Peter klsjdlkfjs Bob kjdsklfjskdljfkl Peter    -- Matched
   lkjdslfkjsdlkjflk Peter lksdjflkjs Bob sdjflksjdlf klsdjflksj -- Not matched

상당히 요상하다.  Peter와 Bob가 모두 포함된 라인은 다음처럼 검색하면 된다.   .*Peter.*\&.*Bob.*
 Peter가 포함된 줄의 Bob만 찾는 다면 .*Peter.*\&Bob이다.

이 패턴이 찾기에 사용될 때는 커서의 위치가 패턴의 시작으로 가므로 중요할 수 있고,  찾아바꾸기에 사용될 때는 패턴의 끝도 중요해진다.

3. concat은 여러 조각으로 이루어진다.
 이미 쓰고 있었다. foo는 f다음에 o가 오고 또 o가 오는 문자열을 말한다.
  f[0-9]b 이 것은 f다음에 0-9중 하나가 오고 b가 오는 문자열 패턴이다.

4. 조각은 한개의 atom 또는 atom의 시퀀스를 말한다.


 piece   ::=      atom
               or  atom  multi
 예)   a*    "" a aa aaa aaa aaaa 등등

5. atom은 한 문자 또는 패턴이다. (??)
  여기서 부터 재귀라는 것을 알 수 있다. 패턴을 정의하는데 패턴을 알아야하니까 사실 그냥 다 패턴이고, 패턴간 연산순서로 기억하자.  그냥 국어적 의미도 필요없고 각자가 생각하는 패턴이 왠만하면 잘 맞으니까 무시하자. 

그냥 글자를 ordinary-atom이라고 부른다고 한다. 뭐 유니코드 같은건 수바이트가 한개의 atom이니까 ascii문자를 의미하는건 아니니까 오해하지 말자.

\(pattern\) 괄호로 묶으면, 온전한 한개의 패턴이 atom이 된다.
v\(abc\)*z 는  vz -> vabcz -> vabcabcz 뭐 이런 것이 되겠지.

저 atom 과 multi를 정의하는거는 쉽게 공부할 수 있다.



3. Magic

  문자열 내에 문자가 문자그대로가 특수한 역할을 맡을 때가 있다 그것을 Magic이라고 한다.  문자열을 최대한 자연스럽게 표현할 것이냐, 아니면 패턴을 최대한 쉽게 타이핑할 것이냐를 어떻게 설정할 것인지 vim에서는 조절할 수 있다.

after:    \v       \m       \M       \V         matches                'magic' 'nomagic'          $        $        $        \$         matches end-of-line          .        .        \.       \.         matches any character
         *        *        \*       \*         any number of the previous atom
         ~        ~        \~       \~         latest substitute string
         ()       \(\)     \(\)     \(\)       grouping into an atom
         |        \|       \|       \|         separating alternatives
         \a       \a       \a       \a         alphabetic character          \\       \\       \\       \\         literal backslash          \.       \.       .        .          literal dot          \{       {        {        {          literal '{'          a        a        a        a          literal 'a'
설정을 해도 딱히 몇개 바뀌지는 않는다. magic을 어떻게 하는지가 패턴을 많이 쓰는 vim하고 perl이 좀 달라서 혼동스러운데, 그럴때는 그냥 명시적으로 해결해라. perl에도 magic 설정이 가능한지는 모르겠다.



          multi     'magic' 'nomagic'  matches of the preceding atom /star   *       \*      0 or more       as many as possible
/\+     \+      \+      1 or more       as many as possible (*)
/\=     \=      \=      0 or 1          as many as possible (*)
/\?     \?      \?      0 or 1          as many as possible (*)
정규표현식은 cmd 창에서 쓰는 ?*하고는 다르다. 그러나 훨씬 다양한 패턴이 가능하므로 숙지하자. 여기가 가장 기본이다. \+도 사실 잘 안쓰인다. 그냥 글자를 한번더 찍어서 표현하자 . a\+ -> aa* 어차피 타이핑수도 동일하다.
/\{     \{n,m}  \{n,m}  n to m          as many as possible (*)        \{n}    \{n}    n               exactly (*)
       \{n,}   \{n,}   at least n      as many as possible (*)        \{,m}   \{,m}   0 to m          as many as possible (*)        \{}     \{}     0 or more       as many as possible (same as *) (*)
  기억하기 어렵지않다. 요거는 보통 dvc10003.jpg 같이 이미지 파일의 자리수와 관련된 일을 할 때 많이 쓴다.
/\{-    \{-n,m} \{-n,m} n to m          as few as possible (*)        \{-n}   \{-n}   n               exactly (*)
       \{-n,}  \{-n,}  at least n      as few as possible (*)        \{-,m}  \{-,m}  0 to m          as few as possible (*)        \{-}    \{-}    0 or more       as few as possible (*)
   요거 중요하다. 그리고 유용하다. 위에 있는 친구들은 전부다 as many as possible이라서 
 아까 있던 Peter.*Bob이라는 글자 지우려다가 한줄 전체를 날리는 경우가 허다하다. 그럴 때는 u를 누르고 요거를 쓰면 된다. 
  정규표현식 지원해주는 프로그램중에 as few as possible 안되는 친구들도 있다. 구리다. 
                                                       E59

/\@>    \@>     \@>     1, like matching a whole pattern (*)
/\@=    \@=     \@=     nothing, requires a match /zero-width (*)
/\@!    \@!     \@!     nothing, requires NO match /zero-width (*)
/\@<=   \@<=    \@<=    nothing, requires a match behind /zero-width (*)
/\@<!   \@<!    \@<!    nothing, requires NO match behind /zero-width (*)
 이거 좀 재미있다.  \@>는 아직 잘 모르지만, 
\(a*\)ab를 검색하면, 저 그룹에 b앞에 a가 포함되도록 하는것인데, 패턴의 중복을 막는 방법이고, 일상적으로 볼 일이 없다. 

이 zero width는 검색은 하되 패턴에는 포함이 되지 않는 것을 말하는데, 찾아바꾸기나, syntax highlighting에 중요하다. 난 김철수를 박철수를 바꾸고 싶다. 뭐 이런 상황에 사용된다. 찾아바꾸기야 통째로 김철수를 찾아 박철수로 바꾸면 되지만 김씨인 철수만 글자를 밝게 처리한다거나는 어려우니 이런기능이 필요하다. 

이 친구들은 위치가 중요한게 아니라 저거 앞에 있는 atom을 수식해주는 것이라 위치를 잘 파악하자.  김철수에 김을 수식할 때는, 김\(철수\)\@= 로 써야해서 좀 해깔릴 수 있으나 그냥 * 같은거라고 생각해야한다.

      ordinary atom      magic   nomagic   matches /^      ^       ^       start-of-line (at start of pattern) /zero-width /\^     \^      \^      literal '^'
/\_^    \_^     \_^     start-of-line (used anywhere) /zero-width /$      $       $       end-of-line (at end of pattern) /zero-width /\$     \$      \$      literal '$'
/\_$    \_$     \_$     end-of-line (used anywhere) /zero-width /.      .       \.      any single character (not an end-of-line)
/\_.    \_.     \_.     any single character or end-of-line
/\<     \<      \<      beginning of a word /zero-width /\>     \>      \>      end of a word /zero-width /\zs    \zs     \zs     anything, sets start of match
/\ze    \ze     \ze     anything, sets end of match
/\%^    \%^     \%^     beginning of file /zero-width           E71 /\%$    \%$     \%$     end of file /zero-width /\%V    \%V     \%V     inside Visual area /zero-width /\%#    \%#     \%#     cursor position /zero-width /\%'m   \%'m    \%'m    mark m position /zero-width /\%l    \%23l   \%23l   in line 23 /zero-width /\%c    \%23c   \%23c   in column 23 /zero-width /\%v    \%23v   \%23v   in virtual column 23 /zero-width
underbar는 잘 써본적이 없고, 보통 줄의 시작과 줄의 끝을 많이 사용한다. 그리고 c언어 등에서 value이름을 바꿀 때 \< \>를 많이 사용한다. 중복되는 부분들이 많아서 이거 생각없이 쓰면 100%에러가 난다. 
int x; 어쩌고 저쪼고 를 복사해서 int y 에 대해서 똑같이 하고 싶다고 복사한다음에 x를 y로 바꾸면 와장창 에러가 뜬다. \로 쓰면 된다.


Character classes {not in Vi}:                          /character-classes      magic   nomagic   matches /\i     \i      \i      identifier character (see 'isident' option) /\I     \I      \I      like "\i", but excluding digits
/\k     \k      \k      keyword character (see 'iskeyword' option)
/\K     \K      \K      like "\k", but excluding digits
/\f     \f      \f      file name character (see 'isfname' option)
/\F     \F      \F      like "\f", but excluding digits
/\p     \p      \p      printable character (see 'isprint' option)
/\P     \P      \P      like "\p", but excluding digits
/\s     \s      \s      whitespace character: and
/\S     \S      \S      non-whitespace character; opposite of \s
/\d     \d      \d      digit:                          [0-9] /\D     \D      \D      non-digit:                      [^0-9] /\x     \x      \x      hex digit:                      [0-9A-Fa-f] /\X     \X      \X      non-hex digit:                  [^0-9A-Fa-f] /\o     \o      \o      octal digit:                    [0-7] /\O     \O      \O      non-octal digit:                [^0-7] /\w     \w      \w      word character:                 [0-9A-Za-z_] /\W     \W      \W      non-word character:             [^0-9A-Za-z_] /\h     \h      \h      head of word character:         [A-Za-z_] /\H     \H      \H      non-head of word character:     [^A-Za-z_] /\a     \a      \a      alphabetic character:           [A-Za-z] /\A     \A      \A      non-alphabetic character:       [^A-Za-z] /\l     \l      \l      lowercase character:            [a-z] /\L     \L      \L      non-lowercase character:        [^a-z] /\u     \u      \u      uppercase character:            [A-Z] /\U     \U      \U      non-uppercase character         [^A-Z] /\_     \_x     \_x     where x is any of the characters above: character
                       class with end-of-line included


\s를 많이 쓰고 의외로 아래 digit류는 기억이 잘 안나서 오른쪽에 대괄호 형식으로, 풀어서 많이 쓰게 된다. 딱봐도 소문자랑 숫자 섞인것 같은거는 정의 안 되어 있다. 


      magic   nomagic   matches /\e     \e      \e       /\t     \t      \t       /\r     \r      \r       /\b     \b      \b       /\n     \n      \n      end-of-line
/~      ~       \~      last given substitute string
/\1     \1      \1      same string as matched by first \(\) {not in Vi} /\2     \2      \2      Like "\1", but uses second \(\)           ...
/\9     \9      \9      Like "\1", but uses ninth \(\)                                                                E68 /\z1    \z1     \z1     only for syntax highlighting, see :syn-ext-match           ...
/\z1    \z9     \z9     only for syntax highlighting, see :syn-ext-match
       x       x       a character with no special meaning matches itself

/[]     []      \[]     any character specified inside the []
/\%[]   \%[]    \%[]    a sequence of optionally matched atoms

/\c     \c      \c      ignore case, do not use the 'ignorecase' option
/\C     \C      \C      match case, do not use the 'ignorecase' option
/\Z     \Z      \Z      ignore differences in Unicode "combining characters".
                       Useful when searching voweled Hebrew or Arabic text.

\e는 고급사용자면 많이 쓸거다. \1 \9는 a-b를 b-a로 바꾼다거나 할 때 많이 쓴다.  vi에는 \( \) 없다고 한다, 얼마나 힘들겠는가... 그런데 vi에 메뉴얼의 패턴은 정의가 재귀적으로는 되어 있지 않겠다. 

\c는 최근에 쓰기 시작했다. grep은 -i 옵션 find -iname 으로 쓰니까 같이 알아두자. 


2018년 11월 15일 목요일

미디) 신디사이저 용, ts또는 trs 커넥터를 사용하는 페달에 대해 알아보자.



  신디사이저나 마스터키보드 후면에 보면 페달을 꽂을 수 있는 폰잭 암놈 커넥터가 있다.


교회에서 많이 쓴다고 알려진, SP4-8의 경우,  'CC', 'Sustain' 이라고 이름 붙여진 암놈커넥터가 달려 있다.

그리고 진짜 싸구려 제품이나, 미니키보드를 제외하고서는 마스터 키보드의 후면에도 'Sustain'이라 이름 붙여진 포트가 존재한다.



  1. Sustain


여기서 가장 간단한 장치는 'Sustain'이라 이름 붙여진 페달이다. 이 페달은 그랜드피아노는 페달 설명을 들어도 잘 모르겠고, 업라이트 피아노의 맨 오른쪽 페달의 역할을 한다.  밟고 있는 동안, 연주한 건반 모두, 소리가 오래 지속되도록 하는 역할을 맡고 있다. 그렇다 보니, 이 페달은 아주 간단한 형태를 가진다.

그냥 스위치의 역할이다. 밟으면 1, 때면 0 또는 그 반대로 작동할 수 있다. 이건 회사 마다 다르다. 딱히 표준은 없는 듯 하다. 하지만 일단 큰 회사 두개를 따라가고 있다. 그래서 딥스위치로 두 회사의 모드를 다 지원하는 페달을 만들고는 한다.

요즘 악기들은 마이크로프로세서가 좋아진 관계로 여력이 있는지, 기계가 부팅될 때를 밟지 않은 상태로 인식하고 있다.

그렇다보니, 그냥 스위치처럼 input, output 딱 두개의 극만 있으면 된다. 전기공학을 검색하면 이런 간단한 스위치도 종류에 따라 다 이름이 있지만 난 전공자가 아니니 대충 글을 쓴다.
  input으로 정해진(3V) 전위로 연결되고, output쪽이 스위치의 상태에 따라 input과 같은 전위 또는 단락 상태가 되니까 나름 간단한 아날로그 회로이다.

2극이면 되니까 TS 폰잭을 사용한다.


2. CC Pedal(Expression or Volume)

다음은 CC 페달이다. 악기에 따라 Expression 페달이나 Volume 페달이라고 불리기도 한다. 전기기타가 사용하는 Expression, Volume 페달과는 회로가 조금 다르다. 다만 세부적으로만 다르다.

CC 페달은 기본적으로는 가변저항 회로이다.  얼마나 밟았는지에 따라, 가변저항값이 바뀌면서, input1, input2 두개의 입력전압의 사이값으로 신호가 output으로 나가게 된다. 한개는 딱히 Sustain에서 들어오던거랑 다를 이유가 없고, 다른 하나는 ground가 아닐 이유가 없어서, 역시 간단한 아날로그 회로이다.


회로는 간단하나 사람의 발로 연주하는 장치이다보니 밟는 정도를 가변저항노브를 돌리는 것으로 변환하는 기계적인 부분에서 단가가 올라간다.

이것도 밟는 것을 땐 상태 어느쪽을 input1쪽으로 할지를 결정해야 하므로 조금 복잡하다. 하지만 거대 악기 기업들을 대부분 따라가므로 걱정하지말자.

이 장치는 input1(input) input2(ground) output 세개의 극이 필요하다. 그래서 TRS 커넥터를 사용한다.

추가로 가변저항에 종류에 따라 페달의 형태 이외로도 존재할 수 있다.
(센서라고 불리는 친구들이 대부분 가변저항이다.  )

3. Half sustain pedal (Half Damper )

  사실 이 장치 때문에 이 글을 쓰고 있다. 이게 어디에 쓰이는지도 잘 모르기 때문에, 이름은 익히 알았지만, 무시했다. 

  요번에 Half damper 커넥터가 TRS라는 것을 알게되어, 도대체 Volume pedal이랑 무엇이 다를까? 그 둘이 혼용이 가능한가에 대해 관심을 가지게 되어 이리저리 검색을 했다. 일단 한국 사이트들은 내 검색이 문제인건지 관심사가 없는 건지 관련 정보를 찾을 수 없었고, 외국 사이트를 검색해서 답을 얻었다. 

답은 간단하다. 그냥 스테레오선으로 이해하면 된다. left, right 두개의 신호가 오는 것처럼, 이 장치도 두개의 병렬 스위치 신호가 들어온다. 회로도만 볼 때는, 두개의 sustain pedal이 있는 것과 같다.  단지 이유를 알 수 없는 트랜지스터가 포함이 되어 있는데 그것은 이해가 더 필요할 듯 하다. 

그렇다면 페달이 하나밖에 없는데, 어떻게 두개의 스위치를 작동을 시킬것인가? 

이전에 이야기한 Sustain 페달 두 종류를 혼용하면 가능하다. 

밟지 않을 때, 1인 회로가 있다. 페달을 밟는 순간 회로가 단락되어 0인 신호로 바뀔 것인다. 그다음 밟았을 때 '1'인 회로가 있다. 꾹 밟았을 때, 회로가 연결되어 '1'인 신호가 나오게 될 것이다. 

하프댐퍼를 알기전에는 두 종의 서스테인 페달이 연주상의 차이가 있을 것이라 생각지 못했다. 하나는 살짝 밟아도 신호가 변하지만 하나는 꾹 밟아야 신호가 바뀐다. 동일한 발동작으로도 다른 연주가 될 것이다. 클러치를 밟는 것처럼 브레이크를 밟으면 사고가 난다. 다른 페달이란 것은 그런 것이다. 

자 그렇다면 이제 중간만 밟는 신호라는 것이 만들어진다. 완전히 땐 상태는 (1,0)신호가 나가고 있고, 반만 밟은 상태에서는 (0,0)의 신호가 나가고 있으며, 완전히 밟은 상태에서는 (0,1) 신호가 나온다. 그 다음은 기계에 들어가서 알아서 잘 해석이 되어, 세가지 상태를 처리하는 것일 거다. 


장비들을 보면, 가끔 한개의 잭으로 두개의 페달을 작동시키는 물건들도 있고, 디지털피아노로 나무로 잘 씌어서 파는 물건들이 있는데, (페달3개) 이러한 물건들은  이 회로 자체를 병렬로 두개의 페달에 연결하는 제품이다.  그리고 3개짜리는 젝을 하나더 연결함으로서 완성이 된다. 


4. 총론 

  정리하면 간단하다.  서스테인 페달은 2극 커넥터가 필요한,1비트 디지털 신호를 만드는 회로이다. 하프 서스테인(댐퍼)페달은 이 서스테인 페달 회로의 병렬회로이며, 3극 커넥터가 필요한  2비트 신호의 디지털 신호이다.   CC페달은  3극 커넥터가 필요한, 가변저항을 이용한 아날로그 회로이다. CC페달이라고 불리기 때문에, 기계에 들어가서는 보통 7bit신호로 0-127의 값을 가진다. (14bit신호도 가능하다. 아날로그로도 처리될 수 있으나 그럴때는 CC페달이라고 부르지 말자 )
  아날로그 신호를 디지털 신호로 바꿀 때는 선형일지 어떨지는 내부적으로 정해진다.(타블렛 펜 신호등처럼) 

  손연주도 안되는 사람들은 여기까지 이 글을 읽었다면 정말 대단하지만 반성하도록 하자. 
나는 더 반성하겠다. 

  
  그림을 넣어야 사람들이 많이 보는 글이 되겠지만 귀찮다. 

2018년 11월 11일 일요일

HOMM3) 베이스 데미지는 어떻게 선택될까?

http://heroescommunity.com/viewthread.php3?TID=20955
의 글을 참조하였으며, 위글 작성자의 실험의 의한 결과이다.
이 글은 폰으로 작성했다.


히어로즈에서 데미지 계산과 관련된 것은 중요한 이 슈 중 하나다 그 계산법에는 베이스 데미지라는 것이 들어가는데 그 계산은 기본적으로 한스택의 유닛이 가지고 있는 최저 데미지에서 최대데미지 곱하기 유닛의 수로 정해진다고 알려져있다.


그렇다면 도끼 창병 100마리 일 경우 최저 데미지 최대 대미지 그리고 그 숫자를 포함하여 계산해 보면 200--300에 데미지 값을 가질 것이다. 그렇다면 200에서 300 사이 모든 정수가 동등한 확률로 선택 될 것인가 아니면 그 사이에 있는 실수가 선택이 될 것인가 어떻게 선택될 것인가는 중요할 것이다.

   다만 실험의 결과로 계산을 해 볼 시 선택되는 데미지는 일정한 간격을 가지는 것을 확인할 수 있다 그 결과는 다음과 같다 스타 계수가 열기 이하일 경우는 경우는 그 숫자만큼 각각의 대해서 정수 난수 발생기를 통해서 동등하게 골라지도록 고른다.

 그리고 그 값을 더 한다.  쉽게 생각하면 열기의  유닛이 각각 한 대씩 때렸을때 데미지를 생각하면 된다 만약 스택이 열기가 넘을 경우는 여기까지 계산을 하고 유닛에 숫자 n 나누기 10을 곧 방값을 베이스 데미지로 선택한다.

 이 결과가 얘기하는 반은 간단하다 숫자가 많던 적던 평균 데미지는 동일하게 정해지고 그 분포는 10기까지는 다르게 정해 쉬다가 그 이후로는 분포가 고정 된다 이런 식으로 계산한 이유는 이상적ㅇ.로야 각 유닛이 한대씩 때리니까 각각 난수를 돌리면 되지만 천기가 넘아가게 되면 난수 발생기를 돌리는 행위도 컴퓨팅파워를 많이 먹어 충분한 부담이 되기 때문일 것이다.

거기다가 숫자가 커지면 커질수록 편차값이 줄어들어(sqrt(N)이지만 한마리당은 1/sqrt(N)) 져 최대데미지가 선택될 확률이 점점 줄어들게되기 때문이다.

뭐 어떻게 하던간에 기대값은 동일하다.

다만 분포가 달라지고 베이스 데미지가 가질 수 있는 값은 각 유닛의 데미지 범위 내 정수 의 10제곱 값중에 한 값이 정해지는갓은 확실하다.


실습을 좀 해보도록하자

일단 마스터 그렘인 4기가 누군가를 공격한다면 베이스 데미지는 다음과 같다.
 1-2 1-2 1-2 1-2 4번 돌려서 정한다.
최소 데미지가 나올 확률은 (1/2)^4 = 1/16이다.
최대도 그러하다.
그리고 모두 고려하면
데미지 4     5        6               7    8
         1/16  4/16   6/16    4/16 1/16
이다. 이런식으로 10기까지만  계산하고 그 이상은 그냥 곱한다. 그렇기에 10기 이상의 마스터 그렘린의 최대(최소) 데미지가 선택될 확률은 1/1024로 동일해진다.

드레드 나이트의 경우는 10기 이상일 경우 나가여왕이랑 동일한 데미지가 선택되려면 15-30 총 16개 중에 선택되므로, 1/2^40 즉 하드디스크 계산법을 쓰면(근사지만 많이 날라감 10^3 simeq 2^10) 대략, 1조번 때리시면 한번정도 선택되겠다.

마리당 30의 데미지를 주고 싶으면 그냥 나가여왕 쓰자....

일단 가짓수만 1테라다. 이거 표로만드는 것도 쉽지 않다.

음 이게 시사하는 바는 간단하다. sod에서는 하단에 최저에서 최대 데미지가 뜨고 HotA에서는 죽일 수 있는 유닛의 수가 뜬다. 최대만 보고 다죽을거 생각해서 전투하면 심히 골룸하다. 데미지가 이지선다형인 그렘린도 4기일때 최대 데미지 잘 안나온다.

불확실성에 기대지 말고 축복을 걸자.


그냥 모든유닛의 데미지는 평균값으로 고정됐다고 생각하고, 사는게 편하다. 

도마뱀전사는 3.5이고, 그랜드엘프은 4x2인 것이다. 마스크맨은 3x2인 것이다.

두대 때리는 친구들은 한스탁당 한번 공격소비으로 난수를 20개까지 돌린다. 최대값은 더 안 나온다.


난수를 많이 쓰는갓을 싫어하고, 정수 난수만 쓰는거보면 고르곤도 적당히 계산하다가. 말 것 같은데 이건 문서를 찾아보던가 직접 실험하서 분포를 그려보도록 하자.


2018년 11월 2일 금요일

HOMM3>석갑 스킬의 쓸모에 관한 글

1. 석갑과 관련된 각종 마법들을 먼저 서술하자. 

  • Lv1 Earth. 석갑 초급 방어력 +3, 중급이상 +6  
  • Lv1 Earth 방패 초급 근접데미지 감소 15%, 중급이상 30% (0.85, 0.7) 
  • Lv3 Air 공기방패 초급 원거리데미지 감소 25%, 중급이상 50% 
  • Lv2 Water 약화. 적의 공격력 -3, 중급이상 -6
여기서 석갑과 방패는 각종 자원이 들지 않고 시청트리에 들어가는 마법길드 Lv1에서 등장하는데다가 흙마법이기 때문에 비교를 많이 당한다. 그렇다면 어떤 마법을 사용하는 것이 좋을 것인지 수치로 비교를 해보자 
2. 석갑에 효율 계산을 위해서 HOMM3의 기본 계산기를 가지고 와서 계산하도록 하겠다.  

이 계산에는 많은 것들이 생략되어 있다. 다만 방어술, 원거리 페널티, 성벽페널티 등은 복리연산이므로 별로 중요하지 않다는걸 말하도록 한다. 공격술, 증오, 행운 등은 계산 방식이 유사하므로 공격술  그래프를 참조하면 된다.

기본 계산은 다음과 같다. 기준은 내가 석갑 사용자일 때를 가지고 하도록 한다. <여러가지 모든 계산을 거치고 복리계산에도 한계점이 있지만 무시하자.>

기본 계산식은 기본데미지 =(공)[minDMG,maxDMG]*숫자 * A1*R1*R2

if ( (RDEF=방어력 - 상대공격력) > 0 )
       then
          A1= 1
          R1= MIN(1-0.025*RDEF, 0.3)
        else
                RATT=-RDEF
                A1 = MAX(1+ 0.05*RATT,4)
                R1 = 1
endif.

로 정해진다.
 
쉴드의 계산은 흙마법 중급이상일때 R2=0.7, 초급이하는 R2=0.85로 한다.


석갑의 계산은 중급기준 {A1*R1}(RDEF+3 or 6)/{A1*R1}으로 석갑마법이 걸리기 전과 비교해서 상대적으로 얼마만큼의 데미지가 감소될 것인지에 대해 계산한 양이다. 

이 계산식을 가지고 libreoffice calc를 통해 표를 만들고 차트를 그려보았다.
요 프로그램은 차트를 예쁘게 그리는 방법을 모르므로, 나중에 다시 gnuplot으로 예쁘게 그리도록 하고, 일단 올려보면 
  빨간색 선은 초급 석갑일 때의 그래프이다. 내 상대방어력이 20보다 크기 시작할 때, 초급 쉴드보다 효과가 좋은 것을 알 수 있다. 다만 상대방어력이 20보다 크기는 쉽지 않다. 대천사나, 대사탄으로 양학할 때는 쉴드보다 좋다.
 
노란색 선은 중급이상 석갑일 때 그래프이고, 같이 움직이는 검정선은 상대방이 공격술 고급일 때의 그래프이다. 행운, 중오 등도 동일한 형태로 살짝 이동한 형태로 그려진다.  상대방어력이 -19로 매우 낮은 상태일 때부터 초급 방패보다는 효과가 크게 그려진다. 다만 쉴드도 흙마법이기 때문에 큰 의미는 없다. 

  상대방어력이 0보다 클때는 검정선과 같이 움직이므로 상대방 능력은 석갑의 효율과 별 상관이 없다. 다만 상대방어력의 한계점 근처이다보니 계산식이  미분불가능한 영역이 있다.  상대방어력이 21,22일 때만 쉴드보다 강력한 기능을 발휘 한다.

재미로 Air shield를 포함했다. 가중치가 굉장히 크다보니, 상대방 궁수에게 계속 얻어맞는 상황이라면 어떤 마법보다 강력하다. 고급 공기마법은 근처에 가기도 힘들다.

중급 흙마법이 있고, 초급이하의 공기마법이 있다면 내 상대방어력이 16보다 큰 순간부터 공기방패보다 좋은 가치를 지닌다.

3. 결론. 
 히어로즈에서 궁수를 상대하는 기본 전술은 상대방에게 근접유닛을 붙이는데서 시작한다. 속도가 빠른 유닛이 없어서 화살공격을 맞아야 하거나, 하는 순간이 아니라면, 방패마법이 대부분 효율이 좋다.
(그리고 조금만 넘어가면 효율이 사라지므로(한계점이라) 그냥 방패쓰자)

  몸이 돌이 되지만, 몸으로 맞는거보다, 방패로 막는게 더 좋다. 다만 이미 돌처럼 단단한 자에게는 돌이 철이 되는 기적이 보여진다. 

  다만 보통 일반적인 상황에서 고급석갑 마법은 초급 방패마법 이상의 능력을 보이므로,(복리) 내파나, 연속번개, 메테오 같은 마법이 없다면 고급 석갑을 이어서 또 써주도록 하자. 
  고급 방어술이 15% 감소이므로 무시할만한 양은 아니다.

4. 번외. - 약화 등등 
상대방이 블러드 러스트가 걸렸을 때는 어떤 것이 효율이 좋은가. 
  그래프가 복잡하므로 여기에는 고급만 넣어서 보도록 하자. HoTA에 오우거 세트가 생겼으니 가끔 블러드 러스트를 겪을 수 있다. (??? 정말 가끔)

  약화는 석갑과 마찬가지로 상대방어력으로 계산하는 양이고 값도 동일하다 다만 흙마법이아닌 물마법이다. 요건 X축을 좀 줄였다. (X축이 부호가 이상하네.)
  고급 스톤스킨은 대부분의  고급방어술에 능력치 이상의 능력을 발휘했다.  블러드러스트 마법은 고급 공격술 정도의 가치를 가진다.

일상적인 상황에서 고급 방패보다. 효과가 있으려면 고급석갑과 고급약화가 동시에 필요하다. 그래서 방패 방패 하는 것이다. 하지만 두턴이나 필요하다는 사실을 기억하자. 방패가 없어도 지나가는 드래곤 플라이를 잡아다가 던져주는 방식을 쓰면 방패보다 강력할 수 있다.
  인챈터가 부대에 있어서 석갑이나, 약화를 사용한다면 냉큼 쉴드를 사용하자. 피해감소율이 마법쓰기 전과 비교했을때, 거의 절반에 육박한다.
  마법의 대지가 있다면, 지니 부대를 최대한 분배하자. 약화나 석갑만 나와도 매우 감사하다.
  한턴만에 데미지를 절반으로 감소할 수 있는 것은 쉽지 않다. 공격술과 방어술과 달리 이건 내 선택에 의해서 전투중 변화하는 부분이다. 

진 초록색 그래프는 블러드 러스트가 걸린 적에게 약화마법으로 상쇄시켰을 때의 데미지 변화이다. 
  상대방이 블러드러스트가 걸렸을 때 내가 어떤 마법을 쓸지를 비교하려면, 쉴드와 Blood>Weak를 비교해야 한다. 뭐 대략 일반적인 상황해서 방패보다. 매우 막강하다는 사실을 알 수 있으나 이런 일은 거의 없다. 블러드러스트 마법자체가 똥이다. 그래도 오우거 메이지가 사이클롭스 옆에 붙어 있는 상태로 다른 녀석에게 블러드러스트를 건다면, 냉큼 드래곤플라이 고기방패를 보내자. 

  Blood+Shield는 그냥 데미지가 어느정도 되는지 보기위해 넣었지 내가 방패를 쓸지 말지를 결정하는데는 큰 의미는 없다.

내가 약화 마법이 걸릴일은 없겠지만, 혹시 걸린다면 즉각 블러드러스트로 상쇄를 시켜주자. 저 그래프의 휘황찬란함을 보라. 마법쓰기전에 유닛위에 올려놓을 때 나오는 데미지 계산 범위가 단숨에 뻥튀기가 된다.

헤이스트나 슬로우는 워낙 중요한 마법이니까, 쓰는거지 적이 상쇄하면서 긍적적인 효과를 주는 마법은 HOMM3에서는 최대한 피해야 하는 마법이다.

  저주마법과 축복마법, 블러드러스트와 약화마법, 헤이스트와 슬로우는 상쇄가 되니 조심해서 써야하고,  헤이스트와 슬로우의 관계는 더 효과가 크다.
  이쪽은 그렇게 무섭다는 땅마법과 공기마법이다.



4. 사족. 내가 포트리스 유저라면, 드래곤 플라이를 아끼지 말아야 한다. 남는 칸은 드래곤플라이 1로 채워넣자. 그리고 반드시 가운데 칸은 드래곤플라이로 채워야 한다. 다른 녀석들은  두자리를 차지한다. 이 유닛을 소모해서 다른 유닛을 모으는게 포트리스 전략의 핵심이다. 적당히 줄여놔야, 성전투일 때도, 성이 쏘는 화살을 이 친구가 맞아준다. 





2018년 10월 24일 수요일

외교술이 게임 프로그램 내부에서 어떻게 작동하는가? (for HoMM III 3.2 & 4.0)

이 글은 http://heroescommunity.com/viewthread.php3?TID=28341 의 글을 구글번역기로 번역한 후 한국인이 읽기 쉽도록 수정한 글입니다.
일단 해당 글도 비판을 받은 부분이 있으니 잘 보시기를 바랍니다.

외교술이 어떻게 작동하는가? (for HoMM III 3.2 & 4.0)

(변수가 많아서 변수를 설명하고 있다. )

1. [Hero_Power]

영웅의 1차스킬 전투능력이 중요하다.
Hero_Power = sqrt ((1 + 0.05 * Attack) * (1 + 0.05 * Defense)); 

2. [Total_Army_Power]

영웅 군대의 총 힘은 영웅과 군대의 힘을 곱한 후 소수점을 버림으로 이루어진다. 
같은 수준의 군대라도 마력영웅이 조금 더 불리하다. 
Total_Army_Power = floor (Hero_Power * Army_Power); 

Army_Power는 아래 링크에서 Fight Value와 유닛의 숫자를 곱한 후 합한 값을 생각하자. 
http://heroes.thelazy.net/wiki/AI_value
점수만 보고 생각할 때, 피닉스가 주당 4기에서 2+1기로 HoTA에서 패치 되었는데, 
피닉스가 아니라 고스트드래곤에게 그런 기회가 와야한다고 생각한다. 아니면 해골변환기에서 좀비를 해골용 뼈 부속으로라도 변환이라도 좀 시켜줬으면... 


3. [k]

k = Total_Army_Power / Neutrals_Power;
 k 값은 서로의 군대의 전투능력의 비를 나타낸다.

4. [Power_Factor] (fixed)

Power_Factor = 11 if k >= 7;
Power_Factor = floor(2*(k - 1)) if 1 <=;= k < 7;
Power_Factor = -1 if 0.5 < k < 1;
Power_Factor = -2 if 0.333 < k <= 0.5; 
Power_Factor = -3 if k <= 0.333;

주의: 0.333은 333/1000을 의미하지 , 1/3을 의미하지 않는다. 
Now I am sure.(확신하단다)

 5. 동정이라고 번역되지만 동질감이 좀 더 해석이 용이 하겠다. [Sympathy]

영웅의 군대에 중립유닛과  같은 종류의 유닛이 존재하는가가 핵심이다. 0과 1사이가 굉장히 크기때문에 멍청한 컴퓨터의성을 점령한 후 주위에 남아있는 고위 유닛은 한마리라도 어디서 보충을 해서 공격하자.

Sympathy = 0 ;영웅의 군대에 중립유닛과 같은 유닛이 존재하지 않을 때.

Sympathy = 1 ;적어도 한종류의 유닛이 중립유닛과 같은 종류일 때, 같은 종류라는 것은 업그레이드, 다운그레이드 관계에 있는 유닛을 말한다. 
Sympathy = 2 ; 같은 종류인 영웅의 유닛이 다른 유닛의 비해 압도적으로 많을 때 포트리스 군대이지만 놀이 압도적으로 많다면 중립 놀군대는 좀 더 영웅의 군대에 합류하고 싶어진다.  그 압도적인을 어떻게 수적 표현으로 나타낼지는 모른다. 
if total number of creatures (or their upgrades/downgrades) of the same kind as neutrals in hero's army are strictly bigger than number of all the other beings in the army;
주의 다음은 합류계산에만 작용한다. 
  길에 있는 중립유닛들 중에 모든 정령류가 들어갈 수 있는 유닛이 있는가 보다. 합류계산에 있어서 공기의 정령을 업그레이드 해서 계산할 때는 땅, 물, 불 정령은 할 수 없다.  그리고 폭풍의 정령을 다운그레이드해서 계산할 때도, 마그마, 얼음, 에너지 정령은 그렇게 하지 못한다. 2레벨 유닛이 숫자가 가장 많으니  컨플럭스를 만들면서 페널티를 준듯하다. 


6. [카리스마 (Ch)]  

Ch = Power_Factor + Diplomacy_Level + Sympathy;


7. [공격성 (X)] (작을 수록 합류)

X = -4 (always)  완전 중립
X = 10 (always) 야만적 중립 
X in [1,7] for 친근한 중립 
X in [1,10] for 공격적 중립;
X in [4..10] for 적대적 중립;
 정수일 것으로 생각된다. 이 값은 새로운 게임을 시작할 때, 저 값 사이의 값으로 난수발생기로 정해진다. 


이제 부터 계산에 들어간다. 

8. 카리스마가 공격성보다 약하면 싸운다.  (Ch

9. 카리스마가 공격성보다 크거나 같다면 다양한 선택지가 생긴다. (Ch>=X)

  • Sympathy + Diplomacy_Level + 1 >= X 이면 중립유닛이 공짜로 합류한다. (같은 수준의 전투력인 군대가 카리스마가 있다고 가정한다. 중요한 것은 이과 정은 9번과정을 거치고 나서를 말한다. 일단 군대로 겁박하는 것이 중요함.
  • 9-1이 아닐 경우 Sympathy + 2*Diplomacy_Level + 1 >= X, 외교술 레벨에 2를 곱한 후, 돈으로 합류를 요구한다. 여기에는 이 중립유닛을 사는데 필요한 총 gold를 말한다. 자원은 요구하지 않는다. 
  • 합류를 거절 했을 때,  Ch>X일 경우는, 중립유닛을 내쫓거나, 공격할 수 있다. 
  • 합류를 거절 했을 때, Ch=X일 경우는 공격당한다. 연립해서 구할 수 있다.  외교술 없이 비슷한 수준의 군대인데, 공짜로 합류한다는 경우나, 군대가 많이 약하지만 외교술로 어거지로 돈으로 구매해서 살 수 있는 경우, 거절하면 항복하거나 죽어야 한다는 것을 명심하자.
쉬움 난이도에서는 모든 영웅은 숨겨진 외교술 기술을 가지고 있다. 기술 없을 때 1, Basic일때 2, advance 및 Expert는 3으로 여전히 최대 3이다.  쉬움 난이도가 아닐 때는, 외교술이 없는 영웅은 계산식을 볼 때, 돈으로 중립유닛을 살 수 없다. 

그외 답변에서 알 수 있는 정보들, X값인 10일 때는 절 대 합류 할 수 없다.
동질감 (2) + 2*3(외교술 전문가) +1  = 9 < 10. 퇴각은 시킬 수 있다. 

2018년 9월 13일 목요일

구글은 android에 외장 메모리 모드 좀 다시 만들어 주면 안되냐...



윈도우는 어떤 형편인지 모르겠다만,

리눅스에서 v30으로 usb 3.0모드로는 mtp나 ptp모드가 작동을 안한다.


뭐 번들케이블이 usb 2.0 type c to usb 2.0 type a인것을 보고 그럴꺼라 생각은 했다만,


수많은 시도를 했지만 안되는 것으로 결론이 났다.


뭐 양쪽 칩셋이 3.0지원하는 칩셋이라 2.0으로도 초속 30MB/s가 나오는 상황이라 큰 불편은 없지만,

그래도 엄청난 속도를 기대하고 케이블을 샀음에도 사용하지 못하는 마음을 좀 알아달라...



LG는 ptp 모드에서 video capture나 image capture를 지원하도록 해봐라...
이런거는 보안 문제 때문에, 제조사가 아니면 못하는 부분인것 같은데,

애플은 quick time player로 이거 가능하다고 알고 있다. 

가능하면 LG gram하고만 그게 가능하게 해주던가...

스마트폰 카메라가 정말 좋은 상황이지만, 방송은 PC로 하는게 관리에 있어서 좋으니까 좀 같이 사용할 수 있게좀 해달라...

뉴스 홈페이지 댓글 관련 플러그인인 LiveRe는 광고 차단하면 작동하지 않습니다.


쿠키를 차단하면 로그인이 되지 않습니다.


광고를 차단하면 댓글을 작성해서 보내기를 누르면 내가 쓴글이 날라가고,
로그인이 안되어 있다고 하거나(로그인 되어 있으나)

그냥 버튼이 먹통이 됩니다.



그냥 이 사이트에서 일시중지 눌러서 글 쓰면 됩니다.

에드블록 말고도 광고차단 플러그인이 있을 수 있으니 신중하게 찾아보세요.

2018년 9월 11일 화요일

연합뉴스 기자에게 오보관련해서 이메일을 보냈습니다. <내용은 복사해서 본문에 첨부했습니다.>

Hyeok KIM

오보가 있어서 연락드립니다. 
1 개의 메일

김혁 2018년 9월 11일 오전 11:34
받는사람: jiks79@yna.co.kr

"왜 페트병 치우지 않는가"…일본 언론, 한국청소년야구팀 비판


위 기사에 "하지만 일본에서는 낯선 장면이다. 2018년 러시아 월드컵에서 일본 팬들은 관중석을, 일본 선수들은 라커룸을 깨끗하게 청소해 박수받았다."

이 부분은 일본언론 인용이 아니라 본인이 쓰신 부분입니다. 하지만 아래
중앙일보 기사를 보면, 선수들이 라커룸을 청소한 것이 아니라 
직원들이 청소를 했다고 일본선수가 해명을 했습니다. 
https://news.joins.com/article/22780370


오보를 들고와서, 일본을 띄우고 자국을 낮잡아보는 기사를 쓰는 이유가 
참으로 궁금합니다. 반드시 고치시길 바라겠습니다.

한국언론이 한국을 공격할 수 있고, 비판할 수 있습니다. 하지만 그 과정에서 오보를 가지고 활용을 한다면, 그건 악의적인 행동으로 보입니다. 
특히 세금을 지원 받는 언론이 그러한 행동을 한다면 반민족 행위입니다. 
--
Hyeok KIM ( Ph.D. Student )
Many-body physics Lab.
Department of Physics, Konkuk University
Seoul, 143-701, S. Korea

2018년 8월 14일 화요일

...호사카 유지 교수의 이야기 중에 놀란 점... 군내 위안소 관련...



역사적으로 군이 위안소를 군내부에 설치하고 운영한 나라는 나치독일과
일제뿐이다.

... ... ...


아이구.

2018년 8월 7일 화요일

SGE) Sun Grid Engine 사소한 Tip!! NFS server setting에 관하여...



자원이 모자란 연구실에서는 root도 node들 계산기로 집어넣어서

클러스터를 구성한다. 그러다보면 빨리 돌리고 싶어서, root node는

직접 disk에 접근하는 경우도 있다고 생각한다. 나같은 경우는

쉽게 docker image에 마운팅 시키려고, 다 똑같은 호스트 위치에 메인 디스크를 마운팅 시켜놓는다.

master node(root node)는 mount -o bind를 사용해서 했고, 나머지는 mount -t nfs를 사용해서 마운트를 했는데,


벌써 세번이나 master node에 계산이 들어간 부분만 transfer state에 빠져서 나오지 않는다.

나머지는 nfs-kernel-server가 (애초에 여러군데서 접근하도록 만들어짐) 관리해서 접근하고,  혼자 다른 방식이다 보니 발생한 결과로 보인다.

일단 master node도 nfs를 사용해서 접근하도록 교체하였다. 

... 아주 훌륭하다. 일단 아직까지는 문제가 없고, 100m 이더넷 스위칭허브에 연결된 원상스 뉴 계산용컴퓨터도 순서대로 하나씩 transfer state를 벗는 모습이 관찰되는 등 아주 잘 관리하고 있는듯 하다.


nfs랑 ... local disk 접근이랑 경쟁해서   local쪽이 죽어버리고 무한루프에 빠지는 거는... 좀 문제가 있는 것 아닌가??? nfs는 뭔가 프로토콜적으로 양보의 미덕을 발휘하기 때문으로 보이는데,


여기서 우리는 복잡한 교통일 수록 서로 양보할 수록 공리적으로 빨리진다는 사실을 알 수 있다. (????????? 이상한 결론이다. ))))))))))))



-0-----------------0--------------0---------------

일단 여러번 돌려보고 결과가 어떻게 되는지 살펴보자...


어차피 서로 충돌이라서 대기하고 있던 잡들이 작업들어갈 때는, 한번도 문제 생긴적은 없다. (어차피 동시에 안 끝나니까...)

아 초장에 잘 들어가야하는데, 왜 양보를 안해서 이상한데 걸리는건지...

뭐 이제 알았으니 잘 됐다.

2018년 8월 6일 월요일

Passmark 싱글 쓰레드 점수의 부질없음....


가장 빠른 친구를 1점으로 했고, LAMMPS 점수는 같은 프로세스의 LAMMPS 코드를 SGE로 돌리는데 걸리는 시간 분의 1로 점수로 생각한다.

일단 결과를 보면 Passmark점수와 실제 성능차이는 세대에 따라 확연히 차이가 난다.

근데 중요한건 nfs 서버가 6700 컴퓨터에 구축되어 있고, i7들은 기가비트 q8400은 100메가비트의 네트워크이다. 뭐 이쪽의 오버헤드가 굉장히 크기는 할텐데, 다른게 길어야 2일 걸리는 작업이 일주일 가까이 걸리는 이유가 될 것 같지는 않다. 일단 내 개인 소유의 기가비트 이더넷 카드를 연결해서 테스트 해보도록 하자.

대충 결론:
샌디브릿지로 오고 초기시대랑 후기 시대가 다르고, 그 이전 세대가 확연히 다르다. 

2018년 7월 27일 금요일

SGE) Sun Grid Engine 연구실 컴퓨터로 재구축..

보이는가 아래와 같이 영롱한 모습의 클러스터 컴퓨터가 완성되어 있는 것을..


일단 my.q라는 queue에 모든 컴퓨터를 박아 넣었고,
hostgroup으로 @fast 에는 내 데스크탑컴퓨터인 i7 6700 pc를  넣고,
잡이 비어 있을때는 가장 먼저 여기에 넣도록 설정했다.
  다음으로 @fastold에는  i7 970 pc와 i7 2600 pc를 집어넣었고,

위  세개의 컴퓨터들은 모두 iptime N6004 연구실 공유기에 직결되어 있다.
(... 허브를 사야하는데,... )

그리고 @old 에는 그냥 옛날 cpu가 들어가 있다.  q8200으로 예상한다.
이 친구는 공유기에 포트가 부족해서 100Mbps 스위칭 허브를 통해서 분배를 하도록 되어 있다. 

일단 master에 nfs-server를 구축을 해서 data를 쓰고 있어서,
빠른 친구들 간에들 그럭저럭 속도가 나오는 편이고,

느린친구들은 cpu를 쓰면서 기가비트 네트워크를 쓸 여력이 없을 것이라, 자위하며 그냥 쓰고 있다. 일단은 이번에 재료비를 다 쓴 상황이라... 내 돈을 쓰던가 해서 8포트 기가비트 허브로 연결을 목표로 하고 있다.

돈을 조금만 더주면 16포트 기가비트 허브 중고를 구할 수 있지만,
폐기처분 되는 권교수님 업체 클러스터에 있는거 들고와서 뜯어 보고 나서는 ... 중고를 쓰고 싶은 마음이 없다.

너무 열심히 사용된 나머지,

내부 방열판 고정핀들이 다 부서져 있는 상황인 것을 보았기에 아마 그런 마음이 드는 듯 하다.  아무래도 PC가 멀쩡할지는 모르겠지만, 제대로된 관리자가 없는 상황이다 보니, 아주 짧은 시간만 쓰고 409호에 처박혀 있었던 것으로 보인다.  409호는 오래된 이과대 친구들은 다 아는 먼지가 아주 많은 창고방이다.

저 위에 있는 @old라는 호스트 그룹에 속한 컴퓨터 친구들이 저 먼지 구덩이 속에서도 현역으로 잘 굴러가고 있었던 것으로 생각하면,  상용서버들이 저모양으로 있던건 아무래도... (오래전부터 꺼져있었다지...) 관리의 문제가 아닌가 싶다.

그냥 허브를 새로 사거나 업체를 불러서 진단을 받았으면 계속 쓸 수 있었을 텐데... (클러스터 두동이면... 가격이 못해도 수천만원 ㅎㄷㄷ )

연구실내에 직접 관리할 수 있는 인원이 없는 이상은 비싼 돈주고 구축해봐야 소용이 없다는 것을 배우는 것인지 뭐 잘 모르겠다.


2018년 7월 23일 월요일

2012년 T24 사건 까지도 벌레라는 단어를 그냥 평범하게 사용했는데, 신기하네...



일베충이란 단어가 나온 이후로, 한국에서는 개라는 단어의 자리를 충이란 던어가 차지해 버렸음....




T24 사건 추억이다.

2018년 7월 20일 금요일

원상이 워크스테이션 ryzen5 2600으로 변경.(pbzip2 test)

SMT(하이퍼쓰레드) 성능이 과장인가 쓸만한가 확인을 해봄.




pbzip2  bzip2


/tmp$ time tar -I pbzip2 -cvf a.tar.bz '(alpha=1,d='*  (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    0m17.179s
user    3m13.663s
sys     0m4.838s

/tmp$ time tar -I bzip2 -cvf a.tar.bz '(alpha=1,d='*      (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    2m16.867s
user    2m16.205s
sys     0m2.733s
일단 bzip2 pbzip2 테스트에서는 따로 프로세서 개수 같은 옵션을 주지 않아도 적당히 잘 최적화해서 돌아감.  

일단 대략 6C/12T에서 8배 정도의 성능 이득을 보고 있음.
(원상이 결과파일이 어떻게 생긴지 관심이 없지만 일단 bzip이나 gzip이나
둘다 465MB로 압축이 되므로 딱히 이거 쓸 이유는 없음)

pigz /gzip


/tmp$ time tar -I pigz -cvf a.tar.gz '(alpha=1,d='*  (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    0m5.315s
user    0m37.190s
sys     0m2.640s
/tmp$ time tar -I gzip -cvf a.tar.gz '(alpha=1,d='*      (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat

real    0m20.482s
user    0m19.309s
sys     0m1.886s
/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  (alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.90
user 32.34
sys 2.09
bzip2 계열과 다르게 여기는 알고리즘이 어떻게 되어 있는지 모르겠지만, 병렬효율이 지나치게 떨어짐. 6C12T로 4배정도의 성능 이득 밖에 없음.  근데 원래 빠른게 더 빨리 끝나는거라. 그리 나쁘지 않음. 
  그래도 코어수보다 성능이 떨어지길래 테스트 해본결과 processor 개수를 10개까지 늘리는 동안에는 조금이라도 빨라지기는 함.  이 테스트는 효율이 워낙 떨어지다보니 외국 포럼에서 해석하기로는 가상코어를 코어수로 인식하지 못하는게 아닌가 라는 추축이 있었서 진짜 그런가 확인해 본 것임.  불도저나 옛날 코어 시리지에 대한 글이긴 했지만... 나도 느리길래 한번 해본것 

일단 코어하나만 써도 pigz쓰면 15%정도의 오버헤드가 생기고, 효율이 극히 떨어지고 뭔가 성능변화도 연속성이 이상함. 아무래도 pigz 코드에 뭔가 이상한게 많이 있나봄. (뭐 한계속도인듯 나중에 다른해석도 있음)


일단 알 수 있는 것, 적당히 잘 짠 코드의 경우, 6C12T 라이젠의  경우  8배 정도의 성능이득이 있음. (그냥 압축파일 짜르는 사이즈 마다 나눠놓고 각자 쓰레드에 일 맡기는 거라 효율이 좋을 수 밖에... )

원상이 코드 기준으로 눈대중으로 q9550보다 대략 2~2.5배 정도 빠름. 
10년도 더 된 cpu랑 비교해서 미안하지만 원상이가 계산 느리다고 해서 산거니까... 충분히 이득...   
비교대상은 윈도우에서 visual c로 Realease한 거랑 gcc로 optimize option 안주고 한거를 비교한거라, -O3, -O2정도면 3배까지도 차이날 수 있음. 

걍 때려박는 성능차이가 2배정도 나고, 세대차이로 인한 명령어 차이가 또 한 1.5배 해서 차이가 나는 것으로 예상됨. 


음 pigz가 pbzip2의 비해 병렬 효율이 매우 떨어지는것 처럼 보여도, pigz를 쓰는게 건강상 좋음. ..(일단 결과가  2.5GB의 데이터이기 때문에 이미 디스크 한계속도의 도달한거라 저 오버헤드는  sata3로 연결된 SSD의 오버헤드일 가능성이 크긴함... 이라고 생각했으나 작업 장소가... /tmp라서... 그냥 구린건가... 
사이즈가 워낙 크니까 /tmp가 어떤식으로 구성이 되있는지를 모르니... 

그냥 빨리 끝나니까 프로세서수 생각하지말고 pigz로 압축하자... 대략 30기가에 1분이라고 생각하면 겁나 빠른거니까... 1분이 4분이 되고, 1시간이 4시간이 된다고 생각하면 이거 쓰게 되어 있음. 



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





wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 12'  -cvf a.tar.gz '(alpha=1,d='*
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 5.47
user 37.23
sys 2.74
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 1'  -cvf a.tar.gz '(alpha=1,d='*   
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 23.30
user 22.34
sys 1.75
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 4'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 6.55
user 24.53
sys 2.64
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 5'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 5.66
user 25.80
sys 2.25
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 8'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 4.29
user 29.35
sys 2.26
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.87
user 32.25
sys 2.16
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 12'  -cvf a.tar.gz '(alpha=1,d='*   
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 5.78
user 37.36
sys 2.68
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.89
user 32.44
sys 2.05
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 11'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 4.03
user 33.52
sys 2.38
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 9'  -cvf a.tar.gz '(alpha=1,d='*   
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 4.07
user 31.06
sys 2.14
wslee@wslee-MS-7A37:/tmp$ time -p  tar -I 'pigz -p 10'  -cvf a.tar.gz '(alpha=1,d='*  
(alpha=1,d=2)Hatree_theta_data.dat
(alpha=1,d=3)Hatree_theta_data.dat
(alpha=1,d=4)Hatree_theta_data.dat
real 3.90
user 32.34
sys 2.09




가장 많이 본 글