삽질하는플머

요물덩어리 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 값과 동일. 그냥 까먹을까봐 적어둠. 




GOGO 인코더 테스트 프로그램

이런저런잡다구리

설명은 천천히... 일단 바이너리부터. 



enctest.zip



실행결과는 비슷하거나 미묘하게 빠름. (그 이유는 결과물을 보면 짐작이 될 것임...)





이건 소스. 터보델 or BDS2006. 

비베 소스를 보며 GOGO.dll 의 헤더를 번역하다가... 나중에 보니 배포판에 함께 제공되고 있어 갈아탐. 

그래서 지저분... 열어보고 흉보기 없음. 


enctest_src.zip



DLL 소스는 여기. 
http://www.marinecat.net/free/windows/mct_free.htm

윈 7에서는 설치가 안되지만, 실행파일 "wing313a.exe" 의 압축을 7zip 으로 풀면 됨. 

mingw 기반의 간이 빌드환경이 제공되므로 compile.bat 실행하면 gogo.dll 이 얻어짐. 


VBinDiff 로 비교한 화면도 첨부함. 


윗부분이 gogo.dll 의 결과물. 아래쪽이 닷넷버전의 우월성을 주장하는 myMP3Enc 의 결과물. 




세세한 내용은 조금씩 다르지만 결과물의 크기가 같고 구조도 거의 유사함. 

무엇보다 도입부의 GOGOGO... 어쩔... 

gogo.dll 의 라이센스는 LGPL인데... 그걸 정적으로 링크하고 닷넷버전의 우월성 어쩌구라니...
설령 gogo 프로젝트 전체를 닷넷으로 컨버트 했더라도 배포에서 이미 라이센스 위반... 

코드 배틀은 개뿔... 전형적인 셰이머...



LGPL에서 의미하는 정적링크란, 해당 라이센스가 적용된 코드를 라이브러리로 분리하지 않고 

실행파일에 포함하는 모든 행위를 일컫습니다. 

C#에는 정적 링크 기능이 없다고 지적하시는 분이 있어 첨언 해 둡니다. 


(별걸 다 트집... 졸라 꼼꼼히 읽었나보네... 안스럽...)




순수 닷넷으로 짜여진 콘솔 어플이라면서... mono 2.10 에서 시작도 못하고 뻗는 모습은 덤...






2013년 7월 10일 덧붙임. 


이 블로깅에 대한 그 분의 반응. 




LGPL 에서의 정적 링크 이야기는 이미 했으니 생략하고...

볼포 시삽이신 박지훈님이 알아내신 정보가 좋은 답변이 될 듯. 


myMP3Enc.exe 내부에 선명히 찍혀있는 "GOGO.DLL" 이라는 문자열... 저거 어쩔... 푸훗~~



아주 긴 웨이브 파일을 인코딩할 때, 숨김파일이 먼저 생성되고 나중에 나타나는 것도 GOGO.DLL의 방식과 동일... ^^;




맥에서 InkScape 등 XQuartz 응용프로그램의 폰트를 바꿔보자

여가생활/맥과 아이폰

연초에 했던 이런 저런 결심중 한가지는, 블랜더 같은 3D 도구를 손에 익히는 것이었는데...

먹고 살기 바쁘다보니 벌써 4월로 접어든다. 

그냥 2D라도 제대로 익혀보자고 계획 수정... InkScape 를 내려받아 깔아보았다. 




우엨~ 화면이 저게 뭐야~~ 메뉴의 한글폰트가 초안습... ㅠㅠ;

성격이 나빠서 저런 화면에서는 아무것도 못한다. 


"XQuartz + 폰트" 로 구글신께 문의... 지훈현서님의 블로그를 신탁으로 내려주심. 


WireShark 처럼 InkScape 또한 XQuartz를 사용하므로 요령은 동일. 터미널을 열고 InkScape 어플 디렉토리로 이동한다. 


# cd /Applications/Inkscape.app/Contents/Resources/themes/Clearlooks-Quicksilver-OSX/gtk-2.0

# vi pre_gtkrc 



pre_gtkrc 파일에서 gtk-font-name 을 찾아 주석처리하고 원하는 폰트로 바꿔놓는다. 


#gtk-font-name="Lucida Grande 10"

gtk-font-name="나눔고딕 10"



이제 다시 실행시켜보면 짜잔~~
삐뚤빼뚤하던 메뉴의 폰트가 깔끔하게 변했다. 



이제 뭣 좀 할만해지네~~


프로그래머를 위한 2D 게임아트 강좌를 보며 끄적여본 첫 낙서. 손은 졸려서 다음에... 

역시 뭐가 바로바로 보이는 2D가 킹왕짱임~~