dabars – J L https://jlat.in Wed, 05 Nov 2025 20:06:28 +0000 en-US hourly 1 https://wordpress.org/?v=7.0 https://jlat.in/wp-content/uploads/2022/06/cropped-pngwing.com_-32x32.png dabars – J L https://jlat.in 32 32 Stručni pojmovi za ComfyUI, Stable Diffusion https://jlat.in/strucni-pojmovi-za-comfyui-stable-diffusion/ Wed, 05 Nov 2025 19:20:15 +0000 https://jlat.in/?p=1233 🧱 ComfyUI

➡ Program u kojem se slažu svi koraci za izradu slike umjetnom inteligencijom.
📌 Radi kao ploča s blokovima (čvorovima) koje povezuješ jedan za drugim.
💡 Omogućuje da točno vidiš i kontroliraš kako nastaje svaka slika – od modela do konačnog rezultata.
🔗 ComfyUI GitHub


🔘 Čvorovi (Nodes)

➡ Mali blokovi unutar ComfyUI-a koji svaki rade jedan zadatak.
📌 Jedan učitava model, drugi dodaje lik, treći stvara konačnu sliku.
💡 Povezuješ ih kao “cijev” kroz koju prolazi proces crtanja slike.
🔗 ComfyUI Node Reference (Wiki)


🎨 Stable Diffusion

➡ Program koji “crta” slike pomoću umjetne inteligencije.
📌 Ti napišeš opis (prompt), a on napravi sliku po tom opisu.
💡 Radi tako da iz “šuma” (kao magle) polako stvori prepoznatljivu sliku.
🔗 Stable Diffusion na Hugging Faceu


💾 Checkpoint (Model)

➡ Datoteka koja sadrži “znanje” umjetne inteligencije – kako izgleda svijet, ljudi, predmeti itd.
📌 Učitaš je u ComfyUI da bi imao osnovu za crtanje.
💡 Bez modela AI ne zna ništa – to je kao umjetnik bez iskustva.


🎨 VAE (Model za boje i svjetlo)

➡ Dodatni dio koji popravlja boje, kontrast i svjetlo na slici.
📌 Čini da slike izgledaju realnije i prirodnije.
💡 Bez njega slike mogu izgledati “isprano” ili umjetno.
🔗 Preporučeni VAE model (vae-ft-mse-840000-ema-pruned)


🧠 LoRA (Mali dodatak koji uči lika)

➡ Poseban “mini model” koji nauči izgled određene osobe ili stila.
📌 Na primjer, nauči kako izgleda tvoj lik i može ga kasnije ponavljati u različitim pozama i odjeći.
💡 Zahvaljujući LoRA-i, AI zna “tko je tko” na svakoj slici.
🔗 LoRA


🧩 Token

➡ Izmišljena riječ kojom označavaš svog lika.
📌 Npr. “xyzgirl” znači baš ta osoba koju si trenirao.
💡 Kad napišeš taj token u opisu, AI zna da treba nacrtati tu istu osobu.


✏ Prompt

➡ Tekst koji opisuje što želiš na slici.
📌 Npr. “portrait of xyzgirl on the beach at sunset, ultra realistic”.
💡 AI čita taj opis i prema njemu stvara novu sliku.
🔗 Prompt vodič – Lexica.art


🚫 Negative prompt

➡ Tekst koji kaže što ne želiš na slici.
📌 Npr. “blurry, extra fingers, bad anatomy, low quality”.
💡 Time AI izbjegava greške i neželjene detalje.


🧮 Seed

➡ Broj koji određuje “nasumičnost” slike.
📌 Ako koristiš isti broj i isti opis, dobit ćeš istu sliku.
💡 Pomaže ako želiš ponoviti identičan rezultat ili napraviti male promjene.


🧍‍♀️ ControlNet

➡ Alat koji kontrolira pozu, raspored ili oblik tijela na slici.
📌 Na primjer, možeš učitati pozu osobe s druge slike i AI će je ponoviti.
💡 Koristi se za precizno upravljanje izgledom i pokretom lika.
🔗 ControlNet GitHub


🦴 OpenPose

➡ Dio ControlNeta koji prepoznaje “kostur” poze osobe (ruke, noge, glava).
📌 AI zatim koristi tu pozu kad crta novu sliku.
💡 Pomaže da tijelo bude u istom položaju, ali s tvojim likom.
🔗 OpenPose model za ControlNet


🖼 Img2Img

➡ Funkcija koja uzme postojeću sliku i napravi novu verziju prema njoj.
📌 Zadrži osnovni izgled, ali promijeni detalje poput pozadine, odjeće ili svjetla.
💡 Korisno kad želiš doraditi sliku bez gubitka lika.
🔗 Img2Img primjer na Stable Diffusionu


🔄 Denoise

➡ Postavka koja govori koliko AI smije promijeniti izvornu sliku kod Img2Img-a.
📌 Mali broj (0.2–0.3) znači da će slika ostati slična, veći broj da će se više promijeniti.
💡 Koristi se za fino podešavanje koliko želiš da AI “mašta”.
🔗 Denoising Strength objašnjenje


⚠ Overfitting

➡ Kad AI previše “zapamti” trening slike i stalno crta isto lice ili pozu.
📌 Slike postanu previše slične, bez raznolikosti.
💡 Rješava se dodavanjem više različitih slika u trening.


🎞 Frame-by-frame video

➡ Način da se više slika spoji u pokretni video.
📌 Svaka sličica (frame) se napravi posebno, pa se sve spoje kao crtić.
💡 Tako možeš stvoriti kratki video u kojem AI lik ostaje isti, ali se miče.

]]>
Vodič za treniranje ultra-realističnog AI influencera uz ComfyUI i LoRA na AMD GPU-a s 12 GB VRAM https://jlat.in/vodic-za-treniranje-ultra-realisticnog-ai-influencera-uz-comfyui-i-lora-na-amd-gpu-a-s-12-gb-vram/ Tue, 04 Nov 2025 17:15:11 +0000 https://jlat.in/?p=1225

Uvod: Ovaj vodič objašnjava korak-po-korak kako istrenirati konzistentan, ultra-realističan lik AI influencera – uključujući lice i tijelo – koristeći Stable Diffusion modele (npr. SD 1.5 ili SDXL) uz tehniku LoRA (Low-Rank Adaptation) i sučelje ComfyUI. Poseban fokus je na korištenju AMD GPU-a s 12 GB VRAM-a, uz savjete za kasniju primjenu modela i na video sadržaj. Slijede poglavlja koja pokrivaju sve od instalacije potrebnih modela, preko pripreme skupa podataka, treninga LoRA modela na AMD hardveru, do generiranja konzistentnih slika i napomena za video. Ovdje možete vidjeti objašnjenje pojmova

1. Instalacija modela i potrebnih datoteka

Za uspješan rad potrebno je instalirati nekoliko modela i alata, kao i prilagoditi ComfyUI za AMD GPU. Preporučujemo sljedeće korake i datoteke:

Stable Diffusion bazni model: Preuzmite Stable Diffusion model na kojem ćete graditi svog influencera. Najčešći izbor je Stable Diffusion v1.5 (512×512 rezolucija) zbog manjih zahtjeva za resursima i brzog treninga. Alternativno, možete koristiti Stable Diffusion XL (SDXL) za potencijalno višu kvalitetu, ali imajte na umu da SDXL zahtijeva znatno više VRAM-a i vremena za treniranje. Korisnici su prijavili da na 12 GB kartici trening LoRA za SD1.5 može trajati oko sat vremena, dok je za SDXL (1024×1024) potreban daleko dulji trening (20+ sati) i rezultat može i dalje biti slabije konzistentnosti lica. Stoga, ako vam je primarni cilj konzistentan lik uz 12 GB VRAM-a, SD1.5 je praktičniji izbor. (Kasnije možete pokušati SDXL kada budete imali optimizirano okruženje i ako vam treba dodatna kvaliteta.)

LoRA “base” integracija: LoRA nije zaseban model već skup težina koji se primjenjuje na bazni Stable Diffusion model. Za treniranje LoRA potreban vam je bazni model na koji će se LoRA naučiti. To znači da bazni SD model (npr. SD1.5) morate imati i tijekom treniranja i kasnije tijekom generiranja slika. Preuzmite Stable Diffusion 1.5 model (npr. v1-5-pruned.safetensors ili .ckpt s Hugging Face ili drugog pouzdanog izvora) i smjestite ga u ComfyUI mapu models/checkpoints. Ako radite sa SDXL, preuzmite SDXL base model (i opcionalno refiner model za kasniju finu obradu) – imajte na umu da LoRA trenirana za SDXL neće biti kompatibilna sa SD1.5 i obratno, pa odaberite jedan smjer.

VAE datoteka: Za fotorealistične rezultate preporučuje se korištenje odgovarajućeg VAE (Variational Autoencoder) modela uz Stable Diffusion. VAE poboljšava kvalitetu boja i detalja. Za SD1.5 široko je preporučen “vae-ft-mse-840000-ema-pruned”. Preuzmite tu datoteku (.safetensors ili .ckpt) i stavite je u ComfyUI/models/vae/ direktorij. U ComfyUI možete koristiti Load VAE čvor da je učitate pri generiranju. (Napomena: SDXL modeli već imaju interni VAE, ali možete koristiti poboljšane verzije ako su dostupne.)

