Skip to content

Instantly share code, notes, and snippets.

View guersam's full-sized avatar

Jisoo Park guersam

  • Seoul, South Korea
View GitHub Profile
@guersam
guersam / scala-capture-checking-guide.md
Created February 26, 2026 04:40
스칼라 3의 실험적인 Capture Checking 기능 해설

Scala 3 Capture Checking 완전 가이드

주니어 스칼라 개발자를 위한 실험적 기능 해설 ZIO Scope, Rust Lifetime과의 비교를 곁들여


1. 이 기능이 해결하려는 문제

1.1 자원 누수라는 오래된 문제

@guersam
guersam / reading-methodologies-for-software-plan-review-ko.md
Last active February 20, 2026 10:13
Reading Methodologies for Software Plan Review in Agentic Pair Programming

에이전틱 페어 프로그래밍에서 소프트웨어 설계 문서 리뷰를 위한 읽기 방법론

1. 서론

소프트웨어 설계 문서 — 아키텍처 문서, RFC, 기능 명세서, API 설계서 — 는 엔지니어링 팀이 생산하는 산출물 중 가장 밀도가 높습니다. 이러한 문서는 학술 논문, 법률 계약서, 안전 명세서와 구조적 특성을 공유합니다. 계층적 의존성, 암묵적 가정, 오해로 인한 높은 비용, 그리고 한 번 읽고 여러 번 실행하는 경향이 그것입니다.

구조적 읽기 방법론은 이러한 특성을 다루기 위해 수십 년간 발전해 왔습니다. SQ3R은 1940년대 군사 훈련을 위해 개발되었고, Fagan Inspection은 1976년 IBM에서 도입되었으며, Perspective-Based Reading은 1990년대 NASA 연구에서 탄생했습니다. 각 방법론은 복잡한 문서에서 의미를 추출하고, 빈틈을 찾아내며, 실행 가능한 판단을 도출하는 체계를 담고 있습니다.

에이전틱 LLM(대규모 언어 모델)은 이제 이러한 설계 문서를 리뷰하는 페어 프로그래밍 파트너로 활용되고 있습니다. 그러나 "이 설계를 리뷰해 줘"나 "어떻게 생각해?"같은 비구조적 프롬프팅은 피상적이고, 아첨적(sycophantic)이거나, 모드가 혼합된 응답을 유발합니다. LLM은 저자의 프레이밍에 동의하고, 그럴듯하지만 일반적인 관찰을 생성하며, 리뷰를 진정으로 가치 있게 만드는 구조적이거나 적대적인 통찰을 도출하지 못합니다.

@guersam
guersam / layout-debugging-story-2026-02-05-ko.md
Last active February 6, 2026 14:54
Layout Debugging Retrospective Story - Eugene AI Screener (2026-02-05)

측정의 혁신: 디버깅 시간 75% 단축 사례

20시간에서 5시간으로. 반응적 코드 읽기에서 능동적 브라우저 측정으로. 수동 프로토콜에서 자동화 도구로.

이 변화는 10시간 28분 만에 일어났습니다. 이것이 그 과정입니다.


이 문서 사용 방법

@guersam
guersam / mill.fish
Last active August 6, 2025 00:22
Fish autocompletion for mill 1.0
# Mill completion for fish shell
# Ported from Mill's bash/zsh completion script
function __mill_completions
# Get current command line tokens
set -l tokens (commandline -opc)
set -l position (count $tokens)
# Get completions from mill and strip descriptions
if test -x ./mill
@guersam
guersam / ResourceAcquisitionTimeoutExample.scala
Created March 15, 2023 03:06
`ZIO#interruptible` can override a fiber's interruptibility inherited from its parent
//> using scala "3.2.2"
//> using dep "dev.zio::zio:2.0.10"
import zio.*
object ResourceAcquisitionTimeoutExample extends ZIOAppDefault {
val run =
ZIO.debug("Running...") *>
ZIO.acquireRelease(
ZIO.debug("Acquired")
@guersam
guersam / ThrottleShapeSpec.scala
Created March 1, 2023 12:45
ZStream#throttleShape test
//> using scala "3.2.2"
//> using dep "dev.zio::zio:2.0.9"
//> using dep "dev.zio::zio-test:2.0.9"
import zio.*
import zio.stream.*
import zio.test.*
import java.time.temporal.ChronoUnit
object ThrottleShapeSpec extends ZIOSpecDefault {
@guersam
guersam / ZIOSeleniumExample.scala
Last active November 8, 2022 05:40
ScalaCLI + ZIO + Selenium Example
//> using scala "3.2.1"
//> using lib "dev.zio::zio:2.0.3"
import zio.*
case class AppConfig(root: String)
object AppConfig:
val layer: ZLayer[Any, Nothing, AppConfig] =
@guersam
guersam / monkey-patch-vega-scenegraph.js
Last active July 26, 2022 06:41
Vite plugin for dependency monkey patching
import { createLogger } from 'vite';
export function monkeyPatchVegaScenegraph() {
const name = 'monkey-patch-vega-scenegraph';
const logger = createLogger('info', { prefix: `[${name}]` });
const logOptions = {timestamp: true};
const replaceCriteria = /touchmove\(evt\) \{\s*this\.fire/m;
@guersam
guersam / install-obsidian.sh
Last active November 23, 2021 02:54 — forked from shaybensasson/install-obsidian.sh
Installing Obsidian (an advanced markdown editor) on Ubuntu
#!/usr/bin/env bash
# see https://forum.obsidian.md/t/gnome-desktop-installer/499
set -euo pipefail
icon_url="https://cdn.discordapp.com/icons/686053708261228577/1361e62fed2fee55c7885103c864e2a8.png"
#dl_url=${1:-}
dl_url=$( curl -s https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest \
| grep "browser_download_url.*AppImage" | tail -n 1 | cut -d '"' -f 4 )

Keybase proof

I hereby claim:

  • I am guersam on github.
  • I am guersam (https://keybase.io/guersam) on keybase.
  • I have a public key ASCpi4lE8RcuK-hUUr5MFavzikvDnGPrPMjFfpumrW855go

To claim this, I am signing this object: