commit 39585235d960096ae00c7c8b5cad36603b17c21e Author: Domenico Testa Date: Tue Mar 31 18:48:40 2026 +0200 Initial revision diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7f05faf --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +.PHONY: install start + +install: + bun install + +start: install + bun run dev diff --git a/README.md b/README.md new file mode 100644 index 0000000..24aac3a --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Automatic Coding — Intro Talk + +A reveal.js presentation built with Vite for hot-reload during editing. + +## Requirements + +- [Bun](https://bun.sh) (or Node.js + npm) + +## Run + +```sh +make start # opens dev server at http://localhost:5173 +``` + +## Navigate + +| Key | Action | +|-----|--------| +| `→` / `Space` | Next slide | +| `←` | Previous slide | +| `↑` / `↓` | Vertical slides | +| `f` | Fullscreen | +| `s` | Speaker notes | +| `Esc` | Slide overview | diff --git a/assets/arxiv-skill-formation.png b/assets/arxiv-skill-formation.png new file mode 100644 index 0000000..a602d4c Binary files /dev/null and b/assets/arxiv-skill-formation.png differ diff --git a/assets/b737_cockpit.jpg b/assets/b737_cockpit.jpg new file mode 100644 index 0000000..09c1293 Binary files /dev/null and b/assets/b737_cockpit.jpg differ diff --git a/assets/codingtrain-yt.png b/assets/codingtrain-yt.png new file mode 100644 index 0000000..cf4f45b Binary files /dev/null and b/assets/codingtrain-yt.png differ diff --git a/assets/tsoding-yt.png b/assets/tsoding-yt.png new file mode 100644 index 0000000..a8ce333 Binary files /dev/null and b/assets/tsoding-yt.png differ diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..918671a --- /dev/null +++ b/bun.lock @@ -0,0 +1,132 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "automatic-coding-intro", + "dependencies": { + "reveal.js": "^5.1.0", + }, + "devDependencies": { + "vite": "^5.0.0", + }, + }, + }, + "packages": { + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.21.5", "", { "os": "android", "cpu": "arm" }, "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.21.5", "", { "os": "android", "cpu": "arm64" }, "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.21.5", "", { "os": "android", "cpu": "x64" }, "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.21.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.21.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.21.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.21.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.21.5", "", { "os": "linux", "cpu": "arm" }, "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.21.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.21.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.21.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.21.5", "", { "os": "linux", "cpu": "none" }, "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.21.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.21.5", "", { "os": "linux", "cpu": "x64" }, "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.21.5", "", { "os": "none", "cpu": "x64" }, "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.21.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.21.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.21.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.21.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.1", "", { "os": "android", "cpu": "arm" }, "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.1", "", { "os": "android", "cpu": "arm64" }, "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + + "reveal.js": ["reveal.js@5.2.1", "", {}, "sha512-r7//6mIM5p34hFiDMvYfXgyjXqGRta+/psd9YtytsgRlrpRzFv4RbH76TXd2qD+7ZPZEbpBDhdRhJaFgfQ7zNQ=="], + + "rollup": ["rollup@4.60.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.1", "@rollup/rollup-android-arm64": "4.60.1", "@rollup/rollup-darwin-arm64": "4.60.1", "@rollup/rollup-darwin-x64": "4.60.1", "@rollup/rollup-freebsd-arm64": "4.60.1", "@rollup/rollup-freebsd-x64": "4.60.1", "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", "@rollup/rollup-linux-arm-musleabihf": "4.60.1", "@rollup/rollup-linux-arm64-gnu": "4.60.1", "@rollup/rollup-linux-arm64-musl": "4.60.1", "@rollup/rollup-linux-loong64-gnu": "4.60.1", "@rollup/rollup-linux-loong64-musl": "4.60.1", "@rollup/rollup-linux-ppc64-gnu": "4.60.1", "@rollup/rollup-linux-ppc64-musl": "4.60.1", "@rollup/rollup-linux-riscv64-gnu": "4.60.1", "@rollup/rollup-linux-riscv64-musl": "4.60.1", "@rollup/rollup-linux-s390x-gnu": "4.60.1", "@rollup/rollup-linux-x64-gnu": "4.60.1", "@rollup/rollup-linux-x64-musl": "4.60.1", "@rollup/rollup-openbsd-x64": "4.60.1", "@rollup/rollup-openharmony-arm64": "4.60.1", "@rollup/rollup-win32-arm64-msvc": "4.60.1", "@rollup/rollup-win32-ia32-msvc": "4.60.1", "@rollup/rollup-win32-x64-gnu": "4.60.1", "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..cab6187 --- /dev/null +++ b/index.html @@ -0,0 +1,1068 @@ + + + + + + Automatic Coding — From autocomplete to AI agents + + + +
+
+ + + +
+