ComfyUI instalacija (AMD podrška): ComfyUI je čvorno-bazirano korisničko sučelje za Stable Diffusion. Instalacija na NVIDIA GPU je jednostavna, ali za AMD GPU treba primijeniti nekoliko dodatnih koraka:

  • PyTorch s ROCm: Obavezno instalirajte PyTorch verziju s podrškom za AMD ROCm (za Linux) ili odgovarajući paket za Windows. Na Linuxu to znači instalirati ROCm drivere i PyTorch (npr. pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/rocm5.x za odgovarajuću ROCm verziju). Na Windowsu ROCm ne radi direktno; alternativno rješenje je korištenje WSL2 (Ubuntu) s ROCm unutra. (Napomena: postoji i DirectML port Stable Diffusiona za Windows/AMD, ali u kontekstu ComfyUI bolje je ići putem ROCm-a.)
  • Instalacija ComfyUI: git clone https://github.com/comfyanonymous/ComfyUI.git && cd ComfyUI pip install -r requirements.txt Uvjerite se da ste prethodno instalirali odgovarajući AMD PyTorch i potrebne biblioteke (ComfyUI requirements uključuju torch – ako ste već instalirali ROCm varijantu, pip bi je trebao preskočiti; preporučuje se virtualno okruženje s preinstaliranim torch-rocm paketom).
  • Pokretanje na AMD: Pokrenite ComfyUI sa zastavicom za PyTorch cross-attention: python main.py --use-pytorch-cross-attention Ova opcija koristi implementaciju cross-attention iz PyTorcha umjesto NVIDIA xformers, što je nužno za AMD. (Xformers optimizacija nije podržana na AMD-u, stoga ovu opciju obavezno koristite kako bi se model uopće izvršavao.)
  • Optimizacije performansi: Instalirajte biblioteku Triton (pip install triton) radi mogućih ubrzanja na AMD-u. Zatim ComfyUI možete pokrenuti uz dodatnu ROCm AOT flagu: TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 python main.py --use-pytorch-cross-attention Ova eksperimentalna opcija može ubrzati generiranje korištenjem AOT kompilacije, ali ako dobijete greške – pokrenite bez nje.
  • Provjera instalacije: Nakon pokretanja, ComfyUI bi se trebao podići u pregledniku. U ComfyUI sučelju vidjet ćete Load Checkpoint čvor. Provjerite mogu li se vaš prebačeni SD model i VAE učitati (putem čvorova Load Checkpoint i Load VAE i odabirom odgovarajućih datoteka).
  • Dodatni dodaci: Preuzmite i ubacite sve dodatne modele koje ćete koristiti u odgovarajuće mape unutar ComfyUI/models/ (npr. LoRA datoteke idu u models/loras/ ili ih možete staviti gdje želite i otvoriti putem Load LoRA čvora; ControlNet modeli idu u models/controlnet/, itd. – o tome više u nastavku za poze).

Alati za treniranje LoRA na AMD: ComfyUI sam po sebi služi za generiranje slika; za samo treniranje modela (bilo DreamBooth ili LoRA) trebat će vam poseban trening pipeline. Najpopularniji su:

  • Kohya SS sd-scripts – skripte i GUI za treniranje LoRA/DreamBooth koji se mogu pokrenuti lokalno. U velikoj mjeri podržavaju trening na AMD GPU uz odgovarajuće okruženje. Postoji i Kohya GUI (Gradio aplikacija) koji olakšava postavke. Za AMD preporučuje se Linux okruženje s ROCm-om; možete klonirati kohya-ss sd-scripts repo i pratiti upute za instalaciju AMD verzije (potrebno je instalirati ROCm PyTorch, isključiti xformers i eventualno koristiti prilagođenu verziju bitsandbytes za AMD ako želite 8-bitnu optimizaciju). U ovom vodiču nastavit ćemo s pretpostavkom da koristite kohya-ss skripte na Linuxu.
  • DreamBooth diffusers (Hugging Face) – ako radije želite Python notebook rješenje, postoji DreamBooth implementacija u 🧨 Diffusers biblioteci (npr. putem Colaba ili lokalno). To može raditi i na AMD GPU ako je PyTorch ispravno instaliran. Prednost je što izravno podržava trening na primjerima s instance i class slikama. Nedostatak je što fine-tjuna cijeli model (što traži više VRAM-a); no možete postaviti i LoRA trening unutar diffusers-a (postoji podrška za peft LoRA fine-tuning).

Alternative: Postoje i grafički alati poput Automatic1111 web UI DreamBooth/LoRA ekstenzije, ali oni uglavnom rade samo na NVIDIA. Za AMD najjednostavnije je: Linux+Kohya ili WSL2+Kohya.

