Studia magisterskie…i co z tym blogiem?

Tak długiej przerwie w pisaniu na blogu chyba jeszcze nie miałem – nie udało się nic napisać w semestrze ani w czasie wakacji, nawet tradycyjny wpis o szkole się wymknął… Cóż, winnego daleko szukać nie będę, bo jestem nim ja. Taki stan rzeczy wcale mi się nie podoba, a wprost przeciwnie – powoduje wyrzuty sumienia i poczucie zmarnowanego potencjału… Czemu więc?

Brodzenie po kolana w g…

Uczciwie zastanowiłem się nad tą kwestią i odpowiedź jest bardzo prozaiczna. Żeby pisać na blogu trzeba to lubić, trzeba mieć o czym pisać, trzeba czuć entuzjazm do tematów, które się porusza… i to tyle. Bywały chwile, w których nie miałem z tym problemu jak choćby spora liczba wpisów o dotnecie czy też seria o osdevie. Oba tematy w tamtych czasach były mi bliskie, elektryzowały mnie na swój sposób – chętnie dzieliłem się nabytą wiedzą i nie miałem z tym problemów. Wspomniane przypadki łącz też jeszcze jedna rzecz – szczyt ich rozwoju przypadał na okres kiedy nie musiałem chodzić do szkoły.

Miniony, pierwszy semestr studiów magisterskich bardzo dotkliwie przypomniał mi jak studia przyczyniają się do mojego wypalenia. Ciężko odnaleźć w sobie entuzjazm i chęć do zajmowania się czymkolwiek jeśli kilka godzin spędza się na uczelni walcząc z jakimś „inżynierskim oprogramowaniem wysokiej klasy”, którego główną funkcjonalnością jest wyświetlania okienka z napisem Exception in thread „main” java.lang.NullPointerException, prawie dwie godziny na podróży do i z uczelni, wieczór na robieniu projektów, a noc na przygotowaniach do kolokwium. Studia magisterskie to nic więcej, jak tylko nieudana powtórka ze studiów inżynierskich – nieudana, bo jeszcze bardziej bez pomysłu. Przez ostatnie dwa miesiące widziałem wszystkie wschody słońca i wcale nie dlatego, że jestem taki romantyczny… Po prostu zajmowałem się bezmyślnym przetwarzaniem programów „inżynierskich”, formułek pseudomatematycznych, algorytmów których zastosowania jeszcze nikt nie odkrył i całej maści innego gówna. Osoba wymyślająca plan studiów powinna za karę resztę swojego życia spędzić na programowaniu w Javie, publicznie na rynku Starego Miasta… (resztę tej perwersyjnej fantazji bez opisu). Czy naprawdę ostatnim nierozwiązanym problemem informatyki jest to jak sklasyfikować wszystko za pomocą jakże porywających klasyfikatorów? Czy umiejętność odtworzenia algorytmu przekształcania automatu niedeterministycznego do deterministycznego naprawdę się może do czegoś przydać? Czy problemy grafowe ograniczają się do DFS-a i BFS-a? Retorycznych pytań tego typu mógłbym zadać jeszcze wiele… ale po co się denerwować? Wrzucanie wszystkich przedmiotów do jednego worka podpisanego „tragicznie złe” byłoby oczywiście niesprawiedliwe, bo w tym bagnie znalazłoby się po jednym przedmiocie z grupy „znośny”, „przeciętny” i „całkiem dobry”, ale niestety giną one w grubej warstwie gnoju.

Co dalej?

Są ludzie, nawet całkiem dużo, którzy lepiej radzą sobie ze studiami. Lepiej, to znaczy mniej się nimi interesują. Nie denerwuje ich niski poziom wykładów – po prostu na nie nie przychodzą. Nie starają się znaleźć wartości dodanej – uczą się w ostatniej chwili z gotowców. W końcu – nie zależy im na wynikach i mają dzięki temu lżejsze i pewnie ciekawsze życie. Mi to się niestety nie udaje. Mam głęboko zakorzenioną sumienność i jeśli już za coś się zabrałem (a tak właśnie zrobiłem) chcę to skończyć możliwie jak najlepiej.

Dobra wieść jest taka, że to jeszcze tylko bieżący i następny semestr i już koniec. Definitywnie. Na całe szczęście semestry te są maksymalnie odciążone, więc będę miał nieco więcej czasu dla siebie i oczywiście dla pracy magisterskiej. Kolejna praca dyplomowa to zdecydowanie najjaśniejszy punkt na tym zachmurzonym niebie studiów – to po prostu dobra zabawa i wielka satysfakcja z odkrywania czegoś nowego. Mam nadzieję, że uda mi się odnieść sukces co najmniej dorównujący pracy inżynierskiej. Co po studiach? Mam nadzieję, że uda mi się pokierować swoją karierą tak jak ja tego chce i nie dam się wkręcić w robienie czegoś czego nie chce tak jak ma to miejsce na studiach. Wtedy tematy na bloga na pewno pojawią się same, a wraz z nimi chęci :)

Ok, koniec już narzekania. Następny post mam nadzieję przed lutym!

Praca inżynierska – epilog

