노무현 대통령 배너

XE 사용기

http://djhan.egloos.com/4237539
이 글의 트랙백 겸 제 사용기가 되겠습니다.

일단 저는 아랄트랜스 홈페이지 와 그 형제격(또는 그 하위격)인 폴라리스 커뮤니티의 관리를 맡고 있습니다.

이제부터 저 두 사이트에서 XE를 돌리면서 느꼈던 점들을 적어볼 생각입니다.



 우선 XE는 XE가 제공하고 있는 내에서는 정말로 좋은 툴입니다.
버튼 몇번 누르면 메뉴가 만들어지고, 더 누르면 게시판이 만들어지고, 조금 더 누르면 사이트가 완성됩니다.
우왕ㅋ굳ㅋ
그래서 홈페이지는 있어야겠는데 수고를 들이기는 아까운 케이스에선 XE는 너무나도 훌륭한 선택입니다.

초기의 아랄트랜스 홈페이지도 이와 같은 성격이었죠.(버전은 1.0.1 이었던걸로 기억합니다)
간단한 다운로드 페이지에 Q&A 정도만 있으면 끝! 그 이외에 뭐가 필요하겠어요?


여기에 아랄트랜스용 AT코드(게임별로 하나씩 할당되는 구조입니다)를 보관하기로 하고 여기에 각각의 게임에 대한 AT코드 그리고 게임 자체의 정보를 모아두는 게시판을 만들었습니다.
이때 XE에서 확장정보 기능이 막 추가된 참이라 게시물 윗부분에 게임 정보를 적는데 이것을 사용했는데 정말 좋더랍니다.

문제는 -_- 딱 AT코드 게시판일때 쓰던 버전이 1.1.5 + 테스트버전이라 어쨌든 다음버전으로 넘어가야겠다~하고 보니
그 다음 버전은 1.2.0인데, 1.2.0이 DB구조를 바꾼다는게 가장 치명적인겁니다!!!

마이그레이션이라도 차라리 제대로 돌아갔으면 말을 안하겠는데, DB구조 바뀌면서 마이그레이션이 제대로 안되서
각 게시물마다 본문만 변환되고 위에 확장정보가 100개 변환되고 이 이후에 변환이 안되면서
모조리 날아가버렸습니다!!!!! [아아아아아악!!!!]

이 때는 걍 업데이트 버튼 한번 누르면 되는줄 알고 딱 쓰려고보니 문제는 터져있고, 일단 문제가 뭣떄문에 발생했는지
확인이나 해보자! 하고 열어보는데,
이건 도통 분석이 안됩니다 -_-; 이건 XE 개발자가 아니고서야 분석이 불가능해요.

제로보드4 시절 뭔가 오동작 한다 싶으면 부분을 찾아서 고치는걸로 해결~? 그딴거 없습니다.
XE는 프레임웤이라서 페이지 하나 불러오는데도
모 든 단 계 하 나 하 나 가 통 제 되 어 있 고, 게 다 가 파 일 이 여 러 개 로 쪼 개 져 있 습 니 다!!!!!!!!
[이건 지금도 절 괴롭힙니다 -_-++]

소 뒷걸음 치다가 쥐 잡은 격으로 어떻게 원인은 찾아서 어찌어찌 고치긴 했습니다만 저때는 그야말로 악몽이었습니다.


또 위에서 적었습니다만, 이건 너무 구조가 '쓸데없이' 복잡해요.
뭔가 이상하게 동작하는듯 해서 XE 홈페이지에 버그로 보고를 하면?
묵묵 부답입니다.
어차피 오픈 소스 프로젝트니까 이건 내가 고쳐서 제보해야 겠다?
불가능합니다. 이걸 고칠 수 있는 사람은 저기 XE 홈페이지에서 이슈트래커에서 작업중이신 분들밖에 없을겁니다.
그러니까 즉, 뭔가를 해보려면 XE 개발자가 되는 것 빼곤 답이 안나온다는겁니다.

또 복잡하다는 것에 대해서 이야기를 더 해보자면,
여태까지(즉 그누보드, 제로보드4 이야기) 홈페이지를 구성하는 방법은 다음과 같습니다.

일단 겉틀을 만들어서 그 겉 틀에 각각의 장식을 달고 그누보드나 제로보드4를 연결합니다.

그래서 결과적으로 구조를 보자면
홈페이지 ⊃ 외부 모듈 ⊃ 게시판
의 모습이 나오게 됩니다...만

XE는 다릅니다.
XE가 이미 프레임웤인 '덕'에 모든 구성요소가 이 프레임웤 안에 들어가야합니다.
그래서 위의 겉틀 이야기는 '같을지도 모르겠'지만 최종 구성은