Savjet: Ako vam postavljanje okruženja za trening na AMD-u nije ugodno, možete razmotriti cloud s NVIDIA GPU za treniranje, pa preuzeti gotov LoRA model za lokalno generiranje. Ipak, ovdje ćemo opisati i kako lokalno na AMD-u postići rezultat.

2. Priprema skupa podataka (dataset) za influencera

Kvalitetan dataset presudan je za treniranje konzistentnog lika. Potrebno je prikupiti slike koje dobro predstavljaju željeni lik influencera – uključujući lice i tijelo – u raznim situacijama. Preporuke:

Broj slika: Preporučljivo je prikupiti najmanje ~10–20 fotografija subjekta, iako 20–30 daje bolje rezultate. Izvorni DreamBooth rad spominjao je 3–5 slika kao minimum, ali praksa pokazuje da je 20+ raznolikih slika optimalno za stabilnije rezultate. Veći broj pomaže modelu da “nauči” koncept bez pretjeranog memoriranja jedne poze ili outfita – ali samo ako su slike dovoljno raznolike (50 vrlo sličnih slika neće pomoći više od 5 unikatnih).

Raznolikost sadržaja: U dataset uključite razne poze, perspektive, izraze lica, odjeću i okruženja. Npr.:

  • Krupni planovi lica (frontalno, poluprofil, osmijeh, ozbiljan izraz).
  • Polutke i cijele figure u različitim stavovima (stoji, sjedi, razni položaji ruku/nogu).
  • Različita osvjetljenja i pozadine (unutra, vani, dan/noć).
  • Različite odjevne kombinacije, modni dodaci ili frizure (ako želite da lik bude prepoznatljiv bez “vezanja” za jednu odjeću). No zadržite prepoznatljive crte lica i tijela konzistentnima – sve slike moraju biti doista ista osoba/lik.

Obrada slika:

  • Rezolucija: Pre treninga skalirajte/kropajte na ciljnu rezoluciju. Za SD1.5 uobičajeno je trenirati na 512×512 px (ili 512×768 za portrete, 768×512 za pejzažno). Trening na 512 px je izvediv na 12 GB VRAM-a (potrebno ~10 GB VRAM za batch size 1 na 512×512). Možete probati 640 px ili 768 px za više detalja, ali na 12 GB možda neće stati 768×768 ni s batch=1. Alternativa je multi-aspect buckets (kohya skripte to podržavaju). Ako niste sigurni, jednostavnije je kropati sve na isti format (npr. 1:1 kvadrat 512×512 ili 640×640).
  • Kropanje i centriranje subjekta: Osoba mora biti jasno vidljiva i dominantna u kadru. Izbjegavajte slike gdje je lik sitan u daljini.
  • Aspect ratio usklađivanje: Poželjno je ujednačiti omjere ili koristiti buckets.
  • Format i kvaliteta: PNG ili visokokvalitetni JPEG; izbjegnite filtere i tekst.
  • Imenovanje i opisi (captions): Svaka slika treba pratnju kratkog opisa s jedinstvenim tokenom za vašeg influencera (npr. “photo of xyzman person, standing, outdoor, smiling” ili “portrait of xyzman, studio lighting”). Token neka bude izmišljena riječ (5–8 slova) koja ne kolidira s postojećim pojmovima. Time model uči da taj token == vaš lik.

Regularizacijske (negativne) slike: Kod LoRA treninga često nisu nužne, osobito ako imate 10+ raznolikih slika. Pazite na overfitting – više u nastavku.

Sažetak pripreme: Prikupite ~20 kvalitetnih slika, obradite ih (~512 px, fokus na subjekt), osmislite jedinstveni token i pripremite kratke opise. Raznolikost pomaže da model nauči identitet osobe, a ne specifičan outfit ili scenu.

3. Trening LoRA modela na AMD (DreamBooth/LoRA pipeline)

Izbor pristupa – DreamBooth vs. LoRA: DreamBooth fine-tjuna cijeli model (velik, zahtjevniji za VRAM). LoRA trenira male adaptere i sprema ih kao zaseban, malen fajl (nekoliko MB), štedljiv je u VRAM-u i praktičniji za 12 GB. Za našu svrhu preporučuje se LoRA.

Korištenje kohya-ss skripti na AMD:

  • Instalacija okruženja: Klonirajte kohya-ss sd-scripts, napravite Python 3.10 virtualenv, instalirajte PyTorch ROCm, pip install -r requirements.txt, uklonite xformers, po želji pokušajte AMD varijantu bitsandbytes (nije nužno).
  • Priprema podataka: Napravite mapu npr. influencer_dataset i unutar nje podmapu npr. 100_influencer (prefiks broj označava ponavljanje/prioritet). U nju stavite ~20 slika i .txt opise s vašim tokenom. Bolje je imati eksplicitne captions nego oslanjati se na ime mape.
  • Pokretanje treninga (LoRA): Koristite train_network.py ili olakšanu lora_train_popup.py. Primjer: accelerate-launch --num_cpu_threads_per_process 12 lora_train_popup.py U interaktivnim koracima odaberite:
    • SD1.5 checkpoint za treniranje,
    • izlazno ime npr. influencer_lora.safetensors,
    • LoRA dim (rank) 64 ili 128,
    • broj koraka ~1000–2000 za ~20 slika,
    • learning rate ~1e-4 do 5e-5,
    • fp16 trening, bez xformers; optimizer AdamW.
  • Tijek treninga: Pri 512×512, batch 1, očekujte ~10 GB VRAM. Ako ste uključili preview generiranje, pratite slike da uhvatite trenutak prije overfittinga (kad krene “kopirati” točne trenirane poze/odjeću, stanite).
  • Rezultat: dobit ćete influencer_lora.safetensors (par MB).

Ako dobijete OOM (out of memory): smanjite rezoluciju (npr. 512→448), koristite manji LoRA rank, batch=1, ili uključite gradient checkpointing (ako je podržano).

4. Podešavanje promptinga u ComfyUI za konzistentno generiranje lica i tijela

Učitavanje LoRA u ComfyUI: U radnom prostoru dodajte Load LoRA. Povežite:

  • izlaze Load Checkpoint (MODEL i CLIP) u Load LoRA ulaze,
  • u Load LoRA odaberite vaš .safetensors,
  • podesite strength_model i strength_clip (krenite s 1.0).

Zatim izlaze Load LoRA (MODEL i CLIP) spojite tamo gdje su prethodno išli originalni MODEL/CLIP (npr. prema KSampler).

Promptanje za konzistentan lik:

  • U pozitivnom promptu uvijek koristite vaš token (npr. “portrait photo of xyzman, full body, city street, ultra-realistic, DSLR”).
  • U negativnom promptu navedite artefakte koje želite izbjeći (“blurry, out of focus, deformed hands, extra limbs, low quality, cartoon”…).
  • Za promjene frizure/odjeće dodajte opise, ali ne koristite formulacije koje bi mogle prizvati potpuno drugo lice.
  • Po potrebi koristite Img2Img (ubacite referentnu sliku, mali denoise 0.2–0.3) za maksimalnu sličnost identiteta.
  • Za poze koristite ControlNet:
    • učitajte OpenPose model (npr. control_v11p_sd15_openpose_fp16.safetensors),
    • učitajte sliku kostura poze kao conditioning image,
    • u Apply ControlNet podesite snagu (npr. 1.0 za strogo praćenje).

Dodatni savjeti:

  • Držite isti token, isti LoRA i sličan stil opisa za serije slika.
  • Za ujednačenost atmosfere možete fiksirati seed.

5. Testiranje konzistentnosti i iterativno poboljšanje

  • Varijacije: Generirajte više slika s različitim seedovima. Ako lice “bježi”, povećajte LoRA snagu (npr. 1.1–1.2) ili preciznije opišite ključne atribute (boja kose, očiju).
  • Različiti konteksti: Testirajte u različitim okruženjima/odjeći. Ako se identitet gubi, izbjegnite pojmove koji prizivaju druge poznate koncepte i budite specifičniji (“xyzman wearing basketball jersey, on a court”).
  • Usporedba s izvornim slikama: Tražite sličnost subjekta, ne identičnost (izbjegnite overfitting).
  • Ako tijelo varira: Dodajte više cijelih figura u dataset; u promptu eksplicitno opišite građu/visinu ako je relevantno.
  • Ako je overfitting: smanjite LoRA snagu (npr. 0.8) ili povećajte raznolikost odjeće/pozadina u datasetu.
  • Isprobajte različite checkpointove: Ponekad LoRA naučena na 1.5 radi bolje na fotorealističnim mješavinama (majicMix, Realistic Vision), ponekad ne – testirajte.

6. Dodatne napomene za primjenu na video (frame-by-frame)