AUTOMATIC CODING

+

+ From autocomplete to AI agents — where are we actually? +

+ +

+ +
+ + + + +
+ + +
+

FIRST:
WHAT IS AN LLM?

+ +
+ + +
+
+ 🔗 growingswe.com/blog/microgpt — interactive walkthrough of Karpathy's 200-line GPT +
+ +
+ + +
+

Neural Network at its core

+
+ 🧠 + + 📊 +
+
    +
  • Trained on massive text corpora
  • +
  • Predicts the next token — one word piece at a time
  • +
  • No memory between calls
  • +
+ +
+ + +
+

The Memory Problem

+

What fits inside a "context window"

+
+
System
Prompt
+
Conversation
History
+
Your
Message
+
Response
+
+

Run out of context = amnesia 🫥

+

Every call starts fresh 🔄

+ +
+ + +
+

What LLMs don't have

+
    +
  • ❌ Understanding of consequences
  • +
  • ❌ Real-time knowledge
  • +
  • ❌ A "world model"
  • +
  • ❌ Persistent memory (without scaffolding)
  • +
  • + ✅ Incredible pattern matching & synthesis +
  • +
+ +
+ +
+ + + + +
+ + +
+

VIBE
CODING

+

+ "Just vibe with it 🎵" +

+ +
+ + +
+

What IS vibe coding?

+
+ Human is NOT in the loop +
+
    +
  • Never read the generated code
  • +
  • Just prompt harder 💪
  • +
+ +
+ + +
+
🔥
+

This is fine.

+

+ The app is on fire but the tests pass +

+

— Every vibe coder, eventually

+ +
+ + +
+

🚨 The Problems

+
+ 🤖 Hallucinations — The code looks right but calls an API that doesn't exist +
+
+ 🧩 Maintainability — 6 months later, nobody (including the AI) understands it +
+
+ 🔓 Security — SQL injection on line 42, shipped to prod +
+
+ ⚖️ IP Risks — Did that code come from a GPL repo? +
+
+ 🧠 Cognitive Decay — You stop understanding your own codebase +
+
+ 👥 Team Load — Junior devs reviewing AI slop they can't evaluate +
+ +
+ + +
+

Engineers are so dramatic! 🎭

+
🙄
+

...or are they?

+

Let's look at the data.

+ +
+ + +
+
+

+ Would you fly on a
fully automatic plane? ✈️ +

+
+ +
+ + +
+

+ Would you fly on a fully automatic plane? ✈️ +

+
+ 🤖 Autopilot can do almost everything — yet every flight still has two pilots +
+
+ 🧠 Skills & judgment matter — when things go wrong, humans take over +
+
+ 📋 Checklists & procedures — not because pilots are dumb, but because stakes are high +
+
+ ⌨️ Same goes for coding with AI — automation is a tool, not a replacement for understanding +
+ +
+ +
+ + + + +
+ + +
+

THE 5 PHASES

+

+ of human-AI collaboration in coding +

+ +
+ + +
+

PHASE 1

