Beta wersja loggera do obaczenia

Odpowiedz Nowy wątek
2011-09-09 13:48
0

(Modów działu proszę o przyklejenie tematu)

Czołem Bracia

Prezentuję wam tutaj beta wersję loggera dla biblioteki Qt nad którym od pewnego czasu pracuję:
http://4programmers.net/Forum/C_i_C++/183646-logger-lista_wymogow
Moją przewodnią ideą było stworzyć loggera dającego duże możliwości,ale zarazem prostego,a wręcz banalnego w instalacji oraz używaniu.Czy mi się to udało,sami oceńcie,a takoż czy jakiegoś ficzera mu nie brakło.

Instrukcja w załączniku;ponieważ prace nad loggerem nie zakończyły się jeszcze,to się nie spinałem żeby zrobić ją po angielsku.

A,i istotna sprawa-w tej beta wersji logger nie jest przystosowany do używania go z wątków pobocznych aplikacji,więc nawet tego nie próbujcie.

Chciałem podziękować za rady i wskazówki Braciom Kumashiro,byku_guzio oraz vpiotr

EDIT:Poprawiłem dokumentację,traktujcie tą w .zipie jako nieaktualną i bierzcie tą z oddzielnego linka


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 2x, ostatnio: madmike, 2011-09-18 14:19
Pokaż pozostałe 4 komentarze
Niestety,nadal linuksów nie trawię :/ - MasterBLB 2011-09-12 13:19
Bywa i tak :) - Kumashiro 2011-09-14 10:53
E poczekaj chwilkę jeszcze,bo będzie 2,a w sumie 3 podejście.Tylko że wtedy .so nie na Qt 4.5.0 będą ale na nowsze - MasterBLB 2011-09-14 10:57
Zrób betatesty na Windows, a później udostępnij źródła. Potrafimy kompilować biblioteki ;) - Kumashiro 2011-09-14 13:17
Tak byłoby najprościej,rzecz w tym że to nie jest open source. - MasterBLB 2011-09-14 13:47

Pozostało 580 znaków

2011-09-10 09:06
0

Patrząc w nagłówek bez używania:

1) setMaximumLogFileSizexB - wywaliłbym bo niepotrzebnie rozbudowuje interfejs (każdy PROGRAMISTA potrafi sobie to przeliczyć)

2) bool allowLogTypes(unsigned int type); - nazwy funkcji powinny pochodzić od czynności, a atrybutów od rzeczowników lub przymiotników
tutaj masz taką trochę pseudo-czynność w odniesieniu do atrybutu, lepsze byłoby "allowedLogTypes"

3) dla atrybutów używasz schematu setXxx(value) - setter, xxx() - getter, ale allowLogTypes się tego nie trzyma, LogWindowAlwaysOnTop też
Lepszy jest schemat setXxx(value), getXxx() - czytelniejsze

4) QString identifier(void);

  • jeśli identyfikator się nie zmienia to lepiej:
    const QString &identifier() const; // w C++ pisze się bez void w argumentach + const correctness + szybsze

  • jeśli identyfikator się zmienia - bo to jest generator identyfikatorów
    QString nextIdentifier();

5) bool setLogMode(LogMode mode);

  • zwracanie bool w tym wypadku jest trochę nadmiarowe, naprawdę może się nie udać?

6) bazowanie na QStringu od razu zawęża grupę odbiorców (właśnie ostatnio wywaliłem wxString z projektu, bo bazowanie na stringach z GUI ma później niepotrzebny wpływ na projekt - np. niekompatybilną obsługę Unicode - w Wx). Ale jeśli to i tak przede wszystkim okienko to chyba jest OK.

7) do dokumentacji kodu polecam doxygen - dokumentacja praktycznie sama wychodzi - przy okazji

Licencja
Gdybyś dał BSD lub MIT to nie byłoby potrzeby zastanawiania się czy czasami gdzieś nie ma zwodniczego przecinka.

Gdybyś chciał się odgryźć lub sprawdzić recenzenta to wystarczy zaguglać "vpiotr c++" - wszelkie uwagi chętnie przeczytam.


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 1x, ostatnio: vpiotr, 2011-09-10 09:07

