Kategoria: Design Hub

Design Hub to treści związane z projektowaniem czy szerzej rozumianą architekturą aplikacji. Design Hub będzie podzielony na podkategorie, – UI/UX, Grafika, Web design oraz część softu do wspomagania projektowania..

  • Post #53 Angular Podstawy kompleksowy przewodnik dla początkujących

    Post #53 Angular Podstawy kompleksowy przewodnik dla początkujących

    Angular to jeden z najpopularniejszych frameworków do tworzenia aplikacji webowych. Jeśli dopiero zaczynasz swoją przygodę z programowaniem front-endowym, ten przewodnik pomoże Ci zrozumieć podstawowe koncepcje Angulara i rozpocząć tworzenie własnych aplikacji. Angular Podstawy

    Dowiedz się jakie były moje początki z Angular Angular Podstawy

    Dlaczego warto uczyć się Angulara?

    Angular wyróżnia się:

    • Kompleksowością: Wszystko, czego potrzebujesz do tworzenia aplikacji webowych, znajdziesz w jednym miejscu.
    • Stabilnością: Framework jest wspierany przez Google i rozwijany z myślą o dużych projektach.
    • Wszechstronnością: Możesz tworzyć aplikacje SPA (Single Page Application) oraz aplikacje progresywne (PWA).

    Jak zacząć z Angular?

    Instalacja Angular CLI

    CLI (Command Line Interface) to narzędzie, które ułatwia tworzenie i zarządzanie projektami w Angularze. Oto jak je zainstalować:

    npm install -g @angular/cli
    
    
    

    Po instalacji możesz utworzyć nowy projekt za pomocą polecenia:

    ng new my-first-app
    
    
    

    Uruchomienie projektu

    Przejdź do folderu projektu:

    cd my-first-app
    
    
    

    Uruchom serwer deweloperski:

    ng serve
    
    
    

    Twoja aplikacja będzie dostępna pod adresem http://localhost:4200.

    Podstawowe elementy Angulara

    Angular opiera się na kilku kluczowych koncepcjach. Oto najważniejsze z nich:

    Komponenty – Kluczowe Elementy Angular

    Komponenty w Angularze to kluczowe elementy aplikacji, które odpowiadają za modularność i organizację kodu. Są to podstawowe bloki funkcjonalne, które łączą logikę z interfejsem użytkownika (UI).

    Czym jest komponent?

    Komponent to zestaw plików odpowiedzialny za konkretną funkcjonalność aplikacji. Składa się z:

    • HTML – Określa strukturę widoku.
    • CSS – Stylizuje elementy widoczne w komponencie.
    • TypeScript – Zawiera logikę komponentu (np. metody, zmienne).
    • Spec.ts (testowy) – Obsługuje testy jednostkowe, co zapewnia jakość kodu.

    Przykładowo, komponent nawigacji może składać się z plików navbar.component.html, navbar.component.css, navbar.component.ts i navbar.component.spec.ts

    Dwie główne role komponentów

    Komponenty funkcyjne (z logiką):

    Posiadają metody i właściwości, które pozwalają na obsługę danych, zdarzeń i interakcji użytkownika. Przykład: Formularz logowania, który waliduje dane i wysyła je do serwera. Przykładowa metoda w komponencie:

    export class NavbarComponent {
      isLoggedIn: boolean = false;
    
      toggleLogin() {
        this.isLoggedIn = !this.isLoggedIn;
      }
    }
    
    
    

    Komponenty wizualne (UI-only)

    Odpowiadają jedynie za wyświetlanie elementów interfejsu użytkownika, bez dodatkowej logiki. Przykład: Karta z obrazkiem i tekstem w galerii zdjęć. Przykład prostego komponentu wizualnego:

    export class GalleryCardComponent {
      @Input() title: string = '';
      @Input() imageUrl: string = '';
    }
    
    
    

    Dobre praktyki dla początkujących

    Organizacja komponentów w folderach:

    Umieszczaj każdy komponent w osobnym folderze. To ułatwia nawigację i zarządzanie projektem.

    Przykład struktury:

    src/
      app/
        components/
          navbar/
            navbar.component.html
            navbar.component.css
            navbar.component.ts
            navbar.component.spec.ts
    
    

    Zagnieżdżanie komponentów

    W Angularze możesz „zagnieżdżać” komponenty, czyli umieszczać jeden komponent wewnątrz innego. Jest to kluczowa cecha pozwalająca na tworzenie złożonych interfejsów użytkownika. Przykład: Komponent navbar może zawierać komponent user-menu w swoim widoku: Kod HTML komponentu navbar:

    <nav class="navbar">
      <app-user-menu></app-user-menu>
    </nav>
    
    
    

    Czy komponent jest tylko wizualny?

    Decyduj, czy komponent ma pełnić jedynie rolę wizualną (np. karta, przycisk), czy też będzie posiadał logikę (np. obsługa zdarzeń, walidacja danych). To pozwala na lepsze zarządzanie kodem.

    Unikaj nadmiernego zagnieżdżania

    Mimo że Angular pozwala na zagnieżdżanie komponentów, staraj się nie tworzyć zbyt głębokiej hierarchii. Ułatwi to debugowanie i utrzymanie projektu.

    Poniżej ilustracja przedstawiająca przykładową organizację plików w Angularze 

    Dodając taką sekcję z obrazem i szczegółami, wyjaśnimy w prosty sposób, jak zarządzać komponentami w Angularze.

    Przykład prostego komponentu:

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'app-hello',
      template: `<h1>Witaj w Angularze!</h1>`,
      styles: [`h1 { color: blue; }`]
    })
    export class HelloComponent {}
    
    

    Moduły

    Angular używa modułów do organizacji aplikacji. Każda aplikacja zaczyna się od modułu AppModule.

    Przykład definicji modułu:

    import { NgModule } from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { AppComponent } from './app.component';
    
    @NgModule({
      declarations: [AppComponent],
      imports: [BrowserModule],
      bootstrap: [AppComponent]
    })
    export class AppModule {}
    
    

    Routing

    Routing pozwala nawigować pomiędzy różnymi widokami w aplikacji SPA. Oto jak skonfigurować prosty router:

    import { NgModule } from '@angular/core';
    import { RouterModule, Routes } from '@angular/router';
    import { HomeComponent } from './home/home.component';
    import { AboutComponent } from './about/about.component';
    
    const routes: Routes = [
      { path: '', component: HomeComponent },
      { path: 'about', component: AboutComponent }
    ];
    
    @NgModule({
      imports: [RouterModule.forRoot(routes)],
      exports: [RouterModule]
    })
    export class AppRoutingModule {}
    
    

    Tworzenie pierwszego formularza

    Dynamiczne formularze są jedną z najważniejszych funkcji Angulara. Oto prosty przykład:

    HTML:

    <form (ngSubmit)="onSubmit()" #form="ngForm">
      <label for="name">Imię:</label>
      <input type="text" id="name" name="name" ngModel required>
      <button type="submit" [disabled]="!form.valid">Wyślij</button>
    </form>
    
    

    TypeScript:

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'app-form',
      templateUrl: './form.component.html'
    })
    export class FormComponent {
      onSubmit() {
        console.log('Formularz został wysłany!');
      }
    }
    
    

    Podsumowanie

    Angular to potężne narzędzie dla programistów, którzy chcą tworzyć zaawansowane aplikacje webowe. W tym artykule zapoznaliśmy się z podstawowymi koncepcjami i przykładami kodu. Teraz czas na praktykę! Możesz także odwiedzić wpis #36 gdzie przedstawiam dobry praktyczny kurs Angular z Udemy podczas którego możesz poznać praktyczne zastosowania.

  • Post #50 Glide Jak zrobić kontent slider?

    Post #50 Glide Jak zrobić kontent slider?

    Kontent slider czy w innej nazwie karuzela to treść osadzona i serwująca różny kontent po przesunięciu strzałki lub automatycznie w wyznaczonym czasie.

    Jak Stworzyłem kontent slider za pomocą Glide.js

    W mojej ostatniej przygodzie z frontendem postanowiłem zagłębić się w Glide.js i nauczyć się, jak zbudować slider, który będzie responsywny i prosty w implementacji. W tym wpisie podzielę się, jak dodałem zdjęcia, skonfigurowałem responsywność za pomocą @media, oraz jakie kroki pomogły mi zrozumieć tę bibliotekę.

    Co to Jest Glide.js?

    Glide.js to lekka i szybka biblioteka JavaScript do tworzenia sliderów i karuzeli. Jest bardzo elastyczna, co oznacza, że możemy ją łatwo dostosować do własnych potrzeb – idealna do sliderów, które mają dobrze działać na różnych urządzeniach i ekranach.

    Przygotowanie Plików

    Najpierw stworzyłem strukturę plików, która wyglądała następująco:

    • index.html – główny plik HTML.
    • css/glide.core.css oraz css/glide.theme.css – style biblioteki Glide.js.
    • glide.js – główny plik JavaScript dla biblioteki.
    • Folder img – zawierający zdjęcia, które chciałem dodać do slidera.

    Krok po Kroku: Tworzenie Slidera

    Krok 1: Dodanie HTML

    W pliku index.html dodajemy podstawową strukturę slidera zgodnie z dokumentacją Glide.js. Wygląda to tak:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Slider glide.js</title>
      <link rel="stylesheet" href="./css/glide.core.css">
      <link rel="stylesheet" href="./css/glide.theme.css">
    </head>
    <body>
      <div class="glide">
        <div class="glide__track" data-glide-el="track">
          <ul class="glide__slides">
            <li class="glide__slide"><img src="./img/20-superfoods-640.webp" alt="20 superfoods"></li>
            <li class="glide__slide"><img src="./img/3-domowe-naturalne-przeziebienie-640.webp" alt="Przeziębienie"></li>
            <li class="glide__slide"><img src="./img/ashwaganda-telomers-640.webp" alt="Ashwaganda"></li>
            <!-- Dodaj więcej zdjęć tutaj -->
          </ul>
        </div>
        <div class="glide__arrows" data-glide-el="controls">
          <button class="glide__arrow glide__arrow--left" data-glide-dir="<">Previous</button>
          <button class="glide__arrow glide__arrow--right" data-glide-dir=">">Next</button>
        </div>
        <div class="glide__bullets" data-glide-el="controls[nav]">
          <button class="glide__bullet" data-glide-dir="=0"></button>
          <button class="glide__bullet" data-glide-dir="=1"></button>
          <!-- Dodaj więcej przycisków w zależności od liczby slajdów -->
        </div>
      </div>
    </body>
    </html>
    
    
    
    

    W tym miejscu każdy li to pojedynczy slajd. Dodałem kilka zdjęć i dostosowałem ich alt, by były bardziej opisowe

    • Krok 2: Konfiguracja JavaScript
    • Podpięcie Glide.js jest proste
    • Na końcu pliku index.html dodałem skrypt inicjujący slider:
    <script src="./glide.js"></script>
    <script>
      new Glide('.glide', {
        type: 'carousel',
        startAt: 0,
        perView: 4,
        breakpoints: {
          1200: { perView: 3 },
          800: { perView: 2 },
          480: { perView: 1 }
        }
      }).mount();
    </script>
    
    

    W tej konfiguracji slider jest ustawiony jako karuzela (czyli po przewinięciu ostatniego zdjęcia wraca do pierwszego)

    Ustawiłem również startAt na 0, co oznacza, że slider zaczyna od pierwszego zdjęcia. Najważniejsza część to breakpoints – dzięki nim slider dostosowuje się do szerokości ekranu:

    • 1200px i więcej – wyświetlane są 4 slajdy.
    • 800px do 1200px – wyświetlane są 3 slajdy.
    • 480px do 800px – wyświetlane są 2 slajdy.
    • poniżej 480px – wyświetlany jest 1 slajd.

    Krok 3: Responsywność i ustawienie CSS @media

    Glide.js samo w sobie obsługuje breakpoints, ale dodałem też własne style CSS dla img, by zdjęcia zachowywały odpowiednie proporcje i były responsywne:

    Skopiuj kod
    .glide__slide img {
      width: 100%;
      height: auto;
    }
    
    

    Dzięki temu zdjęcia dopasowują się do rozmiaru kontenera, niezależnie od szerokości ekranu

    Co Nauczyłem się Pracując z Glide.js?

    • Prostota – Glide.js jest bardzo prosty w obsłudze, ale jednocześnie oferuje dużo możliwości konfiguracyjnych.
    • Responsywność – dzięki breakpoints i CSS łatwo stworzyć slider, który świetnie wygląda zarówno na komputerze, jak i na telefonie. Łatwość rozbudowy – Glide.js pozwala na dodawanie różnych komponentów (np. przyciski nawigacyjne, wskaźniki), co sprawia, że jest wszechstronny.

    Podsumowanie

    Stworzenie slidera za pomocą Glide.js to świetne doświadczenie dla każdego, kto dopiero uczy się frontendu i chce osiągnąć profesjonalne rezultaty przy minimalnym wysiłku. Cieszę się, że mogłem zrozumieć, jak działa ta biblioteka, i mam nadzieję, że ten przewodnik pomoże Wam stworzyć własny, responsywny slider.

    Dajcie znać, jeśli macie pytania lub potrzebujecie pomocy – chętnie pomogę! Kliknijcie na Facebook OpenGateweb

  • Post #49 Web-design

    Post #49 Web-design

    Profesjonalne Projektowanie Stron i Optymalizacja SEO. Twoja Droga do Sukcesu w Internecie

    Szukasz sposobu na wzmocnienie swojej obecności w internecie? Nasze kompleksowe usługi web designu i SEO przynoszą realne rezultaty. Łączymy kreatywne projektowanie z wiedzą techniczną, aby pomóc Twojej firmie wyróżnić się w sieci. Dlaczego Warto Wybrać Profesjonalne Projektowanie Stron? Nowoczesny biznes potrzebuje więcej niż tylko strony internetowej – wymaga skutecznej strategii cyfrowej. Nasze usługi obejmują:

    Responsywne strony internetowe działające na wszystkich urządzeniach

    Indywidualne rozwiązania programistyczne Przyjazny interfejs użytkownika Strukturę zoptymalizowaną pod SEO Szybkie ładowanie stron SEO, które Przynosi Efekty

    Wiemy, że widoczność w sieci jest kluczem do sukcesu. Nasza strategia SEO koncentruje się na:

    • Strategicznej optymalizacji słów kluczowych
    • Optymalizacji treści
    • Wdrażaniu technicznych aspektów SEO
    • Strategiach lokalnego SEO
    • Monitorowaniu wyników

    Sprawdzony Proces Działania

    Analiza: Badamy potrzeby Twojej firmy i pozycję rynkową
    Strategia: Tworzymy spersonalizowane podejście
    Wdrożenie: Realizujemy zoptymalizowaną obecność w sieci
    Monitoring: Śledzimy i poprawiamy wyniki

    Gotowy na Transformację Swojej Obecności w Sieci?

    Skontaktuj się z nami już dziś, aby omówić, jak możemy pomóc w rozwoju Twojego biznesu online. Nasz zespół ekspertów jest gotowy stworzyć stronę, która nie tylko świetnie wygląda, ale także osiąga wysokie pozycje w wynikach wyszukiwania. Słowa kluczowe: projektowanie stron internetowych, optymalizacja SEO, tworzenie stron www, responsywne strony, strategia cyfrowa.

    Jeśli chcesz z nami porozmawiać o Twoje koncepcji napisz na kontakt@opengateweb.com

  • Post #46 Biblioteki do animacji z elementami w JavaScript

    Post #46 Biblioteki do animacji z elementami w JavaScript

    Biblioteki do Animacji z Elementami w JavaScript

    Rola Animacji

    W dzisiejszym dynamicznym świecie stron internetowych animacje odgrywają kluczową rolę w przyciąganiu uwagi użytkowników. Na szczęście, istnieje wiele bibliotek, które ułatwiają tworzenie efektownych animacji bez potrzeby pisania dużej ilości skomplikowanego kodu. W tym wpisie przyjrzymy się trzem popularnym bibliotekom do animacji, a następnie skupimy się na jednej z nich – Anime.js.

    Trzy znane biblioteki do animacji w JavaScript

    • GSAP (GreenSock Animation Platform) Jedna z najpotężniejszych i najbardziej rozbudowanych bibliotek do animacji w JavaScript. GSAP oferuje szeroką gamę narzędzi do animacji dowolnych elementów na stronie, w tym SVG, canvas, DOM i CSS. Jest często wybierana przez profesjonalistów ze względu na wydajność i elastyczność.
    • Velocity.js Lekka i szybka biblioteka animacyjna, która została stworzona jako ulepszona wersja animacji jQuery. Velocity.js działa zarówno z DOM, jak i z właściwościami CSS. Idealna do prostszych projektów, gdzie szybkość i wydajność są priorytetem.
    • Anime.js Niezwykle lekka biblioteka z prostym, ale potężnym API. Anime.js pozwala na animowanie właściwości CSS, atrybutów DOM, SVG oraz obiektów JavaScript. Działa z intuicyjnymi ustawieniami, co sprawia, że jest łatwa w nauce i wdrożeniu.

    Anime.js Można za jej pomocą animować właściwości CSS, atrybuty DOM, SVG, a także obiekty JavaScript. Dzięki intuicyjnemu API, tworzenie efektownych animacji staje się prostsze, a sam kod pozostaje czytelny.

    Dlaczego warto korzystać z bibliotek animacyjnych?

    Mimo że CSS oferuje wbudowane możliwości animacji za pomocą takich właściwości jak transition czy animation, to korzystanie z bibliotek animacyjnych, takich jak Anime.js, daje programiście większą elastyczność. Biblioteki te często mają wbudowane zaawansowane funkcje, takie jak kolejki animacji, łatwe tworzenie sekwencji czy zaawansowane kontrolowanie czasów trwania i opóźnień, co trudno osiągnąć za pomocą samego CSS.

    Jak stworzyć podstawową animację za pomocą Anime.js – Krok po kroku

    Stworzenie animacji z Anime.js jest bardzo proste. Poniżej krok po kroku przejdziemy przez proces dodawania animacji do elementu na stronie.

    Krok 1: Dodanie Anime.js do projektu

    Najpierw należy zaimportować bibliotekę Anime.js do projektu. Można to zrobić za pomocą CDN oraz poprzez pobranie biblioteki i pliku JavaScript anime.min.js i podłączenie w html.

    &lt;script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js">&lt;/script>
    &lt;script src="./js/anime.min.js">&lt;/script>
    
    
    
    
    

    Krok 2: Utworzenie elementu do animacji

    Załóżmy, że chcemy animować prosty element div. Stwórzmy go w HTML:

    &lt;div class="box">&lt;/div>
    
    &lt;style>
      .box {
        width: 100px;
        height: 100px;
        background-color: red;
        position: relative;
      }
    &lt;/style>
    
    
    

    Krok 3: Napisanie kodu animacji

    Teraz możemy napisać kod, który za pomocą Anime.js animuje element div.

    anime({
      targets: '.box',
      translateX: 250,   // Przesunięcie elementu o 250 pikseli na osi X
      duration: 1000,    // Czas trwania animacji (w milisekundach)
      easing: 'easeInOutQuad' // Typ wygładzania animacji
    });
    
    

    Po uruchomieniu tego kodu, czerwona skrzynka przesunie się w prawo o 250 pikseli w czasie 1 sekundy z efektem wygładzania ruchu.

    Trzy przykłady animacji z Anime.js

    • Przykład 1: Zmiana koloru tła

    Poniżej przykład, jak zmienić kolor tła elementu z czerwonego na niebieski.

    anime({
      targets: '.box',
      backgroundColor: '#0000FF', // Zmiana koloru tła na niebieski
      duration: 2000,
      easing: 'linear'
    });
    
    
    
    • Przykład 2: Animacja po krzywej (transformacja z rotacją)

    Przykład poniżej pokazuje, jak animować element z obrotem.

    anime({
      targets: '.box',
      translateX: 250,
      rotate: '1turn',  // Obrót o 360 stopni
      duration: 1500,
      easing: 'easeInOutSine'
    });
    
    
    
    • Przykład 3: Sekwencja animacji z opóźnieniami

    W tym przykładzie animujemy najpierw przesunięcie w prawo, a następnie zmianę koloru.

    anime({
      targets: '.box',
      translateX: 250,
      duration: 1000,
      easing: 'easeInOutQuad',
      complete: function() {  // Po zakończeniu przesunięcia
        anime({
          targets: '.box',
          backgroundColor: '#00FF00', // Zmiana koloru na zielony
          duration: 1000,
          easing: 'easeInOutQuad'
        });
      }
    });
    
    
    

    Podsumowanie

    Anime.js to doskonałe narzędzie dla programistów, którzy chcą w prosty sposób tworzyć zaawansowane animacje na stronach internetowych. Jego intuicyjne API i lekkość sprawiają, że jest świetnym wyborem zarówno dla początkujących, jak i zaawansowanych twórców. Dzięki tej bibliotece możemy animować nie tylko elementy HTML, ale także właściwości CSS, atrybuty DOM i obiekty JavaScript, co czyni ją bardzo wszechstronną.

    Zachęcamy do eksperymentowania z różnymi animacjami i efektami, aby wzbogacić swoje projekty internetowe!

  • Post #23 Zlecenie wykonania strony.

    Post #23 Zlecenie wykonania strony.

    Zlecenie wykonania strony Budzynski Kancelaria.

    Omówienie zlecenia budowy strony

    Nowe zlecenie budowy strony dla Kancelarii Prawniczej. Ustalenia z klientem zakresu prac i wymagań dla strony. Strona BudzyńskiKancelaria będzie prostą stroną wizytówką dla KP i zespołu prawników. Strona wesprze i określi wizerunek.

    Strona Budzynskikancelaria

    DevOps to praktyki integrujące procesy deweloperskie z operacyjnymi. W kontekście budowy strony dla Budzyński Kancelaria, zadania DevOps będą obejmowały sprawdzanie otoczenia domeny, konfigurację hasła i dostępu FTP oraz zamówienie domeny.

    Wstępne założenia

    Założenia dla domeny BudzynskiKancelaria mogą obejmować prostotę w interfejsie użytkownika oraz klarowny opis świadczonych usług prawnych. Dodatkowo, istotnym elementem może być obecność opisu zespołu prawników oraz łatwo dostępny formularz kontaktowy dla klientów.

    Zgromadzenie tekstów i zdjęć

    W projekcie ColorMaker udało mi się uzyskać odpowiednie kolory, które idealnie pasują do koncepcji. Dodatkowo, zebrałem odpowiednie teksty oraz skorzystałem z darmowych zdjęć, aby wzbogacić prezentację i w pełni oddać zamysł projektu.

    Projekt Garficzny strony

    Przygotowuję koncept projektu graficznego strony internetowej wraz ze schematem UX, który skupia się na ergonomii i intuicyjności interakcji użytkownika z witryną. Projekt znajduje się w portfolio BudzynskiKancelaria

  • Post #19 Docker Toolbox, Teachers, Portfolio i Glitch

    Post #19 Docker Toolbox, Teachers, Portfolio i Glitch

    Docker Toolbox – App Teachers – Portfolio

    Zainstalowałem Docker-Toolbox wraz z VM ale mój pecet jest za stary i nie wsółpracuje z VM, nawet w starszych instalacjach. Problem leży także w wersji Home. Próbowałem jeszcze możliwości sub-systemu Windows z Linuxem ale mam trochę dośwaidczeń z drugiej strony Linuxa z subsystemem Windowsa i wiem że taki twory gdzie są dwa OS działają beznadziejnie jak auta Hybrydowe – zrezygnowałem z walki na Win Home z konteneryzacją ale wrócę z nowym PC-tem na Pro lub Enterprise. Więcej o Docker

    Dodałem app Node i Express do Glich

    Łatwiejszym rozwiązaniem jest hosting na serverach Node takich jak Glitch, Netlify czy Heroku. Ostatecznie leży na Glitch – zobacz Portfolio gdzie znajdziesz linki do uruchomionej app. Glitch trzyma włączoną i oferuje darmowe 1000 h na miesiąc.

    Plan dla Finanse – pilne rachunki i planner

    Zrobiłem rozpiskę planu applikacj finansowej w podstawowych założeniach i wygląda imponująco. Teraz się zastanawiam jaki zespół to napisze ? Ja i ja 😀😀😀

    Mniej więcej interfejs aplikacji Doradca finansowy będzie zawierał następujące funkcje:

    • Planer brief na następny miesiąc: Zapewniający przegląd planów finansowych na nadchodzący miesiąc.
    • Analiza wydatków na podstawie paragonów: Umiejętność analizowania wydatków na podstawie zdjęć paragonów w celu lepszego zrozumienia, gdzie pieniądze są wydawane.
    • Ewaluacja suwaków dla zwiekszenia i zmniejszenia: Pozwala użytkownikowi manipulować suwakami, aby zobaczyć, jak zmiana wydatków wpłynie na ich ogólną sytuację finansową.
    • Analiza wydatków wraz z możliwościami inwestycji: Zapewnia szczegółową analizę wydatków i sugeruje potencjalne możliwości inwestycyjne na podstawie sytuacji finansowej użytkownika.
    • Moduł optymalizacji kupowania: Pomaga użytkownikowi w optymalizacji zakupów poprzez sugerowanie najlepszych sposobów oszczędzania pieniędzy podczas zakupów.
    • Login personalny oraz rodzinny ( dwa personalne np dla pary )
    • Moduł wykresów: Umożliwia generowanie różnych wykresów i grafik, które pomagają wizualizować wydatki, oszczędności, inwestycje itp., aby użytkownicy mogli łatwiej zrozumieć swoją sytuację finansową.
    • Integracja z API rynków finansowych oraz API aplikacji: Zapewnia dostęp do aktualnych danych z rynków finansowych oraz integrację z innymi aplikacjami finansowymi w celu ułatwienia monitorowania i zarządzania portfelem.
    • Możliwość eksportu do plików CSV: Umożliwia eksport danych finansowych do plików CSV, co pozwala użytkownikom na przenoszenie danych do innych programów lub przeglądanie ich w arkuszach kalkulacyjnych.
    • Budżetowanie na dłuższy okres: Dodanie funkcji umożliwiającej planowanie budżetu na rocznej lub wieloletniej skali czasowej, co pozwala użytkownikom na lepsze zarządzanie długoterminowymi celami finansowymi, takimi jak emerytura czy oszczędności na edukację dzieci.
    • Prognozowanie wydatków: Integracja algorytmów prognostycznych, które analizują wzorce wydatków użytkownika i prognozują przyszłe wydatki, co pomaga w lepszym planowaniu finansowym.
    • Śledzenie aktywów: Dodanie funkcji umożliwiającej śledzenie wartości posiadanych aktywów, takich jak nieruchomości, inwestycje, emerytury itp., aby użytkownicy mieli pełny obraz swojego majątku.
    • Personalizowane porady: Wykorzystanie sztucznej inteligencji do dostarczania spersonalizowanych porad finansowych, uwzględniających indywidualną sytuację i cele użytkownika.
    • Edukacyjne zasoby: Dodanie sekcji zasobów edukacyjnych, która zawiera artykuły, poradniki i kursy dotyczące różnych aspektów zarządzania finansami osobistymi, aby użytkownicy mogli kontynuować rozwój swojej wiedzy na temat finansów.
    • Integracja z technologią blockchain: Jeśli jest to odpowiednie dla użytkowników, integracja z technologią blockchain może umożliwić im śledzenie transakcji, zarządzanie portfelem kryptowalut oraz uczestnictwo w rynkach DeFi (finansów zdecentralizowanych).

    Następnie API Async Xhr Ajax metody fetch()

    Dopracowanie szczegółów app i research wyboru architektury i technologi

    Konfiguracja Flutter do tworzenie aplikacji mobilnych Ios i Android

  • Post #14 Hugo Layout Development

    Post #14 Hugo Layout Development

    #14 Modyfikacje layout i theme Hugo PaperMod

    Dodałem Archiwa i Categorie do szablonu, bez przyjaciół się obejdzie/

    Modyfikacja layout categories i archiwa

    Moje główne kategorie

    • Tech News
    • Coding Corner
    • Design Hub

    Oznaczam post jako Design Hub

    Taksonomie to zdefiniowane przez użytkownika grupowane treści. Są one sposobem klasyfikacji i organizacji treści na podstawie logicznych relacji. Na przykład, na stronie internetowej o filmach, możesz mieć taksonomie dla Aktorów, Reżyserów, Studiów, Gatunków, Lat i Nagród.

    Każda taksonomia ma Terminy, które są kluczami w ramach taksonomii. Na przykład, w taksonomii Aktorów, nazwa każdego aktora byłaby terminem.

    Każdy termin ma Wartości, które są elementami treści przypisanymi do terminu. Na przykład, w taksonomii Aktorów, filmy, w których wystąpił każdy aktor, byłyby wartościami dla terminu tego aktora.

    Hugo automatycznie tworzy taksonomie dla tagów i kategorii. Możesz to zobaczyć na przykład na stronie Kategorie można również zdefiniować niestandardowe taksonomie w pliku konfiguracyjnym swojej strony hugo.toml.

    Możesz przypisać treść do taksonomii w metadanych treści. Na przykład, aby przypisać wpis na blogu do kategorii „Development” i serii „Go Web Dev”, należy umieścić kategorie = [’Development’] oraz series = [’Go Web Dev’] w metadanych wpisu.

    Możesz dodać niestandardowe metadane do terminów taksonomii, tworząc stronę dla terminu i dodając metadane w metadanych przedniej części.

    Dostarczony wcześniej plik układu categories.html służy do generowania strony z listą kategorii. Ta strona wyświetla wszystkie kategorie używane na Twojej stronie, a dla każdej kategorii dostarcza link do strony wyświetlającej wszystkie wpisy w tej kategorii. Linia {{ .Data.Terms.Alphabetical }} to miejsce, gdzie Hugo iteruje po wszystkich kategoriach w porządku alfabetycznym.

    Linki do stron dodane do Stopki

    Dodałem do stopki Kategorie

    Stworzenie Series

    Dodatkowo do categori tagów dodałem series. Przejdź i zobacz dodatkową funkcjonalność Taxonometrii Hugo. Categories Archives

    Jak zrobić archives i categories w Hugo

    Trzeba założyć strony w katalogu content. Trzeba pamiętać że nie są to zwykłe pages lub post i powinny być poza tymi folderami w głównym folderze content poniżej front-matters.

    • Plik categories.md
    ---
    title: "Categories from here"
    layout: "categories"
    url: "/categories/"
    summary: categories
    ---
    
    
    
    • Plik archives.md
    ---
    title: "Archive"
    layout: "archives"
    url: "/archives/"
    summary: archives
    ---
    
    

    Oba pliki są tylko z front-matters – treść jest generowana dynamicznie dodatkowo w głównym pliku config calej applikacji hugo.toml należy dodać params

    [taxonomies]
      tag = "tags"
      category = "categories"
      series = "series"
    
    
    

    W zależności jeśli chcemy umieścić linki do tych stron w menu to należy dopisać do menu odpowiednie params. W moim przypadku zmodyfikowałem layout footer.html

    • Plik footer.html
    <span>
            Powered by
            <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
            <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a> |
            <a href="/pages/sitemap" rel="noopener" target="_blank">Sitemap</a> |
            <a href="/archives/" rel="noopener" target="_blank">Archives</a> |
            <a href="/categories/" rel="noopener" target="_blank">Categories</a>
        </span>
    
    
    

    Pliki szablonów – dla archives szablon był przygotowany a dla categories.html trzeba stworzyć plik layouts_default\categories.html ( zwróć uwagę że front-matters wskazuje na szablon layout: „categories” )

    • Plik szablonu categories.html ( Do sprawdzenia dodawanie / customizowanie dodatkowego css. )
    {{ define "main" }}
    <div class="container">
      <h1>Categories</h1>
      {{ range $key, $value := .Site.Taxonomies.categories }}
      <a href="{{ "categories/" | relLangURL }}{{ $key | urlize }}">{{ $key }}</a> ({{ len $value }})
      {{ end }}
    
      <h2 style="margin-top: 2rem;">Series</h2>
      {{ range $key, $value := .Site.Taxonomies.series }}
      <a href="{{ "series/" | relLangURL }}{{ $key | urlize }}">{{ $key }}</a> ({{ len $value }})
      {{ end }}
    
      <h2 style="margin-top: 2rem;">Tags</h2>
      {{ range $key, $value := .Site.Taxonomies.tags }}
      <a href="{{ "tags/" | relLangURL }}{{ $key | urlize }}" style="margin-left: 0.25rem; margin-right: 0.25rem;">{{ $key }}</a> ({{ len $value }})
      {{ end }}
    </div>
    {{ end }}
    
    

    I wszystko gotowe.

  • Post #7 Bootstrap and WebPack

    Post #7 Bootstrap and WebPack

    Zaawansowana Konfiguracja Bootstrapa z WebPack

    Jak zainstalować Bootstrap z WP w odpowiedniej konfiguracji?

    🐙Wersja bundle – czyli pakietu skompilowanego Web Pack. Od początku prosto jak najłatwiej.

    Czym jest Bootstrap ?

    Bootstrap to popularny framework CSS, który zapewnia zestaw gotowych komponentów i stylów, ułatwiając tworzenie responsywnych stron internetowych. Jest prosty w użyciu i pozwala szybko stworzyć estetyczny interfejs użytkownika bez konieczności pisania dużo kodu CSS od zera.

    Jest szybkim i przygotowanym w wersji estetycznego Ui frameworkiem i posiada wiele postawowych funkcji Ux. Sluży do szybkiego prototypowania. Posiada wiele zależności Sass i Css JavaScript i oczywiście HTML. Dodatkowo używa Popper.js i posiada zestaw własnych Icon.

    Czym jest Web-Pack ?

    Webpack natomiast jest narzędziem do pakowania modułów JavaScript. Pozwala on na zarządzanie zależnościami między modułami, a następnie kompiluje je w jeden plik lub wiele plików w celu optymalizacji wydajności aplikacji. Webpack jest często wykorzystywany wraz z npm (Node Package Manager) do zarządzania zależnościami i instalowania pakietów.

    Zalety rozwiązania z użyciem Bootstrapa i Webpacka obejmują:

    Łatwość użycia: Oba narzędzia są stosunkowo łatwe w użyciu, dzięki czemu nawet początkujący programiści mogą z nich korzystać.

    Wydajność: Webpack umożliwia optymalizację aplikacji poprzez pakowanie modułów JavaScript i zarządzanie zależnościami, co przyczynia się do szybszego ładowania strony.

    Elastyczność: Zarówno Bootstrap, jak i Webpack oferują wiele opcji konfiguracyjnych, które pozwalają dostosować aplikację do indywidualnych potrzeb.

    Niestety, istnieją również pewne wady:

    Konieczność nauki: Korzystanie z tych narzędzi wymaga pewnej nauki, zwłaszcza jeśli ktoś dopiero zaczyna swoją przygodę z tworzeniem aplikacji webowych.

    Nadmierna złożoność: W niektórych przypadkach konfiguracja Webpacka może być zbyt skomplikowana, zwłaszcza dla mniejszych projektów, co może prowadzić do nadmiernego obciążenia dla programistów.

    Jak zainstalować Bootstrap i WebPack oraz webdev zależności

    🐙Moja konfiguracja jest przykładowa i wyjściowo do powtarzalnych celów. Jest też dostępna na GitHub Scripterix, pod nazwą officialBootWepack

    Poniżej kolejne komendy cli

    npm init -y
    
    npm i -save-dev webpack webpack-cli webpack-dev-server html-webpack-plugin
    
    npm i --save bootstrap @popperjs/core
    
    npm i --save-dev autoprefixer css-loader postcss-loader sass sass-loader style-loader
    
    mkdir {src,src/js,src/scss}
    
    touch src/index.html src/js/main.js src/scss/styles.scss webpack.config.js
    

    Poniższe polecenia skryptów do uruchomienia webpack i odświeżnia

    npm start - wystartowanie servera
    
    npm run watch - odświeżanie
    

    Następnie trzeba uzupełnić pliki index.html webpack.config.js i dodać skrypty startujące i obserwujące do package.json

    🐙Najlepiej użyj git clone z repozytorium Scripterix/officialBootWebpack aby nie zaszła pomyłka. Nie zapomnij dodać gwiazdek do oceny repo.

    Poniżej plik index.html

    <!doctype html>
    <html lang="en">
    
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Bootstrap w/ Webpack</title>
    </head>
    
    <body>
      <div class="container py-4 px-3 mx-auto">
        <h1 class="display-5">Hello, Bootstrap and Webpack ! !</h1>
        <p class="lead">Włącz watch mode <kbd>npm run watch</kbd></p>
        <button class="btn btn-primary mt-2" id="btn">Primary button !</button>
        <p class="fs-2 mt-4 hidden" id="textContent">Toggle / DisToggle</p>
      </div>
    
      <script>
        const textContent = document.getElementById('textContent');
        const btn = document.getElementById('btn');
    
    
        btn.addEventListener('click', () => {
          textContent.classList.toggle('hidden');
          console.log("Webpack works...");
        });
      </script>
    
      <script src="./main.js"></script>
    </body>
    
    </html>
    

    Poniżej plik configaracji WebPack

    const path = require('path');
    const autoprefixer = require('autoprefixer');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const WebpackDevServer = require('webpack-dev-server');
    const webpack = require('webpack');
    
    module.exports = {
      mode: 'development',
      entry: './src/js/main.js',
      output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist'),
      },
      devServer: {
        static: path.resolve(__dirname, 'dist'),
        port: 8080,
        hot: true,
      },
      plugins: [
        new HtmlWebpackPlugin({ template: './src/index.html' }),
      ],
      module: {
        rules: [
          {
            test: /\.(scss)$/,
            use: [
              {
                // Adds CSS to the DOM by injecting a `<style>` tag
                loader: 'style-loader',
              },
              {
                // Interprets `@import` and `url()` like `import/require()` and will resolve them
                loader: 'css-loader',
              },
              {
                // Loader for webpack to process CSS with PostCSS
                loader: 'postcss-loader',
                options: {
                  postcssOptions: {
                    plugins: () => [autoprefixer],
                  },
                },
              },
              {
                // Loads a SASS/SCSS file and compiles it to CSS
                loader: 'sass-loader',
              },
            ],
          },
        ],
      },
    };
    

    Poniżej Plik package.json z poleceniami skryptów

    {
      "name": "officialbootwebpack",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "webpack serve",
        "build": "webpack --mode production",
        "watch": "webpack --watch --mode development"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "autoprefixer": "^10.4.14",
        "css-loader": "^6.7.3",
        "html-webpack-plugin": "^5.5.0",
        "postcss-loader": "^7.1.0",
        "sass": "^1.60.0",
        "sass-loader": "^13.2.1",
        "style-loader": "^3.3.2",
        "webpack": "^5.76.3",
        "webpack-cli": "^5.0.1",
        "webpack-dev-server": "^4.13.1"
      },
      "dependencies": {
        "@popperjs/core": "^2.11.7",
        "bootstrap": "^5.2.3"
      }
    }
    
    

    W artykule omówiono zaawansowaną konfigurację Bootstrapa z wykorzystaniem WebPacka, skupiając się na instalacji i integracji Bootstrapa w projekcie za pomocą skompilowanej wersji bundle. Bootstrap to popularny framework CSS, który dostarcza zestaw gotowych komponentów i stylów, ułatwiając tworzenie responsywnych i estetycznych interfejsów użytkownika. Dzięki integracji z WebPackiem, proces ten staje się bardziej efektywny i zorganizowany.

    Zapraszamy do dyskusji!

    Czy korzystaliście już z Bootstrapa w swoich projektach? Jakie macie doświadczenia z integracją Bootstrapa i WebPacka? Podzielcie się swoimi spostrzeżeniami, pomysłami lub pytaniami w komentarzach poniżej. Wasze opinie są dla nas niezwykle cenne i mogą pomóc innym czytelnikom w lepszym zrozumieniu tematu.

  • Post #6 Hugo generator

    Post #6 Hugo generator

    Hugo Theme PaperMod Strona OpenGateWeb była oparta o generator Hugo i język GO. Jednak po aktualizacji w grudniu 2024 Blog się rozjechał – niezgodności szablonów wersji Hugo i kilka innych fatal errors zmusiło mnie do powrotu do WP.

    Dodawanie metryki z godzinami

    Dodałem tabelę na stronie Wyzwanie 10k i będzie na początku wystarczająca aby dodawać LogBook z przepracowanymi godzinami w Challange.

    Tabela będzie zawierała link do Post z numerem np #6. Nie zawsze będę tworzył post gdyż całe 2h przeznaczę na zadanie. Może być kilka zadań opisanych w jednym pośćie.

    Wysyłanie cv w odpowiedzi na JobOffers

    Dodatkowo pomyślałem że mogę wysyłać odpowiedz na Juniorskie oferty pracy Front-End oraz inne pokrewne ale związane z IT vacanty. Przy okazji robię rozeznanie co się dzieje na rynku IT. Znów jest dużo ofert Junior.

    Dodawanie obrazów do Theme i kwestie renderowania.

    Jest więcej wiedzy na temat dodawania do Hugo obrazów. Można statycznie przez szablony oraz można użyć techniki bundle. Temat do rozwinięcia poniżej kilka przydatnych zasobów.

    Paper Mod – Cover IMG How To

    https://github.com/adityatelange/hugo-PaperMod/wiki/Features#post-cover-image

    Post Cover Image
    
    In post's page-variables add :
    
    cover:
    
      image: "<image path/url>"
    
      # can also paste direct link from external site
    
      # ex. https://i.ibb.co/K0HVPBd/paper-mod-profilemode.png
    
      alt: "<alt text>"
    
      caption: "<text>"
    
      relative: false # To use relative path for cover image, used in hugo Page-bundles
    
    When you include images in the Page Bundle, multiple sizes of the image will automatically be provided using the HTML5 srcset field.
    
    To reduce generation time and size of the site, you can disable this feature using
    
    params:
    
      cover:
    
        responsiveImages: false
    
    To enable hyperlinks to the full image size on post pages, use
    
    params:
    
      cover:
    
        linkFullImages: true
    

    Hugo Image proccessing(https://gohugo.io/content-management/image-processing/)

    Hugo Render hooks https://gohugo.io/render-hooks/

    Zasoby PaperMod

    PaperMod to wszechstronny szablon dla Hugo, który oferuje wiele zasobów i opcji konfiguracyjnych, umożliwiając dostosowanie wyglądu i funkcjonalności strony do własnych potrzeb. Oto niektóre z zasobów i opcji konfiguracyjnych dostępnych w PaperMod:

    Motywy kolorystyczne: Możliwość wyboru różnych motywów kolorystycznych, aby dopasować wygląd strony do preferencji użytkownika.

    Układ strony Konfigurowalne układy strony, takie jak układ z jedną kolumną, dwoma kolumnami, itp.

    Nagłówki i stopki Opcje dostosowywania nagłówków i stopek, w tym dodawanie własnych logo, linków do mediów społecznościowych i innych elementów.

    Menu nawigacyjne Możliwość tworzenia i dostosowywania menu nawigacyjnych, aby ułatwić użytkownikom poruszanie się po stronie.

    Widżety Dodawanie różnych widżetów, takich jak listy najnowszych postów, kategorie, tagi, itp.

    Obsługa obrazów Zaawansowane opcje przetwarzania obrazów, w tym responsywne obrazy, linki do pełnych rozmiarów obrazów, itp.

    Render hooks Możliwość dostosowywania sposobu renderowania różnych elementów strony za pomocą render hooks.

    SEO i analityka Wbudowane wsparcie dla SEO i integracji z narzędziami analitycznymi, takimi jak Google Analytics.

    Dzięki tym zasobom i opcjom konfiguracyjnym, PaperMod pozwala na praktycznie dowolne dostosowanie szablonu do indywidualnych potrzeb i preferencji użytkownika. Oto link do strony GitHub AdityLang Git Hugo PaperMode https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode twórcy szablonu.

    Dodawanie obrazów zostało zaimplementowane.

    Robi się to przez:

    – dodaj obraz do static/img a następnie code.

    – w moim przypadku static/img

    – trzeba pamiętać o finalnej ścieźce do obrazka

    ![Kodowanie](/img/code.jpg)
    

    Więcej o tej modyfikacji a także jak dodałem title do a href jest w post #40 40 Jak dodać title w a href Hugo.

    40 Jak dodać title w a href Hugo(/posts/40-title-a-href/”)

    Dodatkowe flagi do CLI Hugo

    Hugo version

    hugo version
    

    Moja v Hugo go v0.123.0-DEV-1891d5e6b5575e3abb7e0f80c3fbce1670f9bd5e windows/amd64 BuildDate=2024-02-01T07:18:11Z

    Usuwanie public

    Przed budowaniem witryny w trybie produkcyjnym, upewnij się, że katalog public jest czysty. Możesz to zrobić, usuwając zawartość katalogu public przed każdym budowaniem:

    rm -rf public/*
    

    Dodatkowe błędy w konsoli

    Uruchom polecenie budowania z dodatkowymi opcjami debugowania, aby uzyskać więcej informacji na temat błędów:

    hugo --logLevel info --logLevel debug