unique_ptr 테스트

간단해 보이지만 써보면 뭔가 쓰기 어려웠다. 대충보고 쓰니 그런것 같다. 그래서 한번 혼자 이렇게 저렇게 써봤다.

#include <iostream>
#include <memory>
#include <vector>
using namespace std;

class Item
{
public:
    Item()
    {
        cout << "Item constructor : " << this << endl;
    }

    virtual ~Item()
    {
        cout << "Item destructor : " << this << endl;
    }

    virtual void Print()
    {
        cout << "Item : " << this << endl;
    }
};

class Apple : public Item
{
public:
    Apple(int value)
        : _value(value)
    {
        cout << "Apple constructor : " << this << ", value : " << _value << endl;
    }

    virtual ~Apple()
    {
        cout << "Apple destructor : " << this << ", value : " << _value << endl;
    }

    virtual void Print()
    {
        cout << "Apple : " << this <<", value : "<<_value<< endl;
    }

private:
    int _value{0};
};

class Inventory
{
public:
    void SetItem(unique_ptr<Item> item)
    {
        _item = std::move(item);
    }

public:
    unique_ptr<Item> _item;
};

int main()
{
    unique_ptr<Item> uPtrItem(new Apple(1));    // 기본적으로 생성하는 방법은 이렇다. 
    //unique_ptr<Item> uPtrItem2 = uPtrItem;    // 복사생성자는 삭제됨. 소유권이전은 std::move를 쓴다.
    unique_ptr<Item> uPtrItem2 = move(uPtrItem);

    uPtrItem2->Print();
    uPtrItem2.get()->Print();   // raw pointer는 get으로 접근한다.
    //uPtrItem2.release();  // release은 소유권을 포기한다. 메모리 해제는 않함.
    //uPtrItem2.reset(nullptr);  // reset은 소유한 포인터를 교체한다.
    //uPtrItem2 = move(unique_ptr<Item>(nullptr));// nullptr uniqur_ptr을 넣어서 해제할 수도 있다.
    //uPtrItem2 = move(nullptr);    // 그냥 nullptr을 넣어도 된다
    uPtrItem2 = nullptr;  // 어잉 그냥 nullptr을 넣어도 되네?! (코드를 보니 nullptr_t 대입연산자는 reset을 호출하게 구현)

    cout << "===========" << endl;

    Item* rawItem1 = new Apple(10);
    unique_ptr<Item> uPtrItem3(rawItem1);    // 돌아다니는 rawPointer는 이렇게 잡아다가 생성한다.
    
    Item* rawItem2 = new Apple(11);
    unique_ptr<Item> uPtrItem4;
    //uPtrItem4 = rawItem2;   // 자동 변환 되지 않는다.
    uPtrItem4 = unique_ptr<Item>(rawItem2);   // 미리 생성해둔 unique_ptr에 값을 넣을때는 1.unique_ptr을 생성해서 넣어준다.
    //uPtrItem4.reset(rawItem2);  // 미리 생성해둔 unique_ptr에 값을 넣을때는 2. reset을 호출한다.
    uPtrItem4.reset();

    cout << "===========" << endl;

    Inventory inven;
    //inven.SetItem(new Item());    // 자주 실수한 부분. 매개변수로 넘길때는 raw point 가 unique_ptr 로 자동 변환 되지 않는다.

    inven.SetItem(unique_ptr<Item>(new Item));  // unique_ptr 생성자에 raw pointer 를 넣어서 생성하고 인자로 넘어감
    inven.SetItem(unique_ptr<Apple>(new Apple(20)));    // 하위 클래스도 잘 처리됨
    inven.SetItem(unique_ptr<Item>());  // nullptr 을 넣을수 있고, nullptr을 넣을 경우 소멸자에서 문제없음.
    inven.SetItem(unique_ptr<Item>(nullptr));  // unique_ptr을 초기화 시키고 싶다면,
                                                // 클래스 내부에서 reset를 호출하거나 이렇게 nullptr로 다시 세팅해줄수 있음.
    inven.SetItem(nullptr);   // 어잉 이렇게 해도 되네?! (코드를 보니 nullptr_t 대입연산자는 reset을 호출하게 구현)

    cout << "===========" << endl;

    inven.SetItem(make_unique<Apple>(21));  // make_unique 는 생성자에서 필요한 인자를 받아 직접 생성해서 인자로 넘어감
    inven.SetItem(make_unique<Item>());  // 그래서 make_unique 의미상 nullptr을 넣을순 없음
    inven.SetItem(nullptr);

    cout << "===========" << endl;
}