Pozostało 580 znaków

2011-09-10 11:03
0
vpiotr napisał(a)

setMaximumLogFileSizeKB - wywaliłbym bo niepotrzebnie rozbudowuje interfejs (każdy PROGRAMISTA potrafi sobie to przeliczyć)

Pewnie,ale nie tędy droga prowadzi żeby kalkulatorem/w mysli wyliczać wielkość pliku logu,jeśli celem jest wygoda użytkowania biblioteki.

vpiotr napisał(a)

bool allowLogTypes(unsigned int type); - nazwy funkcji powinny pochodzić od czynności, a atrybutów od rzeczowników lub przymiotników
tutaj masz taką trochę pseudo-czynność w odniesieniu do atrybutu, lepsze byłoby "allowedLogTypes"

allowedLogTypes() są getterem.Ale fakt,jak oglądałem te funkcje leżące obok siebie w klasie to mnie nachodziły myśli,czy czasem nie lepiej przemianować na setAllowedLogTypes()

vpiotr napisał(a)

dla atrybutów używasz schematu setXxx(value) - setter, xxx() - getter, ale allowLogTypes się tego nie trzyma, LogWindowAlwaysOnTop też
Lepszy jest schemat setXxx(value), getXxx() - czytelniejsze

Czytaj wyżej ;) A ja stosuję konwencję z biblioteki Qt,gdzie gettery mają postać xxx() właśnie.

vpiotr napisał(a)

QString identifier(void);

  • jeśli identyfikator się nie zmienia to lepiej:
    const QString &identifier() const; // w C++ pisze się bez void w argumentach + const correctness + szybsze

  • jeśli identyfikator się zmienia - bo to jest generator identyfikatorów
    QString nextIdentifier();

Cóż,tutaj jest trochę względów historycznych.Nie chciałem dać żadnej możliwości zmiany tego identyfikatora przez złośliwego użytkownika,bo przewidywałem na przyszłość,iż będzie mi on potrzebny-stąd zwracanie wskaźnika/referencji odpada,bo consta da się obejść jak się ktoś uprze.
Jak jednak czas pokazał,akurat stąd nie używam go,niewykluczone więc iż ta funkcja wyleci-chociaż z 2 mańki,ktoś może sobie getLoggerem() natworzyć dużo logerów i wpakować do listy.I żeby rozróżnić który jest który to tego identyfikatora będzie potrzebował.
A voida pisać akurat lubię,wstukanie tych paru literek więcej mi nie przeszkadza.

vpiotr napisał(a)

bool setLogMode(LogMode mode);

  • zwracanie bool w tym wypadku jest trochę nadmiarowe, naprawdę może się nie udać?

Może się nie udać.Nie czytałeś instrukcji,co Piotr? :P No więc false da próba nastawienia któregoś trybu LogToWindow w aplikacji konsolowej.

vpiotr napisał(a)

bazowanie na QStringu od razu zawęża grupę odbiorców (właśnie ostatnio wywaliłem wxString z projektu, bo bazowanie na stringach z GUI ma później niepotrzebny wpływ na projekt - np. niekompatybilną obsługę Unicode - w Wx). Ale jeśli to i tak przede wszystkim okienko to chyba jest OK.

Grupa odbiorców na wstępie jest zawężona do tych,co to biblioteki Qt używają,a im tam QString nie wadzi.Ponadto używam wewnętrznie duużo elementów kuteka,od QCoreApplication po model/view programming,a dojdzie do tego jeszcze kutowska obsługa wielowątkowości.

vpiotr napisał(a)

do dokumentacji kodu polecam doxygen - dokumentacja praktycznie sama wychodzi - przy okazji

Znam,używałem w pracy-imo nędza,a to potemu,że straszliwy burdel robi się w pliku .h z klasą i niełatwo jest w tym gąszczu wychwytywać definicje pól i metod,nawet przy kolorowaniu składni.Fakt,dokumentacja potem z tych komentarzy doxygenowych powstaje sama.

vpiotr napisał(a)

Licencja
Gdybyś dał BSD lub MIT to nie byłoby potrzeby zastanawiania się czy czasami gdzieś nie ma zwodniczego przecinka.

Nie jest to projekt opensourcowy,więc MIT i BSD nie przejdą.

vpiotr napisał(a)

Gdybyś chciał się odgryźć lub sprawdzić recenzenta to wystarczy zaguglać "vpiotr c++" - wszelkie uwagi chętnie przeczytam.

Za co mam się odgryzać to nie wiem,a co do moich uwag apropos Twojego wrappera:
1)Mam awersję to zapisów w stylu typedef list<coś>.Lubię jednak wiedzieć patrząc na definicję,że to na co patrzę to lista,czy mapa.Mam jednak świadomość,że dzięki typedefowi w niezwykle łatwy sposób zmienisz sobie używanie np z listy na wektor w całym projekcie zmieniając tylko tego typedefa
2)

static void calcMD5(const std::string &text, std::string &output);

przy tej metodzie zaliczyłem lekkie WTF?MD5 nic mi nie mówi,imo lepiej byłoby skrót rozwinąć,zwłaszcza że inne metody nie są zapisywane w tak kryptograficznej postaci


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-09-10 11:04

Pozostało 580 znaków

2011-09-10 11:33
0
MasterBLB napisał(a)
vpiotr napisał(a)

setMaximumLogFileSizeKB - wywaliłbym bo niepotrzebnie rozbudowuje interfejs (każdy PROGRAMISTA potrafi sobie to przeliczyć)

Pewnie,ale nie tędy droga prowadzi żeby kalkulatorem/w mysli wyliczać wielkość pliku logu,jeśli celem jest wygoda użytkowania biblioteki.

tu nie ma co liczyć, jeśli ktoś chce być super-dokładny to pisze:

log.setMaximumLogFileSize(14*1024);

Mnożenie metod przez liczbę dostępnych jednostek dla danej wartości jest IMHO słabe.

MasterBLB napisał(a)
vpiotr napisał(a)

QString identifier(void);

  • jeśli identyfikator się nie zmienia to lepiej:
    const QString &identifier() const; // w C++ pisze się bez void w argumentach + const correctness + szybsze

  • jeśli identyfikator się zmienia - bo to jest generator identyfikatorów
    QString nextIdentifier();

Cóż,tutaj jest trochę względów historycznych.Nie chciałem dać żadnej możliwości zmiany tego identyfikatora przez złośliwego użytkownika,bo przewidywałem na przyszłość,iż będzie mi on potrzebny-stąd zwracanie wskaźnika/referencji odpada,bo consta da się obejść jak się ktoś uprze.
Jak jednak czas pokazał,akurat stąd nie używam go,niewykluczone więc iż ta funkcja wyleci-chociaż z 2 mańki,ktoś może sobie getLoggerem() natworzyć dużo logerów i wpakować do listy.I żeby rozróżnić który jest który to tego identyfikatora będzie potrzebował.
A voida pisać akurat lubię,wstukanie tych paru literek więcej mi nie przeszkadza.

To trochę pesymistyczne założenie, ale przynajmniej bezpieczne - więc jeśli funkcja nie jest zbyt często wywoływana to OK.

MasterBLB napisał(a)
vpiotr napisał(a)

Gdybyś chciał się odgryźć lub sprawdzić recenzenta to wystarczy zaguglać "vpiotr c++" - wszelkie uwagi chętnie przeczytam.

Za co mam się odgryzać to nie wiem,a co do moich uwag apropos Twojego wrappera:
1)Mam awersję to zapisów w stylu typedef list<coś>.Lubię jednak wiedzieć patrząc na definicję,że to na co patrzę to lista,czy mapa.Mam jednak świadomość,że dzięki typedefowi w niezwykle łatwy sposób zmienisz sobie używanie np z listy na wektor w całym projekcie zmieniając tylko tego typedefa
2)

static void calcMD5(const std::string &text, std::string &output);

przy tej metodzie zaliczyłem lekkie WTF?MD5 nic mi nie mówi,imo lepiej byłoby skrót rozwinąć,zwłaszcza że inne metody nie są zapisywane w tak kryptograficznej postaci

</quote>

Skrótów używam wtedy, gdy są one oczywiste. Przykłady oczywistych to HTTP, CRC, SQL, Ascii, Os. Tutaj powinno być właściwie calcMd5 (case), poza tym jest OK.
Akurat trafiłeś, bo MD5 to kryptografia :) Więcej znajdziesz tutaj: http://en.wikipedia.org/wiki/MD5


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 1x, ostatnio: vpiotr, 2011-09-10 11:37

Pozostało 580 znaków

2011-09-10 11:48
0

Ja akurat tych metod mam na tyle mało,że 1 więcej nie robi.Za to sam powiedz vpiotr,częściej nastawiałbyś wielkość logu w megabajtach czy kilobajtach?Wiadomo że w MB,ale tutaj powstaje pytanie a co jak będzie trzeba akurat w kilobajtach nastawić?I już lipa,bo jako parametr jest liczba całkowita.Z kolei ciągle wymnażać żeby uzyskać MB to też tak nie do końca teges-i stąd zapodałem 2 wersje.

Właśnie sprawdziłem swój kod i wyszło mi,że ten identifier() zwraca identyfikator wewnętrznego obiektu loggera używanego ostro przez wszelakie mechanizmy mojej biblioteki.O to nie ma bata,w takiej postaci nie dam żadnej,nawet teoretycznej możliwości jego zepsucia przez użytkownika zwracając doń referencję.

Co do MD5 tak myślałem,że to jakiś skrót od nazwy algorytmu,no ale na chwilę czytania kodu nie kojarzyłem co to,a góglować mi się nie chciało :P


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-09-10 12:00
0
MasterBLB napisał(a)

Ja akurat tych metod mam na tyle mało,że 1 więcej nie robi.Za to sam powiedz vpiotr,częściej nastawiałbyś wielkość logu w megabajtach czy kilobajtach?Wiadomo że w MB,ale tutaj powstaje pytanie a co jak będzie trzeba akurat w kilobajtach nastawić?I już lipa,bo jako parametr jest liczba całkowita.Z kolei ciągle wymnażać żeby uzyskać MB to też tak nie do końca teges-i stąd zapodałem 2 wersje.

Staram się ograniczać permutacje funkcji, jeśli prowadzą w gruncie rzeczy do tego samego.
Co innego, gdybyś jakieś kalkulacje tego typu miał robić przed każdym (wielokrotnym) wywołaniem.
Ja w sumie u siebie w loggerze też się nad tym zastanawiałem, ale uznałem że dwa mnożenia są lepsze. Kwestia gustu.


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 1x, ostatnio: vpiotr, 2011-09-10 12:02

Pozostało 580 znaków

2011-09-12 19:08
0

Hmmm 14 ludków zassalo 3 dni temu i żadnego odzewu?Dziwne


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-09-12 23:51
0

Wrzucę sobie maksymalny rozmiar do configu to mam walnąć drabinkę ifów bo jest "przyjazny interfejs"?


Women were the reason I became a monk - and, ah, the reason I switched back...
Napisz Bracie w poście,co dokładnie masz na myśli. - MasterBLB 2011-09-13 10:51

Pozostało 580 znaków

2011-09-13 02:44
0

Chciałbym zadać głupie pytanie.
Czy nie ma na rynku takich rozwiązań? Bo projekt "do nauki języka" to chyba nie jest.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-09-13 10:04
0

Być to są,np Log4Cpp,inna sprawa jak wygodne w użyciu.A dla mnie to jest bardziej projekt do wpisania w CV i pokazania pracodawcy oraz żeby utrzymać się w formie podczas okresu bezrobocia.Drugą jego funkcją jest poćwiczenie aplikacji wielowątkowych 'tak na serio',bo owszem teorię znam,jakieś tam programy wykorzystujące wielowątkowość napisałem ale nie były to programy,w których owa wielowątkowość faktycznie była potrzebna do celów innych niż ćwiczebne.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-09-18 10:25
0

No Bracia co pobraliście bibliotekę,jakiś odzew może?Jeden Demonical Monk miał jakąś myśl skrzydlatą,ale nie chce się widzę nią podzielić.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0