Generiranje videa s vašim AI influencerom je sljedeći korak, ali znatno kompleksniji:

  • Frame-by-frame: Planirajte pokret kroz niz poza (npr. 50 sličica). Uz ControlNet OpenPose za svaku sličicu unesite kostur poze, zadržite isti prompt/LoRA/token – spojite slike u video (FFmpeg ili editor).
  • Smanjenje treperenja (flicker):
    • Sekvencijalni Img2Img: svaki sljedeći kadar generirajte iz prethodnog s malim denoiseom (0.2–0.3) + ažurirani pose → velika temporalna koherentnost.
    • Seed kontrola: koristite isti seed ili glatku interpolaciju seedova.
    • Fiksna pozadina/odjeća: eksplicitno ih zadržite u promptu kroz sve kadrove.
  • Alati: koncept Deforum-a se može primijeniti ručno u ComfyUI; Stable Video Diffusion/AnimateDiff postoje, ali nisu trenirani na vašem specifičnom liku – za konzistentan identitet bolji je kontrolirani frame-by-frame pristup.
  • EbSynth/TemporalKit: alternativa je generirati ključne kadrove i “propagirati” stil kroz video.
  • Praksa: krenite s kratkim sekvencama (npr. 10 frameova, 2 fps) i podešavajte dok ne dobijete zadovoljavajuću koherentnost.
]]>
3dModeli https://jlat.in/3dmodeli/ Mon, 27 Oct 2025 20:54:03 +0000 https://jlat.in/?p=1220

]]>
Protected: logo https://jlat.in/logo/ Fri, 24 Oct 2025 16:37:20 +0000 https://jlat.in/?p=1199

This content is password-protected. To view it, please enter the password below.

]]>
Ubuntu default dock panel settings https://jlat.in/ubuntu-default-dock-panel-settings/ Thu, 05 Oct 2023 18:13:07 +0000 https://jlat.in/?p=1150 Customize a default dock panel to look like this:

$ gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false
$ gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM
$ gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode FIXED
$ gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 44
$ gsettings set org.gnome.shell.extensions.dash-to-dock unity-backlit-items true
]]>
Node.js/express spremanje u postgresql bazu iz html forme https://jlat.in/node-js-express-spremanje-u-postgresql-bazu-iz-html-forme/ Fri, 27 Jan 2023 17:28:33 +0000 https://jlat.in/?p=1128 Inicijalizacija node.js projekta

npm init

Instaliranje express frameworka :

npm i express

Instaliranje nodemon paketa za automatsko restartanje servera.
Stavljamo -D sto znaci development i ide u devDependencies.

npm i -D nodemon

Startni json config:

{
  "name": "express",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index",
    "dev": "nodemon index"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2",
    "moment": "^2.29.4"
  },
  "devDependencies": {
    "nodemon": "^2.0.20"
  }
}

Za startanje nodemon da se restarta server nakon svakog spremanja fajle servera pišemo komandu:

npm run dev

]]>
Remote Desktop on Kali Linux https://jlat.in/remote-desktop-on-kali-linux/ Sun, 08 Jan 2023 18:11:24 +0000 https://jlat.in/?p=1116 sudo apt update

udo apt install xrdp

After XRDP is installed you can start the services with the following command:

sudo service xrdp start

sudo service xrdp-sesman start

sudo update-rc.d xrdp enable

sudo service xrdp status

alias up=’sudo apt-get update&&sudo apt-get upgrade -y’
alias off=’poweroff’
alias re=’reboot’

]]>
Upravljanje PostgreSQL preko command linije https://jlat.in/upravljanje-postgresql-preko-command-linije/ Fri, 02 Dec 2022 10:02:22 +0000 https://jlat.in/?p=1053 Za upravljanje bazom podataka moramo se prvo spoiti na root usera da s njim mozemo dodavati usere i mjenjati privilegije drugim userima.

Pormjena šifre root usera:

sudo -u postgres psql postgres

Za listu svih usera pišemo:

Za kreiranje novog usera pišemo

CREATE USER user2 WITH PASSWORD '1q2w3e4r' SUPERUSER CREATEDB;

Za promjenu privilegija usera pisemo:

ALTER ROLE user1 WITH SUPERUSER;

Nakon toga vidimo da smo useru user1 dodali privilegiju superuser

Nakon kreiranja usera i dodavanja potrebnih privilegija mozemo se konektirati preko toga usera.

Spajanje lokalno na bazu pisemo komandu:

psql -U user1  postgres -h localhost

Spajanje na bazu sa drugoga hosta:

psql -U user1 postgres -h localhost -p 10001

Za help pišemo komandu:

\?

Za izlaz iz help moda pisemo q

Za izlistaj svih baza podataka pišemo:

\l

Trenutno smo spojeni na bazu podataka postgres ako želimo promjeniti bazu pišemo:

\c test

\c znaci connect a test je ime baze na koju se želimo spoiti

Kreiranje nove baze podataka pišemo:

CREATE DATABASE test2;

Možemo komandu pisati i malim slovima ali ovako znamo da pišemo sql komandu

Za brisanje baze podataka pišemo

DROP DATABASE test2;

Vidmo da je baza test2 izbrisana. Ovo je vrlo opasna komanda može izbrisati neku bazu koju ne želimo izbrisati treba biti vrlo oprezan.

Kreiranje tablice

