글자 크기

빌드

창업과 자동화 기록 – 아이디어에서 실험, 실패, 수정까지

늦깎이연구소, 당신의 시간을 기록합니다

거대 서사에서 나만의 이야기로 90년대 대학가의 낭만, 97년 IMF, 2020년 팬데믹. 숨 가쁘게 달려온 세월 속에서 우리 삶의 중심이 바뀌었다. 국가, 성공, 거대한 서사에서 — 나의 생존, 가족과의 관계, 찰나의 순간으로. 늦깎이연구소는 여기서 시작했다. 사회가 정해놓은 시간표를 벗어나 자신만의 속도를 찾아가는 사람들. 사실 우리 모두가 이 시대의 “보통의 늦깎이”다. 기억을 새기는 기술 서랍 깊숙한 곳에 계속 읽기 →

늦깎이연구소, 당신의 시간을 기록합니다 더 읽기"

물리기 버튼이 한 번만 작동하는 이유

“◀2수” 버튼을 눌렀다. 잘 된다. 한 번 더 눌렀다. 반응이 없다. 아니, 반응은 있는데 다시 원래대로 돌아온다. 두 수 물렸다가 두 수가 다시 놓아진다. 무한루프처럼. Streamlit 버튼이 이상하게 동작할 때, 대부분은 내 잘못이다. 이번에도 그랬다. 증상: 두 수 사이를 반복 물리기 버튼의 동작은 단순하다. if st.button(“◀2수”): undo_moves() # 2수 취소 st.rerun() undo_moves()는 KataGo 엔진에 undo 계속 읽기 →

물리기 버튼이 한 번만 작동하는 이유 더 읽기"

브라우저를 닫아도 대국은 계속된다: 자동저장과 복구

