Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Wykonanie kodu przy starcie aplikacji w Django

leave a comment »

Wielokrotnie zdarzyło mi się (i pewnie nie tylko mi) musieć uzupełnić jakimiś wartościami bazę danych w trakcie zmian w projekcie. Chodziło konkretnie o dane, które powinny się pojawić po wdrożeniu zmian i nie powinny dawać możliwości ich zmiany bądź usunięcia ze względu na potencjalny wpływ na działanie całej aplikacji.

Pierwszy pomysł tego rozwiązania to użycie migracji, jak w poniższym przykładzie:

Po wykonaniu migracji w bazie pojawią nam się wymagane wpisy. Jednak istotnym minusem tego rozwiązania jest to, że nadal można usunąć je bezpośrednio w bazie czy nawet w panelu administracyjnym Django i nie zostaną one odtworzone.

Kolejne podejście do problemu to przeniesienie kodu odpowiedzialnego za dodawanie wpisów do bazy do pliku apps.py, który uruchamiany jest przy starcie aplikacji – czyli praktycznie zawsze po restarcie serwera. Wrzucenie kodu do metody ready pozwoli nam obejść w całkiem elegancki sposób wspomniany wcześniej problem:

Na co zwrócić musimy uwagę, w pliku __init__.py naszej aplikacji musimy jawnie wskazać ścieżkę do pliku konfiguracyjnego aplikacji, jako że plik ten jest opcjonalny:

Warto także zerknąć na kilka innych kawałków kodu, m. in. uniemożliwienie edytowania kluczowych informacji w panelu administracyjnym Django czy usuwanie tych danych. Zauważyć też można 2 drobne usprawnienia: 1) wizualna reprezentacja zapisanego koloru w panelu administracyjnym dzięki użyciu funkcji format_html oraz 2) zmiana tytułu kolumny w panelu administracyjnym poprzez właściwość short_description.

Kawałek kodu związany z synchronizacją modeli z bazą danych został zaczerpnięty ze StackOverflow, a błąd dotyczący braku synchronizacji ujawnił się dopiero przy uruchomieniu testów.

Cały kod do pobrania i przejrzenia znaleźć można na GitHub.

Written by Filip Górczyński

2018.03.05 at 09:11:29

Grupowanie podprojektów w PyCharm

leave a comment »

Niezbyt często używaną funkcją PyCharma jest jego wsparcie dla dużych projektów w postaci możliwości dodawania nowych projektów w ramach bieżącego okna. Jeszcze mniej znaną (według mnie) funkcją pozwalającą zapanować nad wieloma projektami jest możliwość grupowania projektów w strukturze drzewa.

Co warto zrobić na początku – głównie z czysto estetycznych powodów – to ustalić jakiś całkowicie oddzielny katalog, który może pozostać pusty. Ewentualnie możemy trzymać jakieś „śmieci” związane z projektem, które nie muszą być, np. pod kontrolą wersji.

Zazwyczaj podczas tworzenia nowego projektu otwieramy go w nowym oknie PyCharm – i tak też zalecałbym zrobić dla dopiero co utworzonego katalogu „głównego”. To będzie nasz punkt startowy – a PyCharm będzie nam ładnie w tytule wyświetlał nowo powstały projekt główny.

Pozostałe projekty, które chcemy mieć widoczne w PyCharmie w odpowiedniej strukturze dodawać będziemy już w taki sposób:

Przechodząc do sedna sprawy wszystko rozbija się o nazewnictwo katalogów. Jeśli uporządkujemy projekty na dysku nadając im odpowiednie człony (prefixy) rozdzielane kropką, PyCharm zatroszczy się o resztę.

Po dodaniu kolejnych projektów będą w elegancki sposób pogrupowane w paczki, jak poniżej:

Nic więcej się nie zmienia i np. nadal posiadamy udogodnienie w postaci konfigurowania środowisk Pythona dla każdego projektu indywidualnie.

Oczywiście powyższe nie dotyczy osób, które są zwolennikami trzymania w PyCharm każdego projektu oddzielnie – jak zawsze ma to swoje plusy i minusy.

Written by Filip Górczyński

2018.03.05 at 07:34:15

Śledzenie czasu spędzonego w IDE – integracja WakaTime i PyCharm

leave a comment »

Nie tak dawno temu w ramach kolejnych prób ze śledzeniem swojego czasu spędzonego na pisaniu kodu trafiłem na WakaTime.
Dla moich potrzeb wystarczyła instalacja w PyCharm, ale inne wspierane środowiska programowania wraz z instrukcjami instalacji przejrzeć możemy na stronie WakaTime Editors.

Sama instalacja w PyCharm to tak naprawdę znalezienie i zainstalowanie wtyczki o nazwie – zgadza się – WakaTime. W opisie wtyczki jest dokładna instrukcja instalacji.

I w sumie to tyle. Po kilku godzinach pisania kodu możemy wejść na dashboard, gdzie zaprezentują nam się ładne statystyki, jakich języków używaliśmy najczęściej, w jakich projektach czy ile czasu danego dnia spędziliśmy w IDE.

Jak spora część narzędzi online także to ma swoje plany cenowe. Nam może wystarczyć darmowy, który pozwala m. in. na statystyki z ostatnich 2 tygodni. Otrzymujemy jednak narzędzie wakadump, które pozwala nam pobierać statystyki na wypadek, gdybyśmy chcieli je dalej wykorzystać.

Warto wspomnieć, że gdy z jakichś powodów coś się posypie ze środowiskiem lub będziemy chcieli zmienić klucz API to zmiany wystarczy wprowadzić w pliku: ~/.wakatime.cfg

Written by Filip Górczyński

2018.03.01 at 08:27:49

Ukrywanie plików określonego typu w Visual Studio Code

with one comment

O ile jestem wielkim zwolennikiem narzędzi ze stajni JetBrains to od czasu do czasu – gdy potrzebuję zapisać coś na szybko – zdarza mi się korzystać z innego całkiem przyjemnego edytora – VSCode.

Narzędzie to ma to do siebie, że realne przyjemności zaczynają się dopiero, gdy skonfigurujemy je po swojemu i na szczęście sprawa jest dużo prostsza niż w Vim-ie :).

Po otwarciu w edytorze jakiegokolwiek projektu możemy zauważyć (albo raczej nie zauważyć), że w strukturze katalogów nie pojawiają się katalogi kilku powszechnie używanych systemów kontroli wersji: .git, .svn, .hg. Ukrywane są też pliki .DS_Store. Sprawa fajna i przydatna, ale jeśli zdarzy nam się pisać projekt, np. w Angularze to szybko dojdziemy do wniosku, że drzewo katalogów jest zaśmiecone i nieczytelne, m.in. ze względu na automatycznie generowane pliki – których w edytorze i tak najczęściej nie wykorzystamy.

Pozostaje nam zmienić odrobinę ustawienia edytora. Sama konfiguracja to po prostu edycja plików; dostęp do mich uzyskujemy poprzez File > Preferences > Settings (lub bezpośrednio z klawiatury Ctrl + ,).
W lewym panelu znajdziemy listę ustawień domyślnych, z prawej – ustawienia użytkownika. I właśnie ta prawa część interesuje nas najbardziej. A to co chcemy zrobić to nadpisać wartość dla atrybutu "files.exclude".

Z mojej strony chciałbym zaproponować ukrycie w drzewie katalogów dodatkowych 2 typów plików: *.js.map oraz plików *.js – o ile istnieje dla nich plik o takiej samej nazwie ale rozszerzeniu *.ts.

Dla kompletnie zielonych – interesują nas linie 9 i 10 :).

I jeszcze na koniec taka mała wskazówka, jeśli posiadamy otwartego, np. PyCharma (nie wiem jeszcze, czy inne IDE JetBrains posiadają taki sam skrót klawiaturowy) to – dzięki tylko 4 palcom – możemy otworzyć edytor-notatkę z konkretnym podświetlaniem składni bez tworzenia nowego pliku w strukturze projektu: Ctrl + Alt + Shift + Insert.

Written by Filip Górczyński

2018.03.01 at 07:54:16

Ręczna instalacja Node.js i npm w Ubuntu

leave a comment »

Standardowa instalacja node.js w Ubuntu z dostępnych repozytoriów poprzez sudo apt-get install nodejs nie zawsze pozwala uzyskać nam najświeższą wersję. Dla Ubuntu 16.04 zapytanie o paczkę nodejs zwraca nam wersję 4.2.6:

 

Jednym słowem, smuteczek.
Po wejściu na stronę projektu nodejs.org w oczy rzucają się od razu 2 wersje: 8.9.4 (Long Time Support, stabilna i zalecana dla większości użytkowników) oraz 9.6.1 – Current – PRAWIE najświeższa z możliwych, bo są jeszcze tzw. Nightly Build dla ludzi z dużą ilością czasu wolnego :).

Jednym ze sposobów sprawdzenia wersji paczki zainstalowanej aktualnie w systemie – oczywiście o ile jest zainstalowana – jest:

My jednak chcielibyśmy korzystać z najświeższej stabilnej wersji – 8.9.4.

Z wcześniej podanej strony pobieramy archiwum i rozpakowujemy:

Rozpakowany katalog node-v8.9.4-linux-x64 wrzucamy na przykład do katalogu /opt/:

Opcjonalnie zmieniamy rekurencyjnie właściciela katalogów i plików w lokalizacji /opt/node-v8.9.4-linux-x64:

Może to być przydatne, gdybyśmy chcieli kiedyś w tym katalogu coś zapisywać (np. inne pliki binarne) oraz instalować pakiety z npm.
Pozostaje nam utworzyć dowiązania symboliczne:

Jeśli próba uruchomienia poleceń node i npm się nie powiedzie jest dość prawdopodobne, że te ścieżki nie są dodane do naszej zmiennej środowiskowej PATH. Może to być przydatne w przyszłości, gdy w katalogu bin znajdzie się więcej plików wykonywalnych.
Aktualną zawartość zmiennej PATH możemy wyświetlić poleceniem echo $PATH i aby rozszerzyć tą zmienną o nowe katalogi zmieniamy w pliku ~/.bashrc zmienną środowiskową:

Żeby wprowadzone zmiany w ramach ~/.bashrc odniosły skutek powinniśmy go „przeładować”: source ~/.bashrc

Przydatny okazać się może poniższy skrypt, który w sumie spina wszystko w całość i pozwala prześledzić wykonane akcje krok po kroku:

Written by Filip Górczyński

2018.02.26 at 17:00:00

VueJS 2 – dostęp do konfiguracji środowiska

leave a comment »

vuejs logoW każdym co bardziej złożonym projekcie zachodzi potrzeba przechowywania różnych konfiguracji w zależności od środowiska: developerskiego, produkcyjnego, testowego, eksperymentalnego, niebieskiego i każdego innego. Oczywiście framework VueJS nie odstaje od normy i również oferuje możliwość takiej konfiguracji.

Na początku od razu zaznaczam, że zmiany w plikach konfiguracyjnych lub tworzenie nowych plików wymaga ponownego przebudowania i uruchomienia aplikacji – brak odzwierciedlania jakichkolwiek zmian w aplikacji może się okazać dość frustrujące jeśli zapomnimy o tej czynności – a często w konsoli widzimy, że się przebudowało – tylko jednak coś zmian z konfiguracji nie chwycił.

Konfiguracja dla różnych środowisk przechowywana jest domyślnie w 3 plikach (po utworzeniu czystego projektu):

Wyżej wymienione pliki ładowane są dokładnie w tej kolejności ewentualnie rozszerzając lub nadpisując dotychczasowe wartości zmiennych, więc w czystej instalacji na początku wczytywany jest plik prod.env.js, stałe w nim zawarte nadpisywane są plikiem dev.env.js a te z kolei test.env.js. Proste i logiczne (…długie jak drzewo genealogiczne naszej rasy…)

Oczywiście nic nie stoi na przeszkodzie aby, jeśli zajdzie taka potrzeba, dodawać swoje pliki konfiguracyjne definiujące ustawienia dla nowych środowisk. Np. staging – dodając przykładowo plik staging.env.js o przykładowej treści:

i wtedy np. w pliku dev.env.js rozszerzamy środowisko stagingEnv – a nie prodEnv jak to jest domyślnie.

Samo ustawienie bieżącego środowiska – wg którego budowany i uruchamiany jest VueJS odbywa się w pliku ./projekt/src/main.js w linijce:

chociaż lepszą z praktycznego punktu widzenia wersją byłaby poniższa:

I teraz, jeśli zawsze (we wszystkich środowiskach) potrzebujemy w aplikacji jakieś stałe to definiujemy je w pliku prod.env.js odpowiednio nadpisując w pozostałych plikach, jeśli oczywiście jakieś zmiany będą potrzebne.

W komponentach nic nie musimy importować, a dostęp do zmiennej jest wygląda w taki sposób: process.env.API_URL

Jeśli zbudujemy teraz projekt dla odpowiedniego środowiska, np.: dla produkcji npm run build otrzymamy katalog dist, w którym to znajduje się zbudowana chwilę temu aplikacja. Przechodząc w linii poleceń do tego katalogu cd ./projekt/dist i uruchamiając tymczasowy serwer python3 -m http.server 8181, w przeglądarce pod adresem 127.0.0.1:8181 powinna być dostępna nasza aplikacja – warto w tym miejscu potwierdzić różniące się między środowiskami zmienne, żeby nie było nieprzyjemnych niespodzianek.

Written by Filip Górczyński

2018.02.26 at 16:50:47

Znam język programowania X, ale nie mam pomysłu na aplikację

leave a comment »

