이 블로그 검색

2023년 2월 24일 금요일

beamer로 presentation 하기.

 


Beamer 작성법

latex code  preamble에  다음을 추가합니다. 

\usepackage{pgfpages}
\setbeameroption{show notes}
\setbeameroption{show notes on second screen=right}

위처럼 작성하면, PDF파일 오른쪽에 노트가 붙어서 나옵니다. 



3:4면 3:8로 나옵니다. 보통은 bottom으로 해서 handout으로 준비하는데 사용한다고 볼 수 있습니다. 

파일 준비는 끝났습니다. 

뷰어 

이제 이걸 어떻게 볼지가 중요합니다. 해당하는 application은 또 누군가 만들어 놨습니다. 

pdf-presenter-console  ->>(fork)->> pdfpc 

위 프로그램을 사용하면 쉽게 presentation이 가능합니다. 



가로 화면과 새로 화면이 섞여서 이상하게 보이긴 하는데 오른쪽 화면이 청중용 2/3왼 쪽이 발표자용이다. 현재 페이지 다음장, 그리고 노트가 표시되고, 이전화면도 볼 수 있다. 

pdf-presenter-console --notes=right main_with_note.pdf

 이 툴을 사용하면 남은시간 쉽게 표시할 수 있다. 

상황이 여의치 않을 때는 web을 이용할 수 있는데, 

https://beamerviewer.pacien.org/

이 링크를 이용하면 간단하게 사용가능하다. 





파일을 선택하면, 다음처럼 두개의 창을 띄울 수 있다. 


원하는 대로 배치해서 사용하면 되겠다. 

2023년 2월 15일 수요일

Xournalpp 에서 수식에 색상 넣는법.. 의외로 간단.

 

자세히 latex sample 파일을 보면,

%%XPP_TEXT_COLOR%% 라는 데이터를 얻어서, 색상이 있는 수식을 출력 한다고 한다.

선을 그리다가, 빨간 수식을 넣고 싶어서 누르면, 해당하는 값이 나오지 않는다. 

그래서, 버그라고 생각하고, git 레포지토리를 고치고 이상한 짓거리를 많이 한 후 한가지를 알아냈다.



아... TEXT_COLOR니까 text box object를 누르고 색상을 바꾼후, 수식을 쓰면 색상이 올바로 나온다.

이 과정중에 cpp의 멋짐을 또보게 된다. 


\definecolor{colorname}{HTML}{6hexcode_color}

 s << std::hex << std::fill(0) << std::setw(6) <<std::right << colorClass;


colorClass {

.....char transparent,red,green,blue;

    operator int32_t() {

        re = (transparent  << 24) | (red << 16) | (green <<8)| (blue)   ) ;

    }

}

   

6hexcode_color  = s.rawtext(); 와 같은 식의... 출력...

c방식의 사고방식이 머리에 차있어서 이런거 볼 때마다 너무 멋짐.


2023년 1월 10일 화요일

던전앤드래곤 쉐도우오브미스타라 법사찌르기 랜덤 데미지 공식.

 Reference[1] 

https://dammit.typepad.com/blog/2011/01/ddsom-critical-hits-random-numbers.html



위 블로그에서 법사찌르기 랜덤데미지를 찾았다.


법사의 강공력은 다른 캐릭터처럼 1.5배의 데미지를 주는것이 아닌, 1도트의 데미지만 주다가 한번씩 엄청난 데미지가 주어진다.

사실 이 문제에 관심을 가진 것은 아니고, ddsom의 무기 공격력 테이블이나, 각 캐릭터별 레벨명 공격력 변경값 같은걸 찾으려고 ddsom + offset +memory  로 검색을 하다가 나온 것이다. 

일단 더 많은 정보는 없었고, 히트박스 관련글이 있었으나 이 부분은 관심이 없다. 



위 블로그 주인장은, 적 유닛의 체력값의 주소를 기억하고 해당 주소값의 데이터를 변경하는 함수 콜을 추적한 것으로 보인다. 


