기본에 충실하고자 하는 GIS 엔진

어제 대전의 모기관에서 GIS 솔루션 소개를 해달라는 요청을 받아 가서 소개를 해주었습니다. 최근 몇몇 업체에서 GIS 솔루션 문의를 해오고, 뭔가 차별화된 무엇이 없을까 고민하고.. 저희 제품이 오픈소스 제품군과 타업체의 제품과의 차이점이 무엇일까를 고민했더랬습니다. 아직 결론은 내리지 못했지만 일단 차별화 이전에 먼저 ‘기본’을 갖춰야 한다는 생각이 들었습니다. 제대로된 기본 바탕 위에 차별화된 무엇이 올라가야 제대로된 차별화가 아니겠느냐는 생각말입니다.

기반의 다른 말은 기본이라고 생각합니다. 이런 생각이 옳다고 한다면, 기반 기술이 뛰어 나다는 말은 기본에 충실하다는 말일 것 입니다. 기본 기술은 뛰어나거나 화려하지는 않은 것 같습니다. 그러나 정말 뛰어나다거나 화려함 속 깊숙이에는 충실한 기본 기술들이 모인 것입니다. 아직은 뛰어나다거나, 화려하지는 않지만 늘 기본에 충실한 기술을 갖추기 위해 노력하고 싶습니다.

좌표와 속성을 갖는 데이터를 통해 최대한 사용자가 쉽게 인지할 수 있도록 지도(Map)로 표현하는 작업을 합니다. 수년전이나 지금이나 크게 달라진 것은 없고, 단지 소소한 개선만이 있을 뿐이지만.. 그 소소함에 온통 많은 신경을 쏟아 부었다는 이유로.. 다른 누구보다도 이 작은 것을 이뤄 나가는 노력과 결실의 합에서 기쁨을 느낍니다. 이러한 노력과 작은 결실들이 모여 만들어진 시너지로 제대로된, 멋진 차별화된 솔루션으로 발전하기를 바랍니다.

[JavaScript] UTF-8 코드값으로부터 String 구성하기

UTF-8은 ASCII 코드값은 1바이트로, 유럽권 문자는 2바이트로, 아시아권 문자는 3바이트로 구성함으로써 전세계 모든 언어를 처리할 수 있는 유니코드 중 하나입니다. 저는 기존에 편의상 EUC-KR을 사용했으나 이제부터는 UTF-8을 먼저 고려하고 사용해야한다고 생각하게 되었습니다.

아래의 코드는 DataView 객체에 저장된 UTF-8 코드값으로부터 String으로 구성하는 코드입니다. 변환 속도를 위해 다소 코드가 난해 합니다. 제가 개발한 서버에서 문자열 데이터를 UTF8로 인코딩된 바이너리 데이터로 웹브러우저로 보내게 되는데 이때 사용한 코드입니다.

function getStringUTF8(dataview, offset, length) {
    var s = '';

    for (var i = 0, c; i < length;) {
        c = dataview.getUint8(offset + i++);
        s += String.fromCharCode(
            c > 0xdf && c < 0xf0 && i < length - 1
            ? (c & 0xf) << 12 | (dataview.getUint8(offset + i++) & 0x3f) << 6 
            | dataview.getUint8(offset + i++) & 0x3f
            : c > 0x7f && i < length
            ? (c & 0x1f) << 6 | dataview.getUint8(offset + i++) & 0x3f
            : c
        );
    }
    
    return s;
}

짧은 코드이지만 몇일 동안 고민하고 고민하던 차에 만난... 저에게는 매우 의미있고 값진 코드입니다. ^^;

[JavaScript] String을 XMLDocument 객체로 변환하기

일반적인 XML 형식으로 구성된 문자열을 파싱(Parsing)하기 위해서 XMLDocument 객체로 변환해야 할 경우가 있습니다. 저 같은 경우 Cross Domain 문제로 인해 Proxy를 통해 통신을 하고자 했는데, 해당 Proxy 서버가 다루는 데이터가 범용인지라 이 서버를 통해 AJAX 통신을 하면 XML 객체로 받아지지 않고 Text로 받아지는 문제가 있어 부득이 String을 XMLDocument 객체로 변환해야 했습니다.

function getXmlFromString(xmlStr) {
    var parseXml;

    if (window.DOMParser) {
        var dp = new window.DOMParser();
        return dp.parseFromString(xmlStr, "text/xml");
    } else if (typeof window.ActiveXObject != "undefined" 
        && new window.ActiveXObject("Microsoft.XMLDOM")) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        
        return xmlDoc;
    }

    return null;
}

추천 모바일 게임, Slay

요즘 하는 게임, Slay. 더 넓은 영토로 확장해 나가는 게임. 쉽게 말해 ‘땅따먹기’ 여러가지 생각을 하게 만드는 게임. 재미도 있지만 철학이 있는 게임. 처음 시작은 작은 영토에서 시작하면서 한명. 영역은 곧 자원이고 자원이 늘어날때마다 또 한명이 추가된다. 두명의 힘을 합치면 더 큰 능력을 가진 또 다른 한명이 된다. 그러나 소모되는 자원은 처음보다 3배가 더 필요하다.

사용자 삽입 이미지

일하다가 잠시 쉬면서, 또는 전철에서 하고 나면 머리가 지끈지끈한… 그러나 철학이 있어, 게임 중에도 그리고 끝난 후에도 생각을 하게 만드는 그런 좋은 게임. 화려함은 없고 규칙은 단순하며 삶에서 일어나는 것들을 어느 정도 투영하고 있는 게임, Slay. 개발자로써 이런 게임하나 만들어 보고 싶은 생각이 드는 게임이다. 정해진 시간 안에 끝내는 것이 아닌지라 천천히 생각해 가면서 결정하면 되는 신중하게 진행할 수 있는 기다릴 줄 아는 게임이다.

처음 확장을 위해 좋은 곳에 터를 잡아야 한다. 터가 나쁘면 아무리 뛰어난 능력이 있을지라도 확장하기 불가능하다. 다행히 이 게임은 처음 시작할 때 여러 개의 터를 제공한다. 여러 개의 터 중에 좋은 터 하나를 잘 선택해야 한다. 가능하다면 여러개의 터를 이어서 빨리 확장할 수 있다면 좋을 것이다.

처음 시작할때 각 터에는 단 한명의 사람이 있다. 이 사람은 별다른 능력이 없는 일반 시민이다. 터의 범위를 확장해 나가면 새로운 시민이 하나 추가되는데, 가능하다면 이 두 사람을 합쳐서 병사로 만든다. 병사는 시민을 죽일 수 있고 건물은 부술 수 있으나 성은 파괴할 수 없다. 성은 수비를 위한 것이다. 성을 만들기 위해서 생산할 수 있는 시민을 희생해야 한다.

병사 2명을 합치면 기사가 되고 기사는 병사와 시민을 죽일 수 있고 건물과 성 모두를 파괴할 수 있다. 기사 2명을 합하면 더 상위의 기사가 만들어지고 이 상위의 기사는 시민, 병사, 기사는 물론 건물, 성을 부술 수 있다. 자기가 죽일 수 없는, 또 부술 수 없는 것의 주위에는 접근할 수 없다는 규칙이 있다.

여기서 조심해야 할 것은 자원이다. 시민은 자원 2가 필요하고 병사는 자원 6이 필요하며 기사는 자원 18이 필요하고 상위 기사는 자원 54가 필요하다. 지원은 영토의 넓이 인데 자원이 부족하면 한 순간에 전멸한다. 이미 소유한 내 영역이라고 안심할 수 있는 것은 아닌데, 이유는 이 영역에 나무가 자라기 때문이다. 나무가 자라는 곳에서는 자원이 나오지 않는다. 계속 확장을 하면서 이미 가지고 있는 영역도 관리를 해야만 한다. 확장에 정신이 팔려 나무를 신경쓰지 않으면 자원 부족으로 전멸할 수 있다. 나무는 생각 이상으로 빠르게 확장해 자란다.

추천하는 이 게임, Slay. 꼭 해보시기 바란다.