글 목록 보기

Lyn
조회 수 1912 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

afree.png

 

TAG •
?

Lyn
조회 수 2234 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

게임 결제 한번 하기 힘드네요....

 

Untitled.png

 

TAG •
?

Lyn
조회 수 4693 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

ov.PNG

 

네 3번째는 OpenVPN GUI Client 입니다.

High DPI 지원을 하지 않아, 강제확장 기능이 없는 구버전의 OS에서는 읽을 수 없는 크기의 로그를 (....) Windows 10 에서는 흐릿하게 보이는 로그를 자랑 하고 있습니다.

 

역시 얘도 그다지 자주 볼 화면이 아니니 상관은 없지만 무신경한건 마찬가지죠

TAG •
?

Lyn
조회 수 4584 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

NF.PNG

 

두 번째는 네이버에서 배포하는 네이버 폰트 인스톨러입니다.

Uncode 지원을 하지 않아 박살나는 한글과, 역시 High DPI 지원을 하지 않아 흐릿하게 보이는 글씨를 볼 수 있습니다.

아무리 한국어OS 사용자가 사용할 가능성이 99%가 넘는다 해도 한국 최고의 IT 대기업 치고는 너무 무신경하네요.

TAG •
?

Lyn
조회 수 4207 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

WSM.PNG

 

첫 타자는 Windows Service 관리도구입니다.

MS의 OS 의 일부임에도 불구하고 이놈은 최신의 WIndows 10 에서 조차 HighDPI 에 대한 처리가 전혀 되어 있지 않습니다 (...)

아무리 일반인이 자주 보지 않는 프로그램이라곤 하지만 좀 MS의 무신경함은 좀 심하네요.

TAG •
?

Lyn
조회 수 93 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

01.jpg

 

 

오랫만에 개발서적과 소설을 제외한 작품을 읽었다. 

 

이번 책은 1486년 초판이 나오고 최근에서야 한국어로 번역된 "말레우스 말레피카룸" 이다.

이 책은 실제 현실에 있었던 마녀사냥의 근거가 된 책이라 할 수 있다.

원서는 아래와 같이 생겼다

05.jpg

 

 

앞으로 이 책은 한국에서 이야기하는 카톨릭과 개신교에서 써먹은 책이다. 고로 아래부터는 기독교 라고 하면 그 둘을 지칭한다 구별하기 귀찮으니까.

이 책을 설명 하려면 아브라함 계통의 종교(유대교, 기독교, 이슬람교) 에서 인간이 언제부터 신에 대한 진실을 까먹었냐부터 이야기 해야 할 것 같다. 뭐 일단 세 종교가 하는 말을 다 믿는걸로 하자... 구별하기 귀찮으니가 

 

유대교는... 음 잘 모르지만 대충 기원전 40세기~35세기에 처음 생겼다고 한다. 그리고 예수가 세상에 나타난게 대충 1세기초, 무함마드가 가브레엘에게 계시를 받은게 대충 7세기다. 이것만 보면 대충 유대교는 4000년, 기독교는 600년, 이슬람교는 1400년 이상 다음 계시자가 나타나기 전까지 시간을 벌었다. 물론 주류의 해석대로 다음 계시자가 아직 나타나지 않았다는 전제하에서... 자기가 예수와 동격이라는 사람들이 하도 많으니까. 어쨋든 이렇게 보면 기독교가 유난히 다음 계시자 까지의 시간이 짧다. 

 

그럼 600년 만에 진실을 잊었느냐... 라고 하면 기독교에는 한가지 사건이 더 있다. 바로 325년에 있었던 제 1차 니케아 공의회 이다(예루살렘 공의회는 신약에도 씌여 있는만큼 예수의 말이 잊혀진 이후라고 보기가 어렵지 않나 생각한다. 심지어 베드로도 살아있었고)

