sobota, 12 marca 2016

Informatyka w praktyce. Część pierwsza: Git

Powrót po długim czasie w bardziej już informatycznym stylu - a to za sprawą praktyk, które konieczne są do ukończenia moich wspaniałych studiów.Ponieważ praktyki te wykonuję u mojej Najstarszej Siostry, która jest doświadczonym programistą, istnieje szansa, że czegoś wreszcie się nauczę :)Pierwszym tematem jest system kontroli wersji na przykładzie Git. 

1. Czym jest system kontroli wersji


Za Wikipedią:"System kontroli wersji (ang. version/revision control system) – oprogramowanie służące do śledzenia zmian głównie w kodzie źródłowym oraz pomocy programistom w łączeniu zmian dokonanych w plikach przez wiele osób w różnych momentach czasowych."Do czego takie cuś się przydajeNiezależnie od tego, czy używa się go dla samego siebie, czy dla grupy osób, pozwala on na takie rzeczy, jak śledzenie zmian na plikach, czy w kodzie dokonanych w czasie przez jedną lub więcej osób. Co za tym idzie, porównywać te zmiany, łatwo prześledzić, które zmiany wpłynęły na co, kto dokonał tychże zmian (jak coś zepsuto, to wiadomo kogo stłuc), przywrócić pliki do wcześniejszego, dowolnie wybranego stanu (gdy coś się zepsuło, utracono jakieś pliki lub stwierdziliśmy, że dana droga prowadzi donikąd).Jak działa system kontroli wersjiPodchodząc do sprawy od strony laika można powiedzieć, że najprostszy model kontroli wersji stosowany jest również przez osoby, nie mające o tym zielonego pojęcia, na zasadzie działania czysto intuicyjnego. Kiedy przed stworzeniem obrazu wykonujesz kilka szkiców, a przed wyborem ścieżki w grze RPG klikasz na "save" żeby móc zmienić tą decyzję gdy okaże się, że to jednak nie to co chciałeś, można powiedzieć, że również stosujesz swego rodzaju system kontroli wersji na poziomie basic. Informatycy stworzyli zaawansowane systemy kontroli wersji, aby ułatwić nam życie - dzięki nim, nie musimy pamiętać o tym, by regularnie robić zapisy kolejnych wersji, przechowywać je w kilku miejscach, czy prowadzić dochodzenie mające na celu stwierdzić, kto dokonał jakich zmian we współdzielonych plikach.

2.Rodzaje systemów kontroli wersji

Możemy wyodrębnić trzy rodzaje systemów kontroli wersji: lokalne, scentralizowane i rozproszone.
1. Lokalne systemy kontroli wersji (VCS)
Składają się one z prostej (i oczywiście lokalnej) bazy danych, w której przechowywane są wszystkie zmiany dokonane na śledzonych plikach. Jednym z najpopularniejszych i niekiedy wciąż używanym VCS jest rcs. Służy on jednak do kontrolowania pojedynczych plików i nie nadaje się do śledzenia zmian dokonanych w całych projektach.

2. Scentralizowane systemy kontroli wersji (CVCS)
Powstały jako odpowiedź na zapotrzebowanie kontroli nad plikami, do których dostęp jest możliwy z różnych systemów/ urządzeń. Realizowane są one w architekturze klient-serwer, przy czym serwer jest jeden, a klientów może być wielu. Takie systemy nie tylko dają możliwość współpracy większej ilości osób nad danym zbiorem plików, ale również są łatwiejsze w zarządzaniu niż systemy lokalne. Problematyczne jest tutaj jednak oparcie systemu na tylko jednym serwerze - w przypadku jego awarii, niemożliwa będzie praca na udostępnianych plikach. Kolejny problem to dostęp jedynie do najnowszej wersji śledzonych plików.
Najpopularniejszymi systemami z tej rodziny są: CVS (Concurrent Versions System), jego następca Subversion, czy komercyjny Perforce.