Windows의 MultiByteToWideChar/WideCharToMultiByte 용법과 wchar_t, CP_ACP의 의미

MultiByteToWideChar/WideCharToMultiByte 함수는 여기저기서 많이 쓰던 함수이다. MSDN을 보고 사용 코드를 짜보기도 하고 (이 블로그 옛날 글에도 있다.) 나중에는 귀찮으니 인터넷에 있는거 후려다 쓰기도 했다. 용법은 인터넷에 많이 있으니 패스하고 해당 함수를 사용하면서 언제나 헷갈리는 점이 있는데, 파라메터중 코드페이지 이다.

결론 부터 말하면 두 함수의 첫번째 인자인 코드페이지의 의미가 서로 다르다.
MultiByteToWideChar는 변환하려는 멀티바이트의 코드페이지를 의미한다. 즉 코드페이지에 해당하는 멀티바이트가 들어가서 와이트캐릭터로 나온다.
WideCharToMultiByte는 결과로 나오는 멀티바이트의 코드페이지를 의미한다. 즉 와이드캐릭터가 들어가서 코드페이지에 해당하는 멀티바이트로 나온다.

와이드캐릭터의 입력이나 출력에 코드페이지나 인코딩 형태를 입력하지 않는것을 보면 Windows의 와이드캐릭터는 코드 페이지가 존재하지 않는다는 의미이다. 2바이트 캐릭터라고 해도 인코딩 방식은 여러가지 일텐데 왜 코드페이지가 없는가? C++에서 wchar_t는 2바이트 캐릭터타입이라는 의미이지 특정 인코딩이나 코드페이지를 의미하는것이 아니다.

Windows의 관련 인터넷을 뒤져보니 UTF16 고정인듯 한다. (BE, LE중 뭔지도 좀 구분해서 써주지)
1. https://docs.microsoft.com/en-us/windows/win32/learnwin32/working-with-strings
2. https://docs.microsoft.com/ko-kr/cpp/standard-library/filesystem?view=vs-2019

그리고 위 함수의 인자인 코드페이지 가장 많이 사용하는 값인 CP_ACP.
일반적으로 asni 라고도 하는데, 실제로는 실행되고 있는 윈도우(OS)의 디폴트 코드페이지를 의미한다. 즉 국가별로 CP_ACP는 다른 코드페이지 이다.

그래서 중국 윈도우에서 실행된 클라이언트에서 입력한 멀티바이트 문자열을 한국(OS) 서버에서 MultiByteToWideChar 함수에 CP_ACP로 지정해서 변환하면 깨진다.

오랜 기간 C++을 했지만 문자열 인코딩에 대해서 생각이란걸 해보게 된건 최근이다. 그 전에는 이렇게 해보고 ‘아 안되네?’ 다른 값 넣어보고 ‘음 되네’. OS가 바뀌면 되던게 안되기도 하고 그랬다.

약간 다른 문제이지만… 요즘엔 회사에서 Perforce를 쓰는데 소스 코드든 설정 파일이든 그냥 넣은대로 나왔으면 좋겠는데, 내려받을때 다시 인코딩을 변환해서 골때린다.

C++11의 random 성능 및 distrition 객체의 사용시 마다 생성 문제

c++11의 random 객체의 일반적인 예제를 보면 uniform_int_distribution 객체를 사용하는것이 보이는데
랜덤 변수 하나를 뽑을 때마다 해당 객체를 생성하는 형태로 만들어져 있다.

