Tabele w ASCII

Tabele w ASCII

Tabele w ASCII

Gdy piszę różnego rodzaju skrypty w języku Python nie raz spotkam się z koniecznością wyświetlenia informacji na konsoli. Zazwyczaj wykorzystuję do tego systemową funkcję print(), lub bibliotekę pprint. Duża ilość informacji najlepiej zaprezentować w formie tabelarycznej. W repozytorium PiPy znajduje wiele bibliotek obsługujących tabele w ASCII pozwalających na wyświetlanie sformatowanych danych na tekstowej konsoli terminala systemu operacyjnego. Zaprezentuję Ci teraz moją ulubioną, bardzo prostą w użyciu bibliotekę PTable, która jest klonem popularnej biblioteki prettytable.

Czytaj dalej
Enumerate i przeglądanie elementów listy

Enumerate() i przeglądanie elementów listy

Enumerate i przeglądanie elementów listy

Wykonując operacje na listach musimy jasno sprecyzować, do którego je elementu chcemy uzyskać dostęp. Dokonujemy tego za pomocą indeksów wskazując wprost interesujący nas element listy. Często jednak dane zapisane na liście przetwarzamy w pętli. Pokażę Ci w jaki sposób najprościej w pętli odczytać kolejne wartości elementów listy oraz ekstremalnie przydatny sposób wykorzystania funkcji enumerate() do znalezienia numeru indeksu listy, pod którym poszukiwana wartość została zapisana.

Czytaj dalej
Listy w Python, część 1

Listy w Python, cz. 1

Listy w Python, część 1

Są takie umiejętności, które każdy programujący w dowolnym języku programowania musi umieć posiadać. Nie inaczej jest w Pythonie. W serii “wtorki z Pythonem” będę poruszał także bardziej podstawowe zagadnienia związane z programowaniem, które nie tylko dla osób początkujących mogą stanowić przydatne kompendium wiedzy. W tym tygodniu zajmę się typem danych, jakim są listy.

Czytaj dalej
Pull Request w Git

Pull Request w Git

Pull Request w Git

Dzisiaj słowo o tym, jak pracuje się wspólnie nad projektami i wprowadzaniem zmian do kodu. Z oczywistych względów do kodu programu nie mogą być wprowadzone żadne zmiany dokonane przez dowolną osobę. Zmiany takie muszą być zatwierdzone przez właściciela projektu lub osoby przez niego wyznaczone. Niemniej ważnym aspektem jest to, aby praca dwóch osób nie kolidowała ze sobą, a zaakceptowane zmiany na koniec były spójne. Służy temu mechanizm Pull Request.

Czytaj dalej
Dynamiczne wywołanie funkcji

Dynamiczne wywołanie funkcji

Dynamiczne wywołanie funkcji

Język Python ma sporo ukrytych ciekawych funkcjonalności. Wiele z nich odpowiednio wykorzystane mogą uprościć kod naszej aplikacji, eliminując skomplikowane konstrukcje warunków. Jedną z moich ulubionych jest możliwość wywoływania metod poprzez dynamiczne tworzenie ich nazwy w wywołaniu z zastosowaniem zmiennych. Ta technika nie ma swojej unikalnej nazwy. Dla mnie jest to najczęściej dynamiczne wywołanie funkcji.

Czytaj dalej

Pierwszy etap pracy nad moją aplikacją zakończony

Pamiętacie zapewne, że byłem bardzo rozczarowany Cisco Modeling Labs 2.0. Brakowało mi fantastycznej funkcjonalności z Cisco VIRL pozwalającej w prosty sposób prekonfigurować urządzenia. Pozwalało to inżynierom zaoszczędzić sporo czasu na adresowaniu interfejsów czy konfigurowaniu protokołów. Funkcja ta ma miała nazwę AutoNetKit. Jakiś miesiąc temu postanowiłem, że napiszę własny program wypełniający, choć częściowo, tą lukę. Tak powstał CMLNetKit i mogę powiedzieć, że jego pierwsza wersja gotowa jest do testów.ę

Czytaj dalej
Dogfooding

Dogfooding

Dogfooding

Wielokrotnie w swoich artykułach zalecałem, aby wszelkiego rodzaju mechanizmy automatyzacji tworzyć według zasady “start small, grow big“. Gdy rozwijamy swoją aplikację albo skrypt, musimy je wciąż testować. Jednym z najlepszych sposobów na takie testowanie jest używanie stworzonego produktu we własnej infrastrukturze. Takie podejście nazywa się dogfooding i choć może się wydawać, że ma sporo wspólnego z pojęciem “testowania na produkcji“, do odnosi się do czegoś nieco innego.

Czytaj dalej
Wprowadzanie zmian do repozytorium projektu w pyCharm

Wprowadzanie zmian do repozytorium projektu w pyCharm

Wprowadzanie zmian do repozytorium projektu w pyCharm

W poprzednim artykule pokazałem, w jaki sposób założysz projekt na GitHub oraz dodasz go do pyCharm, czyli zintegrowanego środowiska programistycznego. Wspomniałem wtedy, że na Twoim komputerze powstała lokalna kopia, klon, repozytorium projektu z GitHub-a. Pracujesz na niej, dodając nowe linie kodu, czy modyfikując istniejące. W pewnym momencie musisz jednak wprowadzić zmiany do repozytorium projektu. W pyCharm i każdym innym środowisku IDE, wprowadzanie zmian do repozytorium projektu jest to bardzo proste i nie wymaga znajomości komend git-a.

Gdzie tak naprawdę piszesz swój kod?

No właśnie, gdzie go piszemy? Gdybyśmy korzystali z edytora wbudowanego w GitHub czy GitLab edytowalibyśmy kod bezpośrednio na serwerze. Prawdopodobnie wiązałoby się to z jednoczesną jego aktualizacją w repozytorium. W rzeczywistości jednak WebIDE to narzędzie do drobnych poprawek czy małych prywatnych repozytoriów. W świecie programistów robi się to inaczej.

Kod aplikacji każdy z programistów uczestniczących w projekcie edytuje na własnym komputerze, tam też go testuje. W dużych projektach takich jak Ansible, dla którego stworzyłem i opiekuję się modułami do obsługi Docker Swarm, korzysta się z zaawansowanych funkcjonalności takich jak: branch, pull request, merge, rebase. Zapamiętaj te terminy, bo na pewno Ci się kiedyś przydadzą, ale nie przywiązuj do nich teraz wielkiej wagi.

Jak już wspomniałem, tworząc moją aplikację będę pisał i testował kod na własnym komputerze w sklonowanym repozytorium. Na początek przygotowuje wszystkie zmiany lokalnie, na przykład tworzę nowy folder czy plik. Za każdym razem, gdy tworzymy nowy plik, pyCharm pyta się czy dodać go do repozytorium. Tylko pliki dodane do repozytorium będą w nim zarządzane. Pliki będące częścią repozytorium, w pyCham wyświetlane są w projekcie w kolorze zielonym, niedodane w czerwonym zaś zmodyfikowane w niebieskim.

pyCharm - plik niedodany do repozytorium Git
pyCharm - plik niedodany do repozytorium Git
pyCharm - plik dodany do repozytorium Git
pyCharm - plik dodany do repozytorium Git

Wprowadzanie zmian do repozytorium

Wprowadzanie zmian do repozytorium jest dwuetapowe. W pierwszym z nich zatwierdzamy zmiany w lokalnej kopii repozytorium. Taka zmiana nazywa się commit. Powinniśmy go wprowadzać z każdym nowym utworzonym i przetestowanym blokiem naszej pracy. Może to być nowa funkcjonalność albo drobna poprawka. Dobrą zasadą jest, aby nie commit-ować niedziałających elementów kodu, ale czasem nie da się tego uniknąć. Każdy commit powinien być opatrzony komentarzem. 

Aby dodać nowy commit wybieramy z menu aplikacji VCS -> Commit... W oknie dialogowym możemy wybrać zmiany odnoszące się do których plików chcemy wprowadzić oraz dodać komentarz. Komentarze powinny być zwięzłe, ale informować czego zmiana dotyczy.

Zmiany, które wprowadziliśmy, nie są póki co widoczne w repozytorium naszego projektu. Nadal są to tylko zmiany odnotowane lokalnie. Aby dodać je do repozytorium projektu, musimy wykonać operacje Push. W ten sposób synchronizujemy jeden lub więcej commit-ów do repozytorium.Wtedy dopiero system analizuje czy wprowadzone przez nas zmiany nie stoją w konflikcie ze zmianami wprowadzonymi przez inną osobę pracującą nad projektem. 

Aby dodać wprowadzone zmiany do projektu na GitHub wybieramy VCS -> Git -> Push.. W oknie dialogowym zobaczymy listę commitów, które zostaną wprowadzone do kodu na repozytorium GitHub. 

Jeżeli operacja wykona się poprawnie zobaczymy wprowadzone przez nas zmiany w repozytorium projektu na GitHub.

Jak szybko publikować pierwszy kod na GitHub?

Jak szybko publikować pierwszy kod na GitHub?

Jak szybko publikować pierwszy kod na GitHub?

W ciągu ostatnich kilku dni opublikowałem na GitHub pierwszy kod mojej aplikacji CMLNetKit. Od razu dostałem pytanie: “Już napisałeś całość? Tak szybko?“. No nie, aplikacja nie jest skończona. Ona jeszcze mało co potrafi, tak naprawdę zaimplementowałem jedynie jedną z funkcjonalności, o których pisałem w moim poprzednim artykule. Dlaczego zatem zdecydowałem się na pierwsze publiczne udostępnienie kodu już teraz? Jak szybko publikować pierwszy kod własnej aplikacji w repozytorium?

Czytaj dalej