1차 니케아 공의회는 바로 기독교의 교리를 "토론" 해서 정한 회의이다. 만약 진실이 잊혀지지 않았다면 이런 회의 따윈 필요가 없을거다. 뭐 어쩔순 없을거다 이미 예수가 죽은지 몇백년이 흐른데다 지금처럼 종이가 발에 채이는 시기도 아니고 인터넷이 있는 시대도 아니니 잊어먹는게 당연하다. 당장 망한지 얼마 안된 조선시대의 자료도 진실을 몰라서 연구를해야하는판에. 뭐 어쨋든 325년 시점엔 이미 다 잊어졌다는거고, 공의회로부터 교리를 체계적으로 정리하기 시작한다.

 

그 이후(혹은 그 이전부터) 사실상 (현대의 관점에서) 개막장 판타지 소설이나 다름없는 기독교 성경의 오류를 땜빵하기 위해 신학이라는 학문을 연구하고 반복되는 공의회로 계속 자신들의 교리를 보강해 나간다... 기독교 성경이라는 숨길 수 없는 존재가 있는 이상 교리의 보강이라는 것은 결국 말이 안되는것을 말이 되게 하는 궤변을 만들어 놓는 것 뿐이다. 일종의 논문디펜스라고 해야하나. 이렇게 공격당할땐 저렇게 대응하고 저렇게 공격할땐 또 이렇게 대응하라고 하는 내용들을 쌓아 가는 것이다. 삼국지에 나오는 양수가 조식에게 만들어 줬다는 문답서가 이런식이 아니었을까...

 

뭐 어쨋든 하고싶었던 얘기는 이 책은 최소 325년~1486년 이라는 천년이 넘는 시간동안 쌓아온 궤변의 모음서라 할 수 있다.

어떻게 사람을 마녀라고 몰아가는지, (마녀라고 찍힌 사람이) 어떻게 대응하면 어떻게 대응하는지, 어떤식으로 마녀라는걸 증명하는지 아주 자세하게 나와 있다(위 사진으론 알 수 없지만 책 생각보다 꽤 두껍다) 물론 대응하는 내용이 말이 되는건 아니다 (...) 말이 되면 이 책이 법률서겠지. 정말 판타지소설에서나 볼법한 다양한 단어를 구경할 수 있다(그 유명한 서큐버스 처럼).

 

사실 꽤 흥미진진하게 읽었지만 스토리가 있는 책이 아니기 때문에 감동이나 그런것은 없다. 궤변으로 꽉 찬 책이지만 이 책이 말싸움 연습하는데 도움이 될 것 같지도 않다. 너무 내용이 병신같아서... 이 책에 나온대로 해서 말싸움을 한다면 이길순 있을 것 같다. 상대가 이런말을 하겠지만 말이다 "말이 통하지 않으니 이길 자신이 없다" 라고. 사실 이 책을 아주 잘 설명하는 방법은 책의 일부분을 보여주는 것이라 생각한다. 몇 페이지만 읽어도 이 책이 어떤 책인지 금새 알 수 있을테니까. 그래서 아마도 법률적으로 문제 없을 만큼만 책의 일부를 발췌하여 첨부한다. 흥미가 있다면 꼭 한번 읽어보도록

 

 

02.jpg

 

03.jpg

 

04.jpg

 

 

TAG •
?

Lyn
조회 수 37084 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. 자동업데이트(이거 이슈 거의 무조건 생기는거 같다..)


2. 서버인증


3. 패킷 암호화


4. 접속유지체크(이걸 프레임워크단에 넣어야하나 어플단에서 구현해야하나...)


5. 일부 알고리즘을 분리해서 인증없이 실행 안되도록.


6. 크래시 덤프



?

Lyn
조회 수 39025 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. Visual Studio 2008  2010 + Intel C++ 11.1 12.1 // 개발툴.

    - Visual Assist // VS Add-on


2. Delphi 2007, Delphi 2010 XE2 //개발툴

    -Castailla // Delphi Add-on


3. VirtualBox 

가상머신 가벼워서 자주 이용


3. VMWare

VirtualBox 가 불안해서 VMWare로 완전 이사


4. TeraCopy

쉘확장. 윈도우의 파일복사/이동 기능을 확장해줌.