정말 저래도 괜찮은 걸까..? 테스트를 해봤음.

C의
rand() % 100 + 100

C++의

uniform_int_distribution<int> distribution(100, 199);
distribution(_generator);

코드를 첨부하긴 귀찮고.. 하여간 해봤을때

visual studio 2019에서 디버그 모드는 c++11의 코드가 느렸지만
릴리즈 모드는 서너빼 빠름

신박..

distribution 의 초기화 문제뿐 아니라 랜덤넘버 생성도 c++11은
mersenne_twister 를 쓰는데 우째 더 빠르지..

auto 변수는 레퍼런스 속성을 삭제한다.

아래 코드에서 보듯이 레퍼런스 속성이 삭제됨
그 외 const, volatile 속성 삭제
해당 속성을 유지 하고 싶다면 auto& 를 명확하게 써야한다.

#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int& b = a;
    auto c = b;
    c = 20;
    cout << a << ", " << b << ", " << c << endl;
    return 0;
}

10,10,20 출력

push_back, emplace_back

push_back 으로 임시객체를 넣을 경우 임시객체의 생성과 소멸이 있다.
emplace_back 으로 임시객체를 넣을떄도 마찬가지
emplace_back을 효율적으로 쓰기 위해선 기존 객체를 move로 넣거나 생성자 인자를 변수로 넣어줘야 한다.

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. class Data
  8. {
  9. string _name;
  10.  
  11. public:
  12.  
  13. Data(const string& name) : _name(name)
  14. {
  15. cout << "Data():" << _name << endl;
  16. }
  17. Data(const Data& rhs)
  18. {
  19. cout << "Data(const Data&):" << _name << ":" << rhs._name << endl;
  20. }
  21. Data(Data&& rhs)
  22. {
  23. _name = move(rhs._name);
  24. rhs._name = "null"; // for test
  25. cout << "Data(&&):" << _name << endl;
  26. }
  27. ~Data()
  28. {
  29. cout << "~Data():" << _name << endl;
  30. }
  31. };
  32.  
  33. int main()
  34. {
  35. cout << "push_back temporary object" << endl;
  36. {
  37. vector<Data> v;
  38. v.push_back(Data("test"));
  39. }
  40. getchar();
  41.  
  42. cout << "emplace_back temparory object" << endl;
  43. {
  44. vector<Data> v;
  45. v.emplace_back(Data("test"));
  46. }
  47. getchar();
  48.  
  49. cout << "emplace_back forward argument" << endl;
  50. {
  51. vector<Data> v;
  52. v.emplace_back("test");
  53. }
  54. getchar();
  55.  
  56. return 0;
  57. }

Dictionary Attack For HashCode

Dictionary Attack For HashCode (공개용)



https://docs.google.com/document/d/1AZZEVouZaqM2OcUFgnFwpgS976JR93JzBuwVDw5dRPw/edit?usp=sharing

암호를 알아내는 기법 중 하나.

여러가지 암호 관련 공격 기법 중 하나.

Brutal Force Attack 유사하지만 이지만 사전(precomputed table)을 기반으로 공격한다.

발표의목적

1차 피해 이후 이후 2차 피해를 일으키는 방법.

간단한 방법이지만 효율적인 방법.

실제 주위에서 피해 사례가 많음.

네이트, 현대카드.

암호화 사용의 예

웹사이트등에서 암호를 인증하는 과정.

유저는 웹사이트에 패스워드를 전달하고 웹사이트는 해당 패스워드를 암호화 방법을 통해 해쉬코드로 변경하여 디비에 저장. 이후 인증 요청 시 유저가 입력한 패스워드를 동일한 방법으로 해쉬코드로 변경하여 디비에서 기존 해쉬코드와 비교

암호화 방법 소개

암호화 방법들에 따른 해쉬코드 테이블 사이즈

MD5