Tym razem temat trochę bardziej na luzie. Na grupach dyskusyjnych pojawia się często pytanie od początkujących programistów o pomysły na aplikację: a to na prywatny projekt, a to na jakąś pracę inżynierską czy magisterską, itp. Pytania te są dziwne, ponieważ bardzo często przyczyną rozpoczęcia nauki programowania jest niezadowolenie z używanych aktualnie narzędzi albo potrzeba zautomatyzowania sobie pracy. Oczywiście, jest jeszcze druga grupa ludzi, którzy usłyszeli/przeczytali, że „programowania można się nauczyć przerabiając tutorial i wtedy co miesiąc dostaje się górę kasy” – ale to w sumie temat na inny wpis 🙂

No dobra, wybraliśmy język programowania. Oczywiście, mówię tutaj o języku programowania – jeśli ktoś przerobił kurs HTML i/lub CSS to można powiedzieć, że dopiero „liznął” temat jako, że wspomniane technologie nie są językami programowania 🙂 Jak to jednak mówią – Nawet najdalszą podróż zaczyna się od pierwszego kroku.
Więc odbębniliśmy już 15 kursów i 150 tutoriali w wybranej przez nas technologii (oczywiście jest ona najlepsza ze wszystkich dostępnych :)), dowiedzieliśmy się jak poskładać dostępne klocki, żeby napisać program "Witaj świecie!\n"  powtarzany dowolną ilość razy. Ale w sumie co teraz? Chyba z tego „Witaj świecie” nie uda się wyciągnąć 15k na miesiąc. Może jednak zostawić wszystko i wyjechać „w góry na Mazury”?
Oczywiście jako początkujący programista (tzw. junior) mamy szansę na zatrudnienie. Szanse są, ale jest to uzależnione od zbyt wielu innych kryteriów – to też byłby dobry temat na oddzielny wpis.

Zgaduję, że nie mamy się jeszcze za bardzo czym pochwalić potencjalnemu pracodawcy, więc jedną z najlepszych rzeczy jakie możemy zrobić gdy zaczynamy budować swoją przyszłość zawodową jako najlepszy developer w branży IT to zbudowanie swojego portfolio. Oczywiście, generalizuję w tej chwili. Przykładowo takich Panów jak Guido van Rossum czy Douglas Crockford nie zatrudnia się ze względu na ich bogate portfolio 🙂

Tu pojawia się pewnie w wielu głowach pytanie: Spoko, to co mam napisać?
Odpowiedzią na to pytanie niech będzie ta krótka lista – dłuższe listy z konkretnymi propozycjami projektów znaleźć można już pod dostępnymi linkami:

  1. Aplikacja na Androida z pomysłami podzielonymi na kategorie oraz stopnie trudności – Programming Ideas 2
  2. Lista niewielkich mini-programów do napisania o różnych stopniach trudności – Dailyprogrammer w serwisie Reddit
  3. What Should I Make? Beginner Programming Project Ideas
  4. Przytaczana w wielu miejscach lista: Martyr2’S Mega Project Ideas List!
  5. Kolejna lista z propozycjami projektów
  6. Krótka, pogrupowania lista Over 1,500 Coding Project Ideas z kilkoma różnymi źródłami
  7. Top 27 Programming Project Ideas For Beginners
  8. 5 Project Ideas To Help You Learn Programming Faster
  9. Ideas for Coding Projects
  10. 1000+ Beginner Programming Projects
  11. „I Need Practice Programming”: 49 Ideas for Game Clones to Code

Jak widać, pomysłów jest naprawdę całkiem sporo. Gdyby postawić sobie za cel wykonać nawet połowę z tych projektów – życia by nie starczyło. Oczywiście, nie polecam rzucać się od razu na jakiś ekstremalnie duży projekt, ponieważ istnieje ryzyko, że się szybko zniechęcisz.

Ponadto, jeśli już wciągnęło Cię programowanie i/lub potrzebujesz miejsca na „praktykowanie” swoich umiejętności, poniżej kilka dodatkowych zasobów do codziennych ćwiczeń:

  1. https://py.checkio.org/
  2. https://www.codewars.com/
  3. https://coderbyte.com/
  4. https://codefights.com/
  5. http://exercism.io/
  6. http://codekata.com/
  7. http://www.codeabbey.com/

Niewątpliwą zaletą tych stron jest możliwość konkurowania z innymi programistami i podglądanie często rewelacyjnych rozwiązań, które poszerzą naszą wiedzę na temat danego języka. Nawet do głowy by nam nie przyszło jak ładnie czy zwięźle można rozwiązywać niektóre problemy.

 

Written by Filip Górczyński

2018.02.25 at 18:07:37

%d blogerów lubi to: