🇬🇧 Welcome post

Wyróżnione

Welcome to programista1024.pl – a platform created for programmers and students of technical fields.

Our goal is to share knowledge in a clear and practical way. Here you’ll find:

  • articles on algorithms and programming techniques,
  • tutorials on databases and frameworks,
  • guides for languages like Java and Python,
  • posts about robotics, microcontrollers, and IoT,
  • links to videos and educational projects.

This site complements our YouTube channel and other learning resources.

Start exploring and keep coding!

Złożoność obliczeniowa

Nie każdy algorytm działa równie szybko i efektywnie. Ten wpis wyjaśnia podstawowe pojęcia złożoności czasowej i pamięciowej, czyli jak mierzymy wydajność algorytmów. Dzięki prostym przykładom zrozumiesz oznaczenia typu O(n), O(1) czy O(n²) i nauczysz się świadomie wybierać rozwiązania lepiej dopasowane do danego problemu.

Czym są i po co analizujemy algorytmy?

Algorytmy to zestawy jasno określonych kroków, które prowadzą do rozwiązania konkretnego problemu. W tym artykule dowiesz się, czym dokładnie jest algorytm, dlaczego ich analiza jest tak ważna w programowaniu i jakie cechy powinien mieć „dobry” algorytm. To idealny punkt wyjścia dla każdego, kto chce zrozumieć fundamenty informatyki.

Pierwsze kroki z Raspberry Pi

Zestaw justPi to kompletny pakiet, zawierający wszystkie niezbędne elementy do uruchomienia i użytkowania Raspberry Pi. Jest zaprojektowany z myślą o użytkownikach, którzy chcą szybko i łatwo rozpocząć pracę z tym popularnym mikrokomputerem. W tym filmie prezentujemy zestaw, którego sercem jest Raspberry Pi 4 Model B z 8GB RAM na płycie głównej. Oprócz mikrokomputera w pudełku są dodatkowe akcesoria, jak: obudowa, zasilacz, karta pamięci z wstępnie zainstalowanym systemem operacyjnym, kable HDMI i Ethernet, oraz niezbędne narzędzia i instrukcja obsługi.

Omówienie zestawu justPi Starter Kit z Raspberry Pi 4B

Program Pogodynka

Tworzymy pierwszą wersję aplikacji wykorzystując edytor nano w linuxie. Poznajemy podstawowe konstrukcje języka. Poza tym dowiadujemy się, jak sprawdzić wersję Pythona w linuxie oraz jak uruchamiać napisane programy. To nie wszystko, bo kodowanie to nie jedyna umiejętność programisty. Nauczymy się tworzyć logikę programów przy pomocy narzędzi do rysowania schematów blokowych i diagramów UML. Poznamy też sposoby debugowania kodu i tworzenia automatycznych testów.

Pierwsza wersja „Pogodynki” zamiast „Hello, World!”

Jak przygotować środowisko do programowania w języku Python w Linuxie?

Linux jest doskonałym środowiskiem do nauki programowania w języku Python z wielu powodów. Jednym z nich jest łatwość instalacji narzędzi deweloperskich. System Linux jest wybierany również jako środowisko uruchomieniowe przez wiele firm. Dlatego nie trzeba długo tłumaczyć, że warto połączyć naukę programowania z obsługą samego systemu.

W tym artykule, krok po kroku pokażemy, w jaki sposób można przygotować środowisko deweloperskie w jednej z popularnych dystrybucji Linux Fedora.

1. Aktualizacja systemu

Pierwszym krokiem przed instalacją nowego oprogramowania w systemie Linux jest aktualizacja samego systemu operacyjnego. Jeśli aktualizacja systemu nie jest ustawiona jako proces automatyczny, należy tą czynność przeprowadzić ręcznie.

W poniższym przykładzie pracujemy na dystrybucji Fedora w wersji 39. W czasie tworzenia tego artykułu dostępna jest nowsza wersja Fedora Workstation 40, którą można pobrać ze strony http://fedoraproject.org.

Aktualizacja Linux Fedora

2. Instalacja narzędzi deweloperskich „Development Tools”

Jeśli poważnie myślisz o programowaniu w systemie linux, powinieneś rozważyć wykonanie tego kroku. Dzięki temu uzyskasz dostęp do narzędzi deweloperskich – kompilatorów, debugerów, bibliotek źródłowych i narzędzi pomocniczych. Mogą być one użyteczne przy pracy z różnymi językami programowania, w tym także z Pythonem, szczególnie w kontekście integracji z kodem napisanym w C/C++.

Jeśli chcesz zapoznać się w pakietami, które zostały zainstalowane w ramach grupy „Development Tools”, zajrzyj na stronę Pakiety z grupy Development Tools w systemie linux.

Instalacja Development Tools w systemie Linux Fedora

3. Instalacja Pythona i menedżera pakietów pip

Większość popularnych dystrybucji Linuxa instaluje Pythona domyślnie, ponieważ jest on potrzebny do działania wielu narzędzi systemowych i skryptów. Tak jest na przykład w użytej w przykładzie dystrybucji Fedora Workstation. Jeśli jednak używasz dystrybucji, która preferuje minimalną instalację (np. Arch Linux, Gentoo), Python może nie być domyślnie zainstalowany, ale można go łatwo zainstalować przy użyciu odpowiedniego menedżera pakietów.

Na tym etapie możesz zacząć tworzyć programy w języku Python. W systemie Fedora Linux Workstation 39, który używam podczas pisania tego artykułu, jest już zainstalowany interpreter python3 w wersji 3.12.3 (data wydania 9. kwietnia 2024 r.). I chociaż w systemie nie mam menedżera pakietów pip, to już teraz zachęcam abyś wypróbował kod programu do generowania prognozy pogody. Opis tego programu oraz materiały pomocnicze znajdziesz na stronie Wybrane programy w języku Python.

Zachęcam Cię do wsparcia mnie przy tworzeniu tego artykułu. Kliknij na grafikę obok i postaw symboliczną kawę.

4. Przygotowanie środowiska wirutalnego

5. Instalacja interaktywnej konsoli IPython

6. Instalacja interaktywnego notatnika Jupyter Notebook

7. Edytory IDE oraz dodatkowe narzędzia

Przykład użycia JPA w starej wersji 2.1

W tym artykule zajmiemy się przykładem fragmentu aplikacji korzystającej ze specyfikacji Java Persistence API w wersji 2.1. Jest to więc trochę spojrzenie na JPA sprzed rebrandingu. Obecna wersja 3.2.0 (Jakarta Persistence API) była wydana w maju 2024. Jeśli twoja aplikacja była tworzona w latach 2013-2018, jest duża szansa, że korzystała z JPA 2.1 i może wymagać unowocześniania do nowej wersji. Zmiany mogą obejmować nie tylko rebranding na Jakarta Persistence API, ale także mieć wpływ na sposób, w jaki twój kod jest zarządzany i wykonywany.

Opis biznesowy

Głównym celem projektu jest pokazanie, jak skonfigurować i używać starsze wersje bibliotek do implementacji operacji CRUD (Create, Read, Update, Delete) w aplikacjach opartych na JPA (Java Persistence API). Projekt demonstruje, jak radzić sobie z konfiguracją i zarządzaniem zależnościami w czasach, gdy popularne rozwiązania jak Spring nie były jeszcze powszechnie używane lub dostępne.

Kod projektu jest dostępny w repozytorium na GitHubie pod adresem java-jpa-demos. Jest to fragment większej aplikacji, który dotyczy operacji na bazie danych. Ten projekt jest szczególnie wartościowy dla programistów chcących zrozumieć, jak starsze aplikacje były budowane i konfigurowane, zwłaszcza bez użycia nowszych technologii, takich jak Spring Framework.

Informacje techniczne

W niniejszym przykładzie będziemy rozważać program wykorzystujący następujące biblioteki.

  • MySQL Connector Java, wersja 8.0.26, data wydania 19.07.2021
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.26</version>
</dependency>

MySQL Connector/J w wersji 8.0.26 to sterownik JDBC dla MySQL, który umożliwia aplikacjom Java komunikację z bazą danych MySQL. Poniżej znajdziesz szczegółowe informacje o kompatybilności tej wersji z różnymi technologiami.

Java: MySQL Connector/J 8.0.26 jest kompatybilny z Java 8 i nowszymi wersjami, w tym Java 11 i Java 17. Jest zgodny z JDBC 4.2, co oznacza, że może wykorzystywać zaawansowane funkcje JDBC dostępne w nowszych wersjach Javy, takie jak np. „try-with-resources” oraz lepsze zarządzanie zasobami.

JPA (Java Persistence API): MySQL Connector/J działa z JPA 2.1 i nowszymi. Oznacza to, że może być używany z implementacjami JPA takimi jak EclipseLink czy Hibernate.

Hibernate ORM: MySQL Connector/J 8.0.26 jest kompatybilny z Hibernate 5.4 i nowszymi. Dzięki temu możesz korzystać z najnowszych funkcji oferowanych przez Hibernate, w tym wsparcia dla nowoczesnych typów danych i optymalizacji wydajności.

MySQL Server: MySQL Connector/J 8.0.26 jest kompatybilny z MySQL Server 5.7 i 8.0. Jest to ważne, ponieważ zapewnia wsparcie dla nowoczesnych funkcji i optymalizacji dostępnych w tych wersjach serwera MySQL.

