2016년 12월 5일의 Onggi 2016/12/05 02:49 by WSID

드디어 2주가 지나고 썰을 풀어봅니다. 그림을 그리다가 자꾸 다운되서 그림을 안 넣으려고 했습니다만, 살짝 낙서 느낌으로 그려서 올려봅니다.


그리다보니 의미를 모르게 된 그림...;;

1. 삭제 및 되돌리기 기능 구현

저번에는 새로운 객체를 저장하는 기능을 구현하였습니다. 이번에는 삭제와 되돌리기를 구현해 보았습니다.

객체의 변경이나 삭제를 표현하기 위해 Holder를 표시할 수 있도록 하였습니다. 새로운 객체를 추가할 때에도, Holder에는 "새 객체" 표시가 됩니다. 상태가 늘어나는 것을 막기 위해 변경과 삭제는 각각 따로 표기할 수 있도록 하였습니다.

    onggi_holder_group_include_instance (store, instance);
    onggi_holder_group_mark_removed_for (store, instance);
    onggi_holder_group_mark_modified_for (store, instance);
    ...

그리고 이러한 사항을 저장하거나 아니면 되돌릴 수 있도록 하였습니다.

    onggi_store_save (store, &error);
    onggi_store_revert (store, &error);


2. Store에 Holder와 객체를 얻어오는 함수 추가

OnggiHolderGroup을 통해 OnggiHolder나 객체를 얻을 수 있습니다. 그러나 OnggiHolderGroup을 얻는 것이 번거로울 수 있습니다. 편의를 위해 OnggiStore에서 Holder나 객체를 얻을 수 있도록 함수들을 추가하였습니다.

    onggi_store_get_holder (store, MY_TYPE_OBJECT, id, &error);
    onggi_store_get_instance (store, MY_TYPE_OBJECT, id, &error);

    onggi_store_get_holder_for (store, some_object);

또한 1.에 해당하는 함수들도 추가하였습니다. 객체에 대한 함수들은 따로 객체에서 타입을 얻을 수 있기 때문에 타입 매개변수를 따로 받지 않습니다.

    onggi_store_include_instance (store, some_object);



3. OnggiHolderDelayer

불러온 객체를 사용하고 나면, 필요 없을 때는 파기할 수 있습니다. 하지만 파기된 객체가 다시 필요할 땐, 다시 불러와야 합니다. 일반적으로 파기된 객체들은 한참동안 사용되지 않습니다. 불행하게도 파기된 객체를 다시 불러와야 하는 경우도 생깁니다. 

이러한 상황이 자주 발생한다면 객체의 불필요한 파기와 생성이 반복되어 성능상으로 안좋은 상황이 생깁니다. 이를 방지하기 위해 객체가 필요 없어져도, 금방 다시 사용해야 할 경우를 대비하여 유지하고자 합니다.

따라서 "객체를 유지할 표시"가 필요합니다. 이러한 표시로 사용하기 위해 OnggiHolderDelayer의 클래스를 구성하였습니다. 이 클래스의 hold 속성을 통해 객체를 유지할지, 객체를 유지하지 않을지 표시합니다.

    struct _OnggiHolderDelayerClass {
        GObjectClass _parent;
        void (*on_load) (OnggiHolderDelayer *delayer);
        void (*on_invalidate) (OnggiHolderDelayer *delayer);
        void (*on_get) (OnggiHolderDelayer *delayer);
        void (*on_peek) (OnggiHolderDelayer *delayer);
    };

    onggi_holder_delayer_set_hold (holder, hold);

    onggi_holder_add_delayer (holder, delayer);
    onggi_holder_remove_delayer (holder, delayer);


OnggiHolderDelayer는 추상 클래스입니다. 현재의 유일한 구현체는 OnggiHolderDelayerTimeout 밖에 없습니다. 이 구현체는 지정된 시간동안 hold 속성을 '참'으로 유지해 놓습니다.

    delayer = onggi_holder_delayer_timeout_new (60000); // 1분 동안 객체를 유지합니다.



4. 객체를 강제로 무효화 하기

OnggiHolder에서 객체를 강제로 무효화 하는 함수도 추가하였습니다. 아직은 쓸모를 찾지 못했습니다. 하지만 언젠가 쓸모가 있으리라 생각됩니다.

    onggi_holder_invalidate_instance (holder);



추후 계획

1. 내부 정리

일단 기능 추가는 이정도 해두고 내부 정리도 조금 할 겸, 테스트 케이스도 추가 해야 할 것 같습니다.
그리고 객체 저장이나 불러오기 등의 동작들도 취소 가능한 동작으로 구성해야 할 것 같습니다.


2. OnggiConstruction에 기능 추가

객체의 신호를 연결하는 기능을 추가하고자 합니다. GObject는 다른 함수들이 연결될 수 있는 '신호' 기능을 제공하며, 객체가 신호를 방출하면, 연결된 함수들이 호출됩니다.

    // object의 some-signal에 함수 my_some_signal_handler을 연결
    g_object_connect (object, "some-signal", (GCallback *) my_some_signal_handler, NULL);

    // 객체의 신호를 방출 - 이 신호에 연결된 함수들도 같이 호출된다!
    g_signal_emit (self, SIG_SOME_SIGNAL, 0, arg_0, arg_1);

이러한 기능은 다양한 상황에서 쓰이곤 합니다. 예를 들면, 버튼 등과 같은 GUI 컨트롤에서 이벤트 관련 기능을 제공하기 위해서도 쓰이곤 하지만, 함수 내부에서 신호를 발생시켜, 함수의 행동을 변경하거나 추가할 여지를 주기도 합니다.

OnggiConstruction에서 신호에 연결할 수 있다면, 기능의 추가에 대한 제약 사항이 줄어들 것 같습니다.

이상입니다. 'u'

Computing 2016년 11월 21일 혼자 조용히 Onggi를 작성하던 썰... 2016/11/22 19:39 by WSID


서론

혼자 조용히 주섬 주섬 만들고 있던 라이브러리에 대한 썰이긴 합니다만, 뭔가 만드는 것에 대해 썰을 풀고자 하는 것은 주변의 여기 저기 등에서 "개발자의 업데이트 뉴스"라던가 "이번주의 업뎃 사항" 등으로 주기적으로 올려 놓는 것을 보고 저도 이런 것을 만드는 게 좋지 않을까 하는 생각이 들었습니다. 그래서 저도 "Onggi의 진행 사항을 주기적으로 올려보자"고 마음 먹었습니다만, 체력의 문제라던가 피로가 쌓였다던가 하는 이유로 올리진 못했습니다... (....)

원래를 2주마다 올리는 것을 목표로 했지만, 너무 많은 시간이 지났고, 시간 순서대로 글을 쓰자니 다소 햇갈리는 부분이 있고, 심지어 까먹기도 해서, 글이 정리가 안되었습니다. 그래서 일단 전체 구성을 니열한 다음에, 각각의 개별 구성에 대해 글을 써보도록 하겠습니다.

그리고 불필요하게 복잡하다던가 하는 부분은, 제가 센스가 부족하기 때문이므로, 양해 부탁드립니다. (.....)

이어지는 내용

새로 산 가방을 자랑해봅니다. [Aizim 305I] 2016/11/10 14:55 by WSID

안녕하십니까~! 이틀 전 글에서 쓴 바와 같이, 가방을 새로 샀습니다.

글을 따로 쓰게 된 건, 조금 분량의 글이지만, 가방에 대한 내용을 다 쓴다면 어느정도의 분량이 되기 때문입니다. 따라서 이렇게 새로 글을 쓰게 되었습니다.

전반적으로는 크고 튼튼한 사각형 모양을 하고 있습니다.

이어지는 자세한 사항

Daily Life 큰 별일이 없는 11월 초반 근황 2016/11/09 13:46 by WSID

안녕하세요~! 정말 오랫만입니다... (...)

그림에 손을 거진 2주 넘게 안댔다가 다시 대려고 하니 힘들군요... (...)
(그러면서도 왠지 계속 손 놓을 것 같기도 하고...)
1. 새로운 가방을 구입했습니다.

기존에 쓰던 가방의 한쪽 어깨 끈이 떨어지는 통에 새로운 가방을 샀습니다. 가방은 아무래도 그면 다양한 물건을 담을 수 있는 주머니도 많기 때문에, 큰 가방을 샀습니다. 전체적인 모양은 아래와 같습니다.
전에 쓰던 가방은 고등학교 후반 때부터 썼던 가방이라 거진 10년을 썼었네요...


2. 클립형 LED 라이트

보통은 불을 켜 놓고 컴퓨터를 씁니다. 어두운 곳에서도 물론 컴퓨터를 쓸 순 있지만, 키보드가 잘 안보인다면 손가락이 어디를 누르는지 가늠하기 힘들기 때문에 오타율이 상승합니다. 이러한 상황에서 키보드에 불빛을 비추기 위해 다이소에서 1000원짜리 LED 라이트를 구입하여 왔습니다.
자유롭게 휘어지고 가벼워서 가지고 다니거나 다른 용도로도 쓸 수 있을 듯 합니다.


3. 가을에서 겨울로 넘어가는 환절기입니다.

요즈음 계절이 바뀌는 환절기입니다. 날씨가 크게 바뀌는 중입니다. 감기에 걸린다면, 기침에 콧물에 살짝 두통으로 고생할 듯 하니, 여러분들도 감기 조심하시길.. (...)


4. Onggi

목표로 한 기능까진 나아가진 못했지만, 일단은 잠시 내부 정리를 조금 할까 합니다. (사실 이게 좋은게 아니고, 원래는 정리하면서 나아가야 했지만....)
일단은 현재 객체를 저장하는 부분까지만 되었고, 그 이외의 부분은 구현되지 않았거나 아니면 오류로 이어집니다.

일단은 어질러진 내부부터 정리할 계획입니다.


5. 포맷 및 재설치

현재 페도라 25 베타판을 쓰곤 있습니다. 하지만 호기심 등 다양한 이유로 인해 여러 패키지를 설치하면서 약간 너저분한 기분도 들고 있습니다. 아마 다음주 쯤엔 정식판이 나올텐데, 깨끗한 기분으로 들기 위해 아마 업그레이드보단 새로 설치할 것 같습니다.. (...)


이상입니다. 'u' ;;;

Daily Life 라인클리어+ 이어폰 선정리에 대한 소감 2016/10/06 01:49 by WSID

개인평: 3 / 5점

이어폰을 말아서 보관할 수 있는 선 정리 보조 장치입니다. 이어폰의 선은 보관에 불편할 수 있습니다. 감거나 접어서 보관하지만, 풀어내는 것이 불편하거나 자칫 보관 중에 선이 꼬일 수 있습니다. 이러한 불편함을 해소하기 위한 보조 장치가 바로 라인클리어+ 이어폰 선 정리입니다.

더 읽어보기

1 2 3 4 5 6 7 8 9 10 다음