삽질하는플머

요물덩어리 emscripten. 세번째.

탐구생활/WEB 관련
텍스쳐를 부르기 위해 zlib 링크. 
간단할 줄 알았는데... 문서대로 되는 게 거의 없네... 
결국 해법은 "emcmake cmake"...  

아무튼 이제야 뭔가 동작하는 것 처럼 보인다. 

처음에는 단순히 예전에 써먹던 고정파이프 방식을 처리하는 셰이더면 충분하다 싶었는데
가지고 놀다 보니 이거 참 편하고 좋은 물건이었군... 


화면 클릭, 우클릭은 Y축 회전.
W키는 와이어 프레임.
L키는 조명 테스트. 

(가끔씩 github.io 가 반응이 없네...)


 



2017.3.30. 

컴파일결과를 올려놓았던 구글드라이브 호스팅이 작년 언제쯤부터 정지되어 먹통이었는데... 

차일피일 미루다 github.io 로 이동시킴. 


요물덩어리 emscripten. 두번째.

탐구생활/WEB 관련

VBO, IBO 붙이고 행렬스텍과 초간단 조명 구현. 
모델은 뭘 쓸까 하다가... "개발자에게 배우는 게임 개발 테크닉" 에 들어있던 ASE를 변환해 붙여봄. 

네이티브에서는 대충 굴러가는 코드가 emscripten으로 빌드만 하면 까탈스럽게 에러를 토해내는데
그래도 삽질하면 어찌어찌 돌아가기는 하네. 

황당했던 경험에 순위를 매겨보면... 
1. char 세 개로 패킹한 노멀좌표가 끼어있으면 정점 stride가 먹지 않음. 정점 구조체 크기는 4의 배수여야 함. 

2. std::vector 만 쓰면 쏟아지던 에러. library-glfw.js 내부에 공백대신 낑궈져있던 문자를 지워 해결. 

3. 셰이더에 보낸 정점은 셰이더 내에 어떤 형태로든 써먹어주어야 함. 안그러면  아무것도 표시 안됨. 


이제 텍스쳐만 발라주면 그럴듯하겠다. 




화면 클릭, 우클릭은 Y축 회전.
W키는 와이어 프레임.
L키는 조명 테스트. 




요물덩어리 emscripten

탐구생활/WEB 관련

요물덩어리 emscripten 가지고 노는 중. 

좀 더 멋진 예제였으면 좋겠지만... 
고정파이프라인에 익숙한 구닥다리에게 셰이더는 고문이다. 

일단 뷰, 프로젝션, 버텍스만 받게 해서 뱅뱅 돌려봄.

emscripten 1.25.0 
OpenGL ES 2.0 
GLFW 3.0 의 event.c 예제기반. 


[티끌팁] MySQL 테이블 구조 엑셀로 출력

탐구생활/WEB 관련

블로그에 쌓인 먼지 털기용으로 올리는 티끌만한 팁. 


MySQL의 테이블 구조를 엑셀로 정리하라는 요청을 받음. 

스키마 생성 SQL만 던져주면 딱 좋겠지만, 세상 모든 사람이 개발자는 아니니... 


수백개의 테이블을 하나 하나 예쁘게 정리하는 작업은... 막내에게 시킨다고 해도 입이 한 뼘은 튀어나올 일... 

뭐 좀 편한방법이 없을까 구글신께 의탁하니 다음 신탁을 내려주신다. 


http://sourceforge.net/projects/exportmysqldbst/


오호~ 입맛 당기는데??


테이블을 만들어 테스트 해 보자. 

1 CREATE TABLE  `testdb`.`testtbl` (
2   `ID` INT NOT NULL COMMENT  '아이디',
3   `Name` VARCHAR( 30 ) NOT NULL COMMENT  '이름',
4   `Desc` TEXT NOT NULL COMMENT  '설명'
5 ) ENGINE = MYISAM COMMENT =  '테스트DB';


결과는 흐음... 




약간 아쉽지만 쓸만하다고 생각했는데...

깐깐한 요구자는 필드 설명도 달아달라네. 필드타입도 길이와 분리되었으면 좋겠다고 하고... 


해서 뚝딱뚝딱 수정한 물건. 


MySQL_DB_Structure_to_Excel.7z



SHOW COLUMNS 대신 INFORMATION_SCHEMA.COLUMNS 을 사용했고, 

UTF-8을 인식하지 못하는 엑셀을 위해 리틀엔디안 형식의 UCS-2로 출력한다. 


기존 dbDesingExport.php 대신 수정한 dbDesingExport2.php 를 사용해 출력한 결과는 다음과 같다. 






이제 막내에게 색깔 대충 입히고 줄 몇 개 그어주게 하면... 업무 종료~ ^^



php-xmlrpc 에서 시간함수 문제

탐구생활/WEB 관련

상황은 이렇다. 


델파이로 만든 XMLRPC 클라이언트에서 "시간값"을 인자로 PHP로 만든 XMLRPC 서버의 함수를 실행하고

이 값을 MySQL의 타임스탬프 필드에 저장하자. 


xml-rpc 의 시간표시는 iso 8601 에 따라 다음과 같이 표시된다.

  • 2011-08-24T00:00:00

xmlrpc.inc 에는 이 형식과 유닉스 타임스탬프 사이의 변환을 위해 iso8601_encode, iso8601_decode 함수가 정의되어있다. 
이렇게 변환한 유닉스 타임스탬프값을 MySQL에 집어넣기 위해 MySQL 내장함수인 FROM_UNIXTIME() 을 사용해 봤는데
클라에서 전송한 시간보다 +9 시간 더 나오는 문제가 발생. iso8681_decode의 두번째 인자에 1을 주어 UTC로 풀어도 마찬가지.

RPC 테스트중인 윈도의 PHP는 현재시간이 UTC로 설정되어있다. 그런데 시스템시간은 한국. 그래서 생기는 문제인 듯. 
실제로 다음과 같은 코드로 타임존을 설정하면 제대로 처리된다.


date_default_timezone_set("Asia/Seoul");


NAS, 또는 우분투의 PHP에서 echo date_default_timezone_get(); 을 찍어보면 Asia/Seoul 이 잘 출력되는 것을 보아 윈도용 WAMP의 PHP에서 시스템의 설정을 읽지 못하는 문제로 보인다. 그렇다고 코드에 저걸 무조건 박아넣기도 골룸.


date로 문자열 꾸미기도 시도해 봄. 


1 $tt = iso8601_decode($ExpireDate);
2 $ts = date("Y-m-d G:i:s", $tt);

하지만 iso8601_decode 내부에서 gmmkttime, 또는 mktime 을 실행시키면서 타임존 문제가 생김. 


뭐가 어쨌건 시스템의 날짜 설정과 무관하게 델파이에서 전송한 시간값을 MySQL에 입력하기만 하면 되므로...
iso8601_decode 의 앞부분을 흉내내 이렇게 만들어 봄. 

1 function iso8601_time_to_mysql($idate) {
2     if (preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/', $idate, $regs)) {
3         return sprintf("%s-%s-%s %s:%s:%s", $regs[1], $regs[2], $regs[3], $regs[4], $regs[5], $regs[6]);
4     } else
5         return NULL;
6 }    


요는, php의 시간변환 함수를 사용하지 말자는 것. 
비슷한 요령으로 역변환도 만들어 둠. 

1 function mysql_time_to_iso8601($idate) {
2     if (preg_match('/([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})/', $idate, $regs)) {
3         return sprintf("%s%s%sT%s:%s:%s", $regs[1], $regs[2], $regs[3], $regs[4], $regs[5], $regs[6]);
4     } else
5         return NULL;
6 }


이제 델파이에서 의도한 시간값이 PHP를 거쳐 MySQL로 제대로 꽂힌다. .



여담으로, date('Z') 로 얻어낸 값에는 현재 설정된 타임존과 UTC 사이의 분단위 시간차이가 들어있다.
GetTimeZoneInformation() 으로 얻어낸 TimeZhoeBias 값과 동일. 그냥 까먹을까봐 적어둠.