XE ⊃ 홈페이지(레이아웃) = 모듈 ⊃ 게시판
이 되면서 하나하나가 모두 XE를 고려하면서 만들지 않으면 안됩니다. -_-
이게 무슨 의미인가에 대해서는 이미 XE로 레이아웃을 구성해보신분들은 아시리라고 봅니다.


'만드는' 이야기를 계속해 보겠습니다.
최근 폴라리스 커뮤니티에서 새 개편+레이아웃 변경을 진행하면서
DHTML + AJAX로 돌아가는 홈페이지를 만들고 있는데,
웹페이지 <-> XE 간에 통신하는 방법이 한정되어있고, 어렵고, 또한 개발자가 되게 만듭니다.

제로보드4라면 외부 모듈을 로드하는 방법은 참으로 간단합니다. include로 php파일 불러오면 됩니다.
jQuery+AJAX로도 걍 $(객체이름).load(모듈); 이래도 됩니다.
이 php파일은 원래 상당히 단순하게 짜여있기 때문에 개조도 쉽고 이래저래 쉬웠습니다만,

XE요? 오.. 하느님 -_-
AJAX를 쓰려면 모듈과 통신하거나 간단하게 파일 참조를 하는 방식을 써야하는데
원칙적으로, 모든 참조는 걍 index.php하고만 해야됩니다. 그 이외의 접근은 허용되지 않아요.
?act=뭐라뭐라 해서 각각의 모듈(애드온, 위젯 포함)의 기능을 지정해 줘야 되는데,
물론 통신하는 방법도 api.php에서 API를 사용할 수 있다고는 합디다
이 기능에 대한 매뉴얼? 당연히 없죠.
모든 기능은 일일히 api.php를 열어서 확인해 봐야하고, 통신방법도 직접 알아내야됩니다.

즉, 매뉴얼 따위 제대로 구비된게 없으니까 개발자가 되는 수밖에는 없다는 이야기입니다.

doc.xpressengine.com 에 그나마 함수 이름만 딸랑 적혀있고, 기능설명은 없습니다.
지금 이거 몽땅 새로 개척해서 나온 결과물 '오픈 소스로 커뮤니티에 올려달라'는 이야긴가요?


말이 안 나옵니다.

진짜 짜증이나서 다른 보드로 옮겨가고 싶은 마음도 굴뚝같은데,
XE -> 다른보드로 변환 툴따윈 아까도 그랬듯이 역시나 없고,
만들고 싶어도 위에 썼듯이 개발자 외엔 못만듭니다. 이거 DB 구조가 짜증나게 복잡해요.

그래서 진짜 어쩔 수 없이 XE 쓰고 있습니다.


결국 제가 하고 싶은 말이 뭐냐?
제발 개발자가 안되고서도 기능 좀 쓸 수 있게 해달라는 겁니다.
아무리 Web2.0시대가 되어서 홈페이지=웹프로그래밍이라지만, 우리까지 그럴필요는 없잖아요.
제발 개발자 안되게 매뉴얼이라도 제대로 구비되어 있었으면 좋겠습니다.

새로 모듈 만드는거 한 한달정도 그만두고서라도 저게 우선이라고 봅니다.

by Hide_D | 2009/11/02 17:12 | 트랙백 | 덧글(1)

한글 조사 처리

기본적으로 맨 마지막 글자를 보고
받침이 붙느냐 안붙느냐를 처리하게 되는데,

일단 쓰여있는 방법은

http://winp.egloos.com/1917711
http://ttongfly.net/zbxe/?document_srl=45333

걍 맨 뒷글자를 일일히 확인하는 방법이다.


그런데 뒤에 있는 문서의 글자 목록을 뺀어서 다음과 같은 코드로 확인해보았더니..

#include <stdio.h>
#include <tchar.h>
#include <vector>
#include <algorithm>

using namespace std;

