Potrzebowałem w pewnym projekcie łatwej obsługi logowania wszelkich informacji. Do tego z prostotą taką, jaką udostępniają standardowe strumienie we/wy w C++, głównie przez operator <<. Po kilku próbach implementacji, walki ze strumieniami i przeszukiwań sieci, wpadł dobry pomysł i wypadła spod klawiatury działająca implementacja ;)
Klasa LogStream jest prostym dispatcherem, (proste wykorzystanie wzorca Observer), w którym rejestrujemy dowolne strumienie, a wszelkie dane otrzymywane przez obiekt “loggera” są rozsyłane do poszczególnych strumieni, zależnie od ustalonego poziomu logowania i konfiguracji danego strumienia.
CEditListCtrl jest klasą MFC reprezentującą edytowalną kontrolkę listy - EditListCtrl. Jest to typowa kontrolka listy z możliwością edytowania pól, poszczególne kolumny mogą przyjąć jeden z kilku typów: normal, edit i combo.
Inspiracją była implementacja Editable Table Control - shilonira. Z powodu czego, większość kodu została zaadaptowana właśnie z tej implementacji, dodając kilka rozszerzeń.
Kontrolka EditListCtrl powstała głównie na potrzeby pluginu myself3.
Źródła z przykładową aplikacją można pobrać ze strony projects.malcom.pl. Kod wydany na zasadach licencji MIT (X11).
Tak jak zapowiadałem, nowy myself ;)
Plugin korzysta z biblioteki tlenek (linkowanej statycznie wersji 0.3 beta) i MFC.
Nowości w 3 odsłonie wtyczki:
obsługa wszystkich sieci (o ile autorzy wtyczek zadbali o współpracę z myselfem - develop.txt); avatary (o ile w Tlenie ktoś naprawi kilka błędów); szybka zmiana stanu - menu kontekstowe kontaktów myselfa; szybka zmiana opisu - dwuklik na kontakcie myselfa otwiera okno zmiany opisu; i inne ;) Wtyczka przy zerwaniu połączenia nie zmienia stanu swoich kontaktów, no chyba że TT zaimplementuje jakiś event do tego celu… Ja nie będę się babrał z timerami i sprawdzaniem stanu co 5 sekund ;)
I po kolejnym spotkaniu ludzi z branży IT na Śląsku - Spodek 2.2.
Nieco się spóźniłem, ale prędzej nie dałem rady się urwać z uniwerku. Tylko z Javy mogłem sobie pozwolić zniknąć ;)
A propos Javy, jaka jest poprawna wymowa “dżawa” czy “jawa”? Zgodnie z ustawą o języku polskim, zasadami i regułami językowymi, wydaje mi się, że chyba jawa jest polskim spolszczeniem nazwy tego języka, ale głowy nie daję.
Na Spodku było 5 prezentacji.
Szukam czegoś do “auto-wersjonowania”, najlepiej jakiegoś skryptu (Perl) lub sposobu, aby takowy napisać.
Zadaniem skryptu będzie odpowiednia akcja przy zdarzeniu repozytorium checkout lub commit. Oczywiście tym zadaniem jest automatyczna podmiana kilku danych dotyczących wersji w pliku nagłówkowym trzymającym takie dane.
Niestety żadnych ciekawych informacji nie znalazłem. Jedynie jakiś shellowy GETVERSION.
Do tego musi to działać z lokalnym repozytorium, bez serwera, na systemie Microsoftu.
A może sam Subversion posiada taką możliwość? Wszakże można “podczepić” skrypty pod odpowiednie hooki.
Kilka dni temu, chciałem sobie zaktualizować wtyczkę myself2 dla komunikatora Tlen.pl. W ogóle to chciałem ją nieco zmodyfikować, aby stała się bardziej “generyczna”, to jest, aby dodanie obsługi nowego protokołu ograniczało się do dodania identyfikatora protokołu do głównej tablicy i dodanie odpowiednich zasobów (kontrolek w dialogu opcji).
Pomysł dobry, tyle, że trzeba byłoby przepisać z 90% kodu ;)
Wtedy zacząłem sobie pisać jedną klasę, do łatwej obsługi okna opcji wtyczki. I zrodziła się idea, a raczej znów zaczęło chodzić mi po głowie, napisania obiektówki na API tlenowe, a może nawet coś więcej…
Już zaczynałem planować tworzenie jakiegoś wrappera w C++ do bazy/sterownika SQLite-a, po części wzorowanego na wxSQLite3. Dzięki czemu mógłbym łatwo, prosto i obiektowo operować na bazie SQLite w swoim programie. Ale właśnie znalazłem już coś gotowego i do tego polskiego ;)
Mowa oczywiście o ccSQLite.
ccSQLite to obiektowy wrapper na interfejs C biblioteki sqlite. Znacznie upraszcza korzystanie z jej dobrodziejstw i pozwala obsługę błędów biblioteki sprowadzić do przechwytywania wyjątków.
Jak sami autorzy piszą:
Trafiłem przypadkiem na ciekawą notkę Kuraka o dźwięcznym tytule “Bojownicy o wolność oprogramowania”.
Myślę, że wielu ludzi denerwuje takie nastawienie. Sprawa nie dotyczy tylko zwolenników i fanatyków OS (systemy operacyjne), ale także innych “specjalności”. Choć jak ktoś wspomniał, nie zauważa się takiego działania z drugiej strony frontu, czyli zwolenników win32.
Na marginesie dodam, że sam czasem korzystam z wolnego oprogramowania, a także wydaję różne swoje rzeczy na zasadach wolnych licencji. Warto jednak dodać, że free software !
Mam problem z przestrzeniami nazw w transformacji XSLT - brak nazwy lub prefiksu.
Po części problem opisano tutaj:
XSLT gotcha with default namespace set with xmlns XSLT 1.0 Pattern Matching Tips for Source Documents with Namespaces Dokładnie to chcę, aby XML:
<iq type="get" id="ab0ea"> <query xmlns="jabber:iq:roster"/> </iq> oraz
<iq xmlns='jabber:client' type="get" id="ab0ea"> <query xmlns="jabber:iq:roster"/> </iq> Był przetwarzany przez ten sam “template match” XSLT-a:
<xsl:template match="/iq"/> lub
<xsl:template match="/xmpp:iq"/> Może ktoś potrafi mi pomóc?
Nie wiem, jak jest zdefiniowana ta sprawa w standardzie, ale taki libxml2 białe znaki między elementami XML-a uznaje jako element. Skutkuje to tym, że mając taki XML:
<root> <node>node value</node> </root> pierwszym dzieckiem <root/>-a jest element zawierający tabulator i znak końca wiersza, a następnym dopiero <node/>.
Większość parserów, także tych “wbudowanych” w skryptowe języki - PHP, Perl, standardowo ignoruje takie elementy.
Miałem nadzieję, że libxml ma jakaś opcję pozwalającą zignorować puste elementy, ale niestety nic nie znalazłem.