9148c358d0
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
7.9 KiB
7.9 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-ssq-questionnaire | SSQ Questionnaire | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
SSQ Questionnaire
매 한 줄
"매 SSQ 는 VR/AR cybersickness 의 standard 측정 — 매 16 symptom × 4-point Likert → 3 subscale (Nausea, Oculomotor, Disorientation) + Total". 매 origin 은 1993 Kennedy et al. (Naval Air Warfare Center, military flight simulator); 매 modern state 는 VR HMD (Quest 4, Vision Pro 2) UX 평가 의 default, VRSQ/CSQ-VR 같은 매 최신 variant 도 등장.
매 핵심
매 SSQ (Kennedy 1993) 구조
- 매 16 항목 — 매 0 (None) ~ 3 (Severe) 의 4-point.
- N (Nausea, 7 items): general discomfort, increased salivation, sweating, nausea, difficulty concentrating, stomach awareness, burping.
- O (Oculomotor, 7 items): general discomfort, fatigue, headache, eyestrain, difficulty focusing, difficulty concentrating, blurred vision.
- D (Disorientation, 7 items): difficulty focusing, nausea, fullness of head, blurred vision, dizzy(eyes open), dizzy(eyes closed), vertigo.
- 매 일부 항목 매 multiple subscale 에 share (overlap).
매 score 공식 (Kennedy 1993)
- N = (Σ N items) × 9.54
- O = (Σ O items) × 7.58
- D = (Σ D items) × 13.92
- TS (Total Score) = (Σ all 16 items) × 3.74
매 modern alternative
- VRSQ (Kim 2018): 9 items, oculomotor + disorientation only (매 nausea 제거 — 매 modern HMD 가 nausea 적게).
- CSQ-VR (Sevinc 2020): 6 items, very short, mobile VR friendly.
- MSSQ (Motion Sickness Susceptibility): 매 baseline trait.
매 응용
- VR app UX QA (pre/post comparison).
- Locomotion 방식 비교 (teleport vs smooth).
- Hardware iteration (refresh rate, FOV).
- Medical (vestibular research, exposure therapy).
💻 패턴
매 SSQ 항목 (Likert 0-3)
SSQ_ITEMS = [
"General discomfort", # N, O
"Fatigue", # O
"Headache", # O
"Eyestrain", # O
"Difficulty focusing", # O, D
"Increased salivation", # N
"Sweating", # N
"Nausea", # N, D
"Difficulty concentrating", # N, O
"Fullness of head", # D
"Blurred vision", # O, D
"Dizzy (eyes open)", # D
"Dizzy (eyes closed)", # D
"Vertigo", # D
"Stomach awareness", # N
"Burping", # N
]
LIKERT = {0: "None", 1: "Slight", 2: "Moderate", 3: "Severe"}
매 scoring (Kennedy 1993, 매 weights)
import numpy as np
# 매 16 items × 3 subscales mask (1 = belongs to subscale)
N_MASK = np.array([1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1]) # 7 items
O_MASK = np.array([1,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0]) # 7 items
D_MASK = np.array([0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0]) # 7 items
def ssq_score(responses: np.ndarray) -> dict:
"""responses: shape (16,), values 0-3"""
N_raw = (responses * N_MASK).sum()
O_raw = (responses * O_MASK).sum()
D_raw = (responses * D_MASK).sum()
TS_raw = N_raw + O_raw + D_raw # 매 with overlap
return {
"Nausea": N_raw * 9.54,
"Oculomotor": O_raw * 7.58,
"Disorientation": D_raw * 13.92,
"Total": TS_raw * 3.74,
}
# 매 example
resp = np.array([1,2,1,2,1,0,0,1,1,0,1,2,1,1,0,0])
print(ssq_score(resp))
# {'Nausea': 19.08, 'Oculomotor': 60.64, 'Disorientation': 97.44, 'Total': 49.79}
매 study protocol (pre/post design)
import pandas as pd
from scipy import stats
# 매 typical study: pre-SSQ baseline → 20min VR → post-SSQ
df = pd.read_csv("ssq_study.csv") # cols: pid, condition, timepoint, item_1..16
scores = df.groupby(["pid","condition","timepoint"]).apply(
lambda g: pd.Series(ssq_score(g.filter(regex="item_").values.flatten()))
).reset_index()
# 매 paired t-test: pre vs post 의 Total
pre = scores.query("timepoint=='pre' and condition=='smooth'")["Total"]
post = scores.query("timepoint=='post' and condition=='smooth'")["Total"]
t, p = stats.ttest_rel(post, pre)
print(f"Δ Total = {(post.mean() - pre.mean()):.1f}, t={t:.2f}, p={p:.4f}")
매 severity benchmark (Kennedy 매 referenced)
def interpret_total(ts: float) -> str:
if ts < 5: return "Negligible (typical baseline)"
if ts < 10: return "Minimal"
if ts < 15: return "Significant"
if ts < 20: return "Concerning"
return "Bad simulator (redesign needed)"
# 매 modern HMD goal: post-session Total < 15.
# 매 Total > 20 → 매 build problem (locomotion, frame drop).
매 collection UI (Unity / Unreal — 매 in-VR survey)
// Unity, 매 in-VR Likert with XR Toolkit
public class SSQItem : MonoBehaviour {
public string symptomText;
public int response = -1; // -1 = not answered
public Action<int> onSelect;
public void Select(int v) {
response = v;
onSelect?.Invoke(v);
}
}
// 매 16 items 순회, 매 0/1/2/3 button
매 VRSQ (매 2018, 9 items, modern HMD recommended)
VRSQ_ITEMS = [
"General discomfort", "Fatigue", "Eyestrain", "Difficulty focusing",
"Headache", "Fullness of head", "Blurred vision",
"Dizzy (eyes closed)", "Vertigo",
]
# 매 Oculomotor + Disorientation 만 — 매 nausea 제외
def vrsq_score(resp):
O = sum(resp[:4]) / (4 * 3) * 100
D = sum(resp[4:]) / (5 * 3) * 100
return {"Oculomotor": O, "Disorientation": D, "Total": (O + D) / 2}
매 Claude Opus 4.7 — 매 open-ended comment 코딩
import anthropic
client = anthropic.Anthropic()
def code_comments(comments: list[str]) -> list[dict]:
"""매 SSQ open-ended 'other discomfort' field → theme tag."""
msg = client.messages.create(
model="claude-opus-4-7",
max_tokens=2048,
system=(
"Tag each VR-sickness participant comment with: "
"1+ tags from [oculomotor, nausea, disorientation, "
"thermal, audio, latency, controls, other]. "
"Output JSON list."
),
messages=[{"role": "user",
"content": "\n".join(f"{i+1}. {c}" for i,c in enumerate(comments))}],
)
return msg.content[0].text # 매 JSON parse downstream
매 결정 기준
| 상황 | Approach |
|---|---|
| 매 standard VR study | SSQ (16 items, Kennedy 1993) |
| 매 modern HMD, 매 short session | VRSQ (9 items) |
| 매 mobile VR, 매 minimal | CSQ-VR (6 items) |
| 매 longitudinal (매 매일) | SSQ pre/post + MSSQ baseline |
| 매 medical | SSQ + objective (postural sway, HRV) |
기본값: pre/post SSQ 16-item + open-ended "other" 항목, MSSQ baseline at recruitment.
🔗 Graph
- 부모: Cybersickness
🤖 LLM 활용
언제: 매 open-ended free-text 의 thematic coding. 매 multi-language SSQ translation review. 언제 X: 매 score 계산 자체 — 매 deterministic. 매 LLM 의 baseline 추정 위험.
❌ 안티패턴
- Single post-only: 매 baseline 없이 — 매 individual difference confound.
- Wrong weights: 매 weight 잘못 적용 (매 9.54/7.58/13.92).
- Long session before SSQ: 매 30+ min 후 측정 — 매 fatigue confound.
- Item omit: 매 16 → 12 임의 제거 — 매 weight invalid.
- TS-only report: 매 subscale 분리 안 함 — 매 cause 못 봄.
🧪 검증 / 중복
- Verified (Kennedy et al. 1993 IJAP, Kim et al. 2018 VRSQ, Stanney "Handbook of VR" Ch.32).
- 신뢰도 A.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — Kennedy 1993 SSQ + VRSQ + scoring code |