int wmain()
{
    FILE * fp=_wfopen(L"Table.txt",L"wt,ccs=UTF-16LE");
    wstring wstrList=L"가갸거겨고교구규그기개걔게계과괘궈궤괴귀긔까꺄꺼껴꼬꾜꾸뀨끄끼깨꺠께꼐꽈꽤꿔꿰꾀뀌끠나냐너녀노뇨누뉴느니내냬네녜놔놰눠눼뇌뉘늬다댜더뎌도됴두듀드디대댸데뎨돠돼둬뒈되뒤듸따땨떠뗘또뚀뚜뜌뜨띠때떄떼뗴똬뙈뚸뛔뙤뛰띄라랴러려로료루류르리래럐레례롸뢔뤄뤠뢰뤼릐마먀머며모묘무뮤므미매먜메몌뫄뫠뭐뭬뫼뮈믜바뱌버벼보뵤부뷰브비배뱨베볘봐봬붜붸뵈뷔븨빠뺘뻐뼈뽀뾰뿌쀼쁘삐빼뺴뻬뼤뽜뽸뿨쀄뾔쀠쁴사샤서셔소쇼수슈스시새섀세셰솨쇄숴쉐쇠쉬싀싸쌰써쎠쏘쑈쑤쓔쓰씨쌔썌쎄쎼쏴쐐쒀쒜쐬쒸씌아야어여오요우유으이애얘에예와왜워웨외위의자쟈저져조죠주쥬즈지재쟤제졔좌좨줘줴죄쥐즤짜쨔쩌쪄쪼쬬쭈쮸쯔찌째쨰쩨쪠쫘쫴쭤쮀쬐쮜쯰차챠처쳐초쵸추츄츠치채챼체쳬촤쵀춰췌최취츼카캬커켜코쿄쿠큐크키캐컈케켸콰쾌쿼퀘쾨퀴킈타탸터텨토툐투튜트티태턔테톄톼퇘퉈퉤퇴튀틔파퍄퍼펴포표푸퓨프피패퍠페폐퐈퐤풔풰푀퓌픠하햐허혀호효후휴흐히해햬헤혜화홰훠훼회휘희";
    sort(wstrList.begin(),wstrList.end());
    wchar_t wcBase=wstrList[0];
    wstring::iterator iterList=wstrList.begin();
    while(iterList!=wstrList.end())
    {
        fwprintf(fp,L"%c 0x%04X %5d %3d\n",*iterList,*iterList,*iterList,(*iterList)-wcBase);
        wcBase=*iterList;
        iterList++;
    }
    fclose(fp);
    return 0;
}


UTF16-LE에서는 저 글자들이 모두 28씩 차이가 난다는 것을 발견했다 -_-;;

그래서 2번째 페이지에 나온 구분 함수를 개량한 버전이...

bool Has3rdCh(wstring * pstrText)
{
    if(pstrText->length()==0)
        return false;

    bool bRet=false;
    wchar_t wcLast=*(pstrText->end()-1);
    wchar_t wszLast[2]={wcLast,L'\0'};
    if(wcLast<=0x0080)
    {
        if(wcLast>=L'A'&&wcLast<=L'Z')
            wcLast=wcLast-'A'+'a';
        switch(wcLast)
        {
        case L'm':
        case L'n':
        case L'l':
        case L'c':
        case L'M':
        case L'N':
        case L'L':
        case L'C':
        case L'1':
        case L'3':
        case L'6':
        case L'7':
        case L'8':
        case L'0':
            bRet=true;
            break;
        default:
            if(pstrText->length()>=2)
            {
                wchar_t wc2nd = *(pstrText->end()-2);
                if(wc2nd>0x80)
                    break;

                if(wc2nd>=L'A'&&wc2nd<=L'Z')
                    wc2nd=wcLast-'A'+'a';
                if(wc2nd==L'n'&&wcLast==L'g')
                    bRet=true;
                else if(wc2nd==L'c'&&wcLast==L'k')
                    bRet=true;
                else if(wc2nd==L'r'&&wcLast==L'g')
                    bRet=true;
                else if(wc2nd==L'l'&&wcLast==L'e')
                    bRet=true;
                else if(wc2nd==L'n'&&wcLast==L'e')
                    bRet=true;
            }
            break;
        }
    }
    else if(wcLast>=0xAC00&&wcLast<0xD7B0)
    {
        if((wcLast-0xAC00)%28!=0)
            bRet=true;
    }

    return bRet;
}

대강 요렇다
(wstring 클래스를 사용하니 #include <string> 필수)
영어도 약간 처리가 되는 정도인데,
뭐 이 이상을 쓸일 없을듯 하니 걍 놔둘 생각

by Hide_D | 2009/05/23 19:58 | 컴질 - 프로그래밍 | 트랙백

Windows 7 에서 탐색기 초기 위치를 '컴퓨터'로 변경하기.

스누피님의 블루그에 있는
http://snoopy.textcube.com/765 (윈도우 7 작업표시줄 윈도우 탐색기 내컴퓨터 지정)
의 댓글을 인용해서 글을 작성합니다.

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

이래저래 슈퍼바(새로운 작업표시줄)에 대해서 흡족하게 쓰고 있는데

꼭 아쉬운게, 탐색기의 초기 시작 위치가 '라이브러리'라는 점입니다.

이것을 컴퓨터로 바꾸는 간단한 방법이 있습니다.


작업표시줄의 탐색기에 우클릭 -> Windows 탐색기 에 또 우클릭 -> 속성 클릭
대상을

%windir%\explorer.exe /e,
요렇게 바꿔주면.

앞으로는 내 컴퓨터로 뜨게 됩니다.

덧. C드라이브를 초기주소로 하고싶다면
%windir%\explorer.exe /e,C:\
로 입력하면 됩니다.

by Hide_D | 2009/05/18 03:40 | 트랙백

◀ 이전 페이지          다음 페이지 ▶