KataGo와 훈련 대국을 두다가 전화가 왔다. 통화를 마치고 돌아오니 브라우저가 꺼져 있었다. 다시 열었을 때 깨달았다. 50수 넘게 둔 대국이 사라졌다는 것을. Streamlit의 세션 스테이트는 휘발성이다. 브라우저를 닫으면 모든 게 날아간다. 알고는 있었지만, 직접 겪으니 다르다. 문제: 세션의 덧없음 Streamlit 앱에서 게임 상태는 st.session_state에 저장된다. st.session_state.moves = [(“B”, “Q16”), (“W”, “D4”), …] st.session_state.board = [[…], 계속 읽기 →

브라우저를 닫아도 대국은 계속된다: 자동저장과 복구 더 읽기"

바둑 좌표계의 미로: SGF, GTP, 그리고 화면 좌표

“Q16에 두세요.” 바둑을 배우면 자연스럽게 익히는 좌표 표기법이다. 가로는 A부터 T까지(I 제외), 세로는 1부터 19까지. 오른쪽 위 귀가 Q16이다. 근데 코드로 바둑판을 다루기 시작하면 — 지옥이 열린다. SGF 파일에는 “pd”라고 적혀 있다. KataGo는 “Q16″을 말한다. 화면에 그리려면 픽셀 좌표가 필요하다. 그리고 이 셋은 전부 다른 규칙을 따른다. 세 가지 좌표계 1. SGF 좌표 SGF(Smart Game 계속 읽기 →

바둑 좌표계의 미로: SGF, GTP, 그리고 화면 좌표 더 읽기"

2패스 분석의 비밀: 빠른 훑기와 정밀 분석

200수짜리 기보를 분석한다.KataGo에게 모든 수를 깊이 분석하라고 시키면 — 10분이 걸린다. 사용자는 기다리지 않는다. 그렇다고 얕게 분석하면? 사활을 틀린다. 죽은 돌을 산 걸로 보고, 80집 차이 나는 바둑을 “백 유리”라고 말한다. 깊이와 속도. 둘 다 포기할 수 없었다.그래서 2패스 분석을 만들었다. 문제: 모든 수가 중요하진 않다 200수 중에 정말 중요한 수는 몇 개나 될까. 대부분의 계속 읽기 →

2패스 분석의 비밀: 빠른 훑기와 정밀 분석 더 읽기"

놓아보기 기능 개발기: AI 추천수를 직접 둬보다

KataGo가 “여기가 좋다”고 말한다.A, B, C 세 가지 추천수가 바둑판 위에 뜬다. 근데 — 왜 좋은지 모르겠다. 승률이 올라간다고? 그래서? 그 다음엔 뭘 두는 건데? AI 추천수를 ‘보는’ 것과 ‘이해하는’ 것 사이에는 간극이 있다. 그 간극을 메우려면 직접 둬봐야 한다. 추천수에 돌을 놓고, 그 뒤로 어떤 변화가 펼쳐지는지 따라가 봐야 한다. 그래서 “놓아보기” 기능을 만들었다. 계속 읽기 →

놓아보기 기능 개발기: AI 추천수를 직접 둬보다 더 읽기"

AI를 만들다 코치를 만들게 된 이유

바둑 AI 프로젝트를 시작한 지 반년이 지났다.그 사이 블로그에 글을 열 개 썼다. MCTS 알고리즘을 설명했고, 자가학습의 한계를 기록했고, KataGo를 연동했고, Streamlit과 씨름했다. 어느새 “늦깎이 바둑코치”라는 앱이 실제로 돌아가고 있다. 이쯤에서 한 번 돌아보려 한다.어떻게 여기까지 왔는지. 그리고 무엇을 배웠는지. 처음엔 AI를 만들고 싶었다 AlphaGo가 이세돌을 이긴 뒤로 바둑을 배우기 시작한 늦깎이다. AI가 바둑을 정복했다는데, 계속 읽기 →

AI를 만들다 코치를 만들게 된 이유 더 읽기"

화이트데이 포토블록 1

화이트데이 선물로 만들어 본 포토블록

화이트데이가 다가오면 늘 비슷한 풍경이 펼쳐진다. 초콜릿 사탕 꽃다발 인형 예쁘긴 하지만, 조금은 익숙한 선물들이다. 그래서 이번에는 조금 다른 걸 만들어 보고 싶었다. “기억을 남기는 선물.” 그 생각으로 작은 블록 하나를 만들어 봤다. 포토블록을 만들게 된 이유 나는 가끔 이런 생각을 한다. 사진은 많은데정작 눈에 보이는 곳에 있는 사진은 거의 없다. 대부분의 사진은 휴대폰 속에 계속 읽기 →

화이트데이 선물로 만들어 본 포토블록 더 읽기"

늦깎이 바둑코치, 실전 테스트 리포트

MVP를 만들고 나면 뿌듯함이 찾아온다. “드디어 돌아간다!” 하지만 진짜 테스트는 그 다음이다. 직접 둔 기보를 올려보는 순간, 개발할 때는 보이지 않던 것들이 쏟아져 나온다. 오로바둑이랑 왜 다르게 생겼지? 첫 번째 위화감은 바둑판 방향이었다. 나는 오로바둑에서 주로 바둑을 둔다. 그런데 KaiGo Coach에서 내 기보를 열면 판이 180도 돌아가 있었다. 백을 잡았을 때 “백 시점”으로 보여주려고 회전시킨 계속 읽기 →

늦깎이 바둑코치, 실전 테스트 리포트 더 읽기"

수순 복기 기능을 만들며 겪은 Streamlit의 함정들

단순한 요구사항 300수짜리 기보가 있다. 1수부터 300수까지 넘겨보고 싶다. 필요한 건 세 가지. 슬라이더 (드래그로 이동) 버튼 (◀ ▶ 하나씩 이동) 키보드 단축키 (방향키로 이동) 간단해 보였다. Streamlit이면 금방 만들겠지. move = st.slider(“수순”, 0, 300, value=0) 슬라이더 완성. 5분 걸렸다. 그리고 지옥이 시작됐다. 첫 번째 함정: 버튼이 슬라이더를 못 바꾼다 “다음 수” 버튼을 만들었다. if 계속 읽기 →

수순 복기 기능을 만들며 겪은 Streamlit의 함정들 더 읽기"