+

Automatic Code Completion

+

+ Copilot, Tabnine, Supermaven — inline suggestions as you type +

+
+ ⚡ Fast & low-risk — you review every token before it lands +
+
+ ⚠️ Can introduce subtle bugs — sustained attention required +
+ +
+ + +
+

PHASE 2

+

Chat → Copy → Paste

+

+ ChatGPT, Claude.ai — generate in a chat, copy, paste into your editor +

+
+ ✅ You're still in full control of what gets committed +
+
+ ⚠️ Context switching cost — the chat has no awareness of your project +
+ +
+ + +
+

PHASE 3

+

IDE-Integrated Agent

+

+ Cursor, Copilot Chat, Claude Code — agent reads your files, writes code inline +

+
+ ✅ Project-aware — can refactor across files, understands your codebase +
+
+ ⚠️ Trust boundary blurs — review discipline becomes critical +
+ +
+ + +
+

PHASE 4

+

Multi-Agent Orchestration

+

+ Parallel agents, tool use, sub-agents — full autonomy pipelines +

+
+ ✅ Handles entire workflows end-to-end, parallelizes complex tasks +
+
+ ⚠️ Hard to audit — failure modes are non-obvious and can cascade +
+ +
+ + +
+

PHASE 5

+

Spec-Driven Development

+
+ Still a myth 🦄 +
+

+ "Write a spec → AI ships production code → Deploy → ??? → Profit" +

+
+ Reality check: We're not there yet. Maybe never for complex systems. +
+ +
+ +
+

PHASE 5 — IN THE WILD

+

Case Study: A C Compiler, Built from Specs

+
+ 🦀 106,000 lines of Rust — 351 files — compiles the Linux kernel +
+
+ 🤖 Generated with Claude Opus via iterative spec-driven prompting +
+
+ 🧩 Key insight: 32 phases × ~11 files — modular decomposition was everything +
+
+ 💸 Cost: $20,000+ in API calls — and the type checker doesn't work +
+

+ 🔗 shape-of-code.com — Investigating an LLM-generated C compiler +

+ +
+ +
+ + + + +
+

🎬 Demo: Claude Code

+
    +
  • +
    + 🔧 Skills — OpticOdds fixtures integration +
    +
  • +
  • +
    + 🪝 Hooks — Preventing credentials from leaking into context +
    +
  • +
+ +
+ + + + +
+ + +
+

AI SLOP

+

+ When volume beats quality +

+ +
+ + +
+

🗑️ What is AI Slop?

+
+ 📈 Code creation FAR outpaces code review +
+
+ 📉 Consistency erodes — style, patterns, naming — all drift +
+
+ 🧠 Team expertise declines — nobody owns anything anymore +
+ +
+ + +
+

Spot the difference

+
+
+
👎
+
+ Vibe coding this into prod
+ No review. No context. No accountability. +
+
+
+
👍
+
+ Vibe coding this into a pet project
+ Learn fast. Break things. Nobody gets paged at 3am. +
+
+
+ +
+ + +
+

Ready to ship without review? 🤔

+
NO.
+
    +
  • Even senior engineers miss things under time pressure
  • +
  • AI confidently writes wrong code — the confidence is the bug
  • +
  • The diff is your last line of defense 🛡️
  • +
+ +
+ +
+ + + + +
+ + +
+

A WISE
STRATEGY

+ +
+ + +
+

Learn from Open Source Maintainers

+
+ 🔍 Add friction to PR review — slow down intake, not speed up merges +
+
+ 🔗 Always link to the AI conversation in the PR description +
+
+ 📋 No more breadcrumbs — full context required, or no merge +
+ +
+ + +
+

The Review Contract

+
+ You wrote it with AI? +
+
+ Then YOU are responsible for it. +
+
+ Not the AI. YOU. +
+
🫵
+ +
+ +
+ + + + +
+ + +
+

MY ADVICE

+

+ (completely unrequested) +

+ +
+ + +
+

New tools, new manners

+
🍝 Stop Sloppypasta
+
+ stopsloppypasta.ai + — think before you paste AI-generated code +
+

+ New capabilities → new professional norms. The industry hasn't caught up yet. You can lead. +

+ +
+ + +
+
+ 📄 Shen & Tamkin — "How AI Impacts Skill Formation" · arxiv.org/abs/2601.20245 · AI use impairs conceptual understanding without delivering efficiency gains +
+ +
+ + +
+

Your coding skills still matter

+ +
+ 🏋️ Exercise them — build pet projects just for the joy of it +
+
+ + +
+
+ 📺 youtube.com/@TsodingDaily — raw, educational, zero-AI coding streams (C, Rust, Go, and more) +
+ +
+ + +
+
+ 📺 youtube.com/@TheCodingTrain — creative coding with p5.js, Daniel Shiffman (1.76M subscribers) +
+ +
+ + +
+
+ 🤖 Use AI for exploration — not as a substitute for understanding +
+

+ Prediction: in the coming years, many will try to do engineering without engineering knowledge. That gap will be visible. Your fundamentals are your moat. +

+ +
+ + +
+ + +
+ + +
+

WHAT'S NEXT?

+

+ Going deeper: AI features, local inference & model training +

+ +
+ + +
+

LEVEL 1

+

Adding AI features to your app

+
+ ☁️ Hosted APIs — Anthropic, OpenAI, Gemini — drop-in inference, no infra +
+
+ 🔀 HuggingFace Inference API — proxy to hundreds of open-weight models, same REST interface +
+
+ 🧩 Patterns: chat completion · embeddings · structured output · tool use +
+
+ ⚠️ You are now responsible for prompt injection, data leakage and cost runaway +
+ +
+ + +
+

LEVEL 2

+

Local inference

+
+
+ 🦙 Ollama
+ Run Llama, Mistral, Gemma locally — one command +
+
+ ⚡ llama.cpp
+ CPU inference, quantised GGUF models, minimal deps +
+
+ 🤗 HF Transformers
+ Python, full control, GPU/MPS acceleration +
+
+
+ 🔒 Why bother? — data stays on-device, zero cost per token, works offline +
+
+ ⚠️ Hardware matters — a 70B model needs ~40 GB VRAM. Start with 7B–8B quantised. +
+ +
+ + +
+

LEVEL 3

+

RAG — Retrieval-Augmented Generation

+
+
📄 Your docs
+
+
✂️ Chunk & embed
+
+
🗄️ Vector store
+
+
🔍 Retrieve
+
+
🤖 LLM
+
+
+ 🧠 Gives the model your private knowledge without fine-tuning +
+
+ 🛠️ Stack: LangChain / LlamaIndex · ChromaDB / pgvector / Qdrant +
+
+ → Currently experimenting with this 🧪 +
+ +
+ + +
+

LEVEL 4

+

Training an open-weight model

+
+
+ 🎯 Fine-tuning
LoRA / QLoRA — adapt a base model on your task with minimal GPU +
+
+ 📊 Datasets
HuggingFace Datasets — thousands of ready-to-use training sets +
+
+ 🚂 Training
HF Transformers + PEFT · Unsloth for fast LoRA +
+
+
+ 🤗 HuggingFace — one-stop shop: models · datasets · papers · inference API · model hub +
+
+ → Currently experimenting with local training + inference 🧪 +
+ +
+ + +
+

🤗 HuggingFace as your AI platform

+
+
+ 🏗️ Model Hub
500,000+ open-weight models, filterable by task, size, license +
+
+ 📦 Datasets
Curated training data for every domain — ready to fine-tune on +
+
+ 📄 Papers
Daily ML papers with linked code & models — stay on the frontier +
+
+ ⚡ Inference Providers
Proxy to hosted open models — same API, swap models freely +
+
+