TLS/SSL: Wersja 8.0.26 oferuje wsparcie dla najnowszych protokołów TLS, co zwiększa bezpieczeństwo połączeń z bazą danych.

  • Java Persistence API, Version 2.1, wersja 1.0.2.Final, data wydania 23.01.2018
<dependency>
  <groupId>org.hibernate.javax.persistence</groupId>
  <artifactId>hibernate-jpa-2.1-api</artifactId>
  <version>1.0.2.Final</version>
</dependency>

Biblioteka hibernate-jpa-2.1-api w wersji 1.0.2.Final jest częścią specyfikacji JPA (Java Persistence API) i jest używana jako implementacja standardu JPA 2.1. Poniżej znajdziesz szczegółowe informacje o kompatybilności tej wersji z różnymi technologiami.

Java: Specyfikacja JPA 2.1 jest kompatybilna z wersjami Java SE 6, 7, 8. Wersje późniejsze niż Java 8 mogą również działać, ale należy zwrócić uwagę na kompatybilność całego stosu technologicznego.

Hibernate ORM: Hibernate 4.3.x i nowsze wersje są zgodne ze specyfikacją JPA 2.1. Zaleca się używanie co najmniej Hibernate 5.0 dla lepszej wydajności i wsparcia.

Serwery aplikacyjne: JPA 2.1 jest wspierana przez wiele popularnych serwerów aplikacyjnych, takich jak WildFly 8+, JBoss EAP 6.3+, GlassFish 4+, WebLogic 12c, WebSphere 8.5.5. WildFly 8 i późniejsze wersje mają wbudowaną obsługę JPA 2.1.

Frameworki webowe: Spring 4.x w pełni wspiera JPA 2.1. Użycie Spring Data JPA umożliwia łatwą integrację z Hibernate jako dostawcą JPA. Specyfikacja JPA 2.1 jest częścią Java EE 7.

  • Hibernate Core Relocation, wersja 5.5.7.Final, data wydania 25.08.2021
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.5.7.Final</version>
</dependency>
  • Hibernate EntityManager Relocation, wersja 5.5.7.Final, data wydania 25.08.2021
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>5.5.7.Final</version>
</dependency>

Podsumowanie

W niniejszym artykule pokazaliśmy, że aplikacje wykorzystujące starsze wersje bibliotek JPA nadal mogą działać poprawnie. Jednakże, należy mieć świadomość, że wraz z nowymi wersjami JPA 2.2 i 3.0 zostały wprowadzone nowe funkcje i usprawnienia, które mogą istotnie zwiększyć wydajność i elastyczność aplikacji. Przykładowo, JPA 2.2 wprowadził wsparcie dla nowych typów zapytań (np. derived queries, native queries) oraz usprawnienia w obszarze zarządzania transakcjami. Z kolei wersja 3.0, rozszerzyła możliwości integracji z nowoczesnymi technologiami i narzędziami. Przed przeprowadzeniem aktualizacji z JPA 2.1 należy przeanalizować zmiany wprowadzone w nowych wersjach bibliotek zależności oraz opracować odpowiednie testy integracyjne, aby upewnić się, że aplikacja po migracji będzie działać zgodnie z oczekiwaniami.

Aplikacja internetowa do zarządzania zadaniami

Nauka programowania aplikacji z wykorzystaniem wszystkich możliwości Spring Framework to inwestycja czasochłonna lecz z pewnością dająca wiele satysfakcji i korzyści. Spring jest projektem rozwijanym od ponad dwóch dekad, co przekłada się na jego stabilność i dojrzałość. Spring składa się z wielu mniejszych projektów i modułów, takich jak Spring Boot, Spring Data, Spring Security, Spring Cloud, które umożliwiają tworzenie takiej architektury rozwiązania, jaka jest wymagana do spełnienia wymagań klienta i potrzeb użytkownika.

Aby lepiej poznać założenia narzędzia Spring Framework oraz zależności z innymi technologiami, polecam następujący kurs na platformie Udemy:

W tym kursie krok po kroku wykładowca przedstawia w elementarnych przykładach różne zagadnienia związane z technologią Spring Framework, projektem Spring Boot, korzystaniem z bazy danych. Dopiero w siódmym rozdziale od lekcji 86 do 139, mając opanowane podstawy, będzie można śledzić i wypróbować samodzielnie, jak zrealizować prostą aplikację internetową do zarządzania zadaniami.

Poniżej przedstawiam nieco zmodyfikowaną wersję tej aplikacji, która może być wykorzystywana np. przez uczniów do zarządzania swoimi szkolnymi obowiązkami i wydarzeniami. Jest wiele rzeczy, które są w obecnej wersji niedoskonałe i będą przeze mnie rozwijane, dlatego celowo nie chcę wskazywać lokalizacji repozytorium, z którego można pobrać gotowy kod.