사실 내가 필요 한게 저 메모리주소리스트 들인데 설명을 위한거 말고는 없어서 아쉽다. 


Register A0는 player base 0xff75de(for Player 1) 이고 A1은 공격대상의 베이스라고 한다. (0xFFBA1E for boses) 라고 하는데 무슨 소리인지 잘모르겠다. 저기 있는 메모리 값을 저 레지스터로 읽어온다는 것이겠지.

(저 부분의 코드가 호출 될 때 레지스터에 저게 올라가 있다는건지... )

$19a88.l 이라는 서브루틴은  D0에 2바이트 랜덤넘버를 심는 서브루틴이라고 한다. 
랜덤함수는 알면 게임의 랜덤성을 이용하는데 모두 접근 할 수 있어 좋다. 

작은 바이트의 반만 사용한다라고 써놓고는 나중에는 또 다른 반바이트를 써서 좋 1바이트를 쓴다.

$3ec0와 $3ed4는 테이블 룩업을 하는거라는데 잘 모르겠다. 

아래에 테이블 룩업을 테이블로 표시해놨는데 

그냥 이건 그대로 가져왔다. 


Table Ref[1]

random number
D0 at $3EBE
D4 at $3EC4random number
D0 at $3ED2
D4 at $3ED8
0x0 - 0xA0xFFn/a
0xB - 0xC0x000x0 - 0x50x02
0x6 - 0xF0xFF
0xD - 0xE0x100x0 - 0x30x01
0x4 - 0xF0xFF
0xF0x200x0 - 0x10x00
0x2 - 0xF0xFF



3EBE의 하프바이트를 통해서 3ec4의 값을 설정 하는데 내부 계산을 위해쓰이는거 같고,
다음 D0 at $3ED2의 테이블 룩업을 통해   0,1,2 값을 얻고 그 외에는 1도트 데미지를 주게하고,

0,1,2값을 얻었을 때는 적의 전체HP에다가 저 숫자를 shift-right-bit? 연산을 한다. 

그 결과 다음과 같은 결과를 얻는다. 

full damage1/16 x 2/161/1280.78%
1/2 damage2/16 x 4/164/1283.13%
1/4 damage2/16 x 6/166/1284.69%
1 point damage128/128 - 1/128 - 4/128 - 6/128117/12891.5%


의외로 8.5%의 확률로 빅데미지가 들어간다. 10번 때려서 1/4이상 데미지를 줄 수 있다면 딱히 찌르는데 목적을 둘 필요는 없다. (그냥 콤보용) 여럿이 할 수록 적의 체력이 많아지므로 보스잡는데는는 역시 확실하다. 

음 나중에 테스트로 랜덤함수 결과 나오는 부분을 건드리면, 저게 잘 적용되는지 확인할 수 있을거로 보이지만 지금 당장은 이거할 여유가 없다. 

이어서 뭐 이소리 저소리 있는데  적의 체력은 최대 1000 까지인데, 최대데미지 99제한 코드가 7바이트 연산으로 처리되어서, 100-127일 때만 99로 줄어들고 나머지는 정상적용이라고 한다. 

또 rng 서브루틴의 대한 말도 있는데, 랜덤함수는 여러군데서 호출되므로 임의로 조작할수는 없다고 한다.



2022년 12월 2일 금요일

Libreoffice Calc에서 Libreoffice base로 또는 SQL로 데이터 넣는 방법.

복사해서 붙여넣기로 하면서 에러가 나는 경우가 몇번 있었어서, Sql query 만들어서 하는 방법을 택하였다. SQL query를 만들 때 가장 문제는 문자형의 경우는 "" 로 싸거나, ''로 싸거나 하는 경우가 많다는거다, 그래서 필요한 함수를 먼더 만들어야한다.
도구 >> 매크로 >> edit 매크로
다음과 같은 Basic 함수를 만들어주자.
function dquoted(Optional x)
  Dim iRow As Integer
  Dim iCol As Integer
  DIM resultString As String 
  resultString = ""
 
  If NOT IsMissing(x) Then
    If NOT IsArray(x) Then
resultString =  Chr(34) & x &Chr(34)
Else
      For iRow = LBound(x, 1) To UBound(x, 1)
        For iCol = LBound(x, 2) To UBound(x, 2)
          resultString = resultString &", "  & Chr(34) & x(iRow,iCol) &Chr(34)
        Next
      Next
    End If
  End If
  dquoted = resultString
end function
여러칼럼의 문자 칼럼이 있다면, 쓸 수 있도록 해주었다. 그 다음 부터야 간단하다. 앞 셀에는 insert into tablename ( 를 넣고, 다음 칼럼이 숫자면 그냥 =해당 데이터로 그대로 복사해준다. 문자열로 이루어진 칼럼은 위 함수를 사용해서 =dquoted( 해당 문자열 또는 문자열 어레이) 를 해준다. 이런 식의 반복 후 마지막 데이터 칼럼 뒤에 ); 을 넣어준다. 그 다음에 =concat( insert into 셀부터 ); 까지 선택 그 다음쿼리를 다 선택후 끌어내려서 채우기를 한 후, concat 셀을 모두 선택한 후, base에 가서 sql 명령어 넣기를 하면 자료가 들어간다.

2022년 10월 26일 수요일

kile+fcitx 끝글자 버그 수정법. (kile 코드들 고치는 방식을 시도함)

https://cogniti-works.blogspot.com/2018/09/blog-post_4.html

위 블로그 포스팅을 보고 힌트를 얻어서 하기로 한다. 



한글입력기 끝글자 관련해서 검색해보면, ibus는 문제가 많아서 fcitx로 간다느니 뭐 그런글들이 많다. 하지만 중요한건 내가 fcitx를 쓰고 있는데도 이런문제가 생겼다는거다. 

많은 입력기들은 cjk외에는 ime입력기 같은거 없어도, compose키나 alt_gr키 같은거 이용하면, 되서그런지 중국,일본, 한국 말고는 관심이 없는 듯 하다.  

그러다 보니, 끝글자 버그 이슈는 20년이 넘는 아주 오래된 이슈, 한국인 기준으로는 버그이지만, x-window qt gtk 개발자도 기반 어플리케이션 개발자들도 무관심한 버그이다. 뭐 자기들은 영어나 영어기반 언어 쓴다 이거다. 


여기저기 보면, 코드 고쳐서 입에다 떠먹여줘도 그거 버그 아니라서 이슈 닫는다는 반응을 겪었다는 사람들이 보인다. 

뭐 어쩌겠는가, 목마른 사람이 우물을 파야지. 끝글자 버그는 초성중성종성을 조합해서 글자가 나가기 전에 ime가 조립을 하면서도 화면에는 보여줘야하고 다른 글자를 누르면 수정도 해야하는 복잡한 한글 같은 언어에서만 나타난다. 뭐 로만자(??)를 사용하는 일본, 중국애들도 겪을 것 같은데도 2022년 오늘 내게도 똑같이 일어나는거 보면 , 한글만의 문제인건가 싶기도 하다. 


뭐 이제 더 이야기할 것은 없고, 저 블로그에서, qt, gtk, X11 어떤 gui프레임웍을 쓰는지에 따라 검색해야할 키워드를 주었기에, 반신반의 하고, 검색을 해서 답을 얻었다. 


kde는 qt위에다가 올린 것이니, 

grep -i qinput -R . 이라는 

검색으로 찾았다. eventfilter.cpp라는 파일에 해당하는 부분이 있다. 

kile은 위젯이 워낙많기에 modal dialog가 아닌 widget도 아주 많이 화면상에 비친다. 그렇지만 우리의 텍스트 입력은 당연히 text input 위젯에 바로바로 적용이 되어야 한다. 그러다보니 중앙에서 키보드 event를 감시한다. 

kile은 또 그리스어 특수문자 입력 때문인지, ime event도 감시한다. unicode text가 나올 때, tex format으로 할지 unicode문자를 그대로 보여줄지 뭐 이런걸 하려고 하는거 같은데, qimeevent라는거에... 잠시 속아서 헛짓을 좀 했다. 

다시 돌아와서, 마우스 더블클릭 이벤트 위에서 마우스 press 이벤트를 가져오자. 


 11 +#include <QInputMethod>

 19 +static void  reset_im()  
20 +{

21 +  QInputMethod* ime =   QGuiApplication::inputMethod();
22 +  ime->reset();
23 +}

 31 +    else if(e->type() == QEvent::MouseButtonPress) {
32 +      reset_im();
33 +    }

 34      else if(e->type() == QEvent::MouseButtonDblClick) {
]

QInputMethod 를 Include한다. 
reset_im함수를 static하게 만든다. (네임스페이스 오염방지)
mouse press 이벤트를 받으면 reset_im 함수를 호출한다. 
원래의 마우스 입력 이벤트가 그대로 사용되어야 하므로 return을 하지 않는다. 
(결국은 맨 뒤로가서 return false가 되어 해당 qwidget에 이벤트가 전달)


빌드해서 설치한다. 

결과적으로 끝글자 버그는 사라졌다. 

kate에 이버그가 있언는지 기억이 안나는데 그거 확인하고 고쳐야겠다. 

chrome에는 이 버그가 없는데, 대신, 강제로 조합을 중간에 깨뜨리는 미친 짓거리가 일어난다. 
요거 아무래도, 이벌식 사용자 기준으로 끝글자 버그 해결하려고... 뭐 하다가 이렇게 된거 같은데, 
요건 고칠 엄두가 안나므로, 주소표시줄에서 글자를 만들어서 복붙을 하고 있다. 
아무래도, chrome 에서 EDITOR를 불러서 강제로 텍스트 편집기를 띄우는 플러그인을 찾아봐야겠다. 어차피 짜증나는거, vim이나 emacs라도 올려서 써봐야지.

2022년 10월 25일 화요일

X-Modmap 사용기 - 중분내용물 1. shift-insert -> dead_greek

 


한동안 alt. intl. 영문 키보드를 쓰다가 한글 설정이랑 충돌이 일어나서, 

그냥 basic us 키보드로 돌아온 상태... 그리고 원래 dead_greek은 지원하지 않았음. 

뭐 수정은 쉽게 하지만, 아예 level3를 사용하지 않는 키보드에다가 저런거 설정하기 빡세서,


compose key setup에서 dead_greek 조합은 있으므로 dead_greek만 만들면 되서 

구글링을 하니, StackExchage에서 Shift+Insert로 사용하고 싶다는 사람이 있어서 대충 보고 따라함. 


먼저 

$ xmodmap -pke|grep -i 118

keycode 118 = Insert dead_greek Insert dead_greek


로 입력해서 상태를 보면, 보통은 Insert No_Symbol Insert 이렇게 보면, 근데 나는 이렇게 셋팅되었음

하는 방법은 간단함


$ xmodmap -e "keycode 118 = Insert dead_greek"


이제 완성되었음. 이제 당신은 아주 쉽게 alpha등을 입력 할 수 있음

αβ shift+insert, a   shift+insert, b 로 쉽게 입력 가능함. 

근데 이게 맥에서 붙여넣기 명령이라... 몇군데서 충돌이 있는 것을 방금 발견함. 키를 바꿔야 겠음

$ xmodmap -e "keycode 42 = g G g G dead_greek dead_greek "


3번째 부터는, lock키와 관련되어 있는거 같고, 일단 5개를 입력했을 경우는 적용이 안되므로 다음처럼 하기를 바람.

음. 이건또 적용이 안되네... 보류다. shift insert로는 잘되니 뭐. 


가장 많이 본 글