Labas, keliautojau. Atsipūsk, paskaityk, pamąstyk

Mintys ir tekstai apie kalbas, kasdienę filosofiją, programų inžineriją, "pasidaryk pats" techniniai gidai bei gyvenimo Vokietijoje gidai

Automatiškai aktyvuok Python venv terminale

pi; n # ~/.zshrc autoactivate_venv() { if [[ -d ".venv" && -f ".venv/bin/activate" ]]; then source .venv/bin/activate elif [[ -d "venv" && -f "venv/bin/activate" ]]; then source venv/bin/activate elif [[ -n "$VIRTUAL_ENV" ]]; then parentdir="$(dirname "$VIRTUAL_ENV")" if [[ "$PWD" != "$parentdir"* ]]; then deactivate fi fi } autoload -U add-zsh-hook add-zsh-hook chpwd autoactivate_venv autoactivate_venv Labas! Šiame gide išmoksime automatiškai aktyvuoti virtualią Python aplinką vos tik įžengus į direktoriją. Visa tai padaryti labai paprasta pasinaudojus kabliais (angl. hooks), kurie aptinka direktorijos pasikeitimo įvykį, tačiau atrodys ir veiks kiek skirtingai priklausomai nuo to, kokią kriauklę (angl. shell) naudojame savo terminalui. Aš naudoju zsh, todėl pirmiausia apžvelgsiu tai. ...

pn, liep. 10, 2026 · 4 min. · Ąžuolas Krušna

Atsinaujink pre-commit priklausomybes paprastai

pi; n pre-commit autoupdate arba prek auto-update .pre-commit-config.yaml faile esantys kabliai (angl. hooks) gali lengvai pasenti, tad kaipgi juos paprastai atsinaujinti? Labai paprastai, tiesiog šia komanda: pre-commit autoupdate Jeigu naudoji prek: prek auto-update Vienintelis skirtumas toks, kad prek naudoja auto-update, o ne autoupdate. Tarkime, kad turime tokius kablius su savo versijomis (rev) pre-commit konfigūracijos faile: repos: - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.11.0 hooks: - id: ruff args: [--fix] - id: ruff-format - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.10.0 hooks: - id: mypy additional_dependencies: ["types-tqdm"] Paleidus atsinaujinimą matysime kažką panašaus: ...

pr, birž. 29, 2026 · 2 min. · Ąžuolas Krušna

Kintamieji YAML faile

pi; n &vardas sukuria kintamąjį *vardas įklijuoja kintamajį <<: *vardas sujungia kintamojo bloko raktus su lokaliais (lokalūs nugali) x-bendra: &bendra restart: always services: web: <<: *bendra image: nginx Labas! Šiandien sužinosime kaip apsirašyti ir panaudoti kintamuosius YAML failuose! Viskas labai paprasta, mums tereikia sužinoti kaip panaudoti 3 ar 4 simbolius! Ar mums prireiks 4-o, priklauso nuo aplinkos, tačiau bet kuriuo atveju susipažinsime. Kokiais simboliais yra aprašomi kintamieji? Kintamiesiems apsirašyti ir panaudoti yra naudojami 3 pagrindiniai simboliai: &, *, <<. Tuomet priklausomai nuo aplinkos gali būti priekyje naudojamas x-, . ar kt. ...

št, birž. 27, 2026 · 4 min. · Ąžuolas Krušna

Pi agento analitika be debesijos

Pi coding agent neturi integruotos analitikos — nematai kiek išleidai, kurį modelį naudoji dažniausiai, ar kokie įrankiai iškviečiami dažniau. Tai galima išspręsti. Galimi trys keliai: PostHog Cloud PostHog savaeigis Lokali analitika Paskyra reikalinga Taip Ne Ne Internetas reikalingas Taip Ne Ne npm priklausomybės posthog-node posthog-node Nė vienos Duomenys išlieka lokaliai Ne Taip Taip Šiame įraše sukursime lokalią versiją — vienas TypeScript failas, duomenys saugomi ~/.pi/agent/analytics.jsonl, ir /analytics komanda terminale rodo visą susumuotą statistiką. ...

kt, geg. 21, 2026 · 5 min. · Ąžuolas Krušna

Kaip nustatyti Pi kodavimo agentą naudoti Zsh

Pi coding agent pagal nutylėjimą vykdo komandas per Bash. Tai reiškia, kad ~/.zprofile ar ~/.zshrc failai nėra įkeliami — todėl tokios priemonės kaip nvm, pyenv ar kiti per Zsh sukonfigūruoti įrankiai neveikia. Sprendimas paprastas: nurodyk Pi naudoti Zsh per globalius nustatymus. Konfigūracija Atsidaryk globalių nustatymų failą: ~/.pi/agent/settings.json Pridėk shellPath nustatymą: { "shellPath": "/bin/zsh" } Išsaugok failą ir perkrauk Pi. Nuo šiol visos komandos bus vykdomos per Zsh — ~/.zprofile bus įkeltas automatiškai. ...

kt, geg. 21, 2026 · 1 min. · Ąžuolas Krušna

Claude Code hooks: automatinis venv aktyvavimas

Claude Code turi hook’ų sistemą — tai shell komandos, kurios automatiškai vykdomos tam tikrais momentais sesijos metu. Skirtingai nuo instrukcijų CLAUDE.md faile, hook’ai garantuotai įvykdomi kiekvieną kartą. Šiame įraše sukonfigūruosime hook’ą, kuris automatiškai aktyvuos Python virtualią aplinką kiekvienoje Claude Code sesijoje. Kaip veikia hook’ai? Hook’ai konfigūruojami settings.json faile. Kiekvienas hook’as turi: Įvykį (event) — kada jis paleidžiamas Komandą (command) — ką jis vykdo Pagrindiniai įvykiai: Įvykis Kada iššaunamas SessionStart Sesijos pradžioje PreToolUse Prieš įrankio vykdymą PostToolUse Po įrankio vykdymo Notification Kai Claude laukia įvesties Konfigūracijos failai Hook’us galima konfigūruoti dviejuose lygiuose: ...

an, geg. 19, 2026 · 2 min. · Ąžuolas Krušna

Kaip kurti naujus įrašus su Hugo

pi; n hugo new post/kaip-kurti-naujus-irasus-su-hugo.md Naujus įrašus galime kurti kuriant naujus .md failus atitinkamoje Hugo tinklaraščio repozitorijos direktorijoje, tačiau paprasčiau yra jau esant tinklaraščio repozitorijoje naudotis hugo new komanda. Komanda sukurti naują įrašą Sukurti naują įrašą su hugo komanda galime taip: hugo new content/kelias/iki/iraso/iraso-pavadinimas.md Mano blogo struktūros atveju būtų taip: hugo new content/post/kaip-kurti-naujus-irasus-su-hugo.md Tačiau galima ir sutrumpinti: hugo new post/kaip-kurti-naujus-irasus-su-hugo.md Tai sukuria naują tinklaraščio failą su frontmatter laukais. Įrašo turinį galime patikrinti cat komanda: ...

št, kov. 14, 2026 · 2 min. · Ąžuolas Krušna

tl; dr lietuviškai

pi; n tl; dr lietuviškai galima būtų išversti į pi; n tl; dr trumpinys (angl. too long; didn’t read) yra gana dažnai sutinkamas techniniuose giduose internete. Verčiant pažodžiui jis reiškia, kad “per ilgai, neskaičiau”. Naudojamas kaip teksto apibendrinimas, ištraukiant į išorę svarbiausią informaciją ir nesigilinant į detales. Dar jis būna užrašomas didžiosiomis raidėmis: TL; DR, TLDR. Interneto žargonu angliškai jis dar pagal fonetinį skambesį vadinamas Teal Deer, taigi šviesiai smaragdinis elnias ar šviesiai smaragdinė stirnaitė. ...

št, kov. 14, 2026 · 3 min. · Ąžuolas Krušna

Publikuok Python paketą į PyPI su uv

Labas! Šiandien sužinosime kaip nuo nulio susikurti ir publikuoti Python paketą į PyPI su uv programa. uv yra labai greita, todėl programavimas su ja dar smagesnis! Įsidiegiame uv Jeigu dar neturi uv, įsidiek jį terminale: # macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" Įsitikink, kad veikia: uv --version Sukuriame naują biblioteką uv turi patogią komandą projektui inicijuoti. Naudosime --lib vėliavėlę, kuri sukuria biblioteką (angl. library) — paketą, skirtą naudoti kituose projektuose. ...

pr, kov. 9, 2026 · 4 min. · Ąžuolas Krušna

Sugrok MIDI failą su FluidSynth

Labas, šiandien grosime MIDI failus terminale! Aš nutariau pažvelgti į savo magistro darbą šviežiomis ausimis ir akimis. Jau po daugelio metų – daugiau nei septynių! Jau kaip patyręs programuotojas. Tuo metu kūriau muziką su rekursiniais neuroniniais tinklais – aido neuroniniais tinklais. Džiaugiuosi tuometine savo ambicija ir drąsa. Tačiau šiandien ne apie tai. Šiandien apie MIDI failų sugrojimą! Tam mes naudojame FluidSynth programą. Kas yra FluidSynth? FluidSynth yra programinis sintezatorius (angl. software synthesizer), kuris skaito MIDI failus ir paverčia juos garsu naudodamas SoundFont (.sf2) garso bankus. SoundFont — tai failas, kuriame saugomi tikrų instrumentų garso pavyzdžiai (angl. samples). Kai FluidSynth gauna MIDI instrukciją, pavyzdžiui, “pagrok man do natą fortepijonu”, jis paima atitinkamą įrašytą do natos skambesį iš Soundfont failo ir mums sugroja. ...

sk, kov. 8, 2026 · 6 min. · Ąžuolas Krušna