• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LUCIENVibe coding
    Diskuze věnovaná vibe codingu. Někdo ho nenávidí, jiní ho milují. Je to jen buzzword, nebo budeme za 10 let všichni vajbkódovat?

    Cílem diskuze nebude flame, ale praktické rady a ukázky. V práci AI a obecně vibecoding pomalu začleňujeme do procesů, protože správné použití zdá se skutečně může určité flows dost zrychlit a usnadnit. Pokud se teda člověk nedostane do loopu.

    Jak ho používáte vy?
    rozbalit záhlaví
    DWICH
    DWICH --- ---
    CABOWITZ: Nedavno probehl vedle prispevek, ktery se tomu blizi, byt je pro jiny typ vyvoje
    [SH_PANDA @ Artificial Intelligence AI]
    CABOWITZ
    CABOWITZ --- ---
    (ol)lama se pta zkusenejsich: chci si zalozit primarne lokalni setup - momentalne mam vscodium + continue + ollama/qewn3 (rtx5070 to taha jakz-takz). na druhou stranu ale delam pokusy i s opencode.ai (resil jsem jak to poustet pod dedikovanym userem/v dockeru aby to nemohlo sahat nikam mimo svoje kompetence - no zatim mam pocit ze vic nez vysledky to mentoruju) a aistudiem (to mi asi v ramci zadavani vstupu v ordinary language a funkcnich vystupu funguje nejlip). prosim nemate nekdo tip na lokalni setup, ktery by umoznoval pouzit nejaky nastroj, ktery si pripadne tez muze dohledat online obsah a "studovat" z prilozenych offline dokumentu? primarne mi jde asi o vyvoj jednoduchych her/audiovizualnich aplikaci v assembleru pro 8bity/(fantasy)konzole a pak ev. pygame/godot... pripadne se omlouvam za genericky dotaz, googlit dokazu, ale pokud nekdo ze zde pritomnych ma zkusenost se setupem/workflow, ktera mu fungovala, tak bych se rad nechal poucit. ev. dik za reakce :)
    INSOMNIA
    INSOMNIA --- ---
    LUCIEN: Nevim, ale na code review jsem s tim happy
    LUCIEN
    LUCIEN --- ---
    INSOMNIA: Neměli teď nějaký velký leak secrets?
    QWWERTY
    QWWERTY --- ---
    WOJTISHEK: necekej od toho zadne zazraky. tohle byl projekt opravdu v duchu vibecodingu, kdy jsem ten vysledny kod jenom zbezne proletel, overil ze funguje a povazoval za hotovy.
    0 refactoring, 0 analyzy.... rotaci logu si doufam poresi systemd/journalctl sam (a nebo to eventualne chcipne na nedostatek mista na SD karte)
    + je mozne, ze tam bude nekde par drobnosti spatne, protoze je mozne, ze jsem neco upravoval primo na RasPi a nesyncnul to zpatky do VSCode projektu
    GitHub - neaxi/rack_status_display: Raspberry+ILI9488 showing current status of rack services · GitHub
    https://github.com/neaxi/rack_status_display
    SKAFF
    SKAFF --- ---
    DWICH: to dobrej point. Jsem to zrovna psal Stembusovi co se ptal v poště. Kromě toho, že tyhle instrukce jsou baknutý do AGENTS.md jako základ, tak před commitem lokální audity jako type checky a lint, když natahuju něco novýho tak npm audit, snyk test, gitleaks, trivy. Na fázi před mergem z devu do stage pak SonarQube - ten mám in progress.

    Zapojení celkem typický do GitHub Actions worfkflow. Commit nebo merge request triggeruje action, předsazenej Sonar to buď failne a vrátí, nebo v případě pass to workflow pokračuje dál, buildne appku a deployne na hetznera. CodeScene jsem si ještě neobhájil cenově, ale tam dojdu

    SonarQube: Fight AI Slop & Verify AI Code | Sonar
    https://www.sonarsource.com/products/sonarqube/
    Official SonarQube Scan · Actions · GitHub Marketplace · GitHub
    https://github.com/marketplace/actions/official-sonarqube-scan

    REFLEX: všechny. Začal jsem na Opusu asi 4.1, v uplně jinym harnessu, přes Claude Code po Codex až po to samý skrz VSCode a teď jsem v terminalu. Takže se to tam dost nasčítalo
    DWICH
    DWICH --- ---
    SKAFF: Me spis zajima, jak to v praxi mas zapojene do workflow a jaky nastroje na to pouzivas. Delas to rovnou behem vyvoje? Hlidas pak neco v CI? Mas tam na to nejakej feedback loop, kdyz AI udela novou cast kodu, tak to muze dostat zpatky k prepracovani, protoze to neodpovida pozadavkum na kvalitu?
    REFLEX
    REFLEX --- ---
    SKAFF: jake AI to zprasilo?
    SKAFF
    SKAFF --- ---
    Zkouším kombinaci ForgeCode CLI + OpenRouter a je to docela zajimavý, mají i extension pro VS Code. Líbí se mi model switching v rámci stejnýho kontextu ve FC a openrouter/auto mode celkem dobře selectuje model pro konkrétní prompt v rámci jedné konverzace. A vypadá to, že to je o dost levnější přes jejich API než přímo na Claude Code. Za 800k tokens na Opus 4.7 jsem dal 1.49 USD

    World's #1 Coding Harness | ForgeCode
    https://forgecode.dev/
    +
    OpenRouter
    https://openrouter.ai/
    SKAFF
    SKAFF --- ---
    Jako nedev co vytváří a udržuje midsize React/Typescript appky (30k LOC+) neschopnej dělat code review (protože reálně tomu rozumim v konceptech, moc ne v kódu) jsem si musel udělat nějakou stukturu pro průběžnou statickou analýzu kvality a hygieny kódu, kterou AI často tvoří blbě kvůli změnám modelů, kontext driftu i použitím různých toolů v čase (a špatnýmu promptingu:)

    Což jsem udělal pozdě, a teď trávim hromadu času narovnáváním, protože to prostě už driftuje a začíná bejt neudržitelný. Možná to někomu pomůže, ať už jste v podobný fázi, nebo použít jako inspiraci pro vstup pro na začátku, jako mantinely / code standards, ke kterým se vracet

    můj static matrix v "industry standard" taxonomii
    --
    Maintainability Index - obecná metrika pro vyhodnocení složitosti a struktury, "udržitelnost"
    Cyclomatic Complexity - branching v kódu, milion featur v jedné komponentě, složitost testovatelnosti
    Cognitive Complexity - čitelnost kódu pro člověka, 10 vnořených ifů a podobně
    Code Duplication / Clones - opakující se identický bloky kódu (70x if (error) throw error after něco)
    Type Safety & Type Coverage Analysis - chybějící / nekorektní types
    Dead Code / Unreachable Code Detection - nevolané funkce, neimportované variables a podobný bordel
    Dependency Analysis (Coupling & Cohesion) - vazby jednotlivých modulů na sebe a riziko "změním něco v A a rozsype se mi B", nebo třeba když feature importuje něco přímo z jiné feature
    Code Churn & Hotspot Analysis - složitý a zároveň často updatovaný části kódů (podle gitu), kde je vyšší riziko průseru

    Dělat analýzu AI kódu využitím AI mi samo přijde jak hasit oheň dřevem, ale lepší, než to neřešit vůbec. A každej version bump u Opusu to zpřesňuje
    WOJTISHEK
    WOJTISHEK --- ---
    QWWERTY: nice, podělíš se někde na githubu?
    QWWERTY
    QWWERTY --- ---
    konecne jsem nasel vyuziti pro prehistoricke RasPi 1B
    $3.2 za 4.7 Opus, 3x planning a 1x act prompt. dal to na prvni pokus

    RUTHER
    RUTHER --- ---
    Cože? Fórum o vibe-codingu!

    QWWERTY
    QWWERTY --- ---
    ad nedavno diskutovany Lovable - [FARIN @ Artificial Intelligence AI]
    TOM
    TOM --- ---
    kdybyste chtěli vidět kapitoly markdownu v Notepad++ panelu Functions, tak tady jsem si dovolil z vlastní zahrádky .cmd skript (je pak potřeba Windows logout/login):
    @@ setlocal
    @@ set PS_WRAPPER_PATH=%~f0
    @@ set PS_WRAPPER_ARGS=%*
    @@ if defined PS_WRAPPER_ARGS set PS_WRAPPER_ARGS=%PS_WRAPPER_ARGS:"="%
    @@ PowerShell -sta -NoProfile -Command Invoke-Expression $('$args=@(^&{$args} %PS_WRAPPER_ARGS%);'+[String]::Join([Environment]::NewLine,$((Get-Content '%PS_WRAPPER_PATH%' -Encoding UTF8) -notmatch '^^@@^|^^:'))) & endlocal & exit /b
    
    $ErrorActionPreference = "Stop"
    
    # Explicit assembly loading
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
    
    function Show-Error {
        param([string]$Message)
        [void][System.Windows.Forms.MessageBox]::Show(
            $Message,
            "Notepad++ Markdown Function List - Error",
            [System.Windows.Forms.MessageBoxButtons]::OK,
            [System.Windows.Forms.MessageBoxIcon]::Error
        )
    }
    
    function Show-Info {
        param([string]$Message)
        [void][System.Windows.Forms.MessageBox]::Show(
            $Message,
            "Notepad++ Markdown Function List",
            [System.Windows.Forms.MessageBoxButtons]::OK,
            [System.Windows.Forms.MessageBoxIcon]::Information
        )
    }
    
    function Find-NotepadPlusPlus {
        # Try registry first (default value on the Notepad++ key holds the install path)
        $regPaths = @(
            "HKLM:\SOFTWARE\Notepad++",
            "HKLM:\SOFTWARE\WOW6432Node\Notepad++",
            "HKCU:\SOFTWARE\Notepad++"
        )
        foreach ($regPath in $regPaths) {
            if (Test-Path $regPath) {
                try {
                    $key = Get-Item -Path $regPath -ErrorAction Stop
                    $installPath = $key.GetValue("")
                    if ($installPath -and (Test-Path (Join-Path $installPath "notepad++.exe"))) {
                        return $installPath
                    }
                } catch {}
            }
        }
    
        # Fall back to common install locations
        $commonPaths = @(
            "$env:ProgramFiles\Notepad++",
            "${env:ProgramFiles(x86)}\Notepad++",
            "$env:LOCALAPPDATA\Programs\Notepad++"
        )
        foreach ($path in $commonPaths) {
            if ($path -and (Test-Path (Join-Path $path "notepad++.exe"))) {
                return $path
            }
        }
    
        return $null
    }
    
    function Test-NppRunning {
        try {
            $proc = Get-Process -Name "notepad++" -ErrorAction SilentlyContinue
            return ($null -ne $proc)
        } catch {
            return $false
        }
    }
    
    try {
        # ---- 1. Locate Notepad++ installation ----
        $nppPath = Find-NotepadPlusPlus
        if (-not $nppPath) {
            Show-Error ("Notepad++ installation was not found.`n`n" +
                        "Checked:`n" +
                        "  - Registry (HKLM/HKCU\SOFTWARE\Notepad++)`n" +
                        "  - $env:ProgramFiles\Notepad++`n" +
                        "  - ${env:ProgramFiles(x86)}\Notepad++`n" +
                        "  - $env:LOCALAPPDATA\Programs\Notepad++`n`n" +
                        "Please install Notepad++ first, then re-run this script.")
            exit 1
        }
    
        # ---- 2. Ensure user config folder exists ----
        $userConfigPath = Join-Path $env:APPDATA "Notepad++"
        if (-not (Test-Path $userConfigPath)) {
            Show-Error ("Notepad++ user config folder not found:`n  ${userConfigPath}`n`n" +
                        "Please launch Notepad++ at least once so it creates its config folder, " +
                        "then re-run this script.")
            exit 1
        }
    
        $functionListPath = Join-Path $userConfigPath "functionList"
        if (-not (Test-Path $functionListPath)) {
            [void](New-Item -Path $functionListPath -ItemType Directory -Force)
        }
    
        # ---- 3. Write the parser file (udl_markdown.xml) ----
        $parserXmlPath = Join-Path $functionListPath "udl_markdown.xml"
        $parserXml = @'
    <?xml version="1.0" encoding="UTF-8"?>
    <NotepadPlus>
      <functionList>
        <parser id="udl_markdown.xml" displayName="Markdown (preinstalled)" ext="md" commentExpr="(?ms)^\h*\x60{3,}.*?^\h*\x60{3,}">
          <function mainExpr="(?-s)^[ \t]*(#{1,6}[ \t].+)$">
            <functionName>
              <nameExpr expr="(#{1,6}[ \t].+)"/>
            </functionName>
          </function>
        </parser>
      </functionList>
    </NotepadPlus>
    '@
    
        $utf8NoBom = New-Object System.Text.UTF8Encoding $false
        [System.IO.File]::WriteAllText($parserXmlPath, $parserXml, $utf8NoBom)
    
        # ---- 4. Create or merge overrideMap.xml ----
        $overrideMapPath = Join-Path $functionListPath "overrideMap.xml"
        $udlNames = @("Markdown (preinstalled)", "Markdown (preinstalled dark mode)")
        $backupPath = $null
        $overrideMapHandled = $false
    
        if (Test-Path $overrideMapPath) {
            # Back up whatever is there before touching it
            $backupPath = "$overrideMapPath.bak"
            Copy-Item -Path $overrideMapPath -Destination $backupPath -Force
    
            try {
                [xml]$overrideXml = [System.IO.File]::ReadAllText($overrideMapPath)
    
                $npp = $overrideXml.SelectSingleNode("/NotepadPlus")
                if ($null -ne $npp) {
                    $funcList = $npp.SelectSingleNode("functionList")
                    if ($null -eq $funcList) {
                        $funcList = $overrideXml.CreateElement("functionList")
                        [void]$npp.AppendChild($funcList)
                    }
    
                    $assocMap = $funcList.SelectSingleNode("associationMap")
                    if ($null -eq $assocMap) {
                        $assocMap = $overrideXml.CreateElement("associationMap")
                        [void]$funcList.AppendChild($assocMap)
                    }
    
                    foreach ($udlName in $udlNames) {
                        $existing = $assocMap.SelectSingleNode("association[@userDefinedLangName='$udlName']")
                        if ($null -ne $existing) {
                            $existing.SetAttribute("id", "udl_markdown.xml")
                        } else {
                            $newAssoc = $overrideXml.CreateElement("association")
                            $newAssoc.SetAttribute("id", "udl_markdown.xml")
                            $newAssoc.SetAttribute("userDefinedLangName", $udlName)
                            [void]$assocMap.AppendChild($newAssoc)
                        }
                    }
    
                    $overrideXml.Save($overrideMapPath)
                    $overrideMapHandled = $true
                }
            } catch {
                # Malformed XML - fall through to write a fresh file (backup preserved)
            }
        }
    
        if (-not $overrideMapHandled) {
            $overrideContent = @'
    <?xml version="1.0" encoding="UTF-8" ?>
    <NotepadPlus>
        <functionList>
            <associationMap>
                <association id="udl_markdown.xml" userDefinedLangName="Markdown (preinstalled)" />
                <association id="udl_markdown.xml" userDefinedLangName="Markdown (preinstalled dark mode)" />
            </associationMap>
        </functionList>
    </NotepadPlus>
    '@
            [System.IO.File]::WriteAllText($overrideMapPath, $overrideContent, $utf8NoBom)
        }
    
        # ---- 5. Build confirmation message ----
        $nppRunning = Test-NppRunning
        $runningMsg = if ($nppRunning) {
            "`n`nWARNING: Notepad++ is currently running. Close and restart it for changes to take effect."
        } else {
            "`n`nStart Notepad++, open a .md file, then: View > Function List"
        }
        $backupMsg = if ($backupPath) {
            "`n`nExisting overrideMap.xml backed up to:`n  $backupPath"
        } else {
            ""
        }
    
        Show-Info ("Setup complete.`n`n" +
                   "Notepad++ install: $nppPath`n`n" +
                   "Files written:`n" +
                   "  - $parserXmlPath`n" +
                   "  - $overrideMapPath" +
                   $backupMsg +
                   $runningMsg)
    
    } catch {
        Show-Error ("An unexpected error occurred:`n`n" +
                    "$($_.Exception.Message)`n`n" +
                    "At: $($_.InvocationInfo.PositionMessage)")
        exit 1
    }
    
    STEMBUS
    STEMBUS --- ---
    TADEK: pres VPN by to nedal asi nikdo z nich, uz takhle je vsechny na dalku pres syna navigovat jakou musej mit verzi a jak si zadat custom server je vcelku challengeb😁😅 takže je to vystaveny na verejce no
    TADEK
    TADEK --- ---
    STEMBUS: to je super, pritom takova blbost! to ti bezi doma na nejaky verejny IP nebo tam kiddos pristupujou pres VPN?
    STEMBUS
    STEMBUS --- ---
    taky se přidám s jedním mým "seznamovacím" projektem - seznamování s vibecodingem a Claude Codem (nikdy sem nic neprogramoval, max v assembleru na vejšce :))

    udělal sem si self-hosted web appku pro monitoring mého vlastního minecraft serveru (který provozuju pro syna a jeho kámoše :) - minecraft server, stejně tak jako tahle app hostovaný jako DOCKERy na Synology NASu

    Cílem bylo aby na základě herní aktivity na serveru appka automaticky generovala denní reporty toho co se na serveru dělo, v podobě "kroniky" která bude čitelná a zábavnáí hlavně pro děcka ;)

    Po Claude Code sem to chtěl udelat celé šité na míru synology prostředí, běžící v container manageru atd, takže i ten Docker ve kterém to vše běží jsem dělal sám s pomocí Claude (můj první vlastní docker :)

    Stack: Python / FastAPI backend, Jinja2 HTML šablony, SQLite databáze

    Na Minecraft serveru mi běží CoreProtect plugin, což je jakási ochrana před tím když by se někdo rozhodl ve hře celý svět (v MC) zničit, plugin obsahuje vlastní DB, kterou jsem využil právě pro tvorbu těch reportů

    Čili python skript si každý den z té DB vytáhne data a dá jim nějakou strukturu (abych ušetřil tokeny a mohl Gemini využívat ve free tieru), kterou pak přes API posílá do Gemini - v APPce existuje proměnná "styl" která ovlivňuje výsledný "styl" reportu, které na základě odeslaných dat daného dne Gemini vrátí jako výsledek toho API volání - to je pak převedeno do html výstupu a publishnuto na web serveru onoho synology :)

    Původně sem chtěl jen ty reporty, nakonec k tomu mám komplet i backend s admin rozhraním, všechny reporty editovatelné, s možností je přegenerovat atd atd, nějaké základní hráčské statistiky, bezpečnost atd atd ... byla to zábava :) Dle Claude Code mě to vyšlo na cca $200 - věřím, že by to šlo udělat za 1/3 s více zkušenostma s CC - cenu sem neřešil, mám korporátní přístup...




    Já vim, je to pí*ovina, ale než si s těma tooluma hrát beze smyslu, tak sem si vymyslel něco co mělo cíl, díky tomu sem si musel projít skutečně celým "cyklem" vývoje takové věci :)
    VDB
    VDB --- ---
    TADEK: jasny, o tu migraci ven z lovable bych neměl větší obavu pokud tam nemáš nějaký super custom integrace externích tools. Co se ceny tejká, tak nemyslím hosting, ale cenu za tokeny. Zatím jsem lovable zaplatil v Kč nižší desítky tisíc a je to z principu dražší (přepíná to modely, ale default je myslím claude sonnet) než LLM na kterejch to jede. Pohodlnost je v tom, že nemusím řešit voprcávky kolem, například když v únoru anthropic snížil /effort v claude code, tak uživatelé co to netušili, si začali stěžovat na horší výstupy, ale já v lovable nic nezaznamenal a to jsem u toho seděl každej den x hodin...
    TADEK
    TADEK --- ---
    VDB: diky. na Redditu nedvno vysel docela legit manual, jak migrovat z toho Lovable Cloudu do normalni (ci self-hosted) instance Supabase btw - ja se toho bojim trochu, ale mam jednu malou appku kterou pouziva doslova JEDEN uzivatel a tam to taky jedu v Lovable Cloudu ale tam m nevadi, ze bych prisel o data / nemel bych je vubec. a je Lovable drahy? ja to neumim moc porovnat, ja mam predplaceny Pro s 200 kreditama za $50/m a parkrat (na zacatku) jsem musel dokupovat ale tedka s tim vystacim - kdyz si vezmu ze v tom mam cely ten ekosystem, defakto hosting tak za me spoko cena.
    Kliknutím sem můžete změnit nastavení reklam