키스페이스 128비트

SHA

키스페이스 160~512비트

자세한 내용은 생략함. 이번 주제에 중요하지 않음.

패스워드로 사용시 결국에는 데이터를 해쉬코드화 시키고 패스워드로 활용시 원데이터를 해쉬코드화 시켜서 저장하고 있는 해쉬코드와 비교하는 수순을 거친다.

해쉬코드 테이블의 유출

디비 장비 해킹, SQL 인젝션 등으로 데이터 유출

그런데 왜 특정 사이트의 DB가 털리면 그 사이트의 비번이 암호화 되어 있어도 다른 사이트가 털리는가?

암호화 된 패스워드가 유출 되어도 Dictionary Attack을 통해서 암호를 원문으로 복호화 하여, 해당 아이디와 패스워드로 다른 사이트에 피해를 입는 원인이 된다.

Dictionary Attack을 통한 복호화

precomputed table을 생성하고 암호화된 패스워드와 비교하여 원문을 찾아낸다.

기존에 이것이 불가능 하다고 여겼던 이유.

너무 느리고 너무 크다.

해쉬테이블 사이즈의 맹점

해쉬코드의 원 데이터 속성을 알면 대상을 축소 할 수 있다.

주민번호 : 13자리 숫자, 7번째 자리가 1 or 2, 기타 규칙.

암호는 8자리로 생성해 주세요.

위의 이유로 우리는 복잡한 암호를 요구하게 된다.

양자컴퓨터?

속도가 엄청난 컴퓨터가 나온다면 테이블을 만들어 두지 않는다 하더라도 입력 가능한 모든 패스워드를 입력하여 해쉬코드를 생성하여 비교 함으로 써 원문을 알아낸다.

Precomputed Table

요즘은 하드가 싸서 킹왕짱 큰 저장공간을 활용해서 precomputed table를 왕창 만들어 두면..

Rainbow Table

일반적인 원문, 해쉬코드 쌍의 Precomputed Table 가 용량이 너무 크기 때문에 좀더 개선한 내용

사용하는 저장소의 양을 줄이기 위해서 원문과 해쉬코드를 체인화 하여 구성한다.

우선 환원함수(reduction function)을 적당히 구현한다.

해당 함수는 해쉬코드에서 다시 원문을 생성해 내는 기능을 가지고 있다.

R(a92ab021f0281ab) = “boaosq”

이런 형태로 R 함수는 또 다른 형태의 해쉬코드 처럼 해쉬코드에서 원문의 속성을 가지고 있는 또 다른 원문을 생성해 낸다. (알파벳 + 숫자 조합 10자, 숫자 13자리 등등)

환원 함수는 여라가지 종류를 구현 할 수 있으며 동일한 순서에 동일한 환원 함수를 사용하여 같은 원문을 가지고 처리 할 때 다시 동일한 값을 얻을 수 있으면 되며, 가능 하다면 동일한 원문이 생성되지 않도록 구현해야 한다.

P를 원문, C를 해쉬코드, H를 해쉬함수, R을 환원함수 라고 할때

이런 형태로 체인을 구성 할 수 있다.

i의 순서에 따라 동일한 환원 함수를 사용하므로 P가 동일 하다면 동일한 체인을 재구성 할 수 있다.

아주 많은 초기 P를 대상으로 위의 방법을 이용해서 체인들의 테이블을 구성한다.

그리고 초기원문들(Pi, Pj, Pk… Pn) 과 최종해쉬(Ci+m-1, Cj+m-1, Ck+m-1)를 저장한다.

이후 위의 테이블을 이용해서 원문을 얻어내는 과정은 아래 이미지에서 re3xes 라는 해쉬코드를 원문화 시키는 것을 알아본다.

(wikipedia, v0d$x 가 한행)

0. re3xes가 미리 만들어둔 체인의 가장 마지막(m번째) 해쉬코드라고 생각해 보자.

1. re3xes를 저장해 둔 테이블중 해쉬코드들과 비교해 본다.

1-1. 동일한 코드가 없다.

2. re3xes가 0에서 생각했던 바로 이전 단계의 해쉬코드라고 생각해보자.  m-1번째 해쉬코드를 원문화 시키는 함수 R2를 사용하여 원문화 (cripto)시키고 해당 원문을 다시 해쉬코드로(1tik0) 만든다. 해당 해쉬코드로 1번 동작을 수행한다.

2-1. 동일한 코드가 있다. (password, 1tik0)

3. 찾아낸 행을 다시 체인으로 펼치는 작업을 수행하면서 re3xes라는 해쉬코드를 생성하는 원문을 찾아낸다.

3-1. password -> H -> dlcm4 -> R1-> culture -> H -> re3xes (STOP!)

3-2. culture 라는 원문이 re3xes를 생성하므로 암호는 culture

아래는 이런 내용을 이용해서 미리 만들어둔, 여러가지 암호 알고리즘의 RainbowTable 이다.

그렇다면 대응방법은 (우리의마음가짐)

salt 를 꼭 쓰자.

유명한 해쉬 알고리즘은 오히려 뚫으려는 시도가 많으니 자체 허접한 알고리즘을 쓰자.

물론 이 경우 해쉬 알고리즘은 아주 열심히 보관해야 한다.

자체 해쉬 + 유명 해쉬 알고리즘을 같이 쓰면 짱짱맨?!

암호는 OTP형태의 SecureToken 을 사용하자.

우리는 허술한 사이트를 가입 할 때 자기 개인정보를 입력하는 것 을 지양해야 한다.

사이트마다 패스워드를 바꾸는것 보다 사이트마다 아이디를 바꾸는건 어떨까.

추가) md5인코딩,디코딩 사이트에 자기 비번 넣어보지 마세요.

이 사이트들도 hash table 수집 사이트 일 수 있음

참고

http://en.wikipedia.org/wiki/Dictionary_attack

http://en.wikipedia.org/wiki/Ophcrack

RainbowCrack

http://en.wikipedia.org/wiki/RainbowCrack

http://project-rainbowcrack.com/table.htm

http://blog.naver.com/harajuku3?Redirect=Log&logNo=10143881446

pre computed dictionary attack

http://dazzlepod.com/disclosure/

http://ko.wikipedia.org/wiki/%EC%95%94%ED%98%B8%ED%99%94_%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98

본격 정치인들 까는 로그 (계속갱신)

2011-05-19
http://www.hani.co.kr/arti/politics/politics_general/478738.html

박용모의 욕드립

못생기면 드립치지 마라

흠 이 아저씨를 정치인이라고 처줘야 하나. 듣보잡이라…
본인이 듣보잡인거 알아서 노이즈 마케팅하는거 같기도 하고

2011-01-03
http://www.mediatoday.co.kr/news/articleView.html?idxno=93027
새해부터 이런 개드립을?

한나라 “민주당이 전국 돌아다녀 구제역 확산”

2010-09-02
http://www.koreatimes.co.kr/www/news/nation/2010/09/116_72451.html

이걸 보면서 역시 국회의원들은 특권의식이 쩔어. 이러면서 서민을 논하다니
라고 생각하는건 나뿐인가.
병나라당이나 병주당이나 병보신당이나 ㅈㅂㅅ 놈들 같으니라고

2010-09-02http://www.mediatoday.co.kr/news/articleView.html?idxno=90556
권력은 달콤하지만, 사용법은 어렵지
나라면 스스로 그 자리를 고사하거나, 특별채용같은 특별해 보이는 채용에는 발을 들이지 않았을듯.

그나저나 존나 유명한 ㅈㅂㅅ 유명환 장관님이시네.
저번 포스팅과 연관되서 더욱 ㅅㅄㅂ 스러운 유명환

2010-09-05
푸하 이렇게 샘통일 수가?

2010-07-26
“젊은 애들, 北이 그렇게 좋으면 가서 살지”
http://news.khan.co.kr/kh_news/khan_art_view.html?artid=201007260023005&code=910100
ㅅㅂ 뭔 개소리야 누가 좋다고 하는데, 이 좆병신 새끼 도대체 누구야?

2010-08-01
이 ㅈㅂㅅ이 유명환 외교부 장관이라며?
“이런 늙은애들, 北이 그렇게 싫으면 가스탱크로리 타고 北에 가서 자폭이나 하지”

2010-07-14
전 의원은 “다들 제 걱정하셨는데 저 잘있다”면서 “언제나 그렇듯이 덕분에 ‘나일강의 범람’으로 옥토가 되듯 제 의지도 더 단단해지고 제 ‘정치 역량’도 더 담금질됐다고 생각한다”고 말했습니다.
http://blog.ohmynews.com/gkfnzl/166987

아니 도대체 얘 걱정하는 사람은 뭐야.
맨날 말 싸지르고 ‘걱정해주셔서 감사합니다.’ 이지랄 이나 하고 아후!

2010-07-13
행불상수

안상수 전 원내대표는 아킬레스건인 병역면제 문제가 다시 거론되자 민감한 반응을 보였다. 그는 언론에 제공한 해명자료를 통해 “고시공부를 하느라 영장을 받지 못해서 입대가 늦었다. 고시 합격 후 법무관에 지원해서 입대를 했다. 그런데 몸이 아파서 훈련을 다 마치지 못했다”고 해명했다.

남들 다가는 군대 영장나온줄도 모르고 공부하다니 고시공부는 이정도쯤 해줘야 하는듯

2010-06-07
쌀로가 보내준 정치인 개드립의 지존
사용자 삽입 이미지

2010-06-07
김문수 개드립에 관한 대화

s******* – 빅토랴♡님의 말:
 김문수 “트리플 악셀에 도전한다”

김지사는 “허들 경기가 어렵지만 잘 넘으면 칭찬이 더 할 것”이라며 “세계적인 피겨스케이팅 선수인 김연아 선수가 트리플 악셀에 성공한 것처럼 열심히 해서 도민들로부터 칭찬을 받고 싶다”고 말했다. 

 이새끼 완전 또라이네 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
 아 병신 트리플 악셀은 연아가 아니라 마오야 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
[Yoway] – 솔로어게인님의 말:
 아오!
 ㅋㅋㅋ
 미치겠구만!

s******* – 빅토랴♡님의 말:
 이새끼 의도적인가 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

[Yoway] – 솔로어게인님의 말:
 ㅋㅋㅋㅋㅋㅋㅋㅋ

s******* – 빅토랴♡님의 말:
 아 존나 어이없네 진짜

[Yoway] – 솔로어게인님의 말:
 존나 또 몇년이나 김문수의 병신짓거리 개드립을 봐야하다니!

s******* – 빅토랴♡님의 말:
 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 2010-05-17
비겁한 촛불세력
http://news.joins.com/article/121/4176121.html?ctg=2002
개소리쩌는듯. 사실관계가 명확한 광우병(30개월이상소는 병의위협이있는것.), 미선이효순이 사건(과실치사지만 사고낸사람이 명확하고 그사람이 별다른 처벌이 없었던것)과 아직 원인규명중인 천안함가지고 지랄하는것도 말장난일뿐일고. 실제로 천안한이 북한이 격침시켰다고 해도 무역, 사고 처리랑 전쟁을 동일하게 생각할수도 없지 않나.
그리고 애초에 촛볼집회가 일어난건 사건이 일어난 이후의 정부의 병신같은 대응이 발단이었다. 천안함 사건도 원인이 명확히 밝혀지고 거기에 따른 정부의 대응을 봐야 뭔가 비교할만한 꺼리가 생길것 아닌가?

