Praca magisterska
Ta notatka została oznaczona jako wymagająca dopracowania: kod w repo.
Zawartość wpisu może ulec zmianie, zatem zapraszam do ponownych odwiedzin w niedalekiej przyszłości :)
Trochę dawno to już było, ale do tej pory nie miałem okazji poruszenia publicznie tego tematu. Tak się składa, że ponad 1,5 roku temu, w czerwcu 2011 roku, na Wojskowej Akademii Technicznej po ciężkiej 3 tygodniowej pracy redagowania i twórczego tworzenia obroniłem tytuł magistra. Gdybym nie był na studiach cywilnych byłbym teraz oficerem - podporucznik magister inżynier ;)
Temat mojej pracy brzmiał: “Konstrukcja i integracja mechanizmu monitorów statystycznych na potrzeby symulacji w języku C++”. Jej podstawowym celem było zaprojektowanie oraz implementacja przenośnej i wydajnej biblioteki udostępniającej monitory statystyczne wraz z przykładami wykorzystania i użycia. Obok “kodowych” celów, jednym z bardziej teoretycznych aspektów pracy była analiza i przegląd charakterystyk i parametrów statystycznych jakie można wykorzystać i zaimplementować w tworzonym mechanizmie monitorów, a także analiza możliwości wizualizacji wyników. Do tego doszedł jeszcze jeden byt - przeprowadzenie eksperymentu/symulacji SMO z wykorzystaniem stworzonej biblioteki jako realnego przykładu użycia i integracji z innymi narzędziami i środowiskiem symulacyjnym. Bardziej dogłębne i dokładniejsze informacje można znaleźć w samej treści pracy w rozdziale “Cele pracy”.
Część tekstowa pracy, jak wspomniano, powstawała w około 3 tygodnie. Natomiast część związana z samym kodowaniem, konstrukcją i projektowaniem zajęła już nieco więcej czasu - tworzona była na przestrzeni dłuższego okresu. Gotową pracę udało mi się złożyć nieco po czasie, prawie przed samymi obronami - w piątek, a w środę byłem już po obronie. To wszystko dzięki życzliwości dziekanatu, ale jak to zawsze bywa, swoje trzeba było przejść.
Na samej obronie, oprócz prezentacji pracy i egzaminu/pytań, nie obyło się bez jakiś akcji - na przykład dyskusja i mała kłótnia dotycząca tego czy C++ jest przenośny i cross-platformowy. Dla niektórych definicja przenośności ogranicza się do poziomu binarnego/kodu wynikowego i ciężko wytłumaczyć, że istnieje też przenośność na poziomie kodu źródłowego. Bo dobrze napisany kod w C i C++ z użyciem standardowej biblioteki (i wielu innych) bez problemu można skompilować i uruchomić na innej platformie…
W czasie prezentacji oprócz slajdów był też króciutki filmik, który przedstawiał w wersji skondensowanej użycie stworzonego programu do symulacji SMO. Było to bardzo dobrym pomysłem, niż ewentualna prezentacja “online”, w czasie której mogłoby pójść coś nie tak, o czymś zapomnieć etc… A tak komentarze do nagranego materiału były przećwiczone i wszystko co chciałem zostało przedstawione. Mimo wszystko, gdy lektor (ja) się chwilowo zająknął komisja stwierdziła, że “nie jest tu od oglądalna filmów” i całego chyba nie udało się zaprezentować ;)
Biblioteka sim::mon
jest multiplatformową, open-source-ową (MIT) biblioteką template-based, wykorzystującą szablony i generyczność w celu zapewnienia efektywności i elastyczności, dająca się w łatwy sposób rozszerzać o nowe możliwości i funkcje. Nie wymaga kompilacji, w całości oparta jest na szablonach, do działania wymaga boosta. Do biblioteki dołączono sample ukazujące sposób użycia i wykorzystania, rozszerzania oraz integracji z innymi środowiskami i toolkitami. Niektóre dołączone przykłady i sample korzystają z innych, dodatkowych bibliotek. Przykłady z GUI, wizualizujące dane na wykresach, zbudowano z zastosowaniem dwóch najpopularniejszych toolkitów graficznych - wxWidgets i Qt. Aplikacje wx’owe oparto na wersji 2.9.1 (trunk) oraz bibliotece do wykresów wxFreeChart w wersji 1.7 (trunk), natomiast qt’owe na wersji 4.7 frameworka i bibliotece renderującej wykresy Qwt w wersji 6.
Mimo iż biblioteka jest (miała w zamierzeniu być) multiplatformowa to oryginalna wersja dołączona do pracy działa tylko pod systemem Windows i kompilatorem MSVC. Związane jest to z wykorzystaniem pewnych rozszerzeń tego kompilatora (lub błędów), które w czasie tworzenia ułatwiły prace, a później zapomniane i nie poprawione. Kompilator z Visual’a na podstawie kontekstu potrafi wydedukować, czy podana nazwa odnosi się do nazwy zmiennej czy nazwy typu, zatem nie trzeba tego jawnie specyfikować za pomocą typename
. Podobnie, w klasach szablonowych, wszystkie typy stowarzyszone są dziedziczone przez klasy pochodne, co nie wymaga jawnego definiowania “aliasów” do nich za pomocą typedef
lub using
, gdzie typ stowarzyszony jest zależny od specjalizacji szablonu.
Finalnie, z braku czasu i innych problemów nie zostało to zmienione, ale przygotowałem odpowiednią poprawkę, która naprawia te niedociągnięcia. Patch ten (sim_mon.patch
) tylko rozwiązuje problem crossplatformowości. Nie naprawia innych (potencjalnych) błędów i elementów biblioteki, ani nie ulepsza kodu, mimo, iż po jego zastosowaniu niektóre rzeczy można byłoby zrobić inaczej i lepiej. Wtedy jednak niektóre fragmenty kodu i opisy zawarte w treści pracy utraciłyby ważność i stałyby się niepoprawne, a tego chciałem uniknąć.
Oczywiście, podobnie jak moja praca licencjacka, jak przystało na prawdziwego inżyniera i technika, moja praca magisterska również została napisana w LaTeX-u. Oczywiście na przekór wszystkim, bo po co polskie uczelnie techniczne i nietechniczne (z technicznymi kierunkami) mają ułatwiać to zadanie i udostępniać gotowe klasy bądź szablony latexowe. Wszakże, wszyscy powinni pisać prace w Wordzie lub innym WYSIWYG… chyba na polonistyce!
Także, podobnie jak licencjat, niejako kontynuując tradycję publikowania swojej pracy dyplomowej, magisterka wraz ze wszystkimi źródłami i materiałami od dawna leży na mojej stronie pod adresem malcom.pl/msc.
Stworzona na potrzeby pisania pracy w LaTeX-ie klasa WATthesis.cls
umożliwiająca skład pracy zgodnie z wymogami WAT-owskimi zostanie również upubliczniona (mimo iż jest dołączoną do pracy). Wrzucę ją gdzieś wraz z jej odpowiednikiem “licencjackim” z US-ia na project.malcom.pl lub swojego repozytorium luźnych kodów [mal-repo-code]. Być może komuś się jeszcze przyda, tak samo jak źródła tekstowe pracy mogą komuś ułatwić redagowanie własnej pracy lub dowolnego innego dokumentu składanego przy użyciu LaTeX-a.
Komentarze (2)
LaTeX-U, a nie LaTeX-IE :P
X to nie ‘iks’, a greckie ‘chi’ :P
No tak, ‘x’ w piśmie chyba zawsze będę podświadomie interpretował jako ‘iks’ ;)