2025-01-11 obsidian 블로그 개편플랜
개요#
모델링은 중요하지 않은 것을 의도적으로 가리거나 제거함으로써 문제를 푸는 단순화된 시각을 제공해주는것에 의미가 있다. 따라서 모든 모델링은 완전하지 않다는 것을 기억해야 한다. 모든 것을 연결하는 것은 오히려 모든 것을 잃어버릴 수 있다. 지금 내 옵시디언을 봐도 그렇다. 데일리 노트가 모든 것을 연결해오고 있었던 참이라 이제 와서 보니 연결당한 문서는 마치 데카르트곱셈이 되어버려 굉장히 비대해진 상태가 되었다. 빽빽하게 늘어진 그래프 뷰를 보며 나는 이 그래프에서 어떤 연관성도 찾을 수 없게 되었다.
블로그를 다시 개편하면서 문서간에 맥락을 어떻게 유지하면 좋을지 생각해보았다. 블로그는 블로그대로, 데일리 노트는 데일리노트대로, 위키는 위키대로 각자의 목적을 이루도록 모델링해야한다. 어느정도는, 꽤 잘 정리가 된 편이다. docs/index 는 모든 위키의 출발지로, 각 주제별로 문서 이름 앞에 ID를 붙여 사용하고 있다. Daily Notes는 내 일기장으로, 일일 브리핑과 데일리 루틴, 오늘의 신념 등을 작성하는 공간이다. 블로그는 아직 제대로 마련이 되어있지 않다. 위키 중에서 개별로 퍼블리시가 될 정도로 완성도가 높은 문서를 블로그로도 내보낼 수는 있겠지만 아직 잘 모르겠다.
데일리노트, 위키, 블로그 각자의 목표가 뚜렷하기 때문에 이것을 서브 도메인 또는 URI로 분리하여 제공할 수 있을 것 같다. 예를 들어 daily.choiwheatley.com
, wiki.choiwheatley.com
이렇게 말이다. 이렇게 각각의 도메인으로 분리하게 되면 서로 다른 테마, 심지어 서로 다른 프레임워크를 가져다 써도 된다. 링크는 어떻게 하냐고? 몰라, nginx가 분배하게 만들어야지 뭐.
Requirements#
URI 구성#
blog.choiwheatley.com
: 블로그 형식을 따른다. 작성한 게시글들이 시간 역순으로 정렬되어 나타난다. 페이지들을 기본적으로는 리스트 뷰로 보여주고, 경우에 따라서 갤러리 뷰로도 출력 가능하면 좋겠다.daily.choiwheatley.com
: 블로그 형식을 따른다. 작성한 게시글들이 시간 역순으로 정렬되어 나타난다.choiwheatley.com/path-to-document
: 모든 페이지의 URI는 고유한 Path를 갖는다. 위키 형식을 따른다.
모든 페이지는 다음 내용을 포함하여야 한다#
- Title
- Body
- relations
- incoming
- outgoing
- frontmatter
- table of contents: 우측 사이드바
- 검색: Title 기준 검색
- preview:
![](<#>)
- image
- other document
- excalidraw
- (OPTIONAL) dataview result (dataview, dataviewjs)
related documents#
double brackets [](<#>)
를 사용하여 0070 Obsidian 💎 이렇게 링크를 만들어낼 수 있어야 한다. 또한, [obsidian](<index/0070 Obsidian 💎.md>)
와 같이 alias도 지원하여야 하며, [0070 Obsidian 💎#커뮤니티](<index/0070 Obsidian 💎.md#커뮤니티>)
와 같이 헤딩 링크도 지원할 수 있어야 한다.
아래와 같이 document preview도 지원해야 한다:
Images#
이미지는 Git LFS에 저장이 된 정적 파일 URL을 사용해야 한다. 현재 (2025-01-13 기준) 내 mkdocs를 사용하고 있는 블로그는 이 이미지를 URL세팅이 안되어있어 모든 이미지가 불러와지지 않는 문제를 안고있다.
Excalidraws#
Excalidraw도 또한 ![allbooks.excalidraw](<assets/allbooks.excalidraw.md>)
와 같이 preview가 지원되어야 한다. 예시:
Code Fence#
거의 모든 코드블럭의 syntax highlighting을 지원해야 한다. Python, C, C++, Javascript, Typescript, Java, Docker, json, shell, toml가 되는지 테스트.
# Python: Simple function to calculate factorial
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
print(factorial(5))
// C: Program to calculate the sum of two numbers
#include <stdio.h>
int main() {
int a, b, sum;
printf("Enter two integers: ");
scanf("%d %d", &a, &b);
sum = a + b;
printf("Sum: %d\n", sum);
return 0;
}
// C++: Example of a simple class
#include <iostream>
using namespace std;
class Animal {
public:
void speak() {
cout << "I am an animal!" << endl;
}
};
int main() {
Animal dog;
dog.speak();
return 0;
}
// JavaScript: Function to reverse a string
function reverseString(str) {
return str.split("").reverse().join("");
}
console.log(reverseString("hello"));
// TypeScript: Example with type annotations
function greet(name: string): string {
return `Hello, ${name}!`;
}
console.log(greet("Alice"));
// Java: Simple HelloWorld program
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
# Dockerfile: Simple setup for a Node.js app
FROM node:16
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["node", "index.js"]
EXPOSE 3000
{
"name": "example",
"version": "1.0.0",
"description": "A simple JSON example",
"dependencies": {
"express": "^4.18.2"
}
}
# TOML: Configuration file example
title = "TOML Example"
[database]
server = "192.168.1.1"
ports = [ 8000, 8001, 8002 ]
enabled = true
# YAML: Sample configuration
version: "3.9"
services:
web:
image: nginx
ports:
- "80:80"
app:
build:
context: .
dockerfile: Dockerfile
# Bash: Script to print current date and time
#!/bin/bash
echo "Current date and time:"
date
Mermaid.js#
CodeFence가 mermaid.js 문법으로 쓰여져 있을 경우, mermaid graph를 렌더링해야한다. 예:
graph LR;
socket --> connect
connect --> id1["send or write"]
connect --> id2["recv or read"]
Search#
Title을 대상으로 Fuzzy Search 기능을 지원해야 한다.
dataview#
dataview만 지원되면 사실 blog, dailynotes를 이걸로 렌더링 하게 만들고 그 페이지를 기본값으로 설정하기만 하면 된다. 문제는 이 dataviewjs 라이브러리는 옵시디언의, 옵시디언을 위한, 옵시디언에 의한 플러그인이기 때문에 CI 또는 동적 렌더링에서 사용하기 굉장히 까다로워 보인다는 점이 있다.
Research#
Obsidian으로 블로그 만들기#Scraps 중에서 Obsidian webpage export 플러그인을 다운받아 export 해보았으나, 파일수가 너무 많아서 중간에 html로 변환하다가 고장이 나버린다.
TODO Obsidian으로 블로그 만들기#Digital Garden Plugin을 시도해볼 예정이다. 도전해보고 그 결과를 작성해보자.