Neki od data tipova:
Za sve data tipove klikni na link

NameAliasesDescription
bigintint8signed eight-byte integer
bigserialserial8autoincrementing eight-byte integer
booleanboollogical Boolean (true/false)
character [ (n) ]char [ (n) ]fixed-length character string
character varying [ (n) ]varchar [ (n) ]variable-length character string
date calendar date (year, month, day)
integerint, int4signed four-byte integer
json textual JSON data
money currency amount
numeric [ (p, s) ]decimal [ (p, s) ]exact numeric of selectable precision
path geometric path on a plane
text variable-length character string
time [ (p) ] [ without time zone ] time of day (no time zone)
time [ (p) ] with time zonetimetztime of day, including time zone
timestamp [ (p) ] [ without time zone ] date and time (no time zone)
timestamp [ (p) ] with time zonetimestamptzdate and time, including time zone
tsquery text search query
xml XML data

Kreiranje tablice (table) i kolone (column) u bazi pisemo komandu CREATE TABLE imeTablice (
otvaramo zagradu i stisnemo enter da idemo u novi red

test2=# CREATE TABLE person (
test2(# id INT,
test2(# first_name VARCHAR(50),
test2(# last_name VARCHAR(50),
test2(# gender VARCHAR(7),
test2(# date_of_birth DATE );

Za prikaz svih tablica u bazi:

\d

Za prikaz određene tablice pišemo:

\d person

Brisanje tablice:

DROP TABLE person;

Kreiranje tablice sa ograničenjima:

test2=# CREATE TABLE person (
test2(# id BIGSERIAL NOT NULL PRIMARY KEY,
test2(# first_name VARCHAR(50) NOT NULL,
test2(# last_name VARCHAR(50) NOT NULL,
test2(# gander VARCHAR(7) NOT NULL,
test2(# date_of_birth DATE NOT NULL,
test2(# email VARCHAR(150) );

Sada vidimo da je prikazana i sequence jer smo dodali BIGSERIAL a on je auto increment primary key sto znaci da se automatski povećava svakim dodanim novim redom.

Ako želimo viditi samo tablice pišemo:

\dt

Sada naša tablica izgleda drukčije

Preimenovanje columna u tablici

Ako smo krivo upisali neki column u tablici mozemo ga preimenovati sa sql naredbom:

Prvo upišemo:

ALTER TABLE person

Zatim

RENAME gander TO gender;

Umetanje zapisa u bazu

U prvom redu upisemo prvi dio queriya zatim stisnemo enter pa nas prebaci u novi red i pišemo dalje

INSERT INTO person (first_name, last_name, gander, date_of_birth, email)

u drugi red pišemo:

VALUES ('Anne', 'Smith', 'FAMALE', date '1988-01-15', 'email@email.com');

Pregled upisanih zapisa

Za pregled upisanih zapisa pisemo query:

SELECT * FROM person;

Umetanje random zapisa sa stranice https://www.mockaroo.com/ u kojoj cemo generirati 100 zapisa

Nakon generiranja komandom \i i putanjom do sql fajle se zapisi upisuju

\i /root/backend/person.sql

Sada nakon sql komande SELECT * FROM person; vidimo zapise

U vrh dokumenta dodamo id BIGSERIAL NOT NULL PRIMARY KEY, da nam podaci imaju auto increment primary key

create table person (
  id BIGSERIAL NOT NULL PRIMARY KEY,
	first_name VARCHAR(50) NOT NULL,
	last_name VARCHAR(50) NOT NULL,
	email VARCHAR(50),
	gender VARCHAR(9) NOT NULL,
	date_of_birth DATE NOT NULL,
	country_of_birth VARCHAR(50)
);
insert into person (first_name, last_name, email, gender, date_of_birth, country_of_birth) values ('Rodrigo', 'Cullinan', 'rcullinan0@wix.com', 'Male', '2022-04-04', 'Thailand');
insert into person (first_name, last_name, email, gender, date_of_birth, country_of_birth) values ('Clark', 'Taylot', 'ctaylot1@networksolutions.com', 'Male', '2022-07-20', 'Zambia');
insert into person (first_name, last_name, email, gender, date_of_birth, country_of_birth) values ('Annamaria', 'Keech', 'akeech2@wsj.com', 'Female', '2022-06-29', 'Russia');
insert into person (first_name, last_name, email, gender, date_of_birth, country_of_birth) values ('Hazel', 'Kuhle', 'hkuhle3@gravatar.com', 'Male', '2022-10-07', 'Russia');

]]>
pgAdmin 4 PostgreSQL gui https://jlat.in/pgadmin-4-postgresql-gui/ Thu, 01 Dec 2022 12:07:58 +0000 https://jlat.in/?p=1029 Schemas -> Tables -> Create -> Table Zatim idemo na rows na + (Add row) dodamo novi rowZa ovaj primjer ćemo dodati 3 row-aid ce imati Data type bigint što znači veliki broj dodati ćemo mu i parametre Not NULL što znaci […]]]> Kreiranje nove tablice u bazi podataka.
Kliknemo na bazu u ovom slučaju test -> Schemas -> Tables -> Create -> Table

Zatim idemo na rows na + (Add row) dodamo novi row
Za ovaj primjer ćemo dodati 3 row-a
id ce imati Data type bigint što znači veliki broj dodati ćemo mu i parametre Not NULL što znaci da mora biti popunjeno ne može biti prazno, Primary key znaći da mu se nakon svakog zapisa dodaje key broj automatski.
name ce imati Data type character varying sto znacu razni znakovi isto tako i email.

SQL komanda za ovaj unos:

CREATE TABLE public.customers
(
    id bigint NOT NULL,
    name character varying,
    email character varying,
    PRIMARY KEY (id)
);

ALTER TABLE IF EXISTS public.customers
    OWNER to "dbUser";

Kad to spremimo kreira se tablica customers sa kolonama (columns) id, name, email

Za prikazati taklicu databaze kliknemo na Tables -> customers -> View/Edit Data -> All Rows

Prikaže nam se tablica:

Za dodavanje zapisa iz guija
Na + Add row dodamo novi red na zapisu

Kliknemo 2 puta na row koji želimo puniti i pišemo zapis id ostavljamo prazno jer će se on sam popuniti.

Zatim kliknemo na Save Data Changes i zapis se dodao u bazu

Ako želimo viditi SQL query za ove radnje idemo na Query History i tamo vidimo svaki query za sve radnje u pgAdminu

Query za ovu radnju bi bio:

INSERT INTO public.customers (
name, email) VALUES (
'ante'::character varying, 'ante@gmail.com\n'::character varying)
 returning id;

]]>
Node.js Hello World https://jlat.in/node-js-hello-world/ Mon, 28 Nov 2022 10:49:08 +0000 https://jlat.in/?p=1000 provjera verzije node.js

node --version

provjera verzije npm paketa

NPM je najveći svjetski packete manager i instaler za javascript. Da bismo instalirali npm moramo imati instaliran node.js.
Alternative za npm su : Yarn, gulp, turbo, Bower, Jspm, Volo…

npm --version

Inicijalizacija novog projekta koi generira json file

npm init

Tu se spremaju svi paketi koji su potrebni za aplikaciju tako kad se prebacimo na drugi pc samo upišemo npm install i on će povući sve potrebne pakete

Instalacija UUID universally unique identifier

npm install uuid

nodemon je alat koji automatski restarta node kada se otkriju promjene datoteke u direktoriju.

npm install -D nodemon

Hello world

Primjer importanja objekta
U fajli gdje se nalazi objekt iza objekta upišemo module.exports = person; u fajli gje ga zelimo inportati upišemo require('ime_i_path_modula')

Jednostavni HTTP server
U prvoj liniji smo u varijablu stavili objekt koji uključuje HTTP node.js modul.
U trećoj liniji smo u varijablu stavili ip adresu na koju ce server slusati konekcije.
U četvrtoj liniji smo u varijablu stavili port.
U sedmoj liniji smo postavili varijablu u kojoj modul http objekt poziva funkciju createServer koja stvara novi HTTP server.
Kad se primi novi zahtjev (kad mi preko browsera pristupimo serveru) request event se poziva koji pruža 2 objekta, zahtjev (http.IncomingMessage) i odgovor (http.ServerResponse) u funkciji izgledaju ovako:(req, res).
Prvo pruža pojedinosti zahtjeva (req).
Drugi služi za odgovor pozivatelju (res)
U 14 liniji smo postavili server koji sluša konekcije na postavljenom portu i hostu. A callback funkcija nam samo ispisuje u konzoli podatke o hostu i portu.

const http = require('http'); //inportanje http modula

const hostname = '127.0.0.1'; //postavljanje varijable sa ip serverom na koi će slisati
const port = 3000; // postavljanje varijable porta za ip

//funkcija createServer stavara novi HTTP server, svaki put kad neko zeli pristupiti sadrzaju poziva se ova funkcija 
const server = http.createServer((req, res) => {
  res.statusCode = 200; //status code 200 znaci da je uspješan odgovor
  res.setHeader('ContentType', 'text/plain'); // postavljamo header Content-Type
  res.end('Hello Worldddd'); // zatvaramo odgovor i dodajemo sadrzaj u end()
});

// server je najmešten da sluša na navedenom portu i hostu a funkcija samo ispisuje u konzolu podatke
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

]]>