Blog nosi znamiona pamiętnika, zatem wpis ten powstaje ku pamięci, aby zachować historię powstawania moje pracy inżynierskiej. Tym samym skończę tematykę moich studiów inżynierskich, która pewnie dla niewielu osób jest interesująca.

Część praktyczna…

O szczegółach trudnych początków można było przeczytać wcześniej. W czasie wakacji skoncentrowałem się na tworzeniu praktycznej części pracy. Podczas analizy systemu Google Chrome OS napotkałem na pewien nierozwiązany problem. W Linuksie brakuje mechanizmu, który pozwalałby na ograniczenie dostępnego zbioru wywołań systemowych. Tego typu narzędzie pozwala na działanie w myśl zasady najmniejszego uprzywilejowania i powstrzymywanie ataków ze wstrzykiwaniem kodu. Istniejące rozwiązania są niewystarczające – posiadają zbyt małe możliwości, są niewydajne lub niebezpieczne. Z tego powodu ochoczo zabrałem się za stworzenie rozwiązania, które może sprostać oczekiwaniom projektu Chrome OS i pozostałej części społeczności :).

W związku z powyższym stworzyłem moduł, który pozwala pogrupować zadania w grupach kontrolnych, a następnie zdefiniować dostępny dla nich zbiór wywołań systemowych. Tym samym można zabronić procesom np. otwierania i tworzenia plików, zmieniania uprawnień, forkowania itd. Na uwagę zasługuje wydajność rozwiązania. Użycie modułu spowalnia zadania o nie więcej niż 5%, co jest zdecydowanie dobrym wynikiem na tle rozwiązań konkurencyjnych.

Sama implementacja nie była łatwa. Przy okazji tworzenia mechanizmu musiałem dogłębnie poznać działanie kilku elementów jądra, a także uważać na różne subtelności takie jak właściwa synchronizacja czy optymalizacja.

…teoretyczna…

Oprócz pierwszego rozdziału o mechanizmach bezpieczeństwa systemu Chrome OS, musiałem napisać jeszcze z 70 stron :). Dalsza część tekstu powstawała w minionym semestrze, a jej treść w zasadzie odzwierciedlała postępy w pracy. Drugi rozdział dotyczył zatem istniejących rozwiązań oferujących usługi ochrony dostępu do wywołań systemowych i dlaczego są złe ;>. Dalej było standardowo – rozdział pt. „Projekt”, w którym rozważałem możliwe podejścia do tematu, „Implementacja”, w której skoncentrowałem się na specyfice programowania w przestrzeni jądra oraz „Testowanie”, w którym przeprowadzałem dosyć hardkorowe testy wydajnościowe. Na koniec pozostało napisanie wstępu i zakończenia i gotowe! Wygląda to jak spacerek, ale tak naprawdę to był maraton. Pisanie tekstów technicznych jest trudne, nawet bardzo trudne. Praktyka w pisaniu na blogu to niewiele, ponieważ styl języka jest całkowicie inny. Ostatecznie udało się jednak złożyć pracę na czas, 3 dni przed terminem.

…i rezultaty

Oprócz tytułu zawodowego, udało mi się zdobyć coś (ideologicznie) wartego znacznie więcej – wiedzę. Mogę śmiało powiedzieć, że udało mi się znacznie rozmnożyć moje zasoby wiedzowe, co uznaję za największy sukces całego procesu dyplomowania. Mówiąc krótko – jestem dumny z wykonanej przeze mnie pracy i chyba nie ma w tym nic złego. Mam też nadzieję, że równie przyjemnie będzie mi się pracowało nad pracą magisterską.

W tym miejscu zachęcam do przeczytania przynajmniej fragmentów mojej pracy (jak tylko zostanie ona opublikowana), a także śledzenia wszelkich „ubocznych” efektów dyplomowania :).

inż. Łukasz

Tak oto upłynął mi semestr siódmy, całkowicie inny od pozostałych. Można powiedzieć, że nawet przyjemny i interesujący. W końcu udało mi się otrzymać 3 nowe litery i kropkę przed nazwiskiem, a to dla mnie całkiem miłe osiągnięcie :).

Semestr

Na ten semestr został mi już tylko jeden przedmiot – algorytmy heurystyczne. Niewiele mogę jednak o nim napisać, gdyż (niestety?) nie bardzo się do niego przykładałem z powodu zaangażowania w pracę inżynierską. Ot przedstawienie, podsumowanie wiedzy o metoda metaheurystycznych i trochę obrzydliwej matematyki. Na plus można zaliczyć fakt, że udało mi się przy okazji poznać nowy język – R, potrzebny do realizacji projektu.

Na oddzielny akapit zasługuje seminarium dyplomowe, na którym każdy uczestnik miał okazję opowiedzieć o swojej pracy dyplomowej. Inicjatywa całkiem fajna, bo rozwijającą. Ogromna różnorodność tematów pozwala doszkolić się z innych, niż własna, dziedzin. Przyczepić można się tylko do dwóch rzeczy. Przede wszystkim każdy uczestnik miał tylko 20 minut na prezentację, co jest śmiesznie małą ilością czasu. Ciężko w 1/3 godziny przedstawić efekt wielu dni pracy, ale widocznie „tak musi być”. Druga sprawa to jakość przygotowanego przez uczestników materiału – często co najmniej „słaba”. Niemniej jednak, takich inicjatyw powinno być więcej. Niech nie tylko wykładowcy mają prawo głosu :).