3. Rozproszone systemy kontroli wersji (DVCS)
To z założenia ulepszona wersja CVCS. Mamy tutaj do czynienia z architekturą P2P. W przeciwieństwie do CVCS klienci mają dostęp nie tylko do najnowszej wersji plików - repozytorium zostaje w pełni skopiowane na każdego hosta. Dzięki temu, w przypadku awarii prowadzącej do utraty danych na jednym z serwerów, skopiowane repozytorium może posłużyć do ich przywrócenia. Przykładami DVCS są: wspomniany już wcześniej BitKeeper, Git, Mercurial, Bazaar czy Darcs


3.Git

Nieco historii
Powstanie Git zawdzięczamy developerom jądra Linuxa, będącego rozwijanym przez programistów z całego świata i dystrybuowanym na licencji Open Source. Twórcy ci korzystali początkowo z innego oprogramowania służącego do kontroli wersji nazwanego BitKeeper stworzonego przez firmę BitMover. Od 2005 roku firma zrezygnowała z dystrybucji darmowej wersji swojego oprogramowania dla projektów o otwartym kodzie. I to był koniec współpracy z Linuksiarzami, a także początek Git. Celem twórców Git było stworzenie szybkiego, darmowego oraz prostego w obsłudze systemu kontroli wersji umożliwiającego efektywną pracę dużym grupom programistów jednocześnie i umożliwiającego sprawowanie pieczy nad projektami dużych rozmiarów.

Czym jest Git

Jak wspomniałam wyżej, Git jest rozproszonym systemem kontroli wersji. To co odróżnia go od innych, to przede wszystkim podejście do przechowywania danych - zamiast listy zmian na plikach, Git "sprawdza" stan wszystkich plików w danym repozytorium oraz tworzy referencję do tego stanu (tzw. snapshot lub migawka). Jeżeli jakiś plik w repozytorium pozostał niezmieniony, system nie "przepisuje" go na nowo, ale w danej migawce również odwołuje się do niego za pomocą referencji do jego poprzedniej wersji.

Ważną zaletą Git jest to, że do wykonania większości operacji wystarczy nam dostęp jedynie do lokalnych plików i zasobów. To oznacza nie tylko szybsze działanie, ale również możliwość pracy bez połączenia z serwerem. 


Kolejnym punktem, o którym warto wspomnieć, jest wbudowany mechanizm spójności danych. O tym , jak to działa, przeczytać można tutaj


Stany plików w Git

Pliki, nad którymi pracujemy z pomocą Git, znajdować się mogą w trzech stanach: zatwierdzony (comitted), zmodyfikowany (modified) oraz śledzony (staged). Poniższy obrazek pokazuje jak ma się to do trzech głównych sekcji projektu:






















To tyle, jeśli chodzi o wprowadzenie do samego tematu jakim jest system kontroli wersji oraz Git. W celu zapoznania się ze szczegółami, polecam zapoznać się z książką Pro Git dostępną w całości tutaj (istnieje również polska wersja, odnosi się ona jednak do wcześniejszej wersji książki. Do odnalezienia tutaj).

Dla tych, którzy ciekawi są czym tak naprawdę różni się Git od swoich konkurentów, polecam następujące wpisy:





Wpisy te są z różnych lat i zapewne w każdym z systemów zmienione zostało wiele z wymienianych właściwości. Moim zdaniem dobrze jest jednak mieć świadomość tego, jak różni ludzie podchodzą do tej sprawy i co w danym rozwiązaniu jest dla nich najważniejsze

Jesienne porządki informatyka

Trwają u mnie przygotowania do Wielkiego Formatu. Przygotowania też niemałego formatu, bo się dużo syfu narobiło. To, że swoje życie próbuję jakoś po części uporządkować, wiadomo nie od dziś. Wiadomo też, że raczej kiepsko mi to wychodzi. Zarówno w tym psycho-mentalnym, jak i bardziej fizycznym sensie (chociaż dziś na prośbę siostry wyniosłam śmieci i staram się przynajmniej gary myć po sobie na bieżąco). Postanowiłam jednak zrobić porządek z moim staruszkiem- laptopem, bo szkoda byłoby gdyby nagle odmówił współpracy, a sporo syfu się na nim narobiło. Zaniedbałam się trochę jeśli chodzi o robienie back-upów na bieżąco, więc teraz codziennie jakaś część  danych zostaje sprawdzona, to co niepotrzebne usunięte, a to co potrzebne - przenoszone na wirtualne dyski w celu zachowania na przyszłość i ewentualnego zgrania tego co najpotrzebniejsze z powrotem po tym jak już zrobię sobie reinstalację systemu.
Co zabawne- zaczęłam nawet porządkować sobie zakładki w przeglądarce! Nie spodziewałam się, że jest tego aż tyle. Stanowczo zbyt dużo jak na zakładki. No i posegregowane tylko częściowo. Sprawdzam więc te linki przypominając sobie przy okazji dawno już zapomniane, a ciekawe strony, kategoryzuję, usuwam adresy prowadzące do nikąd...
Jak już posprzątam sobie kompa, nadejdzie czas na porządkowanie poczty, ale odsyfianie lapka nie zajmie mi na pewno mniej niż tydzień. W końcu jednak trzeba się nim zająć. W końcu służy mi już długo, więc też muszę o niego zadbać.
Po reinstalacji planuję lepiej i bardziej świadomie go użytkować, w dodatku dużo lepie go zabezpieczyć (co do tego, kilka naprawdę świetnych wskazówek znaleźć można tutaj : https://docs.google.com/document/d/1iiKYZJWGihNculKbEyA5agI-32EjaYuEvcTy-XTu23Y/edit)
w końcu bycie "informatykiem" zobowiązuje.

Tak czy siak, sporo mam na głowie. Okazało się, że jednak muszę przygotować nowe CV, bo czeka mnie rekrutacja do nowego projektu. W sumie cieszę się, to może być spora szansa, a dodatkowo podczas ostatnich tygodni niewiele się rozwijam, za to sporo stresuję przez użeranie się z hinduskimi kolegami - jednak przepaść mentalno-kulturowa bardzo rzutuje na współpracę, tudzież jej brak. A nuż może się powiedzie znaleźć miejsce w jakimś projekcie bardziej zbliżonym do IT?

Z nauką niestety nieco się obijam. Pomimo tego, że ostatnio uczę się nawet w tramwaju, wciąż brak mi czasu i sił (a może odpowiedniej jego organizacji i motywacji, tudzież koncentracji) aby nauczyć się wszystkiego co powinnam. Pociesza mnie to, że szykuje się długi weekend, który planuję poświęcić na naukę matematyki dyskretnej, algebry, javy i pisanie skryptów w C. Książkę do algorytmiki zostawiam na razie na przejażdżki tramwajem (chociaż ostatnio wyparła ją "Wojna w blasku dnia" Petera V. Brett'a, ale to tylko dlatego, że jest za dobrze napisana, a ja kocham tę historię, naprawdę! No i od czasu do czasu Murakami, którego książki regularnie pożycza mi koleżanka z pracy. Ale przysięgam, że tylko czasami. Nawet pomimo tego, że regularnie. No).

A jeśli już przy porządkach na komputerze, to może i małe porządki wewnątrz... Wiem, wiem. Nie wszystko na raz. Ale ostatnio wyjątkowo łatwo wyprowadzić mnie z równowagi. Wystarczy słowo i krzyczę, albo płaczę. Zawsze byłam nadwrażliwa, ale chyba potrzebuję nieco więcej wyciszenia i koncentracji. Zastanawiam się, czy nie urządzić sobie kilkudniowego postu tak na oczyszczenie ciała i ducha. Według niektórych to bardzo zdrowe, wg innych - wręcz przeciwnie, ale może pomoże, a i moje finanse na tym mniej ucierpią (ach, ten mój materializm).

No, ale dość gadania - teraz wracam do "sprzątania" i do nauki na jutrzejszego kolosa, chociaż już późno. A wyśpię się po śmierci . Tudzież na kolejnych wykładach :D

Edit: zauważyłam, że po aktualizacji wygląda to tak, jak bym opublikowała tego posta w marcu 2016. Otóż nie... To jest post z jesieni i to nawet nie tej ostatniej a co najmniej 2014. Nie pomyliły mi się pory roku, pomyliły mi się przyciski.