Jedno z okien prostej aplikacji webowej do zarządzania listą zadań
Jedno z okien prostej aplikacji webowej do zarządzania listą zadań.

Programowanie przy użyciu ziaren w języku Java

W podręcznikach do nauki programowania w Javie, terminem ziarna (lub ziarnka1) określa się klasę, która ma metody nazywane według ustalonego wzorca.

Dla przykładu, jeśli chcemy zbudować system do obsługi uczniów w szkole, na pewno jednym z obiektów w takim systemie będzie uczeń, który ma pewne cechy własne jak imię i nazwisko, jak też możemy przypisać go do określonej klasy. Znamy również jego ocenę średnią na koniec półrocza. W szkole uczy się wielu uczniów, dlatego obiekt ucznia tworzony będzie według szablonu, czyli klasy.

Aby utworzyć klasę ziarna, oprócz prywatnych pól przechowujących dane, należy zdefiniować metody dostępowe (gettery) oraz metody ustawiające (settery). Klasa ziarna powinna zawierać również domyślny konstruktor, czyli konstruktor bezparametrowy.

Przykładowy kod realizujący powyższe wymagania może mieć następującą postać.

package szkola;

public class Uczen {

	private double srednia;
	private String imie;
	private String nazwisko;
	private String klasa;

	public Uczen() {
	}

	public double getSrednia() {
		return srednia;
	}

	public void setSrednia(double srednia) {
		this.srednia = srednia;
	}

	public String getImie() {
		return imie;
	}

	public void setImie(String imie) {
		this.imie = imie;
	}

	public String getNazwisko() {
		return nazwisko;
	}

	public void setNazwisko(String nazwisko) {
		this.nazwisko = nazwisko;
	}

	public String getKlasa() {
		return klasa;
	}

	public void setKlasa(String klasa) {
		this.klasa = klasa;
	}

}

Możemy spotkać się w większych systemach z konwencją nazewniczą, w której dodaje się słowo Bean w nazwie klasy. Inną często wymaganą cechą obiektów czy komponentów, programistycznych jest możliwość zapisywania ich stanu na dysku oraz przesyłanie w postaci strumienia bajtów przez sieć. Do tego celu służy serializacja.

W naszym przykładzie zostawimy nazwę klasy ziarna tak jak jest, zostając również przy stosowaniu polsko brzmiących nazw pól klasy oraz metod. Zauważmy, że zarówno metody dostępowe jak i ustawiające stosują swój wzorzec nazewniczy polegający na dodaniu odpowiednio przedrostka get dla metody odczytującej wartość pola i przedrostka set dla metody ustawiającej wartość pola.

  1. Horstmann, Cornell, Java Techniki zaawansowane; wyd. IX. Prentice Hall (2013), Helion (2014), tłumaczenie Jaromir Senczyk. ↩︎

Instalacja Javy w systemie Windows

Jeśli chcesz tworzyć programy Java w systemie Windows, należy zwrócić uwagę, czy masz zainstalowany odpowiedni zestaw narzędzi. Aby szybko przejść przez proces przygotowania warsztatu, proponujemy sprawdzoną sekwencję kroków.

W przeglądarce internetowej w polu wyszukiwania wprowadzamy słowa java jdk download.

Z dużym prawdopodobieństwem pierwszym wynikiem na stronie wyników wyszukiwania będzie strona prowadząca do portalu firmy Oracle. Po kliknięciu w link przejdziemy na stronę Java Downloads – Oracle, na której wskazywana będzie najbardziej aktualna wersja wydania platformy Java SE. Obecnie jest to wersja JDK 21. Należy zwrócić uwagę, że na stronie Oracle JDK został udostępniony przycisk umożliwiający przejście do projektu OpenJDK.

W zależności od systemu operacyjnego oraz architektury komputera, na której przygotowywać będziemy programy Javy, wybieramy odpowiedni link do pobrania biblioteki JDK.

Po zainstalowaniu biblioteki Java JDK warto obejrzeć zawartość katalogu, w którym znajdziemy poszczególne komponenty platformy programistycznej Javy. W szczególności interesują nas programy wykonywalne, które odnajdziemy w katalogu bin. Aby mieć do nich dostęp z poziomu konsoli systemowej, należy ustawić ścieżkę w zmiennych środowiskowych systemu. Po ustawieniu odpowiednich wartości w zmiennych JAVA_HOME oraz PATH, można w nowym oknie Wiersza polecenia zweryfikować poprawność wykonania tego kroku sprawdzając np. wersję programu java.exe oraz jshell.exe.

Po poprawnym zainstalowaniu środowiska Java JDK, można spróbować napisać, skompilować i uruchomić prosty program Javy, wykorzystując do tego zwykły notatnik. W przypadku bardziej złożonych projektów będzie jednak niezbędna obecność zintegrowanego środowiska programistycznego IDE.