Praca inżynierska

Zdecydowaną większość semestru spędziłem na pracy nad dyplomem. Poważny risercz, dużo pisania – zajmowało to kupę czasu i co ważniejsze chęci i siły. Z tego też powodu zaniedbałem całkowicie bloga. Po spędzeniu kilku godzin dziennie na pisaniu, perspektywa tworzenia (dobrowolnie) notki na bloga powodowała u mnie niemal odruch wymiotny. W każdym razie, efekt mojej pracy jest (przynajmniej dla mnie) więcej niż zadowalający. Kompletny, funkcjonalny moduł jądra oraz około 90 całkiem treściwych stron pt. „Nowoczesne mechanizmy bezpieczeństwa w systemie Linux” są zwieńczeniem niemal roku pracy. Co jednak najważniejsze praca została oceniona na bardzo dobry z wyróżnieniem czyli nie tylko mi się podobała :).

Studia, studia… i po studiach

Udana obrona – studia ukończone na bardzo dobry z wyróżnieniem zakończyły inżynierski etap mojej edukacji. Nie mam ochoty ich podsumowywać, gdyż myślę, że byłoby to nierzetelne. Prawdziwy obraz moich studiów tworzą komentarze do poszczególnych semestrów, do których linki można znaleźć poniżej:

Odpowiem jednak przy okazji na proste pytanie: czy żałuję? Nie, nie żałuję. Tych 7 semestrów poszerzyło moje horyzonty w wielu kwestiach i nauczyło wytrwałości. Mogło być jednak znacznie lepiej. Szkoda zmarnowanego potencjału.
Co teraz? Odpowiedź jest prosta – czas na studia magisterskie – znowu na kochanym Wydziale :). Myślałem oczywiście o zmianie miejsca, ale najnormalniej w świecie – nie chce mi się.
PS. Blog dorobił się dwóch nowych działów Projekty i Publikacje. Zobaczcie koniecznie!

Jak (wg mnie) uczyć się na studiach?

Sześć semestrów studiowania już za mną – to znaczy, że jestem już za połową. Dużo kolokwiów i egzaminów udało mi się już zaliczyć, zarywając przy tym jeszcze więcej nocy. To wszystko znaczy, że pewne doświadczenie w studiowaniu już mam i wydaje mi się, że już niewiele rzeczy jest w stanie mnie na studiach zaskoczyć ;). Wiem, że zagląda tu sporo studenckiej braci, dlatego postanowiłem dać kilka porad młodszym rangą od siebie :).

Semestry początkowe, czyli kurowa wszystkich nauk

Na chyba każdej uczelni technicznej pierwsze semestry składają się głównie z matematyki. Algebra, analiza, logika, statystyka – to standard. Semestry te są też podobno najtrudniejsze i na nich odpada najwięcej osób. Na mojej kochanej Uczelni z matematyki dawano nieobowiązkowe zestawy zadań, które później robione były na ćwiczeniach. Jak się okazało, najskuteczniejszym podejściem do sprawy było po prostu robienie ich samodzielnie wcześniej. Owszem, zabierało to dużo czasu: dzień przed ćwiczeniami widywałem wschody słońca, przy piwku i zeszycie z całeczkami; owszem było to nudne, a czasem wręcz niesamowicie irytowało; ale owszem – dawało to wybitne wyniki: dzień przed kolokwium wystarczyło przejrzeć wykonaną wcześniej pracę, a samo kolokwium wydawało się dziecinnie proste. Do matematyki podejście jest więc proste: ćwiczyć, ćwiczyć i jeszcze raz klepać schematy – a zaliczenie przyjdzie bez problemu.

Warto jeszcze wspomnieć dwa słowa o wykładach i ćwiczeniach. Na wykładach bardzo często dyktowana jest książka (z dokładnością do takich samych przykładów). Można więc pokusić się o absencje, jednak wtedy trzeba taką książkę załatwić, albo wziąć od kogoś notatki. Ja mimo wszystko uczęszczałem na wykłady, głównie dlatego że najmilej czyta mi się swoje własne pismo i żartobliwe rysunki :P. Co do ćwiczeń, to warto chodzić – głównie po to, żeby zweryfikować swoje rozwiązania i załapać punkty za aktywność.

Semestry dalsze, czyli pozostałe dobrodziejstwa inwentarza

Pozostałe przedmioty na studiach (pamiętajmy, że ciągle mówimy o informatyce) można podzielić na takie, które wymagają wiedzy (np. architektura komputerów, systemy operacyjne, grafika komputerowa) i takie które wymagają klepania schematów (np. teoria obwodów, teoria informacji, automatyka, optymalizacja). Co do drugiej (gorszej, nota bene) kategorii strategia jest taka sama jak dla matematyki – trzeba się po prostu tych schematów nauczyć, a później na kolokwium/egzaminie wyklepać. Tutaj niebywale przydaje się bank kolokwiów i egzaminów z ostatnich lat do poćwiczenia. Poza tym, nie trzeba chyba wspominać, że wiele zadań się po prostu powtarza :). Nauka schematów jest żmudna, ale nie jest trudna, dlatego też chodzenie na wykłady z przedmiotów „schematycznych” jest raczej zbędne – chyba że ktoś naprawdę lubi patrzeć jak się oblicza kolejną całkę na tablicy.

Dosyć już jednak narzekania, przejdźmy do przedmiotów wymagających wiedzy, czyli bardziej złożonej materii. W trakcie 6 semestrów nauki udało mi się wypróbować dwie strategie – opiszę więc każdą z nich.

Noc przed, zasada indukcji, od zera do bohatera

Strategia ta jest bardzo prosta. Zakłada ona, że da się wszystkiego nauczyć na egzamin/kolokwium w nocy przed takowym. Zwykle nie ma wtedy mowy o spaniu, trzeba mieć dużo samozaparcia i wytrwale siedzieć i czytać. Strategia ta działa i jest praktykowana przez wiele osób – z sukcesami. Ma ona jeden szkopuł – niestety trzeba mieć pewną, podstawową wiedzę wyniesioną z wykładów (albo z książek, tudzież doświadczenia). Dla przykładu uczenie się algorytmów „od zera” w 8 godzin jest zbyt męczące psychicznie = niemożliwe. Z drugiej strony, mi z podstawami sztucznej inteligencji się udało – z zerową wiedzą wyniesioną z wykładu ;). Skuteczność tej metody zależy więc od materii i osobistych predyspozycji.

Zastanówmy się teraz nad czymś takim: „a co jeśli jednego dnia mam n kolokwiów?” (n > 1). Słynna zasada indukcji studenta mówi, że jeśli student jest w stanie nauczyć się do n kolokwiów w nocy przed, to jest też w stanie nauczyć się do n+1 kolokwiów. Dlatego jeśli jesteś w stanie przygotować się do kolosa na noc przed, to z dwoma, trzema… też nie będziesz miał problemów :). Tutaj jednak warto wiedzieć o zasadzie Pareto. Noc może nie starczyć, aby nauczyć się na 100%, jednak pewien (poniekąd 20%) wkład w każdy z n podproblemów da nam wysoki (poniekad 80%) wynik.

Co natomiast robić, jeśli na wykładach nie pojawialiśmy się w ogóle, a kolokwium/egzamin zbliża się nieubłaganie? Cóż, innego wyjścia nie ma, jak tylko kuć wytrwale nie przez jedną, a np. przez trzy kolejne noce. „Od zera do bohatera” w 3 dni wydaje się być osiągalne, niezależnie od poziomu skomplikowania materii. Może to być jednak wyjątkowo wyczerpujące i niemiłe. Spróbowałem raz – udało się, ale rzeczywiście było niemiło.

Systematyczność

Systematyczność – tego słowa nienawidzą wszyscy uczniowe. Nauczyciele nieustannie, od lat powtarzają – ucz się systematycznie, a wyniki przyjdą same. Po 5 semestrach wykorzystywania zasady „noc przed”, na 6 semestrze postanowiłem spróbować (eksperymentalnie) uczyć się systematycznie każdego przedmiotu. Nie ze wszystkimi się udało, bo niektóre były zbyt ohydne, ale jednak z większością tak :). Efekty? Znakomite. Wyniki oscylujące w okolicy 100% były normą. Koszt? Ogromny. Wymagało to wytrwałego chodzenia na wykłady i codziennej powtórki (około dwugodzinnej) tego, co udało mi się tam nauczyć. Dostrzegłem też pewien pozytywny efekt uboczny: w końcu czułem, że do przedmiotów, które lubie przykładam się w stopniu zadawalającym.

Aurea mediocritas

„Jak więc żyć, drogi Łukaszu?” słyszę pytania z tłumu. Już stoicy znali na nie odpowiedź: złoty środek. Dla przedmiotów ze schematami należy uczyć się schematów – najlepiej tak, aby mechanicznie je odtwarzać, gdy ktoś o nie pyta. Dla nudnych, nieciekawych przedmiotów wymagających wiedzy warto stosować taktykę „olewczą”, czyli uczyć się na noc przed. Do przedmiotów interesujących i lubianych najlepiej uczyć się systematycznie.

W ten sposób pielęgnujemy swoje pasje i zainteresowania i zaliczamy kolejne przedmioty, utrzymując przy tym stan frustracji na rozsądnym poziomie.

Disclaimer

Przedstawione powyżej metody działały dla mnie znakomicie. Nie tylko pozwalały gładko zaliczać kolejne przedmioty, ale również dawały dobre wyniki (jeśli mierzyć je wysokością oceny). Warto jednak pamiętać, że nie każdy ma taki sam styl nauki. Niektórzy nie są wstanie przesiedzieć nocy nad książką, innym wystarczy tylko chwilowe spojrzenie na coś i już to potrafią. Do tego, moje doświadczenia opieram wyłącznie na moich studiach, które mogą być specyficzne, ze względu na kierunek czy wydział/uczelnię. Należy więc wypracować indywidualny tryb pracy, a powyższe metody potraktować jako pewną możliwość. Sukcesu więc nie gwarantuję, jednak z całego serca życzę :).

Moja praca inżynierska

Pierwszy semestr działań związanych z pracą inżynierską za mną, pora więc na małe podsumowanie. Tak jak narzekam na wiele aspektów związanych z moimi studiami, to tym razem zdecydowanie są powody do zadowolenia. Poniżej skrótowy opis rozwój „sytuacji” w moim wypadku.

Prolog

Na koniec poprzedniego semestru należało zadeklarować opiekuna i temat pracowni inżynierskiej. Zadanie zdecydowanie niełatwe, szczególnie gdy ma się tylko garstkę własnych doświadczeń i cudzych opinii na temat poszczególnych ludzi. Temat też należy dobrać z głową, jednak tu już prościej – zwykle wiadomo co kogo interesuje :). Ja szczęśliwie nie miałem problemu z doborem prowadzącego – oczywiście chciałem, aby opiekunem pracy został dr inż. Tomasz Jordan Kruk. Wiązało się to z niemałym, papierkowym rajdem po dziekanatach i sekretariatach, jednak bez większych problemów. Problem był natomiast z precyzyjnym tematem pracy. Wiedziałem tylko, że chcę aby dotyczył on zagadnień niskopoziomowych, związanychz  systemami operacyjnymi. Od słowa do słowa, dostałem propozycję zajęcia się systemem Google Chrome OS… i zgodziłem się bez większych oporów :). Pełne brzmienie tematu zostało wybrane jako Budowa systemu Chrome OS – uroczo prawda? Temat zdecydowanie nieoklepany tzn. nieznany, co mogło się wiązać z pewnymi trudnościami.

Zawiązanie akcji

Kolejne tygodnie po wybraniu tematu wiązały się z przekopywaniem Internetu w poszukiwaniu informacji na temat tegoż tworu. Martwiące było to, iż odnalazłem pełno marketingowego bełkotu, a rzetelnych informacji – jak na lekarstwo. W zasadzie jedyne sensowne źródło wiedzy, to strona projektu z dosyć ubogą dokumentacją. Wyzwania – to lubię! Długa i dokładna analiza materiałów przekonały mnie, że najciekawszym elementem systemu Chrome OS są mechanizmy bezpieczeństwa. Za namową Prowadzącego, przez kolejne tygodnie pracowałem nad pierwszym rozdziałem mojej pracy, który nosi tytuł Mechanizmy bezpieczeństwa systemu Google Chrome OS. Muszę przyznać, że to dopiero było wyzwanie! Myśli i treści wiele, jednak ubranie ich w techniczno-naukowy język to prawdziwa sztuka. Uważam się za osobę, która dba o język polski, dlatego każde zdanie składałem z wielkim namaszczeniem. To nie to samo, co blog, gdzie mogę czasem strzelić emotkę, tudzież całkiem kolokwialne stwierdzenie, czy ohydny anglicyzm ;). Ostatecznie, tempo pisania sięgało jednego (sic!) słowa na minutę. Rewelacyjnie, prawda? Efektem tygodni pracy było 16 stron tekstu, z którego naprawdę jestem zadowolony. Mój Opiekun również docenił moją pracę i podsunął mi pomysł, aby zrobić z tego rodziału materiał konferencyjny bądź artykuł – czemu nie!

W tym miejscu wtrącę słówko na temat składania tekstu. Na mojej uczelni (jak zapewne na wielu innych) lansuje się system składu tekstu o intrygującej nazwie LaTeX. Przeczytanie książeczki o tym narzędziu zajęło mi 2 dni, które przepełniły mnie lekką obawą przed czymś z goła innym niż Word ;). Ostatecznie jednak, praca z LateXem okazała się prawdziwą przyjemnością i zdecydowanie ułatwiła mi pracę. Po prostu mogłem skoncentrować się na samym pisaniu, a  nie na ustawianiu marginesów. Z całego serca polecam wszystkim, do każdego rodzaju pisania (prace, dokumentacje, korespondencja, a nawet CV).

Rozwój akcji

Po napisanym rozdziale przyszła pora na wybranie części praktycznej (bo i z tego powinna się składać praca inżynierska). Tu zaczęły się niemałe problemy, bo rozszerzanie Chrome OS może być trudne i niewykonalne w przewidzianym czasie inżynierki. Szczęśliwie, podczas pisania poprzedniego rozdziału natrafiłem na bardzo ciekawą rzecz: koncepcję kontenerów procesów (jest to mechanizm parawirtualizacji o którym niebawem napiszę więcej). Zrodził się więc pomysł, aby rozszerzyć części składowe kontenerów. Ucieszyło mnie to niezmiernie, gdyż oznacza to dużo grzebania w Linuksie! Kolejne 4 tygodnie spędziłem na poznawaniu budowy Linuksa i oswajaniu się z procesem rozwoju jądra. Temat mnie naprawdę wciągnął i z trudem mogłem oderwać się od czytania artykułów i kodu oraz oglądania nagrań z różnych konferencji o tematyce jądra Linuksa. Finalnie, udało mi się zdecydować na rozwijanie mechanizmu cgroups i nad tym będę pracował w najbliższych tygodniach.

Uważny czytelnik może zauważyć, że od chwili wymyślenia tematu zacząłem dosyć mocno się od niego oddalać – i to jest właśnie najlepsza część mojej pracy inżynierskiej – mogę dowolnie zmieniać jej kształt i prowadzić rzeczywiste, odkrywcze badanie, a nie odtwórcze kompilowanie XX źródeł wiadomości. Aktualnie, wygląda na to, że temat będzie brzmiał Mechanizmy zabezpieczeń w nowoczesnych dystrybucjach Linuksa na przykładzie Chrome OS , ale kto wie co przyniesie przyszłość.

I co dalej?

Tak jak pisałem, będę teraz pracował nad praktyczną częścią pracy. Później przyjdzie pora na kolejne rozdziały – jakie? To się jeszcze okaże.

Mała porada

Wszystkim osobom, które dopiero szykują się do pisania pracy inżynierskiej polecam bardzo dobrze zastanowić się nad doborem opiekuna. Nieważne jak zdolni jesteście, dobry mentor może Wam wiele pomóc. Nie chodzi przecież o to, aby prowadził za rękę i pokazywał co, kiedy i ile napisać, tylko o to, aby odpowiednio kierunkował, podpowiadał i ostrzegał przed potencjalnymi zagrożeniami. Temat natomiast, przy współpracy z odpowiednią osobą, wyklaruje się sam.

„Daj się poznać” – pierwsze miejsce! Dziękuję!

Konkurs zorganizowany przez Maćka Aniserowicza dobiegł końca. Wg oficjalnych wyników zająłem w głosowaniu pierwsze miejsce! Cóż tu dużo pisać – ogromnie się cieszę, że praca wykonana przez te 3 miesiące spodobała się Czytelnikom. Tak jak już wspominałem jest to najlepsze motywacja, aby dalej aktywnie pracować nad projektem i blogiem – i tak w rzeczy samej będzie :).

Bardzo dziękuję Maćkowi i chylę czoła za trud i zaangażowanie, które włożył w przygotowanie konkursu. Ta inicjatywa to świetny pomysł na rozruszanie polskiego środowiska programistów. W moim wypadku, konkurs sprawił, że mój blog ożył, zyskał wielu nowych czytelników i osiągnał poziom, z którego w końcu jestem zadowolony.

Dziękuję również Czytelnikom – to w końcu dzięki Wam udało mi się zdobyć tak dobry wynik :). Szczerze powiedziawsz, nie spodziewałem się, że projekt nie .NETowy ma szanse na miejsce choćby w pierwszej piątce!

Dziękuję i gratuluję wszystkim Współzawodnikom, bez których konkurs nie byłby taki ciekawy. Sporo nowych, niezwykle ciekawych blogów dołączyło do mojego czytnika RSS :).

Teraz, po zakończeniu konkursu, powstało całkiem nowe zadanie – nie zawieść oczekujących na kolejne wpisy. Tak sobie myślę, że może być to trudniejsze niż sam udział w konkursie, bo jak wiadomo bez „bata nad głową” pracuje się ciężej :). Zrobię jednak wszystko co w mojej mocy, żeby nie rozczarować!

PS. Kolejny post na temat systemów operacyjnych już w przyszłym tygodniu! Natłok rozmaitych zajęć sprawił, że o wynikach konkursu dowiedziałem się od kolegi, a ten post ukazał się 3 dnia po ogłoszeniu wyników – proszę więc o wyrozumiałość ;).

„Daj się poznać” – finał!

Udało się! Dostałem się do finałowej siedemnastki konkursu Daj się poznać. Dziękuje wszystkim współzawodnikom, którzy oddali na mnie swój głos :) Jednocześnie zwracam się do wszystkich Czytelników, którym moje posty przypadły do gustu, z prośbą o oddanie na mnie głosu. Możecie to zrobić tutaj. Wasze uznanie dla mojej pracy, to najlepsza zachęta do dalszego, intensywnego pisania. Z góry dzięki! :)

Systemy operacyjne – książki

Wiedza, wiedza, wiedza…

Tworzenie systemów operacyjnych to niszowa dziedzina informatyki. Zajmują się nią nieliczni. Osobiście uważam jednak, że posiadanie wiadomości z zakresu systemów operacyjnych, to absolutny obowiązek każdego szanującego się informatyka. Nie myślę tu oczywiście o umiejętności obsługi Linuksa, czy też administracji Windowsem, tylko o zagadnieniach typu wieloprocesowość i wielowątkowość, synchronizacja procesów i wątków, szeregowanie, zarządzanie pamięcią, czy choćby znajomość zarysu historycznego początków informatyki. Wielu osobom może się wydawać, iż wiedza ta jest całkowicie zbędna „bo przecież ja programuję w .NET i nie robię żadnych wywołań systemowych i nie zarządzam pamięcią, tylko tworzę aplikacje webowe!”. Jasne, tak może być, tylko kompletna nieświadomość tego, co dzieje się „pod spodem”, może doprowadzić niejednokrotnie do katastrofy, a w innych sytuacjach wyjaśnienie takiego, a nie innego zachowania naszej aplikacji leży właśnie w systemie operacyjnym i jego „bebechach”. Jeśli to mimo wszystko nie przemawia, to po prostu powiem, że temat jest bardzo ciekawy i warto go zgłębić, choćby dla przyjemności :)

W dobie internetu, w którym wszystko można znaleźć, może się wydawać, że książki to przeżytek. Sam preferuję uczyć się nowych technologii z tutoriali i dokumentacji, gdyż zapewniają one absolutną aktualność zawartych informacji. Systemy operacyjne, jak już wspominałem wielokrotnie, to inna działka. Wiele wiadomości w tym zakresie to niezmienne od lat fundamenty, pozostałe natomiast zmieniają się bardzo powoli. Książki sprawdzają się tu bardzo dobrze, bo zapewniają całościowe i wyczerpujące podejście. Poza tym, kto nie lubi zapachu farby drukarskiej ponad świecący monitor?

Niekwestionowani liderzy

Rynek książek na temat systemów operacyjnych jest bardzo mały – tak jak mówiłem – nisza. Jak to się jednak mówi – nie ilość, ale jakość! Na polskim rynku niepodzielnie królują dwa tytuły i są to „Systemy operacyjne”, której autorem jest Andrew Stuart Tanenbaum, twórca kultowego systemu MINIX, od którego wiele się zaczeło oraz „Podstawy systemów operacyjnych” autorstwa Abrahama Silberschatza, Petera Baera Galvina oraz Grega Gagne’a. Najnowsze wydanie (trzecie) pierwszej z nich ukazało się w tym roku za sprawą wydawnictwa helion i pokrywa się z najnowszą, angielską wersją, natomiast druga z wymienionych książek wydawana jest przez WNT – najnowsze wydanie z 2005 roku, to wydanie szóste, podczas gdy na świecie mamy już wydanie ósme. Dodatkowo niepokojącym jest fakt, że już od długiego czasu na stronie wydawnictwa widnieje napis „Książka czasowo niedostępna”. Może to oznaczać, że nowe wydanie jest w drodze, albo niestety – jakieś problemy. Dość już jednak suchych faktów, przejdźmy do tego, co książki te oferują i która z nich jest lepsza.

Obie książki oferują całościowe ujęcie tematu. Znajdziemy w nich dużo wyczerpujących informacji na tematy takie jak historia systemów operacyjnych; podstawowe pojęcia; procesy i wątki – IPC, szeregowanie, synchronizacja; zarządzanie pamięcią – stronicowanie i segmentacja, algorytmy alokacji pamięci; system plików; wejście-wyjście; bezpieczeństwo. Dodatkowo „Podstawy systemów operacyjnych” zawierają obszerny rozdział poświęcony rozproszonym systemom operacyjnym, natomiast w ramach rekompensaty „Systemy operacyjne” posiadają duży rozdział o implementacji systemu operacyjnego. Na uwagę zasługują też rozdziały opisujące konkretne systemy operacyjne – co i jak zostało w nich zrealizowane. Oczywiście w książce Tanenbauma informacje dotyczą nowszych wydań konkretnych systemów.

Język obu książek nie jest szczególnie lekki, ale nie powiedziałbym, że czyta się je ciężko – tematyka wymaga (niestety, bądź stety) używania języka formalnego, jednak wszystko daje się zrozumieć. Ciężko też znaleźć fragmenty, w których autorzy „laliby wodę”. Moim zdaniem, udało się im zachować równowagę pomiędzy niejasną zwięzłością, a przesadną obszernością.

Żadna z książek nie wyczerpuje tematu, bo jest to raczej niemożliwe. Obie natomiast prezentują bardzo obszerny kawałek tematu na swoich ponad 1000 stronach. Która z nich jest zatem trafniejszym zakupem? Na dzień dzisiejszy odpowiedź jest prosta – jest to książka „Systemy operacyjne”, ze względu na łatwą dostępność (księgarnia helion 99 zł (!) na dzień dzisiejszy) i większą aktualność (mimo wszystko). „Podstawy systemów operacyjnych” daje się czasem trafić w antykwariatach, na kiermaszach, bądź na allegro, jednak jej cena sięga nierzadko… 300 zł ze względu na swoistą unikalność. Cena zabójcza. Aha, muszę jeszcze wspomnieć, iż obie książki posiadają niebanalne okładki :) Powiedziałbym nawet, że okładka „Systemów operacyjnych” to najciekawiej zaprojektowana okładka, jaką w życiu widziałem. Polecam zobaczyć ;>

Na zakończenie

Naprawdę gorąco zachęcam do przeczytania jednego z tych tytułów – i nieważne czy jesteś programistą, administratorem, architektem, serwisantem, czy reinstalatorem Windowsów – zawsze znajdziesz tam wiele ciekawych informacji, które – nóż, widelec – mogą się kiedyś przydać. A nawet jeśli nie – wiedza jest zawsze sexy i w modzie :)

EDIT 11.10.2010:

Na rynku brak książek rodzimych autorów o tematyce tworzenia czy budowy systemów operacyjnych, jednak właśnie dostałem informację, o pozycji, która niebawem się ukaże – Programowanie systemowe mikroprocesorów rodziny x86 autorstwa Włodzimierza Stanisławskiego i Damiana Raczyńskiego. Myślę, że warto spróbować!

Po co branchuję?

Ludzie branche tworzą…

