• WITH RECURSIVE로는 답답했던 질문들: 내 노트 그래프에 Datalog 얹기

    지난 글 Datalog, 일상의 도구가 될 수 있을까의 마지막에 이렇게 적어두었습니다. “다음에는 이 고민을 코드로 옮겨볼 생각입니다. 가벼운 Datalog 엔진을 실제 일상적인 문제에 적용해보는 실험을 해보려 합니다.” 이번 글은 그 문장을 실제 코드로 옮겨본 기록입니다. 그때 일상적 유즈케이스 후보로 네 가지를 꼽았습니다. 노트 간 관계, 의존성 분석, 권한 추론, 설정...


  • Datalog에서 '데이터' 대신 '사실(Fact)'이라고 부르는 이유

    Datalog나 Prolog 같은 논리 프로그래밍 언어를 이야기하다 보면, 자연스럽게 “이건 데이터가 아니라 사실(fact)과 규칙(rule)으로 이루어져 있다”고 말하게 됩니다. 그런데 생각해보면 표에 들어있는 값이나 그래프에 들어있는 노드나 똑같은 ‘데이터’로 보일 수 있습니다. 그럼에도 굳이 ‘사실’이라는 다른 단어를 가져와서 쓰는 데에는 시스템의 전제와 관련된 분명한 이유가 있습니다. 이 작은 단어의 차이는 궁극적으로...


  • TBox로 LLM 환각을 줄이는 방법: Datalog Facts 수준의 스키마 제약

    LLM으로 비정형 텍스트에서 구조화된 데이터를 뽑아내다 보면 결국 한 가지 문제가 남습니다. 바로 환각(hallucination)입니다. 모델은 입력에 없는 관계를 만들어내거나, 스스로 새로운 클래스를 정의하거나, 원문에 없는 속성값을 그럴듯하게 채워 넣습니다. 이번 글에서는 이 문제를 프롬프트만으로 억제하는 대신, TBox와 Datalog facts를 이용해 구조적으로 제약하는 방법을 정리해 보았습니다. 완전히 새로운 기법이라기보다는, 온톨로지와 논리...


  • KSUID와 UUIDv7을 동시에 지원하는 경량 UID 생성기: libchronoid 이야기

    Datalog 엔진을 개발하던 중, 목적에 맞는 ID 생성기가 필요해 직접 구현하게 되었습니다. 단순 난수 기반으로 중복만 피하는 것이 아니라, 생성 순서를 보존하면서 DB 정렬 성능에 악영향을 주지 않아야 했습니다. 동시에 외부 시스템과의 호환성도 중요했습니다. 기존 UID 라이브러리들은 C 외부 의존성이 많아 임베디드 환경이나 서버 확장 모듈에 넣기 부담스러웠기 때문에, 결국...


  • 순수 소프트웨어로 구현하는 비디오 스태빌라이저: GStreamer 파이프라인의 이해

    순수 소프트웨어로 구현하는 비디오 스태빌라이저: GStreamer 파이프라인의 이해 왜 소프트웨어 스태빌라이저인가 손으로 촬영한 영상은 항상 떨립니다. 손 떨림, 바람, 움직임—대부분의 영상에는 이런 흔들림이 있죠. 비디오 스태빌라이제이션은 이 문제를 푸는 방법인데, 기술에 따라 세 가지로 나뉩니다. OIS(Optical Image Stabilization)는 렌즈나 센서 자체를 움직여서 보정하고, EIS(Electronic Image Stabilization)는 자이로 센서 데이터를 써서...