Quest: Podstawy WordPressa

  1. Zainstaluj WordPressa
    • Instalacja ręczna – to czasem jedyna opcja. Użyj wtedy jednego z wielu poradników wideo z YT.
    • Instalacja automatyczna – najczęściej hostingi posiadają zautomatyzowany instalator popularnych skryptów takich jak WordPress. Bezpłatne konto infinityfree.com posiada taki instalator.
  2. Podstawy edytora WordPressa (Gutenberg)
    • Otwórz edytor WordPress i utwórz nowy wpis.
    • Dodaj nagłówek i akapit tekstu.
    • Wstaw obrazek do wpisu i ustaw jego wyrównanie.
    • Dodaj przycisk z linkiem do innej strony internetowej.
    • Wstaw tabelę i sformatuj jej zawartość.
  3. Wybór szablonu
    • Istnieją szablony gotowe do użycia oraz szablony wymagające personalizacji.
    • Warto na początku poszukać popularnych szablonów wraz z opisami, by nie musieć testować wszystkiego samodzielnie.
    • Na początek wybierz szablon nie wymagający zbyt wielu dostosowań.
  4. Kategoryzacja treści i tagi
    • Stwórz nową kategorię o nazwie „Artykuły” i przypisz do niej wpis.
    • Dodaj do wpisu co najmniej 3 tagi opisujące jego treść.
    • Utwórz drugą kategorię „Nowości” i sprawdź, jak wygląda podział treści w panelu WordPress.
  5. Zarządzanie użytkownikami
    • Przejdź do sekcji „Użytkownicy” i dodaj nowego użytkownika o roli „Autor”.
    • Zmień rolę istniejącego użytkownika na „Redaktor”.
    • Sprawdź, jakie uprawnienia ma użytkownik z rolą „Subskrybent”.
  6. Instalacja modułów (wtyczek)
    • Przejdź do sekcji „Wtyczki” i kliknij „Dodaj nową”.
    • Wyszukaj wtyczkę „WPForms” – prosty kreator formularzy kontaktowych.
    • Zainstaluj i aktywuj wtyczkę.
    • Utwórz prosty formularz kontaktowy i dodaj go do strony. Sprawdź czy działa poprawnie.
  7. Konfiguracja widoczności treści
    • Otwórz edytor wpisu i znajdź sekcję „Widoczność”.
    • Ustaw wpis jako „Prywatny” i sprawdź, kto może go zobaczyć.
    • Zmień widoczność wpisu na „Chroniony hasłem” i ustaw hasło.
    • Sprawdź, jak wygląda wpis po zalogowaniu i bez logowania.

Jeśli znasz już podstawy, możesz zacząć personalizować wygląd WordPressa. Wybierz szablon i poznawaj jego możliwości. Różne szablony mają różne możliwości. Przyjemniej zabawy… Zanim zaczniesz robić stronę o czymś konkretnym, przeczytaj listę cech dobrej strony.

Quest: Zawsze tylko dobre strony

Cechy dobrej strony by PK

  1. Użyteczna – tworzona w określonym celu – wtedy jest motywacja
  2. Responsywna – witryna dopasuje się do wielkości używanego urządzenia
  3. Prosta – bez zbędnych efektów
  4. Przejrzysta nawigacja
  5. Atrakcyjna wizualnie
  6. Oryginalna pod względem treści
  7. Zoptymalizowana dla wyszukiwarek (on-page SEO)
  8. Stworzona z myślą o Twojej niszy (tematycznej)

Plus kilka oczywistych spraw

  • Proporcjonalnie skalowane grafiki
  • Warto szukać inspiracji… na przykład na stronach zawodowych webmasterów
  • Dobre czcionki robią robotę
  • Bałagan w kodzie się zemści

Zadanie: Zrób dobrą stronę.

Quest: Diagnostyka Windows i Linux do INF.02

Poniżej wybrałem kilka fragmentów zadań obejmujących diagnostykę. pełne arkusze z zadaniami oraz klucz oceny można pobrać tutaj.

INF.02-01-24.06-SG

Przeprowadź na stacji roboczej diagnostykę komputera za pomocą dostępnych w systemie operacyjnym Linux narzędzi. Uzyskane wyniki testów, zapisz w postaci zrzutów ekranowych. Uzyskane wyniki zapisz w Tabeli. W przypadku braku możliwości identyfikacji wymaganych parametrów przez system należy zapisać brak danych

    Liczba procesów zombie
    Oznaczenie lub nazwa karty graficznej
    Nazwa hosta
    Liczba partycji utworzonych na dysku twardym
    Rozmiar największej partycji na dysku twardym

    INF.02-01-24.01-SG

    Za pomocą dostępnych narzędzi w systemie operacyjnym Linux, przeprowadź na stacji roboczej
    identyfikację zasobów komputera ujętych w tabeli. Uzyskane wyniki testów, w postaci zrzutów ekranowych, zapisz w edytorze tekstowym w pliku o nazwie stacja_testy. Plik umieść na dysku USB oznaczonym nazwą EGZAMIN-X, gdzie X oznacza numer stanowiska egzaminacyjnego, w folderze TESTY. W przypadku braku możliwości identyfikacji parametru zapisz w odpowiedniej komórce tabeli „brak danych”

    Model przewodowej karty sieciowej
    Rozmiar dysku twardego
    Wersja jądra (kernel) systemu Linux

    INF.02-01-23.06-SG

    Na stacji roboczej w systemie Windows przeprowadź identyfikację parametrów karty graficznej:

    • zainstaluj program GPU-Z dostępny na nośniku opisanym DOKUMENTACJA/PROGRAMY
    • za pomocą programu GPU-Z sprawdź parametry karty graficznej, ujęte w Tabeli 1. Podzespół stacji roboczej. Parametry wpisz do tabeli w arkuszu egzaminacyjnym. W przypadku braku możliwości identyfikacji parametru podzespołu przez program, zapisz: brak danych
    • wykonaj zrzuty dokumentujące przeprowadzone testy, a następnie zapisz je jako pliki graficzne w folderze o nazwie KARTA na nośniku USB opisanym EGZAMIN-x, gdzie x oznacza numer stanowiska zdającego.
    Parametr Wartość parametru
    Nazwa
    Użyta technologia
    Typ pamięci
    Wersja sterownika
    Temperatura GPU

    INF.02-01-22.06-SG

    Przeprowadź diagnostykę dysku w systemie Windows Serwer:

    • wykorzystując program CrystalDiskInfo (dostępny na nośniku DOKUMENTACJA/PROGRAMY), odczytaj z dysku wartości parametrów S.M.A.R.T. o numerach: 01, 05, 0A, C5, C6 oraz C7, ujęte w Tabeli 1. Parametry S.M.A.R.T. dysku serwera
    • wykonaj zrzuty ekranu potwierdzające przeprowadzoną diagnostykę dysku. Zrzuty umieść na pulpicie konta Administrator. W przypadku braku widoczności wymaganych parametrów S.M.A.R.T. należy również wykonać zrzuty ekranu
    • w tabeli 1 arkusza egzaminacyjnego zapisz odczytane wartości parametrów i ich nazwy. W przypadku braku widoczności wymaganych parametrów należy zapisać „N/A”

    Tabela 1. Parametry S.M.A.R.T. dysku serwera

    Parametr Wartość bieżąca Nazwa
    01
    05
    0A
    C5
    C6
    C7

    Quest: API w Node.js

    Wersja początkowa – łatwa

    Zadanie polega na zbudowaniu, uruchomieniu i przetestowaniu prostego CRUD API. Załóżmy że chcemy przechowywać w bazie danych informacje o produktach (nazwa, opis, cena). Spośród dostępnych narzędzi proponuję wybrać:

    • Node.js + Express.js + MongoDB + mongoose lub
    • Node.js + Express.js + MySQL + mysql (jeśli wolisz bazę relacyjną).

    Dane będziemy przekazywać i odbierać jako json.

    Proste rozwiązanie dla MySQL (made by AI, tested by PK)

    Zainstaluj wymagane zależności:

    npm init -y
    npm install express mysql

    Utwórz bazę w MySQL (np w XAMPP przez PhpMyAdmin)
    Stwórz plik app.js z następującą zawartością:

    const express = require('express');
    const mysql = require('mysql');
    
    // Tworzenie aplikacji Express
    const app = express();
    
    // Middleware do parsowania JSON (Express ma wbudowany parser JSON od wersji 4.16)
    app.use(express.json());
    
    // Konfiguracja połączenia z bazą danych
    const db = mysql.createConnection({
        host: 'localhost',
        user: 'root', // Zmień na swojego użytkownika
        password: '', // Ustaw swoje hasło
        database: 'products_db', // Ustaw nazwę swojej bazy danych
    });
    
    // Połączenie z bazą danych
    db.connect((err) => {
        if (err) {
            console.error('Błąd połączenia z bazą danych:', err.message);
            return;
        }
        console.log('Połączono z bazą danych MySQL.');
    });
    
    // Tworzenie tabeli w bazie danych (jeśli nie istnieje)
    const createTableQuery = `
        CREATE TABLE IF NOT EXISTS products (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            description TEXT,
            price DECIMAL(10, 2) NOT NULL
        );
    `;
    db.query(createTableQuery, (err) => {
        if (err) throw err;
        console.log('Tabela "products" została utworzona.');
    });
    
    // Endpointy API
    
    // 1. Pobierz wszystkie produkty
    app.get('/products', (req, res) => {
        const query = 'SELECT * FROM products';
        db.query(query, (err, results) => {
            if (err) {
                res.status(500).send(err.message);
                return;
            }
            res.json(results);
        });
    });
    
    // 2. Pobierz produkt po ID
    app.get('/products/:id', (req, res) => {
        const query = 'SELECT * FROM products WHERE id = ?';
        db.query(query, [req.params.id], (err, results) => {
            if (err) {
                res.status(500).send(err.message);
                return;
            }
            if (results.length === 0) {
                res.status(404).send('Produkt nie został znaleziony.');
                return;
            }
            res.json(results[0]);
        });
    });
    
    // 3. Dodaj nowy produkt
    app.post('/products', (req, res) => {
        const { name, description, price } = req.body;
        const query = 'INSERT INTO products (name, description, price) VALUES (?, ?, ?)';
        db.query(query, [name, description, price], (err, result) => {
            if (err) {
                res.status(500).send(err.message);
                return;
            }
            res.status(201).send({ id: result.insertId, name, description, price });
        });
    });
    
    // 4. Aktualizuj produkt
    app.put('/products/:id', (req, res) => {
        const { name, description, price } = req.body;
        const query = 'UPDATE products SET name = ?, description = ?, price = ? WHERE id = ?';
        db.query(query, [name, description, price, req.params.id], (err, result) => {
            if (err) {
                res.status(500).send(err.message);
                return;
            }
            if (result.affectedRows === 0) {
                res.status(404).send('Produkt nie został znaleziony.');
                return;
            }
            res.send('Produkt został zaktualizowany.');
        });
    });
    
    // 5. Usuń produkt
    app.delete('/products/:id', (req, res) => {
        const query = 'DELETE FROM products WHERE id = ?';
        db.query(query, [req.params.id], (err, result) => {
            if (err) {
                res.status(500).send(err.message);
                return;
            }
            if (result.affectedRows === 0) {
                res.status(404).send('Produkt nie został znaleziony.');
                return;
            }
            res.send('Produkt został usunięty.');
        });
    });
    
    // Uruchomienie serwera
    const PORT = 3000;
    app.listen(PORT, () => {
        console.log(`Serwer działa na porcie ${PORT}`);
    });
    

    Testowanie

    1. Możesz utworzyć testową aplikację JS która będzie pobierała dane z API (np: strona z przyciskami, z których każdy uruchamia odpowiednią funkcję API i powoduje wyświetlenie komunikatu z potwierdzeniem i danymi zwrotnymi)
    2. lub użyć gotowych narzędzi do testowania API. Proponuję Postman. W wersji bezpłatnej, bez zakładania konta, można wykonać wszystkie testy. Aby na przykład dodać dane do bazy za pomocą Postman:
      • Wybierz metodę POST.
      • Wprowadź URL: http://localhost:3000/products.
      • Przejdź do zakładki Body, wybierz opcję raw i jako format wybierz JSON. Wklej:
        { "name": "Produkt A", "description": "Opis produktu A", "price": 99.99 }
      • Kliknij Send.

    Zadanie poszerzone

    Przetestuj działanie aplikacji i zrozum jej działanie. Poeksperymentuj! Wybierz, które elementy chcesz poprawić:

    1. Rozbij plik z kodem na mniejsze, by poprawić porządek i skalowalność.
    2. Dodaj kolejne endpointy i kolejną tabelę w bazie (np. z zakupami i sprzedażami).
    3. Poczytaj o bezpieczeństwie API i rozbuduj je np. o autoryzację i obsługę tokenów JWT.