Motywów do tworzenia gałęzi w projektach jest co nie miara. W nie tak prehistorycznych czasach (które chyba z resztą trwają do dziś) królowania CVS, a później SVN większość rzeczy trafiała bezpośrednio do trunka – głównej gałęzi. Rozgałęzienia były tworzone w momentach, gdy projekt rzeczywiście obierał dwa, dosyć odmienne biegi rozwoju (np. v1 i v2 – obie rozwijane). Inną strategią (nie wykluczającą pierwszej!) było tworzenie gałęzi – stabilnej, rozwojowej, a czasem eksperymentalnej i odpowiednie „code promotion”, czyli „przenoszenie” kodu między gałęziami: stabilna <- rozwojowa <- eksperymentalna. Jeszcze inny sposób wykorzystywania gałęzi, to oddzielny branch dla każdego podzespołu. Tak stworzone gałęzie były stopniowo (zwykle po zakończeniu pracy nad modułem) włączane do wspomnianego trunka. Powodem stosunkowo niedużej liczby rozgałęzień była największa bolączka wspomnianych scentralizowanych systemów kontroli wersji – nieprzyjemny merge.

W nowoczesnych-trendy-lux-czasach rozproszonych systemów kontroli wersji takich jak git, hg, bzr promuje się podejście „branch-per-feature” – czyli tworzenie nowej gałęzi dla każdego, nowego „ficzera”, każdego naprawianego buga itd. Nic co jest „work-in-progress” nie powinno trafić do gałęzi głównej. Wszystko to jest możliwe dzięki mniej bolesnemu merge’owaniu gałęzi, a takie podejście jest samo w sobie niezwykle wygodne i efektywne.

Nieco kreatywności

Przy okazji serii postów którą tworzę, potrzebowałem prostego i efektywnego sposobu udostępniania kodów dla poszczególnych odcinków serii. W grę wchodziło uploadowanie paczek z aktualnym kodem, dla danego odcinka, na serwer i linkowanie ich w notce. Szczerze powiedziawszy – nie znoszę takiego podejścia. Wydaje mi się, że łatwo doprowadza to do bałaganu, nieaktualnych wersji i niedziałających linków. Potrzebowałem lepszego sposobu i do głowy przyszedł mi pomysł.. aby każdy odcinek serii był oddzielnym branchem. Takie rozwiązanie ma szereg zalet: Czytelnicy mogą z łatwością pobrać aktualny, dla danego odcinka, kod; mogę bezproblemowo wnosić zmiany do kodu dla konkretnej części; struktura tego podejścia jest bardzo przejrzysta, a ponadto wyjątkowo łatwo się tym wszystkim zarządza. Z dodatkowych zalet warto wspomnieć o przeglądarce kodu na githubie, która umożliwia Czytelnikom natychmiastowy podgląd kodu dla danej części, bez potrzeby ściągania go. Jak dla mnie – rewelacja :) Przedstawione przeze mnie podejście ma oczywiście sens tylko w serii postów ze stopniowo przyrastającym kodem. Puryści mogliby jednak powiedzieć, że takie rzeczy powinno załatwiać się labelami, ale jak już wspomniałem – mam zamiar w miarę potrzeb aktualizować kod dla konkretnych odcinków, a zarządzanie etykietami, to nic przyjemnego.

Nowa, lepsza przyszłość? ;)

Cieszy mnie, że era linkowania paczek z kodem dobiega końca, a repozytoria wchodzą w coraz to nowe obszary działalności – ludzie za pomocą systemów kontroli wersji rozpowszechniają najróżniejsze rzeczy – począwszy od configów, aż do dokumentów. Niewątpliwa w tym zasługa ogólnodostępnych, darmowych, świetnie przygotowanych serwisów takich jak github, gitorious, czy bitbucket. Wydaje mi się, że używanie systemów kontroli wersji jest po prostu efektywne, łatwe, szybkie i pewne, zatem ich (nadchodząca) wszechobecność jest rzeczą naturalną. Koniec broken linków! :)

Konkurs „Daj się poznać”

Wydaje mi się, że środowisko polskich programistów jest naprawdę aktywne, jeśli chodzi o rozmaite wydarzenia, konferencje, inicjatywy czy konkursy. Widocznym problemem jest jednak brak lub mała widoczność projektów open source, które znacząco mogłyby podnieść jakość „sceny”. Naprzeciw temu (i nie tylko temu) zagadnieniu wyszedł Maciek Aniserowicz (ogromne wyrazy uznania!) ze swoim konkursem „Daj się poznać”. Zasady są bardzo proste – blogowanie przez minimum 10 tygodni wokoło projektu open source, którego samemu się tworzy. Autorzy najlepszych wpisów na swoich blogach zostaną nagrodzeni rewelacyjnymi i licznymi nagrodami po zakończeniu konkursu – 15 listopada. Start już 1 sierpnia, a więc nie zwlekajcie z rejestracją (ostateczny termin – 15 sierpnia)! :)

Od siebie dodam, że zamierzam wziąć udział w konkursie (ciekawe jak to będzie z regularnością moich wpisów, bo jak wiadomo, mam z tym problem, ale przy takiej motywacji.. ;>) z chyba dość nietypowym pomysłem, który zarazem będzie realizacją moich półrocznych planów. Nie będę wychodził przed szereg i więcej szczegółów na temat mojego projektu dopiero po oficjalnym rozpoczęciu :)

Blog Maćka

Strona konkursu