Praca magisterska

tech, life • 841 słów • 4 minuty czytania

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)

user
20130206-173550-user

LaTeX-U, a nie LaTeX-IE :P
X to nie ‘iks’, a greckie ‘chi’ :P

Malcom
20130206-183606-malcom

No tak, ‘x’ w piśmie chyba zawsze będę podświadomie interpretował jako ‘iks’ ;)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/