+ huggingface.co — the GitHub of AI models +

+ +
+ +
+ +
+ + +
+

EXPERIMENT.

+

REVIEW.

+

UNDERSTAND.

+

+ In that order. 😉 +

+ +
+ +
+ + +
+
+ + + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..f72f347 --- /dev/null +++ b/main.js @@ -0,0 +1,14 @@ +import Reveal from 'reveal.js' +import RevealHighlight from 'reveal.js/plugin/highlight/highlight.esm.js' +import RevealNotes from 'reveal.js/plugin/notes/notes.esm.js' + +import 'reveal.js/dist/reveal.css' +import 'reveal.js/dist/theme/black.css' +import 'reveal.js/plugin/highlight/monokai.css' + +Reveal.initialize({ + hash: true, + transition: 'slide', + backgroundTransition: 'fade', + plugins: [RevealHighlight, RevealNotes], +}) diff --git a/outline.md b/outline.md new file mode 100644 index 0000000..5cf38ca --- /dev/null +++ b/outline.md @@ -0,0 +1,75 @@ +AI LLM inference evaluations tokens slop + +## Terminology + +- Do you know what an LLM is? a brief introduction + - neural networks + - a stateless machine + - the memory problem (what is a context window) + - outdated by definition + - lacks the "world" model, doesn't comprehend consequences + - harness to support training + - harness to support inference + +## What is vibe-coding? + +- if human is not in the loop it's vibe coding + - never look at the generated code + - just use strong, iterative prompting + +What are the problems: + +- allucinations (provide an example) +- maintainability (provide an example) +- security (provide an example) +- IP related risks +- individual cognitive risks +- team cognitive load + +https://www.youtube.com/shorts/aIvHf8vsWBM ([Ilya Sutskever](https://en.wikipedia.org/wiki/Ilya_Sutskever) interview short extract about vibecoding) +https://www.youtube.com/watch?v=5vp9ypOUgMw [Theo - tr.gg, Vie coding is for Senior Developes](https://www.youtube.com/watch?v=5vp9ypOUgMw) + +Engineers are so dramatic! + +## Automatic coding + +Show different levels of interaction with coding agents: + +for each, mention limitations + +- Phase 1: automatic code completion +- Phase 2: copy-paste from a chat prompt +- Phase 3: chat agent integrated in the IDE +- Phase 4: multi-agent orchestration +- Phase 5: full Spec-driven development (still a myth) + +## Demo Claude code + +- skills: Opticodds fixtures +- hooks: avoid exposing credentials to context + +## The AI SLOP: are we ready to deploy to production without reviews? + +without any specific discipline, AI slop will "help" in the following ways: + +- inbalance between code creation and code review +- noise is being introduced and consistency is quickly lost +- team specific expertise will decline + +## What a wise AI/coding strategy looks like then? + +- let's take a look at open source project maintainers (what are they doing)? +- they are adding friction on the PR triaging and review +- no more breadcrumbs: always include a link to the conversation + +## My completely unrequested piece of advice + +- New tools require new manners: stop sloppypasta (https://stopsloppypasta.ai/en/) +- Reviews are the last gatekeeping tool to avoid the slop - not taking reviews seriously = doomed +- If you don't understand something, you should not use automatic programming to "solve" it + - prediction: I believe in the following months/years there will be a bloom of indivisuals and organizations that will tackle engineering problems with no engineering background +- Use all the new tools, experiment and profit +- Your ability to read, understand, and produce code is still valuable (more that many might think) - excercise these skills + - link to the tsoding channel (include some screenshots from youtube) + - link to the codingtraing channel (include some screenshots from youtube) + - build pet projects and leverage coding agents for exploration diff --git a/package.json b/package.json new file mode 100644 index 0000000..a48bd37 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "automatic-coding-intro", + "version": "1.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "reveal.js": "^5.1.0" + }, + "devDependencies": { + "vite": "^5.0.0" + } +}