Quinto – prymitywna symulacja posiedzeń ONZ

Wieczorem 11 września br. zostałem poproszony przez znajomego o napisanie aplikacji dla Olsztyn Model United Nations. Miała ona za zadanie sprawdzać obecność i przeprowadzać głosowania, ot taka symulacja posiedzeń ONZ. Z powodu dość krótkiego czasu, bowiem niecałego tygodnia, zdecydowałem się na bibliotekę/framework Qt, bowiem wiedziałem, iż tworzenie aplikacji przy jego pomocy jest szybkie i wygodne. Sytuacja była podobna do wcześniejszej z pisaniem bota w Pythonie – zero doświadczenia.

Statystyki

Statystyki w programie Quinto

Wyniki głosowania

Wyniki głosowania w programie Quinto

Nazwa

Pozwolę sobie zacząć od nazwy programu, bo ona w sumie powstała najwcześniej 🙂 Tworząc nowy projekt w Qt Createrze, gdy wyskoczyło okno z pytaniem o nazwę projektu i nie mając ochoty na późniejsze zabawy z jej zmianą, najzwyczajniej w świecie, w parę sekund, posklejałem kilka randomowych głosek/sylab żeby „fajnie brzmiały”. Ot, mój geniusz 😛

Moje zmagania

Oczywiście rozpocząłem od utworzenia projektu i napisania pierwszej klasy – struktury danych reprezentującej państwo. Później jednak poszedłem po rozum do głowy i wyciągnąłem zeszyt, by zaprojektować aplikację tak, jak należy (mniejsza, że w szkole na religii i fizyce :P). Przy projektowaniu GUI nie miałem większego problemu – Qt Creator/Designer są bardzo intuicyjne. Podpięcie sygnałów do slotów też nie stanowiło dla mnie większego problemu. Jak ktoś nie zna mechanizmu sygnałów i slotów to radzę się z nim zapoznać, bowiem jest naprawdę ciekawy i warto go znać 🙂 Dopiero przy programowaniu GUI zaczęły się schody, jednakże w większości przypadków dokumentacja była zadowalająca. Najwięcej kłopotów przysporzyła mi obsługa kontrolki QListView (tej po lewej z listą państw). Zastosowano tu bowiem technikę Model/View i z początku było mi się ciężko połapać. Także pod koniec implementując ficzer możliwości wyboru państwa z listy miałem nielekkie kłopoty, jednakże udało się. Chyba najgłupszy błąd, który popełniłem, to ustawienie na końcu tekstu (kontrolka QLabel) znaku nowej linii i dziwieniu się, dlaczego siatka (QGridLayout) nie wyrównuje tekstu… No cóż – uczcie się na cudzych błędach 🙂

Te parę dni też mnie nieco zadziwiły. Pracowałem bardzo wydajnie – nie wiedziałem że tak potrafię! Kilka rad:

  • zaprojektuj najpierw cały system aplikacji – nie będziesz o tym myślał w trakcie pisania aplikacji (zyskasz naprawdę sporo na czasie i kod będzie lepiej zaprojektowany
  • rób listę TODO – nie będziesz się zastanawiał, co masz teraz zrobić
  • posprzątaj biurko – bałagan nie będzie cię rozpraszać
  • gdy pracujesz odetnij się od świata zewnętrznego – wyłącz wszelkie komunikatory, zamknij facebooka, nie sprawdzaj poczty, itp. – to tylko rozprasza
  • pracuj w blokach 50 minutowych – w pełni się skup i pracuj przez owe 50 minut, potem bezwzględnie przerwij (nawet jeśli będzie ci się chciało pracować, a będzie) i zrób sobie przerwę na minimum 10-15 minut, podczas której nie będziesz myśleć o projekcie – dzięki temu cały czas będziesz mieć ochotę do pracy i dodatkowo będziesz pracować wydajniej
  • przygotuj sobie czystą kartkę papieru i długopis – gdy pomyślisz o czymś w trakcie pracy to zapisz to na kartce i kontynuuj pracę – po prostu ta rzecz nie będzie cię rozpraszać; wykonasz ją w trakcie przerwy

Generalnie tych rad można by mnożyć w dziesiątki jak nie setki, ale nie o tym jest ten wpis – może kiedyś powstanie osobny post o tej tematyce. Chciałem tylko przedstawić kilka skuteczniejszych technik.

Trochę statystyk – projekt zawiera 29 plików nie wliczając plików graficznych (jest ich 8). W sumie zdefiniowałem 9 klas i napisałem 1160 linii kodu. Jak widać – bardzo mało – kolejna zaleta Qt 🙂 Dodam, iż sporo definicji metod (tych krótszych) umieszczałem bezpośrednio w plikach nagłówkowych w jednej linii – dla wygody, czytelności i szybkości kodu, choć rzekomo to jest zła praktyka – chyba faktycznie będę musiał tego zaprzestać.

Download & sources

Dzięki uprzejmości zleceniodawcy otrzymałem pełne prawa do aplikacji, więc postanowiłem otworzyć źródła i wszystko opublikować. Po niezbyt trafnym wyborze CC-BY 3.0 (nie służy do software’u) zmieniłem licencję na GNU GPLv3.
[download] oficjalnie repozytorium (git)
[download] mirror
Na dzień publikacji postu do ściągnięcia są dostępne 32-bitowe binaria dla systemów z rodziny Windows (nie mam OS X – jak jest ktoś chętny, to chętnie przyjmę builda). Jak uda mi się przygotować odpowiednią paczkę pod Linuxa to wrzucę ją pod wyżej zamieszczone adresy.

Jeżeli ktoś chce mój program do jakichś wyższych celów aniżeli prywatnych w domu i brakuje mu jakichś funkcjonalności – śmiało, niech do mnie napiszę. Może ulepszę ten program.

To chyba byłoby na tyle. Trochę offtopu, trochę chwalenia i na końcu program 🙂 Mam nadzieję, iż Was nie przynudzałem 🙂 Pozdrawiam!

2 myśli nt. „Quinto – prymitywna symulacja posiedzeń ONZ

Dodaj komentarz