복사중 일부분 취소, 일시정지, Copy<->Move 전환기능 등


걍 Total Commander 쓰기로 했다. 윈도7에선 TeraCopy가 너무 느리다.


5. Microsoft Office 200 2010 // 문서


6. Total Commander

다기능 툴이지만 파일이름변경, FTP 등의 기능을 주로 이용


7. 구글 크롬

    - IE Tab

    - Gesture

초고속 웹 브라우저


8. Beyond Compare 3

파일비교 솔루션. 개발보조툴


9. Tortoise SVN, TortoiseHG

SVN 프론트엔드. 개발보조툴


10. Warcraft III, Startcraft II

게임


11. NateOn, Google Talk, MSN

메신저

?

Lyn
조회 수 35582 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
STL 에서는 B-Tree 기반의 Collection 이 준비되어 있는데, set ,multiset ,map ,multimap 의 4 종류이다.

그에 반헤 TR1에서는 위의 4종류의 Collection 에 대응되는 Hash 기반의 Collection 을 제공한다.
이름하여 unordered 시리즈(unordered_set, unordered_multiset, unordered_map, unordered_multimap) 이다. (이름너무 길다)

기본적인 사용법은 STL 의 콜렉션과 완전히 같으니 그냥 무시하도록 하겠다.

제일 기본적인 unordered_set 에 대해서만 예제를 보자

#include <iostream>
#include <string>
#include <unordered_set>

using namespace std;
using namespace std::tr1;

int main()
{
    unordered_set<string> UnOrderSet;

    UnOrderSet.rehash(10); //버켓의 갯수를 정의한다.
    //UnOrderSet.insert("김호광");
    UnOrderSet.insert("남병철");
    UnOrderSet.insert("류종택");
    UnOrderSet.insert("린");
    UnOrderSet.insert("박지훈");

    if(UnOrderSet.find("김호광") != UnOrderSet.end())
    {
        cout << "김호광 님은 볼랜드 포럼 회원입니다." << endl;
    }
    else
    {
        cout << "김호광 님은 볼랜드 포럼 회원이 아닙니다." << endl;
    }
}

위에말한대로 기본적인 사용법은 set 과 완전히 동일하다.
중요한 것은 rehash 매소드.  버켓의 갯수가 너무 많으면 메모리 낭비가 극심해지고, 너무 작으면 성능이 나빠집니다. 이래저래 귀찮은 Collection 이라 할 수 있겠군요





기본적으로 unordered_set 은 4개의 템플릿 인수를 받아드립니다.

Value(사용할 Type),  Hash(Value 를 Hash화 하는 함수객체), Pred(비교함수객체), Alloc(할당자)의 순서인데
Hash, Pred, Alloc 은 디폴트 파라미터가 있으므로 사용 하지 않아도 무방하다.

만약 기본적으로 C++에서 제공하는 놈(int, string, double 등등...) 들이 아닌 다른놈들을 사용하려면?
2가지 구현이 필요하다.

첫째로 == 연산자의 오버로딩, 두번째로 해시함수객체의 제공이다.  unordered_set의 2번째 파라메터인 Hash를 내가 사용하기 원하는 타잎을 Hash 할 수 있도록 제공 해 주는것이 필수적이다.

#include <iostream>
#include <string>
#include <unordered_set>

using namespace std;
using namespace std::tr1;

struct TTest
{
    int i;
    double d;

    bool operator == (const TTest &T) const
    {
      return ((i == T.i) && (d == T.d));
    }


};

struct TTestHash
{
    size_t operator () (const TTest &T) const
    {
        return T.i;  //그냥 간단하게 i값을 해시값 취급 해버렷다
    }
};

int main()
{
    TTest test[2];


    unordered_set<TTest, TTestHash> UnOrderSet;

    test[0].i = 5;
    test[0].d = 3.14;

    test[1].i = 9;
    test[1].d = 180.36;

    UnOrderSet.insert(test[0]);
    UnOrderSet.insert(test[1]);

    TTest FindValue;
    FindValue.i = 5;
    FindValue.d = 3.15;

    if(UnOrderSet.find(FindValue) != UnOrderSet.end())
    {
        cout << "찾는 객체가 있습니다" << endl;
    }
    else
    {
        cout << "찾는 객체가 없습니다" << endl;
    }
}