ps1
사실 이후 정부의 대응이 병신같다고 해도, 비폭력 집회(?)를 주장해온 촛불집회에서 전쟁하자고 집회하는것도 웃기지 않나.
(촛불집회가 후반기에 격화된건 진심으로 애도. 개인적으로 촛불집회할때 청와대로 나가자 이지랄하는애들 보면 뇌가 있나 싶어… 하지만 그 긴기간동안 집회하는데 들어쳐먹질 않으니 이해가 가기도 하지만)

ps2
저 기사를 쓴 기자는 촛불집회를 특정 세력의 집회로 기사를 쓰고 있다.
그렇기 때문에 우리나라의 모든 이슈에 대해서 반응하지 않는것을 문제로 삼고있는것이겠지. 애초에 일반인들의 공감대가 형성되어 이루어진것이라는 사실을 부정하고 있으니 “왜 이렇게 큰이슈에 너희는 침묵하냐? 너희에게 불리하기 때문이다. 너희가 바로 좌파다” 라는 논리 밖에는 형성되지 않는것이다.
기자는 촛불집회가 왜 일어났는지 부터 따져봐야 상식적인 기사를 쓸수 있것 같다.

ps3
슈발 조중동에서 촛불가지고 이지랄 하면서 한명숙, 유시민까는걸 보면 선거철이라는 생각이 들기는 한다.

2010-05-14
<오마이뉴스>에 무슨 국민이 있어?
http://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0001381958&PAGE_CD=N0000&BLCK_NO=3&CMPT_CD=M0001
나도 오마이뉴스 신뢰하지 않을 뿐더러 국민운운하는건 싫어하지만…
니놈색히들이 국민 운운하는게 더 싫다! 니놈들이야 말로 국민 운운하지 말라고 크아!
ㅆㅂ 내가 조중도에 나오는 국민 운운, 딴나라당이 국민 운운할때 느끼는 감정이 저건가봐!

2010-04-29
[사회] 한나라당 법원 비판 도넘었다
    http://news.nate.com/view/20100429n00053
    지방선거기획위원장인 정두언 의원이
    어제 여의도 당사에서 열린 최고위원·중진연석회의에서
    “이런 판결을 내린 것은 입법부와 국회의원을 무시하는 조폭판결”
        특권의식 쩌는듯

    김영선 의원이
    “사법부 전체가 난폭해지고 무원칙하게 보이는 데 대해 국민이 우려하고 있다”
        아무대나 국민좀 갖다 붙이지 마라

2010-05-06
김형오의 “盧때와 달리 정상적 사람이 정치해야”
http://www.viewsnnews.com/article/view.jsp?seq=62729
“노무현 대통령을 마지막으로 불우한 처지나 역경 같은 단어가 사라졌으면 합니다. 이젠 정상적인 사람이 정상적인 정치를 해야죠”
    누가 정상적인건데, 불우한처지에 있는 사람은 비정상인가보지

2010 살거 & 사고 싶은거

살거
42 인치 TV (복지비로 살 예정)
책장 (방 구조 바꾸고 책이 쌓인 상태를 봐서 사기로 함)
책상 (방 구조 바꾸고 나서 엄마가 선물할 예정)
http://www.interpark.com/product/MallDisplay.do?_method=Detail&sch=list&sbn=ane_prd&sc.shopNo=0000100000&sc.dispNo=008001&sc.prdNo=65598402

http://www.interpark.com/product/MallDisplay.do?_method=Detail&sch=list&sbn=ane_prd&sc.shopNo=0000100000&sc.dispNo=008001&sc.prdNo=236757951

의자 (방 구조 바꾸고 나서 엄마가 선물할 예정)
위+위핏 (준만씨거 사기로함)
커튼+커튼봉 (창문, 베란다문, 거실문)

사고 싶은거
간지나는 액자 (한 두개쯤?) -> 집에있는 사진액자 하나 가저오면 딱인데
베어본PC (http://blog.danawa.com/prod/?blogSection=2&cate_c1=860&cate_c2=867&cate_c3=15928&cate_c4=0&depth=3&prod_c=903468)
DVR+카메라(3)