위처럼 사용자 정의타잎 TTest 를 정의하고, 그에대한 해시함수객체 TTestHash 를 정의한 후, unordered_set 을 생성할 시에, Hash함수 객체 타잎을 제공하엿다.



결론을 내자면...

1. 기본타잎을 쓰더라도 어느정도 데이터의 양을 예측 해야 만족스러운 성능이 나온다.
2. 사용자 정의타잎을 쓰고 싶으면 Hash 를 재정의 해야 하기때문에 얼마나 Hash 를 잘 시키느냐에 따라 성능이 크게 달라진다.
3. 위의 조건을 다 만족시킨다면 상황에따라 다르겠지만 대충 set 의 2배정도의 성능을 보여주는 것 같다(속도측면, 메모리는 아무래도 소비가 크다)
4. C++ Collection 너무 많다 =_=;;; 상황에 따라 최적의 Collection 을 찾는 것 만도 일이다.
5. STL 의 Collection 들은 별 존재가치가 없어졋단 생각도 든다... 메모리 아껴야되는 상황이 아니라면(오해의 소지 매우 많음!)

Ps. C++ 에서는 보통 Containers 라 하는 것 같은데... 익숙하지 않아 그냥 일반적인 Collection 이란 용어를 사용했다.
?

2008.10.05 23:38

[TR1 살펴보기] 2. Array

Lyn
조회 수 37501 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
예제코드

#include <iostream>
#include <array>

using namespace std;
using namespace std::tr1;

void main()
{
    array<int, 100> intarr;

    //초기화
    intarr.assign(0);  //모든 요소를 0으로 초기화한다
    for (int i = 0; i < 100; ++i)
    {
        cout << intarr[i] << " ";
    }
    //값을 대입해본다
    for (int i = 0; i < 100; ++i)
    {
        intarr[i] = i;
    }

    cout << endl << "Size : " << intarr.size() << endl;

    cout << "이터레이터를 사용한 루프" << endl;
    array<int, 100>::iterator ia;
    for (ia = intarr.begin() ; ia != intarr.end(); ++ia)
    {
        //이터레이터를 사용한 루프
        cout << *ia << " ";
    }
    cout << endl << "일반 배열처럼 접근하는 루프" << endl;
    for (int i = 0; i < 100; ++i)
    {
        cout << intarr[i] << " ";
    }

    //만약 범위를 벗어난다면 std::range_error 예외를 생성한다
//    intarr[100] = 1;
    system("pause");
}

TR1에서 추가된 array는 크기가 고정된 배열입니다.
즉 위에서의 array<int, 100> intarr 은 int intarr[100] 과 본질적으론 차이가 없습니다.

단지 관리를 편리하게 하기 위해 객체로 제공된다는것(C#, Java 와 같다고 보심 편합니다) 그리고 범위를 넘어설 시 예외를 발생한다는점이 특징입니다. (C의 배열은 범위를 넘어서도 치명적인 부분에 접근하기전까지는 오류발생을 모르는 경우도 있고.. 이경우 오류의 추적이 매우 어렵습니다)

C++ 표준 라이브러리의 일부가 될 TR1이므로 STL에서 사용하는 이터레이터 문법을 그대로 사용 할 수 있으며,
일반 배열과 본질적으로 같으므로 [] 연산자로 값을 읽고 쓸 수도 있습니다.

또한 swap, assign, size 등의 멤버함수를 제공하여, 초기화, 교체 등의 작업을 쉽게 할 수 있으며, 배열의 크기를 얻어 올 수도 있습니다.

배열에 비해 사용시의 오버헤드가 좀 있긴 하지만... 안정적인 프로그램의 메모리 관리를 위해서는 사용 해 볼만 합니다.
?

Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 14 Next
/ 14